orz-markdown 1.3.2 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -71,6 +71,37 @@ You can also convert a node programmatically:
71
71
  const markdown = window.OrzMarkdownRuntime.elementToMarkdown(someElement);
72
72
  ```
73
73
 
74
+ ## Portable Document Metadata
75
+
76
+ The editable document builders share one metadata model from
77
+ `orz-markdown/doc-meta`. An mdhtml or paged source can declare metadata in a
78
+ leading block that is consumed during generation:
79
+
80
+ ```markdown
81
+ {{nyml
82
+ kind: meta
83
+ title: Field Notes
84
+ author: Your Name
85
+ description: Notes from the field course
86
+ license: CC-BY-4.0
87
+ license_name: Creative Commons Attribution 4.0
88
+ license_url: https://creativecommons.org/licenses/by/4.0/
89
+ source: https://example.org/field-notes
90
+ date: 2026-07-10
91
+ keywords: notes, fieldwork, markdown
92
+ }}
93
+ ```
94
+
95
+ The generated file stores normalized metadata in standard `<head>` tags and an
96
+ `#orz-meta` JSON island. Those records survive in-browser edits and framework
97
+ updates. Host applications can instead pass a `DocMeta` object to the family
98
+ builders; host values win field by field. Slides seed `title` and `author` from
99
+ their native deck config and accept the same programmatic override.
100
+
101
+ ```javascript
102
+ import { extractDocMeta, parseDocMetaIsland } from 'orz-markdown/doc-meta';
103
+ ```
104
+
74
105
  ## Themes
75
106
 
