Add ProvideInsetLayout and ModifyInsetLayout (#12098)

This complements ProvideStyle and ModifyStyle.
This commit is contained in:
Juergen Spitzmueller 2021-01-30 15:56:31 +01:00
parent 897ee2ed88
commit c567c78e90
4 changed files with 237 additions and 14 deletions

View File

@ -1,5 +1,5 @@
#LyX 2.4 created this file. For more info see https://www.lyx.org/ #LyX 2.4 created this file. For more info see https://www.lyx.org/
\lyxformat 605 \lyxformat 606
\begin_document \begin_document
\begin_header \begin_header
\save_transient_properties true \save_transient_properties true
@ -10389,6 +10389,8 @@ status collapsed
\change_inserted -712698321 1611646837 \change_inserted -712698321 1611646837
InputGlobal InputGlobal
\change_unchanged
\end_layout \end_layout
\end_inset \end_inset
@ -10401,6 +10403,8 @@ status collapsed
\change_inserted -712698321 1611646804 \change_inserted -712698321 1611646804
<filename> <filename>
\change_unchanged
\end_layout \end_layout
\end_inset \end_inset
@ -10413,6 +10417,8 @@ status collapsed
\change_inserted -712698321 1611646804 \change_inserted -712698321 1611646804
Input Input
\change_unchanged
\end_layout \end_layout
\end_inset \end_inset
@ -10426,6 +10432,8 @@ status collapsed
\change_inserted -712698321 1611646804 \change_inserted -712698321 1611646804
name.layout name.layout
\change_unchanged
\end_layout \end_layout
\end_inset \end_inset
@ -10438,6 +10446,8 @@ status collapsed
\change_inserted -712698321 1611646804 \change_inserted -712698321 1611646804
name.inc name.inc
\change_unchanged
\end_layout \end_layout
\end_inset \end_inset
@ -10451,6 +10461,8 @@ status collapsed
\change_inserted -712698321 1611646853 \change_inserted -712698321 1611646853
InputGlobal name InputGlobal name
\change_unchanged
\end_layout \end_layout
\end_inset \end_inset
@ -10463,6 +10475,8 @@ status collapsed
\change_inserted -712698321 1611646855 \change_inserted -712698321 1611646855
InputGlobal name.inc InputGlobal name.inc
\change_unchanged
\end_layout \end_layout
\end_inset \end_inset
@ -10475,6 +10489,8 @@ status collapsed
\change_inserted -712698321 1611646804 \change_inserted -712698321 1611646804
Input Input
\change_unchanged
\end_layout \end_layout
\end_inset \end_inset
@ -10636,6 +10652,57 @@ noprefix "false"
). ).
\end_layout \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
<type>
\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_layout Description
\begin_inset Flex Code \begin_inset Flex Code
status collapsed status collapsed
@ -11212,6 +11279,61 @@ EndPreamble
\end_inset \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
<type>
\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 \end_layout
\begin_layout Description \begin_layout Description

View File

