mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 10:00:33 +00:00
Fix bug #11552
Do not write supefluous braces in optionals of a macro when saving.
This commit is contained in:
parent
911e6412b8
commit
f5510a8a8d
@ -1082,15 +1082,6 @@ void InsetMathMacro::write(WriteStream & os) const
|
|||||||
// we should be ok to continue even if this fails.
|
// we should be ok to continue even if this fails.
|
||||||
LATTEST(d->macro_);
|
LATTEST(d->macro_);
|
||||||
|
|
||||||
// We may already be in the argument of a macro
|
|
||||||
bool const inside_macro = os.insideMacro();
|
|
||||||
os.insideMacro(true);
|
|
||||||
|
|
||||||
// Enclose in braces to avoid latex errors with xargs if we have
|
|
||||||
// optional arguments and are in the optional argument of a macro
|
|
||||||
if (d->optionals_ && inside_macro)
|
|
||||||
os << '{';
|
|
||||||
|
|
||||||
// Always protect macros in a fragile environment
|
// Always protect macros in a fragile environment
|
||||||
if (os.fragile())
|
if (os.fragile())
|
||||||
os << "\\protect";
|
os << "\\protect";
|
||||||
@ -1113,14 +1104,24 @@ void InsetMathMacro::write(WriteStream & os) const
|
|||||||
// For correctly parsing it when a document is reloaded, we
|
// For correctly parsing it when a document is reloaded, we
|
||||||
// need to enclose an optional argument in braces if it starts
|
// need to enclose an optional argument in braces if it starts
|
||||||
// with a script inset with empty nucleus or ends with a
|
// with a script inset with empty nucleus or ends with a
|
||||||
// delimiter-size-modifier macro (see #10497 and #11346)
|
// delimiter-size-modifier macro (see #10497 and #11346).
|
||||||
|
// We also need to do that when the optional argument
|
||||||
|
// contains macros with optionals.
|
||||||
bool braced = false;
|
bool braced = false;
|
||||||
size_type last = cell(i).size() - 1;
|
size_type last = cell(i).size() - 1;
|
||||||
if (cell(i).size() && cell(i)[last].nucleus()->asUnknownInset()) {
|
if (cell(i).size() && cell(i)[last]->asUnknownInset()) {
|
||||||
latexkeys const * l = in_word_set(cell(i)[last].nucleus()->name());
|
latexkeys const * l = in_word_set(cell(i)[last]->name());
|
||||||
braced = (l && l->inset == "big");
|
braced = (l && l->inset == "big");
|
||||||
} else if (cell(i).size() && cell(i)[0].nucleus()->asScriptInset()) {
|
} else if (cell(i).size() && cell(i)[0]->asScriptInset()) {
|
||||||
braced = cell(i)[0].nucleus()->asScriptInset()->nuc().empty();
|
braced = cell(i)[0]->asScriptInset()->nuc().empty();
|
||||||
|
} else {
|
||||||
|
for (size_type j = 0; j < cell(i).size(); ++j) {
|
||||||
|
InsetMathMacro const * ma = cell(i)[j]->asMacro();
|
||||||
|
if (ma && ma->optionals()) {
|
||||||
|
braced = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (braced)
|
if (braced)
|
||||||
os << "[{" << cell(i) << "}]";
|
os << "[{" << cell(i) << "}]";
|
||||||
@ -1144,13 +1145,9 @@ void InsetMathMacro::write(WriteStream & os) const
|
|||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close the opened brace or add space if there was no argument
|
// add space if there was no argument
|
||||||
if (d->optionals_ && inside_macro)
|
if (first)
|
||||||
os << '}';
|
|
||||||
else if (first)
|
|
||||||
os.pendingSpace(true);
|
os.pendingSpace(true);
|
||||||
|
|
||||||
os.insideMacro(inside_macro);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -128,10 +128,10 @@ WriteStream & operator<<(WriteStream & ws, docstring const & s)
|
|||||||
WriteStream::WriteStream(otexrowstream & os, bool fragile, bool latex,
|
WriteStream::WriteStream(otexrowstream & os, bool fragile, bool latex,
|
||||||
OutputType output, Encoding const * encoding)
|
OutputType output, Encoding const * encoding)
|
||||||
: os_(os), fragile_(fragile), firstitem_(false), latex_(latex),
|
: os_(os), fragile_(fragile), firstitem_(false), latex_(latex),
|
||||||
output_(output), insidemacro_(false), pendingspace_(false),
|
output_(output), pendingspace_(false), pendingbrace_(false),
|
||||||
pendingbrace_(false), textmode_(false), locked_(0), ascii_(0),
|
textmode_(false), locked_(0), ascii_(0), canbreakline_(true),
|
||||||
canbreakline_(true), mathsout_(false), ulemcmd_(NONE), line_(0),
|
mathsout_(false), ulemcmd_(NONE), line_(0), encoding_(encoding),
|
||||||
encoding_(encoding), row_entry_(TexRow::row_none)
|
row_entry_(TexRow::row_none)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
@ -81,10 +81,6 @@ public:
|
|||||||
void ulemCmd(UlemCmdType ulemcmd) { ulemcmd_ = ulemcmd; }
|
void ulemCmd(UlemCmdType ulemcmd) { ulemcmd_ = ulemcmd; }
|
||||||
/// tell which ulem command type we are inside
|
/// tell which ulem command type we are inside
|
||||||
UlemCmdType ulemCmd() const { return ulemcmd_; }
|
UlemCmdType ulemCmd() const { return ulemcmd_; }
|
||||||
/// record whether we are in the argument of a math macro
|
|
||||||
void insideMacro(bool insidemacro) { insidemacro_ = insidemacro; }
|
|
||||||
/// tell whether we are in the argument of a math macro
|
|
||||||
bool insideMacro() const { return insidemacro_; }
|
|
||||||
/// writes space if next thing is isalpha()
|
/// writes space if next thing is isalpha()
|
||||||
void pendingSpace(bool how);
|
void pendingSpace(bool how);
|
||||||
/// writes space if next thing is isalpha()
|
/// writes space if next thing is isalpha()
|
||||||
@ -124,8 +120,6 @@ private:
|
|||||||
int latex_;
|
int latex_;
|
||||||
/// output type (default, source preview, instant preview)?
|
/// output type (default, source preview, instant preview)?
|
||||||
OutputType output_;
|
OutputType output_;
|
||||||
/// are we in the argument of a math macro?
|
|
||||||
bool insidemacro_;
|
|
||||||
/// do we have a space pending?
|
/// do we have a space pending?
|
||||||
bool pendingspace_;
|
bool pendingspace_;
|
||||||
/// do we have a brace pending?
|
/// do we have a brace pending?
|
||||||
|
@ -52,6 +52,8 @@ Avoid using text mode for unicode symbols representable in math mode (bug 9616).
|
|||||||
|
|
||||||
- Avoid adding spaces when parsing an array in a macro template (bug 10499).
|
- Avoid adding spaces when parsing an array in a macro template (bug 10499).
|
||||||
|
|
||||||
|
- Avoid superfluous braces in the optional argument of a macro (bug 11552).
|
||||||
|
|
||||||
|
|
||||||
* USER INTERFACE
|
* USER INTERFACE
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user