]> git.lyx.org Git - lyx.git/commitdiff
Transform InsetNomenclature to a collapsible
authorJuergen Spitzmueller <spitz@lyx.org>
Mon, 12 Aug 2024 10:33:16 +0000 (12:33 +0200)
committerJuergen Spitzmueller <spitz@lyx.org>
Mon, 12 Aug 2024 10:33:16 +0000 (12:33 +0200)
Fixes: #10460, #12595, #6353
24 files changed:
development/FORMAT
lib/doc/UserGuide.lyx
lib/doc/de/UserGuide.lyx
lib/layouts/stdinsets.inc
lib/lyx2lyx/lyx2lyx_tools.py
lib/lyx2lyx/lyx_2_5.py
lib/ui/stdmenus.inc
src/Color.cpp
src/ColorCode.h
src/Text.cpp
src/factory.cpp
src/frontends/qt/DialogFactory.cpp
src/frontends/qt/GuiNomenclature.cpp [deleted file]
src/frontends/qt/GuiNomenclature.h [deleted file]
src/frontends/qt/GuiPrintNomencl.cpp
src/frontends/qt/InsetParamsDialog.cpp
src/frontends/qt/Makefile.am
src/frontends/qt/ui/NomenclUi.ui [deleted file]
src/insets/Inset.h
src/insets/InsetCommandParams.cpp
src/insets/InsetNomencl.cpp
src/insets/InsetNomencl.h
src/tex2lyx/text.cpp
src/version.h

index a8617da9ca18e503d09b62fbc92a9e291ac945d1..830c45ae45dd389ad2785520d3309a6894c09dbf 100644 (file)
@@ -7,6 +7,10 @@ changes happened in particular if possible. A good example would be
 
 -----------------------
 
+2024-08-12 Jürgen Spitzmüller <spitz@lyx.org> 
+       * Format incremented to 627: Transform nomenclature inset to
+         collapsible.
+
 2024-07-21 Jürgen Spitzmüller <spitz@lyx.org> 
        * Format incremented to 626: Support for manuel longest label in
          \printnomencl (via new param option set_width "textwidth").
index faeb71e807d87e22e0230f0a5273162914808af8..29edd0ee7eac1100fb8ea079ba4db7283cf47459 100644 (file)
@@ -36569,7 +36569,11 @@ nomencl
 
  installed.
  You find it in the \SpecialChar TeX
- catalogue,
+ catalog
+\change_deleted -712698321 1723454635
+ue
+\change_unchanged
+,
  
 \begin_inset CommandInset citation
 LatexCommand cite
@@ -36579,7 +36583,13 @@ literal "true"
 \end_inset
 
  or in the package manager of your \SpecialChar LaTeX
--system.
+
+\change_inserted -712698321 1723454632
+\change_deleted -712698321 1723454632
+-
+\change_unchanged
+system.
 \end_layout
 
 \begin_layout Standard
@@ -36603,7 +36613,13 @@ arg   "nomencl-insert"
 \end_inset
 
 .
- A gray box labeled 
+ A 
+\change_deleted -712698321 1723454657
+gray box
+\change_inserted -712698321 1723454660
+collapsible inset
+\change_unchanged
+ labeled 
 \begin_inset Quotes eld
 \end_inset
 
@@ -36615,7 +36631,17 @@ Nom
 \begin_inset Quotes erd
 \end_inset
 
- is inserted and a window pops up asking for the nomenclature entry.
+ is inserted
+\change_deleted -712698321 1723454685
+ and a window pops up asking for the nomenclature entry
+\change_unchanged
+.
+
+\change_inserted -712698321 1723454710
+ If the cursor is after a word,
+ this is copied into the inset.
+\change_unchanged
+
 \end_layout
 
 \begin_layout Standard
@@ -36630,9 +36656,25 @@ Symbol
 Description
 \family default
  of the term or symbol.
+
+\change_inserted -712698321 1723454817
+ The former is inserted into the collapsible inset directly,
+ the latter into the 
+\family sans
+Description
+\family default
+ sub-inset which is automatically inserted or can be inserted via the 
+\family sans
+Insert
+\family default
+ menu.
+\change_unchanged
+
 \end_layout
 
 \begin_layout Standard
+
+\change_deleted -712698321 1723454741
 \begin_inset Note Greyedout
 status open
 
@@ -36653,6 +36695,8 @@ Literal
 \end_inset
 
 
+\change_unchanged
+
 \end_layout
 
 \begin_layout Subsection
@@ -36682,6 +36726,11 @@ Layout
 \end_layout
 
 \begin_layout Standard
+
+\change_inserted -712698321 1723454941
+Within the nomenclature inset,
+ you can use math and formatting as usual.
+\change_deleted -712698321 1723454925
 If you have symbols in formulas,
  you have to define them in the 
 \family sans
@@ -36749,6 +36798,8 @@ Sigma
 \end_layout
 
 \begin_layout Standard
