@heroiclands/package-build 25.1.3 → 25.2.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/CHANGELOG.md +36 -0
- package/assets/styles/content-base.css +0 -9
- package/bin/content-commands.mjs +22 -16
- package/bin/package-build.mjs +24 -25
- package/content-config.mjs +7 -34
- package/docs/api.md +38 -21
- package/docs/authoring/first-note.md +3 -3
- package/docs/authoring/frontmatter.md +30 -2
- package/docs/authoring/links-and-markup.md +92 -31
- package/docs/commands.md +103 -59
- package/docs/configuration.md +10 -45
- package/docs/content-format.md +8 -6
- package/docs/diagnostics.md +75 -0
- package/docs/guides/book.md +3 -3
- package/docs/guides/module-project.md +1 -1
- package/docs/guides/reference-pages.md +7 -3
- package/docs/project-setup.md +3 -0
- package/docs/reference/format-details.md +299 -185
- package/docs/reference/note-types.md +16 -17
- package/docs/source-preview.md +2 -1
- package/engine/changelog-group.mjs +84 -173
- package/engine/changelog-labels.mjs +73 -0
- package/engine/changelog-lint.mjs +168 -44
- package/engine/content-expand.mjs +58 -38
- package/engine/content-format.yaml +0 -2
- package/engine/content-index.mjs +49 -23
- package/engine/content-links.mjs +4 -0
- package/engine/content-lint.mjs +2 -3
- package/engine/content-render.mjs +6 -2
- package/engine/culture-parents.mjs +1 -1
- package/engine/culture-reach.mjs +10 -1
- package/engine/diagnostics.mjs +3 -2
- package/engine/dictionary-rows.mjs +3 -1
- package/engine/first-use.mjs +301 -87
- package/engine/frontmatter-lint.mjs +40 -14
- package/engine/glossary-entries.mjs +5 -5
- package/engine/glossary-language.mjs +21 -44
- package/engine/homepage.mjs +0 -4
- package/engine/index-records.mjs +3 -1
- package/engine/infobox.mjs +6 -3
- package/engine/journals.mjs +14 -14
- package/engine/language-names.mjs +3 -2
- package/engine/language-rows.mjs +6 -7
- package/engine/lexical-sections.mjs +3 -1
- package/engine/literature-notes.mjs +4 -76
- package/engine/metadata-index.mjs +15 -8
- package/engine/name-forms.mjs +99 -0
- package/engine/name-refs.mjs +143 -0
- package/engine/name-rows.mjs +11 -1
- package/engine/names.mjs +27 -22
- package/engine/note-addresses.mjs +0 -3
- package/engine/note-frontmatter.mjs +3 -5
- package/engine/note-language.mjs +348 -0
- package/engine/note-vocabulary.mjs +13 -11
- package/engine/pdf-index.mjs +3 -2
- package/engine/pdf-render.mjs +2 -4
- package/engine/preview-source.mjs +15 -8
- package/engine/settlement-tables.mjs +4 -3
- package/engine/site-build.mjs +2 -7
- package/engine/site-search.mjs +3 -5
- package/engine/site-theme.mjs +1 -1
- package/engine/sql-tables.mjs +29 -14
- package/engine/wikilink-syntax.mjs +2 -0
- package/engine/word-citations.mjs +3 -3
- package/engine/word-rows.mjs +3 -1
- package/engine/word-terms.mjs +2 -2
- package/package.json +1 -1
- package/site-theme/static/css/style.css +0 -4
- package/types/engine/changelog-group.d.mts +6 -10
- package/types/engine/changelog-labels.d.mts +10 -0
- package/types/engine/changelog-lint.d.mts +11 -6
- package/types/engine/content-index.d.mts +16 -16
- package/types/engine/diagnostics.d.mts +1 -1
- package/types/engine/first-use.d.mts +97 -1
- package/types/engine/frontmatter-lint.d.mts +9 -2
- package/types/engine/glossary-language.d.mts +13 -6
- package/types/engine/homepage.d.mts +0 -3
- package/types/engine/journals.d.mts +3 -3
- package/types/engine/literature-notes.d.mts +2 -27
- package/types/engine/name-forms.d.mts +61 -0
- package/types/engine/name-refs.d.mts +51 -0
- package/types/engine/name-rows.d.mts +4 -0
- package/types/engine/names.d.mts +12 -92
- package/types/engine/note-frontmatter.d.mts +1 -4
- package/types/engine/note-language.d.mts +47 -0
- package/types/engine/settlement-tables.d.mts +1 -1
- package/types/engine/site-build.d.mts +2 -6
|
@@ -15,7 +15,7 @@ An Address names content independently of its filename or folder. Its full form
|
|
|
15
15
|
![[icon-harbor|Harbor emblem]]{float=top-left size=medium}
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
The part after `|` is the displayed link text or an embed's alternative text. An empty label uses the target's current name in a regular link and marks an embed decorative. A missing pipe is an error. Search may use `name.full` and
|
|
18
|
+
The part after `|` is the displayed link text or an embed's alternative text. An empty label uses the target's current name in a regular link and marks an embed decorative. A missing pipe is an error. Search may use `name.full` and the forms a note's `name` lists; authored links use Addresses. The [Address reference](../reference/format-details.md#addresses) explains short forms, package qualification, and ambiguity diagnostics.
|
|
19
19
|
|
|
20
20
|
A link to a note tagged `draft` retains its target and carries a visible draft cue. In a book, the cue reads `(draft)` after the link.
|
|
21
21
|
|
|
@@ -61,19 +61,19 @@ destination; see [inline spoilers](#inline-spoilers).
|
|
|
61
61
|
|
|
62
62
|
## Marking names in prose
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
name
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
Mark a name with a link or a `.name` span. Link a name that has a note,
|
|
65
|
+
including a private subject, and add `.name` to the wikilink so it counts as
|
|
66
|
+
the name: `[[place-arden|Arden Vale]]{.name}`. An empty link label uses the
|
|
67
|
+
indexed full name. Use `[Name]{.name}` for a name that has no indexed note.
|
|
68
|
+
Keep the note's own subject in plain text. Plain text, including capitalized
|
|
69
|
+
words, is not searched for names.
|
|
70
70
|
|
|
71
71
|
Inside a language run, a `.name` child contributes `{` + its text + `}` to the
|
|
72
72
|
chosen encoding. Write `[Name]{.name}` in Markdown; the build supplies the
|
|
73
73
|
standard name boundaries.
|
|
74
74
|
|
|
75
75
|
```markdown
|
|
76
|
-
[[place-arden|Arden Vale]] stands beside the river. Arden Vale has two gates.
|
|
76
|
+
[[place-arden|Arden Vale]]{.name} stands beside the river. Arden Vale has two gates.
|
|
77
77
|
[Hidden Hand]{.name} keeps watch over the crossing.
|
|
78
78
|
```
|
|
79
79
|
|
|
@@ -93,21 +93,73 @@ takes only the bare type. An invalid supplied value is an error at the
|
|
|
93
93
|
attribute. Site and Foundry spans retain the classes and attribute values;
|
|
94
94
|
the attribute adds no book presentation.
|
|
95
95
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
96
|
+
A `ref` ties each spelling of a person, place or thing to the one note that
|
|
97
|
+
describes it, without linking it. The address implies the type, so `data-type`
|
|
98
|
+
is only for a name with no note:
|
|
99
|
+
|
|
100
|
+
```markdown
|
|
101
|
+
[Tom Rodriguez]{.name ref=being-tomr} met [Tom]{.name ref=being-tomr} again.
|
|
102
|
+
[Tom]{.name ref=sohl-note-being-tomr}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
The value is a note address: this package's (`being-tomr`) or a declared
|
|
106
|
+
dependency's, written with its package prefix (`sohl-note-being-tomr`). A
|
|
107
|
+
`ref` is not a link, so the span stays plain text and the page links the note
|
|
108
|
+
once, with a wikilink, wherever the author chooses. A `ref` span names the note
|
|
109
|
+
however it is spelled, so it draws no warning to link the name, and it shares
|
|
110
|
+
the note's key for the [first-use bold](#the-first-use-is-bold).
|
|
111
|
+
A `ref` that resolves to no note is an error at its value. `data-type` beside
|
|
112
|
+
`ref` is an error at `data-type`, and `ref` on a span without `.name` is an
|
|
113
|
+
error at `ref`. A wikilink never takes `ref`, because its address is its ref.
|
|
114
|
+
Use `#id` for the HTML anchor only; it is never a ref.
|
|
115
|
+
|
|
116
|
+
A subject with no note takes a page-local key instead, written with a leading
|
|
117
|
+
`#` and quoted when it stands alone as a value:
|
|
118
|
+
|
|
119
|
+
```markdown
|
|
120
|
+
[Jane Doe]{.name ref="#jane"} arrives. [Miss Gorgeous]{.name ref="#jane"} is Jane.
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The key ties _Jane Doe_ and _Miss Gorgeous_ to one person within the page. It
|
|
124
|
+
resolves to no note and is never a finding for that reason. It is the
|
|
125
|
+
attribute's value, never the span's `{#id}` anchor.
|
|
126
|
+
|
|
127
|
+
### The first use is bold
|
|
128
|
+
|
|
129
|
+
The first use of each name in a page is bold when the page renders, on the
|
|
130
|
+
website, in the Foundry journal and in the book, and every later use reads as
|
|
131
|
+
plain text. Bold an author writes is the author's choice.
|
|
132
|
+
|
|
133
|
+
Each use of a name is counted under a key:
|
|
134
|
+
|
|
135
|
+
- a name wikilink, `[[place-harbor|the harbor]]{.name}`, under its address;
|
|
136
|
+
- a `.name` span with a `ref`, under the `ref`, whether an address or a
|
|
137
|
+
page-local `#key`;
|
|
138
|
+
- any other `.name` span under its label, ignoring case, and its `lang`, which
|
|
139
|
+
is `en` when the span states none.
|
|
140
|
+
|
|
141
|
+
Every spelling of one address is one key, so `[[place-arden|the vale]]{.name}`
|
|
142
|
+
and `[Vale]{.name ref=place-arden}` are one name. A `ref` is how a full name,
|
|
143
|
+
a short name and a nickname become one name:
|
|
144
|
+
|
|
145
|
+
```markdown
|
|
146
|
+
[Jane Doe]{.name ref="#jane"} keeps the ferry to [[place-harbor|the harbor]]{.name}.
|
|
147
|
+
[Jane]{.name ref="#jane"} rows it alone, and the river folk call her
|
|
148
|
+
[Miss Gorgeous]{.name ref="#jane"}. [Old Tam]{.name} mends the nets at
|
|
149
|
+
[[place-harbor|the harbor]]{.name}, and [old tam]{.name} sells them.
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Here _Jane Doe_, the first _the harbor_ and _Old Tam_ are bold. _Jane_ and
|
|
153
|
+
_Miss Gorgeous_ share _Jane Doe_'s key, the second _the harbor_ shares the
|
|
154
|
+
first's address, and _old tam_ is _Old Tam_ in another case.
|
|
155
|
+
|
|
156
|
+
Only body prose counts, in the order it is written: paragraphs, list items,
|
|
157
|
+
quotations and footnotes. A name in a heading, a table, a caption, raw HTML,
|
|
158
|
+
code or verse, in the sections the build generates from frontmatter, or inside
|
|
159
|
+
a run that states `lang`, `font` or `enc` neither takes the bold nor counts, so
|
|
160
|
+
the first use in the prose after a heading or table that names someone is
|
|
161
|
+
still bold. A wikilink without `.name` is a link, not a name: it takes no bold
|
|
162
|
+
and does not count.
|
|
111
163
|
|
|
112
164
|
A name span can sit inside emphasis:
|
|
113
165
|
|
|
@@ -115,12 +167,22 @@ A name span can sit inside emphasis:
|
|
|
115
167
|
**This is a phrase with [Joe Blow]{.name} in it**
|
|
116
168
|
```
|
|
117
169
|
|
|
118
|
-
The marked name is `Joe Blow`.
|
|
119
|
-
|
|
170
|
+
The marked name is `Joe Blow`. A name inside authored bold counts as that
|
|
171
|
+
name's first use and takes no second bold. Bold itself is never a name: a bold
|
|
120
172
|
label such as `**Strength**:` draws no warning, whatever names the index holds.
|
|
121
173
|
|
|
122
|
-
|
|
123
|
-
|
|
174
|
+
### What lint reports
|
|
175
|
+
|
|
176
|
+
`package-build lint` warns when an indexed name or listed form uses a `.name`
|
|
177
|
+
span with no `ref`, which a link or a `ref` ties to its note. A `.name` span
|
|
178
|
+
with a `data-type` is compared only with notes of that type (and subtype, when
|
|
179
|
+
it names one), so a lineage that shares its name with a place note is marked
|
|
180
|
+
`[Theinuvael]{.name data-type="affiliation/lineage"}` and draws no warning to
|
|
181
|
+
link the place. Names match whatever their case, so `[arden]{.name}` names the
|
|
182
|
+
same note as `[Arden]{.name}`.
|
|
183
|
+
|
|
184
|
+
This is a warning at each occurrence's `file:line:column`; it does not make a
|
|
185
|
+
valid package fail. The check reads authored prose outside headings,
|
|
124
186
|
tables, infoboxes, code, frontmatter, comments and embeds. See the
|
|
125
187
|
[complete name-marking rules](../reference/format-details.md#marking-names-in-prose).
|
|
126
188
|
|
|
@@ -130,7 +192,7 @@ its visible text, optional type/subtype and source location. Plain prose, bold,
|
|
|
130
192
|
unmarked link labels and generated content add no rows.
|
|
131
193
|
|
|
132
194
|
Lint also gives one grouped package advisory for names without a matching
|
|
133
|
-
indexed full name or
|
|
195
|
+
indexed full name or listed form, and for conflicting supplied classifications. It
|
|
134
196
|
lists every use and starts at the earliest reported span. Untyped uses do not
|
|
135
197
|
conflict, and `place` agrees with `place/settlement`; different supplied types
|
|
136
198
|
or different supplied subtypes conflict. These advisories do not fail lint.
|
|
@@ -267,7 +329,7 @@ hover the span or focus it with the keyboard to reveal its text, links and
|
|
|
267
329
|
images. A visible focus outline and a spoiler cue identify the interaction.
|
|
268
330
|
This does not change native Foundry secret-section controls. The book ignores
|
|
269
331
|
`.secret` on inline spans and prints their text normally, preserving emphasis,
|
|
270
|
-
links, anchors and
|
|
332
|
+
links, anchors and a name's first-use bold. Secret sections and `:::secret` fences
|
|
271
333
|
retain their visible labelled boxes.
|
|
272
334
|
|
|
273
335
|
Published web HTML contains the spoiler's text. Revealing the spoiler or reading
|
|
@@ -1967,8 +2029,7 @@ printing a sense several bodies give once, with all of them:
|
|
|
1967
2029
|
|
|
1968
2030
|
The layout orders entries by letter, then by `name_sort`. **The language tag
|
|
1969
2031
|
prints where the entry's language is not the page's own**: a language note's
|
|
1970
|
-
own language,
|
|
1971
|
-
glossary resolves to. It is the language note's `data.abbreviation`, or its
|
|
2032
|
+
own language, or the note of any other note's [language](../reference/format-details.md#a-notes-language). It is the language note's `data.abbreviation`, or its
|
|
1972
2033
|
full name where unstated. Etymology never repeats the entry's own language:
|
|
1973
2034
|
a borrowed word prints `[fr. Élav. _sólmerë_]`, a built word its pieces each
|
|
1974
2035
|
with its gloss, `[_am-_ "love" + _-ère_ "one who"]`, an inherited word its
|
package/docs/commands.md
CHANGED
|
@@ -978,31 +978,52 @@ package-build changelog check [--release] [paths..]
|
|
|
978
978
|
**DESCRIPTION**
|
|
979
979
|
|
|
980
980
|
A changeset answers one question — who notices, and what do they see — and
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
981
|
+
holds one shape: one or more blocks, each a `**Label**` line on its own,
|
|
982
|
+
then bullets and nothing else. `check` refuses a lead paragraph, a bullet
|
|
983
|
+
under no label (`unlabelled`), prose between or after bullets (`stray-prose`),
|
|
984
|
+
text sharing the label's line (`label-line`), a label with no bullets
|
|
985
|
+
(`empty-block`), a nested list, a `#` heading, and a label that is neither in
|
|
986
|
+
the changelog `labels` nor `Miscellaneous` (`unknown-label`, an error naming
|
|
987
|
+
the declared labels). With no `labels` declared, only
|
|
988
|
+
`Miscellaneous` is accepted, and the finding names the option to declare.
|
|
989
|
+
|
|
990
|
+
**Labels.** A repository declares its labels, in display order, in the options
|
|
991
|
+
of the changelog entry in `.changeset/config.json`, beside the generator they
|
|
992
|
+
configure:
|
|
993
|
+
|
|
994
|
+
```json
|
|
995
|
+
"changelog": [
|
|
996
|
+
"@heroiclands/package-build/changelog",
|
|
997
|
+
{ "labels": ["Verse", "Rendering"] }
|
|
998
|
+
]
|
|
999
|
+
```
|
|
1000
|
+
|
|
1001
|
+
`Miscellaneous` is implicit: every repository has it for the changes that fit
|
|
1002
|
+
no declared label, it is never declared, and `changelog group` always writes it
|
|
1003
|
+
last. A `labels` value that is not an array of distinct non-empty strings, or
|
|
1004
|
+
that names `Miscellaneous`, stops `changelog check` and `changelog group`
|
|
1005
|
+
with an error naming `.changeset/config.json`.
|
|
1006
|
+
|
|
1007
|
+
Under the shape, a changeset that reads like a pull-request description is
|
|
1008
|
+
also refused: commit hashes, issue references, code fences, "Verified"
|
|
1009
|
+
paragraphs, byte counts and test tallies, a bullet over forty words, or too
|
|
1010
|
+
many bullets or lines for one entry. Each finding names the rule it tripped
|
|
1011
|
+
and says what to write instead.
|
|
988
1012
|
|
|
989
1013
|
Default reads every pending changeset (`.changeset/*.md`; `config.json` and
|
|
990
1014
|
`README.md` excluded) and checks each one's body, frontmatter fence dropped.
|
|
991
1015
|
`--release` reads the first `## <version>` section of `CHANGELOG.md` instead
|
|
992
|
-
— the section a **Version Packages** branch is about to publish —
|
|
993
|
-
generated `## <version>`
|
|
994
|
-
|
|
1016
|
+
— the section a **Version Packages** branch is about to publish — and holds
|
|
1017
|
+
it to the same shape. Its generated `## <version>` line is exempt, and a
|
|
1018
|
+
`### <Bump> Changes` heading that remains is an error (`changes-heading`):
|
|
1019
|
+
`changelog group` removes them.
|
|
995
1020
|
|
|
996
1021
|
A token that reads as code — `camelCase()`, a `path/with/slashes.ext`,
|
|
997
1022
|
`SCREAMING_SNAKE` — outside any code span is a warning, not a failure: a
|
|
998
1023
|
user-facing note sometimes needs one (`Compendium.hm3.items.Item.<id>`), but
|
|
999
1024
|
rarely. Accented letters keep proper names such as HârnMaster whole, so a
|
|
1000
|
-
fragment of one does not trigger a code-token warning.
|
|
1001
|
-
|
|
1002
|
-
also a warning — the drift `**Character data**` beside `**Characters**`
|
|
1003
|
-
produces — and checks nothing when the repository declares no
|
|
1004
|
-
`changelog.labels`. Every other finding is an error. Reads the files given,
|
|
1005
|
-
or resolves its own defaults; writes nothing.
|
|
1025
|
+
fragment of one does not trigger a code-token warning. Every other finding is
|
|
1026
|
+
an error. Reads the files given, or resolves its own defaults; writes nothing.
|
|
1006
1027
|
|
|
1007
1028
|
**OPTIONS**
|
|
1008
1029
|
|
|
@@ -1024,8 +1045,8 @@ package-build: 1 file(s) checked · 0 error(s) · 0 warning(s)
|
|
|
1024
1045
|
```
|
|
1025
1046
|
|
|
1026
1047
|
```
|
|
1027
|
-
$ package-build changelog check
|
|
1028
|
-
|
|
1048
|
+
$ package-build changelog check
|
|
1049
|
+
.changeset/stanza-breaks.md:5:3: error: changelog-check/unknown-label "Poems" is not a declared label — declared: Verse, Rendering; Miscellaneous is always available
|
|
1029
1050
|
package-build: 1 file(s) checked · 1 error(s) · 0 warning(s)
|
|
1030
1051
|
```
|
|
1031
1052
|
|
|
@@ -1037,8 +1058,8 @@ package-build: 1 file(s) checked · 1 error(s) · 0 warning(s)
|
|
|
1037
1058
|
|
|
1038
1059
|
**NAME**
|
|
1039
1060
|
|
|
1040
|
-
|
|
1041
|
-
|
|
1061
|
+
Give the newest release its final shape (`group` is a sibling of `check`,
|
|
1062
|
+
not one of its actions).
|
|
1042
1063
|
|
|
1043
1064
|
**SYNOPSIS**
|
|
1044
1065
|
|
|
@@ -1049,27 +1070,46 @@ package-build changelog group [paths..]
|
|
|
1049
1070
|
**DESCRIPTION**
|
|
1050
1071
|
|
|
1051
1072
|
`@heroiclands/package-build/changelog` writes each changeset's summary into
|
|
1052
|
-
`CHANGELOG.md` as its own block, verbatim, under `###
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
+
`CHANGELOG.md` as its own block, verbatim, under `### Major Changes`,
|
|
1074
|
+
`### Minor Changes` or `### Patch Changes` — one block per changeset, in
|
|
1075
|
+
whatever order Changesets read the files. `group` rewrites the first
|
|
1076
|
+
`## <version>` section of `CHANGELOG.md` in place:
|
|
1077
|
+
|
|
1078
|
+
- Every `### … Changes` heading is removed.
|
|
1079
|
+
- Blocks that share a label merge into one, bullets in file order, an exact
|
|
1080
|
+
duplicate bullet kept once.
|
|
1081
|
+
- Blocks are ordered as the `labels` in `.changeset/config.json`
|
|
1082
|
+
declare them. A label the list does not declare follows the declared ones, in the order it first appeared, each reported as a
|
|
1083
|
+
warning naming it.
|
|
1084
|
+
- `Miscellaneous` is always last, declared or not.
|
|
1085
|
+
|
|
1086
|
+
With no `labels` declared, blocks keep the order their label first
|
|
1087
|
+
appeared in, `Miscellaneous` last. Every earlier release section is untouched,
|
|
1088
|
+
byte for byte. Running `group` on its own output is a no-op.
|
|
1089
|
+
|
|
1090
|
+
For a release of three changesets, `### Major Changes` holding
|
|
1091
|
+
`**Rendering**` and `**Miscellaneous**`, `### Minor Changes` holding `**Verse**`
|
|
1092
|
+
and `**Rendering**`, and `### Patch Changes` holding `**Miscellaneous**` and
|
|
1093
|
+
`**Verse**`, with `labels` of `Verse` then `Rendering`:
|
|
1094
|
+
|
|
1095
|
+
```markdown
|
|
1096
|
+
## 2.0.0
|
|
1097
|
+
|
|
1098
|
+
**Verse**
|
|
1099
|
+
|
|
1100
|
+
- A verse fence keeps its line breaks.
|
|
1101
|
+
- A stanza break renders as a blank line.
|
|
1102
|
+
|
|
1103
|
+
**Rendering**
|
|
1104
|
+
|
|
1105
|
+
- Every page carries its section in the contents list.
|
|
1106
|
+
- The search page lists the newest notes first.
|
|
1107
|
+
|
|
1108
|
+
**Miscellaneous**
|
|
1109
|
+
|
|
1110
|
+
- The tool prints a notice when a page has no title.
|
|
1111
|
+
- An empty search no longer fails.
|
|
1112
|
+
```
|
|
1073
1113
|
|
|
1074
1114
|
**OPTIONS**
|
|
1075
1115
|
|
|
@@ -1091,14 +1131,14 @@ package-build: 1 file(s) grouped · 0 warning(s)
|
|
|
1091
1131
|
|
|
1092
1132
|
```
|
|
1093
1133
|
$ package-build changelog group
|
|
1094
|
-
CHANGELOG.md:12: warning: changelog-group/unknown-label "Scenery" is not declared in `
|
|
1134
|
+
CHANGELOG.md:12: warning: changelog-group/unknown-label "Scenery" is not declared in the changelog `labels` — filed after the declared labels, in order of first appearance
|
|
1095
1135
|
package-build: 1 file(s) grouped · 1 warning(s)
|
|
1096
1136
|
```
|
|
1097
1137
|
|
|
1098
1138
|
**SEE ALSO**
|
|
1099
1139
|
|
|
1100
1140
|
[`changelog check`](#package-build-changelog-check),
|
|
1101
|
-
[`
|
|
1141
|
+
[`.changeset/config.json` labels](#package-build-changelog-check).
|
|
1102
1142
|
|
|
1103
1143
|
### `package-build bundle check`
|
|
1104
1144
|
|
|
@@ -2223,20 +2263,23 @@ explicit empty inventory declares no written characters. External tags without
|
|
|
2223
2263
|
a language-note association retain their ordinary behavior. Standalone
|
|
2224
2264
|
`package-build markdown` does not load these inventories.
|
|
2225
2265
|
|
|
2226
|
-
Name marking is advisory: lint checks explicit `.name` spans and
|
|
2227
|
-
|
|
2228
|
-
conventions](authoring/links-and-markup.md#marking-names-in-prose).
|
|
2229
|
-
|
|
2230
|
-
dependency names,
|
|
2231
|
-
reports each affected occurrence at its exact source location. These warnings
|
|
2266
|
+
Name marking is advisory: lint checks explicit `.name` spans and name
|
|
2267
|
+
wikilinks against the [name-marking
|
|
2268
|
+
conventions](authoring/links-and-markup.md#marking-names-in-prose). It warns
|
|
2269
|
+
when a `.name` span without `ref` names an indexed note. Plain prose is not searched
|
|
2270
|
+
for names. It builds one matcher from the current local and dependency names,
|
|
2271
|
+
then reports each affected occurrence at its exact source location. These warnings
|
|
2232
2272
|
also appear when `lint` is selected in `content run`; they do not fail the run.
|
|
2233
2273
|
|
|
2234
2274
|
Lint also emits one grouped package advisory for marked names without an
|
|
2235
|
-
indexed full-name or
|
|
2275
|
+
indexed full-name or listed-form match, ignoring case, and for conflicting supplied classifications.
|
|
2236
2276
|
It lists every source use and is located at the earliest reported span.
|
|
2237
2277
|
Untyped uses and compatible type/subtype refinements do not conflict.
|
|
2238
2278
|
An invalid supplied `.name` `data-type` is a located preparation error and
|
|
2239
2279
|
prevents selected writers. See the same name-marking guide for typed examples.
|
|
2280
|
+
A `.name` `ref` that resolves to no note is a located lint error at its value;
|
|
2281
|
+
a `ref` on a span without `.name`, a `ref` beside `data-type` and a malformed
|
|
2282
|
+
page-local key are located preparation errors.
|
|
2240
2283
|
|
|
2241
2284
|
Content lint computes source positions when it emits findings and shares each
|
|
2242
2285
|
note's YAML position document across consecutive lookups.
|
|
@@ -3484,17 +3527,18 @@ culture missing either, with an error at the culture note:
|
|
|
3484
3527
|
- **Its look**, from `data.appearanceProfile`: the words and ranges every
|
|
3485
3528
|
appearance field is drawn from. See
|
|
3486
3529
|
[appearance profiles](reference/format-details.md#appearance-profiles).
|
|
3487
|
-
- **Its names**, from the language
|
|
3530
|
+
- **Its names**, from the language note `languages:` names for the culture's
|
|
3531
|
+
[language](reference/format-details.md#a-notes-language), whose
|
|
3488
3532
|
`data.names` holds the pattern and the lists. A language with no
|
|
3489
3533
|
`data.names` is an error at the language note. See
|
|
3490
3534
|
[name lists](reference/format-details.md#name-lists).
|
|
3491
3535
|
|
|
3492
|
-
The content
|
|
3493
|
-
`data.appearanceProfile` before this command reads them. A child culture
|
|
3494
|
-
|
|
3495
|
-
precedence. The command consumes the resolved values and keeps the
|
|
3496
|
-
child culture on the generated note. A parent cycle or conflicting
|
|
3497
|
-
|
|
3536
|
+
The content index resolves a culture's language and its
|
|
3537
|
+
`data.appearanceProfile` before this command reads them. A child culture
|
|
3538
|
+
takes an omitted `data.lang` or profile from its `data.parents`, while a stated
|
|
3539
|
+
value keeps precedence. The command consumes the resolved values and keeps the
|
|
3540
|
+
selected child culture on the generated note. A parent cycle or conflicting
|
|
3541
|
+
inherited profiles are errors; complete fields on the selected culture do not excuse a
|
|
3498
3542
|
cycle. See [culture parents](reference/format-details.md#culture-parents-and-inherited-fields).
|
|
3499
3543
|
|
|
3500
3544
|
A profile or name lists with problems are refused with a finding at each.
|
|
@@ -3605,11 +3649,11 @@ $ package-build npc new --specfile bad.yaml
|
|
|
3605
3649
|
bad.yaml:2:9: error: name.full "Aguri ez Lut" does not fit the names of demo-note-skill-khelathilng: "Lut", the {place} part, is not in the place list
|
|
3606
3650
|
```
|
|
3607
3651
|
|
|
3608
|
-
A spec inline, for a culture
|
|
3652
|
+
A spec inline, for a culture whose language has no language note:
|
|
3609
3653
|
|
|
3610
3654
|
```
|
|
3611
3655
|
$ package-build npc new --spec '{"data":{"culture":"plainfolk","gender":"female"}}'
|
|
3612
|
-
assets/content/Cultures/Plainfolk.md:6:1: error: demo-note-lore-plainfolk
|
|
3656
|
+
assets/content/Cultures/Plainfolk.md:6:1: error: demo-note-lore-plainfolk is in en, which `languages:` names no language note for, so `npc new` has no name lists to draw from; state the culture's `data.lang` and its language's `note`
|
|
3613
3657
|
```
|
|
3614
3658
|
|
|
3615
3659
|
**SEE ALSO**
|
package/docs/configuration.md
CHANGED
|
@@ -54,7 +54,7 @@ around its own evaluation.
|
|
|
54
54
|
|
|
55
55
|
### Quick reference
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
25 top-level keys. `rootDir` is not one of them — a data configuration never
|
|
58
58
|
writes it — and is documented under [Derived values](#derived-values) instead,
|
|
59
59
|
alongside `foundryPackage`, `homepage`, `author` and `itemBuilders`, whose
|
|
60
60
|
data-configuration behaviour is also derivation rather than ordinary
|
|
@@ -86,11 +86,10 @@ authoring.
|
|
|
86
86
|
| [`requiresSystem`](#requiressystem) | string | no; refused in a `documentation` package | `null` |
|
|
87
87
|
| [`packageBuild`](#the-packagebuild-section) | object | no | `{}` |
|
|
88
88
|
| [`publish`](#publish) | object | no | `{address: {prefix: ""}}` |
|
|
89
|
-
| [`changelog`](#changelog) | object | no | `{labels: null}` |
|
|
90
89
|
|
|
91
90
|
Any key outside this list is refused:
|
|
92
91
|
|
|
93
|
-
> `` `<key>` is not a recognized option (expected one of: rootDir, contentPackage, currentDate, defaultCalendar, foundryPackage, homepage, authors, packageKind, stats, itemBuilders, paths, skipDirectories, forbidGeneratedArt, icons, languages, packs, docs, site, pdf, compatibility, relationships, systems, requiresSystem, packageBuild, publish
|
|
92
|
+
> `` `<key>` is not a recognized option (expected one of: rootDir, contentPackage, currentDate, defaultCalendar, foundryPackage, homepage, authors, packageKind, stats, itemBuilders, paths, skipDirectories, forbidGeneratedArt, icons, languages, packs, docs, site, pdf, compatibility, relationships, systems, requiresSystem, packageBuild, publish). ``
|
|
94
93
|
|
|
95
94
|
(`rootDir` appears in that list because it is a key `defineConfig` itself
|
|
96
95
|
accepts — an `.mjs` configuration authors it directly. A YAML configuration
|
|
@@ -201,7 +200,7 @@ build writes its `name` as `params.author`. `null` when `authors` is empty.
|
|
|
201
200
|
as an unknown key, at the key's own line, because `authors` is the one list a
|
|
202
201
|
package names its people in:
|
|
203
202
|
|
|
204
|
-
> ``package-build config: `author` is not a recognized option (expected one of: rootDir, contentPackage, currentDate, defaultCalendar, foundryPackage, homepage, authors, packageKind, stats, itemBuilders, paths, skipDirectories, forbidGeneratedArt, icons, languages, packs, docs, site, pdf, compatibility, relationships, systems, requiresSystem, packageBuild, publish
|
|
203
|
+
> ``package-build config: `author` is not a recognized option (expected one of: rootDir, contentPackage, currentDate, defaultCalendar, foundryPackage, homepage, authors, packageKind, stats, itemBuilders, paths, skipDirectories, forbidGeneratedArt, icons, languages, packs, docs, site, pdf, compatibility, relationships, systems, requiresSystem, packageBuild, publish).``
|
|
205
204
|
|
|
206
205
|
`package.json`'s own `author` is npm's and is not read.
|
|
207
206
|
|
|
@@ -749,7 +748,12 @@ languages:
|
|
|
749
748
|
|
|
750
749
|
**The name** is lowercase letters, digits and single hyphens, starting with a
|
|
751
750
|
letter. Lowercase is part of the rule, so no two names differ only in case. A
|
|
752
|
-
real language needs no entry: `lang=la` is read as its tag.
|
|
751
|
+
real language needs no entry: `lang=la` is read as its tag. The name is the
|
|
752
|
+
language's code everywhere a note names a language: `lang=` on a run, a note's
|
|
753
|
+
[`data.lang`](reference/format-details.md#a-notes-language), and the key a
|
|
754
|
+
note's `name` lists the language's forms under. `en` needs no entry for any of
|
|
755
|
+
these. A name may not be `full`, `sort`, `given` or `clan`, the `name` keys
|
|
756
|
+
that hold a single string.
|
|
753
757
|
|
|
754
758
|
**`tag`** is the BCP 47 tag the language's text carries. A real language takes
|
|
755
759
|
its own tag (`la`, `grc`). A constructed language takes `art-x-<name>`: `art`
|
|
@@ -1831,45 +1835,6 @@ Any other key under `publish.address` is refused:
|
|
|
1831
1835
|
|
|
1832
1836
|
> ``package-build config: `publish.address.<key>` is not a recognized option (expected one of: prefix).``
|
|
1833
1837
|
|
|
1834
|
-
### `changelog`
|
|
1835
|
-
|
|
1836
|
-
**Type:** object · **Optional**, default `{labels: null}`.
|
|
1837
|
-
|
|
1838
|
-
`changelog check` and `changelog group` both read a release block's bold
|
|
1839
|
-
label — `**Compendiums**` — against `changelog.labels`: the vocabulary and
|
|
1840
|
-
display order a repository declares for the categories its changesets group
|
|
1841
|
-
under. Declaring none is ordinary — a repository that writes plain,
|
|
1842
|
-
unlabelled changesets needs nothing here.
|
|
1843
|
-
|
|
1844
|
-
| Key | Type | Required | Default |
|
|
1845
|
-
| ------------------ | -------- | -------- | ------- |
|
|
1846
|
-
| `changelog.labels` | string[] | no | `null` |
|
|
1847
|
-
|
|
1848
|
-
> ``package-build config: `changelog` must be a mapping.``
|
|
1849
|
-
|
|
1850
|
-
> ``package-build config: `changelog.<key>` is not a recognized option (expected one of: labels).``
|
|
1851
|
-
|
|
1852
|
-
> ``package-build config: `changelog.labels` must be an array.``
|
|
1853
|
-
|
|
1854
|
-
> ``package-build config: `changelog.labels[<n>]` must be a non-empty string.``
|
|
1855
|
-
|
|
1856
|
-
A repeated label is refused rather than silently deduplicated — it could
|
|
1857
|
-
never be told apart from the drift the list exists to catch (`Compendiums`
|
|
1858
|
-
written twice swallows a genuine `Character data` beside `Characters`):
|
|
1859
|
-
|
|
1860
|
-
> ``package-build config: `changelog.labels` declares `Compendiums` more than once.``
|
|
1861
|
-
|
|
1862
|
-
With `changelog.labels` declared, `changelog group` orders a release
|
|
1863
|
-
section's blocks by that list — the unlabelled lead paragraph first, then
|
|
1864
|
-
every declared label in the order given, then any undeclared label last, in
|
|
1865
|
-
the order it first appears, each reported as a warning naming it. With no
|
|
1866
|
-
`changelog.labels` declared, `group` orders every block by first
|
|
1867
|
-
appearance, lead paragraph first, and warns about nothing. `changelog check`
|
|
1868
|
-
warns on a block whose label is not in a declared `changelog.labels`; with
|
|
1869
|
-
none declared, it checks nothing. See
|
|
1870
|
-
[`package-build changelog check`](commands.md#package-build-changelog-check)
|
|
1871
|
-
and [`package-build changelog group`](commands.md#package-build-changelog-group).
|
|
1872
|
-
|
|
1873
1838
|
---
|
|
1874
1839
|
|
|
1875
1840
|
## The `packageBuild` section
|
|
@@ -2044,7 +2009,7 @@ named first in the generated manifest's `styles`.
|
|
|
2044
2009
|
The sheet carries what every package's compiled content needs to read in
|
|
2045
2010
|
Foundry as it does in the preview and on the site: definition lists (an
|
|
2046
2011
|
infobox and the markdown `Term` / `: definition` syntax both emit one),
|
|
2047
|
-
verse, alerts, inline spoilers,
|
|
2012
|
+
verse, alerts, inline spoilers, unresolved links and
|
|
2048
2013
|
captioned blocks. It is scoped to the journal, enriched-field and editor
|
|
2049
2014
|
containers so it cannot reach Foundry's own interface, where `.name` and `dl`
|
|
2050
2015
|
style Foundry's and the system's own elements.
|
package/docs/content-format.md
CHANGED
|
@@ -25,7 +25,7 @@ Start with [your first note](authoring/first-note.md). It explains the smallest
|
|
|
25
25
|
|
|
26
26
|
## The shared note
|
|
27
27
|
|
|
28
|
-
A nonempty note body creates one system-agnostic Foundry JournalEntry. Content before the first H1 becomes an introduction page; every H1 starts another JournalEntryPage. A lower-level heading with an explicit `{#anchor}` starts a page too, so a link can address it. The same prose becomes a web page and can be selected for a book. The content index records the note and its frontmatter for queries and navigation.
|
|
28
|
+
A nonempty note body creates one system-agnostic Foundry JournalEntry. Content before the first H1 becomes an introduction page; every H1 starts another JournalEntryPage. A lower-level heading with an explicit `{#anchor}` starts a page too, so a link can address it. Each page name is its heading's visible text: spans, links and emphasis contribute their text without their markup. The same prose becomes a web page and can be selected for a book. The content index records the note and its frontmatter for queries and navigation.
|
|
29
29
|
|
|
30
30
|
Leading `:` captions describe the next supported block; `:@` captions also number it. The optional type accepts `figure`, `table`, `verse`, `code`, `prose`, and `example`. Captions support identifiers, classes and named attributes; unsupported following blocks are errors. See [captions and numbered references](authoring/links-and-markup.md#captions-and-numbered-references).
|
|
31
31
|
|
|
@@ -172,19 +172,21 @@ A region may list its settlements in a table under `## Settlements` — name, ma
|
|
|
172
172
|
|
|
173
173
|
A being states its gender, frame and appearance in words from one closed vocabulary: `data.gender`, `data.frame`, and `data.appearance.eye_color`, `hair_color`, `skin_color` and `complexion` each take only the words listed for them, and any other value is an error at the value. `complexion` is a list, required once a being states an appearance. `data.appearance.extra_features` lists the being's visible physical marks, each a short plain description of one, and an entry stating a colour, a skin condition or anything that is not a mark is an error. See [a being's look](reference/format-details.md#a-beings-look).
|
|
174
174
|
|
|
175
|
-
A culture note may state what its people look like in `data.appearanceProfile`: weighted words for frame, eyes, hair, skin and complexion, and height ranges by gender, all from the same vocabulary. A culture
|
|
175
|
+
A culture note may state what its people look like in `data.appearanceProfile`: weighted words for frame, eyes, hair, skin and complexion, and height ranges by gender, all from the same vocabulary. A culture's tongue is its language, and the note `languages:` names for that language may state `data.names`: the patterns its speakers' names are built by and the lists each part is drawn from. `package-build npc new` writes a complete npc note from a spec of a culture and a gender, drawing the name from those lists and everything else the spec leaves out from the profile. See [appearance profiles](reference/format-details.md#appearance-profiles), [name lists](reference/format-details.md#name-lists) and [the command](commands.md#package-build-npc-new).
|
|
176
176
|
|
|
177
177
|
A culture may name its larger cultures in `data.parents`. Each entry names a
|
|
178
|
-
culture lore note.
|
|
179
|
-
|
|
178
|
+
culture lore note. An omitted `data.appearanceProfile` inherits through those
|
|
179
|
+
parents, and so does the culture's language; the content-index JSONL contains
|
|
180
180
|
the resolved values, which `npc new` reads directly. A stated field wins over
|
|
181
181
|
its inherited value. See [culture parents](reference/format-details.md#culture-parents-and-inherited-fields)
|
|
182
182
|
for a complete example, parent ordering and findings.
|
|
183
183
|
|
|
184
|
+
Every note is in one language, a code `languages:` declares or `en`. A note states it in `data.lang`; one that does not takes its culture's language, then its `data.parents`', nearest first, then `en`, and the content index publishes the result on the note's record as `lang`. A note's other names are listed in `name` under the code of their language, beside the English `full`: `name: {full: Johnathan Lewis, en: [John], vyla: [juan juis]}`. Names match whatever their case. See [a note's language](reference/format-details.md#a-notes-language) and [frontmatter](authoring/frontmatter.md).
|
|
185
|
+
|
|
184
186
|
Places, affiliations, lore and beings may name their culture in `data.culture`, and a `doc` of `subType: settingguide` must. A place or affiliation that names none inherits the culture of its parents. See [culture in the index](reference/format-details.md#culture-in-the-index).
|
|
185
187
|
|
|
186
|
-
An affiliation may
|
|
188
|
+
An affiliation may state the trade, temple or order tongue it keeps as its own `data.lang`. An affiliation that reaches no culture is a warning, in a tree holding a culture note. A language needs no culture and no affiliation. See [type: affiliation](reference/format-details.md#type-affiliation).
|
|
187
189
|
|
|
188
|
-
A language note (`type: skill`, `subType: language`) states its words in frontmatter: `data.words` states each word as a map of its form, class, field and gloss — one sense or a list of them, which a dictionary numbers — with its source, its variant forms, the pieces it is built from and a note, beside `data.classModifiers`, `data.fields` and `data.affixes`, each affix with the `kind` it makes, for a given name's ending who the name is `given` to, and the stem closes it is barred after; a zero affix states `zero: true` and no form. The notes a word is cited from are derived, not written: a note cites a word by marking it in italics in its prose, matched by form or a variant with diacritics and case set aside. The language of a word is the note it sits on, and none of it reaches the compiled Item. A daughter language names its parent in `data.family` and reads the parent's words as its own; the `language_lineage` relation joins a language to its ancestors. Classes come from the [master word classes](reference/format-details.md#word-classes). A culture or an affiliation states its own glossary entries in `data.glossary`: common words in its core vocabulary, dictionary words with a context meaning, or phrases, compounds and terms of art outside the dictionary with their own gloss. An entry naming a word of its resolved language takes the word's senses and class and links to its language entry; a `definition` supplies the entry's meaning instead. Common marks belong to the glossary's owner. A language note with nonempty `data.words` receives its full Dictionary section automatically: one alphabetical list with field tags and one key. A culture or affiliation with nonempty `data.glossary` receives only its explicitly declared entries in its Glossary section; ranks and offices stand in the affiliation's own sections. A note without the relevant frontmatter receives no such section. All surfaces show these sections after the authored text, or under an existing `{#dictionary}`, `{#lexicon}` or `{#glossary}` heading after its introduction. There are no setting-wide dictionary or glossary pages. Every entry resolves to a language — its own `language`, else the
|
|
190
|
+
A language note (`type: skill`, `subType: language`) states its words in frontmatter: `data.words` states each word as a map of its form, class, field and gloss — one sense or a list of them, which a dictionary numbers — with its source, its variant forms, the pieces it is built from and a note, beside `data.classModifiers`, `data.fields` and `data.affixes`, each affix with the `kind` it makes, for a given name's ending who the name is `given` to, and the stem closes it is barred after; a zero affix states `zero: true` and no form. The notes a word is cited from are derived, not written: a note cites a word by marking it in italics in its prose, matched by form or a variant with diacritics and case set aside. The language of a word is the note it sits on, and none of it reaches the compiled Item. A daughter language names its parent in `data.family` and reads the parent's words as its own; the `language_lineage` relation joins a language to its ancestors. Classes come from the [master word classes](reference/format-details.md#word-classes). A culture or an affiliation states its own glossary entries in `data.glossary`: common words in its core vocabulary, dictionary words with a context meaning, or phrases, compounds and terms of art outside the dictionary with their own gloss. An entry naming a word of its resolved language takes the word's senses and class and links to its language entry; a `definition` supplies the entry's meaning instead. Common marks belong to the glossary's owner. A language note with nonempty `data.words` receives its full Dictionary section automatically: one alphabetical list with field tags and one key. A culture or affiliation with nonempty `data.glossary` receives only its explicitly declared entries in its Glossary section; ranks and offices stand in the affiliation's own sections. A note without the relevant frontmatter receives no such section. All surfaces show these sections after the authored text, or under an existing `{#dictionary}`, `{#lexicon}` or `{#glossary}` heading after its introduction. There are no setting-wide dictionary or glossary pages. Every entry resolves to a language — its own `language`, else the note `languages:` names for the language of the note it is written on — or is an error at the entry. The `words`, `affixes`, `fields`, `glossary` and `language_lineage` relations hold them for `sql` fences, the `dictionary` relation lists each word under every language that has it, inherited words included, and the `terms` relation each glossary entry, rank and office with its culture associations; a fence sets custom views with `layout=dictionary` or `layout=glossary`. A language note names the tag a dictionary prints for it in `data.abbreviation`. A `doc` note states a setting's core concepts in `data.concepts`, a language note says it must cover them with `data.core: true`, and a word names the concepts it serves in `concept`; `package-build core` lists what each covering language has no word for (see [the core vocabulary](reference/format-details.md#the-core-vocabulary)). Every fact a check reads about a language's names, sounds and history is frontmatter too: `data.tongues` and `data.register` (every name the setting gives in the language's reach, the notes carrying each derived from the index, and a name tagged `other:<tongue>` or `exonym:<tongue>` one that the tongue's own language note registers under that tongue), `data.retired`, `data.scope`, `data.sounds` (letters with their place, their IPA and the tongues that write them, each a declared tag or a language note's Address, word edges from a closed list, the cluster limit and the groups of clusters inside a word, the stress rule (`two`, `longer`, which may be `first`, and `mark`), syllable finals with their IPA, syllable rules and vowel harmony with each vowel's front partner, the joining of parts, written marks, a root's skeleton vowel and frames, the spellings read past, and named mutations such as wearing and voicing), `data.soundChanges` (named sets of ordered steps), `data.elements` (each standing `opening`, `closing`, `either` or `link`, for one kind of name, with the word it is the stem of and its joining form), `data.roots`, `data.cognates` (with a reconstructed `proto` form), `data.callingNames`, `data.older` (the forms older than the rules), `data.negation` (the negative particle and the mutation it brings) and `data.naming` (how long each class of name runs, the edges names keep that words do not, the element kinds each kind of name draws on, what a place name takes from what it is held from, and the near name), each a relation — `sounds` as `letters`, `edges`, `clusters`, `cluster_groups`, `stress`, `finals`, `syllables`, `joining`, `joins`, `marks`, `skeleton`, `frames`, `read_past` and `mutations`, `soundChanges` as `sound_changes`, `callingNames` as `calling_names` — that a fence sets back on the page. A `doc` note may state a spelling guide's `data.sounds.letters` and `data.sounds.marks` alone, its letter rows naming tongues by language note Addresses, and they join the `letters` and `marks` relations under the guide's Address. A word's citations also come from a note whose name, listed name form, or rank or office title spells it whole. See [a language's words](reference/format-details.md#a-languages-words), [a language's register, sounds and history](reference/format-details.md#a-languages-register-sounds-and-history), [glossary terms](reference/format-details.md#glossary-terms) and [dictionaries and glossaries](reference/format-details.md#dictionaries-and-glossaries).
|
|
189
191
|
|
|
190
192
|
Blockquote alerts use `[!NOTE]`, `[!TIP]`, `[!IMPORTANT]`, `[!WARNING]`, or `[!]`, with optional attributes after the marker. They replace the former info and warn div fences; secret blocks remain supported. See [alerts](authoring/links-and-markup.md#alerts).
|