@heroiclands/package-build 24.0.4 → 24.1.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.
@@ -44,15 +44,22 @@ These ideas carry everything else.
44
44
  several languages are written in one script, as many Earth languages share
45
45
  the Latin alphabet. A mapping therefore belongs to a script and serves every
46
46
  language written in it. What differs between languages is their dictionaries.
47
- 5. **Three optional keys mark text:** `lang=` says what language it is, `font=`
48
- says how it is drawn, and `map=` names the mapping that rewrites it into the
49
- script's code points. They are independent.
50
- 6. **Without `map=`, the characters reach the page exactly as written.**
51
- Nothing is checked against a language.
52
- 7. **With `map=`, the build converts, and with `lang=` as well it checks.**
53
- Each word is looked up in the language's dictionary first; a word the
54
- dictionary does not write is spelled by the mapping's rows. A mapped run
55
- with `lang=` must then consist of words of that language.
47
+ 5. **Language and presentation are separate.** `lang=` identifies the
48
+ language, retaining the authored Roman spelling and the surrounding prose
49
+ font. Language and vocabulary checks still apply.
50
+ 6. **`.nativefont` requests native presentation.** It requires an explicit
51
+ `lang=` on that same span, div or fence, then selects the language's
52
+ configured native map and font. Each marked child makes its own choice;
53
+ native presentation is not inherited by a language-only child.
54
+ 7. **`font=` and `map=` override independently.** A native run takes any
55
+ missing half from the language's `data.writtenIn`; if neither the run nor
56
+ its language provides a font, the build reports the needed `font=` override.
57
+ When the language supplies no map, native code points can be typed directly.
58
+ A native font or map without `.nativefont` is an error. Ordinary Roman
59
+ `font=mono`, `serif` and `sans` remain available without native opt-in.
60
+ 8. **Native mapping uses the dictionary first.** A word the dictionary does
61
+ not write is spelled by the mapping's rows. Every word must belong to the
62
+ language where its configured note supplies a dictionary.
56
63
 
57
64
  A script that writes meanings rather than sounds is **logographic**. It has no
58
65
  sound rules, so every word is written from the dictionary and never guessed;
@@ -74,20 +81,24 @@ The pipeline for one marked run reads left to right:
74
81
  | Face coverage | the face's `fonts.json` code points | a character the face does not draw |
75
82
  | Element | the face, the tag and the direction | nothing |
76
83
 
77
- ## The three keys
84
+ ## Language and native presentation
78
85
 
79
86
  The keys go in the attribute block that a span, a fenced div or a `verse`
80
87
  fence already takes:
81
88
 
82
- | Written | Meaning |
83
- | ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
84
- | `[Daimela, helthos.]{lang=vyl}` | Vylari, tagged `art-x-vyl`, in roman and in the page's font. Not checked. |
85
- | `[…]{font=semaron-kuriale}` | The code points exactly as typed, drawn in Semaron Kuriale. Checked for coverage only. |
86
- | `[Zaron lonak]{lang=vyl font=semaron-kuriale map=semaron}` | Vylari typed in roman, mapped through the dictionary and the rows into Semaron, and checked against Vylari. |
87
- | `[…]{map=semaron}` with no `lang=` | The rows alone: no dictionary, no lexicon check. |
88
- | `[ad astra]{lang=la font=serif}` | A real language's BCP 47 tag, unchecked, in the reader's serif. |
89
- | `::: {lang=… font=… map=…}` … `:::` | The same keys for a passage of paragraphs. |
90
- | a `verse` fence opened with `{lang=… font=… map=…}` | The same keys for a poem. |
89
+ | Written | Meaning |
90
+ | ---------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
91
+ | `[Daimela, helthos.]{lang=vyl}` | Vylari in authored Roman spelling and the page's font, with language validation. |
92
+ | `[Zaron lonak]{lang=vyl .nativefont}` | Vylari mapped and drawn with its configured native defaults. |
93
+ | `[Zaron lonak]{lang=vyl .nativefont font=semaron-kuriale map=semaron}` | Native Vylari with both defaults explicitly overridden. |
94
+ | `[ad astra]{lang=la font=serif}` | A real language's BCP 47 tag, in the reader's serif. |
95
+ | `::: {lang=vyl .nativefont}` … `:::` | Native presentation for a passage's unmarked paragraphs. |
96
+ | a `verse` fence opened with `{lang=vyl .nativefont}` | Native presentation for a poem's unmarked lines. |
97
+
98
+ The class is explicit on each construct. `[Zaron]{.nativefont}` is an error
99
+ even inside a passage marked `lang=vyl`: add `lang=vyl` to that span. A native
100
+ font such as `font=semaron-kuriale`, or any `map=`, requires `.nativefont`.
101
+ Generic Roman `font=serif`, `sans` and `mono` do not.
91
102
 
