@heroiclands/package-build 25.5.5 → 25.6.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.
Files changed (74) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/assets/styles/content-base.css +1 -1
  3. package/docs/api.md +24 -16
  4. package/docs/authoring/frontmatter.md +1 -1
  5. package/docs/authoring/links-and-markup.md +10 -9
  6. package/docs/content-format.md +40 -1
  7. package/docs/diagnostics.md +2 -2
  8. package/docs/encoding-core.md +43 -5
  9. package/docs/guides/reference-pages.md +4 -1
  10. package/docs/guides/site.md +1 -1
  11. package/docs/reference/format-details.md +239 -194
  12. package/docs/reference/note-types.md +187 -174
  13. package/docs/reference/theme-pages.md +1 -0
  14. package/engine/content-format.yaml +9 -7
  15. package/engine/content-html.mjs +3 -2
  16. package/engine/content-index.mjs +23 -0
  17. package/engine/content-links.mjs +8 -0
  18. package/engine/content-render.mjs +2 -2
  19. package/engine/content-tables.mjs +12 -5
  20. package/engine/culture-reach.mjs +3 -0
  21. package/engine/declared-sections.mjs +100 -0
  22. package/engine/derived-sections.mjs +36 -2
  23. package/engine/dictionary-rows.mjs +2 -1
  24. package/engine/encoding-template.mjs +28 -0
  25. package/engine/encoding-terms.mjs +20 -12
  26. package/engine/encoding.mjs +147 -17
  27. package/engine/generated-sections.mjs +2 -0
  28. package/engine/holdings.mjs +107 -3
  29. package/engine/index-records.mjs +3 -1
  30. package/engine/index.mjs +1 -1
  31. package/engine/language-data.mjs +0 -1
  32. package/engine/language-rows.mjs +1 -3
  33. package/engine/language-terms.mjs +7 -10
  34. package/engine/map-dot.mjs +22 -0
  35. package/engine/markdown-blocks.mjs +23 -8
  36. package/engine/metadata-index.mjs +1 -0
  37. package/engine/note-addresses.mjs +16 -0
  38. package/engine/note-vocabulary.mjs +19 -8
  39. package/engine/office-holders.mjs +76 -0
  40. package/engine/page-breaks.mjs +36 -8
  41. package/engine/pdf-render.mjs +4 -3
  42. package/engine/place-kinds.mjs +106 -0
  43. package/engine/settlement-tables.mjs +410 -675
  44. package/engine/settlement-terms.mjs +118 -0
  45. package/engine/site-build.mjs +2 -4
  46. package/engine/sql-tables.mjs +101 -7
  47. package/engine/standing-terms.mjs +9 -5
  48. package/engine/standings.mjs +83 -31
  49. package/engine/unique-items.mjs +85 -0
  50. package/package.json +9 -4
  51. package/site-theme/data/banner-kinds.yaml +2 -0
  52. package/sohl/actors.mjs +4 -3
  53. package/types/engine/content-html.d.mts +2 -1
  54. package/types/engine/content-scripts.d.mts +6 -0
  55. package/types/engine/culture-reach.d.mts +3 -0
  56. package/types/engine/declared-sections.d.mts +30 -0
  57. package/types/engine/derived-sections.d.mts +5 -1
  58. package/types/engine/encoding-lexicon.d.mts +6 -0
  59. package/types/engine/encoding-template.d.mts +6 -0
  60. package/types/engine/encoding.d.mts +12 -0
  61. package/types/engine/holdings.d.mts +34 -2
  62. package/types/engine/index-records.d.mts +2 -1
  63. package/types/engine/language-terms.d.mts +5 -1
  64. package/types/engine/markdown-blocks.d.mts +5 -1
  65. package/types/engine/office-holders.d.mts +33 -0
  66. package/types/engine/page-breaks.d.mts +8 -0
  67. package/types/engine/place-kinds.d.mts +18 -0
  68. package/types/engine/settlement-tables.d.mts +25 -158
  69. package/types/engine/settlement-terms.d.mts +53 -0
  70. package/types/engine/sql-tables.d.mts +35 -3
  71. package/types/engine/standing-terms.d.mts +3 -2
  72. package/types/engine/standings.d.mts +14 -2
  73. package/types/engine/unique-items.d.mts +12 -0
  74. package/vendor/markdownlint.mjs +855 -569
@@ -90,7 +90,7 @@ These fields are accepted by every note type. A field's value can still be irrel
90
90
  | Key | Shape | Required | Meaning |
91
91
  | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------- |
92
92
  | `data.affiliations.<Address>.rank` | the level on that body's own ladder, as a whole number — an ordinary member is `1`, and `0` is the rung for someone cast out | yes | The level on the body's own `governance.ranks` ladder. |
93
- | `data.affiliations.<Address>.office` | a post from that body's `governance.offices` | no | A post the body names in its `governance.offices`, where one is held. |
93
+ | `data.affiliations.<Address>.office` | a post from that body's `governance.offices`, or a list of them | no | A post the body names in its `governance.offices`, where one is held, or a list of the posts one being holds in that body. |
94
94
  | `data.affiliations.<Address>.societies` | a list of society names | no | The societies the membership is held in, by name. SoHL carries one, the first, as the affiliation item's `system.society`. |
95
95
 
96
96
  **System mappings**
@@ -250,16 +250,17 @@ These fields are accepted by every note type. A field's value can still be irrel
250
250
 
251
251
  **Subtypes:** None.
252
252
 
