]> git.lyx.org Git - lyx.git/blobdiff - src/Layout.cpp
Make Thesaurus check for more general dictionaries (en-v2.idx)
[lyx.git] / src / Layout.cpp
index 08540efd15b119b4b08497749b67c0ece75aadcd..17be45c2270fc77efd999c7da41acd8f260b3ffa 100644 (file)
@@ -51,6 +51,7 @@ enum LayoutTags {
        LT_FONT,
        LT_FREE_SPACING,
        LT_PASS_THRU,
+       LT_PASS_THRU_CHARS,
        LT_PARBREAK_IS_NEWLINE,
        LT_ITEMCOMMAND,
        LT_ITEMSEP,
@@ -74,6 +75,7 @@ enum LayoutTags {
        LT_NEED_PROTECT,
        LT_NEWLINE,
        LT_NEXTNOINDENT,
+       LT_PAR_GROUP,
        LT_PARINDENT,
        LT_PARSEP,
        LT_PARSKIP,
@@ -105,6 +107,7 @@ enum LayoutTags {
        LT_RESETARGS,
        LT_RIGHTDELIM,
        LT_FORCELOCAL,
+       LT_TOGGLE_INDENT,
        LT_INTITLE // keep this last!
 };
 
@@ -148,6 +151,8 @@ Layout::Layout()
        spellcheck = true;
        forcelocal = 0;
        itemcommand_ = "item";
+       toggle_indent = ITOGGLE_DOCUMENT_DEFAULT;
+       par_group_ = false;
 }
 
 
@@ -228,11 +233,13 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                { "newline",        LT_NEWLINE },
                { "nextnoindent",   LT_NEXTNOINDENT },
                { "obsoletedby",    LT_OBSOLETEDBY },
+               { "paragraphgroup", LT_PAR_GROUP },
                { "parbreakisnewline", LT_PARBREAK_IS_NEWLINE },
                { "parindent",      LT_PARINDENT },
                { "parsep",         LT_PARSEP },
                { "parskip",        LT_PARSKIP },
                { "passthru",       LT_PASS_THRU },
+               { "passthruchars",  LT_PASS_THRU_CHARS },
                { "preamble",       LT_PREAMBLE },
                { "refprefix",      LT_REFPREFIX },
                { "requires",       LT_REQUIRES },
@@ -243,6 +250,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                { "spellcheck",     LT_SPELLCHECK },
                { "textfont",       LT_TEXTFONT },
                { "toclevel",       LT_TOCLEVEL },
+               { "toggleindent",   LT_TOGGLE_INDENT },
                { "topsep",         LT_TOPSEP }
        };
 
@@ -383,6 +391,19 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                        lex >> nextnoindent;
                        break;
 
+               case LT_TOGGLE_INDENT: {
+                       string tog;
+                       lex >> tog;
+                       tog = support::ascii_lowercase(tog);
+                       if (tog == "always")
+                               toggle_indent = ITOGGLE_ALWAYS;
+                       else if (tog == "never")
+                               toggle_indent = ITOGGLE_NEVER;
+                       else
+                               toggle_indent = ITOGGLE_DOCUMENT_DEFAULT;
+                       break;
+               }
+
                case LT_COMMANDDEPTH:
                        lex >> commanddepth;
                        break;
@@ -524,6 +545,10 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                        counter = trim(counter);
                        break;
 
+               case LT_PAR_GROUP:
+                       lex >> par_group_;
+                       break;
+
                case LT_FREE_SPACING:
                        lex >> free_spacing;
                        break;
@@ -532,6 +557,10 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
                        lex >> pass_thru;
                        break;
 
+               case LT_PASS_THRU_CHARS:
+                       lex >> pass_thru_chars;
+                       break;
+
                case LT_PARBREAK_IS_NEWLINE:
                        lex >> parbreak_is_newline;
                        break;
@@ -542,8 +571,8 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass)
 
                case LT_REQUIRES: {
                        lex.eatLine();
-                       vector<string> const req = 
-                               getVectorFromString(lex.getString());
+                       vector<string> const req =
+                               getVectorFromString(lex.getString(true));
                        requires_.insert(req.begin(), req.end());
                        break;
                }