92
103
  **`lang=`** is read in this order. First a short name declared in the
93
104
  configuration's `languages`; then a BCP 47 language tag for a real language
@@ -150,77 +161,101 @@ data:
150
161
  writtenIn: { map: semaron, font: semaron-kuriale }
151
162
  ```
152
163
 
153
- A run marked with the language alone then takes both: `[Zaron lonak]{lang=vyl}`
154
- is mapped through Semaron and checked against Vylari exactly as
155
- `[Zaron lonak]{lang=vyl font=semaron-kuriale map=semaron}` is, and so is a div,
156
- a verse fence or a `scroll` fence marked `lang=vyl`. A run that states one of
157
- the two keys keeps it, and takes the other from the language only where the
158
- two agree: `font=` alone takes the language's map where that map is drawn in
159
- the face, and `map=` alone takes the language's face where the map is drawn in
160
- it. So a tongue written in several scripts states its usual one, and a run in
161
- another names that script's keys. A language whose note states no `writtenIn`
162
- only tags, as above. The checks are at the key:
164
+ A language-only run stays Roman: `[Zaron lonak]{lang=vyl}`. Add
165
+ `.nativefont` to select both defaults:
166
+
167
+ ```markdown
168
+ [Zaron lonak]{lang=vyl .nativefont}
169
+ [Zaron lonak]{lang=vyl .nativefont font=semaron-kuriale map=semaron}
170
+ ```
171
+
172
+ Those two spans display the same native text. `font=` replaces only the font;
173
+ `map=` replaces only the map. A missing font default produces an error naming the
174
+ needed `font=` override, and incompatible map/font pairs are errors. A map
175
+ is optional when the language supplies none; directly typed signs then
176
+ reach the selected font unchanged. The build does
177
+ not discard a default to make an override fit. This applies to spans, divs,
178
+ verse fences, scroll fences and standalone wikilinks. The language note's
179
+ keys are checked at their values:
163
180
 
164
181
  > `` `data.writtenIn.map` is `semoran`, which no mapping note's `data.map.name` declares; did you mean `semaron`? ``
165
182
 
166
183
  > `` `data.writtenIn.font` is `teng-chou`, which the map `semaron` is not drawn in; it is drawn in `semaron-kuriale` ``
167
184
 
168
- **A run inherits from its passage and overrides it.** A span inside a marked
169
- div or fence takes the passage's keys, and its own keys win. A Khelathi phrase
170
- inside a Vylari poem is checked against Khelathi's lexicon and tagged Khelathi
171
- but still drawn through Semaron's rows:
185
+ **Unmarked text follows its passage; marked children choose their own
186
+ presentation.** A language-only child stays Roman, even in the same language
187
+ as its native parent:
172
188
 
173
189
  ```markdown
174
- ::: {lang=vyl font=semaron-kuriale map=semaron}
175
- Zaron lonak, [Gar-Anlagh]{lang=khel}, lokamen zaron.
190
+ ::: {lang=vyl .nativefont}
191
+ Zaron lonak, [Zaron lonak]{lang=vyl}, lokamen zaron.
192
+ [Gar-Anlagh]{lang=khel .nativefont font=qalezu-hand map=qalezu}
176
193
  :::