253
- | Field | Shape | Meaning |
254
- | ----------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------ |
255
- | `data.icon` | an Address | The document's profile art — an `icon` address, resolved into `img`. |
256
- | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
257
- | `data.weight` | number | What the thing weighs. |
258
- | `data.value` | number | What the thing is worth. |
259
- | `data.quality` | number | How well it is made. |
260
- | `data.durability` | number | How much wear it takes before it fails. |
261
- | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
262
- | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
253
+ | Field | Shape | Meaning |
254
+ | ----------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
255
+ | `data.icon` | an Address | The document's profile art — an `icon` address, resolved into `img`. |
256
+ | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
257
+ | `data.weight` | number | What the thing weighs. |
258
+ | `data.value` | number | What the thing is worth. |
259
+ | `data.quality` | number | How well it is made. |
260
+ | `data.durability` | number | How much wear it takes before it fails. |
261
+ | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
262
+ | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
263
+ | `data.unique` | `true` or `false` | `true` for a one-of-a-kind item, such as a named weapon; its note links the places and beings involved. Absent, the item is common. |
263
264
 
264
265
  **System mappings**
265
266
 
@@ -294,19 +295,20 @@ These fields are accepted by every note type. A field's value can still be irrel
294
295
 
295
296
  **Subtypes:** `mundane`, `exotic`, `elixir`.
296
297
 
297
- | Field | Shape | Meaning |
298
- | ----------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------ |
299
- | `data.icon` | an Address | The document's profile art — an `icon` address, resolved into `img`. |
300
- | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
301
- | `data.weight` | number | What the thing weighs. |
302
- | `data.value` | number | What the thing is worth. |
303
- | `data.quality` | number | How well it is made. |
304
- | `data.durability` | number | How much wear it takes before it fails. |
305
- | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
306
- | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
307
- | `data.quantity` | number | How many of the thing there are; one when unstated. |
308
- | `data.potency` | string | Potency — `na`, `mild`, `strong` or `great`. |
309
- | `data.strength` | number | Strength; the higher, the stronger. |
298
+ | Field | Shape | Meaning |
299
+ | ----------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
300
+ | `data.icon` | an Address | The document's profile art — an `icon` address, resolved into `img`. |
301
+ | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
302
+ | `data.weight` | number | What the thing weighs. |
303
+ | `data.value` | number | What the thing is worth. |
304
+ | `data.quality` | number | How well it is made. |
305
+ | `data.durability` | number | How much wear it takes before it fails. |
306
+ | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
307
+ | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
308
+ | `data.unique` | `true` or `false` | `true` for a one-of-a-kind item, such as a named weapon; its note links the places and beings involved. Absent, the item is common. |
309
+ | `data.quantity` | number | How many of the thing there are; one when unstated. |
310
+ | `data.potency` | string | Potency — `na`, `mild`, `strong` or `great`. |
311
+ | `data.strength` | number | Strength; the higher, the stronger. |
310
312
 
311
313
  **System mappings**
312
314
 
@@ -322,17 +324,18 @@ These fields are accepted by every note type. A field's value can still be irrel
322
324
 
323
325
  **Subtypes:** None.
324
326
 
325
- | Field | Shape | Meaning |
326
- | ----------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------ |
327
- | `data.icon` | an Address | The document's profile art — an `icon` address, resolved into `img`. |
328
- | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
329
- | `data.weight` | number | What the thing weighs. |
330
- | `data.value` | number | What the thing is worth. |
331
- | `data.quality` | number | How well it is made. |
332
- | `data.durability` | number | How much wear it takes before it fails. |
333
- | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
334
- | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
335
- | `data.capacity` | number | How much it holds. |
327
+ | Field | Shape | Meaning |
328
+ | ----------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
329
+ | `data.icon` | an Address | The document's profile art — an `icon` address, resolved into `img`. |
330
+ | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
331
+ | `data.weight` | number | What the thing weighs. |
332
+ | `data.value` | number | What the thing is worth. |
333
+ | `data.quality` | number | How well it is made. |
334
+ | `data.durability` | number | How much wear it takes before it fails. |
335
+ | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
336
+ | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
337
+ | `data.unique` | `true` or `false` | `true` for a one-of-a-kind item, such as a named weapon; its note links the places and beings involved. Absent, the item is common. |
338
+ | `data.capacity` | number | How much it holds. |
336
339
 
337
340
  **System mappings**
338
341
 
@@ -350,17 +353,18 @@ These fields are accepted by every note type. A field's value can still be irrel
350
353
 
351
354
  **Subtypes:** None.
352
355
 
353
- | Field | Shape | Meaning |
354
- | ----------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------ |
355
- | `data.icon` | an Address | The document's profile art — an `icon` address, resolved into `img`. |
356
- | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
357
- | `data.weight` | number | What the thing weighs. |
358
- | `data.value` | number | What the thing is worth. |
359
- | `data.quality` | number | How well it is made. |
360
- | `data.durability` | number | How much wear it takes before it fails. |
361
- | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
362
- | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
363
- | `data.quantity` | number | How many of the thing there are; one when unstated. |
356
+ | Field | Shape | Meaning |
357
+ | ----------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
358
+ | `data.icon` | an Address | The document's profile art — an `icon` address, resolved into `img`. |
359
+ | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
360
+ | `data.weight` | number | What the thing weighs. |
361
+ | `data.value` | number | What the thing is worth. |
362
+ | `data.quality` | number | How well it is made. |
363
+ | `data.durability` | number | How much wear it takes before it fails. |
364
+ | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
365
+ | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
366
+ | `data.unique` | `true` or `false` | `true` for a one-of-a-kind item, such as a named weapon; its note links the places and beings involved. Absent, the item is common. |
367
+ | `data.quantity` | number | How many of the thing there are; one when unstated. |
364
368
 
365
369
  **System mappings**
