@heroiclands/package-build 23.7.1 → 23.9.0
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 +41 -0
- package/README.md +32 -0
- package/bin/content-commands.mjs +32 -10
- package/ci/check-banners.mjs +37 -19
- package/container.mjs +48 -10
- package/docs/api.md +402 -58
- package/docs/authoring/first-note.md +1 -1
- package/docs/authoring/frontmatter.md +30 -1
- package/docs/authoring/links-and-markup.md +154 -56
- package/docs/commands.md +31 -12
- package/docs/content-format.md +25 -2
- package/docs/design.md +31 -0
- package/docs/diagnostics.md +1 -1
- package/docs/guides/e2e.md +37 -1
- package/docs/guides/packs.md +2 -1
- package/docs/guides/reference-pages.md +86 -63
- package/docs/project-setup.md +30 -15
- package/docs/reference/format-details.md +313 -132
- package/docs/reference/note-types.md +191 -174
- package/e2e.mjs +89 -2
- package/engine/anchors.mjs +7 -20
- package/engine/base-compiler.mjs +11 -18
- package/engine/compile-corpus.mjs +5 -3
- package/engine/content-alerts.mjs +4 -2
- package/engine/content-blocks.mjs +18 -36
- package/engine/content-format.yaml +1 -0
- package/engine/content-index.mjs +447 -33
- package/engine/content-links.mjs +43 -15
- package/engine/content-poetry.mjs +9 -0
- package/engine/content-tables.mjs +8 -4
- package/engine/culture-reach.mjs +61 -34
- package/engine/data-keys.mjs +3 -1
- package/engine/diagnostics.mjs +24 -11
- package/engine/dictionary-layout.mjs +151 -19
- package/engine/dictionary-rows.mjs +129 -79
- package/engine/foundry-entries.mjs +21 -3
- package/engine/frontmatter-lint.mjs +1 -1
- package/engine/generate.mjs +12 -22
- package/engine/glossary-entries.mjs +11 -11
- package/engine/heading-attributes.mjs +21 -28
- package/engine/helpers.mjs +20 -12
- package/engine/infobox.mjs +3 -0
- package/engine/journals.mjs +15 -2
- package/engine/language-data.mjs +53 -0
- package/engine/language-terms.mjs +86 -0
- package/engine/language-words.mjs +2 -2
- package/engine/lexical-sections.mjs +247 -0
- package/engine/markdownlint-run.mjs +12 -2
- package/engine/markup-validation.mjs +34 -0
- package/engine/note-addresses.mjs +1 -0
- package/engine/note-claims.mjs +21 -10
- package/engine/note-package.mjs +3 -5
- package/engine/note-state.mjs +9 -3
- package/engine/note-vocabulary.mjs +36 -7
- package/engine/pdf-build.mjs +17 -10
- package/engine/prose-lint.mjs +12 -6
- package/engine/related-pages.mjs +22 -3
- package/engine/see-also.mjs +150 -0
- package/engine/site-build.mjs +21 -3
- package/engine/site-preview.mjs +4 -2
- package/engine/sql-tables.mjs +287 -53
- package/engine/standings.mjs +14 -12
- package/engine/stub-lint.mjs +6 -2
- package/engine/web-wikilinks.mjs +8 -6
- package/engine/word-rows.mjs +20 -12
- package/engine/word-terms.mjs +15 -6
- package/hugo-theme/layouts/partials/related.html +25 -8
- package/package.json +2 -1
- package/types/container.d.mts +4 -3
- package/types/e2e.d.mts +28 -0
- package/types/engine/base-compiler.d.mts +2 -2
- package/types/engine/compile-corpus.d.mts +2 -1
- package/types/engine/content-index.d.mts +85 -8
- package/types/engine/content-tables.d.mts +2 -1
- package/types/engine/culture-reach.d.mts +22 -2
- package/types/engine/data-keys.d.mts +7 -0
- package/types/engine/diagnostics.d.mts +7 -6
- package/types/engine/dictionary-layout.d.mts +35 -4
- package/types/engine/dictionary-rows.d.mts +9 -0
- package/types/engine/foundry-entries.d.mts +3 -1
- package/types/engine/heading-attributes.d.mts +2 -2
- package/types/engine/helpers.d.mts +11 -5
- package/types/engine/language-terms.d.mts +7 -0
- package/types/engine/lexical-sections.d.mts +95 -0
- package/types/engine/markdownlint-run.d.mts +3 -1
- package/types/engine/markup-validation.d.mts +14 -0
- package/types/engine/note-addresses.d.mts +10 -0
- package/types/engine/note-claims.d.mts +7 -1
- package/types/engine/note-package.d.mts +3 -1
- package/types/engine/note-state.d.mts +2 -1
- package/types/engine/note-vocabulary.d.mts +1 -0
- package/types/engine/related-pages.d.mts +10 -1
- package/types/engine/see-also.d.mts +55 -0
- package/types/engine/site-build.d.mts +4 -1
- package/types/engine/sql-tables.d.mts +40 -6
- package/types/engine/word-rows.d.mts +9 -7
|
@@ -764,6 +764,38 @@ declares the key. Any other art key authored where no pass emits it, such as a
|
|
|
764
764
|
the note still compiles correctly and a site template may read there what no
|
|
765
765
|
document carries. `null` is never reported.
|
|
766
766
|
|
|
767
|
+
#### Deliberate cross-references
|
|
768
|
+
|
|
769
|
+
Every note type accepts `data.seeAlso`: an ordered list of maps with a required
|
|
770
|
+
`address` and an optional string `gloss`. The Address names a whole note,
|
|
771
|
+
defaults to the current package and the `note` system, and has no default type.
|
|
772
|
+
It may name a note in a declared dependency. A gloss is a short plain-text
|
|
773
|
+
phrase explaining the connection.
|
|
774
|
+
|
|
775
|
+
```yaml
|
|
776
|
+
data:
|
|
777
|
+
seeAlso:
|
|
778
|
+
- address: lore-harborhistory
|
|
779
|
+
gloss: The founding of the port
|
|
780
|
+
- address: place-breakwater
|
|
781
|
+
- address: thalorna-note-lore-searoutes
|
|
782
|
+
gloss: Routes beyond the bay
|
|
783
|
+
```
|
|
784
|
+
|
|
785
|
+
The vocabulary declares the closed entry shape. The note boundary decodes each
|
|
786
|
+
nested Address, and the frontmatter check locates unresolved, duplicate and
|
|
787
|
+
self references at `data.seeAlso.<index>.address`. Duplicate detection compares
|
|
788
|
+
resolved destinations, so alternative spellings of one target do not make two
|
|
789
|
+
entries. Anchors are not accepted.
|
|
790
|
+
|
|
791
|
+
On the website, `related.seeAlso` carries `{ title, url, type, gloss? }` entries
|
|
792
|
+
in authored order. The theme renders that group ahead of the inferred
|
|
793
|
+
backlinks and mentions, with duplicates removed by resolved URL. Deliberate
|
|
794
|
+
references can point outside the local site to declared dependency pages.
|
|
795
|
+
The field has no infobox row. Foundry journals append a See also page with
|
|
796
|
+
compendium links; books append a See also section with the book renderer's
|
|
797
|
+
normal internal or external links. An absent or empty list emits nothing.
|
|
798
|
+
|
|
767
799
|
#### The art slots
|
|
768
800
|
|
|
769
801
|
A note declares the art its document needs, and every other image in it is
|
|
@@ -821,15 +853,18 @@ are, so a key legal everywhere is stated once here rather than repeated in
|
|
|
821
853
|
twenty-five tables where the one that was mistyped would be the one nobody
|
|
822
854
|
noticed:
|
|
823
855
|
|
|
824
|
-
| shared `data` property | Values
|
|
825
|
-
| ---------------------- |
|
|
826
|
-
| `
|
|
827
|
-
| `
|
|
828
|
-
| `
|
|
829
|
-
| `
|
|
830
|
-
| `
|
|
831
|
-
| `
|
|
832
|
-
| `
|
|
856
|
+
| shared `data` property | Values | Description |
|
|
857
|
+
| ---------------------- | ----------------------------- | ------------------------------------------------------------------------------------------ |
|
|
858
|
+
| `seeAlso` | list of `{ address, gloss? }` | Deliberate cross-references in reading order, shown on the site, in journals and in books. |
|
|
859
|
+
| `seeAlso[].address` | a note `Address` | Required; the whole note to read next. |
|
|
860
|
+
| `seeAlso[].gloss` | `string` | An optional short phrase saying why to follow the reference. |
|
|
861
|
+
| `id` | `string` | A pinned document identity. |
|
|
862
|
+
| `pack` | `string` | The shared compendium route. |
|
|
863
|
+
| `packFolder` | `Address` or pack map | The shared compendium folder Address. |
|
|
864
|
+
| `harnworld` | `{ realm?, ritual? }` | HârnWorld source details. |
|
|
865
|
+
| `harnworld.realm` | `string` | The HârnWorld realm the subject belongs to. |
|
|
866
|
+
| `harnworld.ritual` | `string[]` | The HârnWorld religions the subject observes. |
|
|
867
|
+
| `banner` | `Address` | The page's hero image — an `image` address, cut to 1792×768. |
|
|
833
868
|
|
|
834
869
|
`data.harnworld` takes two keys and nothing else: `realm`, a string naming the
|
|
835
870
|
HârnWorld realm the subject belongs to, and `ritual`, a list of strings naming
|
|
@@ -2262,10 +2297,13 @@ convention rather than declared in a field — see
|
|
|
2262
2297
|
|
|
2263
2298
|
### Three states of a note
|
|
2264
2299
|
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2300
|
+
Nonempty `data.words` on a language note (`skill`/`language`), or `data.glossary`
|
|
2301
|
+
on a culture or affiliation, supplies page content without an authored body.
|
|
2302
|
+
Absent or empty arrays supply no such exemption. Every other typed note
|
|
2303
|
+
requires a nonempty body after its closing frontmatter fence, including
|
|
2304
|
+
`folder` and `homepage`. An empty or whitespace-only body is otherwise an error,
|
|
2305
|
+
regardless of description or `tags: [draft]`. Untyped vault scaffolding is
|
|
2306
|
+
excluded. A nonempty body with fewer than 25 prose words warns
|
|
2269
2307
|
unless tagged `draft`; the tag never exempts an empty body. A `folder` note is
|
|
2270
2308
|
held only to the nonempty rule: any body, a placeholder or a single line
|
|
2271
2309
|
included, passes with or without `draft`.
|
|
@@ -2274,14 +2312,14 @@ The `lint`, `content-index`, `package compile`, `site` and `pdf` commands enforc
|
|
|
2274
2312
|
body errors. Write a short beginning and tag it `draft` when work is unfinished.
|
|
2275
2313
|
|
|
2276
2314
|
The internal classification below describes records, including incomplete notes
|
|
2277
|
-
that inspection APIs can still read. A **stub**
|
|
2278
|
-
must receive
|
|
2315
|
+
that inspection APIs can still read. A **stub** has neither an authored body nor
|
|
2316
|
+
automatic lexical content and must receive content before it can publish.
|
|
2279
2317
|
|
|
2280
|
-
| State |
|
|
2281
|
-
| --------- |
|
|
2282
|
-
| **stub** |
|
|
2283
|
-
| **draft** |
|
|
2284
|
-
| **full** |
|
|
2318
|
+
| State | Content | Marker | Page | Document | Link target |
|
|
2319
|
+
| --------- | --------------- | --------------- | ------------ | --------------------------------- | ----------- |
|
|
2320
|
+
| **stub** | none | none | no | yes, where one would not be empty | no |
|
|
2321
|
+
| **draft** | body or lexical | `tags: [draft]` | yes, noticed | yes, noticed | yes |
|
|
2322
|
+
| **full** | body or lexical | none | yes | yes | yes |
|
|
2285
2323
|
|
|
2286
2324
|
"Document" here is the document a note's frontmatter earns. A system's Actor or
|
|
2287
2325
|
Item is earned by that system's block, in every state —
|
|
@@ -2303,7 +2341,7 @@ link starts resolving.
|
|
|
2303
2341
|
|
|
2304
2342
|
The rule is that severe because the test has to be one you can apply by looking
|
|
2305
2343
|
at the file. Every softer rule makes two files that look different behave the
|
|
2306
|
-
same.
|
|
2344
|
+
same. For a note without automatic lexical content:
|
|
2307
2345
|
|
|
2308
2346
|
| After the fence | Empty? | What happens |
|
|
2309
2347
|
| ----------------------- | ------ | --------------------------------------------------------------- |
|
|
@@ -2333,7 +2371,8 @@ It keeps everything else:
|
|
|
2333
2371
|
> index then names no artefact: `uuid`, `path` and `address` are `null`, which
|
|
2334
2372
|
> is how a record says one was not made.
|
|
2335
2373
|
|
|
2336
|
-
The test is about the **output
|
|
2374
|
+
The test is about the **output**. For a note with no generated Dictionary or
|
|
2375
|
+
Glossary content:
|
|
2337
2376
|
|
|
2338
2377
|
| The note | The document | Made? |
|
|
2339
2378
|
| ---------------------------------- | -------------------------------------- | ----- |
|
|
@@ -2365,6 +2404,11 @@ site's front door. The classification helpers retain their addresses and report
|
|
|
2365
2404
|
**full** even when their bodies are empty. Validation still rejects an empty
|
|
2366
2405
|
body for both types.
|
|
2367
2406
|
|
|
2407
|
+
Nonempty `data.words` on a language, or `data.glossary` on a culture or
|
|
2408
|
+
affiliation, supplies a generated Dictionary or Glossary page. These notes
|
|
2409
|
+
need no authored body. A nonempty authored body still follows the placeholder
|
|
2410
|
+
and short-prose rules.
|
|
2411
|
+
|
|
2368
2412
|
Every type in the vocabulary declares whether an empty body suppresses its page,
|
|
2369
2413
|
so adding a type means answering the question rather than inheriting a default.
|
|
2370
2414
|
|
|
@@ -2411,8 +2455,8 @@ any note they do not own, with no finding.
|
|
|
2411
2455
|
|
|
2412
2456
|
**Prose is untouched by this.** A body with content still compiles into one
|
|
2413
2457
|
JournalEntry, one web page and one PDF page, however many blocks the note
|
|
2414
|
-
carries and whether or not it carries any;
|
|
2415
|
-
|
|
2458
|
+
carries and whether or not it carries any; without automatic lexical content,
|
|
2459
|
+
an empty body compiles none of the three. For these notes, each state reaches the next by one edit in
|
|
2416
2460
|
one file, with its address, its id, its index record and every link into it
|
|
2417
2461
|
unchanged:
|
|
2418
2462
|
|
|
@@ -3209,12 +3253,12 @@ value containing spaces with double quotes and escape an internal quote as
|
|
|
3209
3253
|
`\"`. Boolean values are exactly `true` or `false`; other spellings are
|
|
3210
3254
|
errors. Duplicate and unknown attributes are errors.
|
|
3211
3255
|
|
|
3212
|
-
| Attribute | What it does
|
|
3213
|
-
| ------------------------------------------- |
|
|
3214
|
-
| `allow-empty=true` | Permits a query selecting no rows. Default `false`.
|
|
3215
|
-
| `section-level=1` through `section-level=6` | Sets the heading level for `_section`. Default `2`.
|
|
3216
|
-
| `key=false` |
|
|
3217
|
-
| `key=only` | Prints a dictionary's or a glossary's key for its rows, and no letter heading or entry. Refused on a table.
|
|
3256
|
+
| Attribute | What it does |
|
|
3257
|
+
| ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
|
|
3258
|
+
| `allow-empty=true` | Permits a query selecting no rows. Default `false`. |
|
|
3259
|
+
| `section-level=1` through `section-level=6` | Sets the heading level for `_section`. Default `2`. |
|
|
3260
|
+
| `key=false` | Omits the key and any dictionary verb head table, retaining entries. Default `true`. Refused on a table, as `key=true` is. |
|
|
3261
|
+
| `key=only` | Prints a dictionary's or a glossary's key for its rows, and no letter heading or entry. Refused on a table. |
|
|
3218
3262
|
|
|
3219
3263
|
##### Page lists
|
|
3220
3264
|
|
|
@@ -3499,7 +3543,10 @@ A `follows[].event` resolves to exactly one event: a note holding one event, or
|
|
|
3499
3543
|
|
|
3500
3544
|
#### Generated sections
|
|
3501
3545
|
|
|
3502
|
-
The build
|
|
3546
|
+
The build supplies sections from a note's frontmatter and the content
|
|
3547
|
+
relationships around it. Every surface receives the same text: the Foundry
|
|
3548
|
+
journal, the website and the book. Relationship lists and event views follow
|
|
3549
|
+
the authored text as H1 sections with fixed anchors, in this order:
|
|
3503
3550
|
|
|
3504
3551
|
| Section | Anchor | On | Content |
|
|
3505
3552
|
| ----------------- | ---------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
|
|
@@ -3513,13 +3560,23 @@ The build appends sections to the end of a note's body, after everything the aut
|
|
|
3513
3560
|
| In song and story | `insongandstory` | any note | the `literature` works whose `data.subjects` name the note or one of its events, as list entries with each work's `data.form` |
|
|
3514
3561
|
| From here | `fromhere` | a `place` that states, or is named in, a border or route | the map drawn from the place, as an image |
|
|
3515
3562
|
|
|
3516
|
-
- **
|
|
3563
|
+
- **Relationship and event sections follow the author's text in the table's order.**
|
|
3517
3564
|
- **A section with nothing to show is not generated.**
|
|
3518
|
-
- **An author's own section replaces
|
|
3519
|
-
- **
|
|
3565
|
+
- **An author's own relationship or event section replaces its generated one.** A note whose body declares a prose anchor with the section's slug — `# Within {#within}`, or a block or span with that `id` — gets no generated section for it, and its own section is left exactly as written. This is the one way to turn a section off, and the way to choose different contents for it.
|
|
3566
|
+
- **A relationship list entry links to the note it names**, written `[[<address>|]]` so each surface resolves it and shows the note's current name. An entry naming a stub, which publishes no page, is its name as plain text. The lists take in the places, affiliations and works a fetched index carries.
|
|
3520
3567
|
- **The map is a drawing the build makes**, named `generated/from-<shortcode>.svg`. The website sets it inline so its place names are links, the Foundry compile stages it into the module at `assets/generated/`, and the book draws it beside its source. `generated/` is the build's: an authored image addressed there is an error. `site.maps: false` gives no place the section.
|
|
3521
3568
|
- A stub publishes no page and is given no section.
|
|
3522
3569
|
|
|
3570
|
+
**Dictionary and Glossary sections come from the owner's declarations.** A
|
|
3571
|
+
language with nonempty `data.words` receives its full alphabetical dictionary,
|
|
3572
|
+
with letter headings, field tags and one key. A culture or affiliation with
|
|
3573
|
+
nonempty `data.glossary` receives only its declared entries, including an
|
|
3574
|
+
explicitly named rank or office. An absent or empty declaration produces no
|
|
3575
|
+
section. An authored `{#dictionary}` or `{#lexicon}` heading receives the
|
|
3576
|
+
Dictionary list after its introduction, and `{#glossary}` does the same for a
|
|
3577
|
+
Glossary list. Without that heading, the build appends the section at the end
|
|
3578
|
+
of the note. See [dictionaries and glossaries](#dictionaries-and-glossaries).
|
|
3579
|
+
|
|
3523
3580
|
#### Event views
|
|
3524
3581
|
|
|
3525
3582
|
The build appends sections to the end of a note's body that list the events concerning it — a region's chronology, the events a being took part in, the accounts a people gives, what followed an event. Each is an H1 with a fixed anchor holding a `sql` fence over the `events` relation, the same Markdown an author could write, so every surface sets it as it sets an authored section: a page of the Foundry journal, a section of the website page in its table of contents, a section of the book.
|
|
@@ -4765,9 +4822,9 @@ rank names the standing, and the standing says.
|
|
|
4765
4822
|
| `language` | `Address` | The trade, temple or order tongue it keeps, naming a skill note with `subType: language` |
|
|
4766
4823
|
| `glossary` | `{ name, name_sort?, common?, definition?, pronunciation?, language? }[]` | Its own glossary terms — see [glossary terms](#glossary-terms) |
|
|
4767
4824
|
| `glossary[].name` | `string`, required | The headword |
|
|
4768
|
-
| `glossary[].name_sort` | `string` | Its sort key; the name when unstated
|
|
4769
|
-
| `glossary[].common` | `boolean` | `true` for a
|
|
4770
|
-
| `glossary[].definition` | `string` |
|
|
4825
|
+
| `glossary[].name_sort` | `string` | Its sort key; the matching word's, else the name, when unstated |
|
|
4826
|
+
| `glossary[].common` | `boolean` | `true` for a term in this owner's core vocabulary; `false` when unstated |
|
|
4827
|
+
| `glossary[].definition` | `string` | Its context meaning or own gloss; unstated, a matching dictionary word supplies its senses |
|
|
4771
4828
|
| `glossary[].pronunciation` | `string` | A respelling, as `sol-MEH-reh`: letters, apostrophes and hyphens, at most one syllable in capitals |
|
|
4772
4829
|
| `glossary[].language` | `Address` | The language the term is in, naming a skill note with `subType: language`; unstated, the affiliation's, its parents' or its culture's |
|
|
4773
4830
|
| `relations` | `Map<Address, Standing>` | Standing with other affiliations, keyed by the other body's Address |
|
|
@@ -4781,14 +4838,14 @@ together with every place whose `data.government` names it. See
|
|
|
4781
4838
|
|
|
4782
4839
|
**An affiliation may keep a tongue of its own.** A trade cant, a temple
|
|
4783
4840
|
language or an order's tongue is named in the affiliation's `data.language`, and
|
|
4784
|
-
it
|
|
4785
|
-
glossary
|
|
4786
|
-
|
|
4787
|
-
|
|
4841
|
+
it supplies the language of the affiliation's own
|
|
4842
|
+
[glossary terms](#glossary-terms) where an entry names none. A culture can
|
|
4843
|
+
select a word of that tongue for its own glossary by naming the language on
|
|
4844
|
+
the entry. In a tree that holds at least one culture note, an
|
|
4788
4845
|
affiliation that reaches no culture — naming none, inheriting none through
|
|
4789
4846
|
`data.parents`, and, for a `polity`, taking none from its places — is a warning
|
|
4790
|
-
at its `type:` line, because its ranks
|
|
4791
|
-
|
|
4847
|
+
at its `type:` line, because its ranks and offices have no culture associations
|
|
4848
|
+
for term queries.
|
|
4792
4849
|
|
|
4793
4850
|
A language needs no culture and no affiliation. A dead language, or one kept
|
|
4794
4851
|
only by a church, is a language note like any other, and nothing requires a
|
|
@@ -5282,15 +5339,29 @@ SoHL sets `system.quantity` to `1` for each compendium item.
|
|
|
5282
5339
|
| `names.<name>` | `string[]` | A list the placeholder of the same name draws from |
|
|
5283
5340
|
| `family` | `Address` | `language` only: the parent language, naming a skill note with `subType: language`; this language reads the parent's words as its own — see [a language's words](#a-languages-words) |
|
|
5284
5341
|
| `abbreviation` | `string` | `language` only: the tag a dictionary prints for it, as `Prov.`; its full name where unstated — see [dictionaries and glossaries](#dictionaries-and-glossaries) |
|
|
5342
|
+
| `grammar` | `{ plural?, verbs? }` | Optional dictionary noun plurals and one verb pattern; supplied shapes only are checked |
|
|
5343
|
+
| `grammar.plural` | `{ ending, becomes }[]` | Literal suffix replacements in authored order; the first match wins |
|
|
5344
|
+
| `grammar.plural[].ending` | `string`, required, may be empty | Bare suffix to replace; empty matches every noun |
|
|
5345
|
+
| `grammar.plural[].becomes` | `string`, required, may be empty | Bare replacement; empty deletes the matching suffix |
|
|
5346
|
+
| `grammar.verbs` | `{ invariant: true }` or `{ persons: { I, you, heShe, we, youAll, they } }` | One regular present pattern, printed once at the dictionary head |
|
|
5347
|
+
| `grammar.verbs.invariant` | `true` | Verbs do not change; excludes `persons` |
|
|
5348
|
+
| `grammar.verbs.persons` | a map of all six ending strings | Each ending is added to the citation form; excludes `invariant` |
|
|
5349
|
+
| `grammar.verbs.persons.I` | `string`, required, may be empty | Ending for I |
|
|
5350
|
+
| `grammar.verbs.persons.you` | `string`, required, may be empty | Ending for you |
|
|
5351
|
+
| `grammar.verbs.persons.heShe` | `string`, required, may be empty | Ending for he/she |
|
|
5352
|
+
| `grammar.verbs.persons.we` | `string`, required, may be empty | Ending for we |
|
|
5353
|
+
| `grammar.verbs.persons.youAll` | `string`, required, may be empty | Ending for you all |
|
|
5354
|
+
| `grammar.verbs.persons.they` | `string`, required, may be empty | Ending for they |
|
|
5285
5355
|
| `classModifiers` | `string[]` | `language` only: the word class modifiers the language uses, each from the [master word classes](#word-classes); empty when unstated |
|
|
5286
5356
|
| `fields` | `{ name, holds }[]` | `language` only: the fields its words are grouped under |
|
|
5287
5357
|
| `fields[].name` | `string`, required | The field's name, which a word's `field` names |
|
|
5288
5358
|
| `fields[].holds` | `string`, required | What the field holds |
|
|
5289
|
-
| `words` | `{ form, class, field, gloss, … }[]` | `language` only: its words
|
|
5359
|
+
| `words` | `{ form, class, field, gloss, … }[]` | `language` only: its words in authored order; its automatic dictionary sorts them alphabetically — see [a language's words](#a-languages-words) |
|
|
5290
5360
|
| `words[].form` | `string`, required | The word as cited, bare: no backticks |
|
|
5291
5361
|
| `words[].variants` | `string[]` | Its other forms, as a short form beside a long one; a marked use of one cites the word |
|
|
5292
5362
|
| `words[].name_sort` | `string` | Its sort key; the form when unstated |
|
|
5293
5363
|
| `words[].class` | `string`, required | A class from the master word classes, base first: `n I f` |
|
|
5364
|
+
| `words[].plural` | `string` | Optional explicit noun plural; the dictionary uses it before the language rule |
|
|
5294
5365
|
| `words[].field` | `string`, required | One of the note's `fields` names |
|
|
5295
5366
|
| `words[].gloss` | `string` or `string[]`, required | The meaning, in brief; a list states one sense per entry, which a dictionary numbers |
|
|
5296
5367
|
| `words[].source` | `{ kind, language?, form? }` | Where the word comes from |
|
|
@@ -5504,6 +5575,7 @@ data:
|
|
|
5504
5575
|
- {
|
|
5505
5576
|
form: solmère,
|
|
5506
5577
|
class: n m,
|
|
5578
|
+
pronunciation: sol-MEH-reh,
|
|
5507
5579
|
field: Love and its conduct,
|
|
5508
5580
|
gloss: "longing; the ache for a person, a place or a time that is gone",
|
|
5509
5581
|
source: { kind: borrowed, language: skill-elvndrlng, form: sólmerë },
|
|
@@ -5528,15 +5600,67 @@ so a language's words, however many, add nothing to it.
|
|
|
5528
5600
|
class I, feminine. A language declares the modifiers it uses in
|
|
5529
5601
|
`data.classModifiers`, and a word may carry only those.
|
|
5530
5602
|
|
|
5603
|
+
##### Optional noun and verb forms
|
|
5604
|
+
|
|
5605
|
+
A noun may carry gender through its existing class: `n m`, `n f` or `n n`,
|
|
5606
|
+
printed as _n. m._, _n. f._ or _n. nt._. It may state `plural` where its
|
|
5607
|
+
plural differs from the language's default. Neither is required.
|
|
5608
|
+
|
|
5609
|
+
```yaml
|
|
5610
|
+
data:
|
|
5611
|
+
classModifiers: [m]
|
|
5612
|
+
fields:
|
|
5613
|
+
- { name: People, holds: People and their everyday words }
|
|
5614
|
+
grammar:
|
|
5615
|
+
plural:
|
|
5616
|
+
- { ending: os, becomes: oi }
|
|
5617
|
+
verbs:
|
|
5618
|
+
persons: { I: o, you: es, heShe: "", we: om, youAll: et, they: on }
|
|
5619
|
+
words:
|
|
5620
|
+
- { form: marendos, class: n m, field: People, gloss: an example noun }
|
|
5621
|
+
```
|
|
5622
|
+
|
|
5623
|
+
The dictionary entry begins **marendos** _n. m., pl. marendoi_. An entry's
|
|
5624
|
+
nonempty explicit `plural` wins; otherwise the first matching
|
|
5625
|
+
`grammar.plural` replacement supplies its noun plural. Endings are bare,
|
|
5626
|
+
literal strings: `os` replaces the closing letters, with no regular
|
|
5627
|
+
expression or hyphen notation. An empty `ending` appends `becomes`; an empty
|
|
5628
|
+
`becomes` removes the ending. A noun matching no rule prints no plural.
|
|
5629
|
+
The raw `words` relation retains only the authored `plural`; the
|
|
5630
|
+
`dictionary` relation carries the displayed one.
|
|
5631
|
+
|
|
5632
|
+
`grammar.verbs` is either `{ invariant: true }`, where no verb changes, or
|
|
5633
|
+
the `persons` map shown above. A supplied `persons` map has all six string
|
|
5634
|
+
endings, each added to the citation form; `""` leaves that form unchanged.
|
|
5635
|
+
The dictionary prints the pattern once in a small table before its letter
|
|
5636
|
+
headings. A custom dictionary's default or `key=true` prints that table even
|
|
5637
|
+
when no abbreviation key is needed. `key=false` fragments omit both the key
|
|
5638
|
+
and table; `key=only` prints the abbreviation key alone. Separate results
|
|
5639
|
+
with their heads enabled each print their own tables.
|
|
5640
|
+
A language uses only its own stated grammar, including for words
|
|
5641
|
+
listed from an ancestor; an inherited word retains its explicit plural.
|
|
5642
|
+
Grammar is not inherited through `family`.
|
|
5643
|
+
|
|
5644
|
+
All grammar is optional. Only a supplied key's shape is checked: no language
|
|
5645
|
+
must supply a pattern, no noun must supply gender or plural, and no word is
|
|
5646
|
+
checked against a rule or required to provide an exception. There are no
|
|
5647
|
+
additional cases, tenses, moods or irregular verb forms. With none of these
|
|
5648
|
+
optional fields, dictionary output is unchanged. Grammar alone does not
|
|
5649
|
+
create a Dictionary section.
|
|
5650
|
+
|
|
5531
5651
|
**A word's source** is closed to seven kinds. `borrowed` names the language the
|
|
5532
5652
|
word came from in `language`, a language Address; `inherited`, `kept` and
|
|
5533
5653
|
`worn` give the ancient `form` where the note knows it; `coined`, `substrate`
|
|
5534
5654
|
and `island` give neither. A form is written bare: a renderer supplies its own
|
|
5535
5655
|
italics and its own asterisk.
|
|
5536
5656
|
|
|
5537
|
-
**`built` names the pieces a word is made of
|
|
5538
|
-
|
|
5539
|
-
|
|
5657
|
+
**`built` names the pieces a word is made of**. Each piece resolves against
|
|
5658
|
+
words, then affixes, then elements of its language, followed by each ancestor
|
|
5659
|
+
in `data.family` order. An element matches its `form` or an entry in `variants`
|
|
5660
|
+
and supplies its `sense` as the gloss. A piece written with different joining
|
|
5661
|
+
hyphens still matches (`am-` finds the word `am`); an exact spelling is checked
|
|
5662
|
+
first. An affix also matches its declared front-vowel form, `front`. Case and
|
|
5663
|
+
accents remain significant.
|
|
5540
5664
|
|
|
5541
5665
|
**A gloss is one sense or a list of them.** A list states one sense per entry,
|
|
5542
5666
|
and a dictionary numbers them: `zethu` glossed `[writing, a scribe]` prints
|
|
@@ -5601,7 +5725,7 @@ Each finding is located at the key at fault:
|
|
|
5601
5725
|
| A language Address naming something other than a language skill | error |
|
|
5602
5726
|
| A pronunciation that is not a respelling | error |
|
|
5603
5727
|
| A `frame` that no `sounds.frames` of the language or an ancestor names | error |
|
|
5604
|
-
| A `built` piece no word or
|
|
5728
|
+
| A `built` piece no word, affix or element in its lineage glosses | warning |
|
|
5605
5729
|
|
|
5606
5730
|
The `words` relation holds one row per word — see
|
|
5607
5731
|
[Content tables](#content-tables) — and a table of them is an `sql` fence over
|
|
@@ -6181,7 +6305,7 @@ not a different cultural identity. See
|
|
|
6181
6305
|
| `form` | `string` | `literature` only: the kind of work in its people's own terms — `epic`, `saga`, `praise-song`, `elegy`. Free text |
|
|
6182
6306
|
| `subjects` | `Address[]` | `literature` only: the beings, places, gods and other notes the work concerns, and any event, as `note#id` |
|
|
6183
6307
|
| `parents` | `Address[]` | `culture` only: the larger cultures this one belongs to; each target is a culture lore note — see [culture parents](#culture-parents-and-inherited-fields) |
|
|
6184
|
-
| `language` | `Address` | `literature` and `culture` only: the tongue a work is composed in, or a culture's people speak, naming a skill note with `subType: language`; `package-build npc new` draws a culture's names from that language's [name lists](#name-lists)
|
|
6308
|
+
| `language` | `Address` | `literature` and `culture` only: the tongue a work is composed in, or a culture's people speak, naming a skill note with `subType: language`; `package-build npc new` draws a culture's names from that language's [name lists](#name-lists); glossary entries whose own `language` is unstated resolve to it |
|
|
6185
6309
|
| `events` | event entries — see [Events](#events) | What happened to or at this subject: dated, attributed events |
|
|
6186
6310
|
| `appearanceProfile` | `{ frame, eye_color, hair_color, skin_color, complexion, height }` | `culture` only: what its people look like, for `package-build npc new` — see [appearance profiles](#appearance-profiles) |
|
|
6187
6311
|
| `appearanceProfile.frame` | map of `frame` words to positive weights, required | How often each frame is drawn |
|
|
@@ -6194,9 +6318,9 @@ not a different cultural identity. See
|
|
|
6194
6318
|
| `appearanceProfile.height.<name>.max` | height in metres or feet and inches, required | The tallest height drawn for that gender |
|
|
6195
6319
|
| `glossary` | `{ name, name_sort?, common?, definition?, pronunciation?, language? }[]` | `culture` only: the culture's own glossary terms — see [glossary terms](#glossary-terms) |
|
|
6196
6320
|
| `glossary[].name` | `string`, required | The headword |
|
|
6197
|
-
| `glossary[].name_sort` | `string` | Its sort key; the name when unstated
|
|
6198
|
-
| `glossary[].common` | `boolean` | `true` for a
|
|
6199
|
-
| `glossary[].definition` | `string` |
|
|
6321
|
+
| `glossary[].name_sort` | `string` | Its sort key; the matching word's, else the name, when unstated |
|
|
6322
|
+
| `glossary[].common` | `boolean` | `true` for a term in this owner's core vocabulary; `false` when unstated |
|
|
6323
|
+
| `glossary[].definition` | `string` | Its context meaning or own gloss; unstated, a matching dictionary word supplies its senses |
|
|
6200
6324
|
| `glossary[].pronunciation` | `string` | A respelling, as `sol-MEH-reh`: letters, apostrophes and hyphens, at most one syllable in capitals |
|
|
6201
6325
|
| `glossary[].language` | `Address` | The language the term is in, naming a skill note with `subType: language`; unstated, the note's language |
|
|
6202
6326
|
|
|
@@ -6204,54 +6328,74 @@ not a different cultural identity. See
|
|
|
6204
6328
|
|
|
6205
6329
|
#### Glossary terms
|
|
6206
6330
|
|
|
6207
|
-
A
|
|
6208
|
-
|
|
6209
|
-
|
|
6210
|
-
|
|
6211
|
-
|
|
6212
|
-
|
|
6213
|
-
|
|
6214
|
-
|
|
6215
|
-
|
|
6216
|
-
the
|
|
6331
|
+
**A dictionary belongs to a language; a glossary belongs to a culture or an
|
|
6332
|
+
affiliation.** A language note with nonempty `data.words` receives its full Dictionary
|
|
6333
|
+
section automatically, with grammar, senses, etymology and pronunciation,
|
|
6334
|
+
field tags, letter headings and one key in a single alphabetical list. A
|
|
6335
|
+
culture or affiliation with nonempty `data.glossary` receives a Glossary section
|
|
6336
|
+
containing only its explicitly declared entries. Ranks and offices stand in
|
|
6337
|
+
the affiliation's own sections; the glossary selects one only through an
|
|
6338
|
+
explicit entry. A note without the relevant frontmatter receives no such
|
|
6339
|
+
section. These sections appear on the site, in the Foundry journal and in
|
|
6340
|
+
the book. Dictionaries and glossaries have no setting-wide pages.
|
|
6341
|
+
|
|
6342
|
+
A glossary entry belongs for one of three reasons:
|
|
6343
|
+
|
|
6344
|
+
1. **A common word** is part of the owner's core vocabulary, the words a
|
|
6345
|
+
player needs to adventure there. It states `common: true` and takes the
|
|
6346
|
+
dictionary's senses when it gives no `definition`.
|
|
6347
|
+
2. **A dictionary word with a context meaning** states that meaning in
|
|
6348
|
+
`definition`.
|
|
6349
|
+
3. **A term outside the dictionary** — a phrase, a hyphenated compound or a
|
|
6350
|
+
term of art — states its gloss in `definition`.
|
|
6351
|
+
|
|
6352
|
+
`common` belongs to an entry in its owner's glossary. A culture and an
|
|
6353
|
+
affiliation using the same language choose independently: a word may be
|
|
6354
|
+
common in one glossary and absent from another. A language's dictionary
|
|
6355
|
+
marks nothing common.
|
|
6356
|
+
|
|
6357
|
+
This culture glossary uses the words from [the Provenzal language
|
|
6358
|
+
example](#a-languages-words). `solmère` is a common word with its dictionary
|
|
6359
|
+
sense, `amère` takes the context's song sense, and `blood-field` is a term
|
|
6360
|
+
outside the dictionary. `Knight-Captain` names a rank that reaches the
|
|
6361
|
+
culture:
|
|
6217
6362
|
|
|
6218
6363
|
```yaml
|
|
6364
|
+
shortcode: provenzianclt
|
|
6365
|
+
name: { full: Provenzia }
|
|
6219
6366
|
type: lore
|
|
6220
6367
|
subType: culture
|
|
6221
6368
|
data:
|
|
6222
|
-
language: skill-
|
|
6369
|
+
language: skill-provnzlng
|
|
6223
6370
|
glossary:
|
|
6224
|
-
- { name:
|
|
6225
|
-
- { name:
|
|
6371
|
+
- { name: solmère, common: true }
|
|
6372
|
+
- { name: amère, definition: "a sweetheart, in the songs" }
|
|
6226
6373
|
- {
|
|
6227
6374
|
name: blood-field,
|
|
6228
6375
|
definition: "ground where a battle tore the boundary with the spirit world, and it did not close",
|
|
6229
6376
|
}
|
|
6230
|
-
- { name:
|
|
6377
|
+
- { name: Knight-Captain, common: true }
|
|
6231
6378
|
```
|
|
6232
6379
|
|
|
6233
|
-
**An entry
|
|
6234
|
-
|
|
6235
|
-
|
|
6236
|
-
|
|
6237
|
-
|
|
6380
|
+
**An entry naming a word of its resolved language, without a `definition`,
|
|
6381
|
+
carries that word's senses and class.** Its headword links to the word's
|
|
6382
|
+
entry in the language's dictionary. An entry with a `definition` carries that
|
|
6383
|
+
meaning instead, keeping its word link and class when it names a dictionary
|
|
6384
|
+
word.
|
|
6238
6385
|
|
|
6239
6386
|
**Every entry resolves to a language**, and the first match wins:
|
|
6240
6387
|
|
|
6241
6388
|
1. the entry's own `language`;
|
|
6242
|
-
2.
|
|
6243
|
-
every word in a language note's `data.words` is in that language;
|
|
6244
|
-
3. on an affiliation, its own `data.language`, then the nearest parent
|
|
6389
|
+
2. on an affiliation, its own `data.language`, then the nearest parent
|
|
6245
6390
|
affiliation's, nearest first and parents in the order `data.parents` lists
|
|
6246
6391
|
them, then its culture's `data.language`;
|
|
6247
|
-
|
|
6392
|
+
3. on a culture, its own `data.language`.
|
|
6248
6393
|
|
|
6249
6394
|
An affiliation's culture is the one it states or inherits, as
|
|
6250
6395
|
[Culture in the index](#culture-in-the-index) describes, and a culture's
|
|
6251
6396
|
`data.language` includes one it inherits from its
|
|
6252
|
-
[parent cultures](#culture-parents-and-inherited-fields). An
|
|
6253
|
-
|
|
6254
|
-
language and is marked `common`.
|
|
6397
|
+
[parent cultures](#culture-parents-and-inherited-fields). An entry in another
|
|
6398
|
+
tongue names that language explicitly:
|
|
6255
6399
|
|
|
6256
6400
|
```yaml
|
|
6257
6401
|
# Affiliations/Wardens.md — an order with a cant of its own
|
|
@@ -6275,76 +6419,114 @@ Each finding is located at the entry's key:
|
|
|
6275
6419
|
- An entry that resolves to no language is an error at the entry: state its
|
|
6276
6420
|
`language`, or `data.language` on the note.
|
|
6277
6421
|
- An entry's `language` that names no language skill is an error at the value.
|
|
6278
|
-
- An entry with no `definition`
|
|
6279
|
-
|
|
6422
|
+
- An entry with no `definition` naming neither a word of its resolved
|
|
6423
|
+
language, including inherited words, nor a rank or office that reaches its
|
|
6424
|
+
owner is an error at its `name`. State the word's `language`, or give the
|
|
6425
|
+
term its own `definition`.
|
|
6280
6426
|
- A pronunciation that is not a respelling is an error at the value.
|
|
6281
6427
|
- A `definition` that only repeats the one sense it replaces is a warning at the
|
|
6282
6428
|
definition, because the entry changes nothing.
|
|
6283
6429
|
|
|
6284
|
-
The `glossary` relation holds one row per entry, with the language
|
|
6285
|
-
to
|
|
6430
|
+
The `glossary` relation holds one row per entry as authored, with the language
|
|
6431
|
+
it resolves to. The `terms` relation supplies its senses and class for a
|
|
6432
|
+
`layout=glossary` fence — see [Content tables](#content-tables).
|
|
6286
6433
|
|
|
6287
6434
|
#### Dictionaries and glossaries
|
|
6288
6435
|
|
|
6289
|
-
|
|
6290
|
-
|
|
6291
|
-
|
|
6292
|
-
|
|
6293
|
-
|
|
6294
|
-
|
|
6295
|
-
|
|
6296
|
-
|
|
6297
|
-
|
|
6436
|
+
**A language's dictionary sets its words**, with their class, field,
|
|
6437
|
+
etymology, pronunciation, senses and citations. A language note with
|
|
6438
|
+
`data.words` receives that full dictionary automatically as one alphabetical
|
|
6439
|
+
list, with letter headings and one key. **A culture's or an affiliation's
|
|
6440
|
+
Glossary section sets its explicit `data.glossary` entries only**: common
|
|
6441
|
+
words, dictionary words with a context meaning, and phrases, compounds or
|
|
6442
|
+
terms of art with their own glosses. A note with absent or empty `data.words` or
|
|
6443
|
+
`data.glossary`, respectively, receives no such section. The site, Foundry
|
|
6444
|
+
journals and the book show the same sections.
|
|
6445
|
+
|
|
6446
|
+
An authored heading with `{#dictionary}` or `{#lexicon}` receives the
|
|
6447
|
+
Dictionary list after its authored text; `{#glossary}` does the same for a
|
|
6448
|
+
Glossary list. The heading and its introduction stay in place, with a single
|
|
6449
|
+
list under it. Otherwise the build appends a **Dictionary** or **Glossary**
|
|
6450
|
+
heading and its entries at the end of the note. There are no setting-wide
|
|
6451
|
+
dictionary or glossary pages.
|
|
6452
|
+
|
|
6453
|
+
`layout=dictionary` and `layout=glossary` remain available for custom SQL
|
|
6454
|
+
views of the same relations. The `terms` relation holds governance rows as
|
|
6455
|
+
well as declared glossary entries; the default Glossary section selects only
|
|
6456
|
+
the owner's explicitly declared entries. See [dictionaries and
|
|
6457
|
+
glossaries](../authoring/links-and-markup.md#dictionaries-and-glossaries) for
|
|
6458
|
+
the layouts and custom queries.
|
|
6298
6459
|
|
|
6299
6460
|
**`dictionary`** is one row per word per language it is listed under. A
|
|
6300
6461
|
language lists its own words at `depth` 0 and the words it inherits through
|
|
6301
|
-
`data.family` above that, nearest first, so `WHERE language = '<Address>'` is
|
|
6302
|
-
language's
|
|
6303
|
-
the language that states it. Where a daughter and a parent state the same
|
|
6462
|
+
`data.family` above that, nearest first, so `WHERE language = '<Address>'` is
|
|
6463
|
+
that language's full dictionary. Where a daughter and a parent state the same
|
|
6304
6464
|
form, the daughter's own word is the one listed. Words of class `name`, `stem`
|
|
6305
|
-
and `pref` are no entry.
|
|
6465
|
+
and `pref` are no entry. Nonempty `data.words` containing only these classes
|
|
6466
|
+
still supplies the Dictionary heading, with no entries or key; a stated verb
|
|
6467
|
+
pattern still supplies its head table. A word's sort
|
|
6468
|
+
key and pronunciation come from its declaration; a glossary's choices belong
|
|
6469
|
+
to its own entries.
|
|
6306
6470
|
|
|
6307
6471
|
| Column | What it holds |
|
|
6308
6472
|
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
6309
6473
|
| `language` | The language the word is listed under. |
|
|
6310
6474
|
| `language_tag` | That language note's `data.abbreviation`, or its full name where it states none. |
|
|
6311
6475
|
| `name` | The word's form. |
|
|
6312
|
-
| `name_sort` |
|
|
6476
|
+
| `name_sort` | The word's sort key, or its form where unstated. |
|
|
6313
6477
|
| `letter` | The heading letter: the first letter of `name_sort`, accents taken off and apostrophes skipped, in capitals. |
|
|
6314
|
-
| `pronunciation` |
|
|
6478
|
+
| `pronunciation` | The word's respelling; `NULL` where unstated. |
|
|
6315
6479
|
| `class` | The word's class, as written. |
|
|
6480
|
+
| `plural` | The noun's explicit plural, else its listed language's first matching replacement; `NULL` where unavailable or not a noun. |
|
|
6481
|
+
| `field` | The word's field, printed as a tag beside the entry; `NULL` where unstated. |
|
|
6316
6482
|
| `etymology` | `{ kind, language, language_tag, form, parts, root, frame }` from the word's `source`, `built`, `root` and `frame`; an inherited word's is `inherited` from the language that states it. `NULL` where there is none. |
|
|
6317
6483
|
| `senses` | A list of `{ text, bodies }`: one per sense of the word's gloss, with no bodies. A dictionary numbers a word's senses where it has more than one. |
|
|
6318
6484
|
| `usage` | The Addresses of the notes whose prose cites the word, as the language that states it records them. |
|
|
6319
|
-
| `
|
|
6485
|
+
| `verbs` | The listed language's stated `{ invariant: true }` or six-person pattern, repeated as metadata for one head table; `NULL` where unstated. |
|
|
6320
6486
|
| `depth` | How far up the language's lineage the word is stated: `0` for its own. |
|
|
6321
6487
|
|
|
6488
|
+
A daughter language with no own words has no automatic Dictionary section.
|
|
6489
|
+
A glossary word in that resolved language links to its visible defining
|
|
6490
|
+
ancestor's dictionary entry. The glossary's `language` remains the resolved
|
|
6491
|
+
daughter language.
|
|
6492
|
+
|
|
6322
6493
|
**`terms`** is one row per term per note that owns it: an entry of a culture's
|
|
6323
6494
|
or an affiliation's `data.glossary`, or an affiliation's rank or office.
|
|
6324
6495
|
|
|
6325
|
-
| Column | What it holds
|
|
6326
|
-
| --------------- |
|
|
6327
|
-
| `owner` | The Address of the culture or affiliation that owns the term.
|
|
6328
|
-
| `owner_kind` | `culture` or `affiliation`.
|
|
6329
|
-
| `language` | The language the term is in: a glossary entry's, as it resolves; a rank's or office's, the language its body's glossary resolves to. `NULL` where none resolves.
|
|
6330
|
-
| `language_tag` | That language note's `data.abbreviation`, or its full name where it states none.
|
|
6331
|
-
| `name` | The headword.
|
|
6332
|
-
| `name_sort` |
|
|
6333
|
-
| `letter` | The heading letter, as for a word.
|
|
6334
|
-
| `pronunciation` |
|
|
6335
|
-
| `
|
|
6336
|
-
| `
|
|
6337
|
-
| `
|
|
6338
|
-
| `
|
|
6339
|
-
| `
|
|
6496
|
+
| Column | What it holds |
|
|
6497
|
+
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
6498
|
+
| `owner` | The Address of the culture or affiliation that owns the term. |
|
|
6499
|
+
| `owner_kind` | `culture` or `affiliation`. |
|
|
6500
|
+
| `language` | The language the term is in: a glossary entry's, as it resolves; a rank's or office's, the language its body's glossary resolves to. `NULL` where none resolves. |
|
|
6501
|
+
| `language_tag` | That language note's `data.abbreviation`, or its full name where it states none. |
|
|
6502
|
+
| `name` | The headword. |
|
|
6503
|
+
| `name_sort` | The glossary entry's sort key, else the dictionary word's, else the headword. |
|
|
6504
|
+
| `letter` | The heading letter, as for a word. |
|
|
6505
|
+
| `pronunciation` | The glossary entry's respelling, else the dictionary word's; `NULL` where neither states one. |
|
|
6506
|
+
| `class` | The matching dictionary word's class, as written; `NULL` where no word matches. |
|
|
6507
|
+
| `word` | The matching word's anchored dictionary entry: the resolved language's when it has own words, else the visible defining language's; `NULL` where no word matches. |
|
|
6508
|
+
| `senses` | A list of `{ text, bodies }`: a dictionary word's gloss senses with no bodies, or the entry's definition with its owner, or a rank's or office's descriptions with their bodies. |
|
|
6509
|
+
| `usage` | Citation Addresses: governance usage, inherited dictionary usage or the defining owner; a copied reached title also cites its selecting owner. |
|
|
6510
|
+
| `common` | Whether this owner's glossary entry marks the term part of its core vocabulary. |
|
|
6511
|
+
| `origins` | Which sources gave it: `rank`, `office`, `glossary`. |
|
|
6512
|
+
| `cultures` | The cultures associated through the owner and its parents, as a list of Addresses for selecting reached ranks and offices. |
|
|
6513
|
+
|
|
6514
|
+
A standalone word entry without a definition uses the dictionary's
|
|
6515
|
+
citations; an explicit term cites its owner. A rank or office keeps its
|
|
6516
|
+
body's and members' or holders' citations, including when its owner's
|
|
6517
|
+
glossary names a matching word or supplies a definition. An owner selecting
|
|
6518
|
+
a reached title also joins its own Address to that title's citations.
|
|
6340
6519
|
|
|
6341
6520
|
**A term reaches the cultures its owner reaches.** A culture's own terms reach
|
|
6342
6521
|
the culture. An affiliation's terms — its ranks, its offices and its own
|
|
6343
6522
|
glossary entries alike — reach its culture, its own or one the index resolves
|
|
6344
6523
|
for it, and the culture of every affiliation above it through `data.parents`.
|
|
6345
|
-
|
|
6346
|
-
|
|
6347
|
-
|
|
6524
|
+
`cultures` records those associations for custom queries. The default
|
|
6525
|
+
Glossary section selects its own owner's declared `data.glossary` entries;
|
|
6526
|
+
it adds no other rows from this reach. A custom view that includes reached
|
|
6527
|
+
governance rows can select `origins` containing `rank` or `office` and prints
|
|
6528
|
+
`common` only for the owner's own rows. An affiliation that reaches no culture
|
|
6529
|
+
has an empty list.
|
|
6348
6530
|
|
|
6349
6531
|
**A rank and an office of one title in one body are one row**, the rank's
|
|
6350
6532
|
sense first, and where their descriptions are identical, one sense.
|
|
@@ -6355,23 +6537,22 @@ of a culture it reaches, names it, or where it is a word of its language,
|
|
|
6355
6537
|
compared without case. A title of several words, as `Knight-Captain` or
|
|
6356
6538
|
`Lord Steward`, always is.
|
|
6357
6539
|
|
|
6358
|
-
**A glossary entry with a `definition`**
|
|
6540
|
+
**A glossary entry with a `definition`** carries that definition instead of a
|
|
6541
|
+
matching dictionary word's senses. It replaces the senses of its owner's own
|
|
6359
6542
|
rank or office of that name. Otherwise it is a term of its owner's own, cited
|
|
6360
6543
|
from the owner, so a culture's definition of a rank one of its affiliations
|
|
6361
|
-
holds is a second row beside the rank's
|
|
6362
|
-
|
|
6363
|
-
|
|
6364
|
-
**A glossary entry without a `definition`**
|
|
6365
|
-
|
|
6366
|
-
|
|
6367
|
-
|
|
6368
|
-
|
|
6369
|
-
|
|
6370
|
-
|
|
6371
|
-
|
|
6372
|
-
|
|
6373
|
-
one-word title in. Where several entries state one of these, the first in the
|
|
6374
|
-
order of the owner's Address wins.
|
|
6544
|
+
holds is a second row beside the rank's. A glossary of that culture combines
|
|
6545
|
+
the senses under one headword where the rows share a language.
|
|
6546
|
+
|
|
6547
|
+
**A glossary entry without a `definition`** names a word of its resolved
|
|
6548
|
+
language, or a rank or office that reaches its owner. A dictionary word gives
|
|
6549
|
+
the entry all its senses, its class and a link to its entry on the language
|
|
6550
|
+
page; a rank or office gives its descriptions. Where the owner has a rank or
|
|
6551
|
+
office of the same title as the word, its distinct descriptions follow the
|
|
6552
|
+
dictionary senses. The glossary entry can state its own `name_sort` or
|
|
6553
|
+
`pronunciation`. Names are compared after NFC normalisation, with case kept. Its `common` value belongs to its owner, so a
|
|
6554
|
+
culture entry naming an affiliation's rank does not mark the affiliation's
|
|
6555
|
+
entry common. Naming the rank also admits a title of one word.
|
|
6375
6556
|
|
|
6376
6557
|
**The datafiles.** `package-build content-index` writes each relation beside
|
|
6377
6558
|
the index: `<package>-dictionary.jsonl`, sorted by `language`, `name_sort` and
|
|
@@ -7323,7 +7504,7 @@ the map for the pack it is writing and falls back to `default` when there is no
|
|
|
7323
7504
|
such key, so a mistyped `journal:` files the folder wherever the default puts it
|
|
7324
7505
|
— exactly the hierarchy the key was written to override, and silently.
|
|
7325
7506
|
|
|
7326
|
-
**A folder note requires a body
|
|
7507
|
+
**A folder note requires a body.** Its body does not
|
|
7327
7508
|
produce a documentation journal or take part in `docEntryTypes`.
|
|
7328
7509
|
In a compiled Foundry journal, a wikilink to a folder prints its label as text:
|
|
7329
7510
|
the folder can materialise in several packs and has no single compendium UUID.
|