177
194
  ```
178
195
 
179
- To draw it in Qalezu instead, the span states its own face and mapping,
180
- `[Gar-Anlagh]{lang=khel font=qalezu-hand map=qalezu}`. Qalezu runs right to left
181
- inside the left-to-right line with no `dir=` written. To set a gloss in the
182
- page's own font, `[an oath]{lang=en font=serif}` inside the passage drops both
183
- the face and the map by naming new ones.
196
+ The first Vylari phrase and the unmarked text use Semaron; the language-only
197
+ span gives the Roman reading. The Khelathi span opts in independently and uses
198
+ its own map and font. Qalezu runs right to left inside the left-to-right line
199
+ with no `dir=` written. An English gloss, `[an oath]{lang=en font=serif}`,
200
+ uses the page's serif. A child's own native defaults and overrides are used;
201
+ the parent's explicit map and font are not copied into the child.
202
+
203
+ **References make the same choice.** The first name below stays Roman; the
204
+ second uses Vylari's native defaults:
205
+
206
+ ```markdown
207
+ [[lore-marendasdty|Marendas]]{lang=vyl}
208
+ [[lore-marendasdty|Marendas]]{lang=vyl .nativefont}
209
+ ```
210
+
211
+ Only the displayed name is mapped and set in the native face. The destination,
212
+ spoiler and `.show` behavior, draft cue and book page references are preserved.
213
+ Keep adjacent prose and its spaces in sibling spans; a longer native passage
214
+ cannot contain an embedded link.
184
215
 
185
216
  **What a run may hold.** A marked span or verse line is plain text: no
186
217
  emphasis (other than the stars a face's run takes, see [emphasis in a
187
218
  script](#emphasis-in-a-script)), link, image, footnote, wikilink, code or HTML.
188
- A marked div holds paragraphs and line breaks only. The text is read as written,
219
+ A standalone resolved reference may carry the language and native class, as
220
+ above; only its label is set. A marked div holds paragraphs and line breaks only. The text is read as written,
189
221
  so `[`, `]`, `"`, `<<`, `>>`, `!` and `@ # $ % ^ &` are characters; a bracket
190
222
  pair is markup only when `(` makes a link, `{` a span or a second `[` a
191
223
  wikilink, and an unbalanced bracket takes a backslash, `\[`. A code fence is
192
224
  verbatim: `[…]{…}` inside it stays literal text. Text marked with a real
193
- language's tag alone keeps its Markdown, so `[ad _astra_]{lang=la}` works.
225
+ language's tag alone keeps its Markdown when that language is English; a span
226
+ with a non-English effective language cannot contain actual bold or italic
227
+ markup, even when the language is real.
194
228
 
195
- The three keys are errors on a named block such as a secret block. Put a marked
229
+ The language, font and map keys are errors on a named block such as a secret block. Put a marked
196
230
  div inside the block instead.
197
231
 
198
- ## Without a map
232
+ ## Roman text and directly typed signs
199
233
 
200
- A run that names `font=` and no `map=` is set exactly as typed:
234
+ Language-only text retains its spelling and the surrounding prose font:
201
235
 
202
236
  ```markdown
203
- The lintel is cut with [󰈹󰈰]{font=semaron-kuriale}.
237
+ [Zaron lonak]{lang=vyl}
238
+ [Zaron lonak]{lang=vyl font=serif}
204
239
  ```
205
240
 
206
- where the run holds Semaron's own code points. The only check is face coverage:
207
- after the run is read, every character must be one the face draws (or white
208
- space), and any other is an error at the character it came from. Each character
209
- is reported once per run:
210
-
211
- > `` `x` (U+0078) is not drawn by the font `semaron-kuriale` ``
241
+ The second span explicitly chooses the ordinary serif. Neither selects the
242
+ language's native defaults. A configured language's existing vocabulary and
243
+ language checks still apply; presentation does not turn those checks off.
212
244
 
213
- Fix: type the face's code points, or add `map=`. The face's `fonts.json` states
214
- what it draws.
245
+ Text already typed in a script's code points also opts in explicitly:
215
246
 
216
- There are two ways to type the code points. The fonts package ships keyboard
217
- layouts and Emacs input methods for its scripts, under its `keyboards/`; and an
218
- editor font that carries the scripts draws them where they are typed. In
219
- either case the note holds the characters and needs only `font=`. Typing roman
220
- and letting `map=` convert it keeps the note's source readable and diffable and
221
- is the usual choice for a language with a dictionary.
247
+ ```markdown
248
+ The lintel is cut with [󰈹󰈰]{lang=und .nativefont font=semaron-kuriale}.
249
+ ```
222
250
 
