commit 05fa23682904157223cb3865b57b5ded6eb6208e
Author: Juergen Spitzmueller <sp...@lyx.org>
Date:   Wed May 14 14:20:48 2025 +0200

    tex2lyx: recognize enumitem and fix import of its optional list arguments 
(#13185)
---
 src/tex2lyx/Context.h    |  2 ++
 src/tex2lyx/Preamble.cpp | 12 ++++++++++++
 src/tex2lyx/text.cpp     | 23 +++++++++++++++++++++--
 3 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/src/tex2lyx/Context.h b/src/tex2lyx/Context.h
index ea2d04de4a..c6ff034d74 100644
--- a/src/tex2lyx/Context.h
+++ b/src/tex2lyx/Context.h
@@ -132,6 +132,8 @@ public:
        std::string list_extra_stuff;
        /// Stuff between list begin and first item
        std::string list_preamble;
+       /// Optional argument of list environments
+       std::string list_options;
        /// A LaTeXParam to be ignored in parsing.
        std::string latexparam;
        /// If there has been an \\begin_deeper, we'll need a matching
diff --git a/src/tex2lyx/Preamble.cpp b/src/tex2lyx/Preamble.cpp
index eecf54a055..a5263123b9 100644
--- a/src/tex2lyx/Preamble.cpp
+++ b/src/tex2lyx/Preamble.cpp
@@ -2342,6 +2342,18 @@ void Preamble::handle_package(Parser &p, string const & 
name,
                }
        }
 
+       else if (name == "enumitem") {
+               // Load "enumitem" module
+               addModule("enumitem");
+               // Add the package options to the global document options
+               if (!options.empty()) {
+                       if (h_options.empty())
+                               h_options = join(options, ",");
+                       else
+                               h_options += ',' + join(options, ",");
+               }
+       }
+
        else if (name == "changebar")
                h_output_changes = "true";
 
diff --git a/src/tex2lyx/text.cpp b/src/tex2lyx/text.cpp
index 56cf527847..33d69f7f48 100644
--- a/src/tex2lyx/text.cpp
+++ b/src/tex2lyx/text.cpp
@@ -2607,6 +2607,15 @@ void parse_environment(Parser & p, ostream & os, bool 
outer,
                        eat_whitespace(p, os, parent_context, false);
                        Context context(true, parent_context.textclass, 
newlayout,
                                        parent_context.layout, 
parent_context.font);
+                       if ((context.layout->latextype == LATEX_LIST_ENVIRONMENT
+                            || context.layout->latextype == 
LATEX_ITEM_ENVIRONMENT)
+                            && p.hasOpt()) {
+                               // if a list environment has an optional 
argument
+                               // (e.g., with enumitem), store it to output it 
later
+                               // in the first list paragraph.
+                               context.list_options = p.getArg('[', ']');
+                               p.skip_spaces(true);
+                       }
                        if (parent_context.deeper_paragraph) {
                                // We are beginning a nested environment after a
                                // deeper paragraph inside the outer list 
environment.
@@ -2626,7 +2635,7 @@ void parse_environment(Parser & p, ostream & os, bool 
outer,
                                newcontext.check_end_layout(os);
                        }
                        switch (context.layout->latextype) {
-                       case  LATEX_LIST_ENVIRONMENT:
+                       case LATEX_LIST_ENVIRONMENT:
                                context.in_list_preamble =
                                        !context.layout->listpreamble().empty()
                                        && 
p.hasListPreamble(context.layout->itemcommand());
@@ -2634,7 +2643,7 @@ void parse_environment(Parser & p, ostream & os, bool 
outer,
                                                            + p.verbatim_item() 
+ '\n');
                                p.skip_spaces();
                                break;
-                       case  LATEX_BIB_ENVIRONMENT:
+                       case LATEX_BIB_ENVIRONMENT:
                                p.verbatim_item(); // swallow next arg
                                p.skip_spaces();
                                break;
@@ -3695,6 +3704,16 @@ void parse_text(Parser & p, ostream & os, unsigned 
flags, bool outer,
                        if (context.layout->labeltype != LABEL_MANUAL)
                                output_arguments(os, p, outer, false, "item", 
context,
                                                 context.layout->itemargs());
+                       if (!context.list_options.empty()) {
+                               // We have an optional list argument. Output it 
here.
+                               begin_inset(os, "Argument 1");
+                               os << "\nstatus collapsed\n\n"
+                                  << "\\begin_layout Plain Layout\n\n";
+                               output_ert_inset(os, 
rtrim(context.list_options), context);
+                               os << "\n\\end_layout";
+                               end_inset(os);
+                               context.list_options.clear();
+                       }
                        if (!context.list_preamble.empty()) {
                                // We have a list preamble. Output it here.
                                begin_inset(os, "Argument listpreamble:1");
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
https://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to