2 /* This file is part of
3 * ======================================================
5 * LyX, The Document Processor
7 * Copyright 1995 Matthias Ettrich
8 * Copyright 1995-2001 The LyX Team.
10 * ====================================================== */
32 /** The value INHERIT_* means that the font attribute is
33 inherited from the layout. In the case of layout fonts, the
34 attribute is inherited from the default font.
35 The value IGNORE_* is used with LyXFont::update() when the
36 attribute should not be changed.
40 ROMAN_FAMILY, // fontstruct rely on this to be 0
66 NUM_FAMILIES = INHERIT_FAMILY
72 MEDIUM_SERIES, // fontstruct rely on this to be 0
84 UP_SHAPE, // fontstruct rely on this to be 0
100 SIZE_TINY, // fontstruct rely on this to be 0
129 /// Used for emph, underbar, noun and latex toggles
130 enum FONT_MISC_STATE {
143 /// Trick to overload constructor and make it megafast
162 /// Shortcut initialization
164 LyXFont(LyXFont::FONT_INIT1);
165 /// Shortcut initialization
167 LyXFont(LyXFont::FONT_INIT2);
168 /// Shortcut initialization
170 LyXFont(LyXFont::FONT_INIT3);
171 /// Shortcut initialization
172 LyXFont(LyXFont::FONT_INIT1, Language const * l);
173 /// Shortcut initialization
174 LyXFont(LyXFont::FONT_INIT2, Language const * l);
175 /// Shortcut initialization
176 LyXFont(LyXFont::FONT_INIT3, Language const * l);
178 /// Decreases font size by one
181 /// Increases font size by one
185 FONT_FAMILY family() const;
188 FONT_SERIES series() const;
191 FONT_SHAPE shape() const;
194 FONT_SIZE size() const;
197 FONT_MISC_STATE emph() const;
200 FONT_MISC_STATE underbar() const;
203 FONT_MISC_STATE noun() const;
206 FONT_MISC_STATE number() const;
209 LColor::color color() const;
212 Language const * language() const;
215 bool isRightToLeft() const;
218 bool isVisibleRightToLeft() const;
221 bool isSymbolFont() const;
224 LyXFont & setFamily(LyXFont::FONT_FAMILY f);
226 LyXFont & setSeries(LyXFont::FONT_SERIES s);
228 LyXFont & setShape(LyXFont::FONT_SHAPE s);
230 LyXFont & setSize(LyXFont::FONT_SIZE s);
232 LyXFont & setEmph(LyXFont::FONT_MISC_STATE e);
234 LyXFont & setUnderbar(LyXFont::FONT_MISC_STATE u);
236 LyXFont & setNoun(LyXFont::FONT_MISC_STATE n);
238 LyXFont & setNumber(LyXFont::FONT_MISC_STATE n);
240 LyXFont & setColor(LColor::color c);
242 LyXFont & setLanguage(Language const * l);
244 /// Set family after LyX text format
245 LyXFont & setLyXFamily(string const &);
247 /// Set series after LyX text format
248 LyXFont & setLyXSeries(string const &);
250 /// Set shape after LyX text format
251 LyXFont & setLyXShape(string const &);
253 /// Set size after LyX text format
254 LyXFont & setLyXSize(string const &);
256 /// Returns misc flag after LyX text format
257 LyXFont::FONT_MISC_STATE setLyXMisc(string const &);
259 /// Sets color after LyX text format
260 LyXFont & setLyXColor(string const &);
262 /// Returns size of font in LaTeX text notation
263 string const latexSize() const;
265 /** Updates font settings according to request.
266 If an attribute is IGNORE, the attribute is left as it is.
267 When toggleall = true, all properties that matches the font in use
268 will have the effect that the properties is reset to the
269 default. If we have a text that is TYPEWRITER_FAMILY, and is
270 update()'ed with TYPEWRITER_FAMILY, the operation will be as if
271 a INHERIT_FAMILY was asked for. This is necessary for the
272 toggle-user-defined-style button on the toolbar.
274 void update(LyXFont const & newfont,
275 Language const * default_lang,
276 bool toggleall = false);
278 /** Reduce font to fall back to template where possible.
279 Equal fields are reduced to INHERIT */
280 void reduce(LyXFont const & tmplt);
282 /// Realize font from a template (INHERIT are realized)
283 #ifndef INHERIT_LANGUAGE
284 LyXFont & realize(LyXFont const & tmplt);
286 LyXFont & realize(LyXFont const & tmplt, Language const * language);
288 /// Is a given font fully resolved?
289 bool resolved() const;
291 /// Read a font specification from LyXLex. Used for layout files.
292 LyXFont & lyxRead(LyXLex &);
294 /// Writes the changes from this font to orgfont in .lyx format in file
295 #ifndef INHERIT_LANGUAGE
296 void lyxWriteChanges(LyXFont const & orgfont, std::ostream &) const;
298 void lyxWriteChanges(LyXFont const & orgfont, Language const * doclang,
299 std::ostream &) const;
302 /** Writes the head of the LaTeX needed to change to this font.
303 Writes to string, the head of the LaTeX needed to change
304 to this font. Returns number of chars written. Base is the
305 font state active now.
307 int latexWriteStartChanges(std::ostream &, LyXFont const & base,
308 LyXFont const & prev) const;
310 /** Writes tha tail of the LaTeX needed to chagne to this font.
311 Returns number of chars written. Base is the font state we want
314 int latexWriteEndChanges(std::ostream &, LyXFont const & base,
315 LyXFont const & next) const;
317 /// Build GUI description of font state
318 string const stateText(BufferParams * params) const;
321 LColor::color realColor() const;
325 bool operator==(LyXFont const & font1, LyXFont const & font2);
327 /// Converts logical attributes to concrete shape attribute
328 LyXFont::FONT_SHAPE realShape() const;
333 bool operator==(FontBits const & fb1) const;
335 bool operator!=(FontBits const & fb1) const;
347 FONT_MISC_STATE emph;
349 FONT_MISC_STATE underbar;
351 FONT_MISC_STATE noun;
353 FONT_MISC_STATE number;
360 Language const * lang;
363 static FontBits sane;
366 static FontBits inherit;
369 static FontBits ignore;
371 /// Updates a misc setting according to request
372 LyXFont::FONT_MISC_STATE setMisc(LyXFont::FONT_MISC_STATE newfont,
373 LyXFont::FONT_MISC_STATE org);
378 LyXFont::FONT_SHAPE LyXFont::shape() const
385 LyXFont::FONT_FAMILY LyXFont::family() const
392 LyXFont::FONT_SERIES LyXFont::series() const
399 LyXFont::FONT_SIZE LyXFont::size() const
406 LyXFont::FONT_MISC_STATE LyXFont::emph() const
413 LyXFont::FONT_MISC_STATE LyXFont::noun() const
420 bool LyXFont::isSymbolFont() const
423 case LyXFont::SYMBOL_FAMILY:
424 case LyXFont::CMSY_FAMILY:
425 case LyXFont::CMM_FAMILY:
426 case LyXFont::CMEX_FAMILY:
427 case LyXFont::MSA_FAMILY:
428 case LyXFont::MSB_FAMILY:
436 std::ostream & operator<<(std::ostream &, LyXFont::FONT_MISC_STATE);
440 bool operator==(LyXFont const & font1, LyXFont const & font2)
442 return font1.bits == font2.bits &&
443 font1.lang == font2.lang;
448 bool operator!=(LyXFont const & font1, LyXFont const & font2)
450 return !(font1 == font2);