applySubs static method
void
applySubs()
Implementation
static void applySubs(List<int> gls, int ci, Map<String, dynamic> tab, List<Map<String,dynamic>> llist) {
int rlim = gls.length - ci - 1;
for (int j = 0; j < tab["tabs"].length; j++) {
if (tab["tabs"][j] == null) continue;
Map<String, dynamic> ltab = Map<String, dynamic>.from(tab["tabs"][j]);
int? ind;
if (ltab["coverage"] != null) {
ind = Typr_LCTF.coverageIndex(ltab["coverage"], gls[ci]);
if (ind == -1) continue;
}
var _ltype = tab["ltype"];
var _fmt = ltab["fmt"];
if (_ltype == 1) {
if (_fmt == 1){
gls[ci] = gls[ci] + (ltab["delta"] as int);
}
else{
gls[ci] = ltab["newg"][ind];
}
}
else if (_ltype == 4) {
var vals = ltab["vals"][ind];
for (int k = 0; k < vals.length; k++) {
Map<String, dynamic> lig = vals[k];
int rl = lig["chain"].length;
if (rl > rlim) continue;
bool good = true;
int em1 = 0;
for (int l = 0; l < rl; l++) {
while (gls[ci + em1 + (1 + l)] == -1) em1++;
if (lig["chain"][l] != gls[ci + em1 + (1 + l)]) good = false;
}
if (!good) continue;
gls[ci] = lig["nglyph"];
for (int l = 0; l < rl + em1; l++) gls[ci + l + 1] = -1;
break;
}
}
else if (_ltype == 5 && _fmt == 2) {
int cind = Typr_LCTF.getInterval(ltab["cDef"], gls[ci]);
var cls = ltab["cDef"][cind + 2], scs = ltab["scset"][cls];
for (int i = 0; i < scs.length; i++) {
var sc = scs[i], inp = sc.input;
if (inp.length > rlim) continue;
bool good = true;
for (int l = 0; l < inp.length; l++) {
var cind2 = Typr_LCTF.getInterval(ltab["cDef"], gls[ci + 1 + l]);
if (cind == -1 && ltab["cDef"][cind2 + 2] != inp[l]) {
good = false;
break;
}
}
if (!good) continue;
}
} else if (_ltype == 6 && _fmt == 3) {
if (!_glsCovered(gls, ltab["backCvg"], ci - (ltab["backCvg"].length as int)))
continue;
if (!_glsCovered(gls, ltab["inptCvg"], ci)) continue;
if (!_glsCovered(gls, ltab["ahedCvg"], ci + (ltab["inptCvg"].length as int)))
continue;
var lr = ltab["lookupRec"]; //console.warn(ci, gl, lr);
for (int i = 0; i < lr.length; i += 2) {
int cind = lr[i];
Map<String,dynamic> tab2 = llist[lr[i + 1]];
applySubs(gls, ci + cind, tab2, llist);
}
}
}
}