From c07d40f2a82441a91c74dea44c334b6d81231925 Mon Sep 17 00:00:00 2001 From: Jason Siefken Date: Fri, 17 Jul 2026 16:44:08 -0400 Subject: [PATCH 1/3] Initial commit --- packages/preview/xmlit/0.1.0/LICENSE | 21 +++ packages/preview/xmlit/0.1.0/README.md | 121 ++++++++++++ .../preview/xmlit/0.1.0/src/elem/elem.typ | 174 ++++++++++++++++++ packages/preview/xmlit/0.1.0/src/lib.typ | 27 +++ .../xmlit/0.1.0/src/relaxng/relaxng.typ | 111 +++++++++++ .../xmlit/0.1.0/src/relaxng/relaxng.wasm | Bin 0 -> 632980 bytes .../0.1.0/src/xml-to-string/make-tag.typ | 38 ++++ .../0.1.0/src/xml-to-string/xml-to-string.typ | 99 ++++++++++ packages/preview/xmlit/0.1.0/typst.toml | 20 ++ 9 files changed, 611 insertions(+) create mode 100644 packages/preview/xmlit/0.1.0/LICENSE create mode 100644 packages/preview/xmlit/0.1.0/README.md create mode 100644 packages/preview/xmlit/0.1.0/src/elem/elem.typ create mode 100644 packages/preview/xmlit/0.1.0/src/lib.typ create mode 100644 packages/preview/xmlit/0.1.0/src/relaxng/relaxng.typ create mode 100755 packages/preview/xmlit/0.1.0/src/relaxng/relaxng.wasm create mode 100644 packages/preview/xmlit/0.1.0/src/xml-to-string/make-tag.typ create mode 100644 packages/preview/xmlit/0.1.0/src/xml-to-string/xml-to-string.typ create mode 100644 packages/preview/xmlit/0.1.0/typst.toml diff --git a/packages/preview/xmlit/0.1.0/LICENSE b/packages/preview/xmlit/0.1.0/LICENSE new file mode 100644 index 0000000000..a7179dc406 --- /dev/null +++ b/packages/preview/xmlit/0.1.0/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Jason Siefken + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/preview/xmlit/0.1.0/README.md b/packages/preview/xmlit/0.1.0/README.md new file mode 100644 index 0000000000..b2aee5c343 --- /dev/null +++ b/packages/preview/xmlit/0.1.0/README.md @@ -0,0 +1,121 @@ +# typst-xmlit + +Tools for generating, validating, and outputting XML using Typst syntax. + +## Authoring XML + +Create functions which return XML elements with `make-tag`/`make-tags`. +Use the resulting functions using standard typst syntax. + +```typst +#import "@preview/xmlit:0.1.0": make-tags, xml-to-string + +#{ + let (foo, bar) = make-tags("foo", "bar") + +} + +// Positional +#xml-to-string(foo(bar(baz: "zz"), "text")) + +// Code block +#xml-to-string(foo({ + bar(baz: "zz") + "text" +})) + +// Markup body +#xml-to-string(foo[#bar(baz: "zz")text]) + +// All three => text +``` + +Named arguments become attributes; positional arguments (strings, other tag +calls, arrays, numbers, or content) become children. `elem("foo", ...)` is a +generic one-off constructor in the spirit of `html.elem`. + +### Markup in bodies + +Inside a `[...]` body, ordinary Typst markup is mapped to XML by a built-in +handler table (in the spirit of Typst's HTML export): `*bold*` → ``, +`_emph_` → ``, `` `code` `` → ``/`
`, smart quotes → plain quote
+characters. Inline math `$x^2$` becomes `` and display math
+`$ ... $` becomes ``.
+
+Every mapping is configurable per tag factory:
+
+```typst
+#let p = make-tag("p", handlers: (
+  // strong ->  instead of 
+  "strong": (c, ctx) => ((tag: "alert", attrs: (:), children: (ctx.convert)(c.body)),),
+  // serialize equation bodies yourself (the default payload is an
+  // unstable placeholder)
+  "math": (body, ctx) => ("...",),
+))
+#p[A *very important* point about $x^2$.]
+```
+
+Unmapped markup (e.g. headings) raises an error naming the element and the
+`handlers:` entry that would map it.
+
+## Typechecked authoring from a RELAX NG grammar
+
+`create-from-relaxng` derives tag functions from a RELAX NG grammar (compact
+syntax, `.rnc`) and validates the composed document — via a bundled WASM
+plugin (see [plugin/](https://github.com/siefkenj/typst-xmlit/blob/0.1.0/plugin/README.md)):
+
+```typst
+#import "@preview/xmlit:0.1.0": create-from-relaxng
+
+#let (root, foo, bar) = create-from-relaxng(
+  "start = element foo { element bar { attribute baz { text } }* }",
+)
+
+#show: root
+
+#foo[#bar(baz: "xx")]
+```
+
+The returned dictionary has one tag function per element defined in the
+grammar, plus:
+
+- `root` — a template (`#show: root`) that serializes its body, validates it
+  against the grammar, and renders the XML source. Invalid documents fail
+  compilation with a readable panic, e.g.:
+
+  ```
+  XML failed RELAX NG validation:
+  - element  is not allowed here. Expected element(s): bar. (line 1, column 7)
+  Document was: 
+  ```
+
+- `validate` — validate content or an XML string without panicking; returns
+  `(valid: bool, errors: (..))`.
+- `roots` / `elements` — the allowed document-root names and all element names.
+
+These reserved keys win over grammar elements with the same names. A
+`handlers:` argument is forwarded to every generated tag (see above).
+
+## Serializing
+
+`xml-to-string` accepts authored trees (the return value of a tag function or
+any markup content), plain node dictionaries/strings/arrays, and — faithfully —
+the output of Typst's built-in `xml()` reader:
+
+```typst
+#xml-to-string(xml("doc.xml"))
+```
+
+Attribute order is preserved, text/attribute contexts are escaped correctly,
+empty elements self-close, and default-namespace declarations are re-emitted
+only where the namespace actually changes.
+
+## Testing
+
+Tests run with [tytanic](https://github.com/typst-community/tytanic):
+
+```sh
+tt run
+```
+
+
diff --git a/packages/preview/xmlit/0.1.0/src/elem/elem.typ b/packages/preview/xmlit/0.1.0/src/elem/elem.typ
new file mode 100644
index 0000000000..ef8d47e854
--- /dev/null
+++ b/packages/preview/xmlit/0.1.0/src/elem/elem.typ
@@ -0,0 +1,174 @@
+// elem: author XML trees with Typst syntax.
+//
+// Tag functions created by `make-tag` return their node wrapped in
+// `metadata(...)` content. Because content joins cleanly with content and
+// strings, all three call styles work and can be mixed:
+//
+//   #let (foo, bar) = make-tags("foo", "bar")
+//   #foo(bar(baz: "zz"), "text")            // positional
+//   #foo({ bar(baz: "zz"); "text" })        // code block (content joins)
+//   #foo[#bar(baz: "zz") text $x^2$]        // markup block
+//
+// The node model is the same one Typst's `xml()` reader uses: an element is a
+// dictionary with `tag`, `attrs`, and `children`; a text node is a string.
+
+/// Built-in handlers that map Typst content elements to XML nodes.
+///
+/// Keys are content-function names (as produced by `repr(c.func())`), plus the
+/// special `"math"` slot used to serialize equation bodies. Each handler is
+/// called as `handler(element, ctx)` where `ctx` is a dictionary with:
+///
+/// - `convert`: function converting any child value to an array of nodes
+/// - `handlers`: the merged handler table (built-ins + user overrides)
+///
+/// and must return an array of nodes (element dictionaries and/or strings).
+/// Override or extend any of these by passing `handlers: (...)` to `make-tag`
+/// or `make-tags`.
+#let default-handlers = (
+  "sequence": (c, ctx) => c.children.map(ch => (ctx.convert)(ch)).flatten(),
+  "text": (c, ctx) => (c.text,),
+  "space": (c, ctx) => (" ",),
+  "linebreak": (c, ctx) => ("\n",),
+  "parbreak": (c, ctx) => ("\n\n",),
+  "smartquote": (c, ctx) => {
+    let double = c.fields().at("double", default: true)
+    (if double { "\"" } else { "'" },)
+  },
+  // A show/set rule inside a body wraps the rest in `styled`; recurse into the
+  // wrapped child (the style information itself has no XML representation).
+  "styled": (c, ctx) => (ctx.convert)(c.fields().child),
+  // Nodes authored by xmlit tag functions travel through markup as metadata.
+  "metadata": (c, ctx) => {
+    let v = c.value
+    if type(v) == dictionary and "tag" in v {
+      (v,)
+    } else {
+      panic("xmlit: metadata content does not carry an XML node: " + repr(v))
+    }
+  },
+  // Default markup mappings (in the spirit of Typst's HTML export). Override
+  // via `handlers:` to emit different tags.
+  "strong": (c, ctx) => ((tag: "b", attrs: (:), children: (ctx.convert)(c.body)),),
+  "emph": (c, ctx) => ((tag: "em", attrs: (:), children: (ctx.convert)(c.body)),),
+  "raw": (c, ctx) => {
+    let f = c.fields()
+    // A plain code value (e.g. a bare dictionary) interpolated into markup
+    // displays as inline raw with lang "typc" -- almost certainly a mistake.
+    if f.at("lang", default: none) == "typc" {
+      panic(
+        "xmlit: a plain code value was interpolated into markup: `" + f.text
+          + "`. Tag functions already return content; did you interpolate a "
+          + "bare dictionary?",
+      )
+    }
+    let tag = if f.at("block", default: false) { "pre" } else { "c" }
+    ((tag: tag, attrs: (:), children: (f.text,)),)
+  },
+  // $...$ -> , $ ... $ -> . The body is serialized by the "math" slot.
+  "equation": (c, ctx) => {
+    let f = c.fields()
+    let tag = if f.block { "md" } else { "m" }
+    let math-handler = ctx.handlers.at("math")
+    ((tag: tag, attrs: (:), children: math-handler(f.body, ctx)),)
+  },
+  // Special slot (not a content-function name): serializes the *body* of an
+  // equation into child nodes. The default is an opaque, best-effort
+  // placeholder (`repr` of the math AST) and is NOT a stable format; replace
+  // it via `handlers: ("math": (body, ctx) => (...))`.
+  "math": (body, ctx) => (repr(body),),
+)
+
+/// Convert any child value into an array of XML nodes.
+///
+/// Accepts: strings (text nodes), element dictionaries, arrays of either,
+/// numbers/booleans (stringified), `none` (dropped), and content (walked
+/// using the handler table -- see `default-handlers`).
+#let convert(value, handlers: auto) = {
+  if type(value) == str { return (value,) }
+  if value == none { return () }
+  if type(value) == int or type(value) == float {
+    return (str(value),)
+  }
+  if type(value) == bool {
+    return (repr(value),)
+  }
+  if type(value) == array {
+    return value.map(v => convert(v, handlers: handlers)).flatten()
+  }
+  if type(value) == dictionary {
+    if "tag" in value { return (value,) }
+    panic("xmlit: expected an element dictionary with a `tag` key, found: " + repr(value))
+  }
+  if type(value) == content {
+    let merged = if handlers == auto {
+      default-handlers
+    } else {
+      default-handlers + handlers
+    }
+    let name = repr(value.func())
+    let handler = merged.at(name, default: none)
+    if handler == none {
+      panic(
+        "xmlit: no handler for content element `" + name + "`. "
+          + "Pass `handlers: (\"" + name + "\": (elem, ctx) => ..)` to make-tag "
+          + "to map it to XML.",
+      )
+    }
+    let ctx = (convert: v => convert(v, handlers: handlers), handlers: merged)
+    return handler(value, ctx)
+  }
+  panic("xmlit: cannot convert value of type " + repr(type(value)) + " to XML: " + repr(value))
+}
+
+/// Convert a content block to an array of XML nodes (exported alias of
+/// `convert` for content input).
+#let content-to-children(c, handlers: auto) = convert(c, handlers: handlers)
+
+/// True for text nodes that consist entirely of whitespace.
+#let is-whitespace(v) = type(v) == str and v.trim() == ""
+
+/// Drop whitespace-only text nodes from the edges of a children array.
+/// Applied to content-block bodies so that `#foo[ text ]` == `#foo("text")`.
+#let trim-ws(children) = {
+  let out = children
+  while out.len() > 0 and is-whitespace(out.first()) { out = out.slice(1) }
+  while out.len() > 0 and is-whitespace(out.last()) { out = out.slice(0, out.len() - 1) }
+  out
+}
+
+/// Create a function that produces an XML element with the given tag name.
+/// Named arguments become XML attributes; positional arguments become
+/// children (strings, other tag calls, arrays, or arbitrary content --
+/// including trailing `[...]` bodies).
+///
+/// The returned function yields the node wrapped in `metadata(...)` content,
+/// so tag calls can be freely embedded in markup and joined in code blocks.
+///
+/// `handlers` extends/overrides `default-handlers` for content conversion.
+///
+/// Example:
+///   #let foo = make-tag("foo")
+///   #let bar = make-tag("bar")
+///   #foo[#bar(baz: "zz") some text]
+///   // => some text
+#let make-tag(tag, handlers: auto) = (..args) => {
+  let children = args.pos().map(a => {
+    let nodes = convert(a, handlers: handlers)
+    // Trim insignificant edge whitespace of `[...]` bodies, but keep
+    // explicitly passed strings verbatim.
+    if type(a) == content { trim-ws(nodes) } else { nodes }
+  }).flatten()
+  metadata((tag: tag, attrs: args.named(), children: children))
+}
+
+/// Generic one-off element constructor (compare `html.elem`):
+///   #elem("foo", elem("bar", baz: "zz"))
+#let elem(tag, ..args) = make-tag(tag)(..args)
+
+/// Create several tag functions at once (destructurable):
+///   #let (foo, bar) = make-tags("foo", "bar")
+/// A `handlers:` named argument is forwarded to every created tag.
+#let make-tags(..names) = {
+  let handlers = names.named().at("handlers", default: auto)
+  names.pos().map(n => make-tag(n, handlers: handlers))
+}
diff --git a/packages/preview/xmlit/0.1.0/src/lib.typ b/packages/preview/xmlit/0.1.0/src/lib.typ
new file mode 100644
index 0000000000..d741363896
--- /dev/null
+++ b/packages/preview/xmlit/0.1.0/src/lib.typ
@@ -0,0 +1,27 @@
+// xmlit: Generate XML documents using Typst syntax.
+//
+// This file only re-exports the package's public API. Implementations live in
+// per-feature modules:
+//
+//   * elem/elem.typ                    — author XML trees with Typst syntax:
+//                                        tag functions (`make-tag`, `make-tags`,
+//                                        `elem`) usable positionally, in code
+//                                        blocks, and in markup bodies; the
+//                                        content walker (`content-to-children`,
+//                                        `convert`) with its configurable
+//                                        `default-handlers` table.
+//   * xml-to-string/xml-to-string.typ — serialize node trees to an XML string:
+//                                        authored trees as well as faithful
+//                                        re-serialization of the output of
+//                                        Typst's built-in `xml()` reader.
+//   * xml-to-string/make-tag.typ       — `to-xml`, a minimal serializer for
+//                                        plain node dictionaries.
+//   * relaxng/relaxng.typ              — `create-from-relaxng`: derive tag
+//                                        functions from a RELAX NG grammar
+//                                        (compact syntax) and validate the
+//                                        composed document via a WASM plugin.
+
+#import "elem/elem.typ": default-handlers, convert, content-to-children, make-tag, make-tags, elem
+#import "relaxng/relaxng.typ": create-from-relaxng
+#import "xml-to-string/xml-to-string.typ": esc-text, esc-attr, xml-to-string
+#import "xml-to-string/make-tag.typ": xml-escape, to-xml
diff --git a/packages/preview/xmlit/0.1.0/src/relaxng/relaxng.typ b/packages/preview/xmlit/0.1.0/src/relaxng/relaxng.typ
new file mode 100644
index 0000000000..24a70eaf90
--- /dev/null
+++ b/packages/preview/xmlit/0.1.0/src/relaxng/relaxng.typ
@@ -0,0 +1,111 @@
+// relaxng: create typechecked XML-authoring functions from a RELAX NG grammar.
+//
+// `create-from-relaxng` compiles a grammar in RELAX NG *compact syntax*
+// (`.rnc`) via a WASM plugin and returns a dictionary containing one
+// tag function per element defined in the grammar, plus:
+//
+//   - `root`:     a template that serializes its body, validates it against
+//                 the grammar (panicking with readable errors if invalid),
+//                 and renders the XML source. Usable as `#show: root`.
+//   - `validate`: validate content or an XML string; returns the raw result
+//                 `(valid: bool, errors: (..))` instead of panicking.
+//   - `roots`:    the element names allowed as the document root.
+//   - `elements`: all element names defined in the grammar.
+//
+// Example:
+//   #import "@preview/xmlit:0.1.0": create-from-relaxng
+//   #let (root, foo, bar) = create-from-relaxng(
+//     "start = element foo { element bar { attribute baz { text } }* }",
+//   )
+//   #show: root
+//   #foo[#bar(baz: "xx")]
+
+#import "../elem/elem.typ": make-tag
+#import "../xml-to-string/xml-to-string.typ": xml-to-string
+
+/// The bundled RELAX NG plugin (see plugin/typst-relaxng in the repository).
+#let relaxng-plugin = plugin("relaxng.wasm")
+
+/// Format the errors of a `(valid: false, errors: (..))` validation result
+/// into a readable multi-line string.
+#let format-errors(result) = {
+  result.errors.map(e => {
+    let loc = if e.at("line", default: none) != none {
+      " (line " + str(e.line) + ", column " + str(e.column) + ")"
+    } else {
+      ""
+    }
+    "- " + e.message + loc
+  }).join("\n")
+}
+
+/// Create XML-authoring functions from a RELAX NG grammar (compact syntax).
+///
+/// Returns a dictionary with one tag function per element defined in the
+/// grammar plus the reserved keys `root`, `validate`, `roots`, and
+/// `elements` (reserved keys win if the grammar defines elements with those
+/// names). Destructure what you need:
+///
+///   #let (root, foo, bar) = create-from-relaxng(rnc)
+///
+/// - `rnc`: the grammar source (str or bytes), or -- for grammars split
+///   across several files with `include`/`external` -- a dictionary mapping
+///   file names to file contents. The FIRST entry is the entry point:
+///     create-from-relaxng((
+///       "pretext.rnc": read("pretext.rnc"),
+///       "pf-adapter.rnc": read("pf-adapter.rnc"),
+///       ...
+///     ))
+/// - `handlers`: forwarded to `make-tag` -- overrides for how Typst content
+///   (markup, math, ...) is converted to XML.
+/// - `wasm`: the validator plugin; defaults to the bundled one. Pass a
+///   `plugin(...)` module or raw wasm bytes to substitute your own build.
+#let create-from-relaxng(rnc, handlers: auto, wasm: auto) = {
+  let p = if wasm == auto {
+    relaxng-plugin
+  } else if type(wasm) == bytes {
+    plugin(wasm)
+  } else {
+    wasm
+  }
+  // Multi-file grammars are sent as a JSON VFS object (the plugin detects
+  // the leading "{"); single grammars are sent verbatim.
+  let rnc-bytes = if type(rnc) == dictionary {
+    bytes(json.encode(rnc))
+  } else {
+    bytes(rnc)
+  }
+  let info = json(p.list_elements(rnc-bytes))
+
+  // Validate content (authored with the tag functions) or a raw XML string.
+  let validate = doc => {
+    let xml-str = if type(doc) == str { doc } else { xml-to-string(doc, handlers: handlers) }
+    json(p.validate(rnc-bytes, bytes(xml-str)))
+  }
+
+  // Validating template: serialize the body, panic on validation errors,
+  // render the XML source on success. Use as `#show: root`.
+  let root = body => {
+    let xml-str = xml-to-string(body, handlers: handlers)
+    let result = json(p.validate(rnc-bytes, bytes(xml-str)))
+    if not result.valid {
+      panic(
+        "XML failed RELAX NG validation:\n" + format-errors(result)
+          + "\nDocument was: " + xml-str,
+      )
+    }
+    raw(xml-str, lang: "xml", block: true)
+  }
+
+  let tags = (:)
+  for name in info.elements {
+    tags.insert(name, make-tag(name, handlers: handlers))
+  }
+
+  tags + (
+    root: root,
+    validate: validate,
+    roots: info.roots,
+    elements: info.elements,
+  )
+}
diff --git a/packages/preview/xmlit/0.1.0/src/relaxng/relaxng.wasm b/packages/preview/xmlit/0.1.0/src/relaxng/relaxng.wasm
new file mode 100755
index 0000000000000000000000000000000000000000..a2e7e29c8035e3fa7f7aa95cec5ec4e97305da49
GIT binary patch
literal 632980
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
`, smart quotes → plain quote
-characters. Inline math `$x^2$` becomes `` and display math
-`$ ... $` becomes ``.
-
-Every mapping is configurable per tag factory:
-
-```typst
-#let p = make-tag("p", handlers: (
-  // strong ->  instead of 
-  "strong": (c, ctx) => ((tag: "alert", attrs: (:), children: (ctx.convert)(c.body)),),
-  // serialize equation bodies yourself (the default payload is an
-  // unstable placeholder)
-  "math": (body, ctx) => ("...",),
-))
-#p[A *very important* point about $x^2$.]
-```
-
-Unmapped markup (e.g. headings) raises an error naming the element and the
-`handlers:` entry that would map it.
-
-## Typechecked authoring from a RELAX NG grammar
-
-`create-from-relaxng` derives tag functions from a RELAX NG grammar (compact
-syntax, `.rnc`) and validates the composed document — via a bundled WASM
-plugin (see [plugin/](https://github.com/siefkenj/typst-xmlit/blob/0.1.0/plugin/README.md)):
-
-```typst
-#import "@preview/xmlit:0.1.0": create-from-relaxng
-
-#let (root, foo, bar) = create-from-relaxng(
-  "start = element foo { element bar { attribute baz { text } }* }",
-)
-
-#show: root
-
-#foo[#bar(baz: "xx")]
-```
-
-The returned dictionary has one tag function per element defined in the
-grammar, plus:
-
-- `root` — a template (`#show: root`) that serializes its body, validates it
-  against the grammar, and renders the XML source. Invalid documents fail
-  compilation with a readable panic, e.g.:
-
-  ```
-  XML failed RELAX NG validation:
-  - element  is not allowed here. Expected element(s): bar. (line 1, column 7)
-  Document was: 
-  ```
-
-- `validate` — validate content or an XML string without panicking; returns
-  `(valid: bool, errors: (..))`.
-- `roots` / `elements` — the allowed document-root names and all element names.
-
-These reserved keys win over grammar elements with the same names. A
-`handlers:` argument is forwarded to every generated tag (see above).
-
-## Serializing
-
-`xml-to-string` accepts authored trees (the return value of a tag function or
-any markup content), plain node dictionaries/strings/arrays, and — faithfully —
-the output of Typst's built-in `xml()` reader:
-
-```typst
-#xml-to-string(xml("doc.xml"))
-```
-
-Attribute order is preserved, text/attribute contexts are escaped correctly,
-empty elements self-close, and default-namespace declarations are re-emitted
-only where the namespace actually changes.
-
-## Testing
-
-Tests run with [tytanic](https://github.com/typst-community/tytanic):
-
-```sh
-tt run
-```
-
-
diff --git a/packages/preview/xmlit/0.1.0/src/elem/elem.typ b/packages/preview/xmlit/0.1.0/src/elem/elem.typ
deleted file mode 100644
index ef8d47e854..0000000000
--- a/packages/preview/xmlit/0.1.0/src/elem/elem.typ
+++ /dev/null
@@ -1,174 +0,0 @@
-// elem: author XML trees with Typst syntax.
-//
-// Tag functions created by `make-tag` return their node wrapped in
-// `metadata(...)` content. Because content joins cleanly with content and
-// strings, all three call styles work and can be mixed:
-//
-//   #let (foo, bar) = make-tags("foo", "bar")
-//   #foo(bar(baz: "zz"), "text")            // positional
-//   #foo({ bar(baz: "zz"); "text" })        // code block (content joins)
-//   #foo[#bar(baz: "zz") text $x^2$]        // markup block
-//
-// The node model is the same one Typst's `xml()` reader uses: an element is a
-// dictionary with `tag`, `attrs`, and `children`; a text node is a string.
-
-/// Built-in handlers that map Typst content elements to XML nodes.
-///
-/// Keys are content-function names (as produced by `repr(c.func())`), plus the
-/// special `"math"` slot used to serialize equation bodies. Each handler is
-/// called as `handler(element, ctx)` where `ctx` is a dictionary with:
-///
-/// - `convert`: function converting any child value to an array of nodes
-/// - `handlers`: the merged handler table (built-ins + user overrides)
-///
-/// and must return an array of nodes (element dictionaries and/or strings).
-/// Override or extend any of these by passing `handlers: (...)` to `make-tag`
-/// or `make-tags`.
-#let default-handlers = (
-  "sequence": (c, ctx) => c.children.map(ch => (ctx.convert)(ch)).flatten(),
-  "text": (c, ctx) => (c.text,),
-  "space": (c, ctx) => (" ",),
-  "linebreak": (c, ctx) => ("\n",),
-  "parbreak": (c, ctx) => ("\n\n",),
-  "smartquote": (c, ctx) => {
-    let double = c.fields().at("double", default: true)
-    (if double { "\"" } else { "'" },)
-  },
-  // A show/set rule inside a body wraps the rest in `styled`; recurse into the
-  // wrapped child (the style information itself has no XML representation).
-  "styled": (c, ctx) => (ctx.convert)(c.fields().child),
-  // Nodes authored by xmlit tag functions travel through markup as metadata.
-  "metadata": (c, ctx) => {
-    let v = c.value
-    if type(v) == dictionary and "tag" in v {
-      (v,)
-    } else {
-      panic("xmlit: metadata content does not carry an XML node: " + repr(v))
-    }
-  },
-  // Default markup mappings (in the spirit of Typst's HTML export). Override
-  // via `handlers:` to emit different tags.
-  "strong": (c, ctx) => ((tag: "b", attrs: (:), children: (ctx.convert)(c.body)),),
-  "emph": (c, ctx) => ((tag: "em", attrs: (:), children: (ctx.convert)(c.body)),),
-  "raw": (c, ctx) => {
-    let f = c.fields()
-    // A plain code value (e.g. a bare dictionary) interpolated into markup
-    // displays as inline raw with lang "typc" -- almost certainly a mistake.
-    if f.at("lang", default: none) == "typc" {
-      panic(
-        "xmlit: a plain code value was interpolated into markup: `" + f.text
-          + "`. Tag functions already return content; did you interpolate a "
-          + "bare dictionary?",
-      )
-    }
-    let tag = if f.at("block", default: false) { "pre" } else { "c" }
-    ((tag: tag, attrs: (:), children: (f.text,)),)
-  },
-  // $...$ -> , $ ... $ -> . The body is serialized by the "math" slot.
-  "equation": (c, ctx) => {
-    let f = c.fields()
-    let tag = if f.block { "md" } else { "m" }
-    let math-handler = ctx.handlers.at("math")
-    ((tag: tag, attrs: (:), children: math-handler(f.body, ctx)),)
-  },
-  // Special slot (not a content-function name): serializes the *body* of an
-  // equation into child nodes. The default is an opaque, best-effort
-  // placeholder (`repr` of the math AST) and is NOT a stable format; replace
-  // it via `handlers: ("math": (body, ctx) => (...))`.
-  "math": (body, ctx) => (repr(body),),
-)
-
-/// Convert any child value into an array of XML nodes.
-///
-/// Accepts: strings (text nodes), element dictionaries, arrays of either,
-/// numbers/booleans (stringified), `none` (dropped), and content (walked
-/// using the handler table -- see `default-handlers`).
-#let convert(value, handlers: auto) = {
-  if type(value) == str { return (value,) }
-  if value == none { return () }
-  if type(value) == int or type(value) == float {
-    return (str(value),)
-  }
-  if type(value) == bool {
-    return (repr(value),)
-  }
-  if type(value) == array {
-    return value.map(v => convert(v, handlers: handlers)).flatten()
-  }
-  if type(value) == dictionary {
-    if "tag" in value { return (value,) }
-    panic("xmlit: expected an element dictionary with a `tag` key, found: " + repr(value))
-  }
-  if type(value) == content {
-    let merged = if handlers == auto {
-      default-handlers
-    } else {
-      default-handlers + handlers
-    }
-    let name = repr(value.func())
-    let handler = merged.at(name, default: none)
-    if handler == none {
-      panic(
-        "xmlit: no handler for content element `" + name + "`. "
-          + "Pass `handlers: (\"" + name + "\": (elem, ctx) => ..)` to make-tag "
-          + "to map it to XML.",
-      )
-    }
-    let ctx = (convert: v => convert(v, handlers: handlers), handlers: merged)
-    return handler(value, ctx)
-  }
-  panic("xmlit: cannot convert value of type " + repr(type(value)) + " to XML: " + repr(value))
-}
-
-/// Convert a content block to an array of XML nodes (exported alias of
-/// `convert` for content input).
-#let content-to-children(c, handlers: auto) = convert(c, handlers: handlers)
-
-/// True for text nodes that consist entirely of whitespace.
-#let is-whitespace(v) = type(v) == str and v.trim() == ""
-
-/// Drop whitespace-only text nodes from the edges of a children array.
-/// Applied to content-block bodies so that `#foo[ text ]` == `#foo("text")`.
-#let trim-ws(children) = {
-  let out = children
-  while out.len() > 0 and is-whitespace(out.first()) { out = out.slice(1) }
-  while out.len() > 0 and is-whitespace(out.last()) { out = out.slice(0, out.len() - 1) }
-  out
-}
-
-/// Create a function that produces an XML element with the given tag name.
-/// Named arguments become XML attributes; positional arguments become
-/// children (strings, other tag calls, arrays, or arbitrary content --
-/// including trailing `[...]` bodies).
-///
-/// The returned function yields the node wrapped in `metadata(...)` content,
-/// so tag calls can be freely embedded in markup and joined in code blocks.
-///
-/// `handlers` extends/overrides `default-handlers` for content conversion.
-///
-/// Example:
-///   #let foo = make-tag("foo")
-///   #let bar = make-tag("bar")
-///   #foo[#bar(baz: "zz") some text]
-///   // => some text
-#let make-tag(tag, handlers: auto) = (..args) => {
-  let children = args.pos().map(a => {
-    let nodes = convert(a, handlers: handlers)
-    // Trim insignificant edge whitespace of `[...]` bodies, but keep
-    // explicitly passed strings verbatim.
-    if type(a) == content { trim-ws(nodes) } else { nodes }
-  }).flatten()
-  metadata((tag: tag, attrs: args.named(), children: children))
-}
-
-/// Generic one-off element constructor (compare `html.elem`):
-///   #elem("foo", elem("bar", baz: "zz"))
-#let elem(tag, ..args) = make-tag(tag)(..args)
-
-/// Create several tag functions at once (destructurable):
-///   #let (foo, bar) = make-tags("foo", "bar")
-/// A `handlers:` named argument is forwarded to every created tag.
-#let make-tags(..names) = {
-  let handlers = names.named().at("handlers", default: auto)
-  names.pos().map(n => make-tag(n, handlers: handlers))
-}
diff --git a/packages/preview/xmlit/0.1.0/src/relaxng/relaxng.typ b/packages/preview/xmlit/0.1.0/src/relaxng/relaxng.typ
deleted file mode 100644
index 24a70eaf90..0000000000
--- a/packages/preview/xmlit/0.1.0/src/relaxng/relaxng.typ
+++ /dev/null
@@ -1,111 +0,0 @@
-// relaxng: create typechecked XML-authoring functions from a RELAX NG grammar.
-//
-// `create-from-relaxng` compiles a grammar in RELAX NG *compact syntax*
-// (`.rnc`) via a WASM plugin and returns a dictionary containing one
-// tag function per element defined in the grammar, plus:
-//
-//   - `root`:     a template that serializes its body, validates it against
-//                 the grammar (panicking with readable errors if invalid),
-//                 and renders the XML source. Usable as `#show: root`.
-//   - `validate`: validate content or an XML string; returns the raw result
-//                 `(valid: bool, errors: (..))` instead of panicking.
-//   - `roots`:    the element names allowed as the document root.
-//   - `elements`: all element names defined in the grammar.
-//
-// Example:
-//   #import "@preview/xmlit:0.1.0": create-from-relaxng
-//   #let (root, foo, bar) = create-from-relaxng(
-//     "start = element foo { element bar { attribute baz { text } }* }",
-//   )
-//   #show: root
-//   #foo[#bar(baz: "xx")]
-
-#import "../elem/elem.typ": make-tag
-#import "../xml-to-string/xml-to-string.typ": xml-to-string
-
-/// The bundled RELAX NG plugin (see plugin/typst-relaxng in the repository).
-#let relaxng-plugin = plugin("relaxng.wasm")
-
-/// Format the errors of a `(valid: false, errors: (..))` validation result
-/// into a readable multi-line string.
-#let format-errors(result) = {
-  result.errors.map(e => {
-    let loc = if e.at("line", default: none) != none {
-      " (line " + str(e.line) + ", column " + str(e.column) + ")"
-    } else {
-      ""
-    }
-    "- " + e.message + loc
-  }).join("\n")
-}
-
-/// Create XML-authoring functions from a RELAX NG grammar (compact syntax).
-///
-/// Returns a dictionary with one tag function per element defined in the
-/// grammar plus the reserved keys `root`, `validate`, `roots`, and
-/// `elements` (reserved keys win if the grammar defines elements with those
-/// names). Destructure what you need:
-///
-///   #let (root, foo, bar) = create-from-relaxng(rnc)
-///
-/// - `rnc`: the grammar source (str or bytes), or -- for grammars split
-///   across several files with `include`/`external` -- a dictionary mapping
-///   file names to file contents. The FIRST entry is the entry point:
-///     create-from-relaxng((
-///       "pretext.rnc": read("pretext.rnc"),
-///       "pf-adapter.rnc": read("pf-adapter.rnc"),
-///       ...
-///     ))
-/// - `handlers`: forwarded to `make-tag` -- overrides for how Typst content
-///   (markup, math, ...) is converted to XML.
-/// - `wasm`: the validator plugin; defaults to the bundled one. Pass a
-///   `plugin(...)` module or raw wasm bytes to substitute your own build.
-#let create-from-relaxng(rnc, handlers: auto, wasm: auto) = {
-  let p = if wasm == auto {
-    relaxng-plugin
-  } else if type(wasm) == bytes {
-    plugin(wasm)
-  } else {
-    wasm
-  }
-  // Multi-file grammars are sent as a JSON VFS object (the plugin detects
-  // the leading "{"); single grammars are sent verbatim.
-  let rnc-bytes = if type(rnc) == dictionary {
-    bytes(json.encode(rnc))
-  } else {
-    bytes(rnc)
-  }
-  let info = json(p.list_elements(rnc-bytes))
-
-  // Validate content (authored with the tag functions) or a raw XML string.
-  let validate = doc => {
-    let xml-str = if type(doc) == str { doc } else { xml-to-string(doc, handlers: handlers) }
-    json(p.validate(rnc-bytes, bytes(xml-str)))
-  }
-
-  // Validating template: serialize the body, panic on validation errors,
-  // render the XML source on success. Use as `#show: root`.
-  let root = body => {
-    let xml-str = xml-to-string(body, handlers: handlers)
-    let result = json(p.validate(rnc-bytes, bytes(xml-str)))
-    if not result.valid {
-      panic(
-        "XML failed RELAX NG validation:\n" + format-errors(result)
-          + "\nDocument was: " + xml-str,
-      )
-    }
-    raw(xml-str, lang: "xml", block: true)
-  }
-
-  let tags = (:)
-  for name in info.elements {
-    tags.insert(name, make-tag(name, handlers: handlers))
-  }
-
-  tags + (
-    root: root,
-    validate: validate,
-    roots: info.roots,
-    elements: info.elements,
-  )
-}
diff --git a/packages/preview/xmlit/0.1.0/src/xml-to-string/xml-to-string.typ b/packages/preview/xmlit/0.1.0/src/xml-to-string/xml-to-string.typ
deleted file mode 100644
index 08886f5caf..0000000000
--- a/packages/preview/xmlit/0.1.0/src/xml-to-string/xml-to-string.typ
+++ /dev/null
@@ -1,99 +0,0 @@
-// xml-to-string: serialize XML node trees to an XML string -- both trees
-// authored with xmlit tag functions and the output of Typst's built-in
-// `xml()` reader (faithfully reversed).
-
-#import "../elem/elem.typ": convert
-
-/// Escape a string for use as XML text content (`&`, `<`, `>`).
-/// `&` must be replaced first so already-escaped entities are not double-escaped.
-#let esc-text(s) = {
-  s.replace("&", "&")
-   .replace("<", "<")
-   .replace(">", ">")
-}
-
-/// Escape a string for use inside a double-quoted attribute value
-/// (`&`, `<`, `"`).
-#let esc-attr(s) = {
-  s.replace("&", "&")
-   .replace("<", "<")
-   .replace("\"", """)
-}
-
-/// Faithfully serialize the output of Typst's built-in `xml()` reader back to
-/// an XML string.
-///
-/// `xml()` yields text nodes as plain strings (with entities already decoded)
-/// and element nodes as dictionaries with `namespace`, `tag`, `attrs`, and
-/// `children` keys. This function reverses that:
-///
-/// - Text nodes are re-escaped for text context.
-/// - Attribute values are re-escaped for attribute context; attribute order is
-///   preserved.
-/// - Namespaces are emitted as default `xmlns="..."` declarations, but only
-///   when an element's resolved namespace URI differs from the one it inherits
-///   from its parent (mirroring how `xml()` repeats the URI on every
-///   descendant). Original prefixes and attribute namespaces are not
-///   recoverable from `xml()` output and are not reconstructed.
-/// - Elements with no children are written self-closing (``).
-/// - Comment and processing-instruction nodes (which `xml()` collapses to an
-///   empty-tag sentinel with `tag == ""` and no recoverable content) are
-///   skipped.
-///
-/// Accepts a single node, an array of nodes (as returned directly by
-/// `xml("file.xml")`), or content -- e.g. the direct return value of an xmlit
-/// tag function, or a markup block, normalized via `convert` (`handlers:` is
-/// forwarded to it).
-///
-/// Example:
-///   #xml-to-string(xml("doc.xml"))
-///   #xml-to-string(foo(bar(baz: "zz")))
-#let xml-to-string(node, inherited-ns: none, handlers: auto) = {
-  // Authored content (metadata-wrapped nodes, markup, ...): normalize first.
-  if type(node) == content {
-    node = convert(node, handlers: handlers)
-  }
-
-  // Top-level array (e.g. the direct return of `xml(...)`).
-  if type(node) == array {
-    let s = node.map(n => xml-to-string(n, inherited-ns: inherited-ns, handlers: handlers)).join("")
-    return if s == none { "" } else { s }
-  }
-
-  if type(node) == str {
-    return esc-text(node)
-  }
-
-  let tag = node.at("tag", default: "")
-  // Comment / processing-instruction sentinel: content is lost, so skip it.
-  if tag == "" {
-    return ""
-  }
-
-  let ns = node.at("namespace", default: none)
-  let attrs = node.at("attrs", default: (:))
-  let children = node.at("children", default: ())
-
-  let attrs-str = attrs.pairs().map(((k, v)) => {
-    let vs = if type(v) == str { v } else if type(v) == bool { repr(v) } else { str(v) }
-    " " + k + "=\"" + esc-attr(vs) + "\""
-  }).join("")
-
-  // Declare a default namespace only when it changes relative to the parent.
-  let ns-str = if ns != inherited-ns {
-    " xmlns=\"" + esc-attr(if ns == none { "" } else { ns }) + "\""
-  } else {
-    ""
-  }
-
-  let open = "<" + tag + ns-str + attrs-str
-
-  if children.len() == 0 {
-    open + " />"
-  } else {
-    let inner = children.map(c => {
-      xml-to-string(c, inherited-ns: ns, handlers: handlers)
-    }).join("")
-    open + ">" + inner + ""
-  }
-}
diff --git a/packages/preview/xmlit/0.1.0/LICENSE b/packages/preview/xmlit/0.1.3/LICENSE
similarity index 100%
rename from packages/preview/xmlit/0.1.0/LICENSE
rename to packages/preview/xmlit/0.1.3/LICENSE
diff --git a/packages/preview/xmlit/0.1.3/README.md b/packages/preview/xmlit/0.1.3/README.md
new file mode 100644
index 0000000000..9b5ffa856f
--- /dev/null
+++ b/packages/preview/xmlit/0.1.3/README.md
@@ -0,0 +1,270 @@
+# typst-xmlit
+
+Tools for generating, validating, and outputting XML using Typst syntax.
+
+

+ A Typst-rendered page: element constructors derived from a RELAX NG grammar, a valid document serialized to XML, a validation error with a located source snippet, and the same errors highlighted in place +

+ +The page above is [examples/create-from-relaxng.typ](https://github.com/siefkenj/typst-xmlit/blob/0.1.3/examples/create-from-relaxng.typ) +rendered by Typst: it derives typechecked element constructors from a RELAX NG +grammar, then validates and prints a document — pointing right at the mistakes +in an invalid one. + +## Authoring XML + +Create functions which return XML elements with `make-tag`/`make-tags`. +Use the resulting functions using standard typst syntax. Named arguments are converted to attributes and positional arguments +are treated as children. + +### `make-tag(tag, handlers: auto) -> function` + +Creates a tag function for a single element named `tag`. `handlers` overrides +how body content is converted to XML (see [Markup in bodies](#markup-in-bodies)). +The returned tag function takes named arguments as attributes and positional +arguments as children: `(..args) -> content`. + +### `make-tags(..names, handlers: auto) -> array` + +Creates one tag function per name, returned in order for destructuring; +`handlers` is forwarded to each. + +```typst +#import "@preview/xmlit:0.1.0": make-tags, xml-to-string + +#{ + let (foo, bar) = make-tags("foo", "bar") + + // Typst native XML parsing + let xml1 = xml(bytes(`text`.text)) + + // Construct XML by passing using function arguments + let xml2 = foo(bar(baz: "zz"), "text") + + // Construct XML by passing using a code block + let xml3 = foo({ + bar(baz: "zz") + "text" + }) + + // Construct XML by passing content + let xml4 = foo[#bar(baz: "zz")text] + + [ + // All versions render as `text` + #xml-to-string(xml1) + + #xml-to-string(xml2) + + #xml-to-string(xml3) + + #xml-to-string(xml4) + ] +} +``` + +### Markup in bodies + +Inside content (`[...]` blocks) markup is automatically converted into tags: + + - `*bold*` → `bold` + - `_emph_` → `emph` + - `` `code` `` → `code` + - `$x^2$` → `x^2` + - `$ ... $` → `` + +This mapping can be overwritten by providing `handlers` to the make-tag function. + +```typst +#import "../src/lib.typ": * + +#let p = make-tag("p", handlers: ( + // strong -> instead of + "strong": (c, convert, ctx) => ((tag: "alert", attrs: (:), children: convert(c.body)),), + // Control how the _content_ of math is serialized. + "math": (body, convert, ctx) => ("MATH: \"" + repr(body) + "\"",), + // Control what tag is used for math blocks. + "equation": (c, convert, ctx) => { + let f = c.fields() + let tag = if f.block { "md" } else { "m" } + // Use the math handler we defined already. + let math-handler = ctx.handlers.at("math") + ((tag: tag, attrs: (:), children: math-handler(f.body, convert, ctx)),) + }, +)) + +// Becomes: `

A very important point about MATH: "attach(base: [x], t: [2])". It can sometimes be solved with MATH: "root(radicand: [⋅])"

` +#xml-to-string(p[ + A *very important* point about $x^2$. It can sometimes be solved with + $ + sqrt(dot) + $ +]) +``` + +A handler has the signature `handler(element, convert, ctx)` + - `convert` turns any child value (e.g. the element's body) into an array of XML nodes using the +same handler table + - `ctx` provides an object that can be used to look up other handlers that are defined. They will be defined on `ctx.handlers`. + +Unmapped markup (e.g. headings) raises an error naming the element and the +`handlers:` entry that would map it. + +#### Preserving Math + +There is no way (in typst 0.15) to serialize all math such that `eval` +can evaluate it as valid typst code. Since you may want access to the math (for example, +measure it), the `extract-math: true` option may be passed to `xml-to-string`. +If passed, it returns a dictionary `(xml, math-items)`: all found math is +collected into `math-items` and the math in the XML string is replaced with a +sentinel. + +```typst +#let (xml, math-items) = xml-to-string(doc, extract-math: true) +// xml: "

Area: ⟦math-0⟧

" (text sentinels, ⟦id⟧) +// math-items: ("math-0": $pi r^2$, ...) (real equation content) + +// rendered sizes, keyed by the same ids that appear in the XML: +#context math-items.pairs().map(((id, eq)) => (id, measure(eq))) +``` + +Ids are assigned in document order ("math-0", "math-1", ...), so they are +deterministic across compiles. The default (no `extract-math`). + +See [examples/render-xml-with-math.typ](https://github.com/siefkenj/typst-xmlit/blob/0.1.3/examples/render-xml-with-math.typ) for an example where +xml is produced with math rendered as "math" via typst. + +## Typechecked authoring from a RELAX NG grammar + +### `create-from-relaxng(rnc, handlers: auto, wasm: auto) -> dictionary` + +`create-from-relaxng` derives tag functions from a RELAX NG grammar (compact +syntax, `.rnc`) and validates the composed document via a bundled WASM +plugin (see [plugin/](https://github.com/siefkenj/typst-xmlit/blob/0.1.3/plugin/README.md)). It returns +`(elements: dictionary, utils: dictionary)`. Parameters: + +- `rnc` — the grammar source (str/bytes), or a `(file-name: contents)` + dictionary for multi-file grammars (the first entry is the entry point). +- `handlers` — forwarded to every generated tag function. +- `wasm` — the validator plugin; defaults to the bundled one. + +```typst +#import "@preview/xmlit:0.1.0": create-from-relaxng + +#let (utils, elements) = create-from-relaxng( + "start = element foo { element bar { attribute baz { text } }* }", +) +#let (foo, bar) = elements + +#show: utils.validate-and-render + +#foo[#bar(baz: "xx")] +``` + +The returned dictionary destructures into two entries: + +- `elements` — a dictionary mapping each element name defined in the grammar + to its tag function (destructure the ones you need, as above). +- `utils` — grammar-level helpers, each accepting `pretty-print: false` where + applicable (see [Pretty printing](#pretty-printing)): + - `render(body, pretty-print: false) -> content` — a template + (`#show: utils.render`) that serializes its body and renders the XML + source *without validating*. Useful for fast iteration; switch to + `validate-and-render` once the document is ready to be checked. + - `validate-and-render(body, pretty-print: false) -> content` — a template + (`#show: utils.validate-and-render`) that serializes its body, validates + it against the grammar, and renders the XML source. Invalid documents fail + compilation with a readable panic that includes a small line-numbered + snippet of the source around each error, not the whole document: + + ```text + XML failed RELAX NG validation: + - element is not allowed here. Expected element(s): bar. + 1 | + > 2 | + ^^^^^^^ + 3 | + ``` + + No `(line, column)` is shown — those would be positions in the invisible, + internally-generated compact XML string, not anything actually written. + + The snippet is windowed both by line (a couple of lines of context) and, + within the target line itself, by character count — pretty-printing only + breaks lines between all-element children, so a `

` full of prose (or + even a whole document with no element-only nesting) can pretty-print to + one very long line; the character-level window is what keeps the snippet + short regardless. + + Use `.with(pretty-print: true)` in a show rule: + `#show: utils.validate-and-render.with(pretty-print: true)`. + + - `render-and-show-validation-errors(body, pretty-print: true) -> content` — + a template (`#show: utils.render-and-show-validation-errors`) for + authoring/preview: like `validate-and-render`, but instead of panicking on + an invalid document it renders the XML source anyway, highlighting each + offending element's line in place with its error message. Errors that + can't be tied to a specific element are listed below the block. Useful + while iterating on a document you know isn't finished yet. + - `validate(doc) -> (valid: bool, errors: array)` — validate content or an + XML string without panicking. On failure, each entry in `errors` also + carries a `snippet` — the same windowed source excerpt used in + `validate-and-render`'s panic message (`none` only for errors with no + locatable position, e.g. an internal buffer-limit error). For a raw `doc` + string the snippet windows directly around the error's position in that + string (no round-trip through the grammar needed), and the plugin's raw + `line`/`column` fields are kept, since they index the exact string + written. For authored content the snippet is mapped through the element + that produced it, and `line`/`column` are *removed* — those would be + positions in an invisible, internally-generated XML string, not anything + actually written, so they'd only mislead. + - `roots` — the element names allowed as the document root. (All element + names are `elements.keys()`.) + +A `handlers:` argument passed to `create-from-relaxng` is forwarded to every +generated tag function, so one handler table configures markup/math +conversion for the whole grammar (see [Markup in bodies](#markup-in-bodies)). + +## Serializing + +### `xml-to-string(node, handlers: auto, extract-math: false, pretty-print: false) -> str | dictionary` + +`xml-to-string` accepts authored trees (the return value of a tag function or +any markup content), plain node dictionaries/strings/arrays, and — faithfully — +the output of Typst's built-in `xml()` reader. Parameters: + +- `node` — an authored tree, a node dict/str/array, or `xml()` reader output. +- `handlers` — overrides for content conversion (see [Markup in bodies](#markup-in-bodies)). +- `extract-math` — return a `(xml, math-items)` dictionary with equations pulled out (see below). +- `pretty-print` — indent element-only content (see below). + +```typst +#xml-to-string(xml("doc.xml")) +``` + +Attribute order is preserved, text/attribute contexts are escaped correctly, +empty elements self-close, and default-namespace declarations are re-emitted +only where the namespace actually changes. + +### Pretty printing + +Pass `pretty-print: true` to indent the output. Only elements whose children +are *all elements* are reflowed — one child per line; elements containing any +text (mixed content) stay inline, so no significant whitespace is introduced: + +```typst +#xml-to-string(root(a(b()), b(id: "2")), pretty-print: true) +// +// +// +// +// +// + +#xml-to-string(p[Some *bold* text], pretty-print: true) +//

Some bold text

(mixed content — left inline) +``` + +Pretty-printed output is meant for reading; it is not byte-faithful to +`xml()` reader input. + diff --git a/packages/preview/xmlit/0.1.3/src/elem/elem.typ b/packages/preview/xmlit/0.1.3/src/elem/elem.typ new file mode 100644 index 0000000000..b4495545bb --- /dev/null +++ b/packages/preview/xmlit/0.1.3/src/elem/elem.typ @@ -0,0 +1,291 @@ +// elem: author XML trees with Typst syntax. +// +// Tag functions created by `make-tag` return their node wrapped in +// `metadata(...)` content. Because content joins cleanly with content and +// strings, all three call styles work and can be mixed: +// +// #let (foo, bar) = make-tags("foo", "bar") +// #foo(bar(baz: "zz"), "text") // positional +// #foo({ bar(baz: "zz"); "text" }) // code block (content joins) +// #foo[#bar(baz: "zz") text $x^2$] // markup block +// +// The node model is the same one Typst's `xml()` reader uses: an element is a +// dictionary with `tag`, `attrs`, and `children`; a text node is a string. + +// Math constructs whose AST cannot be reconstructed node-by-node, matched +// wholesale by comparing against the parsed form of their source. `dif`, for +// example, expands to `sequence(h(..), class(.., styled(..)))`, none of which +// can be re-created by evaluating serialized output -- but the whole node +// compares equal to `$dif$.body`, so it serializes back to "dif". +#let _special-math-forms = ( + ("dif", repr($dif$.body)), +) + +/// Serialize equation (body) content to a Typst math source string: +/// $x^2$ -> "x^2", $1/2$ -> "1/2", $sqrt(x+1)$ -> "sqrt(x+1)". Symbols +/// appear as their Unicode characters (e.g. "∫" for `integral`). +/// +/// For supported constructs the output round-trips: evaluating it as math +/// (e.g. `eval("$" + s + "$")`) reproduces exactly the original expression +/// (the property is enforced by the unit tests). Constructs without a +/// faithful serialization (matrices, cases, alignment points, ...) fall back +/// to their `repr`, which is visible in the output but is NOT valid math +/// source -- override the `"math"` handler to serialize those yourself. +#let math-to-string(c) = { + if type(c) == str { return c } + if type(c) != content { return repr(c) } + for (source, form) in _special-math-forms { + if repr(c) == form { return source } + } + let join-all(parts) = { + let s = parts.join("") + if s == none { "" } else { s } + } + // Parenthesize a sub-expression unless it is atomic: a single grapheme + // (letters and symbols), a number (single tokens in Typst math), a quoted + // string, or already parenthesized. + let group(s) = { + if s.clusters().len() <= 1 { return s } + if s.match(regex("^[0-9]+(\\.[0-9]+)?$")) != none { return s } + if s.starts-with("\"") and s.ends-with("\"") { return s } + if s.starts-with("(") and s.ends-with(")") { return s } + "(" + s + ")" + } + let name = repr(c.func()) + // Letters and symbols (x, π, ∫) are `symbol` elements: single characters + // that re-evaluate to themselves. + if name == "symbol" { + c.text + } else if name == "text" { + // Digit runs / decimals and single characters (operators like "+", ",") + // re-evaluate to the same `text` node; longer runs would re-parse as + // per-letter symbols, so they are emitted as quoted strings. + let t = c.text + if t.clusters().len() <= 1 or t.match(regex("^[0-9]+(\\.[0-9]+)?$")) != none { + t + } else { + "\"" + t.replace("\\", "\\\\").replace("\"", "\\\"") + "\"" + } + } else if name == "space" { + " " + } else if name == "sequence" { + join-all(c.children.map(math-to-string)) + } else if name == "equation" { + math-to-string(c.fields().body) + } else if name == "lr" { + // Parentheses re-create the lr group when re-parsed; other delimiter + // pairs (|x|, [x], ...) need the explicit lr(...) form. + let inner = math-to-string(c.fields().body) + if inner.starts-with("(") and inner.ends-with(")") { + inner + } else { + "lr(" + inner + ")" + } + } else if name == "op" { + // Named operators (lim, sin, max, ...) re-parse to the identical op node. + c.fields().text.text + } else if name == "primes" { + join-all(range(c.fields().count).map(_ => "'")) + } else if name == "frac" { + let f = c.fields() + group(math-to-string(f.num)) + "/" + group(math-to-string(f.denom)) + } else if name == "root" { + let f = c.fields() + let index = f.at("index", default: none) + if index == none { + "sqrt(" + math-to-string(f.radicand) + ")" + } else { + "root(" + math-to-string(index) + ", " + math-to-string(f.radicand) + ")" + } + } else if name == "attach" { + let f = c.fields() + let s = math-to-string(f.base) + // Primes attach top-right without an operator: $x'$ -> "x'". + let tr = f.at("tr", default: none) + if tr != none { s += math-to-string(tr) } + let b = f.at("b", default: none) + if b != none { s += "_" + group(math-to-string(b)) } + let t = f.at("t", default: none) + if t != none { s += "^" + group(math-to-string(t)) } + s + } else { + // No faithful serialization known: degrade to repr (visible, but not + // valid math source). Override the "math" handler for full control. + repr(c) + } +} + +/// Built-in handlers that map Typst content elements to XML nodes. +/// +/// Keys are content-function names (as produced by `repr(c.func())`), plus the +/// special `"math"` slot used to serialize equation bodies. Each handler is +/// called as `handler(element, convert, ctx)` where: +/// +/// - `convert`: function converting any child value to an array of nodes +/// (using the same merged handler table); use it to process bodies: +/// "strong": (c, convert, ctx) => ((tag: "b", attrs: (:), children: convert(c.body)),) +/// - `ctx`: a dictionary for handlers that delegate to another slot, with: +/// - `handlers`: the merged handler table (built-ins + user overrides); +/// see the built-in `equation` handler, which dispatches to `"math"` +/// +/// and must return either an array of nodes (element dictionaries and/or +/// strings) or a single such node (a bare element dictionary or string), which +/// is normalized to a one-element array. Override or extend any of these by +/// passing `handlers: (...)` to `make-tag` or `make-tags`. +#let default-handlers = ( + "sequence": (c, convert, ctx) => c.children.map(convert).flatten(), + "text": (c, convert, ctx) => (c.text,), + "space": (c, convert, ctx) => (" ",), + "linebreak": (c, convert, ctx) => ("\n",), + "parbreak": (c, convert, ctx) => ("\n\n",), + "smartquote": (c, convert, ctx) => { + let double = c.fields().at("double", default: true) + (if double { "\"" } else { "'" },) + }, + // A show/set rule inside a body wraps the rest in `styled`; recurse into the + // wrapped child (the style information itself has no XML representation). + "styled": (c, convert, ctx) => convert(c.fields().child), + // Nodes authored by xmlit tag functions travel through markup as metadata. + "metadata": (c, convert, ctx) => { + let v = c.value + if type(v) == dictionary and "tag" in v { + (v,) + } else { + panic("xmlit: metadata content does not carry an XML node: " + repr(v)) + } + }, + // Default markup mappings (in the spirit of Typst's HTML export). Override + // via `handlers:` to emit different tags. + "strong": (c, convert, ctx) => ((tag: "b", attrs: (:), children: convert(c.body)),), + "emph": (c, convert, ctx) => ((tag: "em", attrs: (:), children: convert(c.body)),), + "raw": (c, convert, ctx) => { + let f = c.fields() + // A plain code value (e.g. a bare dictionary) interpolated into markup + // displays as inline raw with lang "typc" -- almost certainly a mistake. + if f.at("lang", default: none) == "typc" { + panic( + "xmlit: a plain code value was interpolated into markup: `" + f.text + + "`. Tag functions already return content; did you interpolate a " + + "bare dictionary?", + ) + } + let tag = if f.at("block", default: false) { "pre" } else { "c" } + ((tag: tag, attrs: (:), children: (f.text,)),) + }, + // $...$ -> , $ ... $ -> . The children (string form) are produced + // by the "math" slot; the node additionally keeps the actual equation + // content under the reserved `math` key, so `xml-to-string(..., + // extract-math: true)` can hand it back for rendering/measuring. + "equation": (c, convert, ctx) => { + let f = c.fields() + let tag = if f.block { "md" } else { "m" } + let math-handler = ctx.handlers.at("math") + ((tag: tag, attrs: (:), children: math-handler(f.body, convert, ctx), math: c),) + }, + // Special slot (not a content-function name): serializes the *body* of an + // equation into child nodes. Unlike the others, it receives the equation's + // BODY content, not the equation element. The default emits a best-effort + // Typst-flavored linear string (see `math-to-string`); replace it via + // `handlers: ("math": (body, convert, ctx) => (...))`. + "math": (body, convert, ctx) => (math-to-string(body),), +) + +/// Convert any child value into an array of XML nodes. +/// +/// Accepts: strings (text nodes), element dictionaries, arrays of either, +/// numbers/booleans (stringified), `none` (dropped), and content (walked +/// using the handler table -- see `default-handlers`). +#let convert(value, handlers: auto) = { + if type(value) == str { return (value,) } + if value == none { return () } + if type(value) == int or type(value) == float { + return (str(value),) + } + if type(value) == bool { + return (repr(value),) + } + if type(value) == array { + return value.map(v => convert(v, handlers: handlers)).flatten() + } + if type(value) == dictionary { + if "tag" in value { return (value,) } + panic("xmlit: expected an element dictionary with a `tag` key, found: " + repr(value)) + } + if type(value) == content { + let merged = if handlers == auto { + default-handlers + } else { + default-handlers + handlers + } + let name = repr(value.func()) + let handler = merged.at(name, default: none) + if handler == none { + panic( + "xmlit: no handler for content element `" + name + "`. " + + "Pass `handlers: (\"" + name + "\": (elem, convert, ctx) => ..)` to " + + "make-tag to map it to XML.", + ) + } + let convert-child = v => convert(v, handlers: handlers) + let ctx = (handlers: merged) + let result = handler(value, convert-child, ctx) + // A handler may return a single node (a bare element dictionary or a + // string) instead of a one-element array; normalize any non-array return + // back through `convert` (arrays take the fast path unchanged). + return if type(result) == array { result } else { convert(result, handlers: handlers) } + } + panic("xmlit: cannot convert value of type " + repr(type(value)) + " to XML: " + repr(value)) +} + +/// Convert a content block to an array of XML nodes (exported alias of +/// `convert` for content input). +#let content-to-children(c, handlers: auto) = convert(c, handlers: handlers) + +/// True for text nodes that consist entirely of whitespace. +#let is-whitespace(v) = type(v) == str and v.trim() == "" + +/// Drop whitespace-only text nodes from the edges of a children array. +/// Applied to content-block bodies so that `#foo[ text ]` == `#foo("text")`. +#let trim-ws(children) = { + let out = children + while out.len() > 0 and is-whitespace(out.first()) { out = out.slice(1) } + while out.len() > 0 and is-whitespace(out.last()) { out = out.slice(0, out.len() - 1) } + out +} + +/// Create a function that produces an XML element with the given tag name. +/// Named arguments become XML attributes; positional arguments become +/// children (strings, other tag calls, arrays, or arbitrary content -- +/// including trailing `[...]` bodies). +/// +/// The returned function yields the node wrapped in `metadata(...)` content, +/// so tag calls can be freely embedded in markup and joined in code blocks. +/// +/// `handlers` extends/overrides `default-handlers` for content conversion. +/// +/// Example: +/// #let foo = make-tag("foo") +/// #let bar = make-tag("bar") +/// #foo[#bar(baz: "zz") some text] +/// // => some text +#let make-tag(tag, handlers: auto) = (..args) => { + let children = args.pos().map(a => { + let nodes = convert(a, handlers: handlers) + // Trim insignificant edge whitespace of `[...]` bodies, but keep + // explicitly passed strings verbatim. + if type(a) == content { trim-ws(nodes) } else { nodes } + }).flatten() + metadata((tag: tag, attrs: args.named(), children: children)) +} + +/// Generic one-off element constructor (compare `html.elem`): +/// #elem("foo", elem("bar", baz: "zz")) +#let elem(tag, ..args) = make-tag(tag)(..args) + +/// Create several tag functions at once (destructurable): +/// #let (foo, bar) = make-tags("foo", "bar") +/// A `handlers:` named argument is forwarded to every created tag. +#let make-tags(..names) = { + let handlers = names.named().at("handlers", default: auto) + names.pos().map(n => make-tag(n, handlers: handlers)) +} diff --git a/packages/preview/xmlit/0.1.0/src/lib.typ b/packages/preview/xmlit/0.1.3/src/lib.typ similarity index 94% rename from packages/preview/xmlit/0.1.0/src/lib.typ rename to packages/preview/xmlit/0.1.3/src/lib.typ index d741363896..dae6826306 100644 --- a/packages/preview/xmlit/0.1.0/src/lib.typ +++ b/packages/preview/xmlit/0.1.3/src/lib.typ @@ -21,7 +21,7 @@ // (compact syntax) and validate the // composed document via a WASM plugin. -#import "elem/elem.typ": default-handlers, convert, content-to-children, make-tag, make-tags, elem +#import "elem/elem.typ": default-handlers, convert, content-to-children, make-tag, make-tags, elem, math-to-string #import "relaxng/relaxng.typ": create-from-relaxng -#import "xml-to-string/xml-to-string.typ": esc-text, esc-attr, xml-to-string +#import "xml-to-string/xml-to-string.typ": esc-text, esc-attr, xml-to-string, xml-to-string-with-ranges #import "xml-to-string/make-tag.typ": xml-escape, to-xml diff --git a/packages/preview/xmlit/0.1.3/src/relaxng/relaxng.typ b/packages/preview/xmlit/0.1.3/src/relaxng/relaxng.typ new file mode 100644 index 0000000000..47e770e610 --- /dev/null +++ b/packages/preview/xmlit/0.1.3/src/relaxng/relaxng.typ @@ -0,0 +1,510 @@ +// relaxng: create typechecked XML-authoring functions from a RELAX NG grammar. +// +// `create-from-relaxng` compiles a grammar in RELAX NG *compact syntax* +// (`.rnc`) via a WASM plugin and returns a dictionary with two entries: +// +// - `elements`: a dictionary mapping each element name defined in the +// grammar to its tag function. +// - `utils`: grammar-level helpers: +// - `render`: a template that serializes its body and renders the XML +// source, without validating. Usable as `#show: utils.render`. +// - `validate-and-render`: a template that serializes its body, +// validates it against the grammar (panicking with readable errors if +// invalid), and renders the XML source. Usable as +// `#show: utils.validate-and-render`. +// - `render-and-show-validation-errors`: like `validate-and-render`, but +// instead of panicking it renders the XML source and highlights the +// offending element(s) in place with each error message. Usable as +// `#show: utils.render-and-show-validation-errors`. +// - `validate`: validate content or an XML string; returns the raw +// result `(valid: bool, errors: (..))` instead of panicking. +// - `roots`: the element names allowed as the document root. +// +// Example: +// #import "@preview/xmlit:0.1.0": create-from-relaxng +// #let (utils, elements) = create-from-relaxng( +// "start = element foo { element bar { attribute baz { text } }* }", +// ) +// #let (foo, bar) = elements +// #show: utils.validate-and-render +// #foo[#bar(baz: "xx")] + +#import "../elem/elem.typ": make-tag +#import "../xml-to-string/xml-to-string.typ": xml-to-string, xml-to-string-with-ranges + +/// The bundled RELAX NG plugin (see plugin/typst-relaxng in the repository). +#let relaxng-plugin = plugin("relaxng.wasm") + +/// Given `ranges` from `xml-to-string-with-ranges` and a byte `offset` (a +/// validator error position), return the `path` of the deepest element whose +/// `[start, end)` contains the offset, or `none` if none does. "Deepest" = the +/// tightest containing range, i.e. the most specific element. +#let locate-path(ranges, offset) = { + let best = none + for r in ranges { + if r.start <= offset and offset < r.end { + if best == none or (r.end - r.start) < (best.end - best.start) { best = r } + } + } + if best == none { none } else { best.path } +} + +/// 1-based line number of byte `offset` within `text`. +#let line-of(text, offset) = text.slice(0, offset).split("\n").len() + +// A wavy ("squiggle") underline of the given width, for marking an error span +// the way an editor does. +#let _squiggle(width, color: rgb("#cc0000")) = { + let period = 2.4pt + let amp = 1.1pt + let n = calc.max(2, int(width / period)) + let step = width / n + let verts = range(n + 1).map(i => (i * step, if calc.even(i) { 0pt } else { amp })) + box(width: width, height: amp, curve( + stroke: 0.6pt + color, + curve.move(verts.first()), + ..verts.slice(1).map(v => curve.line(v)), + )) +} + +// Draw `body` with a squiggle underline beneath it. The squiggle is anchored +// to `body`'s own box, so it stays under the right glyphs even as the +// surrounding line wraps. +#let _squiggle-under(body) = box({ + body + context place(bottom + left, dy: 2pt, _squiggle(measure(body).width)) +}) + +// Rebuild a source line, wrapping each error span (a byte `(col, span)` within +// the line, clipped to the line's end) in a squiggle underline while leaving +// the rest as ordinary syntax-highlighted XML. `spans` may be empty. +#let _underline-spans(line-text, spans) = { + let sorted = spans.sorted(key: s => s.col) + let pos = 0 + let out = () + for s in sorted { + let a = calc.max(pos, s.col) + let b = calc.min(line-text.len(), s.col + s.span) + if a > pos { out.push(raw(line-text.slice(pos, a), lang: "xml")) } + if b > a { + out.push(_squiggle-under(raw(line-text.slice(a, b), lang: "xml"))) + pos = b + } + } + if pos < line-text.len() { out.push(raw(line-text.slice(pos), lang: "xml")) } + out.join() +} + +// Tunables for the snippet shown under a located error. Character counts +// (not bytes) -- see the char-index conversion inside `snippet-at`. +#let _snippet-context-lines = 2 +#let _snippet-max-line-chars = 120 +#let _snippet-window-chars = 60 +#let _snippet-max-marked-chars = 60 +#let _snippet-max-errors = 5 + +// `array.join` returns `none` (not "") for an empty array; normalize so the +// windowing code below always gets a string back from a cluster slice. +#let _joined(cls) = { + let s = cls.join("") + if s == none { "" } else { s } +} + +// Convert a byte offset within `text` to a character (grapheme cluster) +// index by walking clusters and summing byte lengths -- keeps all +// subsequent windowing/padding in character units (safe for multi-byte +// content and correct for monospace alignment), even though the plugin's +// positions and the ranges machinery are byte offsets throughout. +#let _char-index-of(text, byte-offset) = { + let pos = 0 + let idx = 0 + for c in text.clusters() { + if pos >= byte-offset { break } + pos += c.len() + idx += 1 + } + idx +} + +// Cap a non-target context line to a bounded number of characters from its +// start (no error position on it to center a window around). +#let _capped-line(text) = { + let cls = text.clusters() + if cls.len() <= _snippet-max-line-chars { + text + } else { + cls.slice(0, _snippet-max-line-chars).join("") + "…" + } +} + +// Build the target line's displayed (possibly windowed) text plus a +// caret-underline beneath it, both bounded in character count regardless of +// the line's real length. The marked span itself is windowed too (head "…" +// tail): a long invalid element -- e.g. a mixed-content

full of prose -- +// would otherwise reproduce, carets and all, the very wall of text this +// machinery exists to avoid. +#let _target-line-snippet(text, start-idx, end-idx) = { + let cls = text.clusters() + let needs-window = cls.len() > _snippet-max-line-chars + let lo = if needs-window { calc.max(0, start-idx - _snippet-window-chars) } else { 0 } + let hi = if needs-window { calc.min(cls.len(), end-idx + _snippet-window-chars) } else { cls.len() } + let before = (if needs-window and lo > 0 { "…" } else { "" }) + _joined(cls.slice(lo, start-idx)) + let marked = _joined(cls.slice(start-idx, end-idx)) + let mcls = marked.clusters() + if mcls.len() > _snippet-max-marked-chars { + let half = calc.quo(_snippet-max-marked-chars, 2) + marked = _joined(mcls.slice(0, half)) + "…" + _joined(mcls.slice(mcls.len() - half)) + } + let after = _joined(cls.slice(end-idx, hi)) + (if needs-window and hi < cls.len() { "…" } else { "" }) + ( + text: before + marked + after, + pad: " " * before.clusters().len(), + carets: "^" * calc.max(marked.clusters().len(), 1), + ) +} + +/// Build a small line-numbered, character-windowed excerpt of `text` around +/// the byte range `[start, end)` (see `format-errors` for the two-level, +/// bounded-size windowing rationale), with the target line's span +/// underlined. `start`/`end` must be valid byte positions within `text`. +/// +/// This is the shared core `error-snippet` builds on top of (after mapping +/// a validator offset to an authored element's position in the pretty +/// string). It needs no element-path structure itself, so it also works +/// directly on a raw XML string passed to `validate` -- there `start`/`end` +/// are already byte offsets into that exact string (it IS both what was +/// validated and what to excerpt), no path-mapping step required. +#let snippet-at(text, start, end) = { + let lines = text.split("\n") + let target = line-of(text, start) + let col = text.slice(0, start).split("\n").last().len() + let target-text = lines.at(target - 1) + let span = calc.min(end - start, target-text.len() - col) + + let tl = _target-line-snippet(target-text, _char-index-of(target-text, col), _char-index-of(target-text, col + span)) + + let lo = calc.max(1, target - _snippet-context-lines) + let hi = calc.min(lines.len(), target + _snippet-context-lines) + let width = str(hi).len() + let pad-num(n) = " " * (width - str(n).len()) + str(n) + + range(lo, hi + 1).map(n => { + let gutter = if n == target { "> " } else { " " } + let prefix = gutter + pad-num(n) + " | " + if n == target { + let caret-line = " " * (width + 5) + tl.pad + tl.carets + prefix + tl.text + "\n" + caret-line + } else { + prefix + _capped-line(lines.at(n - 1)) + } + }).join("\n") +} + +/// Locate a single error's byte offset -> deepest element -> that element's +/// line in the pretty-printed source, and render a small line-numbered +/// window around it via `snippet-at`. Returns `none` if the error has no +/// position or can't be mapped to an element (e.g. `TextBufferOverflow`, or +/// `doc` was a raw XML string rather than authored content, which carries +/// no element path structure -- use `snippet-at` on that string directly +/// instead, no mapping needed). +/// +/// `compact-ranges`/`pretty` are as in `format-errors`. `e` is a single +/// entry from a `(valid: false, errors: (..))` validation result. +#let error-snippet(compact-ranges, pretty, e) = { + if e.at("start", default: none) == none { return none } + let path = locate-path(compact-ranges, e.start) + if path == none { return none } + let drange = pretty.ranges.find(r => r.path == path) + if drange == none { return none } + snippet-at(pretty.xml, drange.start, drange.end) +} + +/// Format the errors of a `(valid: false, errors: (..))` validation result +/// into a readable multi-line string, with a small windowed snippet of the +/// pretty-printed source around each error's location instead of dumping the +/// whole document. `compact-ranges` is the `ranges` from +/// `xml-to-string-with-ranges` of the COMPACT serialization (the one +/// actually validated; used to locate each error's byte offset via +/// `locate-path`). `pretty` is `(xml: str, ranges: array)` from +/// `xml-to-string-with-ranges(..., pretty-print: true)` of the SAME tree +/// (used to build the displayed snippet). +/// +/// Pretty-printing only breaks lines between all-element children (see +/// `xml-to-string`'s `pretty-print`); mixed content -- e.g. a `

` full of +/// prose -- stays on one line however long, and in the extreme a whole +/// document can pretty-print to a single line with no newlines at all. So +/// the target line itself is ALSO windowed to a bounded number of characters +/// around the error (not just "N lines of context") -- that inner windowing +/// is what actually guarantees a bounded snippet regardless of document +/// shape. +#let format-errors(result, compact-ranges, pretty) = { + // No "(line, column)" suffix here: this is always called on authored + // content (from `validate-and-render`), where those positions are offsets + // into an invisible, internally-generated compact string the user never + // sees or writes -- meaningless without the snippet, which already shows + // the actual location relative to the readable pretty-printed source. + let entries = result.errors.map(e => { + let snippet = error-snippet(compact-ranges, pretty, e) + "- " + e.message + (if snippet == none { "" } else { "\n" + snippet }) + }) + + let shown = entries.slice(0, calc.min(entries.len(), _snippet-max-errors)) + let rest = entries.len() - shown.len() + shown.join("\n\n") + (if rest > 0 { "\n\n...and " + str(rest) + " more error(s)" } else { "" }) +} + +/// Create XML-authoring functions from a RELAX NG grammar (compact syntax). +/// +/// Returns `(elements: (..), utils: (..))` -- destructure it directly: +/// +/// #let (utils, elements) = create-from-relaxng(rnc) +/// +/// - `elements` maps each element name defined in the grammar to its tag +/// function; destructure what you need: `#let (foo, bar) = elements` +/// - `utils` holds the grammar-level helpers `render` (a `#show:` template +/// that serializes its body and renders the XML source WITHOUT validating +/// -- for fast iteration; accepts `pretty-print`), `validate-and-render` +/// (a `#show:` template that validates its body and renders the XML +/// source, panicking with readable errors if invalid; also accepts +/// `pretty-print` -- `#show: utils.validate-and-render.with(pretty-print: +/// true)`), `render-and-show-validation-errors` (a `#show:` template that, +/// instead of panicking, renders the XML source and highlights the offending +/// element(s) with their messages in place -- for authoring/preview; also +/// accepts `pretty-print`, default true), `validate` (non-panicking; returns +/// `(valid: bool, errors: (..))`), and `roots` (the element names allowed as +/// the document root). +/// +/// - `rnc`: the grammar source (str or bytes), or -- for grammars split +/// across several files with `include`/`external` -- a dictionary mapping +/// file names to file contents. The FIRST entry is the entry point: +/// create-from-relaxng(( +/// "pretext.rnc": read("pretext.rnc"), +/// "pf-adapter.rnc": read("pf-adapter.rnc"), +/// ... +/// )) +/// - `handlers`: forwarded to `make-tag` -- overrides for how Typst content +/// (markup, math, ...) is converted to XML. +/// - `wasm`: the validator plugin; defaults to the bundled one. Pass a +/// `plugin(...)` module or raw wasm bytes to substitute your own build. +#let create-from-relaxng(rnc, handlers: auto, wasm: auto) = { + let p = if wasm == auto { + relaxng-plugin + } else if type(wasm) == bytes { + plugin(wasm) + } else { + wasm + } + // Multi-file grammars are sent as a JSON VFS object (the plugin detects + // the leading "{"); single grammars are sent verbatim. + let rnc-bytes = if type(rnc) == dictionary { + bytes(json.encode(rnc)) + } else { + bytes(rnc) + } + let info = json(p.list_elements(rnc-bytes)) + + // Validate content (authored with the tag functions) or a raw XML string. + // On failure, each entry in `errors` additionally carries a `snippet`: the + // same located, windowed source excerpt used in `validate-and-render`'s + // panic message -- for authored content via `error-snippet`, or directly + // via `snippet-at` for a raw string (its own text is both what was + // validated and what to excerpt, so no element-path mapping is needed). + // `none` only if the error itself has no position (e.g. + // `TextBufferOverflow`). Ranges/snippets are only computed on this (rare) + // failure path, so the common valid-input case stays as cheap as before. + let validate = doc => { + let is-str = type(doc) == str + let xml-str = if is-str { doc } else { xml-to-string(doc, handlers: handlers) } + let result = json(p.validate(rnc-bytes, bytes(xml-str))) + if result.valid { + return result + } + if is-str { + // The exact validated string IS the source to excerpt -- window + // snippets directly around each error's byte offset in it, no + // element-path mapping needed (that machinery only exists to bridge + // between separately-serialized compact/pretty representations of + // AUTHORED content; a raw string has just the one representation). + return ( + valid: false, + errors: result.errors.map(e => { + let snippet = if e.at("start", default: none) == none { + none + } else { + snippet-at(xml-str, e.start, e.at("end", default: e.start)) + } + e + (snippet: snippet) + }), + ) + } + let compact = xml-to-string-with-ranges(doc, handlers: handlers) + let pretty = xml-to-string-with-ranges(doc, handlers: handlers, pretty-print: true) + ( + valid: false, + errors: result.errors.map(e => { + // line/column are positions in the invisible, internally-generated + // compact string -- meaningless for authored content (the user + // never wrote that string), so drop them; `snippet` already shows + // the real location relative to the readable pretty-printed source. + let with-snippet = e + (snippet: error-snippet(compact.ranges, pretty, e)) + let _ = with-snippet.remove("line", default: none) + let _ = with-snippet.remove("column", default: none) + with-snippet + }), + ) + } + + // Non-validating template: serialize the body and render the XML source, + // without calling the validator at all. Use as `#show: utils.render`, or + // with options via `#show: utils.render.with(pretty-print: true)`. Useful + // while iterating, when paying for a validation round-trip on every render + // isn't wanted; switch to `validate-and-render` once the document is ready + // to be checked. + let render = (body, pretty-print: false) => { + raw(xml-to-string(body, handlers: handlers, pretty-print: pretty-print), lang: "xml", block: true) + } + + // Validating template: serialize the body, panic on validation errors, + // render the XML source on success. Use as + // `#show: utils.validate-and-render`, or with options via + // `#show: utils.validate-and-render.with(pretty-print: true)`. + // + // Validation always uses the compact serialization (so cosmetic + // pretty-print whitespace can never affect the result); only the rendered + // output is indented when `pretty-print` is true. The panic message uses a + // windowed snippet of the source around each error's location, not the + // whole document (see `format-errors`) -- ranges are only computed on this + // (rare) failure path, so the common valid-input case stays cheap. + let validate-and-render = (body, pretty-print: false) => { + let xml-str = xml-to-string(body, handlers: handlers) + let result = json(p.validate(rnc-bytes, bytes(xml-str))) + if not result.valid { + let compact = xml-to-string-with-ranges(body, handlers: handlers) + let pretty = xml-to-string-with-ranges(body, handlers: handlers, pretty-print: true) + panic( + "XML failed RELAX NG validation:\n" + format-errors(result, compact.ranges, pretty), + ) + } + let display = if pretty-print { + xml-to-string(body, handlers: handlers, pretty-print: true) + } else { + xml-str + } + raw(display, lang: "xml", block: true) + } + + // Non-panicking, error-locating template: serialize and render the body's + // XML source, but when validation fails, highlight the offending element(s) + // in place and show each message next to the element it belongs to (instead + // of aborting the compile like `validate-and-render`). Use as + // `#show: utils.render-and-show-validation-errors`, or with options via + // `.with(pretty-print: false)`. + // + // Validation still runs on the compact serialization (so cosmetic + // pretty-print whitespace can never affect the result); the plugin's + // byte-offset error positions are mapped to the specific element via + // `xml-to-string-with-ranges`, then to that element's line in the rendered + // (pretty by default) output. Ranges are only computed on the failure + // path -- the cheap, ranges-free `xml-to-string` handles the common + // valid-input case (mirrors `validate-and-render` and the plugin's own + // fast-validate/slow-diagnostic split). + let render-and-show-validation-errors = (body, pretty-print: true) => { + let xml-str = xml-to-string(body, handlers: handlers) + let result = json(p.validate(rnc-bytes, bytes(xml-str))) + + if result.valid { + let display-str = if pretty-print { + xml-to-string(body, handlers: handlers, pretty-print: true) + } else { + xml-str + } + return raw(display-str, lang: "xml", block: true) + } + + let compact = xml-to-string-with-ranges(body, handlers: handlers, pretty-print: false) + let display = xml-to-string-with-ranges(body, handlers: handlers, pretty-print: pretty-print) + + // Map each error -> deepest offending element -> that element's line in the + // displayed source. Errors that can't be tied to an element are listed + // separately below the block. + let messages-by-line = (:) + let spans-by-line = (:) + let unlocated = () + for e in result.errors { + // `start` is none (JSON null) for positionless errors (e.g. the + // plugin's internal buffer/pattern limits) -- those can't be tied to + // an element, so they fall through to the `unlocated` list. + let start = e.at("start", default: none) + let path = if start == none { none } else { locate-path(compact.ranges, start) } + let drange = if path == none { none } else { display.ranges.find(r => r.path == path) } + if drange == none { + unlocated.push(e.message) + } else { + let key = str(line-of(display.xml, drange.start)) + messages-by-line.insert(key, messages-by-line.at(key, default: ()) + (e.message,)) + // Byte column of the element's start within its line, plus the + // element's full byte length (clipped to the line by `_underline-spans`). + let col = display.xml.slice(0, drange.start).split("\n").last().len() + spans-by-line.insert(key, spans-by-line.at(key, default: ()) + ((col: col, span: drange.end - drange.start),)) + } + } + + // Render the source as a single-column grid, one row per line. A grid + // (rather than a `raw` block + `show raw.line`) is used because the + // squiggle underlines are themselves `raw`, which would recurse through a + // `raw.line` show rule. `row-gutter: 0` + a per-row `inset` make the red + // fill of consecutive error lines touch (contiguous) while still giving + // every line vertical breathing room. + let arrow = place(top + left, dx: -1em, text(fill: rgb("#cc0000"), size: 0.85em)[←]) + { + grid( + columns: (1fr,), + row-gutter: 0pt, + inset: (x: 4pt, y: 3pt), + fill: (_, row) => if str(row + 1) in messages-by-line { rgb("#ffe3e3") } else { none }, + ..display.xml.split("\n").enumerate().map(((i, line-text)) => { + let key = str(i + 1) + let msgs = messages-by-line.at(key, default: ()) + if msgs.len() > 0 { + // The message lives in a reserved right column so a wrapping + // message stays within its own block (never wrapping back under + // the source); the `←` is `place`d into the gutter so it hangs to + // the left of the message text instead of being part of the flow. + grid( + columns: (1fr, 40%), + column-gutter: 1.4em, + // Source line with the offending span(s) squiggle-underlined. + _underline-spans(line-text, spans-by-line.at(key, default: ())), + { + arrow + text(fill: rgb("#cc0000"), size: 0.85em, style: "italic")[#msgs.join("; ")] + }, + ) + } else { + raw(line-text, lang: "xml") + } + }), + ) + for m in unlocated { + text(fill: rgb("#cc0000"), size: 0.85em)[⚠ #m] + linebreak() + } + } + } + + let tags = (:) + for name in info.elements { + tags.insert(name, make-tag(name, handlers: handlers)) + } + + ( + elements: tags, + utils: ( + render: render, + validate-and-render: validate-and-render, + render-and-show-validation-errors: render-and-show-validation-errors, + validate: validate, + roots: info.roots, + ), + ) +} diff --git a/packages/preview/xmlit/0.1.0/src/relaxng/relaxng.wasm b/packages/preview/xmlit/0.1.3/src/relaxng/relaxng.wasm similarity index 100% rename from packages/preview/xmlit/0.1.0/src/relaxng/relaxng.wasm rename to packages/preview/xmlit/0.1.3/src/relaxng/relaxng.wasm diff --git a/packages/preview/xmlit/0.1.0/src/xml-to-string/make-tag.typ b/packages/preview/xmlit/0.1.3/src/xml-to-string/make-tag.typ similarity index 100% rename from packages/preview/xmlit/0.1.0/src/xml-to-string/make-tag.typ rename to packages/preview/xmlit/0.1.3/src/xml-to-string/make-tag.typ diff --git a/packages/preview/xmlit/0.1.3/src/xml-to-string/xml-to-string.typ b/packages/preview/xmlit/0.1.3/src/xml-to-string/xml-to-string.typ new file mode 100644 index 0000000000..36da05eebe --- /dev/null +++ b/packages/preview/xmlit/0.1.3/src/xml-to-string/xml-to-string.typ @@ -0,0 +1,236 @@ +// xml-to-string: serialize XML node trees to an XML string -- both trees +// authored with xmlit tag functions and the output of Typst's built-in +// `xml()` reader (faithfully reversed). + +#import "../elem/elem.typ": convert + +/// Escape a string for use as XML text content (`&`, `<`, `>`). +/// `&` must be replaced first so already-escaped entities are not double-escaped. +#let esc-text(s) = { + s.replace("&", "&") + .replace("<", "<") + .replace(">", ">") +} + +/// Escape a string for use inside a double-quoted attribute value +/// (`&`, `<`, `"`). +#let esc-attr(s) = { + s.replace("&", "&") + .replace("\"", """) + .replace("<", "<") +} + +// One level of pretty-print indentation. +#let _indent-unit = " " + +// Core serializer. Returns `(text: str, math: dict, ranges: array)`. When +// `extract` is true, a node carrying the reserved `math` key (an equation +// element, as produced by the built-in `equation` handler) is emitted with a +// text sentinel in place of its serialized children, and the equation content +// is collected into `math` under a sequential document-order id. +// +// When `pretty` is true, an element whose children are all elements (no text +// nodes) has each child placed on its own line, indented by `depth` levels. +// Elements with any text child (mixed content) stay inline, so significant +// whitespace is never introduced. +// +// When `record` is true, `ranges` collects one `(path, start, end)` entry per +// element node, where `path` is the sequence of child indices from the root +// and `start`/`end` are byte offsets of the element's serialized text within +// the returned `text` (byte offsets so they line up with the plugin's error +// positions and Typst's byte-indexed `str.len`/`str.slice`). Otherwise +// `ranges` is empty and the bookkeeping is skipped. +#let _serialize(node, inherited-ns, handlers, extract, pretty, depth, math, path, record) = { + // Authored content (metadata-wrapped nodes, markup, ...): normalize first. + if type(node) == content { + node = convert(node, handlers: handlers) + } + + // Array of nodes (e.g. the direct return of `xml(...)`). + if type(node) == array { + let text = "" + let ranges = () + let off = 0 + let i = 0 + for n in node { + let r = _serialize(n, inherited-ns, handlers, extract, pretty, depth, math, path + (i,), record) + if record { + for rg in r.ranges { ranges.push((path: rg.path, start: rg.start + off, end: rg.end + off)) } + } + text += r.text + off += r.text.len() + math = r.math + i += 1 + } + return (text: text, math: math, ranges: ranges) + } + + if type(node) == str { + return (text: esc-text(node), math: math, ranges: ()) + } + + let tag = node.at("tag", default: "") + // Comment / processing-instruction sentinel: content is lost, so skip it. + if tag == "" { + return (text: "", math: math, ranges: ()) + } + + let ns = node.at("namespace", default: none) + let attrs = node.at("attrs", default: (:)) + let children = node.at("children", default: ()) + + let attrs-str = attrs.pairs().map(((k, v)) => { + let vs = if type(v) == str { v } else if type(v) == bool { repr(v) } else { str(v) } + " " + k + "=\"" + esc-attr(vs) + "\"" + }).join("") + if attrs-str == none { attrs-str = "" } + + // Declare a default namespace only when it changes relative to the parent. + let ns-str = if ns != inherited-ns { + " xmlns=\"" + esc-attr(if ns == none { "" } else { ns }) + "\"" + } else { + "" + } + + let open = "<" + tag + ns-str + attrs-str + + // Range covering this element's whole serialized text (added once the text + // length is known); descendants' ranges are shifted into this frame. + let self-range(text, ranges) = if record { + (((path: path, start: 0, end: text.len()),) + ranges) + } else { () } + + // Math extraction: replace the (string-serialized) children with a + // sentinel and collect the actual equation content under a fresh id. + if extract and "math" in node { + let id = "math-" + str(math.len()) + math.insert(id, node.math) + let text = open + ">⟦" + id + "⟧" + return (text: text, math: math, ranges: self-range(text, ())) + } + + if children.len() == 0 { + let text = open + " />" + return (text: text, math: math, ranges: self-range(text, ())) + } + + // Pretty-print only when every child is an element node: reformatting + // mixed content (any text child) would inject significant whitespace. + let element-only = pretty and children.all(c => + type(c) == dictionary and c.at("tag", default: "") != "") + + let opengt = open + ">" + let inner = "" + let ranges = () + let off = opengt.len() + let i = 0 + if element-only { + let child-indent = _indent-unit * (depth + 1) + for c in children { + let r = _serialize(c, ns, handlers, extract, pretty, depth + 1, math, path + (i,), record) + let prefix = "\n" + child-indent + off += prefix.len() + if record { + for rg in r.ranges { ranges.push((path: rg.path, start: rg.start + off, end: rg.end + off)) } + } + inner += prefix + r.text + off += r.text.len() + math = r.math + i += 1 + } + let text = opengt + inner + "\n" + _indent-unit * depth + "" + (text: text, math: math, ranges: self-range(text, ranges)) + } else { + for c in children { + let r = _serialize(c, ns, handlers, extract, pretty, depth, math, path + (i,), record) + if record { + for rg in r.ranges { ranges.push((path: rg.path, start: rg.start + off, end: rg.end + off)) } + } + inner += r.text + off += r.text.len() + math = r.math + i += 1 + } + let text = opengt + inner + "" + (text: text, math: math, ranges: self-range(text, ranges)) + } +} + +/// Serialize XML nodes to an XML string; also faithfully reverses the output +/// of Typst's built-in `xml()` reader. +/// +/// For `xml()` reader output: +/// - Text nodes are re-escaped for text context. +/// - Attribute values are re-escaped for attribute context; attribute order is +/// preserved. +/// - Namespaces are emitted as default `xmlns="..."` declarations, but only +/// when an element's resolved namespace URI differs from the one it inherits +/// from its parent (mirroring how `xml()` repeats the URI on every +/// descendant). Original prefixes and attribute namespaces are not +/// recoverable from `xml()` output and are not reconstructed. +/// - Elements with no children are written self-closing (``). +/// - Comment and processing-instruction nodes (which `xml()` collapses to an +/// empty-tag sentinel with `tag == ""` and no recoverable content) are +/// skipped. +/// +/// Accepts a single node, an array of nodes (as returned directly by +/// `xml("file.xml")`), or content -- e.g. the direct return value of an xmlit +/// tag function, or a markup block, normalized via `convert` (`handlers:` is +/// forwarded to it). +/// +/// With `extract-math: true`, returns a dictionary `(xml: str, math-items: +/// dictionary)` instead of a plain string: `xml` is the XML string with each +/// equation's content replaced by a text sentinel `⟦math-N⟧`, and +/// `math-items` maps each id ("math-0", "math-1", ... in document order) to +/// the actual Typst equation content -- ready to be rendered or `measure()`d. +/// Equation nodes are recognized by the reserved `math` key that the built-in +/// `equation` handler stores on them. +/// +/// With `pretty-print: true`, elements whose children are all elements (no +/// text nodes) are indented with each child on its own line. Elements with +/// any text child (mixed content) stay inline, so no significant whitespace +/// is introduced. Note that pretty-printed output is not byte-faithful to +/// `xml()` reader input -- it is for human reading, not round-tripping. +/// +/// Example: +/// #xml-to-string(xml("doc.xml")) +/// #xml-to-string(foo(bar(baz: "zz"))) +/// #xml-to-string(foo(bar(baz: "zz")), pretty-print: true) +/// #let (xml, math-items) = xml-to-string(doc, extract-math: true) +/// #context math-items.pairs().map(((id, eq)) => (id, measure(eq))) +#let xml-to-string( + node, + inherited-ns: none, + handlers: auto, + extract-math: false, + pretty-print: false, +) = { + let r = _serialize(node, inherited-ns, handlers, extract-math, pretty-print, 0, (:), (), false) + if extract-math { + (xml: r.text, math-items: r.math) + } else { + r.text + } +} + +/// Like `xml-to-string`, but also returns per-element source ranges. Returns +/// `(xml: str, ranges: array)` where each `ranges` entry is +/// `(path: (int,), start: int, end: int)`: `path` is the element's sequence of +/// child indices from the root and `start`/`end` are byte offsets of its +/// serialized text within `xml`. +/// +/// Used to map a validator's byte-offset error position back to the specific +/// element that produced it (see `create-from-relaxng`'s +/// `render-and-show-validation-errors`). Serialize compact (the default) to +/// locate against a validator's positions; serialize with `pretty-print: true` +/// to find the same element's line in a human-readable rendering (the `path` +/// is stable across both). +#let xml-to-string-with-ranges( + node, + inherited-ns: none, + handlers: auto, + pretty-print: false, +) = { + let r = _serialize(node, inherited-ns, handlers, false, pretty-print, 0, (:), (), true) + (xml: r.text, ranges: r.ranges) +} diff --git a/packages/preview/xmlit/0.1.0/typst.toml b/packages/preview/xmlit/0.1.3/typst.toml similarity index 63% rename from packages/preview/xmlit/0.1.0/typst.toml rename to packages/preview/xmlit/0.1.3/typst.toml index 0d43aae1cf..e9b277a85d 100644 --- a/packages/preview/xmlit/0.1.0/typst.toml +++ b/packages/preview/xmlit/0.1.3/typst.toml @@ -1,14 +1,14 @@ [package] name = "xmlit" -version = "0.1.0" +version = "0.1.3" compiler = "0.15.0" repository = "https://github.com/siefkenj/typst-xmlit" entrypoint = "src/lib.typ" authors = ["Jason Siefken "] categories = ["utility"] license = "MIT" -description = "Generate XML documents using Typst syntax" -keywords = ["xml", "serialization", "markup"] +description = "Generate XML documents using native syntax, serialize, and validate with RelaxNG schemas." +keywords = ["xml", "serialization", "markup", "relaxng", "relax-ng", "schema"] exclude = [ "tests", "plugin", From c4a07b5d41d2f2ddd31718d3f4c2919683eaaed6 Mon Sep 17 00:00:00 2001 From: Jason Siefken Date: Fri, 17 Jul 2026 17:08:05 -0400 Subject: [PATCH 3/3] Update version numbers --- packages/preview/xmlit/0.1.3/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/preview/xmlit/0.1.3/README.md b/packages/preview/xmlit/0.1.3/README.md index 9b5ffa856f..535fcbc506 100644 --- a/packages/preview/xmlit/0.1.3/README.md +++ b/packages/preview/xmlit/0.1.3/README.md @@ -30,7 +30,7 @@ Creates one tag function per name, returned in order for destructuring; `handlers` is forwarded to each. ```typst -#import "@preview/xmlit:0.1.0": make-tags, xml-to-string +#import "@preview/xmlit:0.1.3": make-tags, xml-to-string #{ let (foo, bar) = make-tags("foo", "bar") @@ -149,7 +149,7 @@ plugin (see [plugin/](https://github.com/siefkenj/typst-xmlit/blob/0.1.3/plugin/ - `wasm` — the validator plugin; defaults to the bundled one. ```typst -#import "@preview/xmlit:0.1.0": create-from-relaxng +#import "@preview/xmlit:0.1.3": create-from-relaxng #let (utils, elements) = create-from-relaxng( "start = element foo { element bar { attribute baz { text } }* }",

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∈RqEcm5^*m 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 R3}@Lv_GknsQj literal 0 HcmV?d00001 diff --git a/packages/preview/xmlit/0.1.0/src/xml-to-string/make-tag.typ b/packages/preview/xmlit/0.1.0/src/xml-to-string/make-tag.typ new file mode 100644 index 0000000000..1ce2f7ec0b --- /dev/null +++ b/packages/preview/xmlit/0.1.0/src/xml-to-string/make-tag.typ @@ -0,0 +1,38 @@ +// to-xml: serialize plain node dictionaries (no namespace handling). The +// element-authoring API (`make-tag`, `elem`, ...) lives in ../elem/elem.typ. + +/// Escape special XML characters in a string value. +#let xml-escape(s) = { + s.replace("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace("\"", """) + .replace("'", "'") +} + +/// Serialize a single XML node (dictionary with `tag`, `attrs`, `children`) +/// or a plain string to an XML string. +#let to-xml(node) = { + if type(node) == str { + return xml-escape(node) + } + + let tag = node.tag + let attrs = node.at("attrs", default: (:)) + let children = node.at("children", default: ()) + + // Build attribute string + let attrs-str = attrs.pairs().map(((k, v)) => { + let vs = if type(v) == str { v } else if type(v) == bool { repr(v) } else { str(v) } + " " + k + "=\"" + xml-escape(vs) + "\"" + }).join("") + + // Serialize children + let inner = children.map(to-xml).join("") + + if inner == "" { + "<" + tag + attrs-str + " />" + } else { + "<" + tag + attrs-str + ">" + inner + "" + } +} diff --git a/packages/preview/xmlit/0.1.0/src/xml-to-string/xml-to-string.typ b/packages/preview/xmlit/0.1.0/src/xml-to-string/xml-to-string.typ new file mode 100644 index 0000000000..08886f5caf --- /dev/null +++ b/packages/preview/xmlit/0.1.0/src/xml-to-string/xml-to-string.typ @@ -0,0 +1,99 @@ +// xml-to-string: serialize XML node trees to an XML string -- both trees +// authored with xmlit tag functions and the output of Typst's built-in +// `xml()` reader (faithfully reversed). + +#import "../elem/elem.typ": convert + +/// Escape a string for use as XML text content (`&`, `<`, `>`). +/// `&` must be replaced first so already-escaped entities are not double-escaped. +#let esc-text(s) = { + s.replace("&", "&") + .replace("<", "<") + .replace(">", ">") +} + +/// Escape a string for use inside a double-quoted attribute value +/// (`&`, `<`, `"`). +#let esc-attr(s) = { + s.replace("&", "&") + .replace("<", "<") + .replace("\"", """) +} + +/// Faithfully serialize the output of Typst's built-in `xml()` reader back to +/// an XML string. +/// +/// `xml()` yields text nodes as plain strings (with entities already decoded) +/// and element nodes as dictionaries with `namespace`, `tag`, `attrs`, and +/// `children` keys. This function reverses that: +/// +/// - Text nodes are re-escaped for text context. +/// - Attribute values are re-escaped for attribute context; attribute order is +/// preserved. +/// - Namespaces are emitted as default `xmlns="..."` declarations, but only +/// when an element's resolved namespace URI differs from the one it inherits +/// from its parent (mirroring how `xml()` repeats the URI on every +/// descendant). Original prefixes and attribute namespaces are not +/// recoverable from `xml()` output and are not reconstructed. +/// - Elements with no children are written self-closing (``). +/// - Comment and processing-instruction nodes (which `xml()` collapses to an +/// empty-tag sentinel with `tag == ""` and no recoverable content) are +/// skipped. +/// +/// Accepts a single node, an array of nodes (as returned directly by +/// `xml("file.xml")`), or content -- e.g. the direct return value of an xmlit +/// tag function, or a markup block, normalized via `convert` (`handlers:` is +/// forwarded to it). +/// +/// Example: +/// #xml-to-string(xml("doc.xml")) +/// #xml-to-string(foo(bar(baz: "zz"))) +#let xml-to-string(node, inherited-ns: none, handlers: auto) = { + // Authored content (metadata-wrapped nodes, markup, ...): normalize first. + if type(node) == content { + node = convert(node, handlers: handlers) + } + + // Top-level array (e.g. the direct return of `xml(...)`). + if type(node) == array { + let s = node.map(n => xml-to-string(n, inherited-ns: inherited-ns, handlers: handlers)).join("") + return if s == none { "" } else { s } + } + + if type(node) == str { + return esc-text(node) + } + + let tag = node.at("tag", default: "") + // Comment / processing-instruction sentinel: content is lost, so skip it. + if tag == "" { + return "" + } + + let ns = node.at("namespace", default: none) + let attrs = node.at("attrs", default: (:)) + let children = node.at("children", default: ()) + + let attrs-str = attrs.pairs().map(((k, v)) => { + let vs = if type(v) == str { v } else if type(v) == bool { repr(v) } else { str(v) } + " " + k + "=\"" + esc-attr(vs) + "\"" + }).join("") + + // Declare a default namespace only when it changes relative to the parent. + let ns-str = if ns != inherited-ns { + " xmlns=\"" + esc-attr(if ns == none { "" } else { ns }) + "\"" + } else { + "" + } + + let open = "<" + tag + ns-str + attrs-str + + if children.len() == 0 { + open + " />" + } else { + let inner = children.map(c => { + xml-to-string(c, inherited-ns: ns, handlers: handlers) + }).join("") + open + ">" + inner + "" + } +} diff --git a/packages/preview/xmlit/0.1.0/typst.toml b/packages/preview/xmlit/0.1.0/typst.toml new file mode 100644 index 0000000000..0d43aae1cf --- /dev/null +++ b/packages/preview/xmlit/0.1.0/typst.toml @@ -0,0 +1,20 @@ +[package] +name = "xmlit" +version = "0.1.0" +compiler = "0.15.0" +repository = "https://github.com/siefkenj/typst-xmlit" +entrypoint = "src/lib.typ" +authors = ["Jason Siefken "] +categories = ["utility"] +license = "MIT" +description = "Generate XML documents using Typst syntax" +keywords = ["xml", "serialization", "markup"] +exclude = [ + "tests", + "plugin", + "src/elem/elem.test.typ", + "src/relaxng/relaxng.test.typ", +] + +[tool.tytanic] +tests = "tests" From 957c0710c635411341a9961224628a995b90ceed Mon Sep 17 00:00:00 2001 From: Jason Siefken Date: Fri, 17 Jul 2026 16:57:53 -0400 Subject: [PATCH 2/3] Reviewer changes --- packages/preview/xmlit/0.1.0/README.md | 121 ----- .../preview/xmlit/0.1.0/src/elem/elem.typ | 174 ------ .../xmlit/0.1.0/src/relaxng/relaxng.typ | 111 ---- .../0.1.0/src/xml-to-string/xml-to-string.typ | 99 ---- .../preview/xmlit/{0.1.0 => 0.1.3}/LICENSE | 0 packages/preview/xmlit/0.1.3/README.md | 270 ++++++++++ .../preview/xmlit/0.1.3/src/elem/elem.typ | 291 ++++++++++ .../xmlit/{0.1.0 => 0.1.3}/src/lib.typ | 4 +- .../xmlit/0.1.3/src/relaxng/relaxng.typ | 510 ++++++++++++++++++ .../{0.1.0 => 0.1.3}/src/relaxng/relaxng.wasm | Bin .../src/xml-to-string/make-tag.typ | 0 .../0.1.3/src/xml-to-string/xml-to-string.typ | 236 ++++++++ .../preview/xmlit/{0.1.0 => 0.1.3}/typst.toml | 6 +- 13 files changed, 1312 insertions(+), 510 deletions(-) delete mode 100644 packages/preview/xmlit/0.1.0/README.md delete mode 100644 packages/preview/xmlit/0.1.0/src/elem/elem.typ delete mode 100644 packages/preview/xmlit/0.1.0/src/relaxng/relaxng.typ delete mode 100644 packages/preview/xmlit/0.1.0/src/xml-to-string/xml-to-string.typ rename packages/preview/xmlit/{0.1.0 => 0.1.3}/LICENSE (100%) create mode 100644 packages/preview/xmlit/0.1.3/README.md create mode 100644 packages/preview/xmlit/0.1.3/src/elem/elem.typ rename packages/preview/xmlit/{0.1.0 => 0.1.3}/src/lib.typ (94%) create mode 100644 packages/preview/xmlit/0.1.3/src/relaxng/relaxng.typ rename packages/preview/xmlit/{0.1.0 => 0.1.3}/src/relaxng/relaxng.wasm (100%) rename packages/preview/xmlit/{0.1.0 => 0.1.3}/src/xml-to-string/make-tag.typ (100%) create mode 100644 packages/preview/xmlit/0.1.3/src/xml-to-string/xml-to-string.typ rename packages/preview/xmlit/{0.1.0 => 0.1.3}/typst.toml (63%) diff --git a/packages/preview/xmlit/0.1.0/README.md b/packages/preview/xmlit/0.1.0/README.md deleted file mode 100644 index b2aee5c343..0000000000 --- a/packages/preview/xmlit/0.1.0/README.md +++ /dev/null @@ -1,121 +0,0 @@ -# typst-xmlit - -Tools for generating, validating, and outputting XML using Typst syntax. - -## Authoring XML - -Create functions which return XML elements with `make-tag`/`make-tags`. -Use the resulting functions using standard typst syntax. - -```typst -#import "@preview/xmlit:0.1.0": make-tags, xml-to-string - -#{ - let (foo, bar) = make-tags("foo", "bar") - -} - -// Positional -#xml-to-string(foo(bar(baz: "zz"), "text")) - -// Code block -#xml-to-string(foo({ - bar(baz: "zz") - "text" -})) - -// Markup body -#xml-to-string(foo[#bar(baz: "zz")text]) - -// All three => text -``` - -Named arguments become attributes; positional arguments (strings, other tag -calls, arrays, numbers, or content) become children. `elem("foo", ...)` is a -generic one-off constructor in the spirit of `html.elem`. - -### Markup in bodies - -Inside a `[...]` body, ordinary Typst markup is mapped to XML by a built-in -handler table (in the spirit of Typst's HTML export): `*bold*` → ``, -`_emph_` → ``, `` `code` `` → ``/`