]> git.lyx.org Git - lyx.git/blobdiff - src/Font.cpp
grammar
[lyx.git] / src / Font.cpp
index 76a716da3ac66beff9bf6d24d92fae6b3acf3665..4bf3040cd7fb8af60765f3a66266d4b71c4ff801 100644 (file)
@@ -3,10 +3,10 @@
  * This file is part of LyX, the document processor.
  * Licence details can be found in the file COPYING.
  *
- * \author Lars Gullik Bjønnes
+ * \author Lars Gullik Bjønnes
  * \author Jean-Marc Lasgouttes
  * \author Angus Leeming
- * \author André Pönitz
+ * \author André Pönitz
  * \author Dekel Tsur
  *
  * Full author contact details are available in file CREDITS.
@@ -17,7 +17,7 @@
 #include "Font.h"
 
 #include "BufferParams.h" // stateText
-#include "Color.h"
+#include "ColorSet.h"
 #include "Encoding.h"
 #include "Language.h"
 #include "LaTeXFeatures.h"
@@ -108,7 +108,7 @@ char const * LaTeXSizeNames[14] =
 
 
 Font::Font(FontInfo bits, Language const * l)
-       : bits_(bits), lang_(l), open_encoding_(false)
+       : bits_(bits), lang_(l), misspelled_(false), open_encoding_(false)
 {
        if (!lang_)
                lang_ = default_language;
@@ -175,6 +175,15 @@ docstring const stateText(FontInfo const & f)
        if (f.underbar() != FONT_INHERIT)
                os << bformat(_("Underline %1$s, "),
                              _(GUIMiscNames[f.underbar()]));
+       if (f.strikeout() != FONT_INHERIT)
+               os << bformat(_("Strikeout %1$s, "),
+                             _(GUIMiscNames[f.strikeout()]));
+       if (f.uuline() != FONT_INHERIT)
+               os << bformat(_("Double underline %1$s, "),
+                             _(GUIMiscNames[f.uuline()]));
+       if (f.uwave() != FONT_INHERIT)
+               os << bformat(_("Wavy underline %1$s, "),
+                             _(GUIMiscNames[f.uwave()]));
        if (f.noun() != FONT_INHERIT)
                os << bformat(_("Noun %1$s, "),
                              _(GUIMiscNames[f.noun()]));
@@ -329,6 +338,12 @@ FontInfo lyxRead(Lexer & lex, FontInfo const & fi)
 
                        if (ttok == "no_bar") {
                                f.setUnderbar(FONT_OFF);
+                       } else if (ttok == "no_strikeout") {
+                               f.setStrikeout(FONT_OFF);
+                       } else if (ttok == "no_uuline") {
+                               f.setUuline(FONT_OFF);
+                       } else if (ttok == "no_uwave") {
+                               f.setUwave(FONT_OFF);
                        } else if (ttok == "no_emph") {
                                f.setEmph(FONT_OFF);
                        } else if (ttok == "no_noun") {
@@ -337,6 +352,12 @@ FontInfo lyxRead(Lexer & lex, FontInfo const & fi)
                                f.setEmph(FONT_ON);
                        } else if (ttok == "underbar") {
                                f.setUnderbar(FONT_ON);
+                       } else if (ttok == "strikeout") {
+                               f.setStrikeout(FONT_ON);
+                       } else if (ttok == "uuline") {
+                               f.setUuline(FONT_ON);
+                       } else if (ttok == "uwave") {
+                               f.setUwave(FONT_ON);
                        } else if (ttok == "noun") {
                                f.setNoun(FONT_ON);
                        } else {
@@ -388,6 +409,15 @@ void Font::lyxWriteChanges(Font const & orgfont,
                break;
                }
        }
+       if (orgfont.fontInfo().strikeout() != bits_.strikeout()) {
+               os << "\\strikeout " << LyXMiscNames[bits_.strikeout()] << "\n";
+       }
+       if (orgfont.fontInfo().uuline() != bits_.uuline()) {
+               os << "\\uuline " << LyXMiscNames[bits_.uuline()] << "\n";
+       }
+       if (orgfont.fontInfo().uwave() != bits_.uwave()) {
+               os << "\\uwave " << LyXMiscNames[bits_.uwave()] << "\n";
+       }
        if (orgfont.fontInfo().noun() != bits_.noun()) {
                os << "\\noun " << LyXMiscNames[bits_.noun()] << "\n";
        }
@@ -522,8 +552,27 @@ int Font::latexWriteStartChanges(odocstream & os, BufferParams const & bparams,
                env = true; //We have opened a new environment
        }
        if (f.underbar() == FONT_ON) {
-               os << "\\underbar{";
+               os << "\\uline{";
+               count += 10;
+               runparams.inulemcmd = true;
+               env = true; //We have opened a new environment
+       }
+       if (f.strikeout() == FONT_ON) {
+               os << "\\sout{";
+               count += 9;
+               runparams.inulemcmd = true;
+               env = true; //We have opened a new environment
+       }
+       if (f.uuline() == FONT_ON) {
+               os << "\\uuline{";
+               count += 11;
+               runparams.inulemcmd = true;
+               env = true; //We have opened a new environment
+       }
+       if (f.uwave() == FONT_ON) {
+               os << "\\uwave{";
                count += 10;
+               runparams.inulemcmd = true;
                env = true; //We have opened a new environment
        }
        // \noun{} is a LyX special macro
@@ -593,6 +642,25 @@ int Font::latexWriteEndChanges(odocstream & os, BufferParams const & bparams,
        if (f.underbar() == FONT_ON) {
                os << '}';
                ++count;
+               runparams.inulemcmd = false;
+               env = true; // Size change need not bother about closing env.
+       }
+       if (f.strikeout() == FONT_ON) {
+               os << '}';
+               ++count;
+               runparams.inulemcmd = false;
+               env = true; // Size change need not bother about closing env.
+       }
+       if (f.uuline() == FONT_ON) {
+               os << '}';
+               ++count;
+               runparams.inulemcmd = false;
+               env = true; // Size change need not bother about closing env.
+       }
+       if (f.uwave() == FONT_ON) {
+               os << '}';
+               ++count;
+               runparams.inulemcmd = false;
                env = true; // Size change need not bother about closing env.
        }
        if (f.noun() == FONT_ON) {
@@ -654,6 +722,9 @@ string Font::toString(bool const toggle) const
           << "size " << bits_.size() << '\n'
           << "emph " << bits_.emph() << '\n'
           << "underbar " << bits_.underbar() << '\n'
+          << "strikeout " << bits_.strikeout() << '\n'
+          << "uuline " << bits_.uuline() << '\n'
+          << "uwave " << bits_.uwave() << '\n'
           << "noun " << bits_.noun() << '\n'
           << "number " << bits_.number() << '\n'
           << "color " << bits_.color() << '\n'
@@ -695,7 +766,9 @@ bool Font::fromString(string const & data, bool & toggle)
                        bits_.setSize(FontSize(next));
 
                } else if (token == "emph" || token == "underbar" ||
-                          token == "noun" || token == "number") {
+                          token == "noun" || token == "number" ||
+                          token == "uuline" || token == "uwave" ||
+                          token == "strikeout") {
 
                        int const next = lex.getInteger();
                        FontState const misc = FontState(next);
@@ -704,6 +777,12 @@ bool Font::fromString(string const & data, bool & toggle)
                                bits_.setEmph(misc);
                        else if (token == "underbar")
                                bits_.setUnderbar(misc);
+                       else if (token == "strikeout")
+                               bits_.setStrikeout(misc);
+                       else if (token == "uuline")
+                               bits_.setUuline(misc);
+                       else if (token == "uwave")
+                               bits_.setUwave(misc);
                        else if (token == "noun")
                                bits_.setNoun(misc);
                        else if (token == "number")
@@ -747,6 +826,26 @@ void Font::validate(LaTeXFeatures & features) const
                features.require("noun");
                LYXERR(Debug::LATEX, "Noun enabled. Font: " << to_utf8(stateText(0)));
        }
+       if (bits_.underbar() == FONT_ON) {
+               LYXERR(Debug::LATEX, "font.underline: " << bits_.underbar());
+               features.require("ulem");
+               LYXERR(Debug::LATEX, "Underline enabled. Font: " << to_utf8(stateText(0)));
+       }
+       if (bits_.strikeout() == FONT_ON) {
+               LYXERR(Debug::LATEX, "font.strikeout: " << bits_.strikeout());
+               features.require("ulem");
+               LYXERR(Debug::LATEX, "Strikeout enabled. Font: " << to_utf8(stateText(0)));
+       }
+       if (bits_.uuline() == FONT_ON) {
+               LYXERR(Debug::LATEX, "font.uuline: " << bits_.uuline());
+               features.require("ulem");
+               LYXERR(Debug::LATEX, "Double underline enabled. Font: " << to_utf8(stateText(0)));
+       }
+       if (bits_.uwave() == FONT_ON) {
+               LYXERR(Debug::LATEX, "font.uwave: " << bits_.uwave());
+               features.require("ulem");
+               LYXERR(Debug::LATEX, "Wavy underline enabled. Font: " << to_utf8(stateText(0)));
+       }
        switch (bits_.color()) {
                case Color_none:
                case Color_inherit:
@@ -791,6 +890,9 @@ ostream & operator<<(ostream & os, FontInfo const & f)
                //<< " background " << f.background()
                << " emph " << f.emph()
                << " underbar " << f.underbar()
+               << " strikeout " << f.strikeout()
+               << " uuline " << f.uuline()
+               << " uwave " << f.uwave()
                << " noun " << f.noun()
                << " number " << f.number();
 }