366
370
 
@@ -425,17 +429,18 @@ These fields are accepted by every note type. A field's value can still be irrel
425
429
 
426
430
  **Subtypes:** `none`, `arrow`, `bolt`, `bullet`, `dart`, `other`.
427
431
 
428
- | Field | Shape | Meaning |
429
- | ----------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------ |
430
- | `data.icon` | an Address | The document's profile art — an `icon` address, resolved into `img`. |
431
- | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
432
- | `data.weight` | number | What the thing weighs. |
433
- | `data.value` | number | What the thing is worth. |
434
- | `data.quality` | number | How well it is made. |
435
- | `data.durability` | number | How much wear it takes before it fails. |
436
- | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
437
- | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
438
- | `data.quantity` | number | How many of the thing there are; one when unstated. |
432
+ | Field | Shape | Meaning |
433
+ | ----------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
434
+ | `data.icon` | an Address | The document's profile art — an `icon` address, resolved into `img`. |
435
+ | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
436
+ | `data.weight` | number | What the thing weighs. |
437
+ | `data.value` | number | What the thing is worth. |
438
+ | `data.quality` | number | How well it is made. |
439
+ | `data.durability` | number | How much wear it takes before it fails. |
440
+ | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
441
+ | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
442
+ | `data.unique` | `true` or `false` | `true` for a one-of-a-kind item, such as a named weapon; its note links the places and beings involved. Absent, the item is common. |
443
+ | `data.quantity` | number | How many of the thing there are; one when unstated. |
439
444
 
440
445
  **System mappings**
441
446
 
@@ -473,7 +478,7 @@ These fields are accepted by every note type. A field's value can still be irrel
473
478
  | `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. |
474
479
  | `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. |
475
480
  | `data.retired` | list of `{ form, instead?, why }` | The forms the setting does not write, and why. A language skill note only. |
476
- | `data.scope` | a map — `{ folders?, cultures?, lore?, parents?, addresses?, paths?, types?, skip? }` | The notes the register covers. A language skill note only. |
481
+ | `data.scope` | a map — `{ folders?, cultures?, lore?, parents?, addresses?, types?, skip? }` | The notes the register covers. A language skill note only. |
477
482
  | `data.sounds` | a map — `{ letters?, edges?, clusters?, stress?, finals?, syllables?, joining?, joins?, marks?, skeleton?, frames?, readPast?, mutations? }` | The letters the language writes and the rules its words keep. A language skill note only. |
478
483
  | `data.soundChanges` | list of `{ name, from?, to?, takes?, steps }` | Named sets of ordered changes, each making one tongue's words from another's. A language skill note only. |
479
484
  | `data.elements` | list of `{ form, variants?, position?, kind?, sense, examples?, word?, joining? }` | The elements the language's names are built from. A language skill note only. |
@@ -576,7 +581,6 @@ These fields are accepted by every note type. A field's value can still be irrel
576
581
  | `data.scope.lore` | a list of lore Addresses | no | Every note whose `data.lore` names one of these notes. |
577
582
  | `data.scope.parents` | a list of Addresses | no | Every note whose `data.parents` names one of these notes. |
578
583
  | `data.scope.addresses` | a list of Addresses | no | These notes themselves. |
579
- | `data.scope.paths` | a list of content paths | no | Every note whose file sits below one of these paths of the content tree. |
580
584
  | `data.scope.types` | a list of note types | no | The note types the register covers; where stated, a note of another type is out of scope whatever else catches it. |
581
585
  | `data.scope.skip` | a list of Addresses | no | Notes out of scope whatever else catches them. |
582
586
  | `data.sounds.letters` | list of `{ letters, kind, like?, place?, ipa?, tongue? }` | no | The letters the language writes, and the sounds they stand for. |
@@ -632,7 +636,7 @@ These fields are accepted by every note type. A field's value can still be irrel
632
636
  | `data.sounds.marks` | list of `{ mark, letters, kind, limit }` | no | The marks the language writes on its letters. |
633
637
  | `data.sounds.marks[].mark` | a string, such as `acute` | yes | The mark's name. |
634
638
  | `data.sounds.marks[].letters` | a list of letters | yes | The letters that carry it. |
635
- | `data.sounds.marks[].kind` | one of stress, length, apart | yes | What the mark says of its letter. |
639
+ | `data.sounds.marks[].kind` | one of stress, length, apart, quality, tone | yes | What the mark says of its letter. |
636
640
  | `data.sounds.marks[].limit` | one of one, any | yes | How many a word may carry: `one` at most, or `any`. |
637
641
  | `data.sounds.skeleton` | list of `{ second, between? }` | no | The vowel set between a root's second and third consonants. |
638
642
  | `data.sounds.skeleton[].second` | a list of sounds, or `any` | yes | The second consonants of a root the row holds for; `any` for every other. |
@@ -754,16 +758,17 @@ These fields are accepted by every note type. A field's value can still be irrel
754
758
 
755
759
  **Subtypes:** None.
756
760
 
757
- | Field | Shape | Meaning |
758
- | ----------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------ |
759
- | `data.icon` | an Address | The document's profile art — an `icon` address, resolved into `img`. |
760
- | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
761
- | `data.weight` | number | What the thing weighs. |
762
- | `data.value` | number | What the thing is worth. |
763
- | `data.quality` | number | How well it is made. |
764
- | `data.durability` | number | How much wear it takes before it fails. |
765
- | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
766
- | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
761
+ | Field | Shape | Meaning |
762
+ | ----------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
763
+ | `data.icon` | an Address | The document's profile art — an `icon` address, resolved into `img`. |
764
+ | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
765
+ | `data.weight` | number | What the thing weighs. |
766
+ | `data.value` | number | What the thing is worth. |
767
+ | `data.quality` | number | How well it is made. |
768
+ | `data.durability` | number | How much wear it takes before it fails. |
769
+ | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
770
+ | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
771
+ | `data.unique` | `true` or `false` | `true` for a one-of-a-kind item, such as a named weapon; its note links the places and beings involved. Absent, the item is common. |
767
772
 
