UNPKG

bitran

Version:

📜 Highly customizable text processor and transpiler.

102 lines (101 loc) • 2.79 kB
import YAML from "yaml"; import { t as textToObj, b as tryParseInt, i as indent } from "./productNode-C0XZsQy2.js"; function detachMeta(textWithMeta) { const result = { meta: {} }; result.restText = textWithMeta.replace(/^{(.*)}\n|^{([\s\S]*?)^}\n/m, (match, lineMeta, complexMeta, offset) => { if (offset > 0 || match.length === textWithMeta.length) return match; result.meta = parseMeta(lineMeta ?? complexMeta); return ""; }); return result; } function parseMeta(textMeta) { return textMeta.includes("\n") ? textToObj(textMeta) : parseLineMeta(textMeta); } function parseLineMeta(lineMeta) { const meta = { classes: [] }; for (const term of lineMeta.trim().split(/\s+/gm)) { const firstSymbol = term.at(0); const restTerm = term.substring(1); switch (firstSymbol) { case "#": meta.id = restTerm; break; case ".": meta.classes.push(restTerm); break; case "+": meta[restTerm] = true; break; case "-": meta[restTerm] = false; break; default: const parts = term.split("="); const value = parts == null ? void 0 : parts[1]; meta[parts[0]] = typeof value === "string" ? tryParseInt(value) : null; break; } } if (meta.classes.length === 0) delete meta.classes; return meta; } function stringifyMeta(meta, complexMetaAllowed) { if (!meta) return ""; let hasObjectProps = false; for (const [key, value] of Object.entries(meta)) { if (key === "id") continue; if (key === "classes") continue; if (typeof value === "object") { hasObjectProps = true; break; } } if (complexMetaAllowed && hasObjectProps) { let output = indent(YAML.stringify(meta, null, 4)); output = "{\n" + output + "}"; return output; } else { let output = ""; for (const [key, value] of Object.entries(meta)) { if (key === "id") { output += `#${value} `; continue; } if (key === "classes") { output += meta.classes.map((item) => `.${item}`).join(" ") + " "; continue; } if (typeof value === "boolean") { output += `${value ? "+" : "-"}${key} `; continue; } if (typeof value === "string") { let resultValue = value.replace(/(\s.+)/, "").trim(); if (!resultValue) continue; output += `${key}=${resultValue} `; continue; } if (typeof value === "number") { output += `${key}=${value} `; continue; } } if (!output) return ""; return `{ ${output}}`; } } export { parseLineMeta as a, detachMeta as d, parseMeta as p, stringifyMeta as s }; //# sourceMappingURL=productMeta-DotuXXRl.js.map