@@ -775,6 +804,8 @@ void Layout::readLabelType(Lexer & lex)
 
 void Layout::readEndLabelType(Lexer & lex)
 {
+       // this should be const, but can't be because
+       // of PushPopHelper.
        static LexerKeyword endlabelTypeTags[] = {
                { "box",              END_LABEL_BOX },
                { "filled_box", END_LABEL_FILLED_BOX },
@@ -851,12 +882,15 @@ void Layout::readLatexType(Lexer & lex)
                return;
        case LATEX_PARAGRAPH:
        case LATEX_COMMAND:
-       case LATEX_ENVIRONMENT:
        case LATEX_ITEM_ENVIRONMENT:
-       case LATEX_BIB_ENVIRONMENT:
        case LATEX_LIST_ENVIRONMENT:
                latextype = static_cast<LatexType>(le);
                break;
+       case LATEX_ENVIRONMENT:
+       case LATEX_BIB_ENVIRONMENT:
+               latextype = static_cast<LatexType>(le);
+               par_group_ = true;
+               break;
        default:
                LYXERR0("Unhandled value " << le);
                break;
@@ -912,6 +946,7 @@ void Layout::readArgument(Lexer & lex)
        // writeArgument() makes use of these default values
        arg.mandatory = false;
        arg.autoinsert = false;
+       arg.insertcotext = false;
        bool error = false;
        bool finished = false;
        arg.font = inherit_font;
@@ -941,6 +976,9 @@ void Layout::readArgument(Lexer & lex)
                } else if (tok == "autoinsert") {
                        lex.next();
                        arg.autoinsert = lex.getBool();
+               } else if (tok == "insertcotext") {
+                       lex.next();
+                       arg.insertcotext = lex.getBool();
                } else if (tok == "leftdelim") {
                        lex.next();
                        arg.ldelim = lex.getDocString();
@@ -970,6 +1008,9 @@ void Layout::readArgument(Lexer & lex)
                        arg.font = lyxRead(lex, arg.font);
                } else if (tok == "labelfont") {
                        arg.labelfont = lyxRead(lex, arg.labelfont);
+               } else if (tok == "passthruchars") {
+                       lex.next();
+                       arg.pass_thru_chars = lex.getDocString();
                } else {
                        lex.printError("Unknown tag");
                        error = true;
@@ -997,6 +1038,8 @@ void writeArgument(ostream & os, string const & id, Layout::latexarg const & arg
                os << "\t\tMandatory " << arg.mandatory << '\n';
        if (arg.autoinsert)
                os << "\t\tAutoinsert " << arg.autoinsert << '\n';
+       if (arg.insertcotext)
+               os << "\t\tInsertCotext " << arg.insertcotext << '\n';
        if (!arg.ldelim.empty())
                os << "\t\tLeftDelim \""
                   << to_utf8(subst(arg.ldelim, from_ascii("\n"), from_ascii("<br/>")))
@@ -1019,6 +1062,8 @@ void writeArgument(ostream & os, string const & id, Layout::latexarg const & arg
                lyxWrite(os, arg.font, "Font", 2);
        if (arg.labelfont != inherit_font)
                lyxWrite(os, arg.labelfont, "LabelFont", 2);
+       if (!arg.pass_thru_chars.empty())
+               os << "\t\tPassThruChars \"" << to_utf8(arg.pass_thru_chars) << "\"\n";
        os << "\tEndArgument\n";
 }
 
@@ -1175,6 +1220,7 @@ void Layout::write(ostream & os) const
                os << "\tEndLabelType Static\n";
                break;
        }
+       os << "\tParagraphGroup \"" << par_group_ << "\"\n";
        if (!leftmargin.empty())
                os << "\tLeftMargin \"" << to_utf8(leftmargin) << "\"\n";
        if (!rightmargin.empty())
@@ -1262,6 +1308,8 @@ void Layout::write(ostream & os) const
                os << "\tLabelCounter \"" << to_utf8(counter) << "\"\n";
        os << "\tFreeSpacing " << free_spacing << '\n';
        os << "\tPassThru " << pass_thru << '\n';
+       if (!pass_thru_chars.empty())
+               os << "\tPassThruChars " << to_utf8(pass_thru_chars) << '\n';
        os << "\tParbreakIsNewline " << parbreak_is_newline << '\n';
        switch (spacing.getSpace()) {
        case Spacing::Double: