import { ok as x } from "../../../../devlop@1.1.0/node_modules/devlop/lib/default.js";
import { svg as h, html as T } from "../../../../property-information@7.1.0/node_modules/property-information/index.js";
import { webNamespaces as b } from "../../../../web-namespaces@2.0.1/node_modules/web-namespaces/index.js";
import { s as L, h as w } from "../../../../hastscript@9.0.1/node_modules/hastscript/lib/index.js";
import { find as C } from "../../../../property-information@7.1.0/node_modules/property-information/lib/find.js";
import { location as N } from "../../../../vfile-location@5.0.3/node_modules/vfile-location/lib/index.js";
const v = {}.hasOwnProperty, k = Object.prototype;
function U(t, n) {
  const e = n || {};
  return m(
    {
      file: e.file || void 0,
      location: !1,
      schema: e.space === "svg" ? h : T,
      verbose: e.verbose || !1
    },
    t
  );
}
function m(t, n) {
  let e;
  switch (n.nodeName) {
    case "#comment": {
      const o = (
        /** @type {DefaultTreeAdapterMap['commentNode']} */
        n
      );
      return e = { type: "comment", value: o.data }, l(t, o, e), e;
    }
    case "#document":
    case "#document-fragment": {
      const o = (
        /** @type {DefaultTreeAdapterMap['document'] | DefaultTreeAdapterMap['documentFragment']} */
        n
      ), c = "mode" in o ? o.mode === "quirks" || o.mode === "limited-quirks" : !1;
      if (e = {
        type: "root",
        children: y(t, n.childNodes),
        data: { quirksMode: c }
      }, t.file && t.location) {
        const a = String(t.file), s = N(a), i = s.toPoint(0), r = s.toPoint(a.length);
        e.position = { start: i, end: r };
      }
      return e;
    }
    case "#documentType": {
      const o = (
        /** @type {DefaultTreeAdapterMap['documentType']} */
        n
      );
      return e = { type: "doctype" }, l(t, o, e), e;
    }
    case "#text": {
      const o = (
        /** @type {DefaultTreeAdapterMap['textNode']} */
        n
      );
      return e = { type: "text", value: o.value }, l(t, o, e), e;
    }
    // Element.
    default:
      return e = O(
        t,
        /** @type {DefaultTreeAdapterMap['element']} */
        n
      ), e;
  }
}
function y(t, n) {
  let e = -1;
  const o = [];
  for (; ++e < n.length; ) {
    const c = (
      /** @type {RootContent} */
      m(t, n[e])
    );
    o.push(c);
  }
  return o;
}
function O(t, n) {
  const e = t.schema;
  t.schema = n.namespaceURI === b.svg ? h : T;
  let o = -1;
  const c = {};
  for (; ++o < n.attrs.length; ) {
    const i = n.attrs[o], r = (i.prefix ? i.prefix + ":" : "") + i.name;
    v.call(k, r) || (c[r] = i.value);
  }
  const s = (t.schema.space === "svg" ? L : w)(n.tagName, c, y(t, n.childNodes));
  if (l(t, n, s), s.tagName === "template") {
    const i = (
      /** @type {DefaultTreeAdapterMap['template']} */
      n
    ), r = i.sourceCodeLocation, f = r && r.startTag && u(r.startTag), p = r && r.endTag && u(r.endTag), d = (
      /** @type {Root} */
      m(t, i.content)
    );
    f && p && t.file && (d.position = { start: f.end, end: p.start }), s.content = d;
  }
  return t.schema = e, s;
}
function l(t, n, e) {
  if ("sourceCodeLocation" in n && n.sourceCodeLocation && t.file) {
    const o = P(t, e, n.sourceCodeLocation);
    o && (t.location = !0, e.position = o);
  }
}
function P(t, n, e) {
  const o = u(e);
  if (n.type === "element") {
    const c = n.children[n.children.length - 1];
    if (o && !e.endTag && c && c.position && c.position.end && (o.end = Object.assign({}, c.position.end)), t.verbose) {
      const a = {};
      let s;
      if (e.attrs)
        for (s in e.attrs)
          v.call(e.attrs, s) && (a[C(t.schema, s).property] = u(
            e.attrs[s]
          ));
      x(e.startTag);
      const i = u(e.startTag), r = e.endTag ? u(e.endTag) : void 0, f = { opening: i };
      r && (f.closing = r), f.properties = a, n.data = { position: f };
    }
  }
  return o;
}
function u(t) {
  const n = g({
    line: t.startLine,
    column: t.startCol,
    offset: t.startOffset
  }), e = g({
    line: t.endLine,
    column: t.endCol,
    offset: t.endOffset
  });
  return n || e ? { start: n, end: e } : void 0;
}
function g(t) {
  return t.line && t.column ? t : void 0;
}
export {
  U as fromParse5
};
//# sourceMappingURL=index.js.map
