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 +31 -0
- package/dist/doc-meta.d.ts +97 -0
- package/dist/doc-meta.d.ts.map +1 -0
- package/dist/doc-meta.js +191 -0
- package/dist/doc-meta.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -1
- package/dist/nyml-blocks.d.ts +33 -0
- package/dist/nyml-blocks.d.ts.map +1 -0
- package/dist/nyml-blocks.js +143 -0
- package/dist/nyml-blocks.js.map +1 -0
- package/orz-markdown-skills/SKILL.md +15 -0
- package/package.json +8 -7
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"}
|
package/dist/doc-meta.js
ADDED
|
@@ -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, '&')
|
|
131
|
+
.replace(/</g, '<')
|
|
132
|
+
.replace(/>/g, '>')
|
|
133
|
+
.replace(/"/g, '"');
|
|
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
package/dist/index.d.ts.map
CHANGED
|
@@ -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":"
|
|
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
|
+
"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.
|
|
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.
|
|
69
|
-
"happy-dom": "^
|
|
69
|
+
"esbuild": "^0.28.1",
|
|
70
|
+
"happy-dom": "^20.10.6",
|
|
70
71
|
"path-browserify": "^1.0.1",
|
|
71
|
-
"tsx": "^4.
|
|
72
|
+
"tsx": "^4.22.4",
|
|
72
73
|
"typescript": "^5.9.3",
|
|
73
|
-
"vitest": "^4.
|
|
74
|
+
"vitest": "^4.1.10"
|
|
74
75
|
}
|
|
75
76
|
}
|