diff --git a/lib/doc/Customization.lyx b/lib/doc/Customization.lyx index fcfc513f0c..5c165df9a9 100644 --- a/lib/doc/Customization.lyx +++ b/lib/doc/Customization.lyx @@ -1,5 +1,5 @@ #LyX 2.4 created this file. For more info see https://www.lyx.org/ -\lyxformat 605 +\lyxformat 606 \begin_document \begin_header \save_transient_properties true @@ -10389,6 +10389,8 @@ status collapsed \change_inserted -712698321 1611646837 InputGlobal +\change_unchanged + \end_layout \end_inset @@ -10401,6 +10403,8 @@ status collapsed \change_inserted -712698321 1611646804 +\change_unchanged + \end_layout \end_inset @@ -10413,6 +10417,8 @@ status collapsed \change_inserted -712698321 1611646804 Input +\change_unchanged + \end_layout \end_inset @@ -10426,6 +10432,8 @@ status collapsed \change_inserted -712698321 1611646804 name.layout +\change_unchanged + \end_layout \end_inset @@ -10438,6 +10446,8 @@ status collapsed \change_inserted -712698321 1611646804 name.inc +\change_unchanged + \end_layout \end_inset @@ -10451,6 +10461,8 @@ status collapsed \change_inserted -712698321 1611646853 InputGlobal name +\change_unchanged + \end_layout \end_inset @@ -10463,6 +10475,8 @@ status collapsed \change_inserted -712698321 1611646855 InputGlobal name.inc +\change_unchanged + \end_layout \end_inset @@ -10475,6 +10489,8 @@ status collapsed \change_inserted -712698321 1611646804 Input +\change_unchanged + \end_layout \end_inset @@ -10636,6 +10652,57 @@ noprefix "false" ). \end_layout +\begin_layout Description + +\change_inserted -712698321 1612018485 +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout + +\change_inserted -712698321 1612018457 +ModifyInsetLayout +\end_layout + +\end_inset + + [ +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout + +\change_inserted -712698321 1612018466 + +\end_layout + +\end_inset + +] Modifies the layout of an inset. + If the layout does not exist, this section is ignored. + Must end with +\begin_inset Quotes eld +\end_inset + + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout + +\change_inserted -712698321 1612018452 +End +\end_layout + +\end_inset + + +\begin_inset Quotes erd +\end_inset + +. +\end_layout + \begin_layout Description \begin_inset Flex Code status collapsed @@ -11212,6 +11279,61 @@ EndPreamble \end_inset . +\change_inserted -712698321 1612018500 + +\end_layout + +\begin_layout Description + +\change_inserted -712698321 1612018547 +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout + +\change_inserted -712698321 1612018506 +ProvideInsetLayout +\end_layout + +\end_inset + + [ +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout + +\change_inserted -712698321 1612018509 + +\end_layout + +\end_inset + +] Defines the layout of an inset if it does not already exist. + If the layout does exist, this section is ignored. + Must end with +\begin_inset Quotes eld +\end_inset + + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout + +\change_inserted -712698321 1612018500 +End +\end_layout + +\end_inset + + +\begin_inset Quotes erd +\end_inset + +. +\change_unchanged + \end_layout \begin_layout Description diff --git a/lib/doc/de/Customization.lyx b/lib/doc/de/Customization.lyx index 38e337801f..b7b39a2511 100644 --- a/lib/doc/de/Customization.lyx +++ b/lib/doc/de/Customization.lyx @@ -1,5 +1,5 @@ #LyX 2.4 created this file. For more info see https://www.lyx.org/ -\lyxformat 605 +\lyxformat 606 \begin_document \begin_header \save_transient_properties true @@ -8492,6 +8492,41 @@ noprefix "false" \begin_inset Flex Code status collapsed +\begin_layout Plain Layout +ModifyInsetLayout +\end_layout + +\end_inset + + [ +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout + +\end_layout + +\end_inset + +] Ändert die Eigenschaften des angegebenen Layouts einer Einfügung. + Wenn dieses nicht existiert, wird die Anweisung ignoriert. + Muss mit +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +End +\end_layout + +\end_inset + + beendet werden. +\end_layout + +\begin_layout Description +\begin_inset Flex Code +status collapsed + \begin_layout Plain Layout ModifyStyle \end_layout @@ -8958,6 +8993,51 @@ EndPreamble \begin_inset Flex Code status collapsed +\begin_layout Plain Layout +ProvideInsetLayout +\end_layout + +\end_inset + + [ +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout + +\end_layout + +\end_inset + +] Erstellt das Layout einer Einfügung, falls es noch nicht existiert. + Existiert es bereits, wird +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +ProvideInsetLayout +\end_layout + +\end_inset + + ignoriert. + Muss mit +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +End +\end_layout + +\end_inset + + beendet werden. +\end_layout + +\begin_layout Description +\begin_inset Flex Code +status collapsed + \begin_layout Plain Layout Provides \end_layout diff --git a/lib/scripts/layout2layout.py b/lib/scripts/layout2layout.py index c38721a7fe..7d377d01a3 100644 --- a/lib/scripts/layout2layout.py +++ b/lib/scripts/layout2layout.py @@ -11,7 +11,7 @@ # This script will update a .layout file to current format # The latest layout format is also defined in src/TextClass.cpp -currentFormat = 91 +currentFormat = 92 # Incremented to format 4, 6 April 2007, lasgouttes @@ -310,6 +310,9 @@ currentFormat = 91 # Incremented to format 91, 25 January 2021 by spitz # InputGlobal tag +# Incremented to format 92, 30 January 2021 by spitz +# Add ProvideInsetLayout and ModifyIndetLayout + # Do not forget to document format change in Customization # Manual (section "Declaring a new text class"). @@ -560,7 +563,7 @@ def convert(lines, end_format): i += 1 continue - if 87 <= format <= 91: + if 87 <= format <= 92: # nothing to do. i += 1 continue diff --git a/src/TextClass.cpp b/src/TextClass.cpp index 80cb6f8e2a..d3d2926d5b 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 = 92; // spitz: ProvideInsetLayout and ModifyInsetLayout // 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); @@ -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; }