@ -1,5 +1,5 @@
#LyX 2.4 created this file. For more info see https://www.lyx.org/ #LyX 2.4 created this file. For more info see https://www.lyx.org/
\lyxformat 605 \lyxformat 606
\begin_document \begin_document
\begin_header \begin_header
\save_transient_properties true \save_transient_properties true
@ -8492,6 +8492,41 @@ noprefix "false"
\begin_inset Flex Code \begin_inset Flex Code
status collapsed status collapsed
\begin_layout Plain Layout
ModifyInsetLayout
\end_layout
\end_inset
[
\begin_inset Flex Code
status collapsed
\begin_layout Plain Layout
<Typ>
\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 \begin_layout Plain Layout
ModifyStyle ModifyStyle
\end_layout \end_layout
@ -8958,6 +8993,51 @@ EndPreamble
\begin_inset Flex Code \begin_inset Flex Code
status collapsed status collapsed
\begin_layout Plain Layout
ProvideInsetLayout
\end_layout
\end_inset
[
\begin_inset Flex Code
status collapsed
\begin_layout Plain Layout
<Typ>
\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 \begin_layout Plain Layout
Provides Provides
\end_layout \end_layout

View File

@ -11,7 +11,7 @@
# This script will update a .layout file to current format # This script will update a .layout file to current format
# The latest layout format is also defined in src/TextClass.cpp # The latest layout format is also defined in src/TextClass.cpp
currentFormat = 91 currentFormat = 92
# Incremented to format 4, 6 April 2007, lasgouttes # Incremented to format 4, 6 April 2007, lasgouttes
@ -310,6 +310,9 @@ currentFormat = 91
# Incremented to format 91, 25 January 2021 by spitz # Incremented to format 91, 25 January 2021 by spitz
# InputGlobal tag # InputGlobal tag
# Incremented to format 92, 30 January 2021 by spitz
# Add ProvideInsetLayout and ModifyIndetLayout
# Do not forget to document format change in Customization # Do not forget to document format change in Customization
# Manual (section "Declaring a new text class"). # Manual (section "Declaring a new text class").
@ -560,7 +563,7 @@ def convert(lines, end_format):
i += 1 i += 1
continue continue
if 87 <= format <= 91: if 87 <= format <= 92:
# nothing to do. # nothing to do.
i += 1 i += 1
continue continue

View File

@ -59,7 +59,7 @@ namespace lyx {
// You should also run the development/tools/updatelayouts.py script, // You should also run the development/tools/updatelayouts.py script,
// to update the format of all of our layout files. // 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 // Layout format for the current lyx file format. Controls which format is
@ -171,6 +171,8 @@ enum TextClassTags {
TC_PROVIDESTYLE, TC_PROVIDESTYLE,
TC_DEFAULTSTYLE, TC_DEFAULTSTYLE,
TC_INSETLAYOUT, TC_INSETLAYOUT,
TC_MODIFYINSETLAYOUT,
TC_PROVIDEINSETLAYOUT,
TC_NOINSETLAYOUT, TC_NOINSETLAYOUT,
TC_NOSTYLE, TC_NOSTYLE,
TC_COLUMNS, TC_COLUMNS,
@ -254,6 +256,7 @@ LexerKeyword textClassTags[] = {
{ "insetlayout", TC_INSETLAYOUT }, { "insetlayout", TC_INSETLAYOUT },
{ "leftmargin", TC_LEFTMARGIN }, { "leftmargin", TC_LEFTMARGIN },
{ "maxcitenames", TC_MAXCITENAMES }, { "maxcitenames", TC_MAXCITENAMES },
{ "modifyinsetlayout", TC_MODIFYINSETLAYOUT },
{ "modifystyle", TC_MODIFYSTYLE }, { "modifystyle", TC_MODIFYSTYLE },
{ "nocounter", TC_NOCOUNTER }, { "nocounter", TC_NOCOUNTER },
{ "nofloat", TC_NOFLOAT }, { "nofloat", TC_NOFLOAT },
@ -266,6 +269,7 @@ LexerKeyword textClassTags[] = {
{ "pagesize", TC_PAGESIZE }, { "pagesize", TC_PAGESIZE },
{ "pagestyle", TC_PAGESTYLE }, { "pagestyle", TC_PAGESTYLE },
{ "preamble", TC_PREAMBLE }, { "preamble", TC_PREAMBLE },
{ "provideinsetlayout", TC_PROVIDEINSETLAYOUT },
{ "provides", TC_PROVIDES }, { "provides", TC_PROVIDES },
{ "providesmodule", TC_PROVIDESMODULE }, { "providesmodule", TC_PROVIDESMODULE },
{ "providestyle", TC_PROVIDESTYLE }, { "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. // used below to track whether we are in an IfStyle or IfCounter tag.
bool modifystyle = false; bool modify = false;
bool providestyle = false; bool provide = false;
bool ifcounter = false; bool ifcounter = false;
bool only_global = false; bool only_global = false;
@ -499,13 +503,13 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
break; break;
case TC_MODIFYSTYLE: case TC_MODIFYSTYLE:
modifystyle = true; modify = true;
// fall through // fall through
case TC_PROVIDESTYLE: case TC_PROVIDESTYLE:
// if modifystyle is true, then we got here by falling through // if modifystyle is true, then we got here by falling through
// so we are not in an ProvideStyle block // so we are not in an ProvideStyle block
if (!modifystyle) if (!modify)
providestyle = true; provide = true;
// fall through // fall through
case TC_STYLE: { case TC_STYLE: {
if (!lexrc.next()) { 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 // If the layout already exists, then we want to add it to
// the existing layout, as long as we are not in an ProvideStyle // the existing layout, as long as we are not in an ProvideStyle
// block. // block.
if (have_layout && !providestyle) { if (have_layout && !provide) {
Layout & lay = operator[](name); Layout & lay = operator[](name);
error = !readStyle(lexrc, lay, rt); error = !readStyle(lexrc, lay, rt);
} }
// If the layout does not exist, then we want to create a new // If the layout does not exist, then we want to create a new
// one, but not if we are in a ModifyStyle block. // one, but not if we are in a ModifyStyle block.
else if (!have_layout && !modifystyle) { else if (!have_layout && !modify) {
Layout layout; Layout layout;
layout.setName(name); layout.setName(name);
error = !readStyle(lexrc, layout, rt); error = !readStyle(lexrc, layout, rt);
@ -732,6 +736,15 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
rightmargin_ = lexrc.getDocString(); rightmargin_ = lexrc.getDocString();
break; 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: { case TC_INSETLAYOUT: {
if (!lexrc.next()) { if (!lexrc.next()) {
lexrc.printError("No name given for InsetLayout: `$$Token'."); 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(), '_', ' '); docstring const name = subst(lexrc.getDocString(), '_', ' ');
bool const validating = (rt == VALIDATION); bool const validating = (rt == VALIDATION);
bool const have_layout = name.empty() ? false : hasInsetLayout(name);
if (name.empty()) { if (name.empty()) {
string s = "Could not read name for InsetLayout: `$$Token' " string s = "Could not read name for InsetLayout: `$$Token' "
+ lexrc.getString() + " is probably not valid UTF-8!"; + 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 // in which case we want to report the error
if (validating) if (validating)
error = true; error = true;
} else if (hasInsetLayout(name)) { } else if (have_layout && !provide) {
InsetLayout & il = insetlayoutlist_[name]; InsetLayout & il = insetlayoutlist_[name];
error = !il.read(lexrc, *this, validating); error = !il.read(lexrc, *this, validating);
} else { } else if (!modify && !have_layout) {
InsetLayout il; InsetLayout il;
il.setName(name); il.setName(name);
error = !il.read(lexrc, *this, validating); error = !il.read(lexrc, *this, validating);
if (!error) if (!error)
insetlayoutlist_[name] = il; insetlayoutlist_[name] = il;
} else {
InsetLayout il;
// We just scan the rest of the style and discard it.
il.read(lexrc, *this);
} }
break; break;
} }