[LyX/master] Add IsInherited Argument tag
Juergen Spitzmueller <[email protected]> Sat, 04 Jul 2026 06:32:02 +0000
| Newsgroups | gmane.editors.lyx.cvs |
|---|---|
| Message-ID | <[email protected]> |
commit d2cbeea0113384ae778537935e0b257668ddc3f3 Author: Juergen Spitzmueller <[email protected]> Date: Sat Jul 4 08:27:05 2026 +0200 Add IsInherited Argument tag This allows to add arguments to InsetLayouts of insets that do fill in arguments themselves due to their settings. For instance, the Elsevier CAS classes introduce additional options for floats, which must be combined with the (placement) options set in the float dialog --- lib/doc/Customization.lyx | 72 ++++++++++++++++++++++++++++++++++++++++++++ lib/doc/de/Customization.lyx | 63 ++++++++++++++++++++++++++++++++++++++ lib/scripts/layout2layout.py | 7 +++-- src/Layout.cpp | 3 ++ src/Layout.h | 1 + src/TextClass.cpp | 2 +- src/insets/InsetArgument.cpp | 3 +- src/insets/InsetArgument.h | 4 +++ src/insets/InsetFloat.cpp | 17 +++++++++-- src/insets/InsetLayout.cpp | 3 ++ src/insets/InsetText.cpp | 10 +++--- src/insets/InsetText.h | 3 +- src/output_latex.cpp | 10 +++--- src/output_latex.h | 3 +- 14 files changed, 184 insertions(+), 17 deletions(-) diff --git a/lib/doc/Customization.lyx b/lib/doc/Customization.lyx index 9438538c49..6d66f45aa2 100644 --- a/lib/doc/Customization.lyx +++ b/lib/doc/Customization.lyx @@ -10707,6 +10707,8 @@ status collapsed \change_inserted -712698321 1781961292 MaxLaTeXVersion +\change_unchanged + \end_layout \end_inset @@ -10719,6 +10721,8 @@ status collapsed \change_inserted -712698321 1781961309 yyyy/mm/dd +\change_unchanged + \end_layout \end_inset @@ -24337,6 +24341,74 @@ status collapsed ] The font inside the argument is inherited from the surrounding text on screen if this parameter is 1 (which is the default). Otherwise the document default font is used. +\change_inserted -712698321 1783145637 + +\end_layout + +\begin_layout Itemize + +\change_inserted -712698321 1783145805 +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout + +\change_inserted -712698321 1783145646 +IsInherited +\end_layout + +\end_inset + + [ +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout + +\change_inserted -712698321 1783145638 + +\emph on +0 +\end_layout + +\end_inset + + +\begin_inset space \thinspace{} +\end_inset + + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout + +\change_inserted -712698321 1783145638 +1 +\end_layout + +\end_inset + +] If this is set to 1, + the argument will be inherited and output by the containing inset. + This is used if the inset itself might add additional input to the argument via its settings (as in floats). + Only supported for +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout + +\change_inserted -712698321 1783145818 +InsetLayout +\change_unchanged + +\end_layout + +\end_inset + + arguments. +\change_unchanged + \end_layout \begin_layout Itemize diff --git a/lib/doc/de/Customization.lyx b/lib/doc/de/Customization.lyx index 77dabe1b7f..748c8b27b2 100644 --- a/lib/doc/de/Customization.lyx +++ b/lib/doc/de/Customization.lyx @@ -23282,6 +23282,69 @@ status collapsed \begin_inset Flex Code status collapsed +\begin_layout Plain Layout +IsInherited +\end_layout + +\end_inset + + [ +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout + +\emph on +0 +\end_layout + +\end_inset + + +\begin_inset space \thinspace{} +\end_inset + + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + +] Wenn dies +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + + gesetzt wird, + wird dieses Argument von der beinhaltenden Einfügung aufgenommen und ausgegeben. + Das wird verwenden, + wenn die Einfügung selbst (aufgrund bestimmter Einstellungen) Ergänzungen zum Argument hinzufügt (beispielsweise im Fall von Gleitobjekten). + Das wird nur von +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +InsetLayout +\end_layout + +\end_inset + + unterstützt. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + \begin_layout Plain Layout IsTocCaption \end_layout diff --git a/lib/scripts/layout2layout.py b/lib/scripts/layout2layout.py index ada4483805..1e55ed3e08 100644 --- a/lib/scripts/layout2layout.py +++ b/lib/scripts/layout2layout.py @@ -9,7 +9,7 @@ # This script will update a .layout file to current format # The latest layout format is also defined in src/TextClass.cpp -currentFormat = 117 +currentFormat = 118 # Incremented to format 4, 6 April 2007, lasgouttes @@ -397,6 +397,9 @@ currentFormat = 117 # Incremented to format 117, 20 June 2026 by spitz # New Tag MaxLaTeXVersion for latexrelease rollback +# Incremented to format 118, 4 July 2026 by spitz +# New Argument tag IsInherited + # Do not forget to document format change in Customization # Manual (section "Declaring a new text class"). @@ -736,7 +739,7 @@ def convert(lines, end_format): i += 1 continue - if 101 <= format <= 117: + if 101 <= format <= 118: # nothing to do. i += 1 continue diff --git a/src/Layout.cpp b/src/Layout.cpp index af04fa218d..f537124f47 100644 --- a/src/Layout.cpp +++ b/src/Layout.cpp @@ -1392,6 +1392,9 @@ void Layout::readArgument(Lexer & lex, bool validating) } else if (tok == "istoccaption") { lex.next(); arg.is_toc_caption = lex.getBool(); + } else if (tok == "isinherited") { + lex.next(); + arg.is_inherited = lex.getBool(); } else if (tok == "freespacing") { lex.next(); arg.free_spacing = lex.getBool(); diff --git a/src/Layout.h b/src/Layout.h index 3fa421b385..f2dfc7ec47 100644 --- a/src/Layout.h +++ b/src/Layout.h @@ -113,6 +113,7 @@ public: bool is_toc_caption = false; bool free_spacing = false; bool inh_font = true; + bool is_inherited = false; std::string newlinecmd; /// The DocBook tag corresponding to this argument. docstring docbooktag; diff --git a/src/TextClass.cpp b/src/TextClass.cpp index ad7ec69441..87c50d7546 100644 --- a/src/TextClass.cpp +++ b/src/TextClass.cpp @@ -60,7 +60,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 = 117; // spitz: MaxLatexVersion +int const LAYOUT_FORMAT = 118; // spitz: IsInherited // Layout format for the current lyx file format. Controls which format is diff --git a/src/insets/InsetArgument.cpp b/src/insets/InsetArgument.cpp index 7556490251..f12738ce1b 100644 --- a/src/insets/InsetArgument.cpp +++ b/src/insets/InsetArgument.cpp @@ -45,7 +45,7 @@ InsetArgument::InsetArgument(Buffer * buf, string const & name) : InsetCollapsible(buf), name_(name), labelstring_(docstring()), font_(inherit_font), labelfont_(inherit_font), decoration_(string()), pass_thru_context_(false), pass_thru_local_(false), pass_thru_(false), - inherit_font_(true), free_spacing_(false), escape_chars_(docstring()), + inherit_font_(true), is_inherited_(false), free_spacing_(false), escape_chars_(docstring()), pass_thru_chars_(docstring()), is_toc_caption_(false), newline_cmd_(string()) {} @@ -125,6 +125,7 @@ void InsetArgument::init(Paragraph const & par) newline_cmd_ = (*lait).second.newlinecmd; free_spacing_ = (*lait).second.free_spacing; inherit_font_ = (*lait).second.inh_font; + is_inherited_ = (*lait).second.is_inherited; docbooktag_ = (*lait).second.docbooktag; docbooktagtype_ = (*lait).second.docbooktagtype; docbookattr_ = (*lait).second.docbookattr; diff --git a/src/insets/InsetArgument.h b/src/insets/InsetArgument.h index 417694b5aa..11dcd663c6 100644 --- a/src/insets/InsetArgument.h +++ b/src/insets/InsetArgument.h @@ -77,6 +77,8 @@ public: /// bool inheritFont() const override { return inherit_font_; } /// + bool isInherited() const { return is_inherited_; } + /// bool isFreeSpacing() const override { return free_spacing_; } /// bool isTocCaption() const { return is_toc_caption_; } @@ -126,6 +128,8 @@ private: /// bool inherit_font_; /// + bool is_inherited_; + /// bool free_spacing_; /// docstring escape_chars_; diff --git a/src/insets/InsetFloat.cpp b/src/insets/InsetFloat.cpp index 9e91b195a7..015dfd590b 100644 --- a/src/insets/InsetFloat.cpp +++ b/src/insets/InsetFloat.cpp @@ -458,9 +458,20 @@ void InsetFloat::latex(otexstream & os, OutputParams const & runparams_in) const // We only output placement if different from the def_placement. // sidewaysfloats always use their own page, // therefore don't output the p option that is always set - if (!placement.empty() - && (!params_.sideways || from_ascii(placement) != "p")) - os << '[' << from_ascii(placement) << ']'; + InsetLayout const & il = getLayout(); + bool const have_placement = !placement.empty() + && (!params_.sideways || from_ascii(placement) != "p"); + if (have_placement || !il.latexargs().empty()) { + os << '['; + if (!il.latexargs().empty()) { + getArgs(os, runparams); + if (have_placement) + os << ", "; + } + if (have_placement) + os << from_ascii(placement); + os << ']'; + } os << '\n'; if (runparams.inDeletedInset) { diff --git a/src/insets/InsetLayout.cpp b/src/insets/InsetLayout.cpp index 7bd75d21b1..3fd06824a5 100644 --- a/src/insets/InsetLayout.cpp +++ b/src/insets/InsetLayout.cpp @@ -1016,6 +1016,9 @@ void InsetLayout::readArgument(Lexer & lex) arg.passthru = PT_FALSE; else arg.passthru = PT_INHERITED; + } else if (tok == "isinherited") { + lex.next(); + arg.is_inherited = lex.getBool(); } else if (tok == "istoccaption") { lex.next(); arg.is_toc_caption = lex.getBool(); diff --git a/src/insets/InsetText.cpp b/src/insets/InsetText.cpp index 4e92a1236d..c66a54a287 100644 --- a/src/insets/InsetText.cpp +++ b/src/insets/InsetText.cpp @@ -547,7 +547,7 @@ void InsetText::latex(otexstream & os, OutputParams const & runparams) const } } else { if (!il.latexargs().empty()) - getArgs(os, runparams); + getArgs(os, runparams, false, true); if (!il.latexparam().empty()) os << from_utf8(il.latexparam()); } @@ -952,7 +952,7 @@ void InsetText::insetAsXHTML(XMLStream & xs, OutputParams const & rp, void InsetText::getArgs(otexstream & os, OutputParams const & runparams_in, - bool const post) const + bool const post, bool const ignore_inherited) const { OutputParams runparams = runparams_in; runparams.local_font = @@ -961,10 +961,12 @@ void InsetText::getArgs(otexstream & os, OutputParams const & runparams_in, runparams.pass_thru = true; if (post) latexArgInsetsForParent(paragraphs(), os, runparams, - getLayout().postcommandargs(), "post:"); + getLayout().postcommandargs(), "post:", + ignore_inherited); else latexArgInsetsForParent(paragraphs(), os, runparams, - getLayout().latexargs()); + getLayout().latexargs(), string(), + ignore_inherited); } diff --git a/src/insets/InsetText.h b/src/insets/InsetText.h index 94bbea184d..a817dc6113 100644 --- a/src/insets/InsetText.h +++ b/src/insets/InsetText.h @@ -102,7 +102,8 @@ public: void validate(LaTeXFeatures & features) const override; /// return the argument(s) only - void getArgs(otexstream & os, OutputParams const &, bool const post = false) const; + void getArgs(otexstream & os, OutputParams const &, bool const post = false, + bool const ignore_inherited = false) const; /// return x,y of given position relative to the inset's baseline void cursorPos(BufferView const & bv, CursorSlice const & sl, diff --git a/src/output_latex.cpp b/src/output_latex.cpp index f16a1c6199..b92bf036df 100644 --- a/src/output_latex.cpp +++ b/src/output_latex.cpp @@ -556,7 +556,7 @@ void getArgInsets(otexstream & os, OutputParams const & runparams, Layout::latexarg const arg = lait->second; docstring ldelim; docstring rdelim; - if (!arg.nodelims) { + if (!arg.nodelims && !arg.is_inherited) { ldelim = arg.mandatory ? from_ascii("{") : from_ascii("["); rdelim = arg.mandatory ? @@ -661,12 +661,14 @@ namespace { void addArgInsets(Paragraph const & par, string const & prefix, Layout::LaTeXArgMap const & latexargs, map<size_t, InsetArgument const *> & ilist, - vector<string> & required) + vector<string> & required, bool const ignore_inherited = false) { for (auto const & table : par.insetList()) { InsetArgument const * arg = table.inset->asInsetArgument(); if (!arg) continue; + if (ignore_inherited && arg->isInherited()) + continue; if (arg->name().empty()) { LYXERR0("Error: Unnamed argument inset!"); continue; @@ -743,7 +745,7 @@ void latexArgInsets(ParagraphList const & pars, void latexArgInsetsForParent(ParagraphList const & pars, otexstream & os, OutputParams const & runparams, Layout::LaTeXArgMap const & latexargs, - string const & prefix) + string const & prefix, bool const ignore_inherited) { map<size_t, InsetArgument const *> ilist; vector<string> required; @@ -752,7 +754,7 @@ void latexArgInsetsForParent(ParagraphList const & pars, otexstream & os, if (par.layout().hasArgs()) // The InsetArguments inside this paragraph refer to this paragraph continue; - addArgInsets(par, prefix, latexargs, ilist, required); + addArgInsets(par, prefix, latexargs, ilist, required, ignore_inherited); } getArgInsets(os, runparams, latexargs, ilist, required, prefix); } diff --git a/src/output_latex.h b/src/output_latex.h index 311b2e61b0..54d499a83f 100644 --- a/src/output_latex.h +++ b/src/output_latex.h @@ -64,7 +64,8 @@ void latexArgInsets(ParagraphList const & pars, void latexArgInsetsForParent(ParagraphList const & pars, otexstream & os, OutputParams const & runparams, Layout::LaTeXArgMap const & latexargs, - std::string const & prefix = std::string()); + std::string const & prefix = std::string(), + bool const ignore_inherited = false); /** Export \p paragraphs of buffer \p buf to LaTeX. Don't use a temporary stringstream for \p os if the final output is supposed to go to a file. -- lyx-cvs mailing list [email protected] https://lists.lyx.org/mailman/listinfo/lyx-cvs