void setIgnoreFormat(string type, bool value)
{
- ignoreFormats.setIgnoreFormat(type, value);
+ ignoreFormats.setIgnoreFormat(type, value);
}
int upper;
};
+static vector<Border> borders = vector<Border>(30);
+
#define MAXOPENED 30
class Intervall {
bool isPatternString;
int depts[MAXOPENED];
int closes[MAXOPENED];
int actualdeptindex;
- Border borders[2*MAXOPENED];
int previousNotIgnored(int);
int nextNotIgnored(int);
void handleOpenP(int i);
static void checkDepthIndex(int val)
{
static int maxdepthidx = MAXOPENED-2;
+ static int lastmaxdepth = 0;
+ if (val > lastmaxdepth) {
+ LYXERR0("Depth reached " << val);
+ lastmaxdepth = val;
+ }
if (val > maxdepthidx) {
maxdepthidx = val;
LYXERR0("maxdepthidx now " << val);
}
}
+#if 0
+// Not needed, because borders are now dynamically expanded
static void checkIgnoreIdx(int val)
{
- static int maxignoreidx = 2*MAXOPENED - 4;
- if (val > maxignoreidx) {
- maxignoreidx = val;
- LYXERR0("maxignoreidx now " << val);
+ static int lastmaxignore = -1;
+ if ((lastmaxignore < val) && (size_t(val+1) >= borders.size())) {
+ LYXERR0("IgnoreIdx reached " << val);
+ lastmaxignore = val;
}
}
+#endif
/*
* Expand the region of ignored parts of the input latex string
}
Border br(low, upper);
if (idx > ignoreidx) {
- borders[idx] = br;
+ if (borders.size() <= size_t(idx)) {
+ borders.push_back(br);
+ }
+ else {
+ borders[idx] = br;
+ }
ignoreidx = idx;
- checkIgnoreIdx(ignoreidx);
+ // checkIgnoreIdx(ignoreidx);
return;
}
else {
// We know here that br.low > borders[idx-1].upper
if (br.upper < borders[idx].low) {
// We have to insert at this pos
- for (int i = ignoreidx+1; i > idx; --i) {
+ if (size_t(ignoreidx+1) >= borders.size()) {
+ borders.push_back(borders[ignoreidx]);
+ }
+ else {
+ borders[ignoreidx+1] = borders[ignoreidx];
+ }
+ for (int i = ignoreidx; i > idx; --i) {
borders[i] = borders[i-1];
}
borders[idx] = br;
ignoreidx += 1;
- checkIgnoreIdx(ignoreidx);
+ // checkIgnoreIdx(ignoreidx);
return;
}
// Here we know, that we are overlapping
// get the corresponding utf8-value
if ((values[start] & 0xc0) != 0xc0) {
// should not happen, utf8 encoding starts at least with 11xxxxxx
- // but value for '\dot{i}' is 'i', which is ascii
- if ((values[start] & 0x80) == 0) {
- // is ascii
- accents[key] = values.substr(start, 1);
- }
- start++;
- continue;
+ // but value for '\dot{i}' is 'i', which is ascii
+ if ((values[start] & 0x80) == 0) {
+ // is ascii
+ accents[key] = values.substr(start, 1);
+ // LYXERR0("" << key << "=" << accents[key]);
+ }
+ start++;
+ continue;
}
for (int j = 1; ;j++) {
if (start + j >= values.size()) {
// This is the first byte of following utf8 char
accents[key] = values.substr(start, j);
start += j;
+ // LYXERR0("" << key << "=" << accents[key]);
break;
}
}
buildaccent("ddot", "aAeEiIioOuUyY",
"äÄëËïÏïöÖüÜÿŸ"); // umlaut
buildaccent("dot|.", "cCeEGgIizZaAoObBdDfFyY",
- "ċĊėĖĠġİİżŻȧȦȯȮḃḂḋḊḟḞẏẎ"); // dot{i} can only happen if ignoring case, but there is no lowercase of 'İ'
+ "ċĊėĖĠġİİżŻȧȦȯȮḃḂḋḊḟḞẏẎ"); // dot{i} can only happen if ignoring case, but there is no lowercase of 'İ'
accents["acute{\\imath}"] = "í";
buildaccent("acute", "aAcCeElLoOnNrRsSuUyYzZiI",
"áÁćĆéÉĺĹóÓńŃŕŔśŚúÚýÝźŹíÍ");
buildaccent("dacute|H|h", "oOuU", "őŐűŰ"); // double acute
buildaccent("mathring|r", "aAuUwy",
- "åÅůŮẘẙ"); // ring
+ "åÅůŮẘẙ"); // ring
accents["check{\\imath}"] = "ǐ";
accents["check{\\jmath}"] = "ǰ";
buildaccent("check|v", "cCdDaAeEiIoOuUgGkKhHlLnNrRsSTtzZ",
"ãÃñÑõÕĩĨũŨ"); // tilde
accents["breve{\\imath}"] = "ĭ";
buildaccent("breve|u", "aAeEgGiIoOuU",
- "ăĂĕĔğĞĭĬŏŎŭŬ"); // breve
+ "ăĂĕĔğĞĭĬŏŎŭŬ"); // breve
accents["grave{\\imath}"] = "ì";
buildaccent("grave|`", "aAeEiIoOuUnNwWyY",
- "àÀèÈìÌòÒùÙǹǸẁẀỳỲ"); // grave
+ "àÀèÈìÌòÒùÙǹǸẁẀỳỲ"); // grave
buildaccent("subdot|d", "BbDdHhKkLlMmNnRrSsTtVvWwZzAaEeIiOoUuYy",
- "ḄḅḌḍḤḥḲḳḶḷṂṃṆṇṚṛṢṣṬṭṾṿẈẉẒẓẠạẸẹỊịỌọỤụỴỵ"); // dot below
+ "ḄḅḌḍḤḥḲḳḶḷṂṃṆṇṚṛṢṣṬṭṾṿẈẉẒẓẠạẸẹỊịỌọỤụỴỵ"); // dot below
buildaccent("ogonek|k", "AaEeIiUuOo",
- "ĄąĘęĮįŲųǪǫ"); // ogonek
- buildaccent("cedilla|c", "CcGKkLlNnRrSsTtEeDdHh",
- "Ã\87çĢĶķĻļÅ\85Å\86Å\96Å\97Å\9eÅ\9fŢţȨȩá¸\90á¸\91Ḩḩ"); // cedilla
+ "ĄąĘęĮįŲųǪǫ"); // ogonek
+ buildaccent("cedilla|c", "CcGgKkLlNnRrSsTtEeDdHh",
+ "Ã\87çĢĢĶķĻļÅ\85Å\86Å\96Å\97Å\9eÅ\9fŢţȨȩá¸\90á¸\91Ḩḩ"); // cedilla
buildaccent("subring|textsubring", "Aa",
- "Ḁḁ"); // subring
+ "Ḁḁ"); // subring
buildaccent("subhat|textsubcircum", "DdEeLlNnTtUu",
- "ḒḓḘḙḼḽṊṋṰṱṶṷ"); // subcircum
+ "ḒḓḘḙḼḽṊṋṰṱṶṷ"); // subcircum
buildaccent("subtilde|textsubtilde", "EeIiUu",
- "ḚḛḬḭṴṵ"); // subtilde
+ "ḚḛḬḭṴṵ"); // subtilde
}
/*
{
if (accents.empty())
buildAccentsMap();
- static regex const accre("\\\\((.|grave|breve|lyxmathsym|text|ddot|dot|acute|dacute|mathring|check|hat|bar|tilde|subdot|ogonek|cedilla|subring|textsubring|subhat|textsubcircum|subtilde|textsubtilde)\\{[^\\{\\}]+\\}|(i|imath|jmath)(?![a-zA-Z]))");
+ static regex const accre("\\\\(([\\S]|grave|breve|lyxmathsym|text|ddot|dot|acute|dacute|mathring|check|hat|bar|tilde|subdot|ogonek|cedilla|subring|textsubring|subhat|textsubcircum|subtilde|textsubtilde)\\{[^\\{\\}]+\\}|(i|imath|jmath)(?![a-zA-Z]))");
smatch sub;
for (sregex_iterator itacc(par.begin(), par.end(), accre), end; itacc != end; ++itacc) {
sub = *itacc;