76
107
  We provide multiple ready-to-use CSS themes for rendering the output! You do not need to style the custom plugins from scratch.
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Document metadata for the orz-family self-contained formats.
3
+ *
4
+ * A `.md.html` / `.slides.html` / `.paged.html` travels alone — that is the
5
+ * whole promise of the format. Until now it carried no author, no license and
6
+ * no link home, so someone who downloaded one held a file that said nothing
7
+ * about the terms under which they could reuse it.
8
+ *
9
+ * This module is the ONE place that knows how document metadata is written,
10
+ * read and emitted. It lives in orz-markdown because that is the only package
11
+ * all three tools already depend on; implementing it three times in three
12
+ * copy-pasted `template.ts` files is how the brand SVG and chrome CSS drifted.
13
+ *
14
+ * Two channels, one precedence rule:
15
+ *
16
+ * 1. **In the source** — a `{{nyml kind: meta … }}` block that a lone author
17
+ * can type. The builder consumes and removes it, then emits the normalized
18
+ * metadata into the generated document's `<head>`.
19
+ * 2. **Injected by a host** — the `metadata` build option.
20
+ *
21
+ * The **host wins, field by field**: a platform that knows the license
22
+ * authoritatively must not be overridden by a stale block someone pasted in.
23
+ * Fields the host leaves unset fall through to the source block.
24
+ *
25
+ * The builders emit `<meta>` / `<link rel="license">` tags plus a JSON island
26
+ * into `<head>`. That placement is load-bearing: every tool's `serializeDoc()`
27
+ * clones the whole `documentElement` and rewrites only the source island, so
28
+ * head tags survive an in-file edit *and* a framework self-update. Metadata
29
+ * written anywhere else would be silently dropped on save.
30
+ */
31
+ /** The `kind:` value that marks a metadata block. */
32
+ export declare const DOC_META_KIND = "meta";
33
+ /** The id of the emitted JSON island (a host's reliable read-back channel). */
34
+ export declare const DOC_META_ISLAND_ID = "orz-meta";
35
+ /** MIME type of the JSON island. Distinct from the `nyml-data` script. */
36
+ export declare const DOC_META_ISLAND_TYPE = "application/orz-meta+json";
37
+ export interface DocLicense {
38
+ /** SPDX identifier, e.g. `CC-BY-4.0`. */
39
+ spdx?: string;
40
+ /** Human label, e.g. `CC BY 4.0`. */
41
+ name?: string;
42
+ /** Canonical deed / legal-code URL. */
43
+ url?: string;
44
+ }
45
+ /**
46
+ * Format-agnostic. Deliberately not license-only: a general host injects more
47
+ * than a license, and a field added here is available to all three tools at once.
48
+ */
49
+ export interface DocMeta {
50
+ title?: string;
51
+ author?: string;
52
+ description?: string;
53
+ license?: DocLicense;
54
+ /** Canonical URL of the document, or of the repository it lives in. */
55
+ source?: string;
56
+ /** ISO date of publication. */
57
+ date?: string;
58
+ keywords?: string[];
59
+ }
60
+ /**
61
+ * Read the FIRST `kind: meta` nyml block out of a source and remove it.
62
+ *
63
+ * Removal is not cosmetic. The nyml plugin renders every block to a
64
+ * `<script type="application/json" id="nyml-data">` with a FIXED id — leaving a
65
+ * meta block in the body would emit a second element with a duplicate id. And
66
+ * metadata belongs in `<head>`, not in the rendered body.
67
+ *
68
+ * Returns the parsed metadata (empty when there is no such block) and the body
69
+ * with the block spliced out. Any other nyml block is left untouched.
70
+ */
71
+ export declare function extractDocMeta(source: string): {
72
+ meta: DocMeta;
73
+ body: string;
74
+ };
75
+ /**
76
+ * Merge source-declared metadata with host-injected metadata. The HOST wins,
77
+ * field by field; unset host fields fall through to the source.
78
+ */
79
+ export declare function mergeDocMeta(fromSource: DocMeta, fromHost?: DocMeta): DocMeta;
80
+ /**
81
+ * `<head>` tags for the metadata. Emitted by each tool's `buildHtml`.
82
+ *
83
+ * `<link rel="license">` is the machine-readable channel search engines and
84
+ * reuse tooling look for. Nothing here asserts a copyright — a document under a
85
+ * public-domain dedication (CC0) must not carry a "©" claim, and this function
86
+ * therefore never emits one. A visible notice, if a tool ever adds one, has to
87
+ * make that distinction itself.
88
+ */
89
+ export declare function renderDocMetaHead(meta: DocMeta): string;
90
+ /**
91
+ * The full metadata as a JSON island, for a host or tool to read back.
92
+ * `serializeDoc()` never touches it, so it survives in-file edits.
93
+ */
94
+ export declare function renderDocMetaIsland(meta: DocMeta): string;
95
+ /** Read the island back out of a built document (host-side helper). */
96
+ export declare function parseDocMetaIsland(html: string): DocMeta | null;
97
+ //# sourceMappingURL=doc-meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-meta.d.ts","sourceRoot":"","sources":["../src/doc-meta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,qDAAqD;AACrD,eAAO,MAAM,aAAa,SAAS,CAAC;AAEpC,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,aAAa,CAAC;AAE7C,0EAA0E;AAC1E,eAAO,MAAM,oBAAoB,8BAA8B,CAAC;AAEhE,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAwBD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAyB9E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAY7E;AAUD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAmBvD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAIzD;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAY/D"}
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ /**
3
+ * Document metadata for the orz-family self-contained formats.
4
+ *
5
+ * A `.md.html` / `.slides.html` / `.paged.html` travels alone — that is the
6
+ * whole promise of the format. Until now it carried no author, no license and
7
+ * no link home, so someone who downloaded one held a file that said nothing
8
+ * about the terms under which they could reuse it.
9
+ *
10
+ * This module is the ONE place that knows how document metadata is written,
11
+ * read and emitted. It lives in orz-markdown because that is the only package
12
+ * all three tools already depend on; implementing it three times in three
13
+ * copy-pasted `template.ts` files is how the brand SVG and chrome CSS drifted.
14
+ *
15
+ * Two channels, one precedence rule:
16
+ *
17
+ * 1. **In the source** — a `{{nyml kind: meta … }}` block that a lone author
18
+ * can type. The builder consumes and removes it, then emits the normalized
19
+ * metadata into the generated document's `<head>`.
20
+ * 2. **Injected by a host** — the `metadata` build option.
21
+ *
22
+ * The **host wins, field by field**: a platform that knows the license
23
+ * authoritatively must not be overridden by a stale block someone pasted in.
24
+ * Fields the host leaves unset fall through to the source block.
25
+ *
26
+ * The builders emit `<meta>` / `<link rel="license">` tags plus a JSON island
27
+ * into `<head>`. That placement is load-bearing: every tool's `serializeDoc()`
28
+ * clones the whole `documentElement` and rewrites only the source island, so
29
+ * head tags survive an in-file edit *and* a framework self-update. Metadata
30
+ * written anywhere else would be silently dropped on save.
31
+ */
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.DOC_META_ISLAND_TYPE = exports.DOC_META_ISLAND_ID = exports.DOC_META_KIND = void 0;
34
+ exports.extractDocMeta = extractDocMeta;
35
+ exports.mergeDocMeta = mergeDocMeta;
36
+ exports.renderDocMetaHead = renderDocMetaHead;
37
+ exports.renderDocMetaIsland = renderDocMetaIsland;
38
+ exports.parseDocMetaIsland = parseDocMetaIsland;
39
+ const nyml_blocks_js_1 = require("./nyml-blocks.js");
40
+ /** The `kind:` value that marks a metadata block. */
41
+ exports.DOC_META_KIND = 'meta';
42
+ /** The id of the emitted JSON island (a host's reliable read-back channel). */
43
+ exports.DOC_META_ISLAND_ID = 'orz-meta';
44
+ /** MIME type of the JSON island. Distinct from the `nyml-data` script. */
45
+ exports.DOC_META_ISLAND_TYPE = 'application/orz-meta+json';
46
+ function isEmpty(meta) {
47
+ return (!meta.title &&
48
+ !meta.author &&
49
+ !meta.description &&
50
+ !meta.source &&
51
+ !meta.date &&
52
+ !meta.license?.spdx &&
53
+ !meta.license?.name &&
54
+ !meta.license?.url &&
55
+ !(meta.keywords && meta.keywords.length));
56
+ }
57
+ /** Split `a, b , c` into `['a','b','c']`, dropping blanks. */
58
+ function splitList(value) {
59
+ return value
60
+ .split(',')
61
+ .map((s) => s.trim())
62
+ .filter(Boolean);
63
+ }
64
+ /**
65
+ * Read the FIRST `kind: meta` nyml block out of a source and remove it.
66
+ *
67
+ * Removal is not cosmetic. The nyml plugin renders every block to a
68
+ * `<script type="application/json" id="nyml-data">` with a FIXED id — leaving a
69
+ * meta block in the body would emit a second element with a duplicate id. And
70
+ * metadata belongs in `<head>`, not in the rendered body.
71
+ *
72
+ * Returns the parsed metadata (empty when there is no such block) and the body
73
+ * with the block spliced out. Any other nyml block is left untouched.
74
+ */
75
+ function extractDocMeta(source) {
76
+ const block = (0, nyml_blocks_js_1.scanNymlBlocks)(source).find((b) => b.kind === exports.DOC_META_KIND);
77
+ if (!block)
78
+ return { meta: {}, body: source };
79
+ const f = block.fields;
80
+ const license = {};
81
+ if (f['license'])
82
+ license.spdx = f['license'];
83
+ if (f['license_name'])
84
+ license.name = f['license_name'];
85
+ // nyml keys are `[A-Za-z0-9_]+`, so `license-url` cannot be a key. Accept the
86
+ // snake_case spelling the grammar actually permits.
87
+ if (f['license_url'])
88
+ license.url = f['license_url'];
89
+ const meta = {};
90
+ if (f['title'])
91
+ meta.title = f['title'];
92
+ if (f['author'])
93
+ meta.author = f['author'];
94
+ if (f['description'])
95
+ meta.description = f['description'];
96
+ if (f['source'])
97
+ meta.source = f['source'];
98
+ if (f['date'])
99
+ meta.date = f['date'];
100
+ if (f['keywords'])
101
+ meta.keywords = splitList(f['keywords']);
102
+ if (license.spdx || license.name || license.url)
103
+ meta.license = license;
104
+ // Splice the block out, then collapse the blank lines it leaves behind so a
105
+ // leading meta block does not push the document down by two lines.
106
+ const body = (source.slice(0, block.start) + source.slice(block.end)).replace(/^\s*\n+/, '');
107
+ return { meta, body };
108
+ }
109
+ /**
110
+ * Merge source-declared metadata with host-injected metadata. The HOST wins,
111
+ * field by field; unset host fields fall through to the source.
112
+ */
113
+ function mergeDocMeta(fromSource, fromHost) {
114
+ if (!fromHost)
115
+ return fromSource;
116
+ const license = {
117
+ ...(fromSource.license ?? {}),
118
+ ...(fromHost.license ?? {}),
119
+ };
120
+ const merged = {
121
+ ...fromSource,
122
+ ...Object.fromEntries(Object.entries(fromHost).filter(([, v]) => v !== undefined)),
123
+ };
124
+ if (license.spdx || license.name || license.url)
125
+ merged.license = license;
126
+ return merged;
127
+ }
128
+ function escapeAttr(value) {
129
+ return value
130
+ .replace(/&/g, '&amp;')
131
+ .replace(/</g, '&lt;')
132
+ .replace(/>/g, '&gt;')
133
+ .replace(/"/g, '&quot;');
134
+ }
135
+ /**
136
+ * `<head>` tags for the metadata. Emitted by each tool's `buildHtml`.
137
+ *
138
+ * `<link rel="license">` is the machine-readable channel search engines and
139
+ * reuse tooling look for. Nothing here asserts a copyright — a document under a
140
+ * public-domain dedication (CC0) must not carry a "©" claim, and this function
141
+ * therefore never emits one. A visible notice, if a tool ever adds one, has to
142
+ * make that distinction itself.
143
+ */
144
+ function renderDocMetaHead(meta) {
145
+ if (isEmpty(meta))
146
+ return '';
147
+ const tags = [];
148
+ if (meta.author)
149
+ tags.push(`<meta name="author" content="${escapeAttr(meta.author)}">`);
150
+ if (meta.description) {
151
+ tags.push(`<meta name="description" content="${escapeAttr(meta.description)}">`);
152
+ }
153
+ if (meta.keywords?.length) {
154
+ tags.push(`<meta name="keywords" content="${escapeAttr(meta.keywords.join(', '))}">`);
155
+ }
156
+ if (meta.date)
157
+ tags.push(`<meta name="dcterms.date" content="${escapeAttr(meta.date)}">`);
158
+ if (meta.license?.url) {
159
+ tags.push(`<link rel="license" href="${escapeAttr(meta.license.url)}">`);
160
+ }
161
+ if (meta.license?.spdx) {
162
+ tags.push(`<meta name="dcterms.license" content="${escapeAttr(meta.license.spdx)}">`);
163
+ }
164
+ if (meta.source)
165
+ tags.push(`<link rel="canonical" href="${escapeAttr(meta.source)}">`);
166
+ return tags.join('\n');
167
+ }
168
+ /**
169
+ * The full metadata as a JSON island, for a host or tool to read back.
170
+ * `serializeDoc()` never touches it, so it survives in-file edits.
171
+ */
172
+ function renderDocMetaIsland(meta) {
173
+ if (isEmpty(meta))
174
+ return '';
175
+ const json = JSON.stringify(meta, null, 2).replace(/<\/script>/gi, '<\\/script>');
176
+ return `<script type="${exports.DOC_META_ISLAND_TYPE}" id="${exports.DOC_META_ISLAND_ID}">\n${json}\n</script>`;
177
+ }
178
+ /** Read the island back out of a built document (host-side helper). */
179
+ function parseDocMetaIsland(html) {
180
+ const re = new RegExp(`<script[^>]*id="${exports.DOC_META_ISLAND_ID}"[^>]*>([\\s\\S]*?)</script>`, 'i');
181
+ const m = re.exec(html);
182
+ if (!m)
183
+ return null;
184
+ try {
185
+ return JSON.parse(m[1]);
186
+ }
187
+ catch {
188
+ return null;
189
+ }
190
+ }
191
+ //# sourceMappingURL=doc-meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-meta.js","sourceRoot":"","sources":["../src/doc-meta.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -16,4 +16,6 @@ export { prepareSources } from './prepare-sources.js';
16
16
  declare const md: MarkdownIt;
17
17
  export default md;
18
18
  export { md };
19
+ export * from './doc-meta.js';
20
+ export * from './nyml-blocks.js';
19
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAC9B,OAAO,UAAU,MAAM,aAAa,CAAC;AAkBrC,OAAO,mBAAmB,CAAC;AAC3B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,mBAAmB,CAAC;AAC3B,OAAO,mBAAmB,CAAC;AAE3B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,QAAA,MAAM,EAAE,YAMN,CAAC;AAsIH,eAAe,EAAE,CAAC;AAClB,OAAO,EAAE,EAAE,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAC9B,OAAO,UAAU,MAAM,aAAa,CAAC;AAkBrC,OAAO,mBAAmB,CAAC;AAC3B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,mBAAmB,CAAC;AAC3B,OAAO,mBAAmB,CAAC;AAE3B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,QAAA,MAAM,EAAE,YAMN,CAAC;AAsIH,eAAe,EAAE,CAAC;AAClB,OAAO,EAAE,EAAE,EAAE,CAAC;AAId,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,18 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
18
  };