+
+\change_deleted -712698321 1723454925
 (A short introduction to the \SpecialChar LaTeX
  syntax is given in section
 \begin_inset space ~
@@ -36766,6 +36817,8 @@ nolink "false"
 \end_layout
 
 \begin_layout Standard
+
+\change_deleted -712698321 1723454925
 You cannot use the 
 \family sans
 Text
@@ -36851,6 +36904,8 @@ emphasized
 emph
 \series default
 .
+\change_unchanged
+
 \end_layout
 
 \begin_layout Standard
@@ -36899,6 +36954,8 @@ serif
 \end_layout
 
 \begin_layout Standard
+
+\change_deleted -712698321 1723454959
 If the characters |
 \begin_inset space \space{}
 \end_inset
@@ -36931,6 +36988,8 @@ literal "true"
 \end_inset
 
 
+\change_unchanged
+
 \end_layout
 
 \begin_layout Subsection
@@ -36961,8 +37020,20 @@ Sort order
 
 \begin_layout Standard
 The nomenclature entries are sorted alphabetically by the \SpecialChar LaTeX
--code of the symbol definition.
- This leads to undesired results when you,
+
+\change_deleted -712698321 1723454966
+-
+\change_inserted -712698321 1723454966
+\change_unchanged
+code of the symbol definition.
+ This leads to undesired results 
+\change_deleted -712698321 1723454971
+when
+\change_inserted -712698321 1723454971
+if
+\change_unchanged
+ you,
  for example,
  have symbols in formulas.
  Suppose you have nomenclature entries for the symbols 
 
 \begin_layout Standard
 To control the sort order,
- you can edit the 
+ you can 
+\change_deleted -712698321 1723454992
+edit the 
 \family sans
 Sort
 \begin_inset space ~
@@ -37048,7 +37121,19 @@ Sort
 
 as
 \family default
- field of the nomenclature dialog.
+ field of the nomenclature dialog
+\change_inserted -712698321 1723455033
+use the 
+\family sans
+Sort as
+\family default
+ subinset which is to be found in the 
+\family sans
+Insert
+\family default
+ menu
+\change_unchanged
+.
  Then the nomenclature entry will be sorted by this entry and not the symbol definition.
  For the example given,
  you can insert 
index 8abfd3e560bfe11a71913ea156c1c05719b80f65..40ac1ac44c5ef03e81b5bb41c2d387403dacdaf5 100644 (file)
@@ -35929,8 +35929,7 @@ nomencl
 
  installiert sein.
  Sie finden es im \SpecialChar TeX
--Katalog,
+-Katalog 
 \begin_inset CommandInset citation
 LatexCommand cite
 key "TeX-Katalog"
@@ -35956,11 +35955,13 @@ arg   "nomencl-insert"
 \end_inset
 
  wählen.
- Ein graues Kästchen mit der Aufschrift 
+ Eine aufklappbare Einfügung mit der Aufschrift 
 \family sans
 Nom
 \family default
- wird eingefügt und ein Dialogfenster geöffnet.
+ wird eingefügt.
+ Falls der Cursor direkt hinter einem Wort steht,
+ wird dieses hineinkopiert.
  Ein Nomenklatur-Eintrag besteht aus zwei Hauptteilen:
  das 
 \family sans
@@ -35971,30 +35972,12 @@ Symbol
 Beschreibung
 \family default
 .
-\end_layout
-
-\begin_layout Standard
-\begin_inset Note Greyedout
-status open
-
-\begin_layout Plain Layout
-
-\series bold
-Achtung:
-
-\series default
- Um \SpecialChar TeX
--Code für Nomenklatureinträge verwenden zu können,
- muss die Option 
+ Ersteres wird direkt in die Einfügung geschrieben,
+ letzteres in die Untereinfügung 
 \family sans
-Unformatiert
+Beschreibung
 \family default
- im Nomenklatur-Dialog aktiviert sein.
-\end_layout
-
-\end_inset
-
-
+.
 \end_layout
 
 \begin_layout Subsection
@@ -36024,139 +36007,7 @@ Layout
 \end_layout
 
 \begin_layout Standard
-Wenn Sie Symbole in Formeln haben,
- müssen diese im 
-\family sans
-Symbol
-\family default
- Feld als \SpecialChar LaTeX
--Formel eingegeben werden.
- Um z.
-\begin_inset space \thinspace{}
-\end_inset
-
-B.
- „
-\begin_inset Formula $\sigma$
-\end_inset
-
-“ zu bekommen,
- fügt man dies ein:
-\begin_inset Newline newline
-\end_inset
-
-
-\series bold
-$
-\backslash
-sigma$
-\begin_inset Newline newline
-\end_inset
-
-
-\series default
-Das Zeichen '$' beginnt/beendet die Formel.
- Der \SpecialChar LaTeX
--Befehl für den griechischen Buchstaben ist dessen Name beginnend mit einem umgekehrten Schrägstrich '
-\backslash
-'.
- Für große griechische Buchstaben beginnt der Befehl mit einem Großbuchstaben:
-\series bold
-
-\backslash
-Sigma
-\series default
-.
-\end_layout
-
-\begin_layout Standard
-(Eine kurze Einführung in die \SpecialChar LaTeX
--Syntax ist in Abschnitt
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "subsec:LaTeX-Syntax"
-nolink "false"
-
-\end_inset
-
- zu finden.)
-\end_layout
-
-\begin_layout Standard
-Man kann den 
-\family sans
-Textstil
-\family default
- Dialog nicht verwenden,
- um den Beschreibungstext zu formatieren,
- sondern man muss \SpecialChar LaTeX
--Befehle verwenden.
- Zum Beispiel lautet die Beschreibung für den Nomenklatureintrag für „
-\begin_inset Formula $\sigma$
-\end_inset
-
-“ in diesem Dokument:
-\begin_inset Newline newline
-\end_inset
-
-
-\series bold
-Sinnsloseintrag für das Zeichen 
-\backslash
-textsf{sigma}
-\series default
-
-\begin_inset Newline newline
-\end_inset
-
-Der Befehl 
-\series bold
-
-\backslash
-textsf
-\series default
- setzt die Schrift auf 
-\family sans
-serifenlos
-\family default
-.
- Für 
-\series bold
-fett
-\series default
- verwenden Sie den Befehl 
-\series bold
-
-\backslash
-textbf
-\series default
-,
- für 
-\family typewriter
-Schreibmaschine
-\family default
-\series bold
-
-\backslash
-texttt
-\series default
-,
- für 
-\emph on
-hervorgehoben 
-\series bold
-\emph default
-
-\backslash
-emph
-\series default
-.
+Innerhalb der Nomenklatur-Einfügung können Sie wie üblich Text formatieren und den Mathe-Modus verwenden.
 \end_layout
 
 \begin_layout Standard
@@ -36198,48 +36049,6 @@ serifenlos
 .
 \end_layout
 
-\begin_layout Standard
-Sollen die Zeichen |
-\begin_inset space \space{}
-\end_inset
-
-,
-\begin_inset space \space{}
-\end_inset
-
-!
-\begin_inset space \space{}
-\end_inset
-
-,
- @ und
-\begin_inset space \space{}
-\end_inset
-
-"
-\begin_inset space \space{}
-\end_inset
-
-in Nomenklatureinträgen mit \SpecialChar TeX
--Code erscheinen,
- müssen sie geschützt werden.
- indem man ein Prozentzeichen davor setzt.
- Um zu verhindern,
- dass das Anführungszeichen nachfolgende Zeichen beeinflusst,
- wird es mit einem leeren \SpecialChar TeX
--Klammerpaar abgeschlossen:
- %"{}
-\begin_inset CommandInset nomenclature
-LatexCommand nomenclature
-symbol "%@, %|, %!, %\"{}"
-description "Sonderzeichen im Nomenklatur-Kontext, denen für literale Ausgabe ,\\%` vorangestellt werden muss "
-literal "true"
-
-\end_inset
-
-
-\end_layout
-
 \begin_layout Subsection
 Nomenklatur-Einträge sortieren
 \begin_inset Index idx
 
 \begin_layout Standard
 Um das zu ändern,
- können Sie etwas ins Feld 
+ verwenden Sie die Untereinfügung 
 \family sans
-Einsortieren
-\begin_inset space \space{}
-\end_inset
-
-als
+Sortieren als
 \family default
- schreiben,
- zum Beispiel 
-\family typewriter
-sigma
+,
+ die Sie im Menü 
+\family sans
+Einfügen
 \family default
- bei 
-\begin_inset Formula $\sigma$
-\end_inset
-
- .
+ finden.
  Dann stimmt die Sortierreihenfolge wieder.
 \end_layout
 
index 250a5154ea88c2715b44176f6d8e66d68df281ee..9d1eb8697e6a2032ffb58749176a4763cf0df5da 100644 (file)
@@ -453,6 +453,37 @@ InsetLayout IndexMacro:subentry
        LabelString           "Subentry"
 End
 
+InsetLayout Nomenclature
+       LabelString           Nom
+       LatexType             command
+       LatexName             nomenclature
+       Decoration            classic
+       Font
+         Size                Small
+       EndFont
+       LabelFont
+         Color               nomlabel
+         Size                Small
+       EndFont
+       MultiPar              false
+       CustomPars            false
+       ForcePlain            true
+       ContentAsLabel        true
+       AddToToc              nomencl
+       Argument 1
+               LabelString   "Sort as"
+               Tooltip       "Sort this entry as specified in the inset"
+       EndArgument
+       Argument post:1
+               LabelString   "Description"
+               Tooltip       "Description of the entry"
+               AutoInsert    1
+               Mandatory     1
+               EscapeChars   %!@|
+       EndArgument
+       EscapeChars           %!@|
+End
+
 InsetLayout Box
        InheritFont           false
        LabelFont
index 9d713609d76db027de788c94d04e7f23f6ac6232..9b29b767471b1b1e20782392d28ed32ed3665c15 100644 (file)
@@ -237,7 +237,7 @@ def lyx2latex(document, lines):
 
     content = ""
     ert_end = 0
-    note_end = 0
+    note_end = -1
     hspace = ""
 
     for curline in range(len(lines)):
index 2afba6e813fe6538cb937e52b19bd513c198cd8d..962dd8fe99fb701f242811d9eb875bdf9ed0aaf4 100644 (file)
@@ -21,18 +21,19 @@ import re
 
 # Uncomment only what you need to import, please (lyx2lyx_tools):
 #    convert_info_insets, get_ert, hex2ratio, insert_to_preamble,
-#    length_in_bp, lyx2latex, lyx2verbatim,
+#    length_in_bp, lyx2verbatim,
 #    revert_flex_inset, revert_flex_inset, revert_font_attrs,
 #    revert_language, str2bool
 from lyx2lyx_tools import (
     add_to_preamble,
     latex_length,
+    lyx2latex,
     put_cmd_in_ert
 )
 
 # Uncomment only what you need to import, please (parser_tools):
 #    check_token, count_pars_in_inset, del_complete_lines, 
-#    del_value, find_complete_lines, find_end_of, find_end_of_layout,
+#    del_value, find_complete_lines, find_end_of, 
 #    find_re, find_substring, find_token_backwards, find_token_exact,
 #    find_tokens, get_bool_value, get_containing_inset,
 #    get_containing_layout, get_option_value,
@@ -40,6 +41,7 @@ from lyx2lyx_tools import (
 from parser_tools import (
     del_token,
     find_end_of_inset,
+    find_end_of_layout,
     find_re,
     find_token,
     get_quoted_value,
@@ -479,6 +481,145 @@ def revert_nomencl_textwidth(document):
         i = j
 
 
+def convert_nomencl(document):
+    """Convert nomencl inset to collapsible."""
+
+    i = 0
+    while True:
+        i = find_token(document.body, "\\begin_inset CommandInset nomenclature", i)
+        if i == -1:
+            return
+
+        j = find_end_of_inset(document.body, i)
+        if j == -1:
+            document.warning(
+                "Malformed LyX document: Can't find end of command inset at line %d" % i
+            )
+            i += 1
+            continue
+
+        literal = get_quoted_value(document.body, "literal", i, j)
+        prefix = get_quoted_value(document.body, "prefix", i, j)
+        symbol = get_quoted_value(document.body, "symbol", i, j)
+        description = get_quoted_value(document.body, "description", i, j)
+
+        newins = ["\\begin_inset Nomenclature", "status open", "", "\\begin_layout Plain Layout"]
+        if prefix:
+            newins += ["\\begin_inset Argument 1",
+                       "status open",
+                       "",
+                       "\\begin_layout Plain Layout",
+                       prefix,
+                       "\\end_layout",
+                       "",
+                       "\\end_inset",
+                       ""]
+        if literal == "true":
+            newins += put_cmd_in_ert(symbol.replace("\\\\", "\\").replace("\\\"", "\""))
+        else:
+            newins += [symbol.replace("\\\"", "\"")]
+        if description:
+            newins += ["\\begin_inset Argument post:1",
+                       "status open",
+                       "",
+                       "\\begin_layout Plain Layout"]
+            if literal == "true":
+                newins += put_cmd_in_ert(description.replace("\\\\", "\\").replace("\\\"", "\""))
+            else:
+                newins += [description.replace("\\\"", "\"")]
+            newins += ["\\end_layout",
+                       "",
+                       "\\end_inset",
+                       ""]
+        newins += ["\\end_layout",
+                   "",
+                   "\\end_inset"]
+        document.body[i : j + 1] = newins
+
+
+def revert_nomencl(document):
+    """Revert nomencl inset to InsetCommand."""
+
+    i = 0
+    while True:
+        i = find_token(document.body, "\\begin_inset Nomenclature", i)
+        if i == -1:
+            return
+
+        j = find_end_of_inset(document.body, i)
+        if j == -1:
+            document.warning(
+                "Malformed LyX document: Can't find end of command inset at line %d" % i
+            )
+            i += 1
+            continue
+
+        arg = find_token(document.body, "\\begin_inset Argument 1", i, j)
+        prefix = []
+        if arg != -1:
+            endarg = find_end_of_inset(document.body, arg)
+            argbeginPlain = find_token(
+                document.body, "\\begin_layout Plain Layout", arg, endarg
+            )
+            if argbeginPlain == -1:
+                document.warning("Malformed LyX document: Can't find optarg plain Layout")
+                continue
+            argendPlain = find_end_of_inset(document.body, argbeginPlain)
+            prefix = document.body[argbeginPlain + 1 : argendPlain - 2]
+
+            # remove Arg insets and paragraph, if it only contains this inset
+            if (
+                document.body[arg - 1] == "\\begin_layout Plain Layout"
+                and find_end_of_layout(document.body, arg - 1) == endarg + 3
+            ):
+                del document.body[arg - 1 : endarg + 4]
+            else:
+                del document.body[arg : endarg + 1]
+
+        arg = find_token(document.body, "\\begin_inset Argument post:1", i, j)
+        description = []
+        if arg != -1:
+            endarg = find_end_of_inset(document.body, arg)
+            argbeginPlain = find_token(
+                document.body, "\\begin_layout Plain Layout", arg, endarg
+            )
+            if argbeginPlain == -1:
+                document.warning("Malformed LyX document: Can't find arg 1 plain Layout")
+                continue
+            argendPlain = find_end_of_inset(document.body, argbeginPlain)
+            description = document.body[argbeginPlain + 1 : argendPlain - 2]
+
+            # remove Arg insets and paragraph, if it only contains this inset
+            if (
+                document.body[arg - 1] == "\\begin_layout Plain Layout"
+                and find_end_of_layout(document.body, arg - 1) == endarg + 3
+            ):
+                del document.body[arg - 1 : endarg + 4]
+            else:
+                del document.body[arg : endarg + 1]
+
+        beginPlain = find_token(document.body, "\\begin_layout Plain Layout", i)
+        endPlain = find_end_of_layout(document.body, beginPlain)
+        symbol = document.body[beginPlain + 1 : endPlain]
+        literal = "false"
+        if "\\begin_inset ERT" in symbol or "\\begin_inset ERT" in description:
+            literal = "true"
+
+        newins = ["\\begin_inset CommandInset nomenclature", "LatexCommand nomenclature"]
+        if prefix:
+            newins += ["prefix \"" + lyx2latex(document, prefix) + "\""]
+        if symbol:
+            newins += ["symbol \"" + lyx2latex(document, symbol) + "\""]
+        if description:
+            newins += ["description \"" + lyx2latex(document, description) + "\""]
+        newins += ["literal \"" + literal + "\""]
+
+        j = find_end_of_inset(document.body, i)
+        document.body[i : j] = newins
+
+        i += 1
+
+
 ##
 # Conversion hub
 #
@@ -490,11 +631,13 @@ convert = [
     [623, [convert_he_letter]],
     [624, [convert_biblatex_chicago]],
     [625, []],
-    [626, []]
+    [626, []],
+    [627, [convert_nomencl]]
 ]
 
 
 revert = [
+    [626, [revert_nomencl]],
     [625, [revert_nomencl_textwidth]],
     [624, [revert_nptextcite]],
     [623, [revert_biblatex_chicago]],
index 229d351801a5be9cbead49b662a1d33331e68d70..b3ed8c9c531bbceab67dd8a58242d044eb3aab38 100644 (file)
@@ -393,7 +393,7 @@ Menuset
                Captions
                Indices
                OptSubmenu "Index Properties" "index_properties"
-               Item "Nomenclature Entry...|y" "nomencl-insert"
+               Item "Nomenclature Entry|y" "nomencl-insert"
                Separator
                Item "Table...|T" "tabular-insert"
                Item "Graphics...|G" "dialog-show-new-inset graphics"
index 23e40a9c941e6c4c40d070a7f98279e1fd840664..dabe9166b44a6ad96295a73bcd88c112e6113090 100644 (file)
@@ -289,6 +289,7 @@ ColorSet::ColorSet()
        { Color_footlabel, N_("footnote label"), "footlabel", "#00aaff", blue, "footlabel" },
        { Color_indexlabel, N_("index label"), "indexlabel", Green, teal, "indexlabel" },
        { Color_marginlabel, N_("margin note label"), "marginlabel", "#aa55ff", violet, "marginlabel" },
+       { Color_nomlabel, N_("nomenclature label"), "nomlabel", "#ff6d2f", "#ff6d2f", "nomlabel" },
        { Color_urllabel, N_("URL label"), "urllabel", blue, blue, "urllabel" },
        { Color_urltext, N_("URL text"), "urltext", blue, "#86a4ff", "urltext" },
        { Color_depthbar, N_("depth bar"), "depthbar", IndianRed, IndianRed, "depthbar" },
index 9b26e7219ccbc9e826f953379c4c2456b2754a01..773b9cfc6bb3f3eca6f69f6de60b08fdfa2c33e8 100644 (file)
@@ -105,6 +105,8 @@ enum ColorCode {
        Color_indexlabel,
        /// Label color for margin notes
        Color_marginlabel,
+       /// Label color for nomenclature insets
+       Color_nomlabel,
        /// Text color for phantom insets
        Color_phantomtext,
        /// Label color for URL insets
index 826b4db111823c7f3422ba479d25d0579102ae16..3a137202cf5e7743094fa950291e563927bce84b 100644 (file)
@@ -3643,8 +3643,10 @@ bool doInsertInset(Cursor & cur, Text * text,
 
        bool gotsel = false;
        bool move_layout = false;
+       bool const copy_cotext = cmd.action() == LFUN_INDEX_INSERT
+                       || cmd.action() == LFUN_NOMENCL_INSERT;
        if (cur.selection()) {
-               if (cmd.action() == LFUN_INDEX_INSERT)
+               if (copy_cotext)
                        copySelectionToTemp(cur);
                else {
                        cutSelectionToTemp(cur, pastesel);
@@ -3662,7 +3664,7 @@ bool doInsertInset(Cursor & cur, Text * text,
                }
                cur.clearSelection();
                gotsel = true;
-       } else if (cmd.action() == LFUN_INDEX_INSERT) {
+       } else if (copy_cotext) {
                gotsel = text->selectWordWhenUnderCursor(cur, WHOLE_WORD);
                copySelectionToTemp(cur);
                cur.clearSelection();
@@ -3708,11 +3710,42 @@ bool doInsertInset(Cursor & cur, Text * text,
                 */
                if (!move_layout)
                        cur.paragraph().setPlainOrDefaultLayout(bparams.documentClass());
-               // FIXME: what does this do?
-               if (cmd.action() == LFUN_FLEX_INSERT)
-                       return true;
+               // Insert auto-insert arguments
+               bool autoargs = false, inautoarg = false;
+               Layout::LaTeXArgMap args = cur.inset().getLayout().args();
+               for (auto const & argt : args) {
+                       Layout::latexarg arg = argt.second;
+                       if (!inautoarg && arg.insertonnewline && cur.pos() > 0) {
+                               FuncRequest cmd2(LFUN_PARAGRAPH_BREAK);
+                               lyx::dispatch(cmd2);
+                       }
+                       if (arg.autoinsert) {
+                               // The cursor might have been invalidated by the replaceSelection.
+                               cur.buffer()->changed(true);
+                               // If we had already inserted an arg automatically,
+                               // leave this now in order to insert the next one.
+                               if (inautoarg) {
+                                       cur.leaveInset(cur.inset());
+                                       cur.setCurrentFont();
+                                       cur.posForward();
+                                       if (arg.insertonnewline && cur.pos() > 0) {
+                                               FuncRequest cmd2(LFUN_PARAGRAPH_BREAK);
+                                               lyx::dispatch(cmd2);
+                                       }
+                               }
+                               if (prefixIs(argt.first, "post:"))
+                                       cur.pos() = cur.paragraph().size();
+                               else
+                                       cur.pos() = 0;
+                               FuncRequest cmd2(LFUN_ARGUMENT_INSERT, argt.first);
+                               lyx::dispatch(cmd2);
+                               autoargs = true;
+                               inautoarg = true;
+                       }
+               }
                Cursor old = cur;
-               cur.leaveInset(*inset);
+               if (!autoargs)
+                       cur.leaveInset(*inset);
                if (cmd.action() == LFUN_PREVIEW_INSERT
                        || cmd.action() == LFUN_IPA_INSERT)
                        // trigger preview
@@ -5517,17 +5550,20 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_BOX_INSERT:
        case LFUN_BRANCH_INSERT:
        case LFUN_PHANTOM_INSERT:
+       case LFUN_FLEX_INSERT:
        case LFUN_ERT_INSERT:
        case LFUN_INDEXMACRO_INSERT:
        case LFUN_LISTING_INSERT:
        case LFUN_MARGINALNOTE_INSERT:
        case LFUN_ARGUMENT_INSERT:
        case LFUN_INDEX_INSERT:
+       case LFUN_NOMENCL_INSERT:
        case LFUN_PREVIEW_INSERT:
        case LFUN_SCRIPT_INSERT:
        case LFUN_IPA_INSERT: {
-               // Indexes reset font formatting (#11961)
-               bool const resetfont = cmd.action() == LFUN_INDEX_INSERT;
+               // Indexes and Nomencl reset font formatting (#11961)
+               bool const resetfont = cmd.action() == LFUN_INDEX_INSERT
+                               || cmd.action() == LFUN_NOMENCL_INSERT;
                // Open the inset, and move the current selection
                // inside it.
                doInsertInset(cur, this, cmd, true, true, resetfont);
@@ -5539,51 +5575,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                break;
        }
 
-       case LFUN_FLEX_INSERT: {
-               // Open the inset, and move the current selection
-               // inside it.
-               bool const sel = cur.selection();
-               doInsertInset(cur, this, cmd, true, true);
-               // Insert auto-insert arguments
-               bool autoargs = false, inautoarg = false;
-               Layout::LaTeXArgMap args = cur.inset().getLayout().args();
-               for (auto const & argt : args) {
-                       Layout::latexarg arg = argt.second;
-                       if (!inautoarg && arg.insertonnewline && cur.pos() > 0) {
-                               FuncRequest cmd2(LFUN_PARAGRAPH_BREAK);
-                               lyx::dispatch(cmd2);
-                       }
-                       if (arg.autoinsert) {
-                               // The cursor might have been invalidated by the replaceSelection.
-                               cur.buffer()->changed(true);
-                               // If we had already inserted an arg automatically,
-                               // leave this now in order to insert the next one.
-                               if (inautoarg) {
-                                       cur.leaveInset(cur.inset());
-                                       cur.setCurrentFont();
-                                       cur.posForward();
-                                       if (arg.insertonnewline && cur.pos() > 0) {
-                                               FuncRequest cmd2(LFUN_PARAGRAPH_BREAK);
-                                               lyx::dispatch(cmd2);
-                                       }
-                               }
-                               FuncRequest cmd2(LFUN_ARGUMENT_INSERT, argt.first);
-                               lyx::dispatch(cmd2);
-                               autoargs = true;
-                               inautoarg = true;
-                       }
-               }
-               if (!autoargs) {
-                       if (sel)
-                               cur.leaveInset(cur.inset());
-                       cur.posForward();
-               }
-               // Some insets are numbered, others are shown in the outline pane so
-               // let's update the labels and the toc backend.
-               cur.forceBufferUpdate();
-               break;
-       }
-
        case LFUN_TABULAR_INSERT: {
                // if there were no arguments, just open the dialog
                if (cmd.argument().empty()) {
@@ -5710,19 +5701,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                break;
        }
 
-       case LFUN_NOMENCL_INSERT: {
-               InsetCommandParams p(NOMENCL_CODE);
-               if (cmd.argument().empty()) {
-                       p["symbol"] =
-                               bv->cursor().innerText()->getStringForDialog(bv->cursor());
-                       cur.clearSelection();
-               } else
-                       p["symbol"] = cmd.argument();
-               string const data = InsetCommand::params2string(p);
-               bv->showDialog("nomenclature", data);
-               break;
-       }
-
        case LFUN_INDEX_PRINT: {
                InsetCommandParams p(INDEX_PRINT_CODE);
                if (cmd.argument().empty())
index 0bea07b8131ef0dd974e7c99dddacb4a620890ff..bb36eadef0e72d373476e87d44d5ac1c27d0f69f 100644 (file)
@@ -233,11 +233,8 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd)
                case LFUN_IPA_INSERT:
                        return new InsetIPA(buf);
 
-               case LFUN_NOMENCL_INSERT: {
-                       InsetCommandParams icp(NOMENCL_CODE);
-                       icp["symbol"] = cmd.argument();
-                       return new InsetNomencl(buf, icp);
-               }
+               case LFUN_NOMENCL_INSERT: 
+                       return new InsetNomencl(buf);
 
                case LFUN_TABULAR_INSERT: {
                        if (cmd.argument().empty())
@@ -380,11 +377,8 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd)
                                return new InsetListings(buf, par);
                        }
 
-                       case NOMENCL_CODE: {
-                               InsetCommandParams icp(code);
-                               InsetCommand::string2params(to_utf8(cmd.argument()), icp);
-                               return new InsetNomencl(buf, icp);
-                       }
+                       case NOMENCL_CODE: 
+                               return new InsetNomencl(buf);
 
                        case REF_CODE: {
                                InsetCommandParams icp(code);
@@ -585,9 +579,6 @@ Inset * readInset(Lexer & lex, Buffer * buf)
                        case LINE_CODE:
                                inset.reset(new InsetLine(buf, inscmd));
                                break;
-                       case NOMENCL_CODE:
-                               inset.reset(new InsetNomencl(buf, inscmd));
-                               break;
                        case NOMENCL_PRINT_CODE:
                                inset.reset(new InsetPrintNomencl(buf, inscmd));
                                break;
@@ -689,6 +680,8 @@ Inset * readInset(Lexer & lex, Buffer * buf)
                        inset.reset(new InsetIPA(buf));
                } else if (tmptok == "IPADeco") {
                        inset.reset(new InsetIPADeco(buf, tmptok));
+               } else if (tmptok == "Nomenclature") {
+                       inset.reset(new InsetNomencl(buf));
                } else if (tmptok == "Preview") {
                        inset.reset(new InsetPreview(buf));
                } else {
index 62f6ab8b9ddafc46f5bc60e3f924703f6c3fb698..df7da75691b8535556928ae5e43f5ac54804fc1d 100644 (file)
@@ -41,7 +41,6 @@
 #include "GuiLog.h"
 #include "GuiLyXFiles.h"
 #include "GuiMathMatrix.h"
-#include "GuiNomenclature.h"
 #include "GuiNote.h"
 #include "GuiParagraph.h"
 #include "GuiPhantom.h"
@@ -111,9 +110,6 @@ Dialog * createDialog(GuiView & gv, string const & name)
        case MATH_SPACE_CODE:
                widget = new GuiHSpace(true);
                break;
-       case NOMENCL_CODE:
-               widget = new GuiNomenclature;
-               break;
        case NOMENCL_PRINT_CODE:
                widget = new GuiPrintNomencl;
                break;
diff --git a/src/frontends/qt/GuiNomenclature.cpp b/src/frontends/qt/GuiNomenclature.cpp
deleted file mode 100644 (file)
index 92e7760..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * \file GuiNomencl.cpp
- * This file is part of LyX, the document processor.
- * Licence details can be found in the file COPYING.
- *
- * \author John Levon
- * \author O. U. Baran
- *
- * Full author contact details are available in file CREDITS.
- */
-
-#include <config.h>
-
-#include "GuiNomenclature.h"
-
-#include "qt_helpers.h"
-
-#include "insets/InsetNomencl.h"
-
-using namespace std;
-
-namespace lyx {
-namespace frontend {
-
-GuiNomenclature::GuiNomenclature(QWidget * parent) : InsetParamsWidget(parent)
-{
-       setupUi(this);
-       connect(symbolED, SIGNAL(textChanged(QString)),
-               this, SIGNAL(changed()));
-       connect(descriptionTE, SIGNAL(textChanged()),
-               this, SIGNAL(changed()));
-       connect(literalCB, SIGNAL(clicked()),
-               this, SIGNAL(changed()));
-
-       setFocusProxy(descriptionTE);
-}
-
-
-void GuiNomenclature::paramsToDialog(Inset const * inset)
-{
-       InsetNomencl const * nomencl = static_cast<InsetNomencl const *>(inset);
-       InsetCommandParams const & params = nomencl->params();
-
-       prefixED->setText(toqstr(params["prefix"]));
-       symbolED->setText(toqstr(params["symbol"]));
-       literalCB->setChecked(params["literal"] == "true");
-       QString description = toqstr(params["description"]);
-       description.replace("\\\\","\n");
-       descriptionTE->setPlainText(description);
-       descriptionTE->setFocus();
-}
-
-
-docstring GuiNomenclature::dialogToParams() const
-{
-       InsetCommandParams params(insetCode());
-       params["prefix"] = qstring_to_ucs4(prefixED->text());
-       params["symbol"] = qstring_to_ucs4(symbolED->text());
-       QString description = descriptionTE->toPlainText();
-       description.replace('\n',"\\\\");
-       params["description"] = qstring_to_ucs4(description);
-       params["literal"] = literalCB->isChecked()
-                       ? from_ascii("true") : from_ascii("false");
-       return from_utf8(InsetNomencl::params2string(params));
-}
-
-
-bool GuiNomenclature::initialiseParams(std::string const & sdata)
-{
-       InsetCommandParams p(insetCode());
-       if (!InsetCommand::string2params(sdata, p))
-               return false;
-       symbolED->setText(toqstr(p["symbol"]));
-       return true;
-}
-
-
-bool GuiNomenclature::checkWidgets(bool readonly) const
-{
-       symbolED->setReadOnly(readonly);
-       descriptionTE->setReadOnly(readonly);
-       if (!InsetParamsWidget::checkWidgets())
-               return false;
-       QString const description = descriptionTE->toPlainText();
-       return !symbolED->text().isEmpty() && !description.isEmpty();
-}
-
-} // namespace frontend
-} // namespace lyx
-
-#include "moc_GuiNomenclature.cpp"
diff --git a/src/frontends/qt/GuiNomenclature.h b/src/frontends/qt/GuiNomenclature.h
deleted file mode 100644 (file)
index 3799d74..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-// -*- C++ -*-
-/**
- * \file GuiNomenclature.h
- * This file is part of LyX, the document processor.
- * Licence details can be found in the file COPYING.
- *
- * \author John Levon
- * \author Kalle Dalheimer
- * \author O. U. Baran
- *
- * Full author contact details are available in file CREDITS.
- */
-
-#ifndef GUINOMENCLATURE_H
-#define GUINOMENCLATURE_H
-
-#include "ui_NomenclUi.h"
-
-#include "InsetParamsWidget.h"
-
-namespace lyx {
-namespace frontend {
-
-class GuiNomenclature : public InsetParamsWidget, public Ui::NomenclUi
-{
-       Q_OBJECT
-
-public:
-       GuiNomenclature(QWidget * parent = 0);
-
-private:
-       /// \name InsetParamsWidget inherited methods
-       //@{
-       InsetCode insetCode() const override { return NOMENCL_CODE; }
-       FuncCode creationCode() const override { return LFUN_INSET_INSERT; }
-       QString dialogTitle() const override { return qt_("Nomenclature Settings"); }
-       void paramsToDialog(Inset const *) override;
-       docstring dialogToParams() const override;
-       bool checkWidgets(bool readonly) const override;
-       bool initialiseParams(std::string const &) override;
-       //@}
-};
-
-} // namespace frontend
-} // namespace lyx
-
-#endif // GUINOMENCLATURE_H
index 6533f89a4de42c69344abf049c7474155ce7ce8d..480d31194dd60a5350ba46939595b3b2d2383e2b 100644 (file)
@@ -77,7 +77,7 @@ void GuiPrintNomencl::paramsToDialog(InsetCommandParams const & params)
 
 void GuiPrintNomencl::paramsToDialog(Inset const * inset)
 {
-       InsetNomencl const * nomencl = static_cast<InsetNomencl const *>(inset);
+       InsetPrintNomencl const * nomencl = static_cast<InsetPrintNomencl const *>(inset);
        paramsToDialog(nomencl->params());
 }
 
@@ -94,7 +94,7 @@ docstring GuiPrintNomencl::dialogToParams() const
        else if (set_width == from_ascii("textwidth"))
                width = qstring_to_ucs4(valueLE->text());
        params["width"] = width;
-       return from_ascii(InsetNomencl::params2string(params));
+       return from_ascii(InsetPrintNomencl::params2string(params));
 }
 
 
index 67cbfdd94e1f5182c5ad791a3c3f56f935fc17dd..0e49aaab330f47bd1271e0f0f8c0c2c8b8e9921d 100644 (file)
@@ -22,7 +22,6 @@
 #include "GuiInfo.h"
 #include "GuiLabel.h"
 #include "GuiLine.h"
-#include "GuiNomenclature.h"
 #include "GuiPrintNomencl.h"
 #include "GuiTabular.h"
 #include "GuiVSpace.h"
index c038e3f8823e5a7dbb1824c9067058ee50c50cf5..6cdc6ed8657a543569b9006cf0a2e134cc25f21c 100644 (file)
@@ -101,7 +101,6 @@ SOURCEFILES = \
        GuiLog.cpp \
        GuiLyXFiles.cpp \
        GuiMathMatrix.cpp \
-       GuiNomenclature.cpp \
        GuiNote.cpp \
        GuiPainter.cpp \
        GuiParagraph.cpp \
@@ -216,7 +215,6 @@ MOCHEADER = \
        GuiLog.h \
        GuiLyXFiles.h \
        GuiMathMatrix.h \
-       GuiNomenclature.h \
        GuiNote.h \
        GuiParagraph.h \
        GuiPhantom.h \
@@ -308,7 +306,6 @@ UIFILES = \
        MathMatrixUi.ui \
        MathsUi.ui \
        ModulesUi.ui \
-       NomenclUi.ui \
        NoteUi.ui \
        NumberingUi.ui \
        OutputUi.ui \
diff --git a/src/frontends/qt/ui/NomenclUi.ui b/src/frontends/qt/ui/NomenclUi.ui
deleted file mode 100644 (file)
index 62c93b9..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>NomenclUi</class>
- <widget class="QWidget" name="NomenclUi">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>319</width>
-    <height>223</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Nomenclature</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout_2">
-   <item row="0" column="0">
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="0" column="0">
-      <widget class="QLabel" name="symbolLA">
-       <property name="text">
-        <string>Sy&amp;mbol:</string>
-       </property>
-       <property name="buddy">
-        <cstring>symbolED</cstring>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="1">
-      <widget class="QLineEdit" name="symbolED">
-       <property name="toolTip">
-        <string/>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="0">
-      <widget class="QLabel" name="descrLA">
-       <property name="text">
-        <string>Des&amp;cription:</string>
-       </property>
-       <property name="buddy">
-        <cstring>descriptionTE</cstring>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="1">
-      <widget class="QTextEdit" name="descriptionTE">
-       <property name="acceptRichText">
-        <bool>false</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="0">
-      <widget class="QLabel" name="prefixLA">
-       <property name="text">
-        <string>Sort &amp;as:</string>
-       </property>
-       <property name="buddy">
-        <cstring>prefixED</cstring>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="1">
-      <widget class="QLineEdit" name="prefixED"/>
-     </item>
-     <item row="3" column="1">
-      <widget class="QCheckBox" name="literalCB">
-       <property name="toolTip">
-        <string>Pass content of the `Symbol' and `Description' fields literally to LaTeX. Check this if you want to enter LaTeX code.</string>
-       </property>
-       <property name="text">
-        <string>Li&amp;teral</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-  </layout>
- </widget>
- <layoutdefault spacing="6" margin="11"/>
- <tabstops>
-  <tabstop>symbolED</tabstop>
-  <tabstop>descriptionTE</tabstop>
-  <tabstop>prefixED</tabstop>
- </tabstops>
- <includes>
-  <include location="local">qt_i18n.h</include>
- </includes>
- <resources/>
- <connections/>
-</ui>
index 4340c1f2a03154f3c25f7e342b63d06862d6ca71..336843d41af6b9a6119893cbe1a12542017e432b 100644 (file)
@@ -52,6 +52,7 @@ class InsetIterator;
 class InsetLayout;
 class InsetList;
 class InsetMath;
+class InsetNomencl;
 class InsetTabular;
 class InsetText;
 class Language;
@@ -154,6 +155,8 @@ public:
        virtual InsetArgument const * asInsetArgument() const { return nullptr; }
        /// is this inset based on the InsetIndex class?
        virtual InsetIndex const * asInsetIndex() const { return nullptr; }
+       /// is this inset based on the InsetNomencl class?
+       virtual InsetNomencl const * asInsetNomencl() const { return nullptr; }
        /// is this inset based on the InsetGraphics class?
        virtual InsetGraphics * asInsetGraphics() { return nullptr; }
        /// is this inset based on the InsetGraphics class?
index 523a4c81dc2d8b9417485072ad5fb1ba720b8f08..5b39bc0e41e1cbc4fa58a60f1159bdb22bb299fa 100644 (file)
@@ -76,8 +76,6 @@ static ParamInfo const & findInfo(InsetCode code, string const & cmdName)
                return InsetLabel::findInfo(cmdName);
        case LINE_CODE:
                return InsetLine::findInfo(cmdName);
-       case NOMENCL_CODE:
-               return InsetNomencl::findInfo(cmdName);
        case NOMENCL_PRINT_CODE:
                return InsetPrintNomencl::findInfo(cmdName);
        case REF_CODE:
@@ -216,8 +214,6 @@ string InsetCommandParams::getDefaultCmd(InsetCode code)
                        return InsetLabel::defaultCommand();
                case LINE_CODE:
                        return InsetLine::defaultCommand();
-               case NOMENCL_CODE:
-                       return InsetNomencl::defaultCommand();
                case NOMENCL_PRINT_CODE:
                        return InsetPrintNomencl::defaultCommand();
                case REF_CODE:
@@ -255,8 +251,6 @@ bool InsetCommandParams::isCompatibleCommand(InsetCode code, string const & s)
                        return InsetLabel::isCompatibleCommand(s);
                case LINE_CODE:
                        return InsetLine::isCompatibleCommand(s);
-               case NOMENCL_CODE:
-                       return InsetNomencl::isCompatibleCommand(s);
                case NOMENCL_PRINT_CODE:
                        return InsetPrintNomencl::isCompatibleCommand(s);
                case REF_CODE:
index 9762f8bae9dc7b9f5b98fac702989c5699e19530..36471a1026ba9d2794e441e3239b860f58dfe282 100644 (file)
@@ -13,7 +13,7 @@
 #include <config.h>
 
 #include "InsetNomencl.h"
-#include "InsetNote.h"
+#include "InsetArgument.h"
 
 #include "Buffer.h"
 #include "Cursor.h"
@@ -51,62 +51,80 @@ namespace lyx {
 //
 /////////////////////////////////////////////////////////////////////
 
-InsetNomencl::InsetNomencl(Buffer * buf, InsetCommandParams const & p)
-       : InsetCommand(buf, p)
+InsetNomencl::InsetNomencl(Buffer * buf)
+       : InsetCollapsible(buf)
 {}
 
 
-ParamInfo const & InsetNomencl::findInfo(string const & /* cmdName */)
+docstring InsetNomencl::toolTip(BufferView const & /*bv*/, int /*x*/, int /*y*/) const
 {
-       static ParamInfo param_info_;
-       if (param_info_.empty()) {
-               param_info_.add("prefix", ParamInfo::LATEX_OPTIONAL);
-               param_info_.add("symbol", ParamInfo::LATEX_REQUIRED,
-                               ParamInfo::ParamHandling(ParamInfo::HANDLING_LATEXIFY
-                                                        | ParamInfo::HANDLING_INDEX_ESCAPE));
-               param_info_.add("description", ParamInfo::LATEX_REQUIRED,
-                               ParamInfo::ParamHandling(ParamInfo::HANDLING_LATEXIFY
-                                                        | ParamInfo::HANDLING_INDEX_ESCAPE));
-               param_info_.add("literal", ParamInfo::LYX_INTERNAL);
-       }
-       return param_info_;
+       docstring tip = _("Nomenclature Symbol: ") + getSymbol();
+       docstring const desc = getDescription();
+       if (!desc.empty())
+               tip += "\n" + _("Description: ") + "\t" + getDescription();
+       docstring const prefix = getPrefix();
+       if (!prefix.empty())
+               tip += "\n" + _("Sorting: ") + prefix;
+       return tip;
 }
 
 
-docstring InsetNomencl::screenLabel() const
+void InsetNomencl::write(ostream & os) const
 {
-       size_t const maxLabelChars = 25;
-       docstring label = _("Nom: ") + getParam("symbol");
-       support::truncateWithEllipsis(label, maxLabelChars);
-       return label;
+       os << to_utf8(layoutName()) << endl;
+       InsetCollapsible::write(os);
 }
 
 
-docstring InsetNomencl::toolTip(BufferView const & /*bv*/, int /*x*/, int /*y*/) const
+docstring InsetNomencl::getSymbol() const
 {
-       docstring tip = _("Nomenclature Symbol: ") + getParam("symbol") + "\n";
-       tip += _("Description: ") + "\t"
-               + subst(getParam("description"), from_ascii("\\\\"), from_ascii("\n\t"));
-       if (!getParam("prefix").empty())
-               tip += "\n" + _("Sorting: ") + getParam("prefix");
-       return tip;
+       return text().asString();
+}
+
+
+docstring InsetNomencl::getPrefix() const
+{
+       docstring res;
+       for (auto const & elem : paragraphs()[0].insetList()) {
+               if (InsetArgument const * x = elem.inset->asInsetArgument())
+                       if (x->name() == "1")
+                               res = x->text().asString(AS_STR_INSETS);
+       }
+       return res;
+}
+
+
+docstring InsetNomencl::getDescription() const
+{
+       docstring res;
+       for (auto const & elem : paragraphs()[0].insetList()) {
+               if (InsetArgument const * x = elem.inset->asInsetArgument())
+                       if (x->name() == "post:1")
+                               res = x->text().asString(AS_STR_INSETS);
+       }
+       return res;
 }
 
 
 int InsetNomencl::plaintext(odocstringstream & os,
-        OutputParams const &, size_t) const
+                           OutputParams const & rp, size_t) const
 {
-       docstring s = "[" + getParam("symbol") + ": " + getParam("description") + "]";
-       os << s;
-       return s.size();
+       docstring const desc = getDescription();
+       os << "[";
+       InsetText::plaintext(os, rp);
+       if (!desc.empty())
+               os << ": " << desc;
+       os << "]";
+       return os.str().size();
 }
 
 
 void InsetNomencl::docbook(XMLStream & xs, OutputParams const &) const
 {
-       docstring attr = "linkend=\"" + xml::cleanID(from_ascii("nomen") + getParam("symbol")) + "\"";
+       docstring const symbol = getSymbol();
+       docstring attr = "linkend=\"" + xml::cleanID(from_ascii("nomen") + symbol) + "\"";
        xs << xml::StartTag("glossterm", attr);
-       xs << xml::escapeString(getParam("symbol"));
+       xs << xml::escapeString(symbol);
        xs << xml::EndTag("glossterm");
 }
 
@@ -120,16 +138,15 @@ docstring InsetNomencl::xhtml(XMLStream &, OutputParams const &) const
 void InsetNomencl::validate(LaTeXFeatures & features) const
 {
        features.require("nomencl");
-       InsetCommand::validate(features);
+       InsetCollapsible::validate(features);
 }
 
 
 void InsetNomencl::addToToc(DocIterator const & cpit, bool output_active,
-                                                       UpdateType, TocBackend & backend) const
+                           UpdateType, TocBackend & backend) const
 {
-       docstring const str = getParam("symbol");
        TocBuilder & b = backend.builder("nomencl");
-       b.pushItem(cpit, str, output_active);
+       b.pushItem(cpit, getSymbol(), output_active);
        b.pop();
 }
 
@@ -312,16 +329,20 @@ void InsetPrintNomencl::docbook(XMLStream & xs, OutputParams const & runparams)
                Inset const * inset = par.getInset(dit.top().pos());
                if (!inset)
                        return;
-               InsetCommand const * ic = inset->asInsetCommand();
-               if (!ic)
+               InsetNomencl const * in = inset->asInsetNomencl();
+               if (!in)
                        return;
 
                // FIXME We need a link to the paragraph here, so we
                // need some kind of struct.
-               docstring const symbol = ic->getParam("symbol");
-               docstring const desc = ic->getParam("description");
-               docstring const prefix = ic->getParam("prefix");
-               docstring const sortas = prefix.empty() ? symbol : prefix;
+               docstring const symbol = in->getSymbol();
+               docstring const desc = in->getDescription();
+               docstring const prefix = in->getPrefix();
+               // lowercase sortkey since map is case sensitive
+               docstring sortas = prefix.empty() ? lowercase(symbol) : lowercase(prefix);
+               // assure key uniqueness
+               while (entries.find(sortas) != entries.end())
+                       sortas += "a";
 
                entries[sortas] = NomenclEntry(symbol, desc, &par);
        }
@@ -371,7 +392,7 @@ void InsetPrintNomencl::docbook(XMLStream & xs, OutputParams const & runparams)
 
 
 namespace {
-docstring nomenclWidest(Buffer const & buffer, OutputParams const & runparams)
+docstring nomenclWidest(Buffer const & buffer)
 {
        // nomenclWidest() determines and returns the widest used
        // nomenclature symbol in the document
@@ -394,9 +415,8 @@ docstring nomenclWidest(Buffer const & buffer, OutputParams const & runparams)
                        nomencl = static_cast<InsetNomencl const *>(inset);
                        // Use proper formatting. We do not escape makeindex chars here
                        docstring symbol = nomencl ?
-                               nomencl->params().prepareCommand(runparams, nomencl->getParam("symbol"),
-                                                       ParamInfo::HANDLING_LATEXIFY)
-                               : docstring();
+                                               nomencl->getSymbol()
+                                             : docstring();
                        // strip out % characters which are used as escape in nomencl
                        // but act as comment in our context here
                        symbol = subst(symbol, from_ascii("%"), docstring());
@@ -426,7 +446,7 @@ void InsetPrintNomencl::latex(otexstream & os, OutputParams const & runparams_in
        OutputParams runparams = runparams_in;
        bool const autowidth = getParam("set_width") == "auto";
        if (autowidth || getParam("set_width") == "textwidth") {
-               docstring widest = autowidth ? nomenclWidest(buffer(), runparams)
+               docstring widest = autowidth ? nomenclWidest(buffer())
                                             : getParam("width");
                // Set the label width via nomencl's command \nomlabelwidth.
                // This must be output before the command \printnomenclature
index 362cd4699f6e69bc607444f7c93c055d6e550fd5..3b4f3474c5d1b8ff3da976a179561af3af2c062a 100644 (file)
@@ -13,7 +13,7 @@
 #ifndef INSET_NOMENCL_H
 #define INSET_NOMENCL_H
 
-
+#include "InsetCollapsible.h"
 #include "InsetCommand.h"
 
 
@@ -23,10 +23,10 @@ class LaTeXFeatures;
 
 /** Used to insert nomenclature entries
   */
-class InsetNomencl : public InsetCommand {
+class InsetNomencl : public InsetCollapsible {
 public:
        ///
-       InsetNomencl(Buffer * buf, InsetCommandParams const &);
+       InsetNomencl(Buffer * buf);
 
        /// \name Public functions inherited from Inset class
        //@{
@@ -38,7 +38,7 @@ public:
        void validate(LaTeXFeatures & features) const override;
        ///
        void addToToc(DocIterator const & di, bool output_active,
-                                 UpdateType utype, TocBackend & backend) const override;
+                     UpdateType utype, TocBackend & backend) const override;
        ///
        InsetCode lyxCode() const override { return NOMENCL_CODE; }
        ///
@@ -48,18 +48,15 @@ public:
        void docbook(XMLStream &, OutputParams const &) const override;
        /// Does nothing at the moment.
        docstring xhtml(XMLStream &, OutputParams const &) const override;
+       ///
+       InsetNomencl const * asInsetNomencl() const override { return this; }
        //@}
-
-       /// \name Static public methods obligated for InsetCommand derived classes
-       //@{
        ///
-       static ParamInfo const & findInfo(std::string const &);
+       docstring getSymbol() const;
        ///
-       static std::string defaultCommand() { return "nomenclature"; }
+       docstring getDescription() const;
        ///
-       static bool isCompatibleCommand(std::string const & s)
-               { return s == "nomenclature"; }
-       //@}
+       docstring getPrefix() const;
 
 private:
        /// \name Private functions inherited from Inset class
@@ -68,10 +65,12 @@ private:
        Inset * clone() const override { return new InsetNomencl(*this); }
        //@}
 
-       /// \name Private functions inherited from InsetCommand class
+       /// \name Private functions inherited from InsetCollapsible class
        //@{
        ///
-       docstring screenLabel() const override;
+       docstring layoutName() const override { return from_ascii("Nomenclature"); }
+       ///
+       void write(std::ostream & os) const override;
        //@}
 };
 
index 57fc2f0668df43f8694a5e1e8a66ef36d0f18094..9af7ff9359eb08695fbeafa0e457042ad774895f 100644 (file)
@@ -5005,36 +5005,13 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
 
                if (t.cs() == "nomenclature") {
                        context.check_layout(os);
-                       begin_command_inset(os, "nomenclature", "nomenclature");
-                       string prefix = convert_literate_command_inset_arg(p.getArg('[', ']'));
-                       if (!prefix.empty())
-                               os << "prefix " << '"' << prefix << '"' << "\n";
-                       // nomencl activates %
-                       CatCode savecc = p.catcode('%');
-                       p.setCatcode('%', catActive);
-                       string symbol = p.verbatim_item();
-                       p.setCatcode('%', savecc);
-                       // escape quotation marks
-                       symbol = subst(symbol, "\"", "\\\"");
-                       pair<bool, string> sym = convert_latexed_command_inset_arg(symbol);
-                       bool literal = !sym.first;
-                       string description = p.verbatim_item();
-                       // escape quotation marks
-                       description = subst(description, "\"", "\\\"");
-                       pair<bool, string> desc = convert_latexed_command_inset_arg(description);
-                       literal |= !desc.first;
-                       if (literal) {
-                               symbol = subst(symbol, "\n", " ");
-                               description = subst(description, "\n", " ");
-                       } else {
-                               symbol = sym.second;
-                               description = desc.second;
-                       }
-                       string lit = literal ? "\"true\"" : "\"false\"";
-                       os << "symbol " << '"' << symbol;
-                       os << "\"\ndescription \""
-                          << description << "\"\n"
-                          << "literal " << lit << "\n";
+                       begin_inset(os, "Nomenclature\n");
+                       os << "status open\n";
+                       set<string> pass_thru_cmds = context.pass_thru_cmds;
+                       // These commands have special meanings in Nomenclature
+                       context.pass_thru_cmds.insert("%");
+                       parse_text_in_inset(p, os, FLAG_ITEM, outer, context, "Nomenclature");
+                       context.pass_thru_cmds = pass_thru_cmds;
                        end_inset(os);
                        preamble.registerAutomaticallyLoadedPackage("nomencl");
                        continue;
index d1523c6054051e62abc68ffcd5e11f6c493bc505..714f8c08bfb3b8b49abc4df34491ee23a3a07b48 100644 (file)
@@ -32,8 +32,8 @@ extern char const * const lyx_version_info;
 
 // Do not remove the comment below, so we get merge conflict in
 // independent branches. Instead add your own.
-#define LYX_FORMAT_LYX 626 // spitz: printnomencl setwidth
-#define LYX_FORMAT_TEX2LYX 626
+#define LYX_FORMAT_LYX 627 // spitz: nomencl collapsible
+#define LYX_FORMAT_TEX2LYX 627
 
 #if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
 #ifndef _MSC_VER