223
- A run with `lang=` and no `font=` is tagged and nothing more.
251
+ Here `und` identifies an unspecified language with no configured map. The
252
+ font receives the typed code points unchanged. If a map is selected, rows
253
+ leave characters with no matching row unchanged. The selected face must draw
254
+ every resulting character, except whitespace, or the build
255
+ reports the source character. Keyboard layouts and Emacs input methods for
256
+ the scripts ship under the fonts package's `keyboards/`; an editor font that
257
+ carries the script draws its code points where they are typed. Typing Roman
258
+ and mapping it keeps the source readable and diffable.
224
259
 
225
260
  ## Mapping notes
226
261
 
@@ -430,13 +465,14 @@ A character the face does not draw inside a native form reports at the word:
430
465
 
431
466
  > `` `zaron` is written U+F024F by the lexicon of `vyl` for the map `semaron`, which the font `semaron-kuriale` does not draw ``
432
467
 
433
- A run with `map=` and no `lang=`, a `lang=` that is a bare tag and a declared
468
+ A native run whose explicit `lang=` is a bare BCP 47 tag, and a declared
434
469
  language with no `note` are spelled by the rows alone.
435
470
 
436
471
  ## The checks
437
472
 
438
- A run with `lang=` and `map=`, whose language has a `note`, is checked word by
439
- word. The comparison is case folded and NFC, with `’` read as `'`. A word passes
473
+ A run with `lang=`, whose language has a `note`, is checked word by
474
+ word. This applies to Roman language-only runs and native runs alike;
475
+ `.nativefont` selects presentation and does not turn vocabulary checks off. The comparison is case folded and NFC, with `’` read as `'`. A word passes
440
476
  when it is any of these:
441
477
 
442
478
  1. **A lexicon word:** a `data.words[].form` of the language. A form listed in a
@@ -648,7 +684,7 @@ words:
648
684
  built: [halzi, -unet]
649
685
  ```
650
686
 
651
- `[halzi halzunet halziim]{lang=khel font=khelathi-zethu-glyphs map=zethu}` is
687
+ `[halzi halzunet halziim]{lang=khel font=khelathi-zethu-glyphs map=zethu .nativefont}` is
652
688
  written U+1EABB, then U+1EABB U+1EBC7, then U+1EABB U+1EBE1, with the spaces the
653
689
  rows write between them. An affix's `native` and `data.grammar.native` are read
654
690
  only under a logographic map; naming any other map is an error at the entry.
@@ -667,7 +703,10 @@ typed in a run hold no letter, so they are no word and pass through as typed.
667
703
  with no writing is an error. A foreign name is written deliberately: its signs
668
704
  typed directly, or through a mapping whose rows read a sign-by-sign notation
669
705
  (sign ids and joiners, as in Manuel de Codage input), which an author writes the
670
- way any other mapping is written, and used on a run with `map=` and no `lang=`.
706
+ way any other mapping is written. A native run with an explicit bare BCP 47
707
+ tag such as `lang=und` has no configured dictionary and uses the rows alone;
708
+ it still needs `.nativefont`, an explicit map for conversion and an explicit
709
+ font where no language default supplies one.
671
710
 
672
711
  **An unknown word gets two errors:** the lexicon check reports it is no word of
673
712
  the language, and the writing check reports it has no writing.
@@ -714,8 +753,14 @@ data:
714
753
  `emphasis` sets both `*…*` and `**…**`, and `strongEmphasis` optionally sets
715
754
  `**…**` alone. A tongue that states nothing takes its script's convention.
716
755
 
717
- **A `words` language makes emphasis an error.** `data.emphasis: words` says the
718
- language marks stress with a word, so stars in its runs are refused:
756
+ **Non-English spans do not take Markdown emphasis.** Bold and italic markup in
757
+ a span with an effective non-English language is an error, whether it has a
758
+ font or not, and whether its language is declared on that span or inherited.
759
+ English (`en`) and English BCP 47 tags remain eligible. Escaped literal
760
+ delimiters are not emphasis. This restriction applies throughout the note.
761
+
762
+ `data.emphasis: words` also makes emphasis an error: it says the language marks
763
+ stress with a word, so stars in its runs are refused:
719
764
 
720
765
  > `` `ban` marks emphasis with a word, not a mark; write the word ``
721
766
 
@@ -747,7 +792,7 @@ the contents of a fence byte for byte, which is why a poem is a fence and not
747
792
  paragraphs: indentation, line breaks and spans survive formatting untouched.
748
793
 
749
794
  ````markdown
750
- ```verse {lang=vyl font=semaron-kuriale map=semaron}
795
+ ```verse {lang=vyl font=semaron-kuriale map=semaron .nativefont}
751
796
  Lokazor lonak,
752
797
  lokamen zaron.
753
798
  ```