@@ -161,4 +175,8 @@ md.renderer.rules['plugin_inline'] = (tokens, idx, _options, env) => {
161
175
  return def.render(args, token.content || null, env);
162
176
  };
163
177
  exports.default = md;
178
+ // Document metadata (license, author, …) for the self-contained formats. The
179
+ // one implementation shared by orz-mdhtml / orz-slides / orz-paged.
180
+ __exportStar(require("./doc-meta.js"), exports);
181
+ __exportStar(require("./nyml-blocks.js"), exports);
164
182
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Generic `{{nyml … }}` block scanner.
3
+ *
4
+ * Finds every nyml block in a source, parses its YAML-ish `key: value` body
5
+ * (including `key: |` multiline blocks), reads the `kind:` discriminator, and
6
+ * reports char offsets so a caller can splice the block out or replace it.
7
+ *
8
+ * Hoisted here from orz-paged (`src/doc/nyml.ts`, 2026-07-10) so that every
9
+ * orz-family tool can read block metadata from a source without reimplementing
10
+ * the grammar. orz-paged now imports it; `doc-meta.ts` builds on it. Values are
11
+ * always strings: surrounding quotes are stripped, multiline `|` blocks are
12
+ * dedented and joined with `\n`. Only the first `}}` terminates a block, so `}`
13
+ * may appear inside the body.
14
+ */
15
+ /** One scanned `{{nyml … }}` block: its kind, parsed fields, and char range. */
16
+ export interface NymlBlock {
17
+ /** The `kind:` value (e.g. `'document'`, `'element'`), or `''` if absent. */
18
+ kind: string;
19
+ /** snake_case field → raw string value (multiline values preserved). */
20
+ fields: Record<string, string>;
21
+ /** Offset of the opening `{` of `{{nyml` in `source`. */
22
+ start: number;
23
+ /** Offset just past the closing `}}` (so `source.slice(start, end)` is the block). */
24
+ end: number;
25
+ }
26
+ /**
27
+ * Scan a source for every `{{nyml … }}` block, in document order. Each result
28
+ * carries its parsed `kind`, `fields`, and `[start, end)` char offsets. Blocks
29
+ * inside an HTML comment (`<!-- … -->`) are skipped — so a commented-out element
30
+ * (e.g. content the editor's template picker preserves) does not render.
31
+ */
32
+ export declare function scanNymlBlocks(source: string): NymlBlock[];
33
+ //# sourceMappingURL=nyml-blocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nyml-blocks.d.ts","sourceRoot":"","sources":["../src/nyml-blocks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,gFAAgF;AAChF,MAAM,WAAW,SAAS;IACxB,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,sFAAsF;IACtF,GAAG,EAAE,MAAM,CAAC;CACb;AAmGD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CAuB1D"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ /**
3
+ * Generic `{{nyml … }}` block scanner.
4
+ *
5
+ * Finds every nyml block in a source, parses its YAML-ish `key: value` body
6
+ * (including `key: |` multiline blocks), reads the `kind:` discriminator, and
7
+ * reports char offsets so a caller can splice the block out or replace it.
8
+ *
9
+ * Hoisted here from orz-paged (`src/doc/nyml.ts`, 2026-07-10) so that every
10
+ * orz-family tool can read block metadata from a source without reimplementing
11
+ * the grammar. orz-paged now imports it; `doc-meta.ts` builds on it. Values are
12
+ * always strings: surrounding quotes are stripped, multiline `|` blocks are
13
+ * dedented and joined with `\n`. Only the first `}}` terminates a block, so `}`
14
+ * may appear inside the body.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.scanNymlBlocks = scanNymlBlocks;
18
+ const OPEN = '{{nyml';
19
+ /** Find the index of the `}}` that closes a `{{nyml` opened at/after `from`. */
20
+ function findClosing(source, from) {
21
+ for (let i = from; i < source.length - 1; i++) {
22
+ if (source[i] === '}' && source[i + 1] === '}')
23
+ return i;
24
+ }
25
+ return -1;
26
+ }
27
+ /** Strip a single pair of matching surrounding quotes, if present. */
28
+ function stripQuotes(s) {
29
+ if (s.length >= 2) {
30
+ const first = s[0];
31
+ const last = s[s.length - 1];
32
+ if ((first === '"' && last === '"') || (first === "'" && last === "'")) {
33
+ return s.slice(1, -1);
34
+ }
35
+ }
36
+ return s;
37
+ }
38
+ /**
39
+ * Parse a nyml body into a flat `key: value` map plus its `kind`. Supports
40
+ * `key: |` multiline blocks: subsequent lines indented more than the key are
41
+ * dedented (block style) and joined with `\n`. The `kind:` line populates
42
+ * `kind` rather than `fields`.
43
+ */
44
+ function parseBody(inner) {
45
+ const fields = {};
46
+ let kind = '';
47
+ const lines = inner.split('\n');
48
+ let i = 0;
49
+ while (i < lines.length) {
50
+ const line = lines[i];
51
+ const m = /^(\s*)([A-Za-z0-9_]+)\s*:\s?(.*)$/.exec(line);
52
+ if (!m) {
53
+ i++;
54
+ continue;
55
+ }
56
+ const indent = m[1].length;
57
+ const key = m[2];
58
+ const value = m[3];
59
+ if (value.trim() === '|') {
60
+ // Multiline block: gather following lines indented more than this key.
61
+ const collected = [];
62
+ let blockIndent = -1;
63
+ i++;
64
+ while (i < lines.length) {
65
+ const next = lines[i];
66
+ if (next.trim() === '') {
67
+ collected.push('');
68
+ i++;
69
+ continue;
70
+ }
71
+ const nextIndent = next.match(/^[ \t]*/)?.[0].length ?? 0;
72
+ if (nextIndent <= indent)
73
+ break;
74
+ if (blockIndent === -1)
75
+ blockIndent = nextIndent;
76
+ collected.push(next.slice(Math.min(blockIndent, nextIndent)));
77
+ i++;
78
+ }
79
+ while (collected.length && collected[collected.length - 1] === '') {
80
+ collected.pop();
81
+ }
82
+ const joined = collected.join('\n');
83
+ if (key === 'kind')
84
+ kind = joined.trim();
85
+ else
86
+ fields[key] = joined;
87
+ continue;
88
+ }
89
+ const v = stripQuotes(value.trim());
90
+ if (key === 'kind')
91
+ kind = v;
92
+ else
93
+ fields[key] = v;
94
+ i++;
95
+ }
96
+ return { kind, fields };
97
+ }
98
+ /** Char ranges `[start, end)` covered by HTML comments `<!-- … -->`. */
99
+ function commentRanges(source) {
100
+ const ranges = [];
101
+ let i = 0;
102
+ while (true) {
103
+ const open = source.indexOf('<!--', i);
104
+ if (open === -1)
105
+ break;
106
+ const close = source.indexOf('-->', open + 4);
107
+ if (close === -1) {
108
+ ranges.push([open, source.length]);
109
+ break;
110
+ } // unclosed → to end
111
+ ranges.push([open, close + 3]);
112
+ i = close + 3;
113
+ }
114
+ return ranges;
115
+ }
116
+ /**
117
+ * Scan a source for every `{{nyml … }}` block, in document order. Each result
118
+ * carries its parsed `kind`, `fields`, and `[start, end)` char offsets. Blocks
119
+ * inside an HTML comment (`<!-- … -->`) are skipped — so a commented-out element
120
+ * (e.g. content the editor's template picker preserves) does not render.
121
+ */
122
+ function scanNymlBlocks(source) {
123
+ const out = [];
124
+ const comments = commentRanges(source);
125
+ const inComment = (pos) => comments.some(([a, b]) => pos >= a && pos < b);
126
+ let searchFrom = 0;
127
+ while (searchFrom < source.length) {
128
+ const open = source.indexOf(OPEN, searchFrom);
129
+ if (open === -1)
130
+ break;
131
+ const close = findClosing(source, open + OPEN.length);
132
+ if (close === -1)
133
+ break;
134
+ if (!inComment(open)) {
135
+ const inner = source.slice(open + OPEN.length, close);
136
+ const { kind, fields } = parseBody(inner);
137
+ out.push({ kind, fields, start: open, end: close + 2 });
138
+ }
139
+ searchFrom = close + 2;
140
+ }
141
+ return out;
142
+ }
143
+ //# sourceMappingURL=nyml-blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nyml-blocks.js","sourceRoot":"","sources":["../src/nyml-blocks.ts"],"names":[],"mappings":"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"}
@@ -74,6 +74,21 @@ The runtime also provides **copy-as-Markdown**: with it loaded, copying a select
74
74
 
