From 94a3ce3611522bb5112da85563c34f39c1da75c4 Mon Sep 17 00:00:00 2001 From: Asko Nõmm Date: Sun, 19 Oct 2025 23:25:19 +0300 Subject: Add quickdoc API doc generation --- API.md | 193 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ bb.edn | 8 ++- 2 files changed, 200 insertions(+), 1 deletion(-) create mode 100644 API.md diff --git a/API.md b/API.md new file mode 100644 index 0000000..3786b9b --- /dev/null +++ b/API.md @@ -0,0 +1,193 @@ +# Table of contents +- [`dompa.coordinates`](#dompa.coordinates) + - [`->nodes`](#dompa.coordinates/->nodes) - Transform given html according to given coordinates into a tree of nodes, each representing one HTML node and its children. + - [`compose`](#dompa.coordinates/compose) - Composes a given html string into a vector of coordinates. + - [`unify`](#dompa.coordinates/unify) - Joins together given coordinates that represent one HTML node in html, using a stack-based approach to correctly handle nested and void tags. +- [`dompa.html`](#dompa.html) + - [`->coordinates`](#dompa.html/->coordinates) - Transform a html string into a vector of coordinates indicating where an HTML node ends and begins. + - [`->nodes`](#dompa.html/->nodes) - Transform a html string into a tree of nodes, each representing one HTML node and its children. +- [`dompa.nodes`](#dompa.nodes) + - [`$`](#dompa.nodes/$) - Creates a new node Usage: clojure ($ :div ($ "hello world" )) . + - [`->html`](#dompa.nodes/->html) - Transform a vector of nodes into an HTML string. + - [`defhtml`](#dompa.nodes/defhtml) - Creates a new function with name that outputs HTML. + - [`traverse`](#dompa.nodes/traverse) - Recursively traverses given tree of nodes with a traverser-fn that gets a single node passed to it and returns a new updated tree. + +----- +# dompa.coordinates + + + + + + +## `->nodes` +``` clojure + +(->nodes {:keys [html coordinates]}) +``` +Function. + +Transform given `html` according to given `coordinates` into + a tree of nodes, each representing one HTML node and its children. + + Direct output of both [`compose`](#dompa.coordinates/compose) and [`unify`](#dompa.coordinates/unify) can be given to this + function, allowing chaining such as: + + ```clojure + (-> "some html ..." + coordinates/compose + coordinates/unify + coordinates/->nodes) + ``` +

Source

+ +## `compose` +``` clojure + +(compose html) +``` +Function. + +Composes a given `html` string into a vector of coordinates. + These are single-pass coordinates without awareness of context, + thus HTML such as: + + ```html +
hello
+ ``` + + will return 3 coordinates (div, text, div) instead of 2 (div, text). + To unify the coordinates in a context-aware way, you pass the result + of this function to the [`unify`](#dompa.coordinates/unify) function. +

Source

+ +## `unify` +``` clojure + +(unify {:keys [html coordinates]}) +``` +Function. + +Joins together given `coordinates` that represent + one HTML node in `html`, using a stack-based approach to correctly + handle nested and void tags. +

Source

+ +----- +# dompa.html + + + + + + +## `->coordinates` +``` clojure + +(->coordinates html) +``` +Function. + +Transform a `html` string into a vector of coordinates + indicating where an HTML node ends and begins. +

Source

+ +## `->nodes` +``` clojure + +(->nodes html) +``` +Function. + +Transform a `html` string into a tree of nodes, + each representing one HTML node and its children. +

Source

+ +----- +# dompa.nodes + + + + + + +## `$` +``` clojure + +($ name & opts) +``` +Function. + +Creates a new node + + Usage: + + ```clojure + ($ :div + ($ "hello world" )) + ``` +

Source

+ +## `->html` +``` clojure + +(->html nodes) +(->html nodes {:keys [void-nodes]}) +``` +Function. + +Transform a vector of `nodes` into an HTML string. + + Options: + - `void-nodes` - A set of node names that are self-closing, defaults to: + - `:!doctype` + - `:area` + - `:base` + - `:br` + - `:col` + - `:embed` + - `:hr` + - `:img` + - `:input` + - `:link` + - `:meta` + - `:source` + - `:track` + - `:wbr` + +

Source

+ +## `defhtml` +``` clojure + +(defhtml name & args-and-elements) +``` +Macro. + +Creates a new function with `name` that outputs HTML. + + Example usage: + + ```clojure + (defhtml about-page [who] + ($ :div + ($ "hello " who))) + + (about-page "world") + ``` + +

Source

+ +## `traverse` +``` clojure + +(traverse nodes traverser-fn) +``` +Function. + +Recursively traverses given tree of `nodes` with a `traverser-fn` + that gets a single node passed to it and returns a new updated tree. + If the traverses function returns `nil`, the node will be removed. + In any other case the node will be replaced. If you wish to keep + a node unchanged, just return it as-is. +

Source

diff --git a/bb.edn b/bb.edn index 853255f..dd486e0 100644 --- a/bb.edn +++ b/bb.edn @@ -8,4 +8,10 @@ :vars [:symbol]}}} test:clj (clojure "-X:test-clj") test:cljs (clojure "-M:test-cljs") - coverage (clojure "-M:coverage")}} + coverage (clojure "-M:coverage") + quickdoc {:doc "Invoke quickdoc" + :extra-deps {io.github.borkdude/quickdoc {:git/tag "v0.2.5", :git/sha "25784ca"}} + :task (exec 'quickdoc.api/quickdoc) + :exec-args {:git/branch "main" + :github/repo "https://github.com/askonomm/dompa" + :source-paths ["src/dompa"]}}}} -- cgit v1.2.3