@@ -755,52 +800,51 @@ Lokazor lonak,
755
800
 
756
801
  ### Verse in columns
757
802
 
758
- A poem can be set beside its translation, or in both script and roman, line
759
- for line. `col1=` names what the left column shows and `col2=` what the right
760
- shows, and each column stacks one or more **entries** joined by `:`. An entry
761
- is `language[/mapping[/font]]`. A poem has at most two columns, and `numstep=N`
762
- numbers the lines (`numstep=1` every line, `numstep=5` every fifth, `0` none).
763
- `form=` records the poem's kind, such as `form=epic`; the build infers nothing
764
- from it.
765
-
766
- The body is **one fence, with interleaved `lang` spans.** Each verse line is a
767
- group of lines separated from the next by a blank line; every line of a group is
768
- a span giving the verse line in one language, `[text]{lang=…}`, or plain text in
769
- the fence's own `lang=`. A line of only `***` breaks a stanza. The Vylari is
770
- typed once, in roman, and each column picks what it needs: the first entry of
771
- `col1=` maps it into Semaron, and the second entry of `col2=` sets the same line
772
- in roman.
803
+ `form=epic` records the poem's kind without inferring its layout or metre.
804
+ `cols` is a positive whole number, defaulting to `1`. A single-column poem
805
+ uses its physical lines without numeric prefixes. With `cols` above one,
806
+ every content line starts with a column number and one or more spaces.
807
+ Blank lines separate logical verse rows, and `***` separates stanzas.
808
+
809
+ Numbers are in `1..cols` and nondecreasing within a row. Skip a number to
810
+ leave that cell empty. Repeat a number for as many readings as the column
811
+ needs: its first reading is foreground, and all its later readings are grey.
812
+ That choice is independent for each column and resets at each new row.
813
+
814
+ Here is a sparse three-column poem. The first row omits column two. The next
815
+ fills it, and the last row begins a new stanza:
773
816
 
774
817
  ````markdown
775
- ```verse {numstep=1 lang=vyl col1=vyl/semaron/semaron-kuriale col2=en:vyl}
776
- [Lokazor lonak zaron.]{lang=vyl}
777
- [He walks the oath road.]{lang=en}
818
+ ```verse {numstep=1 lang=vyl cols=3}
819
+ 1 [Lokazor lonak zaron.]{lang=vyl .nativefont}
820
+ 3 [He walks the oath road.]{lang=en}
821
+ 3 [Lokazor lonak zaron.]{lang=vyl}
778
822
 
779
- [Lokamen lonak zaron.]{lang=vyl}
780
- [I walk the oath road.]{lang=en}
823
+ 1 [Lokamen lonak zaron.]{lang=vyl .nativefont}
824
+ 2 [Nothing to say]{lang=en}
825
+ 3 [I walk the oath road.]{lang=en}
826
+ 3 [Lokamen lonak zaron.]{lang=vyl}
781
827
 
782
828
  ***
783
829
 