75
75
  > **Do not strip `data-md` attributes.** `mermaid`, `smiles`, `qrcode`, `youtube`, and `chart` output carry a `data-md` breadcrumb so copy recovers their source after client-side rendering (e.g. a copied QR yields `{{qr ...}}`, not its SVG). Preserve these attributes if you post-process the HTML.
76
76
 
77
+ ### Portable document metadata
78
+
79
+ The self-contained family shares `DocMeta` from `orz-markdown/doc-meta`:
80
+ `title`, `author`, `description`, `license` (`spdx`, `name`, `url`), `source`,
81
+ `date`, and `keywords`. In mdhtml and paged source, authors may provide a
82
+ `{{nyml kind: meta ...}}` block. The builder consumes that block and emits
83
+ standard `<head>` metadata plus a machine-readable `#orz-meta` JSON island;
84
+ those emitted records survive later in-browser saves and framework updates.
85
+ Host-injected metadata wins field by field. Slides use deck `title:` and
86
+ `author:` as their source metadata and accept the same host override.
87
+
88
+ Use `extractDocMeta`, `mergeDocMeta`, `renderDocMetaHead`,
89
+ `renderDocMetaIsland`, and `parseDocMetaIsland` from
90
+ `orz-markdown/doc-meta`; do not create a second metadata grammar in a host app.
91
+
77
92
  ---