768
773
  **System mappings**
769
774
 
@@ -897,7 +902,7 @@ Lore records in-world knowledge. A `culture` describes a people; a `custom` desc
897
902
 
898
903
  ### place
899
904
 
900
- **Subtypes:** `world`, `region`, `settlement`, `site`, `structure`, `feature`, `celestial`.
905
+ **Subtypes:** `world`, `region`, `district`, `settlement`, `site`, `structure`, `feature`, `route`, `celestial`.
901
906
 
902
907
  | Field | Shape | Meaning |
903
908
  | -------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -909,6 +914,7 @@ Lore records in-world knowledge. A `culture` describes a people; a `custom` desc
909
914
  | `data.culture` | an Address | The people this place belongs to, as a culture lore note. |
910
915
  | `data.population` | number | Approximate population, to two significant digits. |
911
916
  | `data.government` | an Address or null | The governing affiliation Address; the default target type is affiliation. Explicit null means complete anarchy. A positive population with no government key produces an advisory. |
917
+ | `data.settlements` | { rows, tail } | A region's settlement rows and the sentence stating what they leave out; the table is generated from this declaration. |
912
918
  | `data.market` | number | What trade the settlement supports, on a scale of six: 1 hamlet, 2 village, 3 town, 4 market town, 5 city, 6 great city. |
913
919
  | `data.borders` | list of `{ to, bearing }` entries | Places sharing a frontier with this one — each the other's shortcode and where it lies from here. |
914
920
  | `data.routes` | list of `{ to, bearing, mode, days, terrain?, leagues? }` entries | Journeys from this place's centre — where the destination lies, how it is travelled, and about how many days it takes. |
@@ -929,54 +935,62 @@ Lore records in-world knowledge. A `culture` describes a people; a `custom` desc
929
935
 
930
936
  **Inner keys** — a key a field's value does not declare is an error at its own line and column.
931
937
 
