not
\emph default
whether this command should itself be protected.)
+\change_inserted -712698321 1523696949
+
+\end_layout
+
+\begin_layout Description
+
+\change_inserted -712698321 1523696969
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1523696950
+NeedCProtect
+\end_layout
+
+\end_inset
+
+ [
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1523696950
+
+\emph on
+0
+\end_layout
+
+\end_inset
+
+,
+\begin_inset space \thinspace{}
+\end_inset
+
+
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1523696950
+1
+\end_layout
+
+\end_inset
+
+] This causes macros that contain this layout to be protected with
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1523696950
+
+\backslash
+cprotect
+\end_layout
+
+\end_inset
+
+ (cf.
+ package
+\family sans
+cprotect
+\family default
+) if necessary and thus allows (some) verbatim stuff in macros.
+\change_unchanged
+
\end_layout
\begin_layout Description
LatexType Environment
LatexName verbatim
NextNoIndent 1
- ParbreakIsNewline 1
+ ParbreakIsNewline 1
FreeSpacing 1
PassThru 1
+ NeedCProtect 1
KeepEmpty 1
NewLine 0
TopSep 0.7
LT_LATEXTYPE,
LT_LEFTDELIM,
LT_LEFTMARGIN,
+ LT_NEED_CPROTECT,
LT_NEED_PROTECT,
LT_NEWLINE,
LT_NEXTNOINDENT,
intitle = false;
inpreamble = false;
needprotect = false;
+ needcprotect = false;
keepempty = false;
font = inherit_font;
labelfont = inherit_font;
{ "leftdelim", LT_LEFTDELIM },
{ "leftmargin", LT_LEFTMARGIN },
{ "margin", LT_MARGIN },
+ { "needcprotect", LT_NEED_CPROTECT },
{ "needprotect", LT_NEED_PROTECT },
{ "newline", LT_NEWLINE },
{ "nextnoindent", LT_NEXTNOINDENT },
lex >> needprotect;
break;
+ case LT_NEED_CPROTECT:
+ lex >> needcprotect;
+ break;
+
case LT_KEEPEMPTY:
lex >> keepempty;
break;
it != postcommandargs_.end(); ++it)
writeArgument(os, it->first, it->second);
os << "\tNeedProtect " << needprotect << "\n"
+ "\tNeedCProtect " << needcprotect << "\n"
"\tKeepEmpty " << keepempty << '\n';
if (labelfont == font)
lyxWrite(os, font, "Font", 1);
/** true when the fragile commands in the paragraph need to be
\protect'ed. */
bool needprotect;
+ /** true when the verbatim stuff of this layout needs to ce
+ \cprotect'ed. */
+ bool needcprotect;
/// true when empty paragraphs should be kept.
bool keepempty;
/// Type of LaTeX object
bool Paragraph::needsCProtection() const
{
+ // first check the layout of the paragraph
+ if (layout().needcprotect) {
+ // Environments need cprotection regardless the content
+ if (layout().latextype == LATEX_ENVIRONMENT)
+ return true;
+
+ // Commands need cprotection if they contain specific chars
+ int const nchars_escape = 9;
+ static char_type const chars_escape[nchars_escape] = {
+ '&', '_', '$', '%', '#', '^', '{', '}', '\\'};
+
+ docstring const pars = asString();
+ for (int k = 0; k < nchars_escape; k++) {
+ if (contains(pars, chars_escape[k]))
+ return true;
+ }
+ }
+
+ // now check whether we have insets that need cprotection
pos_type size = d->text_.size();
for (pos_type i = 0; i < size; ++i)
if (isInset(i))