@heroiclands/package-build 23.13.0 → 24.0.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 +50 -0
- package/README.md +2 -1
- package/assets/preview/gitea.ini +12 -7
- package/assets/styles/content-base.css +150 -1
- package/bin/content-commands.mjs +356 -210
- package/bin/package-build.mjs +3 -2
- package/ci/check-banners.mjs +7 -7
- package/config.mjs +21 -6
- package/content-config.mjs +199 -80
- package/docs/api.md +93 -72
- package/docs/authoring/links-and-markup.md +316 -78
- package/docs/commands.md +248 -80
- package/docs/configuration.md +210 -102
- package/docs/content-format.md +2 -2
- package/docs/diagnostics.md +2 -2
- package/docs/getting-started.md +1 -1
- package/docs/guides/icons.md +1 -1
- package/docs/guides/module-project.md +5 -8
- package/docs/guides/release-and-deploy.md +2 -2
- package/docs/guides/site.md +155 -23
- package/docs/guides/system-project.md +1 -1
- package/docs/guides/writing-in-invented-scripts.md +1247 -0
- package/docs/index.md +1 -0
- package/docs/project-setup.md +28 -30
- package/docs/reference/format-details.md +589 -308
- package/docs/reference/note-types.md +40 -10
- package/docs/reference/theme-pages.md +127 -108
- package/docs/source-preview.md +15 -1
- package/engine/asset-shipping.mjs +22 -10
- package/engine/base-compiler.mjs +62 -104
- package/engine/changelog-lint.mjs +1 -1
- package/engine/content-address.mjs +1 -1
- package/engine/content-alerts.mjs +8 -4
- package/engine/content-blocks.mjs +26 -11
- package/engine/content-embeds.mjs +1 -1
- package/engine/content-expand.mjs +376 -0
- package/engine/content-figures.mjs +13 -6
- package/engine/content-format.yaml +8 -0
- package/engine/content-glyphs.mjs +213 -0
- package/engine/content-images.mjs +6 -7
- package/engine/content-links.mjs +3 -3
- package/engine/content-lint.mjs +1 -1
- package/engine/content-render.mjs +453 -0
- package/engine/content-scripts.mjs +326 -27
- package/engine/content-spans.mjs +4 -1
- package/engine/content-styles.mjs +91 -0
- package/engine/content-symbols.mjs +186 -0
- package/engine/content-verse.mjs +6 -18
- package/engine/core-report.mjs +169 -0
- package/engine/core-vocabulary.mjs +208 -0
- package/engine/dictionary-html.mjs +119 -0
- package/engine/field-reference.mjs +1 -1
- package/engine/frontmatter-lint.mjs +1 -1
- package/engine/heading-attributes.mjs +89 -0
- package/engine/helpers.mjs +61 -101
- package/engine/homepage.mjs +17 -29
- package/engine/html-minify.mjs +70 -0
- package/engine/index.mjs +8 -5
- package/engine/language-rows.mjs +8 -2
- package/engine/language-terms.mjs +115 -14
- package/engine/language-words.mjs +12 -0
- package/engine/logographic.mjs +255 -0
- package/engine/map-lexicon.mjs +221 -25
- package/engine/map-places.mjs +5 -4
- package/engine/markdown-expressions.mjs +0 -2
- package/engine/markdownlint-run.mjs +9 -3
- package/engine/markup-validation.mjs +21 -0
- package/engine/metre-declaration.mjs +134 -0
- package/engine/note-matter.mjs +2 -2
- package/engine/note-vocabulary.mjs +187 -3
- package/engine/pdf-build.mjs +68 -133
- package/engine/pdf-render.mjs +102 -44
- package/engine/post-fields.mjs +157 -0
- package/engine/preview-index.mjs +130 -0
- package/engine/preview-source.mjs +450 -0
- package/engine/project-init.mjs +5 -12
- package/engine/prose-config.mjs +3 -3
- package/engine/run-words.mjs +3 -2
- package/engine/script-emphasis-terms.mjs +38 -0
- package/engine/script-emphasis.mjs +295 -0
- package/engine/script-font-delivery.mjs +4 -4
- package/engine/site-build.mjs +265 -313
- package/engine/site-config.mjs +26 -238
- package/engine/site-files.mjs +175 -0
- package/engine/site-index.mjs +9 -4
- package/engine/site-preview.mjs +50 -523
- package/engine/site-reach.mjs +213 -0
- package/engine/site-render.mjs +668 -0
- package/engine/site-root.mjs +90 -39
- package/engine/site-search.mjs +161 -0
- package/engine/site-serve.mjs +274 -0
- package/engine/site-theme-banner.mjs +154 -0
- package/engine/site-theme-urls.mjs +125 -0
- package/engine/site-theme.mjs +939 -0
- package/engine/sql-tables.mjs +9 -6
- package/engine/text-maps.mjs +57 -10
- package/engine/typographer.mjs +248 -0
- package/engine/verse-metre.mjs +357 -0
- package/engine/wikilink-syntax.mjs +29 -47
- package/engine/wikilinks.mjs +758 -279
- package/engine/word-forms.mjs +39 -24
- package/engine/word-rows.mjs +12 -2
- package/engine/word-terms.mjs +29 -4
- package/manifest.mjs +3 -4
- package/package.json +10 -7
- package/{hugo-theme → site-theme}/data/banners.yaml +6 -10
- package/site-theme/layouts/base.hbs +31 -0
- package/site-theme/layouts/blog-list.hbs +30 -0
- package/site-theme/layouts/blog-post.hbs +40 -0
- package/site-theme/layouts/home.hbs +35 -0
- package/site-theme/layouts/list.hbs +20 -0
- package/site-theme/layouts/not-found.hbs +31 -0
- package/site-theme/layouts/page.hbs +7 -0
- package/site-theme/partials/copy-buttons.hbs +37 -0
- package/site-theme/partials/draft-notice.hbs +5 -0
- package/site-theme/partials/exturl.hbs +2 -0
- package/{hugo-theme/layouts/partials/footer.html → site-theme/partials/footer.hbs} +10 -7
- package/site-theme/partials/header.hbs +44 -0
- package/site-theme/partials/hero-banner.hbs +11 -0
- package/site-theme/partials/infobox-entry.hbs +2 -0
- package/site-theme/partials/infobox-section.hbs +31 -0
- package/site-theme/partials/infobox-value.hbs +2 -0
- package/site-theme/partials/infobox.hbs +18 -0
- package/site-theme/partials/list-members.hbs +9 -0
- package/site-theme/partials/nav-links.hbs +5 -0
- package/site-theme/partials/page-body.hbs +48 -0
- package/site-theme/partials/page-list.hbs +14 -0
- package/site-theme/partials/related.hbs +24 -0
- package/site-theme/partials/search-meta.hbs +6 -0
- package/site-theme/partials/search-names.hbs +2 -0
- package/site-theme/partials/search.hbs +52 -0
- package/site-theme/partials/tags.hbs +4 -0
- package/site-theme/partials/toc.hbs +7 -0
- package/{hugo-theme → site-theme}/static/css/style.css +14 -0
- package/stage.mjs +1 -2
- package/types/config.d.mts +8 -4
- package/types/content-config.d.mts +15 -15
- package/types/engine/asset-shipping.d.mts +5 -2
- package/types/engine/base-compiler.d.mts +20 -2
- package/types/engine/content-address.d.mts +1 -1
- package/types/engine/content-alerts.d.mts +8 -2
- package/types/engine/content-blocks.d.mts +11 -4
- package/types/engine/content-expand.d.mts +288 -0
- package/types/engine/content-figures.d.mts +11 -3
- package/types/engine/content-glyphs.d.mts +85 -0
- package/types/engine/content-images.d.mts +6 -7
- package/types/engine/content-links.d.mts +1 -1
- package/types/engine/content-render.d.mts +199 -0
- package/types/engine/content-scripts.d.mts +62 -0
- package/types/engine/content-spans.d.mts +1 -1
- package/types/engine/content-styles.d.mts +33 -0
- package/types/engine/content-symbols.d.mts +35 -0
- package/types/engine/core-report.d.mts +45 -0
- package/types/engine/core-vocabulary.d.mts +53 -0
- package/types/engine/dictionary-html.d.mts +8 -0
- package/types/engine/field-reference.d.mts +1 -1
- package/types/engine/heading-attributes.d.mts +20 -0
- package/types/engine/helpers.d.mts +3 -10
- package/types/engine/homepage.d.mts +11 -24
- package/types/engine/html-minify.d.mts +9 -0
- package/types/engine/index.d.mts +2 -1
- package/types/engine/language-terms.d.mts +24 -2
- package/types/engine/logographic.d.mts +45 -0
- package/types/engine/map-lexicon.d.mts +48 -8
- package/types/engine/map-places.d.mts +8 -0
- package/types/engine/markdown-expressions.d.mts +0 -2
- package/types/engine/metre-declaration.d.mts +39 -0
- package/types/engine/pdf-render.d.mts +6 -2
- package/types/engine/post-fields.d.mts +44 -0
- package/types/engine/preview-index.d.mts +72 -0
- package/types/engine/preview-source.d.mts +51 -0
- package/types/engine/script-emphasis-terms.d.mts +21 -0
- package/types/engine/script-emphasis.d.mts +84 -0
- package/types/engine/script-font-delivery.d.mts +4 -4
- package/types/engine/site-build.d.mts +71 -113
- package/types/engine/site-config.d.mts +14 -134
- package/types/engine/site-files.d.mts +73 -0
- package/types/engine/site-index.d.mts +11 -3
- package/types/engine/site-preview.d.mts +15 -19
- package/types/engine/site-reach.d.mts +76 -0
- package/types/engine/site-render.d.mts +173 -0
- package/types/engine/site-root.d.mts +14 -4
- package/types/engine/site-search.d.mts +54 -0
- package/types/engine/site-serve.d.mts +44 -0
- package/types/engine/site-theme-banner.d.mts +51 -0
- package/types/engine/site-theme-urls.d.mts +60 -0
- package/types/engine/site-theme.d.mts +127 -0
- package/types/engine/text-maps.d.mts +17 -3
- package/types/engine/typographer.d.mts +11 -0
- package/types/engine/verse-metre.d.mts +131 -0
- package/types/engine/wikilink-syntax.d.mts +30 -48
- package/types/engine/wikilinks.d.mts +330 -14
- package/types/engine/word-forms.d.mts +3 -2
- package/types/manifest.d.mts +3 -4
- package/types/stage.d.mts +1 -2
- package/types/vendor/markdownlint.d.mts +8 -0
- package/vendor/markdownlint.mjs +20388 -0
- package/engine/web-wikilinks.mjs +0 -594
- package/hugo-theme/layouts/404.html +0 -85
- package/hugo-theme/layouts/_default/baseof.html +0 -67
- package/hugo-theme/layouts/_default/list.html +0 -139
- package/hugo-theme/layouts/_default/single.html +0 -4
- package/hugo-theme/layouts/blog/list.html +0 -54
- package/hugo-theme/layouts/blog-post/single.html +0 -36
- package/hugo-theme/layouts/index.html +0 -75
- package/hugo-theme/layouts/partials/banner-url.html +0 -141
- package/hugo-theme/layouts/partials/cdn-url.html +0 -36
- package/hugo-theme/layouts/partials/dictionary-lists.html +0 -58
- package/hugo-theme/layouts/partials/draft-notice.html +0 -41
- package/hugo-theme/layouts/partials/draft-state.html +0 -26
- package/hugo-theme/layouts/partials/header.html +0 -35
- package/hugo-theme/layouts/partials/hero-banner.html +0 -85
- package/hugo-theme/layouts/partials/infobox/entry.html +0 -18
- package/hugo-theme/layouts/partials/infobox/items.html +0 -26
- package/hugo-theme/layouts/partials/infobox/section.html +0 -56
- package/hugo-theme/layouts/partials/infobox/value.html +0 -43
- package/hugo-theme/layouts/partials/infobox.html +0 -57
- package/hugo-theme/layouts/partials/page-body.html +0 -152
- package/hugo-theme/layouts/partials/related.html +0 -138
- package/hugo-theme/layouts/partials/search.html +0 -84
- package/hugo-theme/layouts/partials/site-url.html +0 -32
- package/hugo-theme/layouts/partials/tags.html +0 -30
- package/hugo-theme/layouts/partials/toc.html +0 -28
- package/hugo-theme/layouts/partials/warn-missing-banner.html +0 -3
- package/hugo-theme/layouts/shortcodes/cartouche.html +0 -64
- package/hugo-theme/layouts/shortcodes/exturl.html +0 -12
- package/hugo-theme/layouts/shortcodes/glyph.html +0 -43
- package/hugo-theme/layouts/shortcodes/pagelist.html +0 -63
- package/hugo-theme/theme.toml +0 -11
- package/types/engine/web-wikilinks.d.mts +0 -107
- /package/{hugo-theme → site-theme}/data/banner-kinds.yaml +0 -0
- /package/{hugo-theme → site-theme}/static/css/sohl-icons.css +0 -0
- /package/{hugo-theme → site-theme}/static/fonts/game-icons-kb.woff2 +0 -0
- /package/{hugo-theme → site-theme}/static/img/banners/takheperu-hieroglyphs.svg +0 -0
- /package/{hugo-theme → site-theme}/static/img/cartouches/takheperu.svg +0 -0
- /package/{hugo-theme → site-theme}/static/js/inline-spoilers.js +0 -0
|
@@ -463,11 +463,12 @@ These fields are accepted by every note type. A field's value can still be irrel
|
|
|
463
463
|
| `data.names` | a language's name lists | How this language's speakers are named, for `package-build npc new`: `pattern` builds a name from placeholders such as "{given} {clan}" and literal text, `given` maps a gender to a list of given names, `female` and `male` required, and every other key is a list of names a placeholder of the same name draws from. A language skill note only. See [name lists](format-details.md#name-lists). |
|
|
464
464
|
| `data.family` | an Address | The parent language, as a language skill note: this language reads the parent's words, and its parents' in turn, as its own. A language skill note only. See [a language's words](format-details.md#a-languages-words). |
|
|
465
465
|
| `data.abbreviation` | a string, such as `Prov.` | The tag a dictionary prints for the language, beside an entry's class and in an etymology, as `Prov.`; the language's full name where unstated. A language skill note only. See [a language's words](format-details.md#a-languages-words). |
|
|
466
|
+
| `data.core` | `true` or `false` | Whether the language must cover the core vocabulary: `true` lists it in the `package-build core` report. A language skill note only. See [the core vocabulary](format-details.md#the-core-vocabulary). |
|
|
466
467
|
| `data.classModifiers` | list of word class modifiers | The class modifiers the language uses, from the master word classes. A word's class may carry only these. Empty when unstated. A language skill note only. |
|
|
467
468
|
| `data.fields` | list of `{ name, holds }` | The fields the language's words are grouped under. A language skill note only. |
|
|
468
469
|
| `data.words` | list of `{ form, class, field, gloss, … }` | The words this language states, one map each, in authored order; its automatic dictionary sorts them alphabetically. A language skill note only. See [a language's words](format-details.md#a-languages-words). |
|
|
469
470
|
| `data.affixes` | list of `{ form, gloss, attaches?, examples? }` | The affixes a word's `built` pieces may name, each with its gloss. A language skill note only. |
|
|
470
|
-
| `data.grammar` | a map — `{ plural?, verbs?, agreement?, participles? }`
|
|
471
|
+
| `data.grammar` | a map — `{ plural?, verbs?, agreement?, participles?, native? }` | Optional noun plurals, one verb pattern, agreement, participles and the endings' logographic writings, for dictionary presentation, the mapped-run word check and logographic maps. Only the shape of supplied keys is checked; no word must follow or state a rule. A language skill note only. |
|
|
471
472
|
| `data.tongues` | list of `{ tag, meaning, language? }` | The tags a register row's `tongue` may name, each with what it means. A language skill note only. |
|
|
472
473
|
| `data.register` | list of `{ name, tongue?, kind?, built?, gloss?, why? }` | Every name the setting gives in the language's reach, with its tongue and pieces; the notes carrying each name are derived. A language skill note only. |
|
|
473
474
|
| `data.retired` | list of `{ form, instead?, why }` | The forms the setting does not write, and why. A language skill note only. |
|
|
@@ -481,6 +482,8 @@ These fields are accepted by every note type. A field's value can still be irrel
|
|
|
481
482
|
| `data.older` | list of `{ form, gloss?, layer? }` | The words and names older than the language's rules, which no sound or name rule holds. A language skill note only. |
|
|
482
483
|
| `data.negation` | a map — `{ particle, mutation? }` | How a verb is negated. A language skill note only. |
|
|
483
484
|
| `data.naming` | a map — `{ shapes?, edges?, draws?, heldFrom?, nearName? }` | The shapes, edges and sources the language's names keep beyond its words' rules. A language skill note only. |
|
|
485
|
+
| `data.emphasis` | `words`, `rubric` or `overline` | How the language marks a stressed word, over its script's `emphasis`: `rubric` or `overline` sets `*…*` and `**…**` so in a run of the language, and `words` marks it with a word, so either is a finding. Only a skill of `subType: language` states it. |
|
|
486
|
+
| `data.script` | a map — `{ fonts, emphasis, strongEmphasis? }` | A script note's faces and how it marks emphasis. Only a skill of `subType: script` states it. |
|
|
484
487
|
|
|
485
488
|
**Inner keys** — a key a field's value does not declare is an error at its own line and column.
|
|
486
489
|
|
|
@@ -491,12 +494,13 @@ These fields are accepted by every note type. A field's value can still be irrel
|
|
|
491
494
|
| `data.fields[].name` | a string | yes | The field's name, which a word's `field` names. |
|
|
492
495
|
| `data.fields[].holds` | a string | yes | What the field holds. |
|
|
493
496
|
| `data.words[].form` | the word as cited, bare | yes | The word as cited, with no backticks. |
|
|
494
|
-
| `data.words[].variants` | a list of forms | no | The word's other forms, such as a long form beside a short one; a marked use of one cites the word.
|
|
497
|
+
| `data.words[].variants` | a list of forms | no | The word's other forms, such as a long form beside a short one; a marked use of one cites the word, and a mapped run accepts it and the forms the language's rules derive from it. |
|
|
495
498
|
| `data.words[].name_sort` | a string | no | The sort key; the form when unstated. |
|
|
496
499
|
| `data.words[].class` | a word class, base first, such as `n I f` | yes | A class from the master word classes: a base, then the modifiers the language declares in `classModifiers`. |
|
|
497
500
|
| `data.words[].plural` | a string | no | The noun's explicit plural, where it differs from the language's optional plural rule. A dictionary uses this form before the rule; no rule agreement is checked. |
|
|
498
501
|
| `data.words[].field` | one of the language's `fields` names | yes | The field tag beside the dictionary entry, named in the language's `fields`. |
|
|
499
502
|
| `data.words[].gloss` | a string, or a list of senses | yes | The meaning, in brief; a list states one sense per entry, which a dictionary numbers. |
|
|
503
|
+
| `data.words[].concept` | a core concept's id, or a list of them | no | The core concepts the word serves, each an `id` of a `data.concepts` list. The core report counts the word toward them. |
|
|
500
504
|
| `data.words[].source` | a map — `{ kind, language?, form? }` | no | Where the word comes from. |
|
|
501
505
|
| `data.words[].source.kind` | one of inherited, borrowed, kept, worn, coined, substrate, island | yes | How the word came into the tongue. |
|
|
502
506
|
| `data.words[].source.language` | a language skill Address | no | The tongue the word was borrowed from; required for `borrowed`. |
|
|
@@ -507,10 +511,10 @@ These fields are accepted by every note type. A field's value can still be irrel
|
|
|
507
511
|
| `data.words[].tones` | a string | no | A tone pattern, such as `LHL`. |
|
|
508
512
|
| `data.words[].root` | a string | no | A consonantal skeleton, such as `d-l-k`. |
|
|
509
513
|
| `data.words[].frame` | a frame of the language's `sounds.frames` | no | The frame a root is set in, named in the language's `sounds.frames`. |
|
|
510
|
-
| `data.words[].native` | a list of `{ map, font?, text }` | no | The word's native form under a map
|
|
514
|
+
| `data.words[].native` | a list of `{ map, font?, text }` | no | The word's native form under a map. Under a map that spells by its rows it is stated only where the rows spell the word differently, and the word's derived forms are spelled by the rows; under a logographic map it is the word's writing, which its derived forms and the words built on it are written from. |
|
|
511
515
|
| `data.words[].native[].map` | a mapping note's `data.map.name` | yes | The map the native form is written for. |
|
|
512
516
|
| `data.words[].native[].font` | a face the map lists | no | The one face the native form is for; unstated, it is for every face the map lists, and a form stated for a face wins over it there. |
|
|
513
|
-
| `data.words[].native[].text` | the word in the script, as the map's characters | yes | The word as the script writes it, where the map's rows would write it otherwise.
|
|
517
|
+
| `data.words[].native[].text` | the word in the script, as the map's characters | yes | The word as the script writes it, where the map's rows would write it otherwise, or as a logographic map writes it. |
|
|
514
518
|
| `data.affixes[].form` | the affix as written, such as `-rith` | no | The affix as a word's `built` names it; absent on a zero affix. |
|
|
515
519
|
| `data.affixes[].zero` | `true` | no | The affix is written as nothing, such as a case with no ending; it states no `form`, prints as `∅`, and no `built` piece names it. |
|
|
516
520
|
| `data.affixes[].kind` | one of case, derivation, tense, aspect, mood, voice, name, lineage | no | What the affix makes. |
|
|
@@ -525,6 +529,10 @@ These fields are accepted by every note type. A field's value can still be irrel
|
|
|
525
529
|
| `data.affixes[].examples` | a list of strings | no | The names the affix is read from. |
|
|
526
530
|
| `data.affixes[].barredAfter` | a list of sounds | no | The sounds a stem may not close on to take the affix. |
|
|
527
531
|
| `data.affixes[].tones` | a tone pattern, such as `L` | no | The tone pattern the affix carries, written as a word's `tones` is. |
|
|
532
|
+
| `data.affixes[].native` | a list of `{ map, font?, text }` | no | The affix's writing under a logographic map, which a word whose `built` names the affix is written with. |
|
|
533
|
+
| `data.affixes[].native[].map` | a mapping note's `data.map.name` | yes | The map the native form is written for. |
|
|
534
|
+
| `data.affixes[].native[].font` | a face the map lists | no | The one face the native form is for; unstated, it is for every face the map lists, and a form stated for a face wins over it there. |
|
|
535
|
+
| `data.affixes[].native[].text` | the word in the script, as the map's characters | yes | The word as the script writes it, where the map's rows would write it otherwise, or as a logographic map writes it. |
|
|
528
536
|
| `data.grammar.plural` | list of `{ ending, becomes }` | no | Default noun plurals, replacing the first matching literal ending in authored order. A word's explicit plural wins; no word is checked against this rule. |
|
|
529
537
|
| `data.grammar.plural[].ending` | a literal ending string, which may be empty | yes | The bare suffix replaced by this rule; empty matches every noun. |
|
|
530
538
|
| `data.grammar.plural[].becomes` | a literal ending string, which may be empty | yes | The bare replacement; empty removes the matching suffix. |
|
|
@@ -544,6 +552,11 @@ These fields are accepted by every note type. A field's value can still be irrel
|
|
|
544
552
|
| `data.grammar.participles` | a map — `{ root, affixes }` | no | Participles on the verb root: a verb closing on a `root` ending drops it, and each named suffix attaches to what is left; a participle closing on an `agreement` ending agrees. Read by the mapped-run word check. |
|
|
545
553
|
| `data.grammar.participles.root` | a list of closing letters, such as `[athen, ethen]` | yes | The infinitive endings a verb's citation form drops to give its root, the longest that matches first. A verb closing on none has no participle. |
|
|
546
554
|
| `data.grammar.participles.affixes` | a list of suffixes of `data.affixes`, such as `[-andar, -thos]` | yes | The participle suffixes, each attaching to the root as its own `replaces` says: `vowel` or letters take the place of the root's close, and none adds it whole. |
|
|
555
|
+
| `data.grammar.native` | a list of `{ ending, map, font?, text }` | no | Under a logographic map, the signs a noun's plural or a verb's present form is written with after its stem's writing, one entry per ending, map and face. |
|
|
556
|
+
| `data.grammar.native[].ending` | one of plural, I, you, heShe, we, youAll, they | yes | The ending written: `plural` for a noun's plural, or a person of `verbs.persons` for a verb's present form. |
|
|
557
|
+
| `data.grammar.native[].map` | a logographic mapping note's `data.map.name` | yes | The logographic map the ending is written for. |
|
|
558
|
+
| `data.grammar.native[].font` | a face the map lists | no | The one face the writing is for; unstated, it is for every face the map lists, and a writing stated for a face wins over it there. |
|
|
559
|
+
| `data.grammar.native[].text` | the ending in the script, as the map's characters; empty writes the stem alone | yes | The signs written after the stem's writing. |
|
|
547
560
|
| `data.tongues[].tag` | a tag such as `dunhari`, or `exonym:<tongue>` | yes | The tag a register row's `tongue` names: lowercase letters and digits, or a tag closing on `:<tongue>`, which declares one tag per tongue named after the colon. |
|
|
548
561
|
| `data.tongues[].meaning` | a string | yes | What a name of this tongue is. |
|
|
549
562
|
| `data.tongues[].language` | a language skill Address | no | The language note the tag names, where it is one. |
|
|
@@ -579,7 +592,10 @@ These fields are accepted by every note type. A field's value can still be irrel
|
|
|
579
592
|
| `data.sounds.clusters.groups[].what` | a string, such as `a nasal and a fricative` | yes | What the clusters of the group are made of. |
|
|
580
593
|
| `data.sounds.clusters.groups[].clusters` | a list of clusters | yes | The clusters, as written; a digraph counts as one consonant. |
|
|
581
594
|
| `data.sounds.clusters.groups[].use` | one of common, sparing | yes | How often the group's clusters stand inside a word. |
|
|
582
|
-
| `data.sounds.stress` |
|
|
595
|
+
| `data.sounds.stress` | a map — `{ two, longer, mark? }` | no | Where a word's stress falls, as a rule a program reads. |
|
|
596
|
+
| `data.sounds.stress.two` | one of first, last | yes | The stressed syllable of a word of two syllables. |
|
|
597
|
+
| `data.sounds.stress.longer` | one of antepenultimate, penultimate, final | yes | The stressed syllable of a word of three or more, counted from its end. |
|
|
598
|
+
| `data.sounds.stress.mark` | one of acute, grave, circumflex | no | The diacritic that marks a stress the rule would not choose; it moves the stress to the syllable it sits on. |
|
|
583
599
|
| `data.sounds.finals` | list of `{ final, like }` | no | The syllable finals, for a language whose syllables are parsed by them. |
|
|
584
600
|
| `data.sounds.finals[].final` | a final as written, such as `ang` | yes | The final. |
|
|
585
601
|
| `data.sounds.finals[].like` | a string | yes | What it sounds like. |
|
|
@@ -691,6 +707,9 @@ These fields are accepted by every note type. A field's value can still be irrel
|
|
|
691
707
|
| `data.naming.nearName.examples` | list of `{ near, given }` | no | Worked near names, each beside its given name. |
|
|
692
708
|
| `data.naming.nearName.examples[].near` | a near name, such as `Anlâ` | yes | The near name. |
|
|
693
709
|
| `data.naming.nearName.examples[].given` | a given name | yes | The given name it is the near name of. |
|
|
710
|
+
| `data.script.fonts` | list of installed faces' slugs | yes | The faces the script is written in, by the slug `font=` names them by. A face belongs to one script. |
|
|
711
|
+
| `data.script.emphasis` | `rubric` or `overline` | yes | How the script marks a stressed word: `rubric` sets it in red, `overline` draws a line above it. It sets `*…*` and `**…**` inside a run in one of its faces, unless the run's language states its own `emphasis`. |
|
|
712
|
+
| `data.script.strongEmphasis` | `rubric` or `overline` | no | The convention `**…**` takes instead of `emphasis`'s. |
|
|
694
713
|
|
|
695
714
|
**System mappings**
|
|
696
715
|
|
|
@@ -972,18 +991,26 @@ Lore records in-world knowledge. A `culture` describes a people; a `custom` desc
|
|
|
972
991
|
|
|
973
992
|
### doc
|
|
974
993
|
|
|
975
|
-
**Subtypes:** `rules`, `userguide`, `reference`, `howto`, `concept`, `settingguide`.
|
|
994
|
+
**Subtypes:** `rules`, `userguide`, `reference`, `howto`, `concept`, `settingguide`, `post`.
|
|
976
995
|
|
|
977
|
-
| Field
|
|
978
|
-
|
|
|
979
|
-
| `data.
|
|
980
|
-
| `data.
|
|
996
|
+
| Field | Shape | Meaning |
|
|
997
|
+
| --------------- | ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
998
|
+
| `data.concepts` | list of `{ id, gloss, group }` | The concepts of a core vocabulary, in the order the report lists them. See [the core vocabulary](format-details.md#the-core-vocabulary). |
|
|
999
|
+
| `data.date` | string | The day a post was published, as `YYYY-MM-DD`. Required on a `post`; no other subType states it. Posts are listed and fed newest first by it. |
|
|
1000
|
+
| `data.author` | string | Who wrote a post, as the byline prints them. A post that names none carries the site's byline, the first entry of `authors`; no other subType states it. |
|
|
1001
|
+
| `data.culture` | an Address | The culture a setting guide introduces, as a culture lore note. Required on `settingguide`; no other subType states it. |
|
|
1002
|
+
| `data.map` | a map — `{ name, logographic?, vowels?, fonts, rows }` | A mapping, which text marked `map=` with its `name` is rewritten by before it is set. See [mapping notes](format-details.md#mapping-notes). |
|
|
1003
|
+
| `data.metres` | list of `{ name, beats, kind }` | The metres a verse fence's `scan=` names. A fence that states one is warned at each line that cannot have its beats. See [metres](../authoring/links-and-markup.md#metre). |
|
|
981
1004
|
|
|
982
1005
|
**Inner keys** — a key a field's value does not declare is an error at its own line and column.
|
|
983
1006
|
|
|
984
1007
|
| Key | Shape | Required | Meaning |
|
|
985
1008
|
| -------------------------------- | ---------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
1009
|
+
| `data.concepts[].id` | lowercase letters, digits and `-` | yes | The concept's id, which a word's `concept` names. Unique in the package. |
|
|
1010
|
+
| `data.concepts[].gloss` | a short gloss, such as `a smell; a scent` | yes | What the concept means, in brief. |
|
|
1011
|
+
| `data.concepts[].group` | a group name, such as `senses` | yes | The group the report lists the concept under. |
|
|
986
1012
|
| `data.map.name` | string | yes | What `map=` names the map by: lowercase letters, digits and `-`, unique in the package. |
|
|
1013
|
+
| `data.map.logographic` | `true` | no | The script writes meanings: a mapped run's words are written by the language's lexicon alone, and the rows write only the text between them. |
|
|
987
1014
|
| `data.map.vowels` | string | no | The characters a row's `before: vowel` reads as vowels; any other letter is a consonant. |
|
|
988
1015
|
| `data.map.rows` | list of `[from, to]` or `{ from, to, before?, at? }` | yes | The rewrites, each `[from, to]` or `{ from, to, before?, at? }`: `before` is `vowel` or `consonant`, `at` is `start` or `end`. The longest `from` wins, and a character no row matches passes through. |
|
|
989
1016
|
| `data.map.rows[].from` | a string of one or more characters | yes | The one or more characters the row matches. |
|
|
@@ -997,6 +1024,9 @@ Lore records in-world knowledge. A `culture` describes a people; a `custom` desc
|
|
|
997
1024
|
| `data.map.fonts[].rows[].to` | a string, which may be empty | yes | What the row writes in their place; empty to drop them. |
|
|
998
1025
|
| `data.map.fonts[].rows[].before` | string | no | `vowel` or `consonant`: what must follow the match for the row to apply. |
|
|
999
1026
|
| `data.map.fonts[].rows[].at` | string | no | `start` or `end`: where the match must sit for the row to apply. |
|
|
1027
|
+
| `data.metres[].name` | string | yes | What a verse fence's `scan=` names the metre by: lowercase letters, digits and `-`, unique in the package. |
|
|
1028
|
+
| `data.metres[].beats` | a whole number above zero | yes | The beats of one line. |
|
|
1029
|
+
| `data.metres[].kind` | one of accentual | yes | How the beats are counted: `accentual`, one beat for each stressed syllable the language's stress rule and the beat convention give. |
|
|
1000
1030
|
|
|
1001
1031
|
### macro
|
|
1002
1032
|
|
|
@@ -7,8 +7,9 @@ subType: reference
|
|
|
7
7
|
|
|
8
8
|
# What the theme draws
|
|
9
9
|
|
|
10
|
-
`package-build site`
|
|
11
|
-
|
|
10
|
+
`package-build site build` settles a page's front matter and body; the shared
|
|
11
|
+
site theme draws the page around them. This reference describes that second
|
|
12
|
+
half —
|
|
12
13
|
the infobox rail, the hero band, the generated sections, the related card,
|
|
13
14
|
search, and the markup an image or a figure renders as — and names the
|
|
14
15
|
classes a consumer styles against.
|
|
@@ -30,7 +31,7 @@ A place’s Government row links to its authored governing affiliation. Explicit
|
|
|
30
31
|
The toolchain settles what each box holds and in what order — see
|
|
31
32
|
[the infobox](format-details.md#the-infobox) for the field semantics, the
|
|
32
33
|
three states a system box can say, and the four section layouts a box is
|
|
33
|
-
built from. On the website, `
|
|
34
|
+
built from. On the website, the `infobox` partial draws the whole list by
|
|
34
35
|
switching on a section's `layout` and a value's `kind`, never on a note type
|
|
35
36
|
or a field name:
|
|
36
37
|
|
|
@@ -121,13 +122,13 @@ A page whose front matter declares no `infoboxes:` renders no rail.
|
|
|
121
122
|
|
|
122
123
|
## The hero banner
|
|
123
124
|
|
|
124
|
-
Nearly every page opens with a hero band, and `
|
|
125
|
+
Nearly every page opens with a hero band, and the `hero-banner` partial
|
|
125
126
|
decides what sits behind it. A page arrives with its hero image stated in one
|
|
126
127
|
of two ways, and the difference is who resolved it: a content page carries
|
|
127
128
|
`data.banner`, which the build resolved from the asset Address the note
|
|
128
129
|
declared into the address its asset host serves; a hand-authored page carries
|
|
129
130
|
a top-level `banner:`, which the theme resolves against `params.cdnBaseURL`
|
|
130
|
-
(see [`params.cdnBaseURL`](../configuration.md#the-
|
|
131
|
+
(see [`params.cdnBaseURL`](../configuration.md#what-the-site-build-reads)).
|
|
131
132
|
|
|
132
133
|
**Resolution order.**
|
|
133
134
|
|
|
@@ -143,13 +144,13 @@ a top-level `banner:`, which the theme resolves against `params.cdnBaseURL`
|
|
|
143
144
|
4. `images/banners/default.webp` — when the page has no type, **and** whenever
|
|
144
145
|
the name picked by 2 or 3 is not in the declared inventory.
|
|
145
146
|
|
|
146
|
-
**Why step 4 is a declaration, not a test.**
|
|
147
|
-
whether a URL exists, so a banner that was never drawn would 404 in
|
|
148
|
-
the band renders with its title, palette and gradient intact behind
|
|
149
|
-
and nothing fails: not the build, not
|
|
150
|
-
`
|
|
151
|
-
|
|
152
|
-
|
|
147
|
+
**Why step 4 is a declaration, not a test.** The build cannot ask a remote
|
|
148
|
+
host whether a URL exists, so a banner that was never drawn would 404 in
|
|
149
|
+
silence — the band renders with its title, palette and gradient intact behind
|
|
150
|
+
a dead URL, and nothing fails: not the build, not the deploy guard.
|
|
151
|
+
`banners.yaml` is the declaration that stands in for the test the template
|
|
152
|
+
cannot make. A name listed in its `available` is asserted to exist; a resolved
|
|
153
|
+
name that is absent falls back to `fallback`, and the build reports one
|
|
153
154
|
deduplicated warning naming the missing banner and the first page that wanted
|
|
154
155
|
it. The fallback applies only to a relative path landing directly in the
|
|
155
156
|
declared `dir` — an absolute URL, and a fragment pointing anywhere else under
|
|
@@ -158,7 +159,7 @@ either and must not second-guess an address it cannot know about. A step 1
|
|
|
158
159
|
address is not checked for the same reason: the question has already been
|
|
159
160
|
answered upstream.
|
|
160
161
|
|
|
161
|
-
**The kind mapping.** `
|
|
162
|
+
**The kind mapping.** `banner-kinds.yaml` declares, once, which banner a
|
|
162
163
|
page of each note `type` opens with. A type maps to one banner name for all of
|
|
163
164
|
its subTypes, or to a table that names a banner for every subType the note
|
|
164
165
|
vocabulary declares for it:
|
|
@@ -178,20 +179,15 @@ kinds:
|
|
|
178
179
|
warning. A type missing from the file resolves to its own name, so a kind with
|
|
179
180
|
no declared art still produces the missing-banner warning. The lint check and
|
|
180
181
|
the test suite fail on a mapped name that `banners.yaml` does not declare, and
|
|
181
|
-
on a type or subType of the note vocabulary that the mapping omits.
|
|
182
|
-
publishing its own artwork set ships its own `data/banner-kinds.yaml` beside
|
|
183
|
-
its `data/banners.yaml`.
|
|
182
|
+
on a type or subType of the note vocabulary that the mapping omits.
|
|
184
183
|
|
|
185
|
-
**One resolver.** The order above lives in
|
|
186
|
-
returns a URL or an empty string; `hero-banner
|
|
187
|
-
|
|
184
|
+
**One resolver.** The order above lives in one function of the engine, which
|
|
185
|
+
returns a URL or an empty string; the `hero-banner` partial is given the
|
|
186
|
+
result.
|
|
188
187
|
|
|
189
|
-
**Keeping the inventory honest.** The lint check over `
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
published page. A consumer publishing its own artwork set replaces the whole
|
|
193
|
-
list by shipping its own `data/banners.yaml`, which Hugo reads in preference
|
|
194
|
-
to the theme's bundled one, and can run the same check against it.
|
|
188
|
+
**Keeping the inventory honest.** The lint check over `banners.yaml` fetches
|
|
189
|
+
every declared name from the asset host and fails on any non-200 response, so
|
|
190
|
+
a name added optimistically is caught here rather than on a published page.
|
|
195
191
|
|
|
196
192
|
**Declining a hero image.** `banner: none` on a hand-authored page, and a
|
|
197
193
|
blank `data.banner` on a note (which the build emits for `data.banner: none`),
|
|
@@ -246,7 +242,7 @@ is the way to choose different contents for one, or to turn one off.
|
|
|
246
242
|
|
|
247
243
|
## The related card
|
|
248
244
|
|
|
249
|
-
`
|
|
245
|
+
The `related` partial renders a bordered "Related" card below the body,
|
|
250
246
|
listing the pages connected to this one. The build emits this front matter on
|
|
251
247
|
every content page; what links to a page is a fact about every other page, so
|
|
252
248
|
an authored `related:` is refused and dropped:
|
|
@@ -386,13 +382,37 @@ stacks as well. The Foundry stylesheet draws the same.
|
|
|
386
382
|
| `.verse-part` | one entry's text, in the body serif unless its face sets it |
|
|
387
383
|
| `.verse-secondary` | every entry after a column's first, muted |
|
|
388
384
|
|
|
385
|
+
## Emphasis in a script
|
|
386
|
+
|
|
387
|
+
Emphasis inside a run set in a face stays an `<em>` or a `<strong>`, and its
|
|
388
|
+
class names the convention its language or script states (see
|
|
389
|
+
[script notes and emphasis](format-details.md#script-notes-and-emphasis)):
|
|
390
|
+
|
|
391
|
+
| class | drawn as |
|
|
392
|
+
| ---------------- | ----------------------------- |
|
|
393
|
+
| `.emph-rubric` | the text in `var(--rubric)` |
|
|
394
|
+
| `.emph-overline` | the text with a line above it |
|
|
395
|
+
|
|
396
|
+
`.script em` and `.script strong` keep the face's Regular: no slant, no added
|
|
397
|
+
weight, and `font-synthesis: none`. A script whose notes state no convention
|
|
398
|
+
gives a bare `<em>` or `<strong>`, which therefore looks like the text around
|
|
399
|
+
it.
|
|
400
|
+
|
|
401
|
+
The theme's `--rubric` is `#e0705f`, a warm red for its dark ground. Because a
|
|
402
|
+
rubric carries emphasis by colour alone, it holds 4.5:1 against `--bg`,
|
|
403
|
+
`--bg-card` and `--surface`, and 1.75:1 against `--text`, so a reader who
|
|
404
|
+
cannot see its hue still sees a lighter or darker word. A site that overrides
|
|
405
|
+
`--rubric` keeps both. Foundry's base stylesheet sets the same classes from
|
|
406
|
+
`--pb-rubric`, `light-dark(#9c281b, #e0705f)`, against Foundry's journal page in
|
|
407
|
+
each theme, and the book prints its rubric in `#9c281b` on its paper.
|
|
408
|
+
|
|
389
409
|
## Search
|
|
390
410
|
|
|
391
411
|
`params.search = true` renders a search box in the header; left unset (or
|
|
392
|
-
`false`), `
|
|
412
|
+
`false`), the `search` partial renders nothing. The box, and everything it
|
|
393
413
|
opens, is the theme's own — the index it reads is not.
|
|
394
414
|
|
|
395
|
-
**Where the index comes from.** `package-build site
|
|
415
|
+
**Where the index comes from.** `package-build site build` writes a
|
|
396
416
|
[Pagefind](https://pagefind.app) index at `pagefind/` beside the rendered
|
|
397
417
|
pages, when `site.search` in `package-build.config.yaml` is left at its
|
|
398
418
|
default of `true` (see [`site.search`](../configuration.md#site) and
|
|
@@ -403,26 +423,40 @@ Pagefind version. Turning `params.search` on without `site.search` indexing
|
|
|
403
423
|
the site (or with it set `false`) shows an empty results box that never finds
|
|
404
424
|
anything — the two settings are independent, and a consumer sets both.
|
|
405
425
|
|
|
406
|
-
Both files are
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
finds its own index rather than another package's, and the theme carries no
|
|
410
|
-
address of its own.
|
|
426
|
+
Both files are addressed relative to the site's base, so a package served
|
|
427
|
+
under a prefix (`/thalorna/pagefind/…`) finds its own index rather than
|
|
428
|
+
another package's, and the theme carries no address of its own.
|
|
411
429
|
|
|
412
430
|
**Why a header box and not a `/search/` page.** A site is its homepage and
|
|
413
431
|
its pages, with nothing generated between them — a results page would need a
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
432
|
+
note at that address. Pagefind's own panel UI needs no page of its own: the
|
|
433
|
+
header button opens it in place.
|
|
434
|
+
|
|
435
|
+
**What is indexed.** `data-pagefind-body` on a page's prose scopes indexing to
|
|
436
|
+
it; the theme's own chrome carries `data-pagefind-ignore` — the header, the
|
|
437
|
+
footer, the infobox rail, the table of contents, the Related card, and the
|
|
438
|
+
hero banner's title and tagline.
|
|
439
|
+
|
|
440
|
+
**What a page tells the search.** Each page carries hidden metadata the
|
|
441
|
+
search reads: its title, its filters, its aliases, its picture and, for a
|
|
442
|
+
post, its date.
|
|
443
|
+
|
|
444
|
+
| Filter | Values |
|
|
445
|
+
| ----------- | -------------------------------------------- |
|
|
446
|
+
| `package` | the package that publishes the note |
|
|
447
|
+
| `type` | the note's `type` |
|
|
448
|
+
| `subtype` | the note's `subType` |
|
|
449
|
+
| `culture` | the name of the culture `data.culture` names |
|
|
450
|
+
| `continent` | the continent the note lies in |
|
|
451
|
+
| `region` | the outermost region beneath that continent |
|
|
452
|
+
|
|
453
|
+
A post carries `author` and `tags` filters and sorts by its `date`. A note's
|
|
454
|
+
name and its aliases count ten times a word of its body, so a search for a name
|
|
455
|
+
opens that note first and a search for an alias finds it. A result shows the
|
|
456
|
+
note's `data.icon`, or its hero banner where it has none. A note's tags and its
|
|
457
|
+
draft state are not filters. Secret blocks, inline secrets and `.secret`
|
|
458
|
+
sections are kept out of the index. [The site guide](../guides/site.md#search)
|
|
459
|
+
says where a note lies and how a merged search reads other sites' indexes.
|
|
426
460
|
|
|
427
461
|
**Classes added:** `.site-search`, `.search-toggle`, `.search-panel`,
|
|
428
462
|
`.search-panel-inner`, and `.header-actions` (the header's nav/search/toggle
|
|
@@ -430,20 +464,20 @@ group). `.search-panel-inner` carries Pagefind's own `--pagefind-ui-*`
|
|
|
430
464
|
theming variables, set from the theme's own tokens so results match the
|
|
431
465
|
chrome around them.
|
|
432
466
|
|
|
433
|
-
## What a page, a homepage and a
|
|
467
|
+
## What a page, a homepage and a listing carry
|
|
434
468
|
|
|
435
469
|
### A page
|
|
436
470
|
|
|
437
|
-
`
|
|
438
|
-
|
|
439
|
-
|
|
471
|
+
The `page` layout draws every note that is not the homepage: the hero, the
|
|
472
|
+
infobox rail, the body, any `related:` block, and prev/next links through the
|
|
473
|
+
page's own catalog.
|
|
440
474
|
|
|
441
475
|
**Emitted.** A note's page arrives with `title` (the note's name), `type`,
|
|
442
476
|
`subType`, `description` and `tags` already set, and `data.banner` resolved.
|
|
443
|
-
The form below is the hand-written one, which is what a
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
477
|
+
The form below is the hand-written one, which is what a curated landing
|
|
478
|
+
carries: `title`, `date` and a top-level `banner:` are keys the content build
|
|
479
|
+
never writes, and a note's page therefore has no `date` and no meta-line date
|
|
480
|
+
at all.
|
|
447
481
|
|
|
448
482
|
```yaml
|
|
449
483
|
---
|
|
@@ -459,13 +493,13 @@ tags: [archetype, mercantyl] # optional; shown in the page meta line
|
|
|
459
493
|
|
|
460
494
|
- **`type`** is the page's catalog key, unless it is `doc` — prose rather than
|
|
461
495
|
a catalog of its own — in which case the key is `subType` (what the build
|
|
462
|
-
compiles from a note's classification) or, failing that, `category
|
|
463
|
-
|
|
464
|
-
catalog.
|
|
496
|
+
compiles from a note's classification) or, failing that, `category`. A page
|
|
497
|
+
with no `type` has no catalog.
|
|
465
498
|
- **`date`**, **`tags`** — each optional and shown only when present, in a
|
|
466
|
-
meta line above the body. A tag links to `tags/<tag
|
|
499
|
+
meta line above the body. A tag links to `tags/<tag>/` where the site writes
|
|
500
|
+
a page for each tag (`site.tags`), and is plain text otherwise.
|
|
467
501
|
- **`subType`** — shown as a plain label for `type: being` pages. It does not
|
|
468
|
-
create a tag
|
|
502
|
+
create a tag.
|
|
469
503
|
|
|
470
504
|
**The draft notice.** A page tagged `draft` states that its content is not
|
|
471
505
|
settled, at the head of the article — above the infobox rail and above the
|
|
@@ -484,29 +518,34 @@ out of the meta line's tag row and said here instead.
|
|
|
484
518
|
it states may change, and nothing in it is settled._
|
|
485
519
|
- **`.draft-notice`**, **`.draft-notice-icon`**, **`.draft-notice-text`** and
|
|
486
520
|
**`.draft-notice-label`** are the classes a consumer styles against.
|
|
487
|
-
- The mark is Font Awesome, which
|
|
521
|
+
- The mark is Font Awesome, which the base layout already loads; the sentence
|
|
488
522
|
reads on its own where it does not arrive.
|
|
489
523
|
- The sentence is an `em`: the label is the page's own voice naming the
|
|
490
524
|
state, and the sentence is the page speaking about itself.
|
|
491
525
|
- A page carrying the notice also carries **`.single-with-notice`** on its
|
|
492
526
|
article, which is what moves a two-column page's content and rail below it.
|
|
493
527
|
|
|
494
|
-
**Prev/next.**
|
|
495
|
-
site
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
528
|
+
**Prev/next.** The links walk the pages of the site in the order a reader
|
|
529
|
+
walks them. A site holding more than one catalog narrows the walk to the pages
|
|
530
|
+
sharing this page's catalog key, so reading through the afflictions does not
|
|
531
|
+
surface a skill; a site holding a single catalog is untouched.
|
|
532
|
+
|
|
533
|
+
### A post
|
|
534
|
+
|
|
535
|
+
A note of `type: doc` and `subType: post` is drawn by the `blog-post` layout:
|
|
536
|
+
the post's title, its date and writer, its series where it states one, its
|
|
537
|
+
tags, and its body. Posts are listed newest first on the page of the section
|
|
538
|
+
`site.feed` names, and the site writes an Atom feed beside that page.
|
|
501
539
|
|
|
502
540
|
### The homepage
|
|
503
541
|
|
|
504
|
-
A package's home page is `
|
|
505
|
-
|
|
542
|
+
A package's home page is the `type: homepage` note, drawn by the `home`
|
|
543
|
+
layout at the package root. The layout selects between two shapes by what the
|
|
544
|
+
page carries.
|
|
506
545
|
|
|
507
546
|
**`type: homepage`** renders the page through the same structure a note gets
|
|
508
|
-
from `
|
|
509
|
-
sharing the markup through `
|
|
547
|
+
from the `page` layout — the hero from its `banner:`, then its body —
|
|
548
|
+
sharing the markup through the `page-body` partial so a homepage and a page
|
|
510
549
|
read as one family:
|
|
511
550
|
|
|
512
551
|
```yaml
|
|
@@ -516,11 +555,10 @@ title: Song of Heroic Lands # hero heading
|
|
|
516
555
|
description: A classless, skill-based fantasy system … # hero standfirst
|
|
517
556
|
|
|
518
557
|
# The hero image. The same `banner:` every other page in this theme uses,
|
|
519
|
-
# resolved
|
|
520
|
-
#
|
|
521
|
-
#
|
|
522
|
-
#
|
|
523
|
-
# entirely.
|
|
558
|
+
# resolved in the documented order and through `params.cdnBaseURL` — see "The
|
|
559
|
+
# hero banner" above. With none set, the subtype default lands on
|
|
560
|
+
# `images/banners/homepage.webp`, since the subtype default is keyed on the
|
|
561
|
+
# page's `type`. `banner: none` declines a hero image entirely.
|
|
524
562
|
banner: brand/sohl-banner.webp
|
|
525
563
|
---
|
|
526
564
|
Everything published for the system lives under this address …
|
|
@@ -530,39 +568,20 @@ The home page declares no `infoboxes:`, `related:`, `date:` or `tags:`, so
|
|
|
530
568
|
those pieces of a page stay silent.
|
|
531
569
|
|
|
532
570
|
**No `type` at all** — a site whose home page is a set of entry points into
|
|
533
|
-
everything it publishes — renders the featured grid from `params.home
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
members (`.Pages`) as a gap-filler: a member the body already links,
|
|
548
|
-
directly or transitively, is not repeated, and the rest appear under
|
|
549
|
-
"Orphaned Pages" when the body links some of them, or plainly when it links
|
|
550
|
-
none. A tag's term page lists the pages carrying it; the tag index itself
|
|
551
|
-
lists every tag with its page count.
|
|
552
|
-
|
|
553
|
-
```yaml
|
|
554
|
-
---
|
|
555
|
-
# content/projects/_index.md — a hand-curated landing, no `type:` at all
|
|
556
|
-
title: Projects
|
|
557
|
-
description: Foundry VTT systems, modules, and reference content …
|
|
558
|
-
---
|
|
559
|
-
Each section below has its own landing page.
|
|
560
|
-
|
|
561
|
-
# [Song of Heroic Lands](/projects/song-of-heroic-lands/)
|
|
562
|
-
…
|
|
563
|
-
```
|
|
564
|
-
|
|
565
|
-
A row is a linked title and, when the page carries one, its description.
|
|
571
|
+
everything it publishes — renders the featured grid from `params.home`: a hero
|
|
572
|
+
(`heroimage`, `herotitle`, `herotagline`), the section headings, and a card for
|
|
573
|
+
each entry of `cards`, each with a title, an address, a line of text and an
|
|
574
|
+
optional image.
|
|
575
|
+
|
|
576
|
+
### A listing
|
|
577
|
+
|
|
578
|
+
The `list` layout draws a page that lists other pages: a section a note
|
|
579
|
+
stands for (`site.sections`), and the tag pages `site.tags` writes. It opens
|
|
580
|
+
with the hero and any authored body, then lists the members the body does not
|
|
581
|
+
already link, directly or transitively, under a heading when the body links
|
|
582
|
+
some of them, or plainly when it links none. A tag's page lists the pages
|
|
583
|
+
carrying it; the tag index lists every tag with its page count. A row is a
|
|
584
|
+
linked title and, when the page carries one, its description.
|
|
566
585
|
|
|
567
586
|
## Alerts
|
|
568
587
|
|
package/docs/source-preview.md
CHANGED
|
@@ -9,7 +9,8 @@ subType: reference
|
|
|
9
9
|
|
|
10
10
|
Preview renders only the supplied Markdown buffer. It works with ordinary
|
|
11
11
|
Markdown, optional YAML frontmatter, and local Heroic Lands extensions, without
|
|
12
|
-
configuration, a content tree, dependency caches, a content index or Pandoc.
|
|
12
|
+
configuration, a content tree, dependency caches, a content index or Pandoc. A
|
|
13
|
+
host that holds a content index can give it to the preview for a fuller view.
|
|
13
14
|
|
|
14
15
|
```sh
|
|
15
16
|
package-build-preview < note.md > preview.html
|
|
@@ -25,6 +26,19 @@ is the default; `--dark` is explicit and independent of browser preferences.
|
|
|
25
26
|
options. Unsupported arguments exit 1. Findings go to stderr; success exits 0,
|
|
26
27
|
and render errors exit 1. A partial preview may accompany error findings.
|
|
27
28
|
|
|
29
|
+
Preview renders through the same renderer as the packs and the websites, so an
|
|
30
|
+
alert, a secret block, a verse, a captioned item, a footnote section and a
|
|
31
|
+
picture's size and position read as they do on those surfaces. Fenced code that
|
|
32
|
+
names a language is highlighted. A tag written in a note is shown as text.
|
|
33
|
+
|
|
34
|
+
The default view needs no content index, so it shows what it cannot resolve as
|
|
35
|
+
source. A host that holds the package's content index builds an index with
|
|
36
|
+
`previewIndex` and passes it to `renderPreview` as `index`. Rendered that way, a
|
|
37
|
+
wikilink is a link, a link to a concealed note is concealed, an embed draws its
|
|
38
|
+
picture, marked text is mapped and set in its face, an icon is drawn, and a
|
|
39
|
+
caption is numbered with its asset's role, so a map is a **Map**. A query, which
|
|
40
|
+
a buffer cannot run, stays highlighted source in both views.
|
|
41
|
+
|
|
28
42
|
Wikilinks, image and portrait links retain their complete source: blue brackets,
|
|
29
43
|
purple addresses, bold foreground labels and grey attributes. Entire spans are bold, including their visible brackets and attributes.
|
|
30
44
|
Definition-list terms are bold and definitions use normal text. SQL and pagelist fences remain grey source;
|