import { push as d, splice as S } from "../../../../micromark-util-chunked@2.0.1/node_modules/micromark-util-chunked/index.js";
import { classifyCharacter as h } from "../../../../micromark-util-classify-character@2.0.1/node_modules/micromark-util-classify-character/index.js";
import { resolveAll as q } from "../../../../micromark-util-resolve-all@2.0.1/node_modules/micromark-util-resolve-all/index.js";
const z = {
  name: "attention",
  resolveAll: g,
  tokenize: y
};
function g(t, i) {
  let e = -1, r, a, l, u, s, n, o, f;
  for (; ++e < t.length; )
    if (t[e][0] === "enter" && t[e][1].type === "attentionSequence" && t[e][1]._close) {
      for (r = e; r--; )
        if (t[r][0] === "exit" && t[r][1].type === "attentionSequence" && t[r][1]._open && // If the markers are the same:
        i.sliceSerialize(t[r][1]).charCodeAt(0) === i.sliceSerialize(t[e][1]).charCodeAt(0)) {
          if ((t[r][1]._close || t[e][1]._open) && (t[e][1].end.offset - t[e][1].start.offset) % 3 && !((t[r][1].end.offset - t[r][1].start.offset + t[e][1].end.offset - t[e][1].start.offset) % 3))
            continue;
          n = t[r][1].end.offset - t[r][1].start.offset > 1 && t[e][1].end.offset - t[e][1].start.offset > 1 ? 2 : 1;
          const p = {
            ...t[r][1].end
          }, c = {
            ...t[e][1].start
          };
          m(p, -n), m(c, n), u = {
            type: n > 1 ? "strongSequence" : "emphasisSequence",
            start: p,
            end: {
              ...t[r][1].end
            }
          }, s = {
            type: n > 1 ? "strongSequence" : "emphasisSequence",
            start: {
              ...t[e][1].start
            },
            end: c
          }, l = {
            type: n > 1 ? "strongText" : "emphasisText",
            start: {
              ...t[r][1].end
            },
            end: {
              ...t[e][1].start
            }
          }, a = {
            type: n > 1 ? "strong" : "emphasis",
            start: {
              ...u.start
            },
            end: {
              ...s.end
            }
          }, t[r][1].end = {
            ...u.start
          }, t[e][1].start = {
            ...s.end
          }, o = [], t[r][1].end.offset - t[r][1].start.offset && (o = d(o, [["enter", t[r][1], i], ["exit", t[r][1], i]])), o = d(o, [["enter", a, i], ["enter", u, i], ["exit", u, i], ["enter", l, i]]), o = d(o, q(i.parser.constructs.insideSpan.null, t.slice(r + 1, e), i)), o = d(o, [["exit", l, i], ["enter", s, i], ["exit", s, i], ["exit", a, i]]), t[e][1].end.offset - t[e][1].start.offset ? (f = 2, o = d(o, [["enter", t[e][1], i], ["exit", t[e][1], i]])) : f = 0, S(t, r - 1, e - r + 3, o), e = r + o.length - f - 2;
          break;
        }
    }
  for (e = -1; ++e < t.length; )
    t[e][1].type === "attentionSequence" && (t[e][1].type = "data");
  return t;
}
function y(t, i) {
  const e = this.parser.constructs.attentionMarkers.null, r = this.previous, a = h(r);
  let l;
  return u;
  function u(n) {
    return l = n, t.enter("attentionSequence"), s(n);
  }
  function s(n) {
    if (n === l)
      return t.consume(n), s;
    const o = t.exit("attentionSequence"), f = h(n), p = !f || f === 2 && a || e.includes(n), c = !a || a === 2 && f || e.includes(r);
    return o._open = !!(l === 42 ? p : p && (a || !c)), o._close = !!(l === 42 ? c : c && (f || !p)), i(n);
  }
}
function m(t, i) {
  t.column += i, t.offset += i, t._bufferIndex += i;
}
export {
  z as attention
};
//# sourceMappingURL=attention.js.map