784
- alathos lokazor.
785
- [That one walks.]{lang=en}
830
+ 1 [alathos lokazor.]{lang=vyl .nativefont}
831
+ 3 [That one walks.]{lang=en}
832
+ 3 [alathos lokazor.]{lang=vyl}
786
833
  ```
787
834
  ````
788
835
 
789
- In every column the first entry is set in the normal tone and each later one in
790
- grey. Each target sets a verse line as one row that holds its columns level,
791
- and a narrow screen stacks them. A part in a right-to-left face stays in its
792
- column and runs right to left within it.
836
+ Each native span opts in explicitly and uses the Vylari note's configured
837
+ map and font. Each Roman repeat is authored separately and stays Roman.
838
+ `lang=` identifies the language without choosing a column; number prefixes
839
+ alone place the readings. Inline links, language changes and authored spaces
840
+ remain inside the chosen reading. Leading periods indent that reading.
793
841
 
794
- The rules of a verse in columns: `font=` and `map=` belong to the entries, not
795
- to the poem; every verse line gives one span for each language its columns
796
- name and none for a language they do not; a line is not indented and its span
797
- takes only `lang=`. Each finding is an error at the text that is wrong:
798
-
799
- ```text
800
- assets/content/Lore/Walking.md:14:1: error: this verse line has no `en` line, which `col2=` sets
801
- assets/content/Lore/Walking.md:18:1: error: this verse line gives `en` twice; give each language once
802
- assets/content/Lore/Walking.md:22:1: error: no column sets `khel`; a verse line gives the languages `col1=` and `col2=` name
803
- ```
842
+ `numstep=N` counts logical rows, so repeated readings and empty cells do not
843
+ advance its counter. Every target aligns each row's cells at the top, and
844
+ narrow web or Foundry displays stack the cells in numbered order. A
845
+ right-to-left reading stays in its cell and follows its own script's direction.
846
+ Invalid counts and prefixes are located at the authored value or number;
847
+ missing prefixes are located at the line's first content character.
804
848
 
805
849
  ### Metre
806
850
 
@@ -867,7 +911,7 @@ anything, each an error:
867
911
 
868
912
  > ``the language `vyl` is not a configured language with a `note`, so it has no stress rule for `scan=` to count beats by``
869
913
 
870
- > `` `scan=` counts the beats of one language's lines; a verse in columns sets a line in each of two ``
914
+ > `` `scan=` counts the beats of one language's lines; a verse with cols>1 groups independent physical lines ``
871
915
 
872
916
  A repeated metre name is an error too:
873
917
 
@@ -891,7 +935,7 @@ paragraphs, and each paragraph starts at the top of a fresh column. `rows=`
891
935
  sets the characters in a column and `cols=` the columns in a panel:
892
936
 
893
937
  ````markdown
894
- ```scroll {rows=25 cols=12 lang=tsu map=tengchou}
938
+ ```scroll {rows=25 cols=12 lang=tsu map=tengchou .nativefont}
895
939
  chen teng chou hing
896
940
  tan tsou dou rou
897
941
 
@@ -900,7 +944,7 @@ gen chei chou tsuen
900
944
  ````
901
945
 
902
946
  Where the Tantsou note states `writtenIn: { map: tengchou, font: teng-chou }`,
903
- ` ```scroll {rows=25 cols=12 lang=tsu} ` is enough.
947
+ ` ```scroll {rows=25 cols=12 lang=tsu .nativefont} ` is enough.
904
948
 
905
949
  The site, the preview and Foundry set it in columns, in a panel that scrolls
906
950
  sideways from the right. The book draws it as panel images from the face's
@@ -965,8 +1009,8 @@ whose notes set no text in a face, ships none of it.
965
1009
  ## The commands
966
1010
 
967
1011
  `package-build transliterate <map> [--lang <language>] [--font <slug>] [--hex] [text..]`
968
- maps a passage exactly as the build maps a run marked `map=<map> lang=<language>
969
- font=<slug>`. The text is the words given; `-` or none reads standard input.
1012
+ maps a passage exactly as the build maps a run marked
1013
+ `lang=<language> .nativefont map=<map> font=<slug>`. The text is the words given; `-` or none reads standard input.
970
1014
  `--font` defaults to the language's `writtenIn` face where the mapping is drawn
971
1015
  in it, and is otherwise required when the mapping lists more than one face.
972
1016
  `--hex` prints `U+XXXX` code points separated by spaces.
@@ -1070,6 +1114,7 @@ name: { full: Vylari Language }
1070
1114
  type: skill
1071
1115
  subType: language
1072
1116
  data:
1117
+ writtenIn: { map: semaron, font: semaron-kuriale }
1073
1118
  core: true
1074
1119
  fields:
1075
1120
  - { name: Law, holds: "Oaths, seals and roads." }
@@ -1132,7 +1177,7 @@ The lintel over the door of the oath road is cut with a couplet, and the
1132
1177
  stonecutter set the couplet in the script of the court, so that every traveller
1133
1178
  could read it as the court reads it.
1134
1179
 
1135
- [Lokazor lonak thiruthrimar, lokamen zaron.]{lang=vyl font=semaron-kuriale map=semaron}
1180
+ [Lokazor lonak thiruthrimar, lokamen zaron.]{lang=vyl font=semaron-kuriale map=semaron .nativefont}
1136
1181
  ```
