function p()

in js/rough-notation.js [241:434]


  function p(t, s, h, a, c, u) {
    const f = [];
    let l = h.strokeWidth || 2;
    const g = (function (t) {
        const e = t.padding;
        if (e || 0 === e) {
          if ("number" == typeof e) return [e, e, e, e];
          if (Array.isArray(e)) {
            const t = e;
            if (t.length)
              switch (t.length) {
                case 4:
                  return [...t];
                case 1:
                  return [t[0], t[0], t[0], t[0]];
                case 2:
                  return [...t, ...t];
                case 3:
                  return [...t, t[1]];
                default:
                  return [t[0], t[1], t[2], t[3]];
              }
          }
        }
        return [5, 5, 5, 5];
      })(h),
      p = void 0 === h.animate || !!h.animate,
      _ = h.iterations || 2,
      m = h.rtl ? 1 : 0,
      w = d("single", u);
    switch (h.type) {
      case "underline": {
        const t = s.y + s.h + g[2];
        for (let e = m; e < _ + m; e++)
          e % 2
            ? f.push(i(s.x + s.w, t, s.x, t, w))
            : f.push(i(s.x, t, s.x + s.w, t, w));
        break;
      }
      case "strike-through": {
        const t = s.y + s.h / 2;
        for (let e = m; e < _ + m; e++)
          e % 2
            ? f.push(i(s.x + s.w, t, s.x, t, w))
            : f.push(i(s.x, t, s.x + s.w, t, w));
        break;
      }
      case "box": {
        const t = s.x - g[3],
          e = s.y - g[0],
          i = s.w + (g[1] + g[3]),
          n = s.h + (g[0] + g[2]);
        for (let s = 0; s < _; s++) f.push(o(t, e, i, n, w));
        break;
      }
      case "bracket": {
        const t = Array.isArray(h.brackets)
            ? h.brackets
            : h.brackets
            ? [h.brackets]
            : ["right"],
          e = s.x - 2 * g[3],
          i = s.x + s.w + 2 * g[1],
          o = s.y - 2 * g[0],
          r = s.y + s.h + 2 * g[2];
        for (const h of t) {
          let t;
          switch (h) {
            case "bottom":
              t = [
                [e, s.y + s.h],
                [e, r],
                [i, r],
                [i, s.y + s.h],
              ];
              break;
            case "top":
              t = [
                [e, s.y],
                [e, o],
                [i, o],
                [i, s.y],
              ];
              break;
            case "left":
              t = [
                [s.x, o],
                [e, o],
                [e, r],
                [s.x, r],
              ];
              break;
            case "right":
              t = [
                [s.x + s.w, o],
                [i, o],
                [i, r],
                [s.x + s.w, r],
              ];
          }
          t && f.push(n(t, !1, w));
        }
        break;
      }
      case "crossed-off": {
        const t = s.x,
          e = s.y,
          n = t + s.w,
          o = e + s.h;
        for (let s = m; s < _ + m; s++)
          s % 2 ? f.push(i(n, o, t, e, w)) : f.push(i(t, e, n, o, w));
        for (let s = m; s < _ + m; s++)
          s % 2 ? f.push(i(t, o, n, e, w)) : f.push(i(n, e, t, o, w));
        break;
      }
      case "circle": {
        const t = d("double", u),
          e = s.w + (g[1] + g[3]),
          i = s.h + (g[0] + g[2]),
          n = s.x - g[3] + e / 2,
          o = s.y - g[0] + i / 2,
          h = Math.floor(_ / 2),
          a = _ - 2 * h;
        for (let s = 0; s < h; s++) f.push(r(n, o, e, i, t));
        for (let t = 0; t < a; t++) f.push(r(n, o, e, i, w));
        break;
      }
      case "highlight": {
        const t = d("highlight", u);
        l = 0.95 * s.h;
        const e = s.y + s.h / 2;
        for (let n = m; n < _ + m; n++)
          n % 2
            ? f.push(i(s.x + s.w, e, s.x, e, t))
            : f.push(i(s.x, e, s.x + s.w, e, t));
        break;
      }
    }
    if (f.length) {
      const s = (function (t) {
          const e = [];
          for (const s of t) {
            let t = "";
            for (const i of s.ops) {
              const s = i.data;
              switch (i.op) {
                case "move":
                  t.trim() && e.push(t.trim()), (t = `M${s[0]} ${s[1]} `);
                  break;
                case "bcurveTo":
                  t += `C${s[0]} ${s[1]}, ${s[2]} ${s[3]}, ${s[4]} ${s[5]} `;
                  break;
                case "lineTo":
                  t += `L${s[0]} ${s[1]} `;
              }
            }
            t.trim() && e.push(t.trim());
          }
          return e;
        })(f),
        i = [],
        n = [];
      let o = 0;
      const r = (t, e, s) => t.setAttribute(e, s);
      for (const a of s) {
        const s = document.createElementNS(e, "path");
        if (
          (r(s, "d", a),
          r(s, "fill", "none"),
          r(s, "stroke", h.color || "currentColor"),
          r(s, "stroke-width", "" + l),
          p)
        ) {
          const t = s.getTotalLength();
          i.push(t), (o += t);
        }
        t.appendChild(s), n.push(s);
      }
      if (p) {
        let t = 0;
        for (let e = 0; e < n.length; e++) {
          const s = n[e],
            r = i[e],
            h = o ? c * (r / o) : 0,
            u = a + t,
            f = s.style;
          (f.strokeDashoffset = "" + r),
            (f.strokeDasharray = "" + r),
            (f.animation = `rough-notation-dash ${h}ms ease-out ${u}ms forwards`),
            (t += h);
        }
      }
    }
  }