X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTextClass.cpp;h=3a131d9d8eb803254c42f60bedb546d6078f92fc;hb=61d68d05bd0f2172ab9406f23dc2640e6b9ac56b;hp=80cb6f8e2a314b71a51c22f1457bf7b0a2d03b16;hpb=76eae4572e802d32a89afb4a3a89781b58a79108;p=features.git diff --git a/src/TextClass.cpp b/src/TextClass.cpp index 80cb6f8e2a..3a131d9d8e 100644 --- a/src/TextClass.cpp +++ b/src/TextClass.cpp @@ -59,7 +59,7 @@ namespace lyx { // You should also run the development/tools/updatelayouts.py script, // to update the format of all of our layout files. // -int const LAYOUT_FORMAT = 91; // spitz: InputGlobal method +int const LAYOUT_FORMAT = 95; // tcuvelier: DocBookRenderAsImage // Layout format for the current lyx file format. Controls which format is @@ -171,6 +171,8 @@ enum TextClassTags { TC_PROVIDESTYLE, TC_DEFAULTSTYLE, TC_INSETLAYOUT, + TC_MODIFYINSETLAYOUT, + TC_PROVIDEINSETLAYOUT, TC_NOINSETLAYOUT, TC_NOSTYLE, TC_COLUMNS, @@ -254,6 +256,7 @@ LexerKeyword textClassTags[] = { { "insetlayout", TC_INSETLAYOUT }, { "leftmargin", TC_LEFTMARGIN }, { "maxcitenames", TC_MAXCITENAMES }, + { "modifyinsetlayout", TC_MODIFYINSETLAYOUT }, { "modifystyle", TC_MODIFYSTYLE }, { "nocounter", TC_NOCOUNTER }, { "nofloat", TC_NOFLOAT }, @@ -266,6 +269,7 @@ LexerKeyword textClassTags[] = { { "pagesize", TC_PAGESIZE }, { "pagestyle", TC_PAGESTYLE }, { "preamble", TC_PREAMBLE }, + { "provideinsetlayout", TC_PROVIDEINSETLAYOUT }, { "provides", TC_PROVIDES }, { "providesmodule", TC_PROVIDESMODULE }, { "providestyle", TC_PROVIDESTYLE }, @@ -431,8 +435,8 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt) } // used below to track whether we are in an IfStyle or IfCounter tag. - bool modifystyle = false; - bool providestyle = false; + bool modify = false; + bool provide = false; bool ifcounter = false; bool only_global = false; @@ -499,13 +503,13 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt) break; case TC_MODIFYSTYLE: - modifystyle = true; + modify = true; // fall through case TC_PROVIDESTYLE: // if modifystyle is true, then we got here by falling through // so we are not in an ProvideStyle block - if (!modifystyle) - providestyle = true; + if (!modify) + provide = true; // fall through case TC_STYLE: { if (!lexrc.next()) { @@ -531,13 +535,13 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt) // If the layout already exists, then we want to add it to // the existing layout, as long as we are not in an ProvideStyle // block. - if (have_layout && !providestyle) { + if (have_layout && !provide) { Layout & lay = operator[](name); error = !readStyle(lexrc, lay, rt); } // If the layout does not exist, then we want to create a new // one, but not if we are in a ModifyStyle block. - else if (!have_layout && !modifystyle) { + else if (!have_layout && !modify) { Layout layout; layout.setName(name); error = !readStyle(lexrc, layout, rt); @@ -687,7 +691,7 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt) case TC_PKGOPTS : { lexrc.next(); string const pkg = lexrc.getString(); - lexrc.next(); + lexrc.eatLine(); string const options = lexrc.getString(); package_options_[pkg] = options; break; @@ -732,6 +736,15 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt) rightmargin_ = lexrc.getDocString(); break; + case TC_MODIFYINSETLAYOUT: + modify = true; + // fall through + case TC_PROVIDEINSETLAYOUT: + // if modifyinsetlayout is true, then we got here by falling through + // so we are not in an ProvideInsetLayout block + if (!modify) + provide = true; + // fall through case TC_INSETLAYOUT: { if (!lexrc.next()) { lexrc.printError("No name given for InsetLayout: `$$Token'."); @@ -740,6 +753,7 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt) } docstring const name = subst(lexrc.getDocString(), '_', ' '); bool const validating = (rt == VALIDATION); + bool const have_layout = name.empty() ? false : hasInsetLayout(name); if (name.empty()) { string s = "Could not read name for InsetLayout: `$$Token' " + lexrc.getString() + " is probably not valid UTF-8!"; @@ -752,15 +766,19 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt) // in which case we want to report the error if (validating) error = true; - } else if (hasInsetLayout(name)) { + } else if (have_layout && !provide) { InsetLayout & il = insetlayoutlist_[name]; error = !il.read(lexrc, *this, validating); - } else { + } else if (!modify && !have_layout) { InsetLayout il; il.setName(name); error = !il.read(lexrc, *this, validating); if (!error) insetlayoutlist_[name] = il; + } else { + InsetLayout il; + // We just scan the rest of the style and discard it. + il.read(lexrc, *this); } break; } @@ -1384,8 +1402,10 @@ bool TextClass::readFloat(Lexer & lexrc) FT_HTMLATTR, FT_HTMLTAG, FT_DOCBOOKATTR, + FT_DOCBOOKFLOATTYPE, FT_DOCBOOKTAG, FT_DOCBOOKTAGTYPE, + FT_DOCBOOKCAPTION, FT_LISTCOMMAND, FT_REFPREFIX, FT_ALLOWED_PLACEMENT, @@ -1400,6 +1420,8 @@ bool TextClass::readFloat(Lexer & lexrc) { "allowssideways", FT_ALLOWS_SIDEWAYS }, { "allowswide", FT_ALLOWS_WIDE }, { "docbookattr", FT_DOCBOOKATTR }, + { "docbookcaption", FT_DOCBOOKCAPTION }, + { "docbookfloattype", FT_DOCBOOKFLOATTYPE }, { "docbooktag", FT_DOCBOOKTAG }, { "docbooktagtype", FT_DOCBOOKTAGTYPE }, { "end", FT_END }, @@ -1427,8 +1449,10 @@ bool TextClass::readFloat(Lexer & lexrc) docstring htmlstyle; string htmltag; string docbookattr; + string docbookcaption; string docbooktag; string docbooktagtype; + string docbookfloattype; string listname; string listcommand; string name; @@ -1546,6 +1570,10 @@ bool TextClass::readFloat(Lexer & lexrc) lexrc.next(); docbookattr = lexrc.getString(); break; + case FT_DOCBOOKCAPTION: + lexrc.next(); + docbookcaption = lexrc.getString(); + break; case FT_DOCBOOKTAG: lexrc.next(); docbooktag = lexrc.getString(); @@ -1554,9 +1582,16 @@ bool TextClass::readFloat(Lexer & lexrc) lexrc.next(); docbooktagtype = lexrc.getString(); break; + case FT_DOCBOOKFLOATTYPE: + lexrc.next(); + docbookfloattype = lexrc.getString(); + break; case FT_END: getout = true; break; + default: + LYXERR0("Unhandled value " << le << " in TextClass::readFloat."); + break; } } @@ -1581,8 +1616,9 @@ bool TextClass::readFloat(Lexer & lexrc) } Floating fl(type, placement, ext, within, style, name, listname, listcommand, refprefix, allowed_placement, - htmltag, htmlattr, htmlstyle, docbookattr, - docbooktagtype, required, usesfloat, ispredefined, + htmltag, htmlattr, htmlstyle, docbooktag, docbookattr, + docbooktagtype, docbookfloattype, docbookcaption, + required, usesfloat, ispredefined, allowswide, allowssideways); floatlist_.newFloat(fl); // each float has its own counter @@ -1731,7 +1767,7 @@ bool TextClass::load(string const & path) const << to_utf8(makeDisplayPath(layout_file.absFileName())) << "'\n(Check `" << name_ << "')\nCheck your installation and " - "try Options/Reconfigure..." + "try Tools/Reconfigure..." << endl; }