2 /* This file is part of
3 * ======================================================
5 * LyX, The Document Processor
7 * Copyright 1995 Matthias Ettrich
8 * Copyright 1995-2000 The LyX Team.
10 * ====================================================== */
25 // It might happen that locale.h defines ON and OFF. This is not good
26 // for us, since we use these names below. But of course this is due
27 // to some old compilers. Than is broken when it comes to C++ scoping.
28 #include "gettext.h" // so that we are sure tht it won't be included
44 /** The value INHERIT_* means that the font attribute is
45 inherited from the layout. In the case of layout fonts, the
46 attribute is inherited from the default font.
47 The value IGNORE_* is used with LyXFont::update() when the
48 attribute should not be changed.
52 ROMAN_FAMILY, // fontstruct rely on this to be 0
68 MEDIUM_SERIES, // fontstruct rely on this to be 0
80 UP_SHAPE, // fontstruct rely on this to be 0
96 SIZE_TINY, // fontstruct rely on this to be 0
125 /// Used for emph, underbar, noun and latex toggles
126 enum FONT_MISC_STATE {
139 /// Trick to overload constructor and make it megafast
158 // LyXFont x(LyXFont ...) and LyXFont x = LyXFont ...
159 LyXFont(LyXFont const & x);
161 /// Shortcut initialization
163 LyXFont(LyXFont::FONT_INIT1);
164 /// Shortcut initialization
166 LyXFont(LyXFont::FONT_INIT2);
167 /// Shortcut initialization
169 LyXFont(LyXFont::FONT_INIT3);
170 /// Shortcut initialization
171 LyXFont(LyXFont::FONT_INIT1, Language const * l);
172 /// Shortcut initialization
173 LyXFont(LyXFont::FONT_INIT2, Language const * l);
174 /// Shortcut initialization
175 LyXFont(LyXFont::FONT_INIT3, Language const * l);
177 /// LyXFont x, y; x = y;
178 LyXFont & operator=(LyXFont const & x);
180 /// Decreases font size by one
183 /// Increases font size by one
187 FONT_FAMILY family() const;
190 FONT_SERIES series() const;
193 FONT_SHAPE shape() const;
196 FONT_SIZE size() const;
199 FONT_MISC_STATE emph() const;
202 FONT_MISC_STATE underbar() const;
205 FONT_MISC_STATE noun() const;
208 FONT_MISC_STATE latex() const;
211 FONT_MISC_STATE number() const;
214 LColor::color color() const;
217 Language const * language() const;
220 bool isRightToLeft() const;
223 bool isVisibleRightToLeft() const;
226 LyXFont & setFamily(LyXFont::FONT_FAMILY f);
228 LyXFont & setSeries(LyXFont::FONT_SERIES s);
230 LyXFont & setShape(LyXFont::FONT_SHAPE s);
232 LyXFont & setSize(LyXFont::FONT_SIZE s);
234 LyXFont & setEmph(LyXFont::FONT_MISC_STATE e);
236 LyXFont & setUnderbar(LyXFont::FONT_MISC_STATE u);
238 LyXFont & setNoun(LyXFont::FONT_MISC_STATE n);
240 LyXFont & setLatex(LyXFont::FONT_MISC_STATE l);
242 LyXFont & setNumber(LyXFont::FONT_MISC_STATE n);
244 LyXFont & setColor(LColor::color c);
246 LyXFont & setLanguage(Language const * l);
248 /// Set family after LyX text format
249 LyXFont & setLyXFamily(string const &);
251 /// Set series after LyX text format
252 LyXFont & setLyXSeries(string const &);
254 /// Set shape after LyX text format
255 LyXFont & setLyXShape(string const &);
257 /// Set size after LyX text format
258 LyXFont & setLyXSize(string const &);
260 /// Returns misc flag after LyX text format
261 LyXFont::FONT_MISC_STATE setLyXMisc(string const &);
263 /// Sets color after LyX text format
264 LyXFont & setLyXColor(string const &);
266 /// Sets size after GUI name
267 LyXFont & setGUISize(string const &);
269 /// Returns size of font in LaTeX text notation
270 string const latexSize() const;
272 /** Updates font settings according to request.
273 If an attribute is IGNORE, the attribute is left as it is.
274 When toggleall = true, all properties that matches the font in use
275 will have the effect that the properties is reset to the
276 default. If we have a text that is TYPEWRITER_FAMILY, and is
277 update()'ed with TYPEWRITER_FAMILY, the operation will be as if
278 a INHERIT_FAMILY was asked for. This is necessary for the
279 toggle-user-defined-style button on the toolbar.
281 void update(LyXFont const & newfont,
282 Language const * default_lang,
283 bool toggleall = false);
285 /** Reduce font to fall back to template where possible.
286 Equal fields are reduced to INHERIT */
287 void reduce(LyXFont const & tmplt);
289 /// Realize font from a template (INHERIT are realized)
290 LyXFont & realize(LyXFont const & tmplt);
292 /// Is a given font fully resolved?
293 bool resolved() const;
295 /// Read a font specification from LyXLex. Used for layout files.
296 LyXFont & lyxRead(LyXLex &);
298 /// Writes the changes from this font to orgfont in .lyx format in file
299 void lyxWriteChanges(LyXFont const & orgfont, std::ostream &) const;
301 /** Writes the head of the LaTeX needed to change to this font.
302 Writes to string, the head of the LaTeX needed to change
303 to this font. Returns number of chars written. Base is the
304 font state active now.
306 int latexWriteStartChanges(std::ostream &, LyXFont const & base,
307 LyXFont const & prev) const;
309 /** Writes tha tail of the LaTeX needed to chagne to this font.
310 Returns number of chars written. Base is the font state we want
313 int latexWriteEndChanges(std::ostream &, LyXFont const & base,
314 LyXFont const & next) const;
316 /// Build GUI description of font state
317 string const stateText(BufferParams * params) const;
320 LColor::color realColor() const;
324 bool operator==(LyXFont const & font1, LyXFont const & font2);
328 bool operator!=(LyXFont const & font1, LyXFont const & font2);
330 /// compares two fonts, ignoring the setting of the Latex part.
331 bool equalExceptLatex(LyXFont const &) const;
333 /// Converts logical attributes to concrete shape attribute
334 LyXFont::FONT_SHAPE realShape() const;
339 bool operator==(FontBits const & fb1) const;
341 bool operator!=(FontBits const & fb1) const;
353 FONT_MISC_STATE emph;
355 FONT_MISC_STATE underbar;
357 FONT_MISC_STATE noun;
359 FONT_MISC_STATE latex;
364 Language const * lang;
366 FONT_MISC_STATE number_;
369 static FontBits sane;
372 static FontBits inherit;
375 static FontBits ignore;
377 /// Updates a misc setting according to request
378 LyXFont::FONT_MISC_STATE setMisc(LyXFont::FONT_MISC_STATE newfont,
379 LyXFont::FONT_MISC_STATE org);
383 std::ostream & operator<<(std::ostream &, LyXFont::FONT_MISC_STATE);
387 bool operator==(LyXFont const & font1, LyXFont const & font2) {
388 return font1.bits == font2.bits &&
389 font1.lang == font2.lang &&
390 font1.number_ == font2.number_;
395 bool operator!=(LyXFont const & font1, LyXFont const & font2) {
396 return !(font1 == font2);
404 lang = default_language;
410 LyXFont::LyXFont(LyXFont const & x)
419 LyXFont::LyXFont(LyXFont::FONT_INIT1)
422 lang = default_language;
428 LyXFont::LyXFont(LyXFont::FONT_INIT2)
431 lang = ignore_language;
437 LyXFont::LyXFont(LyXFont::FONT_INIT3)
440 lang = default_language;
446 LyXFont::LyXFont(LyXFont::FONT_INIT1, Language const * l)
455 LyXFont::LyXFont(LyXFont::FONT_INIT2, Language const * l)
464 LyXFont::LyXFont(LyXFont::FONT_INIT3, Language const * l)
473 LyXFont & LyXFont::operator=(LyXFont const & x)
483 LyXFont::FONT_FAMILY LyXFont::family() const
490 LyXFont::FONT_SERIES LyXFont::series() const
497 LyXFont::FONT_SHAPE LyXFont::shape() const
504 LyXFont::FONT_SIZE LyXFont::size() const
511 LyXFont::FONT_MISC_STATE LyXFont::emph() const
518 LyXFont::FONT_MISC_STATE LyXFont::underbar() const
520 return bits.underbar;
525 LyXFont::FONT_MISC_STATE LyXFont::noun() const
532 LyXFont::FONT_MISC_STATE LyXFont::latex() const
539 LColor::color LyXFont::color() const
546 Language const * LyXFont::language() const
553 LyXFont::FONT_MISC_STATE LyXFont::number() const
560 bool LyXFont::isRightToLeft() const
562 return lang->RightToLeft();
567 bool LyXFont::isVisibleRightToLeft() const
569 return (lang->RightToLeft() && latex() != ON && number() != ON);
574 LyXFont & LyXFont::setFamily(LyXFont::FONT_FAMILY f)
582 LyXFont & LyXFont::setSeries(LyXFont::FONT_SERIES s)
590 LyXFont & LyXFont::setShape(LyXFont::FONT_SHAPE s)
598 LyXFont & LyXFont::setSize(LyXFont::FONT_SIZE s)
606 LyXFont & LyXFont::setEmph(LyXFont::FONT_MISC_STATE e)
614 LyXFont & LyXFont::setUnderbar(LyXFont::FONT_MISC_STATE u)
622 LyXFont & LyXFont::setNoun(LyXFont::FONT_MISC_STATE n)
629 LyXFont & LyXFont::setLatex(LyXFont::FONT_MISC_STATE l)
637 LyXFont & LyXFont::setColor(LColor::color c)
645 LyXFont & LyXFont::setLanguage(Language const * l)
653 LyXFont & LyXFont::setNumber(LyXFont::FONT_MISC_STATE n)