Transform InsetNomenclature to a collapsible

Fixes: #10460, #12595, #6353
This commit is contained in:
Juergen Spitzmueller 2024-08-12 12:33:16 +02:00
parent 66afab4497
commit a5841b3312
24 changed files with 449 additions and 655 deletions

View 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> 2024-07-21 Jürgen Spitzmüller <spitz@lyx.org>
* Format incremented to 626: Support for manuel longest label in * Format incremented to 626: Support for manuel longest label in
\printnomencl (via new param option set_width "textwidth"). \printnomencl (via new param option set_width "textwidth").

View File

@ -36569,7 +36569,11 @@ nomencl
installed. installed.
You find it in the \SpecialChar TeX You find it in the \SpecialChar TeX
catalogue, catalog
\change_deleted -712698321 1723454635
ue
\change_unchanged
,
\begin_inset CommandInset citation \begin_inset CommandInset citation
LatexCommand cite LatexCommand cite
@ -36579,7 +36583,13 @@ literal "true"
\end_inset \end_inset
or in the package manager of your \SpecialChar LaTeX or in the package manager of your \SpecialChar LaTeX
-system.
\change_inserted -712698321 1723454632
\change_deleted -712698321 1723454632
-
\change_unchanged
system.
\end_layout \end_layout
\begin_layout Standard \begin_layout Standard
@ -36603,7 +36613,13 @@ arg "nomencl-insert"
\end_inset \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 \begin_inset Quotes eld
\end_inset \end_inset
@ -36615,7 +36631,17 @@ Nom
\begin_inset Quotes erd \begin_inset Quotes erd
\end_inset \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 \end_layout
\begin_layout Standard \begin_layout Standard
@ -36630,9 +36656,25 @@ Symbol
Description Description
\family default \family default
of the term or symbol. 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 \end_layout
\begin_layout Standard \begin_layout Standard
\change_deleted -712698321 1723454741
\begin_inset Note Greyedout \begin_inset Note Greyedout
status open status open
@ -36653,6 +36695,8 @@ Literal
\end_inset \end_inset
\change_unchanged
\end_layout \end_layout
\begin_layout Subsection \begin_layout Subsection
@ -36682,6 +36726,11 @@ Layout
\end_layout \end_layout
\begin_layout Standard \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, If you have symbols in formulas,
you have to define them in the you have to define them in the
\family sans \family sans
@ -36749,6 +36798,8 @@ Sigma
\end_layout \end_layout
\begin_layout Standard \begin_layout Standard
\change_deleted -712698321 1723454925
(A short introduction to the \SpecialChar LaTeX (A short introduction to the \SpecialChar LaTeX
syntax is given in section syntax is given in section
\begin_inset space ~ \begin_inset space ~
@ -36766,6 +36817,8 @@ nolink "false"
\end_layout \end_layout
\begin_layout Standard \begin_layout Standard
\change_deleted -712698321 1723454925
You cannot use the You cannot use the
\family sans \family sans
Text Text
@ -36851,6 +36904,8 @@ emphasized
emph emph
\series default \series default
. .
\change_unchanged
\end_layout \end_layout
\begin_layout Standard \begin_layout Standard
@ -36899,6 +36954,8 @@ serif
\end_layout \end_layout
\begin_layout Standard \begin_layout Standard
\change_deleted -712698321 1723454959
If the characters | If the characters |
\begin_inset space \space{} \begin_inset space \space{}
\end_inset \end_inset
@ -36931,6 +36988,8 @@ literal "true"
\end_inset \end_inset
\change_unchanged
\end_layout \end_layout
\begin_layout Subsection \begin_layout Subsection
@ -36961,8 +37020,20 @@ Sort order
\begin_layout Standard \begin_layout Standard
The nomenclature entries are sorted alphabetically by the \SpecialChar LaTeX 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, for example,
have symbols in formulas. have symbols in formulas.
Suppose you have nomenclature entries for the symbols Suppose you have nomenclature entries for the symbols
@ -37040,7 +37111,9 @@ $
\begin_layout Standard \begin_layout Standard
To control the sort order, To control the sort order,
you can edit the you can
\change_deleted -712698321 1723454992
edit the
\family sans \family sans
Sort Sort
\begin_inset space ~ \begin_inset space ~
@ -37048,7 +37121,19 @@ Sort
as as
\family default \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. Then the nomenclature entry will be sorted by this entry and not the symbol definition.
For the example given, For the example given,
you can insert you can insert

View File

@ -35929,8 +35929,7 @@ nomencl
installiert sein. installiert sein.
Sie finden es im \SpecialChar TeX Sie finden es im \SpecialChar TeX
-Katalog, -Katalog
\begin_inset CommandInset citation \begin_inset CommandInset citation
LatexCommand cite LatexCommand cite
key "TeX-Katalog" key "TeX-Katalog"
@ -35956,11 +35955,13 @@ arg "nomencl-insert"
\end_inset \end_inset
wählen. wählen.
Ein graues Kästchen mit der Aufschrift Eine aufklappbare Einfügung mit der Aufschrift
\family sans \family sans
Nom Nom
\family default \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: Ein Nomenklatur-Eintrag besteht aus zwei Hauptteilen:
das das
\family sans \family sans
@ -35971,30 +35972,12 @@ Symbol
Beschreibung Beschreibung
\family default \family default
. .
\end_layout Ersteres wird direkt in die Einfügung geschrieben,
letzteres in die Untereinfügung
\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
\family sans \family sans
Unformatiert Beschreibung
\family default \family default
im Nomenklatur-Dialog aktiviert sein. .
\end_layout
\end_inset
\end_layout \end_layout
\begin_layout Subsection \begin_layout Subsection
@ -36024,139 +36007,7 @@ Layout
\end_layout \end_layout
\begin_layout Standard \begin_layout Standard
Wenn Sie Symbole in Formeln haben, Innerhalb der Nomenklatur-Einfügung können Sie wie üblich Text formatieren und den Mathe-Modus verwenden.
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
.
\end_layout \end_layout
\begin_layout Standard \begin_layout Standard
@ -36198,48 +36049,6 @@ serifenlos
. .
\end_layout \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 \begin_layout Subsection
Nomenklatur-Einträge sortieren Nomenklatur-Einträge sortieren
\begin_inset Index idx \begin_inset Index idx
@ -36326,24 +36135,16 @@ a
\begin_layout Standard \begin_layout Standard
Um das zu ändern, Um das zu ändern,
können Sie etwas ins Feld verwenden Sie die Untereinfügung
\family sans \family sans
Einsortieren Sortieren als
\begin_inset space \space{}
\end_inset
als
\family default \family default
schreiben, ,
zum Beispiel die Sie im Menü
\family typewriter \family sans
sigma Einfügen
\family default \family default
bei finden.
\begin_inset Formula $\sigma$
\end_inset
.
Dann stimmt die Sortierreihenfolge wieder. Dann stimmt die Sortierreihenfolge wieder.
\end_layout \end_layout

View File

@ -453,6 +453,37 @@ InsetLayout IndexMacro:subentry
LabelString "Subentry" LabelString "Subentry"
End 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 InsetLayout Box
InheritFont false InheritFont false
LabelFont LabelFont

View File

@ -237,7 +237,7 @@ def lyx2latex(document, lines):
content = "" content = ""
ert_end = 0 ert_end = 0
note_end = 0 note_end = -1
hspace = "" hspace = ""
for curline in range(len(lines)): for curline in range(len(lines)):

View File

@ -21,18 +21,19 @@ import re
# Uncomment only what you need to import, please (lyx2lyx_tools): # Uncomment only what you need to import, please (lyx2lyx_tools):
# convert_info_insets, get_ert, hex2ratio, insert_to_preamble, # 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_flex_inset, revert_flex_inset, revert_font_attrs,
# revert_language, str2bool # revert_language, str2bool
from lyx2lyx_tools import ( from lyx2lyx_tools import (
add_to_preamble, add_to_preamble,
latex_length, latex_length,
lyx2latex,
put_cmd_in_ert put_cmd_in_ert
) )
# Uncomment only what you need to import, please (parser_tools): # Uncomment only what you need to import, please (parser_tools):
# check_token, count_pars_in_inset, del_complete_lines, # 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_re, find_substring, find_token_backwards, find_token_exact,
# find_tokens, get_bool_value, get_containing_inset, # find_tokens, get_bool_value, get_containing_inset,
# get_containing_layout, get_option_value, # get_containing_layout, get_option_value,
@ -40,6 +41,7 @@ from lyx2lyx_tools import (
from parser_tools import ( from parser_tools import (
del_token, del_token,
find_end_of_inset, find_end_of_inset,
find_end_of_layout,
find_re, find_re,
find_token, find_token,
get_quoted_value, get_quoted_value,
@ -479,6 +481,145 @@ def revert_nomencl_textwidth(document):
i = j 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 # Conversion hub
# #
@ -490,11 +631,13 @@ convert = [
[623, [convert_he_letter]], [623, [convert_he_letter]],
[624, [convert_biblatex_chicago]], [624, [convert_biblatex_chicago]],
[625, []], [625, []],
[626, []] [626, []],
[627, [convert_nomencl]]
] ]
revert = [ revert = [
[626, [revert_nomencl]],
[625, [revert_nomencl_textwidth]], [625, [revert_nomencl_textwidth]],
[624, [revert_nptextcite]], [624, [revert_nptextcite]],
[623, [revert_biblatex_chicago]], [623, [revert_biblatex_chicago]],

View File

@ -393,7 +393,7 @@ Menuset
Captions Captions
Indices Indices
OptSubmenu "Index Properties" "index_properties" OptSubmenu "Index Properties" "index_properties"
Item "Nomenclature Entry...|y" "nomencl-insert" Item "Nomenclature Entry|y" "nomencl-insert"
Separator Separator
Item "Table...|T" "tabular-insert" Item "Table...|T" "tabular-insert"
Item "Graphics...|G" "dialog-show-new-inset graphics" Item "Graphics...|G" "dialog-show-new-inset graphics"

View File

@ -289,6 +289,7 @@ ColorSet::ColorSet()
{ Color_footlabel, N_("footnote label"), "footlabel", "#00aaff", blue, "footlabel" }, { Color_footlabel, N_("footnote label"), "footlabel", "#00aaff", blue, "footlabel" },
{ Color_indexlabel, N_("index label"), "indexlabel", Green, teal, "indexlabel" }, { Color_indexlabel, N_("index label"), "indexlabel", Green, teal, "indexlabel" },
{ Color_marginlabel, N_("margin note label"), "marginlabel", "#aa55ff", violet, "marginlabel" }, { 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_urllabel, N_("URL label"), "urllabel", blue, blue, "urllabel" },
{ Color_urltext, N_("URL text"), "urltext", blue, "#86a4ff", "urltext" }, { Color_urltext, N_("URL text"), "urltext", blue, "#86a4ff", "urltext" },
{ Color_depthbar, N_("depth bar"), "depthbar", IndianRed, IndianRed, "depthbar" }, { Color_depthbar, N_("depth bar"), "depthbar", IndianRed, IndianRed, "depthbar" },

View File

@ -105,6 +105,8 @@ enum ColorCode {
Color_indexlabel, Color_indexlabel,
/// Label color for margin notes /// Label color for margin notes
Color_marginlabel, Color_marginlabel,
/// Label color for nomenclature insets
Color_nomlabel,
/// Text color for phantom insets /// Text color for phantom insets
Color_phantomtext, Color_phantomtext,
/// Label color for URL insets /// Label color for URL insets

View File

@ -3643,8 +3643,10 @@ bool doInsertInset(Cursor & cur, Text * text,
bool gotsel = false; bool gotsel = false;
bool move_layout = false; bool move_layout = false;
bool const copy_cotext = cmd.action() == LFUN_INDEX_INSERT
|| cmd.action() == LFUN_NOMENCL_INSERT;
if (cur.selection()) { if (cur.selection()) {
if (cmd.action() == LFUN_INDEX_INSERT) if (copy_cotext)
copySelectionToTemp(cur); copySelectionToTemp(cur);
else { else {
cutSelectionToTemp(cur, pastesel); cutSelectionToTemp(cur, pastesel);
@ -3662,7 +3664,7 @@ bool doInsertInset(Cursor & cur, Text * text,
} }
cur.clearSelection(); cur.clearSelection();
gotsel = true; gotsel = true;
} else if (cmd.action() == LFUN_INDEX_INSERT) { } else if (copy_cotext) {
gotsel = text->selectWordWhenUnderCursor(cur, WHOLE_WORD); gotsel = text->selectWordWhenUnderCursor(cur, WHOLE_WORD);
copySelectionToTemp(cur); copySelectionToTemp(cur);
cur.clearSelection(); cur.clearSelection();
@ -3708,11 +3710,42 @@ bool doInsertInset(Cursor & cur, Text * text,
*/ */
if (!move_layout) if (!move_layout)
cur.paragraph().setPlainOrDefaultLayout(bparams.documentClass()); cur.paragraph().setPlainOrDefaultLayout(bparams.documentClass());
// FIXME: what does this do? // Insert auto-insert arguments
if (cmd.action() == LFUN_FLEX_INSERT) bool autoargs = false, inautoarg = false;
return true; 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; Cursor old = cur;
cur.leaveInset(*inset); if (!autoargs)
cur.leaveInset(*inset);
if (cmd.action() == LFUN_PREVIEW_INSERT if (cmd.action() == LFUN_PREVIEW_INSERT
|| cmd.action() == LFUN_IPA_INSERT) || cmd.action() == LFUN_IPA_INSERT)
// trigger preview // trigger preview
@ -5517,17 +5550,20 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
case LFUN_BOX_INSERT: case LFUN_BOX_INSERT:
case LFUN_BRANCH_INSERT: case LFUN_BRANCH_INSERT:
case LFUN_PHANTOM_INSERT: case LFUN_PHANTOM_INSERT:
case LFUN_FLEX_INSERT:
case LFUN_ERT_INSERT: case LFUN_ERT_INSERT:
case LFUN_INDEXMACRO_INSERT: case LFUN_INDEXMACRO_INSERT:
case LFUN_LISTING_INSERT: case LFUN_LISTING_INSERT:
case LFUN_MARGINALNOTE_INSERT: case LFUN_MARGINALNOTE_INSERT:
case LFUN_ARGUMENT_INSERT: case LFUN_ARGUMENT_INSERT:
case LFUN_INDEX_INSERT: case LFUN_INDEX_INSERT:
case LFUN_NOMENCL_INSERT:
case LFUN_PREVIEW_INSERT: case LFUN_PREVIEW_INSERT:
case LFUN_SCRIPT_INSERT: case LFUN_SCRIPT_INSERT:
case LFUN_IPA_INSERT: { case LFUN_IPA_INSERT: {
// Indexes reset font formatting (#11961) // Indexes and Nomencl reset font formatting (#11961)
bool const resetfont = cmd.action() == LFUN_INDEX_INSERT; bool const resetfont = cmd.action() == LFUN_INDEX_INSERT
|| cmd.action() == LFUN_NOMENCL_INSERT;
// Open the inset, and move the current selection // Open the inset, and move the current selection
// inside it. // inside it.
doInsertInset(cur, this, cmd, true, true, resetfont); doInsertInset(cur, this, cmd, true, true, resetfont);
@ -5539,51 +5575,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
break; 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: { case LFUN_TABULAR_INSERT: {
// if there were no arguments, just open the dialog // if there were no arguments, just open the dialog
if (cmd.argument().empty()) { if (cmd.argument().empty()) {
@ -5710,19 +5701,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
break; 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: { case LFUN_INDEX_PRINT: {
InsetCommandParams p(INDEX_PRINT_CODE); InsetCommandParams p(INDEX_PRINT_CODE);
if (cmd.argument().empty()) if (cmd.argument().empty())

View File

@ -233,11 +233,8 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd)
case LFUN_IPA_INSERT: case LFUN_IPA_INSERT:
return new InsetIPA(buf); return new InsetIPA(buf);
case LFUN_NOMENCL_INSERT: { case LFUN_NOMENCL_INSERT:
InsetCommandParams icp(NOMENCL_CODE); return new InsetNomencl(buf);
icp["symbol"] = cmd.argument();
return new InsetNomencl(buf, icp);
}
case LFUN_TABULAR_INSERT: { case LFUN_TABULAR_INSERT: {
if (cmd.argument().empty()) if (cmd.argument().empty())
@ -380,11 +377,8 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd)
return new InsetListings(buf, par); return new InsetListings(buf, par);
} }
case NOMENCL_CODE: { case NOMENCL_CODE:
InsetCommandParams icp(code); return new InsetNomencl(buf);
InsetCommand::string2params(to_utf8(cmd.argument()), icp);
return new InsetNomencl(buf, icp);
}
case REF_CODE: { case REF_CODE: {
InsetCommandParams icp(code); InsetCommandParams icp(code);
@ -585,9 +579,6 @@ Inset * readInset(Lexer & lex, Buffer * buf)
case LINE_CODE: case LINE_CODE:
inset.reset(new InsetLine(buf, inscmd)); inset.reset(new InsetLine(buf, inscmd));
break; break;
case NOMENCL_CODE:
inset.reset(new InsetNomencl(buf, inscmd));
break;
case NOMENCL_PRINT_CODE: case NOMENCL_PRINT_CODE:
inset.reset(new InsetPrintNomencl(buf, inscmd)); inset.reset(new InsetPrintNomencl(buf, inscmd));
break; break;
@ -689,6 +680,8 @@ Inset * readInset(Lexer & lex, Buffer * buf)
inset.reset(new InsetIPA(buf)); inset.reset(new InsetIPA(buf));
} else if (tmptok == "IPADeco") { } else if (tmptok == "IPADeco") {
inset.reset(new InsetIPADeco(buf, tmptok)); inset.reset(new InsetIPADeco(buf, tmptok));
} else if (tmptok == "Nomenclature") {
inset.reset(new InsetNomencl(buf));
} else if (tmptok == "Preview") { } else if (tmptok == "Preview") {
inset.reset(new InsetPreview(buf)); inset.reset(new InsetPreview(buf));
} else { } else {

View File

@ -41,7 +41,6 @@
#include "GuiLog.h" #include "GuiLog.h"
#include "GuiLyXFiles.h" #include "GuiLyXFiles.h"
#include "GuiMathMatrix.h" #include "GuiMathMatrix.h"
#include "GuiNomenclature.h"
#include "GuiNote.h" #include "GuiNote.h"
#include "GuiParagraph.h" #include "GuiParagraph.h"
#include "GuiPhantom.h" #include "GuiPhantom.h"
@ -111,9 +110,6 @@ Dialog * createDialog(GuiView & gv, string const & name)
case MATH_SPACE_CODE: case MATH_SPACE_CODE:
widget = new GuiHSpace(true); widget = new GuiHSpace(true);
break; break;
case NOMENCL_CODE:
widget = new GuiNomenclature;
break;
case NOMENCL_PRINT_CODE: case NOMENCL_PRINT_CODE:
widget = new GuiPrintNomencl; widget = new GuiPrintNomencl;
break; break;

View File

@ -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"

View File

@ -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

View File

@ -77,7 +77,7 @@ void GuiPrintNomencl::paramsToDialog(InsetCommandParams const & params)
void GuiPrintNomencl::paramsToDialog(Inset const * inset) 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()); paramsToDialog(nomencl->params());
} }
@ -94,7 +94,7 @@ docstring GuiPrintNomencl::dialogToParams() const
else if (set_width == from_ascii("textwidth")) else if (set_width == from_ascii("textwidth"))
width = qstring_to_ucs4(valueLE->text()); width = qstring_to_ucs4(valueLE->text());
params["width"] = width; params["width"] = width;
return from_ascii(InsetNomencl::params2string(params)); return from_ascii(InsetPrintNomencl::params2string(params));
} }

View File

@ -22,7 +22,6 @@
#include "GuiInfo.h" #include "GuiInfo.h"
#include "GuiLabel.h" #include "GuiLabel.h"
#include "GuiLine.h" #include "GuiLine.h"
#include "GuiNomenclature.h"
#include "GuiPrintNomencl.h" #include "GuiPrintNomencl.h"
#include "GuiTabular.h" #include "GuiTabular.h"
#include "GuiVSpace.h" #include "GuiVSpace.h"

View File

@ -101,7 +101,6 @@ SOURCEFILES = \
GuiLog.cpp \ GuiLog.cpp \
GuiLyXFiles.cpp \ GuiLyXFiles.cpp \
GuiMathMatrix.cpp \ GuiMathMatrix.cpp \
GuiNomenclature.cpp \
GuiNote.cpp \ GuiNote.cpp \
GuiPainter.cpp \ GuiPainter.cpp \
GuiParagraph.cpp \ GuiParagraph.cpp \
@ -216,7 +215,6 @@ MOCHEADER = \
GuiLog.h \ GuiLog.h \
GuiLyXFiles.h \ GuiLyXFiles.h \
GuiMathMatrix.h \ GuiMathMatrix.h \
GuiNomenclature.h \
GuiNote.h \ GuiNote.h \
GuiParagraph.h \ GuiParagraph.h \
GuiPhantom.h \ GuiPhantom.h \
@ -308,7 +306,6 @@ UIFILES = \
MathMatrixUi.ui \ MathMatrixUi.ui \
MathsUi.ui \ MathsUi.ui \
ModulesUi.ui \ ModulesUi.ui \
NomenclUi.ui \
NoteUi.ui \ NoteUi.ui \
NumberingUi.ui \ NumberingUi.ui \
OutputUi.ui \ OutputUi.ui \

View File

@ -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>

View File

@ -52,6 +52,7 @@ class InsetIterator;
class InsetLayout; class InsetLayout;
class InsetList; class InsetList;
class InsetMath; class InsetMath;
class InsetNomencl;
class InsetTabular; class InsetTabular;
class InsetText; class InsetText;
class Language; class Language;
@ -154,6 +155,8 @@ public:
virtual InsetArgument const * asInsetArgument() const { return nullptr; } virtual InsetArgument const * asInsetArgument() const { return nullptr; }
/// is this inset based on the InsetIndex class? /// is this inset based on the InsetIndex class?
virtual InsetIndex const * asInsetIndex() const { return nullptr; } 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? /// is this inset based on the InsetGraphics class?
virtual InsetGraphics * asInsetGraphics() { return nullptr; } virtual InsetGraphics * asInsetGraphics() { return nullptr; }
/// is this inset based on the InsetGraphics class? /// is this inset based on the InsetGraphics class?

View File

@ -76,8 +76,6 @@ static ParamInfo const & findInfo(InsetCode code, string const & cmdName)
return InsetLabel::findInfo(cmdName); return InsetLabel::findInfo(cmdName);
case LINE_CODE: case LINE_CODE:
return InsetLine::findInfo(cmdName); return InsetLine::findInfo(cmdName);
case NOMENCL_CODE:
return InsetNomencl::findInfo(cmdName);
case NOMENCL_PRINT_CODE: case NOMENCL_PRINT_CODE:
return InsetPrintNomencl::findInfo(cmdName); return InsetPrintNomencl::findInfo(cmdName);
case REF_CODE: case REF_CODE:
@ -216,8 +214,6 @@ string InsetCommandParams::getDefaultCmd(InsetCode code)
return InsetLabel::defaultCommand(); return InsetLabel::defaultCommand();
case LINE_CODE: case LINE_CODE:
return InsetLine::defaultCommand(); return InsetLine::defaultCommand();
case NOMENCL_CODE:
return InsetNomencl::defaultCommand();
case NOMENCL_PRINT_CODE: case NOMENCL_PRINT_CODE:
return InsetPrintNomencl::defaultCommand(); return InsetPrintNomencl::defaultCommand();
case REF_CODE: case REF_CODE:
@ -255,8 +251,6 @@ bool InsetCommandParams::isCompatibleCommand(InsetCode code, string const & s)
return InsetLabel::isCompatibleCommand(s); return InsetLabel::isCompatibleCommand(s);
case LINE_CODE: case LINE_CODE:
return InsetLine::isCompatibleCommand(s); return InsetLine::isCompatibleCommand(s);
case NOMENCL_CODE:
return InsetNomencl::isCompatibleCommand(s);
case NOMENCL_PRINT_CODE: case NOMENCL_PRINT_CODE:
return InsetPrintNomencl::isCompatibleCommand(s); return InsetPrintNomencl::isCompatibleCommand(s);
case REF_CODE: case REF_CODE:

View File

@ -13,7 +13,7 @@
#include <config.h> #include <config.h>
#include "InsetNomencl.h" #include "InsetNomencl.h"
#include "InsetNote.h" #include "InsetArgument.h"
#include "Buffer.h" #include "Buffer.h"
#include "Cursor.h" #include "Cursor.h"
@ -51,62 +51,80 @@ namespace lyx {
// //
///////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////
InsetNomencl::InsetNomencl(Buffer * buf, InsetCommandParams const & p) InsetNomencl::InsetNomencl(Buffer * buf)
: InsetCommand(buf, p) : InsetCollapsible(buf)
{} {}
ParamInfo const & InsetNomencl::findInfo(string const & /* cmdName */)
{
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 InsetNomencl::screenLabel() const
{
size_t const maxLabelChars = 25;
docstring label = _("Nom: ") + getParam("symbol");
support::truncateWithEllipsis(label, maxLabelChars);
return label;
}
docstring InsetNomencl::toolTip(BufferView const & /*bv*/, int /*x*/, int /*y*/) const docstring InsetNomencl::toolTip(BufferView const & /*bv*/, int /*x*/, int /*y*/) const
{ {
docstring tip = _("Nomenclature Symbol: ") + getParam("symbol") + "\n"; docstring tip = _("Nomenclature Symbol: ") + getSymbol();
tip += _("Description: ") + "\t" docstring const desc = getDescription();
+ subst(getParam("description"), from_ascii("\\\\"), from_ascii("\n\t")); if (!desc.empty())
if (!getParam("prefix").empty()) tip += "\n" + _("Description: ") + "\t" + getDescription();
tip += "\n" + _("Sorting: ") + getParam("prefix"); docstring const prefix = getPrefix();
if (!prefix.empty())
tip += "\n" + _("Sorting: ") + prefix;
return tip; return tip;
} }
int InsetNomencl::plaintext(odocstringstream & os, void InsetNomencl::write(ostream & os) const
OutputParams const &, size_t) const
{ {
docstring s = "[" + getParam("symbol") + ": " + getParam("description") + "]"; os << to_utf8(layoutName()) << endl;
os << s; InsetCollapsible::write(os);
return s.size(); }
docstring InsetNomencl::getSymbol() const
{
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 & rp, size_t) const
{
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 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::StartTag("glossterm", attr);
xs << xml::escapeString(getParam("symbol")); xs << xml::escapeString(symbol);
xs << xml::EndTag("glossterm"); xs << xml::EndTag("glossterm");
} }
@ -120,16 +138,15 @@ docstring InsetNomencl::xhtml(XMLStream &, OutputParams const &) const
void InsetNomencl::validate(LaTeXFeatures & features) const void InsetNomencl::validate(LaTeXFeatures & features) const
{ {
features.require("nomencl"); features.require("nomencl");
InsetCommand::validate(features); InsetCollapsible::validate(features);
} }
void InsetNomencl::addToToc(DocIterator const & cpit, bool output_active, 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"); TocBuilder & b = backend.builder("nomencl");
b.pushItem(cpit, str, output_active); b.pushItem(cpit, getSymbol(), output_active);
b.pop(); b.pop();
} }
@ -312,16 +329,20 @@ void InsetPrintNomencl::docbook(XMLStream & xs, OutputParams const & runparams)
Inset const * inset = par.getInset(dit.top().pos()); Inset const * inset = par.getInset(dit.top().pos());
if (!inset) if (!inset)
return; return;
InsetCommand const * ic = inset->asInsetCommand(); InsetNomencl const * in = inset->asInsetNomencl();
if (!ic) if (!in)
return; return;
// FIXME We need a link to the paragraph here, so we // FIXME We need a link to the paragraph here, so we
// need some kind of struct. // need some kind of struct.
docstring const symbol = ic->getParam("symbol"); docstring const symbol = in->getSymbol();
docstring const desc = ic->getParam("description"); docstring const desc = in->getDescription();
docstring const prefix = ic->getParam("prefix"); docstring const prefix = in->getPrefix();
docstring const sortas = prefix.empty() ? symbol : prefix; // 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); entries[sortas] = NomenclEntry(symbol, desc, &par);
} }
@ -371,7 +392,7 @@ void InsetPrintNomencl::docbook(XMLStream & xs, OutputParams const & runparams)
namespace { namespace {
docstring nomenclWidest(Buffer const & buffer, OutputParams const & runparams) docstring nomenclWidest(Buffer const & buffer)
{ {
// nomenclWidest() determines and returns the widest used // nomenclWidest() determines and returns the widest used
// nomenclature symbol in the document // nomenclature symbol in the document
@ -394,9 +415,8 @@ docstring nomenclWidest(Buffer const & buffer, OutputParams const & runparams)
nomencl = static_cast<InsetNomencl const *>(inset); nomencl = static_cast<InsetNomencl const *>(inset);
// Use proper formatting. We do not escape makeindex chars here // Use proper formatting. We do not escape makeindex chars here
docstring symbol = nomencl ? docstring symbol = nomencl ?
nomencl->params().prepareCommand(runparams, nomencl->getParam("symbol"), nomencl->getSymbol()
ParamInfo::HANDLING_LATEXIFY) : docstring();
: docstring();
// strip out % characters which are used as escape in nomencl // strip out % characters which are used as escape in nomencl
// but act as comment in our context here // but act as comment in our context here
symbol = subst(symbol, from_ascii("%"), docstring()); symbol = subst(symbol, from_ascii("%"), docstring());
@ -426,7 +446,7 @@ void InsetPrintNomencl::latex(otexstream & os, OutputParams const & runparams_in
OutputParams runparams = runparams_in; OutputParams runparams = runparams_in;
bool const autowidth = getParam("set_width") == "auto"; bool const autowidth = getParam("set_width") == "auto";
if (autowidth || getParam("set_width") == "textwidth") { if (autowidth || getParam("set_width") == "textwidth") {
docstring widest = autowidth ? nomenclWidest(buffer(), runparams) docstring widest = autowidth ? nomenclWidest(buffer())
: getParam("width"); : getParam("width");
// Set the label width via nomencl's command \nomlabelwidth. // Set the label width via nomencl's command \nomlabelwidth.
// This must be output before the command \printnomenclature // This must be output before the command \printnomenclature

View File

@ -13,7 +13,7 @@
#ifndef INSET_NOMENCL_H #ifndef INSET_NOMENCL_H
#define INSET_NOMENCL_H #define INSET_NOMENCL_H
#include "InsetCollapsible.h"
#include "InsetCommand.h" #include "InsetCommand.h"
@ -23,10 +23,10 @@ class LaTeXFeatures;
/** Used to insert nomenclature entries /** Used to insert nomenclature entries
*/ */
class InsetNomencl : public InsetCommand { class InsetNomencl : public InsetCollapsible {
public: public:
/// ///
InsetNomencl(Buffer * buf, InsetCommandParams const &); InsetNomencl(Buffer * buf);
/// \name Public functions inherited from Inset class /// \name Public functions inherited from Inset class
//@{ //@{
@ -38,7 +38,7 @@ public:
void validate(LaTeXFeatures & features) const override; void validate(LaTeXFeatures & features) const override;
/// ///
void addToToc(DocIterator const & di, bool output_active, 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; } InsetCode lyxCode() const override { return NOMENCL_CODE; }
/// ///
@ -48,18 +48,15 @@ public:
void docbook(XMLStream &, OutputParams const &) const override; void docbook(XMLStream &, OutputParams const &) const override;
/// Does nothing at the moment. /// Does nothing at the moment.
docstring xhtml(XMLStream &, OutputParams const &) const override; 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) docstring getPrefix() const;
{ return s == "nomenclature"; }
//@}
private: private:
/// \name Private functions inherited from Inset class /// \name Private functions inherited from Inset class
@ -68,10 +65,12 @@ private:
Inset * clone() const override { return new InsetNomencl(*this); } 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;
//@} //@}
}; };

View File

@ -5005,36 +5005,13 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
if (t.cs() == "nomenclature") { if (t.cs() == "nomenclature") {
context.check_layout(os); context.check_layout(os);
begin_command_inset(os, "nomenclature", "nomenclature"); begin_inset(os, "Nomenclature\n");
string prefix = convert_literate_command_inset_arg(p.getArg('[', ']')); os << "status open\n";
if (!prefix.empty()) set<string> pass_thru_cmds = context.pass_thru_cmds;
os << "prefix " << '"' << prefix << '"' << "\n"; // These commands have special meanings in Nomenclature
// nomencl activates % context.pass_thru_cmds.insert("%");
CatCode savecc = p.catcode('%'); parse_text_in_inset(p, os, FLAG_ITEM, outer, context, "Nomenclature");
p.setCatcode('%', catActive); context.pass_thru_cmds = pass_thru_cmds;
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";
end_inset(os); end_inset(os);
preamble.registerAutomaticallyLoadedPackage("nomencl"); preamble.registerAutomaticallyLoadedPackage("nomencl");
continue; continue;

View File

@ -32,8 +32,8 @@ extern char const * const lyx_version_info;
// Do not remove the comment below, so we get merge conflict in // Do not remove the comment below, so we get merge conflict in
// independent branches. Instead add your own. // independent branches. Instead add your own.
#define LYX_FORMAT_LYX 626 // spitz: printnomencl setwidth #define LYX_FORMAT_LYX 627 // spitz: nomencl collapsible
#define LYX_FORMAT_TEX2LYX 626 #define LYX_FORMAT_TEX2LYX 627
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX #if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
#ifndef _MSC_VER #ifndef _MSC_VER