932
- | Key | Shape | Required | Meaning |
933
- | ------------------------------------------ | ------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------------------- |
934
- | `data.events[].id` | an address segment | no | The event's name within its note — lowercase letters and digits. |
935
- | `data.events[].kind` | one `eventKind` value | no | What sort of thing happened. |
936
- | `data.events[].depth` | one `depth` value | no | How far the event's history reaches. |
937
- | `data.events[].when` | a date, or `"0.<day>"` | yes | When it happened, or the anchor and first instance of an event that recurs. |
938
- | `data.events[].until` | a date | no | When a continuous event ended, or where a recurring series stopped. |
939
- | `data.events[].recurs` | `{ every }` or `{ on }` | no | How further occurrences are found; absent for an event that happened once. |
940
- | `data.events[].recurs.every` | a whole number of years, 1 or more | no | A period counted on the canonical axis from `when`. |
941
- | `data.events[].recurs.on` | a list of dates, strictly increasing, each later than `when` | no | Recorded occurrences beyond the first, in place of a period. |
942
- | `data.events[].summary` | a string | yes | What happened, stated plainly. |
943
- | `data.events[].standing` | one `standing` value | no | What the world's evidence supports. |
944
- | `data.events[].names` | `{ name, by, gloss? }[]` | no | The event's names in the world, each with who uses it. |
945
- | `data.events[].names[].name` | a string | yes | One name the event goes by in the world. |
946
- | `data.events[].names[].by` | an Address naming an `affiliation`, `lore`, `place`, `being` or `skill` note | yes | Who uses that name — a people, a polity, a faith, a place, a tongue. |
947
- | `data.events[].names[].gloss` | a string | no | What the name means, or how it is used. |
948
- | `data.events[].where` | `{ locus?, reach? }` | no | Where it happened, and where it was felt. |
949
- | `data.events[].where.locus` | a list of Addresses, each defaulting to `place` | no | Where the event physically happened; each resolves to a place. |
950
- | `data.events[].where.reach` | `{ place, how, knowledge, attributedTo? }[]` | no | Where the event was felt, and whether each place knows why. |
951
- | `data.events[].where.reach[].place` | an Address, defaulting to `place` | yes | A place where the event was felt. |
952
- | `data.events[].where.reach[].how` | a string | yes | One clause: a consequence someone in that place could notice. |
953
- | `data.events[].where.reach[].knowledge` | one `knowledge` value | yes | Whether that place connects what it felt to this event. |
954
- | `data.events[].where.reach[].attributedTo` | an Address, defaulting to `lore`, naming an event or a `lore` note | no | Only beside `knowledge: misattributed` — the cause that place names instead. |
955
- | `data.events[].who` | `{ ref, role }[]` | no | Who took part, and as what. |
956
- | `data.events[].who[].ref` | an Address naming a `being`, `affiliation` or `lore` note | yes | A participant — a being, a people, an affiliation. |
957
- | `data.events[].who[].role` | one `role` value | yes | What the participant was to the event. |
958
- | `data.events[].follows` | `{ event, how, note? }[]` | no | The earlier events this one follows from. |
959
- | `data.events[].follows[].event` | an Address, defaulting to `lore`, anchored to an `event` where its note holds several | yes | The earlier event; it resolves to exactly one event. |
960
- | `data.events[].follows[].how` | one `followsHow` value | yes | How this event follows from it. |
961
- | `data.events[].follows[].note` | a string | no | One clause saying what connects the two. |
962
- | `data.events[].accounts` | `{ by, says, agrees, withholds? }[]` | no | What each people, polity, faith or place says about it. |
963
- | `data.events[].accounts[].by` | an Address naming an `affiliation`, `lore`, `place` or `being` note | yes | Who holds the account. |
964
- | `data.events[].accounts[].says` | a string | yes | What they say happened, in their terms. |
965
- | `data.events[].accounts[].agrees` | one `agrees` value | yes | How far their account agrees with `summary`. |
966
- | `data.events[].accounts[].withholds` | a string | no | What they decline to say. |
967
- | `data.events[].unresolved` | a list of strings | no | What the world itself has not settled. |
968
- | `data.events[].sources` | a list of Addresses | no | The notes that state or support the event; each resolves. |
969
- | `data.events[].stated` | `{ calendar, text }` | no | The date as one tradition writes it in its own reckoning. |
970
- | `data.events[].stated.calendar` | an Address, or a lore shortcode | yes | The calendar that tradition reckons in — a `lore` note with `subType: calendar`. |
971
- | `data.events[].stated.text` | a string | yes | The date as that tradition writes it. |
972
- | `data.borders[].to` | the other place — its shortcode, or its Address | yes | The other place, by Address; the type defaults to `place`. |
973
- | `data.borders[].bearing` | one of N, NE, E, SE, S, SW, W, NW | yes | Where the other place lies from here. |
974
- | `data.routes[].to` | the other place — its shortcode, or its Address | yes | The other place, by Address; the type defaults to `place`. |
975
- | `data.routes[].bearing` | one of N, NE, E, SE, S, SW, W, NW | yes | Where the other place lies from here. |
976
- | `data.routes[].mode` | one of land, boat, ship | yes | How the journey is travelled. |
977
- | `data.routes[].days` | one of 1, 2, 3, 5, 10, 20, 30, 45, 60, 90, 180, 360 | yes | About how many days the journey takes, under normal conditions. |
978
- | `data.routes[].terrain` | a list of terrains in travel order | no | The terrains crossed, in travel order, each crossable by the mode. |
979
- | `data.routes[].leagues` | a distance in leagues | no | The distance, in leagues. |
938
+ | Key | Shape | Required | Meaning |
939
+ | ------------------------------------------ | ------------------------------------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------- |
940
+ | `data.events[].id` | an address segment | no | The event's name within its note — lowercase letters and digits. |
941
+ | `data.events[].kind` | one `eventKind` value | no | What sort of thing happened. |
942
+ | `data.events[].depth` | one `depth` value | no | How far the event's history reaches. |
943
+ | `data.events[].when` | a date, or `"0.<day>"` | yes | When it happened, or the anchor and first instance of an event that recurs. |
944
+ | `data.events[].until` | a date | no | When a continuous event ended, or where a recurring series stopped. |
945
+ | `data.events[].recurs` | `{ every }` or `{ on }` | no | How further occurrences are found; absent for an event that happened once. |
946
+ | `data.events[].recurs.every` | a whole number of years, 1 or more | no | A period counted on the canonical axis from `when`. |
947
+ | `data.events[].recurs.on` | a list of dates, strictly increasing, each later than `when` | no | Recorded occurrences beyond the first, in place of a period. |
948
+ | `data.events[].summary` | a string | yes | What happened, stated plainly. |
949
+ | `data.events[].standing` | one `standing` value | no | What the world's evidence supports. |
950
+ | `data.events[].names` | `{ name, by, gloss? }[]` | no | The event's names in the world, each with who uses it. |
951
+ | `data.events[].names[].name` | a string | yes | One name the event goes by in the world. |
952
+ | `data.events[].names[].by` | an Address naming an `affiliation`, `lore`, `place`, `being` or `skill` note | yes | Who uses that name — a people, a polity, a faith, a place, a tongue. |
953
+ | `data.events[].names[].gloss` | a string | no | What the name means, or how it is used. |
954
+ | `data.events[].where` | `{ locus?, reach? }` | no | Where it happened, and where it was felt. |
955
+ | `data.events[].where.locus` | a list of Addresses, each defaulting to `place` | no | Where the event physically happened; each resolves to a place. |
956
+ | `data.events[].where.reach` | `{ place, how, knowledge, attributedTo? }[]` | no | Where the event was felt, and whether each place knows why. |
957
+ | `data.events[].where.reach[].place` | an Address, defaulting to `place` | yes | A place where the event was felt. |
958
+ | `data.events[].where.reach[].how` | a string | yes | One clause: a consequence someone in that place could notice. |
959
+ | `data.events[].where.reach[].knowledge` | one `knowledge` value | yes | Whether that place connects what it felt to this event. |
960
+ | `data.events[].where.reach[].attributedTo` | an Address, defaulting to `lore`, naming an event or a `lore` note | no | Only beside `knowledge: misattributed` — the cause that place names instead. |
961
+ | `data.events[].who` | `{ ref, role }[]` | no | Who took part, and as what. |
962
+ | `data.events[].who[].ref` | an Address naming a `being`, `affiliation` or `lore` note | yes | A participant — a being, a people, an affiliation. |
963
+ | `data.events[].who[].role` | one `role` value | yes | What the participant was to the event. |
964
+ | `data.events[].follows` | `{ event, how, note? }[]` | no | The earlier events this one follows from. |
965
+ | `data.events[].follows[].event` | an Address, defaulting to `lore`, anchored to an `event` where its note holds several | yes | The earlier event; it resolves to exactly one event. |
966
+ | `data.events[].follows[].how` | one `followsHow` value | yes | How this event follows from it. |
967
+ | `data.events[].follows[].note` | a string | no | One clause saying what connects the two. |
968
+ | `data.events[].accounts` | `{ by, says, agrees, withholds? }[]` | no | What each people, polity, faith or place says about it. |
969
+ | `data.events[].accounts[].by` | an Address naming an `affiliation`, `lore`, `place` or `being` note | yes | Who holds the account. |
970
+ | `data.events[].accounts[].says` | a string | yes | What they say happened, in their terms. |
971
+ | `data.events[].accounts[].agrees` | one `agrees` value | yes | How far their account agrees with `summary`. |
972
+ | `data.events[].accounts[].withholds` | a string | no | What they decline to say. |
973
+ | `data.events[].unresolved` | a list of strings | no | What the world itself has not settled. |
974
+ | `data.events[].sources` | a list of Addresses | no | The notes that state or support the event; each resolves. |
975
+ | `data.events[].stated` | `{ calendar, text }` | no | The date as one tradition writes it in its own reckoning. |
976
+ | `data.events[].stated.calendar` | an Address, or a lore shortcode | yes | The calendar that tradition reckons in — a `lore` note with `subType: calendar`. |
977
+ | `data.events[].stated.text` | a string | yes | The date as that tradition writes it. |
978
+ | `data.settlements.rows` | a list of settlement rows | yes | One row per settlement. |
979
+ | `data.settlements.rows[].place` | a place Address | no | The existing settlement note; exclusive with name. |
980
+ | `data.settlements.rows[].name` | plain text | no | A settlement without a note; exclusive with place. |
981
+ | `data.settlements.rows[].market` | a market class, 1 to 6 | yes | What trade the settlement supports. |
982
+ | `data.settlements.rows[].population` | a positive whole number | yes | How many people live here. |
983
+ | `data.settlements.rows[].heldBy` | an affiliation or being Address | no | What holds the settlement's land, where its culture holds land; what the holder is says how it is held. |
984
+ | `data.settlements.rows[].for` | plain text | no | Optional reason the settlement exists. |
985
+ | `data.settlements.tail` | a nonempty sentence | yes | What the table leaves out. |
986
+ | `data.borders[].to` | the other place — its shortcode, or its Address | yes | The other place, by Address; the type defaults to `place`. |
987
+ | `data.borders[].bearing` | one of N, NE, E, SE, S, SW, W, NW | yes | Where the other place lies from here. |
988
+ | `data.routes[].to` | the other place — its shortcode, or its Address | yes | The other place, by Address; the type defaults to `place`. |
989
+ | `data.routes[].bearing` | one of N, NE, E, SE, S, SW, W, NW | yes | Where the other place lies from here. |
990
+ | `data.routes[].mode` | one of land, boat, ship | yes | How the journey is travelled. |
991
+ | `data.routes[].days` | one of 1, 2, 3, 5, 10, 20, 30, 45, 60, 90, 180, 360 | yes | About how many days the journey takes, under normal conditions. |
992
+ | `data.routes[].terrain` | a list of terrains in travel order | no | The terrains crossed, in travel order, each crossable by the mode. |
993
+ | `data.routes[].leagues` | a distance in leagues | no | The distance, in leagues. |
980
994
 