1137
1182
 
1138
1183
  Linting reports the unknown word, at its first character:
@@ -1153,6 +1198,7 @@ name: { full: Vylari Language }
1153
1198
  type: skill
1154
1199
  subType: language
1155
1200
  data:
1201
+ writtenIn: { map: semaron, font: semaron-kuriale }
1156
1202
  core: true
1157
1203
  fields:
1158
1204
  - { name: Law, holds: "Oaths, seals and roads." }
@@ -1222,8 +1268,8 @@ capital `L` of the rows, `zaron` is the exception's long vowel, and the comma
1222
1268
  and full stop are the script's one point.
1223
1269
 
1224
1270
  A poem in columns and a poem with its metre checked sit on one note. Both parse
1225
- with no finding: the first sets Vylari in Semaron beside the English over the
1226
- Vylari in roman, and the second's lines each carry three beats.
1271
+ with no finding: the first sets native Vylari in column one and English over Roman
1272
+ Vylari in column three, with a sparse middle cell, and the second's lines each carry three beats.
1227
1273
 
1228
1274
  **`assets/content/Lore/Walking.md`**
1229
1275
 
@@ -1238,17 +1284,21 @@ The walking of the oath road is sung in two settings. The first sets the poem
1238
1284
  beside its translation, and the second keeps the metre that the court keeps, so
1239
1285
  that a line with the wrong count is reported to the author who wrote it.
1240
1286
 
1241
- ```verse {numstep=1 lang=vyl col1=vyl/semaron/semaron-kuriale col2=en:vyl}
1242
- [Lokazor lonak zaron.]{lang=vyl}
1243
- [He walks the oath road.]{lang=en}
1287
+ ```verse {numstep=1 lang=vyl cols=3}
1288
+ 1 [Lokazor lonak zaron.]{lang=vyl .nativefont}
1289
+ 3 [He walks the oath road.]{lang=en}
1290
+ 3 [Lokazor lonak zaron.]{lang=vyl}
1244
1291
 
1245
- [Lokamen lonak zaron.]{lang=vyl}
1246
- [I walk the oath road.]{lang=en}
1292
+ 1 [Lokamen lonak zaron.]{lang=vyl .nativefont}
1293
+ 2 [Nothing to say]{lang=en}
1294
+ 3 [I walk the oath road.]{lang=en}
1295
+ 3 [Lokamen lonak zaron.]{lang=vyl}
1247
1296
 
1248
1297
  ***
1249
1298
 
1250
- alathos lokazor.
1251
- [That one walks.]{lang=en}
1299
+ 1 [alathos lokazor.]{lang=vyl .nativefont}
1300
+ 3 [That one walks.]{lang=en}
1301
+ 3 [alathos lokazor.]{lang=vyl}
1252
1302
  ```
1253
1303
 
1254
1304
  ```verse {lang=vyl scan=trimeter}
@@ -1287,11 +1337,11 @@ name: { full: The Marked Door }
1287
1337
  type: lore
1288
1338
  ---
1289
1339
 
1290
- The door is marked with the same words as the lintel, and the scribe stressed the
1291
- second word so that no one would read it as the first, which is how the script
1292
- marks a stressed word.
1340
+ The door is marked with the same words as the lintel. Although Semaron's
1341
+ convention is rubric, this Vylari span uses no Markdown emphasis: spans with a
1342
+ non-English language cannot contain bold or italic markup.
1293
1343
 
1294
- [Lokazor **lonak**, zaron.]{lang=vyl font=semaron-kuriale map=semaron}
1344
+ [Lokazor lonak, zaron.]{lang=vyl font=semaron-kuriale map=semaron .nativefont}
1295
1345
  ```
1296
1346
 
1297
1347
  Finally, the core report lists what the language still lacks:
@@ -1306,4 +1356,4 @@ Vylari Language (skill-vylarilng): 1 of 4 core concepts have no word
1306
1356
  Everything in this package comes from the guide. A new script follows the same
1307
1357
  steps: a mapping note for its face, `languages` entries for the languages
1308
1358
  written in it, a language note with the dictionary, and runs marked with the
1309
- three keys.
1359
+ language key and native presentation class.