From: Juergen Spitzmueller Date: Mon, 12 Aug 2024 10:33:16 +0000 (+0200) Subject: Transform InsetNomenclature to a collapsible X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=a5841b3312d549bb7984ea8382afe490129c0750;p=lyx.git Transform InsetNomenclature to a collapsible Fixes: #10460, #12595, #6353 --- diff --git a/development/FORMAT b/development/FORMAT index a8617da9ca..830c45ae45 100644 --- a/development/FORMAT +++ b/development/FORMAT @@ -7,6 +7,10 @@ changes happened in particular if possible. A good example would be ----------------------- +2024-08-12 Jürgen Spitzmüller + * Format incremented to 627: Transform nomenclature inset to + collapsible. + 2024-07-21 Jürgen Spitzmüller * Format incremented to 626: Support for manuel longest label in \printnomencl (via new param option set_width "textwidth"). diff --git a/lib/doc/UserGuide.lyx b/lib/doc/UserGuide.lyx index faeb71e807..29edd0ee7e 100644 --- a/lib/doc/UserGuide.lyx +++ b/lib/doc/UserGuide.lyx @@ -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 @@ -37040,7 +37111,9 @@ $ \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 diff --git a/lib/doc/de/UserGuide.lyx b/lib/doc/de/UserGuide.lyx index 8abfd3e560..40ac1ac44c 100644 --- a/lib/doc/de/UserGuide.lyx +++ b/lib/doc/de/UserGuide.lyx @@ -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 @@ -36326,24 +36135,16 @@ a \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 diff --git a/lib/layouts/stdinsets.inc b/lib/layouts/stdinsets.inc index 250a5154ea..9d1eb8697e 100644 --- a/lib/layouts/stdinsets.inc +++ b/lib/layouts/stdinsets.inc @@ -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 diff --git a/lib/lyx2lyx/lyx2lyx_tools.py b/lib/lyx2lyx/lyx2lyx_tools.py index 9d713609d7..9b29b76747 100644 --- a/lib/lyx2lyx/lyx2lyx_tools.py +++ b/lib/lyx2lyx/lyx2lyx_tools.py @@ -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)): diff --git a/lib/lyx2lyx/lyx_2_5.py b/lib/lyx2lyx/lyx_2_5.py index 2afba6e813..962dd8fe99 100644 --- a/lib/lyx2lyx/lyx_2_5.py +++ b/lib/lyx2lyx/lyx_2_5.py @@ -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]], diff --git a/lib/ui/stdmenus.inc b/lib/ui/stdmenus.inc index 229d351801..b3ed8c9c53 100644 --- a/lib/ui/stdmenus.inc +++ b/lib/ui/stdmenus.inc @@ -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" diff --git a/src/Color.cpp b/src/Color.cpp index 23e40a9c94..dabe9166b4 100644 --- a/src/Color.cpp +++ b/src/Color.cpp @@ -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" }, diff --git a/src/ColorCode.h b/src/ColorCode.h index 9b26e7219c..773b9cfc6b 100644 --- a/src/ColorCode.h +++ b/src/ColorCode.h @@ -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 diff --git a/src/Text.cpp b/src/Text.cpp index 826b4db111..3a137202cf 100644 --- a/src/Text.cpp +++ b/src/Text.cpp @@ -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()) diff --git a/src/factory.cpp b/src/factory.cpp index 0bea07b813..bb36eadef0 100644 --- a/src/factory.cpp +++ b/src/factory.cpp @@ -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 { diff --git a/src/frontends/qt/DialogFactory.cpp b/src/frontends/qt/DialogFactory.cpp index 62f6ab8b9d..df7da75691 100644 --- a/src/frontends/qt/DialogFactory.cpp +++ b/src/frontends/qt/DialogFactory.cpp @@ -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 index 92e7760abe..0000000000 --- a/src/frontends/qt/GuiNomenclature.cpp +++ /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 - -#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(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 index 3799d74767..0000000000 --- a/src/frontends/qt/GuiNomenclature.h +++ /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 diff --git a/src/frontends/qt/GuiPrintNomencl.cpp b/src/frontends/qt/GuiPrintNomencl.cpp index 6533f89a4d..480d31194d 100644 --- a/src/frontends/qt/GuiPrintNomencl.cpp +++ b/src/frontends/qt/GuiPrintNomencl.cpp @@ -77,7 +77,7 @@ void GuiPrintNomencl::paramsToDialog(InsetCommandParams const & params) void GuiPrintNomencl::paramsToDialog(Inset const * inset) { - InsetNomencl const * nomencl = static_cast(inset); + InsetPrintNomencl const * nomencl = static_cast(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)); } diff --git a/src/frontends/qt/InsetParamsDialog.cpp b/src/frontends/qt/InsetParamsDialog.cpp index 67cbfdd94e..0e49aaab33 100644 --- a/src/frontends/qt/InsetParamsDialog.cpp +++ b/src/frontends/qt/InsetParamsDialog.cpp @@ -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" diff --git a/src/frontends/qt/Makefile.am b/src/frontends/qt/Makefile.am index c038e3f882..6cdc6ed865 100644 --- a/src/frontends/qt/Makefile.am +++ b/src/frontends/qt/Makefile.am @@ -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 index 62c93b9d65..0000000000 --- a/src/frontends/qt/ui/NomenclUi.ui +++ /dev/null @@ -1,91 +0,0 @@ - - - NomenclUi - - - - 0 - 0 - 319 - 223 - - - - Nomenclature - - - - - - - - Sy&mbol: - - - symbolED - - - - - - - - - - - - - - Des&cription: - - - descriptionTE - - - - - - - false - - - - - - - Sort &as: - - - prefixED - - - - - - - - - - Pass content of the `Symbol' and `Description' fields literally to LaTeX. Check this if you want to enter LaTeX code. - - - Li&teral - - - - - - - - - - symbolED - descriptionTE - prefixED - - - qt_i18n.h - - - - diff --git a/src/insets/Inset.h b/src/insets/Inset.h index 4340c1f2a0..336843d41a 100644 --- a/src/insets/Inset.h +++ b/src/insets/Inset.h @@ -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? diff --git a/src/insets/InsetCommandParams.cpp b/src/insets/InsetCommandParams.cpp index 523a4c81dc..5b39bc0e41 100644 --- a/src/insets/InsetCommandParams.cpp +++ b/src/insets/InsetCommandParams.cpp @@ -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: diff --git a/src/insets/InsetNomencl.cpp b/src/insets/InsetNomencl.cpp index 9762f8bae9..36471a1026 100644 --- a/src/insets/InsetNomencl.cpp +++ b/src/insets/InsetNomencl.cpp @@ -13,7 +13,7 @@ #include #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(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 diff --git a/src/insets/InsetNomencl.h b/src/insets/InsetNomencl.h index 362cd4699f..3b4f3474c5 100644 --- a/src/insets/InsetNomencl.h +++ b/src/insets/InsetNomencl.h @@ -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; //@} }; diff --git a/src/tex2lyx/text.cpp b/src/tex2lyx/text.cpp index 57fc2f0668..9af7ff9359 100644 --- a/src/tex2lyx/text.cpp +++ b/src/tex2lyx/text.cpp @@ -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 sym = convert_latexed_command_inset_arg(symbol); - bool literal = !sym.first; - string description = p.verbatim_item(); - // escape quotation marks - description = subst(description, "\"", "\\\""); - pair 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 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; diff --git a/src/version.h b/src/version.h index d1523c6054..714f8c08bf 100644 --- a/src/version.h +++ b/src/version.h @@ -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