78
93
 
79
94
  ## Themes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orz-markdown",
3
- "version": "1.3.2",
3
+ "version": "1.4.1",
4
4
  "description": "Customized markdown-it parser with official and custom plugins",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -8,7 +8,8 @@
8
8
  ".": "./dist/index.js",
9
9
  "./runtime": "./dist/runtime.js",
10
10
  "./preview-frame": "./dist/preview-frame.js",
11
- "./themes/*": "./themes/*"
11
+ "./themes/*": "./themes/*",
12
+ "./doc-meta": "./dist/doc-meta.js"
12
13
  },
13
14
  "files": [
14
15
  "dist",
@@ -45,7 +46,7 @@
45
46
  "dependencies": {
46
47
  "@traptitech/markdown-it-katex": "^3.6.0",
47
48
  "katex": "^0.16.35",
48
- "markdown-it": "^14.1.1",
49
+ "markdown-it": "^14.3.0",
49
50
  "markdown-it-anchor": "^9.2.0",
50
51
  "markdown-it-container": "^4.0.0",
51
52
  "markdown-it-footnote": "^4.0.0",
@@ -65,11 +66,11 @@
65
66
  "@types/markdown-it-footnote": "^3.0.4",
66
67
  "@types/node": "^25.3.5",
67
68
  "@types/qrcode-svg": "^1.1.5",
68
- "esbuild": "^0.21.5",
69
- "happy-dom": "^15.11.0",
69
+ "esbuild": "^0.28.1",
70
+ "happy-dom": "^20.10.6",
70
71
  "path-browserify": "^1.0.1",
71
- "tsx": "^4.21.0",
72
+ "tsx": "^4.22.4",
72
73
  "typescript": "^5.9.3",
73
- "vitest": "^4.0.18"
74
+ "vitest": "^4.1.10"
74
75
  }
75
76
  }