981
995
  ### scenario
982
996
 
@@ -989,7 +1003,6 @@ Lore records in-world knowledge. A `culture` describes a people; a `custom` desc
989
1003
  | `data.cast` | list of Addresses | Beings who appear in it. |
990
1004
  | `data.factions` | list of Addresses | Affiliations with a stake in it. |
991
1005
  | `data.follows` | list of Addresses | Scenarios that should be played before this one. |
992
- | `data.status` | string | `draft`, `playtested` or `published`. |
993
1006
  | `data.party.size` | string | `solo`, `small`, `standard`, `large` or `host`. |
994
1007
  | `data.party.archetypes` | list of strings | Archetypes the scenario is written for. |
995
1008
 
@@ -1014,60 +1027,60 @@ Lore records in-world knowledge. A `culture` describes a people; a `custom` desc
1014
1027
 
1015
1028
  **Inner keys** — a key a field's value does not declare is an error at its own line and column.
1016
1029
 
1017
- | Key | Shape | Required | Meaning |
1018
- | ------------------------------------------------------ | --------------------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
1019
- | `data.rules.normalization` | "NFC" | yes | Required value: "NFC". |
1020
- | `data.rules.matching` | "longest-first" | yes | Required value: "longest-first". |
1021
- | `data.rules.roundTrip` | a string | no | Exact by default; canonical permits aliases and empty code sequences and decodes an authored conventional spelling. |
1022
- | `data.rules.word-separators` | a list of nonempty NFC source sequences | no | Source word dividers written as shared spaces, after contextual alternatives; cannot also be ordinary mappings or replace shared punctuation. |
1023
- | `data.rules.case` | a map | no | Case handling for letters and consonant groups. |
1024
- | `data.rules.case.single-letter` | "preserve" | yes | Required value: "preserve". |
1025
- | `data.rules.case.consonant-group` | "lowercase-or-initial-uppercase" | yes | Required value: "lowercase-or-initial-uppercase". |
1026
- | `data.rules.case.other-group-cases` | "forbidden" | yes | Required value: "forbidden". |
1027
- | `data.rules.stress` | a map | no | The font's nonprinting stress modifier after an acute vowel. |
1028
- | `data.rules.stress.modifier` | a string | yes | The font code for U+E0114. |
1029
- | `data.rules.stress.position` | "after-stressed-vowel" | yes | Required value: "after-stressed-vowel". |
1030
- | `data.rules.stress.printing` | false | yes | Required value: false. |
1031
- | `data.rules.stress.effect` | "stress-only" | yes | Required value: "stress-only". |
1032
- | `data.rules.stress.changes-sound` | false | yes | Required value: false. |
1033
- | `data.rules.stress.changes-length` | false | yes | Required value: false. |
1034
- | `data.rules.stress.vowel-group-position` | "first-vowel" | yes | Required value: "first-vowel". |
1035
- | `data.rules.vowel-groups` | a map | no | Explicit recognized vowel groups and their acute placement. |
1036
- | `data.rules.vowel-groups.reading` | "established" | yes | Required value: "established". |
1037
- | `data.rules.vowel-groups.allow-splitting` | false | yes | Required value: false. |
1038
- | `data.rules.vowel-groups.unrecognized-adjacent-vowels` | "separate" | yes | Required value: "separate". |
1039
- | `data.rules.vowel-groups.groups` | a list of vowel groups | yes | The complete authored group inventory. |
1040
- | `data.rules.diaeresis` | a map | no | Whether diaeresis mappings are allowed. |
1041
- | `data.rules.diaeresis.allowed` | true or false | yes | False forbids the accent; true permits explicitly mapped and accepted characters. |
1042
- | `data.rules.grave-accent` | a map | no | Whether grave-accent mappings are allowed. |
1043
- | `data.rules.grave-accent.allowed` | true or false | yes | False forbids the accent; true permits explicitly mapped and accepted characters. |
1044
- | `data.rules.contextual-mappings` | a list of conditional mappings | no | Alternatives conditioned on the following letter or source position, applied before unconditional mappings. |
1045
- | `data.rules.contextual-mappings[].match` | a string | yes | The source sequence. |
1046
- | `data.rules.contextual-mappings[].before` | a string | no | Match before a declared vowel or another letter. |
1047
- | `data.rules.contextual-mappings[].at` | a string | no | Match at word start, word end or line start. |
1048
- | `data.rules.contextual-mappings[].emit` | a glyph code or list of codes (empty only with canonical round trips) | yes | The font codes written by this alternative. |
1049
- | `data.rules.y` | a map | no | The consonant reading of y. |
1050
- | `data.rules.y.kind` | "consonant" | yes | Required value: "consonant". |
1051
- | `data.rules.y.sound` | "y in yes" | yes | Required value: "y in yes". |
1052
- | `data.rules.y.vowel-reading` | false | yes | Required value: false. |
1053
- | `data.concepts[].id` | lowercase letters, digits and `-` | yes | The concept's id, which a word's `concept` names. Unique in the package. |
1054
- | `data.concepts[].gloss` | a short gloss, such as `a smell; a scent` | yes | What the concept means, in brief. |
1055
- | `data.concepts[].group` | a group name, such as `senses` | yes | The group the report lists the concept under. |
1056
- | `data.sounds.letters` | list of `{ letters, kind, like?, place?, ipa?, tongue? }` | no | The letters the language writes, and the sounds they stand for. |
1057
- | `data.sounds.letters[].letters` | a list of letters | yes | The letters or digraphs the row describes, as written. |
1058
- | `data.sounds.letters[].kind` | a string, such as `consonant` or `long vowel` | yes | What kind of sound they write. |
1059
- | `data.sounds.letters[].like` | a string | no | What they sound like; absent where the row states only their kind and place. |
1060
- | `data.sounds.letters[].place` | a string, such as `lips` or `tongue-tip` | no | Where in the mouth they are made. |
1061
- | `data.sounds.letters[].ipa` | a string in the International Phonetic Alphabet, such as `ʃ` | no | The sounds they write, in the International Phonetic Alphabet. |
1062
- | `data.sounds.letters[].tongue` | a tag or a language note's Address, or a list of them | no | The tongues that write them, each a tag `data.tongues` declares or the Address of a language note; every one where absent. A `doc` note's rows name language notes only. |
1063
- | `data.sounds.marks` | list of `{ mark, letters, kind, limit }` | no | The marks the language writes on its letters. |
1064
- | `data.sounds.marks[].mark` | a string, such as `acute` | yes | The mark's name. |
1065
- | `data.sounds.marks[].letters` | a list of letters | yes | The letters that carry it. |
1066
- | `data.sounds.marks[].kind` | one of stress, length, apart | yes | What the mark says of its letter. |
1067
- | `data.sounds.marks[].limit` | one of one, any | yes | How many a word may carry: `one` at most, or `any`. |
1068
- | `data.metres[].name` | string | yes | What a verse div's `scan=` names the metre by: lowercase letters, digits and `-`, unique in the package. |
1069
- | `data.metres[].beats` | a whole number above zero | yes | The beats of one line. |
1070
- | `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. |
1030
+ | Key | Shape | Required | Meaning |
1031
+ | ------------------------------------------------------ | --------------------------------------------------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1032
+ | `data.rules.normalization` | "NFC" | yes | Required value: "NFC". |
1033
+ | `data.rules.matching` | "longest-first" | yes | Required value: "longest-first". |
1034
+ | `data.rules.roundTrip` | a string | no | Exact by default; canonical permits aliases and empty code sequences and decodes an authored conventional spelling. |
1035
+ | `data.rules.word-separators` | a list of nonempty NFC source sequences | no | Source word dividers written as shared spaces, after contextual alternatives; cannot also be ordinary mappings or replace shared punctuation. |
1036
+ | `data.rules.case` | a map | no | Case handling for letters and consonant groups. |
1037
+ | `data.rules.case.single-letter` | "preserve" | yes | Required value: "preserve". |
1038
+ | `data.rules.case.consonant-group` | "lowercase-or-initial-uppercase" | yes | Required value: "lowercase-or-initial-uppercase". |
1039
+ | `data.rules.case.other-group-cases` | "forbidden" | yes | Required value: "forbidden". |
1040
+ | `data.rules.stress` | a map | no | The font's nonprinting stress modifier after an acute vowel. |
1041
+ | `data.rules.stress.modifier` | a string | yes | The font code for U+E0114. |
1042
+ | `data.rules.stress.position` | "after-stressed-vowel" | yes | Required value: "after-stressed-vowel". |
1043
+ | `data.rules.stress.printing` | false | yes | Required value: false. |
1044
+ | `data.rules.stress.effect` | "stress-only" | yes | Required value: "stress-only". |
1045
+ | `data.rules.stress.changes-sound` | false | yes | Required value: false. |
1046
+ | `data.rules.stress.changes-length` | false | yes | Required value: false. |
1047
+ | `data.rules.stress.vowel-group-position` | "first-vowel" | yes | Required value: "first-vowel". |
1048
+ | `data.rules.vowel-groups` | a map | no | Explicit recognized vowel groups and their acute placement. |
1049
+ | `data.rules.vowel-groups.reading` | "established" | yes | Required value: "established". |
1050
+ | `data.rules.vowel-groups.allow-splitting` | false | yes | Required value: false. |
1051
+ | `data.rules.vowel-groups.unrecognized-adjacent-vowels` | "separate" | yes | Required value: "separate". |
1052
+ | `data.rules.vowel-groups.groups` | a list of vowel groups | yes | The complete authored group inventory. |
1053
+ | `data.rules.diaeresis` | a map | no | Whether diaeresis vowels are allowed, and how they are written. |
1054
+ | `data.rules.diaeresis.allowed` | true or false | yes | False forbids the diaeresis; true derives plain-vowel mappings and restores splits where a declared group's native mapping distinguishes joined and separate vowels. Exact conversion refuses an unrecoverable derived group split; canonical conversion keeps its conventional reading. |
1055
+ | `data.rules.grave-accent` | a map | no | Whether grave-accent mappings are allowed. |
1056
+ | `data.rules.grave-accent.allowed` | true or false | yes | False forbids the accent; true permits explicitly mapped and accepted characters. |
1057
+ | `data.rules.contextual-mappings` | a list of conditional mappings | no | Alternatives conditioned on the following letter or source position, applied before unconditional mappings. |
1058
+ | `data.rules.contextual-mappings[].match` | a string | yes | The source sequence. |
1059
+ | `data.rules.contextual-mappings[].before` | a string | no | Match before a declared vowel or another letter. |
1060
+ | `data.rules.contextual-mappings[].at` | a string | no | Match at word start, word end or line start. |
1061
+ | `data.rules.contextual-mappings[].emit` | a glyph code or list of codes (empty only with canonical round trips) | yes | The font codes written by this alternative. |
1062
+ | `data.rules.y` | a map | no | The consonant reading of y. |
1063
+ | `data.rules.y.kind` | "consonant" | yes | Required value: "consonant". |
1064
+ | `data.rules.y.sound` | "y in yes" | yes | Required value: "y in yes". |
1065
+ | `data.rules.y.vowel-reading` | false | yes | Required value: false. |
1066
+ | `data.concepts[].id` | lowercase letters, digits and `-` | yes | The concept's id, which a word's `concept` names. Unique in the package. |
1067
+ | `data.concepts[].gloss` | a short gloss, such as `a smell; a scent` | yes | What the concept means, in brief. |
1068
+ | `data.concepts[].group` | a group name, such as `senses` | yes | The group the report lists the concept under. |
1069
+ | `data.sounds.letters` | list of `{ letters, kind, like?, place?, ipa?, tongue? }` | no | The letters the language writes, and the sounds they stand for. |
1070
+ | `data.sounds.letters[].letters` | a list of letters | yes | The letters or digraphs the row describes, as written. |
1071
+ | `data.sounds.letters[].kind` | a string, such as `consonant` or `long vowel` | yes | What kind of sound they write. |
1072
+ | `data.sounds.letters[].like` | a string | no | What they sound like; absent where the row states only their kind and place. |
1073
+ | `data.sounds.letters[].place` | a string, such as `lips` or `tongue-tip` | no | Where in the mouth they are made. |
1074
+ | `data.sounds.letters[].ipa` | a string in the International Phonetic Alphabet, such as `ʃ` | no | The sounds they write, in the International Phonetic Alphabet. |
1075
+ | `data.sounds.letters[].tongue` | a tag or a language note's Address, or a list of them | no | The tongues that write them, each a tag `data.tongues` declares or the Address of a language note; every one where absent. A `doc` note's rows name language notes only. |
1076
+ | `data.sounds.marks` | list of `{ mark, letters, kind, limit }` | no | The marks the language writes on its letters. |
1077
+ | `data.sounds.marks[].mark` | a string, such as `acute` | yes | The mark's name. |
1078
+ | `data.sounds.marks[].letters` | a list of letters | yes | The letters that carry it. |
1079
+ | `data.sounds.marks[].kind` | one of stress, length, apart, quality, tone | yes | What the mark says of its letter. |
1080
+ | `data.sounds.marks[].limit` | one of one, any | yes | How many a word may carry: `one` at most, or `any`. |
1081
+ | `data.metres[].name` | string | yes | What a verse div's `scan=` names the metre by: lowercase letters, digits and `-`, unique in the package. |
1082
+ | `data.metres[].beats` | a whole number above zero | yes | The beats of one line. |
1083
+ | `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. |
1071
1084
 
1072
1085
  ### macro
1073
1086