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 MEDIUM_SERIES, // fontstruct rely on this to be 0
78 UP_SHAPE, // fontstruct rely on this to be 0
94 SIZE_TINY, // fontstruct rely on this to be 0
123 /// Used for emph, underbar, noun and latex toggles
124 enum FONT_MISC_STATE {
137 /// Trick to overload constructor and make it megafast
156 /// Shortcut initialization
158 LyXFont(LyXFont::FONT_INIT1);
159 /// Shortcut initialization
161 LyXFont(LyXFont::FONT_INIT2);
162 /// Shortcut initialization
164 LyXFont(LyXFont::FONT_INIT3);
165 /// Shortcut initialization
166 LyXFont(LyXFont::FONT_INIT1, Language const * l);
167 /// Shortcut initialization
168 LyXFont(LyXFont::FONT_INIT2, Language const * l);
169 /// Shortcut initialization
170 LyXFont(LyXFont::FONT_INIT3, Language const * l);
172 /// Decreases font size by one
175 /// Increases font size by one
179 FONT_FAMILY family() const;
182 FONT_SERIES series() const;
185 FONT_SHAPE shape() const;
188 FONT_SIZE size() const;
191 FONT_MISC_STATE emph() const;
194 FONT_MISC_STATE underbar() const;
197 FONT_MISC_STATE noun() const;
200 FONT_MISC_STATE number() const;
203 LColor::color color() const;
206 Language const * language() const;
209 bool isRightToLeft() const;
212 bool isVisibleRightToLeft() const;
215 bool isSymbolFont() const;
218 LyXFont & setFamily(LyXFont::FONT_FAMILY f);
220 LyXFont & setSeries(LyXFont::FONT_SERIES s);
222 LyXFont & setShape(LyXFont::FONT_SHAPE s);
224 LyXFont & setSize(LyXFont::FONT_SIZE s);
226 LyXFont & setEmph(LyXFont::FONT_MISC_STATE e);
228 LyXFont & setUnderbar(LyXFont::FONT_MISC_STATE u);
230 LyXFont & setNoun(LyXFont::FONT_MISC_STATE n);
232 LyXFont & setNumber(LyXFont::FONT_MISC_STATE n);
234 LyXFont & setColor(LColor::color c);
236 LyXFont & setLanguage(Language const * l);
238 /// Set family after LyX text format
239 LyXFont & setLyXFamily(string const &);
241 /// Set series after LyX text format
242 LyXFont & setLyXSeries(string const &);
244 /// Set shape after LyX text format
245 LyXFont & setLyXShape(string const &);
247 /// Set size after LyX text format
248 LyXFont & setLyXSize(string const &);
250 /// Returns misc flag after LyX text format
251 LyXFont::FONT_MISC_STATE setLyXMisc(string const &);
253 /// Sets color after LyX text format
254 LyXFont & setLyXColor(string const &);
256 /// Returns size of font in LaTeX text notation
257 string const latexSize() const;
259 /** Updates font settings according to request.
260 If an attribute is IGNORE, the attribute is left as it is.
261 When toggleall = true, all properties that matches the font in use
262 will have the effect that the properties is reset to the
263 default. If we have a text that is TYPEWRITER_FAMILY, and is
264 update()'ed with TYPEWRITER_FAMILY, the operation will be as if
265 a INHERIT_FAMILY was asked for. This is necessary for the
266 toggle-user-defined-style button on the toolbar.
268 void update(LyXFont const & newfont,
269 Language const * default_lang,
270 bool toggleall = false);
272 /** Reduce font to fall back to template where possible.
273 Equal fields are reduced to INHERIT */
274 void reduce(LyXFont const & tmplt);
276 /// Realize font from a template (INHERIT are realized)
277 #ifndef INHERIT_LANGUAGE
278 LyXFont & realize(LyXFont const & tmplt);
280 LyXFont & realize(LyXFont const & tmplt, Language const * language);
282 /// Is a given font fully resolved?
283 bool resolved() const;
285 /// Read a font specification from LyXLex. Used for layout files.
286 LyXFont & lyxRead(LyXLex &);
288 /// Writes the changes from this font to orgfont in .lyx format in file
289 #ifndef INHERIT_LANGUAGE
290 void lyxWriteChanges(LyXFont const & orgfont, std::ostream &) const;
292 void lyxWriteChanges(LyXFont const & orgfont, Language const * doclang,
293 std::ostream &) const;
296 /** Writes the head of the LaTeX needed to change to this font.
297 Writes to string, the head of the LaTeX needed to change
298 to this font. Returns number of chars written. Base is the
299 font state active now.
301 int latexWriteStartChanges(std::ostream &, LyXFont const & base,
302 LyXFont const & prev) const;
304 /** Writes tha tail of the LaTeX needed to chagne to this font.
305 Returns number of chars written. Base is the font state we want
308 int latexWriteEndChanges(std::ostream &, LyXFont const & base,
309 LyXFont const & next) const;
311 /// Build GUI description of font state
312 string const stateText(BufferParams * params) const;
315 LColor::color realColor() const;
319 bool operator==(LyXFont const & font1, LyXFont const & font2);
321 /// Converts logical attributes to concrete shape attribute
322 LyXFont::FONT_SHAPE realShape() const;
327 bool operator==(FontBits const & fb1) const;
329 bool operator!=(FontBits const & fb1) const;
341 FONT_MISC_STATE emph;
343 FONT_MISC_STATE underbar;
345 FONT_MISC_STATE noun;
347 FONT_MISC_STATE number;
354 Language const * lang;
357 static FontBits sane;
360 static FontBits inherit;
363 static FontBits ignore;
365 /// Updates a misc setting according to request
366 LyXFont::FONT_MISC_STATE setMisc(LyXFont::FONT_MISC_STATE newfont,
367 LyXFont::FONT_MISC_STATE org);
372 LyXFont::FONT_SHAPE LyXFont::shape() const
380 : bits(sane), lang(default_language)
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:
437 std::ostream & operator<<(std::ostream &, LyXFont::FONT_MISC_STATE);
441 bool operator==(LyXFont const & font1, LyXFont const & font2)
443 return font1.bits == font2.bits &&
444 font1.lang == font2.lang;
449 bool operator!=(LyXFont const & font1, LyXFont const & font2)
451 return !(font1 == font2);