mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 02:49:46 +00:00
Introduce NeedCProtect -1 layout option
It turns out beamer frame does not allow \cprotect and errors if it is
used. Hence we need to prevent it in this context entirely.
(cherry picked from commit 207eaeee90
)
This commit is contained in:
parent
544cf0794e
commit
f05fd78754
@ -553,6 +553,7 @@ Style Frame
|
||||
ExampleBlock,AlertBlock,Bibliography,Quotation,Quote,Verse,Corollary,Definition,Definitions,
|
||||
Example,Examples,Fact,Lemma,Proof,Theorem,LyX-Code
|
||||
EndAutoNests
|
||||
NeedCProtect -1
|
||||
End
|
||||
|
||||
Style PlainFrame
|
||||
|
@ -162,6 +162,7 @@ Layout::Layout()
|
||||
inpreamble = false;
|
||||
needprotect = false;
|
||||
needcprotect = false;
|
||||
nocprotect = false;
|
||||
needmboxprotect = false;
|
||||
keepempty = false;
|
||||
font = inherit_font;
|
||||
@ -465,9 +466,17 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass,
|
||||
lex >> needprotect;
|
||||
break;
|
||||
|
||||
case LT_NEED_CPROTECT:
|
||||
lex >> needcprotect;
|
||||
case LT_NEED_CPROTECT: {
|
||||
int i;
|
||||
lex >> i;
|
||||
nocprotect = false;
|
||||
needcprotect = false;
|
||||
if (i == -1)
|
||||
nocprotect = true;
|
||||
else if (i == 1)
|
||||
needcprotect = true;
|
||||
break;
|
||||
}
|
||||
|
||||
case LT_NEED_MBOXPROTECT:
|
||||
lex >> needmboxprotect;
|
||||
|
@ -399,6 +399,9 @@ public:
|
||||
/** true when the verbatim stuff of this layout needs to be
|
||||
\cprotect'ed. */
|
||||
bool needcprotect;
|
||||
/** true when the verbatim stuff of this layout never should be
|
||||
\cprotect'ed. */
|
||||
bool nocprotect;
|
||||
/** true when specific commands in this paragraph need to be
|
||||
protected in an \mbox. */
|
||||
bool needmboxprotect;
|
||||
|
@ -108,6 +108,11 @@ public:
|
||||
*/
|
||||
bool moving_arg = false;
|
||||
|
||||
/** no_cprotect == true means that the layout in which this is
|
||||
* does not allow \cprotect'ing.
|
||||
*/
|
||||
bool no_cprotect = false;
|
||||
|
||||
/** intitle == true means that the environment in which the
|
||||
inset is typeset is part of a title (before a \\maketitle).
|
||||
Footnotes in such environments have moving arguments.
|
||||
|
@ -1172,6 +1172,7 @@ void Paragraph::Private::latexInset(BufferParams const & bparams,
|
||||
? textinset->hasCProtectContent(runparams.moving_arg)
|
||||
&& !textinset->text().isMainText()
|
||||
&& inset->lyxCode() != BRANCH_CODE
|
||||
&& !runparams.no_cprotect
|
||||
: false;
|
||||
unsigned int count2 = basefont.latexWriteStartChanges(os, bparams,
|
||||
rp, running_font,
|
||||
@ -3014,6 +3015,7 @@ void Paragraph::latex(BufferParams const & bparams,
|
||||
? textinset->hasCProtectContent(runparams.moving_arg)
|
||||
&& !textinset->text().isMainText()
|
||||
&& inInset().lyxCode() != BRANCH_CODE
|
||||
&& !runparams.no_cprotect
|
||||
: false;
|
||||
column += current_font.latexWriteStartChanges(ots, bparams,
|
||||
runparams, basefont, last_font, false,
|
||||
|
@ -494,7 +494,7 @@ void InsetText::latex(otexstream & os, OutputParams const & runparams) const
|
||||
// FIXME UNICODE
|
||||
// FIXME \protect should only be used for fragile
|
||||
// commands, but we do not provide this information yet.
|
||||
if (hasCProtectContent(runparams.moving_arg)) {
|
||||
if (!runparams.no_cprotect && hasCProtectContent(runparams.moving_arg)) {
|
||||
if (contains(runparams.active_chars, '^')) {
|
||||
// cprotect relies on ^ being on catcode 7
|
||||
os << "\\begingroup\\catcode`\\^=7";
|
||||
|
@ -404,7 +404,7 @@ static void finishEnvironment(otexstream & os, OutputParams const & runparams,
|
||||
|
||||
|
||||
void TeXEnvironment(Buffer const & buf, Text const & text,
|
||||
OutputParams const & runparams,
|
||||
OutputParams const & runparams_in,
|
||||
pit_type & pit, otexstream & os)
|
||||
{
|
||||
ParagraphList const & paragraphs = text.paragraphs();
|
||||
@ -415,6 +415,9 @@ void TeXEnvironment(Buffer const & buf, Text const & text,
|
||||
depth_type const current_depth = ipar->params().depth();
|
||||
Length const & current_left_indent = ipar->params().leftIndent();
|
||||
|
||||
OutputParams runparams = runparams_in;
|
||||
runparams.no_cprotect = current_layout.nocprotect;
|
||||
|
||||
// This is for debugging purpose at the end.
|
||||
pit_type const par_begin = pit;
|
||||
for (; pit < runparams.par_end; ++pit) {
|
||||
@ -736,7 +739,7 @@ void parStartCommand(Paragraph const & par, otexstream & os,
|
||||
{
|
||||
switch (style.latextype) {
|
||||
case LATEX_COMMAND:
|
||||
if (par.needsCProtection(runparams.moving_arg)) {
|
||||
if (!runparams.no_cprotect && par.needsCProtection(runparams.moving_arg)) {
|
||||
if (contains(runparams.active_chars, '^'))
|
||||
// cprotect relies on ^ being on catcode 7
|
||||
os << "\\begingroup\\catcode`\\^=7";
|
||||
@ -871,7 +874,7 @@ void TeXOnePar(Buffer const & buf,
|
||||
// the code is different (JMarc)
|
||||
if (style.isCommand()) {
|
||||
os << "}";
|
||||
if (par.needsCProtection(runparams.moving_arg)
|
||||
if (!runparams.no_cprotect && par.needsCProtection(runparams.moving_arg)
|
||||
&& contains(runparams.active_chars, '^'))
|
||||
os << "\\endgroup";
|
||||
if (merged_par)
|
||||
@ -1234,7 +1237,7 @@ void TeXOnePar(Buffer const & buf,
|
||||
os << runparams.post_macro;
|
||||
runparams.post_macro.clear();
|
||||
}
|
||||
if (par.needsCProtection(runparams.moving_arg)
|
||||
if (!runparams.no_cprotect && par.needsCProtection(runparams.moving_arg)
|
||||
&& contains(runparams.active_chars, '^'))
|
||||
os << "\\endgroup";
|
||||
if (runparams.encoding != prev_encoding) {
|
||||
@ -1405,7 +1408,7 @@ void TeXOnePar(Buffer const & buf,
|
||||
os << runparams.post_macro;
|
||||
runparams.post_macro.clear();
|
||||
}
|
||||
if (par.needsCProtection(runparams.moving_arg)
|
||||
if (!runparams.no_cprotect && par.needsCProtection(runparams.moving_arg)
|
||||
&& contains(runparams.active_chars, '^'))
|
||||
os << "\\endgroup";
|
||||
if (runparams.encoding != prev_encoding) {
|
||||
|
Loading…
Reference in New Issue
Block a user