result = command;
ltrimmed = true;
}
- if (handling & ParamInfo::HANDLING_LATEXIFY)
+ if (handling & ParamInfo::HANDLING_LATEXIFY
+ || handling & ParamInfo::HANDLING_INDEX_ESCAPE)
if ((*this)["literal"] == "true")
handling = ParamInfo::HANDLING_NONE;
result = escape(command);
else if (handling & ParamInfo::HANDLING_NONE)
result = command;
+ // INDEX_ESCAPE is independent of the others
+ if (handling & ParamInfo::HANDLING_INDEX_ESCAPE) {
+ // Now escape special commands
+ static docstring const quote = from_ascii("\"");
+ static char_type const chars_escape[4] = { '"', '@', '|', '!' };
+
+ if (!result.empty()) {
+ // The characters in chars_name[] need to be changed to a command when
+ // they are LaTeXified.
+ for (int k = 0; k < 4; k++)
+ for (size_t i = 0, pos;
+ (pos = result.find(chars_escape[k], i)) != string::npos;
+ i = pos + 2)
+ result.replace(pos, 1, quote + chars_escape[k]);
+ }
+ }
return ltrimmed ? ltrim(result) : result;
}
HANDLING_NONE = 1, /// no special handling
HANDLING_ESCAPE = 2, /// escape special characters
HANDLING_LATEXIFY = 4, /// transform special characters to LaTeX macros
- HANDLING_LTRIM = 8 /// trim blanks on the left
+ HANDLING_LTRIM = 8, /// trim blanks on the left
+ HANDLING_INDEX_ESCAPE = 16, /// escape makeindex special chars
};
///
class ParamData {
if (param_info_.empty()) {
param_info_.add("prefix", ParamInfo::LATEX_OPTIONAL);
param_info_.add("symbol", ParamInfo::LATEX_REQUIRED,
- ParamInfo::HANDLING_LATEXIFY);
+ ParamInfo::ParamHandling(ParamInfo::HANDLING_ESCAPE
+ | ParamInfo::HANDLING_INDEX_ESCAPE));
param_info_.add("description", ParamInfo::LATEX_REQUIRED,
- ParamInfo::HANDLING_LATEXIFY);
+ ParamInfo::ParamHandling(ParamInfo::HANDLING_ESCAPE
+ | ParamInfo::HANDLING_INDEX_ESCAPE));
param_info_.add("literal", ParamInfo::LYX_INTERNAL);
}
return param_info_;