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 LColor::color color() const;
214 Language const * language() const;
217 bool isRightToLeft() const;
220 bool isVisibleRightToLeft() const;
223 LyXFont & setFamily(LyXFont::FONT_FAMILY f);
225 LyXFont & setSeries(LyXFont::FONT_SERIES s);
227 LyXFont & setShape(LyXFont::FONT_SHAPE s);
229 LyXFont & setSize(LyXFont::FONT_SIZE s);
231 LyXFont & setEmph(LyXFont::FONT_MISC_STATE e);
233 LyXFont & setUnderbar(LyXFont::FONT_MISC_STATE u);
235 LyXFont & setNoun(LyXFont::FONT_MISC_STATE n);
237 LyXFont & setLatex(LyXFont::FONT_MISC_STATE l);
239 LyXFont & setColor(LColor::color c);
241 LyXFont & setLanguage(Language const * l);
243 /// Set family after LyX text format
244 LyXFont & setLyXFamily(string const &);
246 /// Set series after LyX text format
247 LyXFont & setLyXSeries(string const &);
249 /// Set shape after LyX text format
250 LyXFont & setLyXShape(string const &);
252 /// Set size after LyX text format
253 LyXFont & setLyXSize(string const &);
255 /// Returns misc flag after LyX text format
256 LyXFont::FONT_MISC_STATE setLyXMisc(string const &);
258 /// Sets color after LyX text format
259 LyXFont & setLyXColor(string const &);
261 /// Sets size after GUI name
262 LyXFont & setGUISize(string const &);
264 /// Returns size of font in LaTeX text notation
265 string const latexSize() const;
267 /** Updates font settings according to request.
268 If an attribute is IGNORE, the attribute is left as it is.
269 When toggleall = true, all properties that matches the font in use
270 will have the effect that the properties is reset to the
271 default. If we have a text that is TYPEWRITER_FAMILY, and is
272 update()'ed with TYPEWRITER_FAMILY, the operation will be as if
273 a INHERIT_FAMILY was asked for. This is necessary for the
274 toggle-user-defined-style button on the toolbar.
276 void update(LyXFont const & newfont,
277 Language const * default_lang,
278 bool toggleall = false);
280 /** Reduce font to fall back to template where possible.
281 Equal fields are reduced to INHERIT */
282 void reduce(LyXFont const & tmplt);
284 /// Realize font from a template (INHERIT are realized)
285 LyXFont & realize(LyXFont const & tmplt);
287 /// Is a given font fully resolved?
288 bool resolved() const;
290 /// Read a font specification from LyXLex. Used for layout files.
291 LyXFont & lyxRead(LyXLex &);
293 /// Writes the changes from this font to orgfont in .lyx format in file
294 void lyxWriteChanges(LyXFont const & orgfont, 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);
323 bool operator!=(LyXFont const & font1, LyXFont const & font2);
325 /// compares two fonts, ignoring the setting of the Latex part.
326 bool equalExceptLatex(LyXFont const &) const;
328 /// Converts logical attributes to concrete shape attribute
329 LyXFont::FONT_SHAPE realShape() const;
334 bool operator==(FontBits const & fb1) const;
336 bool operator!=(FontBits const & fb1) const;
348 FONT_MISC_STATE emph;
350 FONT_MISC_STATE underbar;
352 FONT_MISC_STATE noun;
354 FONT_MISC_STATE latex;
359 Language const * lang;
362 static FontBits sane;
365 static FontBits inherit;
368 static FontBits ignore;
370 /// Updates a misc setting according to request
371 LyXFont::FONT_MISC_STATE setMisc(LyXFont::FONT_MISC_STATE newfont,
372 LyXFont::FONT_MISC_STATE org);
376 std::ostream & operator<<(std::ostream &, LyXFont::FONT_MISC_STATE);
380 bool operator==(LyXFont const & font1, LyXFont const & font2) {
381 return font1.bits == font2.bits &&
382 font1.lang == font2.lang;
387 bool operator!=(LyXFont const & font1, LyXFont const & font2) {
388 return !(font1 == font2);
396 lang = default_language;
401 LyXFont::LyXFont(LyXFont const & x)
409 LyXFont::LyXFont(LyXFont::FONT_INIT1)
412 lang = default_language;
417 LyXFont::LyXFont(LyXFont::FONT_INIT2)
420 lang = ignore_language;
425 LyXFont::LyXFont(LyXFont::FONT_INIT3)
428 lang = default_language;
433 LyXFont::LyXFont(LyXFont::FONT_INIT1, Language const * l)
441 LyXFont::LyXFont(LyXFont::FONT_INIT2, Language const * l)
449 LyXFont::LyXFont(LyXFont::FONT_INIT3, Language const * l)
457 LyXFont & LyXFont::operator=(LyXFont const & x)
466 LyXFont::FONT_FAMILY LyXFont::family() const
473 LyXFont::FONT_SERIES LyXFont::series() const
480 LyXFont::FONT_SHAPE LyXFont::shape() const
487 LyXFont::FONT_SIZE LyXFont::size() const
494 LyXFont::FONT_MISC_STATE LyXFont::emph() const
501 LyXFont::FONT_MISC_STATE LyXFont::underbar() const
503 return bits.underbar;
508 LyXFont::FONT_MISC_STATE LyXFont::noun() const
515 LyXFont::FONT_MISC_STATE LyXFont::latex() const
522 LColor::color LyXFont::color() const
529 Language const * LyXFont::language() const
536 bool LyXFont::isRightToLeft() const
538 return lang->RightToLeft();
543 bool LyXFont::isVisibleRightToLeft() const
545 return (lang->RightToLeft() && latex() != ON);
550 LyXFont & LyXFont::setFamily(LyXFont::FONT_FAMILY f)
558 LyXFont & LyXFont::setSeries(LyXFont::FONT_SERIES s)
566 LyXFont & LyXFont::setShape(LyXFont::FONT_SHAPE s)
574 LyXFont & LyXFont::setSize(LyXFont::FONT_SIZE s)
582 LyXFont & LyXFont::setEmph(LyXFont::FONT_MISC_STATE e)
590 LyXFont & LyXFont::setUnderbar(LyXFont::FONT_MISC_STATE u)
598 LyXFont & LyXFont::setNoun(LyXFont::FONT_MISC_STATE n)
605 LyXFont & LyXFont::setLatex(LyXFont::FONT_MISC_STATE l)
613 LyXFont & LyXFont::setColor(LColor::color c)
621 LyXFont & LyXFont::setLanguage(Language const * l)