See `8.11.2.2 Optional Content Membership Dictionaries` -> `VE` entry. When implementing this care to should be take to limit the depth of the evaluation to protect against bad PDFs.
m[1] = b;
    m[2] = c;
    m[3] = d;
    m[4] = e;
    m[5] = f;
  }
  tranlateTextMatrx(x, y) {
    var m = th.textMatrx;
    m[4] = m[0] * x  m[2] * y  m[4];
    m[5] = m[1] * x  m[3] * y  m[5];
  }
  tranlateTextLneMatrx(x, y) {
    var m = th.textLneMatrx;
    m[4] = m[0] * x  m[2] * y  m[4];
    m[5] = m[1] * x  m[3] * y  m[5];
  }
  calcTextLneMatrxAdvance(a, b, c, d, e, f) {
    var fnt = th.fnt;
    f (!fnt) {
      return null;
    }
    var m = th.textLneMatrx;
    f (!(a === m[0] && b === m[1] && c === m[2] && d === m[3])) {
      return null;
    }
    var txDff = e - m[4],
      tyDff = f - m[5];
    f ((fnt.vertcal && txDff !== 0) || (!fnt.vertcal && tyDff !== 0)) {
      return null;
    }