CatCode theCatcode[128];
-inline CatCode catcode(lyx::char_type c)
+inline CatCode catcode(char_type c)
{
- /* The fact that we use unicode internally does not change Knuth's TeX
- engine. It is still 7bit only, not even latin1 or something like that.
- Therefore, the catcode table needs only to have 128 entries.
- Everything not in that range is catOther.
- */
+ /* The only characters that are not catOther lie in the pure ASCII
+ * range. Therefore theCatcode has only 128 entries.
+ * TeX itself deals with 8bit characters, so if needed this table
+ * could be enlarged to 256 entries.
+ * Any larger value does not make sense, since the fact that we use
+ * unicode internally does not change Knuth's TeX engine.
+ * Apart from that a table for the full 21bit UCS4 range would waste
+ * too much memory. */
if (c >= 128)
return catOther;
cell->back() = MathAtom(new InsetMathScript(cell->back(), up));
InsetMathScript * p = cell->back().nucleus()->asScriptInset();
// special handling of {}-bases
- // Test for empty brace inset, otherwise \xxx{\vec{H}}_{0}
- // where \xxx is an unknown command gets misparsed to
- // \xxx\vec{H}_{0}, and that is invalid LaTeX.
- // is this always correct?
- if (p->nuc().size() == 1 &&
- p->nuc().back()->asBraceInset() &&
- p->nuc().back()->asBraceInset()->cell(0).empty())
- p->nuc() = p->nuc().back()->asNestInset()->cell(0);
+ // Here we could remove the brace inset for things
+ // like {a'}^2 and add the braces back in
+ // InsetMathScript::write().
+ // We do not do it, since it is not possible to detect
+ // reliably whether the braces are needed because the
+ // nucleus contains more than one symbol, or whether
+ // they are needed for unknown commands like \xx{a}_0
+ // or \yy{a}{b}_0. This was done in revision 14819
+ // in an unreliable way. See this thread
+ // http://www.mail-archive.com/lyx-devel%40lists.lyx.org/msg104917.html
+ // for more details.
parse(p->cell(p->idxOfScript(up)), FLAG_ITEM, mode);
if (limits) {
p->limits(limits);