@heroiclands/package-build 22.16.0 → 22.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/bin/package-build.mjs +14 -2
- package/docs/api.md +22 -22
- package/docs/authoring/dates-and-calendars.md +63 -11
- package/docs/authoring/links-and-markup.md +1 -1
- package/docs/commands.md +8 -6
- package/docs/reference/format-details.md +107 -165
- package/docs/reference/note-types.md +11 -10
- package/engine/calendar-format.mjs +441 -0
- package/engine/calendar-human.mjs +65 -3
- package/engine/calendar-notes.mjs +277 -96
- package/engine/content-format.yaml +2 -1
- package/engine/date-conversion.mjs +4 -4
- package/engine/markdown-expressions.mjs +2 -1
- package/engine/note-dates.mjs +50 -22
- package/engine/reckoning-markers.mjs +154 -256
- package/package.json +1 -1
- package/types/engine/calendar-format.d.mts +33 -0
- package/types/engine/calendar-notes.d.mts +3 -3
- package/types/engine/date-conversion.d.mts +1 -1
- package/types/engine/note-dates.d.mts +2 -2
- package/types/engine/reckoning-markers.d.mts +13 -28
|
@@ -335,94 +335,21 @@ order without changing the Markdown body.
|
|
|
335
335
|
|
|
336
336
|
#### Dates and calendars
|
|
337
337
|
|
|
338
|
-
A
|
|
339
|
-
year count begins. Several eras may use one calendar; each has its own origin.
|
|
340
|
-
Every frontmatter date uses either a canonical day or a named calendar date:
|
|
338
|
+
A canonical date is `<year>[.<day>[:HHMMSS]]`. The day is one-based within the world's year. `720` covers the whole year; `720.136` covers that day; `720.136:143005` identifies one second. Negative years are valid. Prefix either form with `~` to express uncertainty beyond its written interval. `unknown` is allowed only in fields that accept an unknown occurrence.
|
|
341
339
|
|
|
342
|
-
|
|
343
|
-
data:
|
|
344
|
-
born: datefrom vrcal 23 Taranis 326 VR
|
|
345
|
-
died: ~326.114
|
|
346
|
-
```
|
|
340
|
+
A named date uses `datefrom <calendar> <date>`, where the final text follows the calendar's `data.formats.std` pattern, or its first named pattern when `std` is absent. For example, a calendar with `std: "MM/DD/Y GGG"` reads `datefrom commoncal 01/23/326 VR`, `datefrom commoncal 01/326 VR`, and `datefrom commoncal 326 VR`. Omitting the day or month retains month or year precision in frontmatter. The CLI `datefrom` command requires a day to produce one canonical day. The calendar argument is a shortcode or Address. A time follows the day only when specified in the pattern, or as a trailing `HH:mm:ss` when the pattern has no clock tokens. A named date with an era-relative year names its era.
|
|
347
341
|
|
|
348
|
-
`
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
the calendar has several eras. Month names and their abbreviations come from
|
|
352
|
-
the calendar note; an era's `abbreviation`, `name`, marker, or shortcode names
|
|
353
|
-
it. The conversion retains year or month precision when no exact day is given.
|
|
354
|
-
A 24-hour time follows an exact day, such as `23 Taranis 326 VR 14:30:05`.
|
|
355
|
-
|
|
356
|
-
The calendar-neutral spelling is `<year>.<day>[:HHMMSS]`: `720.136` names day
|
|
357
|
-
136 of canonical year 720, and `720.136:143005` adds 14:30:05. The dot means
|
|
358
|
-
**day of year**, not a month. Its day must fit the world's `data.year.days`,
|
|
359
|
-
and its time must fit a 24-hour day. A negative canonical year is valid.
|
|
360
|
-
Prefix either form with `~` to mark it approximate, as in `~326.114` or
|
|
361
|
-
`~datefrom vrcal 23 Taranis 326 VR`. `unknown` states that an occurrence is
|
|
362
|
-
known but its date is not recorded, in fields that permit it. No other
|
|
363
|
-
frontmatter date form is valid.
|
|
364
|
-
|
|
365
|
-
`package-build datefrom <calendar> <date>` prints the canonical day for a
|
|
366
|
-
calendar date. `package-build dateto <calendar> <canonical-date>` prints the
|
|
367
|
-
calendar date in the era covering that day. The calendar argument is its
|
|
368
|
-
shortcode or Address. `datefrom` reads the named calendar form; `dateto` prints
|
|
369
|
-
its named month and era. A gap between eras has no calendar date to print.
|
|
370
|
-
Both commands read the current note tree and print only the converted value
|
|
371
|
-
on success.
|
|
372
|
-
|
|
373
|
-
An era's `start` locates its first year on the canonical timeline. It may be
|
|
374
|
-
written canonically, such as `start: 1.1`, or in another declared era. The build
|
|
375
|
-
resolves these dependencies across calendar notes and reports cycles, unknown
|
|
376
|
-
eras, and dates outside an era's `end`. A year-precision start anchors the
|
|
377
|
-
reckoning at the first day of that canonical year for conversion; it does not
|
|
378
|
-
date the event that gave the era its name. A marker, when declared, is unique
|
|
379
|
-
across the corpus and contains uppercase letters or digits, beginning with a
|
|
380
|
-
letter. A
|
|
381
|
-
year-precision end includes the whole named year. Month and day values are
|
|
382
|
-
bounded by the named era's calendar months; canonical dates remain
|
|
383
|
-
calendar-neutral.
|
|
384
|
-
|
|
385
|
-
Eras in one calendar are listed by increasing `start`. The first era also
|
|
386
|
-
names years before its start with negative numbers: if its year 1 begins in
|
|
387
|
-
canonical year `-200`, its year `-100` corresponds to canonical year `-300`.
|
|
388
|
-
Later eras count forward from their own year 1; a negative year in a later era
|
|
389
|
-
is refused. The next era's start closes the preceding era on the day before it
|
|
390
|
-
begins. An explicit earlier `end` leaves a gap, whose dates have no era in
|
|
391
|
-
that calendar. The authored note dates and the neutral timeline follow this
|
|
392
|
-
rule; the compiled calendar definition retains the format required by its
|
|
393
|
-
Foundry consumers.
|
|
394
|
-
|
|
395
|
-
An era is addressed as `<calendar shortcode>.<era shortcode>` where a
|
|
396
|
-
qualified reference is needed. A full calendar Address works when calendar
|
|
397
|
-
shortcodes occur in more than one package. An ambiguous reference is an error.
|
|
398
|
-
The content index and generated page
|
|
399
|
-
frontmatter carry `resolvedDates` for a being's `born` and `died`, and for a
|
|
400
|
-
lore note's `data.event.when` and `until`. Each record retains the authored
|
|
401
|
-
`text`, precision, approximation, and, when known, its canonical year, day,
|
|
402
|
-
span, and sort value. An `unknown` date has no sortable year. A labelled era
|
|
403
|
-
also supplies `prose` for display; otherwise `prose` is null.
|
|
404
|
-
|
|
405
|
-
To print a date in another calendar, select the single era whose span contains
|
|
406
|
-
the date. Dates before the first era's start select that era's negative count.
|
|
407
|
-
A gap selects no era and keeps the authored date. Overlapping era declarations
|
|
408
|
-
are an error. The printable form keeps year, month, day, and `~`
|
|
409
|
-
at the precision the author supplied. Years on either side of an era's origin
|
|
410
|
-
are `-1` and `1`; there is no year zero. A page's infobox displays the date in
|
|
411
|
-
its authored era, using that era's prose label when one is declared.
|
|
412
|
-
|
|
413
|
-
A being or place may set `data.calendar` to the Address of a `lore` note with
|
|
414
|
-
`subType: calendar`. A being's infobox prints its dates in the era active in
|
|
415
|
-
that calendar; a place's infobox prints its `present` there. When no calendar
|
|
416
|
-
is named, it prints the date's authored era.
|
|
417
|
-
Clock time is preserved in either form.
|
|
342
|
+
`data.epoch` on a calendar is a canonical `<year>.<day>`: the day on which **calendar year 1, day 1** occurs. It cannot be year-only, approximate, or expressed through its own calendar. `data.moon.newOn` also locates a particular day. The `data.eras[].start` values are `null` or positive **calendar years**. Exactly one null era covers dates before calendar year 1, and exactly one era starts at year 1. Further era starts are distinct positive integers. Numeric start order determines era boundaries, regardless of array order. The null era numbers its years backwards; later eras begin at their own displayed year 1. An era may have a unique uppercase `marker` for resolving authored dates.
|
|
343
|
+
|
|
344
|
+
`package-build datefrom <calendar> <date>` reads the default calendar pattern and prints a canonical day. `package-build dateto <calendar> <canonical-date>` prints the day in the covering era; `--format <name>` chooses another named output pattern. The [authoring guide](../authoring/dates-and-calendars.md) gives a complete example.
|
|
418
345
|
|
|
419
346
|
Markdown prose accepts inline `{{...}}` expressions. A property path reads
|
|
420
347
|
the note's frontmatter, and `dateformat` converts a date to the reckoning used by a
|
|
421
348
|
specified calendar. The first argument names a calendar note by shortcode or
|
|
422
349
|
Address, or one of its eras by `<calendar>.<era>`. Use a full Address when a
|
|
423
350
|
short name is ambiguous. The second argument is a canonical date or a
|
|
424
|
-
frontmatter property holding a date.
|
|
425
|
-
|
|
351
|
+
frontmatter property holding a date. An optional third argument names an output
|
|
352
|
+
format from the calendar note. An explicit era that does not cover the date is an error.
|
|
426
353
|
|
|
427
354
|
```markdown
|
|
428
355
|
{{name.full}} was born on {{dateformat "vrcal" data.born}}.
|
|
@@ -3621,102 +3548,117 @@ the setting itself, rather than instructions or other apparatus for the GM.
|
|
|
3621
3548
|
tournament is not a matter of time-reckoning at all — and from `culture`, which is a grouping
|
|
3622
3549
|
of people rather than an occasion they attend.
|
|
3623
3550
|
|
|
3624
|
-
| `data` property | Values
|
|
3625
|
-
| --------------- |
|
|
3626
|
-
| `epoch` |
|
|
3627
|
-
| `months` | `{ name, abbreviation?, days }[]`
|
|
3628
|
-
| `weekdays` | `{ name, abbreviation? }[]`
|
|
3629
|
-
| `seasons` | `{ name, abbreviation?,
|
|
3630
|
-
| `
|
|
3631
|
-
| `
|
|
3632
|
-
| `
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
chronology metadata, including
|
|
3636
|
-
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
3640
|
-
#### What a calendar note declares
|
|
3641
|
-
|
|
3642
|
-
**The calendar keys belong to `subType: calendar` and to no other genre of
|
|
3643
|
-
`lore`.** A note carrying one under any other subType is refused, and a calendar
|
|
3644
|
-
note that states no `months` and no `epoch` is refused too: a calendar divides
|
|
3645
|
-
the year and says where the count begins, and one that does neither is prose
|
|
3646
|
-
about time rather than a calendar.
|
|
3551
|
+
| `data` property | Values | Description |
|
|
3552
|
+
| --------------- | ----------------------------------------------------------------------------- | ------------------------------------------------------------ |
|
|
3553
|
+
| `epoch` | canonical `<year>.<day>` | The canonical day that equals calendar year 1, day 1 |
|
|
3554
|
+
| `months` | `{ name, abbreviation?, days }[]` | Ordered months; their days sum to the world's year |
|
|
3555
|
+
| `weekdays` | `{ name, abbreviation? }[]` | Ordered week days, indexed from zero; weeks run continuously |
|
|
3556
|
+
| `seasons` | `{ name, abbreviation?, start }[]` | Seasons starting on one-based days of year |
|
|
3557
|
+
| `namedDays` | `{ name, abbreviation?, day }[]` | Names assigned to one-based days of year |
|
|
3558
|
+
| `eras` | `{ shortcode, name, abbreviation?, marker?, proclaimedBy?, start, label? }[]` | Year counts; `start` is `null` or an in-calendar year |
|
|
3559
|
+
| `formats` | map of names to Calendaria patterns | Named date formats; `std` is the preferred default |
|
|
3560
|
+
| `event` | map | A dated occurrence and its chronology metadata |
|
|
3561
|
+
|
|
3562
|
+
`data.event` is available on every `lore` subType. It holds structured chronology metadata, including an event's kind, date, sources, and affected places. The shared format checks that it is a map; a content package can check its details. It does not appear as an infobox row.
|
|
3563
|
+
|
|
3564
|
+
#### Calendar note structure
|
|
3565
|
+
|
|
3566
|
+
The calendar keys belong to `subType: calendar`. A calendar declares `months`, `epoch`, and `eras`. The world's `place` note declares the year length; the calendar's months sum to that length. A calendar with no week omits `weekdays`.
|
|
3647
3567
|
|
|
3648
3568
|
```yaml
|
|
3649
3569
|
shortcode: commoncal
|
|
3650
|
-
name:
|
|
3651
|
-
full: The Common Calendar
|
|
3570
|
+
name: { full: The Common Calendar }
|
|
3652
3571
|
type: lore
|
|
3653
3572
|
subType: calendar
|
|
3654
3573
|
data:
|
|
3655
|
-
epoch:
|
|
3574
|
+
epoch: 1.1
|
|
3656
3575
|
months:
|
|
3657
3576
|
- { name: Floralis, abbreviation: Flor, days: 30 }
|
|
3658
3577
|
- { name: Lusenar, abbreviation: Luse, days: 31 }
|
|
3659
|
-
|
|
3578
|
+
- { name: Murkas, abbreviation: Murk, days: 30 }
|
|
3579
|
+
- { name: Taranis, abbreviation: Tara, days: 31 }
|
|
3580
|
+
- { name: Vulcar, abbreviation: Vulc, days: 30 }
|
|
3581
|
+
- { name: Menaris, abbreviation: Mena, days: 31 }
|
|
3582
|
+
- { name: Venuris, abbreviation: Venu, days: 30 }
|
|
3583
|
+
- { name: Karnavar, abbreviation: Karn, days: 30 }
|
|
3584
|
+
- { name: Morveth, abbreviation: Morv, days: 31 }
|
|
3585
|
+
- { name: Thanaris, abbreviation: Than, days: 30 }
|
|
3586
|
+
- { name: Aetheris, abbreviation: Aeth, days: 31 }
|
|
3587
|
+
- { name: Janar, abbreviation: Jana, days: 30 }
|
|
3588
|
+
weekdays:
|
|
3589
|
+
- { name: Newday, abbreviation: New }
|
|
3590
|
+
- { name: Tillday, abbreviation: Til }
|
|
3591
|
+
- { name: Growday, abbreviation: Gro }
|
|
3592
|
+
- { name: Harvestday, abbreviation: Hrv }
|
|
3593
|
+
- { name: Reapday, abbreviation: Rep }
|
|
3594
|
+
- { name: Slowday, abbreviation: Slo }
|
|
3595
|
+
- { name: Setday, abbreviation: Set }
|
|
3660
3596
|
seasons:
|
|
3661
|
-
- { name: Spring,
|
|
3597
|
+
- { name: Spring, abbreviation: Spr, start: 1 }
|
|
3598
|
+
- { name: Summer, abbreviation: Sum, start: 92 }
|
|
3599
|
+
- { name: Fall, abbreviation: Fal, start: 183 }
|
|
3600
|
+
- { name: Winter, abbreviation: Win, start: 274 }
|
|
3601
|
+
namedDays:
|
|
3602
|
+
- { name: New Years Day, abbreviation: NY, day: 1 }
|
|
3603
|
+
formats:
|
|
3604
|
+
std: "MM/DD/Y GGG"
|
|
3605
|
+
long: "D MMMM Y GGG"
|
|
3662
3606
|
eras:
|
|
3663
|
-
- shortcode:
|
|
3664
|
-
|
|
3665
|
-
|
|
3666
|
-
abbreviation: AF
|
|
3667
|
-
proclaimedBy: vylarinmpr
|
|
3668
|
-
start: 1.1
|
|
3669
|
-
dateFormats: { full: "D MMMM, YYYY", yearLabel: "[Year] YYYY" }
|
|
3670
|
-
```
|
|
3671
|
-
|
|
3672
|
-
`dateFormats` accepts `short`, `long`, `full`, `time`, `weekHeader`,
|
|
3673
|
-
`yearHeader`, `yearLabel`, and `crossCalendar`. Each value is a Calendaria
|
|
3674
|
-
format string. Its date tokens may appear bare; ordinary words belong in
|
|
3675
|
-
`[brackets]` or `{braces}` so they print literally. A bare letter run that is
|
|
3676
|
-
not a Calendaria token is an error. The `time12` slot is outside this
|
|
3677
|
-
vocabulary.
|
|
3678
|
-
The conversion commands use the calendar's month names and era labels;
|
|
3679
|
-
`dateFormats` supplies Foundry and Calendaria display patterns.
|
|
3680
|
-
|
|
3681
|
-
**Position in the list is position in the year.** Days that belong to no month
|
|
3682
|
-
are a short month like any other: a five-day festival is one entry, and where it
|
|
3683
|
-
sits in the list is where it falls in the year. There is no intercalary
|
|
3684
|
-
mechanism, because there is nothing for one to do.
|
|
3685
|
-
|
|
3686
|
-
**How long the year is, how the day divides and how the moon moves are facts
|
|
3687
|
-
about the world, not about a calendar**, so no calendar note states any of them
|
|
3688
|
-
— they are written once on the world's own `place` note and on its moon's, and
|
|
3689
|
-
every calendar is compiled against them. The one arithmetic check follows from
|
|
3690
|
-
that: `months` must sum to `year.days`, and a list that does not describes a
|
|
3691
|
-
different world rather than a different calendar.
|
|
3692
|
-
|
|
3693
|
-
**An era is a way of counting years within a calendar**, so its rows sit beside
|
|
3694
|
-
the months. Each states its own `shortcode`, unique within the note. A calendar
|
|
3695
|
-
may contain several era rows, each with its own year origin. The
|
|
3696
|
-
`abbreviation` is its preferred short printed label; a declared marker is
|
|
3697
|
-
also accepted when reading a named date.
|
|
3698
|
-
`proclaimedBy` is optional: a reckoning whose proclaiming body is unknown, or
|
|
3699
|
-
whose body has no note, says so by leaving it out.
|
|
3700
|
-
|
|
3701
|
-
`label` optionally wraps a printable date for readers. A string is used for
|
|
3702
|
-
positive years; a map may give `after` and `before` forms. Each form contains
|
|
3703
|
-
exactly one `{date}` slot. That slot receives the year magnitude and any month
|
|
3704
|
-
and day the date states, including a leading `~` for approximation. The
|
|
3705
|
-
`before` form handles a negative year without printing its minus sign. A
|
|
3706
|
-
missing form produces no prose label, and the machine form is displayed.
|
|
3707
|
-
|
|
3708
|
-
```yaml
|
|
3709
|
-
eras:
|
|
3710
|
-
- shortcode: founding
|
|
3711
|
-
name: After the Founding
|
|
3712
|
-
marker: VR
|
|
3713
|
-
start: 1
|
|
3714
|
-
label: { after: "{date} AF", before: "{date} BF" }
|
|
3607
|
+
- { shortcode: bvr, name: Before Vylarian Reckoning, abbreviation: BVR, start: null }
|
|
3608
|
+
- { shortcode: vr, name: Vylarian Reckoning, abbreviation: VR, start: 1 }
|
|
3609
|
+
- { shortcode: later, name: Later Reckoning, abbreviation: LR, start: 701 }
|
|
3715
3610
|
```
|
|
3716
3611
|
|
|
3717
|
-
|
|
3718
|
-
|
|
3719
|
-
that
|
|
3612
|
+
`data.epoch` anchors calendar year 1, day 1 to a canonical day. An epoch of `1.91` makes the calendar's first day canonical `1.91`: calendar day 1 can begin anywhere in the canonical year. The epoch is day-precise and uses canonical spelling, never `datefrom`.
|
|
3613
|
+
|
|
3614
|
+
`data.eras` contains exactly one `start: null` row and one `start: 1` row. Other starts are distinct positive integer calendar years; fractional starts such as `1.1` are invalid. `start: 1` is the canonical day declared by `epoch`. Starts are sorted numerically, irrespective of array order. Each era ends before the next start. The null era covers earlier years and counts them backwards; package-build prints a positive historical year for its `Y`, `YY`, and `YYYY` tokens. It is omitted from Calendaria emission, which has no backwards-counting era. At calendar year 701, a later era begins at its own era-relative year 1, exposed by `[yearInEra]`; `Y` still prints the calendar year. An era's `shortcode` is unique within the note; `marker` is unique across the corpus and uses uppercase letters and digits, beginning with a letter. `proclaimedBy` may identify the body that began a reckoning.
|
|
3615
|
+
|
|
3616
|
+
Each weekday's zero-based index is its position in the array. The weekday cycle starts with the first day of calendar year 1 and continues through month and year boundaries. Each month is in year order, including short festival months. Seasons start on one-based days of year in increasing array order; each ends immediately before the next begins, and the last wraps through the start of the next year if needed. A named day identifies one day of year and can appear in a date pattern through `[namedDay]` or `[namedDayAbbr]`.
|
|
3617
|
+
|
|
3618
|
+
`formats` holds any number of named patterns. `std` is the default for `datefrom`, `dateto`, and `dateformat`; when no `std` is present, the first pattern is the default. `dateto --format <name>` and `{{dateformat "commoncal" data.born "long"}}` select another output pattern. The default must identify one day: it needs `Y`, `YYYY`, or `[yearInEra]`; `DDD` or both a month and day token; and an era label if it uses `[yearInEra]`. `YY` alone cannot identify a year. The default may use clock tokens. Display-only tokens are valid in other named patterns, but package-build's date printer raises an error for tokens that require Calendaria runtime state, such as a moon phase, cycle, or climate zone.
|
|
3619
|
+
|
|
3620
|
+
When printing a year or month without a day, package-build omits finer fields from the selected pattern. A year-only date does not acquire the weekday, month, day, or time of its first day merely because the pattern names them.
|
|
3621
|
+
|
|
3622
|
+
The default pattern is sent to Calendaria as `dateFormats.short`; named `long` and `full` patterns fill those display slots. The names `time`, `time12`, `weekHeader`, `yearHeader`, `yearLabel`, and `crossCalendar` also fill Calendaria's matching slots. Other names remain available to package-build's `dateto --format` and `dateformat`.
|
|
3623
|
+
|
|
3624
|
+
The emitted Calendaria definition contains the eras with numeric starts.
|
|
3625
|
+
|
|
3626
|
+
#### Calendar format tokens
|
|
3627
|
+
|
|
3628
|
+
Patterns use [Calendaria's format vocabulary](https://wiki.3deathsaves.com/calendaria/format-tokens/). Case matters. The parser chooses the longest matching token: `QQ` is one padded season number, not two `Q` values. Bare tokens are substituted; unmatched characters pass through unchanged. Put literal words in square brackets or braces, as in `[Year] YYYY`. Fixed-width tokens need no separator (`YYYYMMDD`); variable-width numeric tokens need a separator or fixed-width neighbor in a readable default pattern. Bracketed and braced names that match custom tokens are substituted; other bracketed text is literal, with the enclosing marks removed. `[[]` prints a left bracket. A custom token can include a fallback after `|`, such as `[namedDay|Do]`; the fallback prints when the primary value is empty. Empty or unbalanced brackets and braces are errors.
|
|
3629
|
+
|
|
3630
|
+
| Token | Calendaria value |
|
|
3631
|
+
| ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
3632
|
+
| `Y`, `YY`, `YYYY` | Calendar year; final two digits; year padded to four digits. For the package-build-only null-start era, the historical year prints without a minus sign. |
|
|
3633
|
+
| `M`, `MM`, `Mo` | Month number; padded month number; ordinal month number |
|
|
3634
|
+
| `MMM`, `MMMM` | Abbreviated and full month name |
|
|
3635
|
+
| `D`, `DD`, `Do` | Day of month; padded day; ordinal day |
|
|
3636
|
+
| `DDD` | Day of year, padded to three digits |
|
|
3637
|
+
| `E`, `EE`, `EEE`, `EEEE`, `EEEEE` | Abbreviated weekday; full weekday for `EEEE`; initial for `EEEEE` |
|
|
3638
|
+
| `e`, `d`, `dd`, `ddd`, `dddd` | Zero-based weekday index; two-letter, abbreviated, or full weekday name |
|
|
3639
|
+
| `w`, `ww`, `W` | Week of year; padded week of year; week of month |
|
|
3640
|
+
| `G`, `GG`, `GGG`, `GGGG` | Abbreviated era; full era name for `GGGG` |
|
|
3641
|
+
| `Q`, `QQ`, `QQQ`, `QQQQ` | Season number; padded number; abbreviation; full name |
|
|
3642
|
+
| `z`, `zzzz` | Active climate-zone abbreviation and name |
|
|
3643
|
+
| `H`, `HH`, `h`, `hh` | 24-hour hour, padded; 12-hour hour, padded |
|
|
3644
|
+
| `m`, `mm`, `s`, `ss` | Minute or second, plain and padded |
|
|
3645
|
+
| `A`, `a` | Meridiem abbreviation, uppercase or lowercase |
|
|
3646
|
+
| `[yearName]` | Name assigned to the calendar year |
|
|
3647
|
+
| `[namedWeek]`, `[namedWeekAbbr]` | Named week and its abbreviation |
|
|
3648
|
+
| `[namedDay]`, `[namedDayAbbr]` | Named day and its abbreviation |
|
|
3649
|
+
| `[era]`, `[eraAbbr]` | Full era name and abbreviation |
|
|
3650
|
+
| `[yearInEra]`, `[yearInEraOrdinal]` | Era-relative year and its ordinal spelling |
|
|
3651
|
+
| `[era=N]`, `[eraAbbr=N]`, `[yearInEra=N]`, `[yearInEraOrdinal=N]` | The named value from zero-based matching era index `N` |
|
|
3652
|
+
| `[season]`, `[seasonAbbr]` | Full season name and abbreviation |
|
|
3653
|
+
| `[meridiemFull]` | Full meridiem name |
|
|
3654
|
+
| `[moon]`, `[moonIcon]` | Moon phase name and icon for the default moon |
|
|
3655
|
+
| `[moon=selector]`, `[moonIcon=selector]` | Moon phase name or icon for a selected moon |
|
|
3656
|
+
| `[ch]`, `[chAbbr]` | Canonical hour name and abbreviation |
|
|
3657
|
+
| `[cycle]`, `[cycleName]`, `[cycleRoman]`, `[cycleYear]` | Calendar cycle number, name, Roman numeral, and cycle year |
|
|
3658
|
+
| `[cycle=N]`, `[cycleName=N]`, `[cycleRoman=N]` | Values from zero-based cycle index `N` |
|
|
3659
|
+
| `[approxTime]`, `[approxDate]` | Calendaria's approximate time and date wording |
|
|
3660
|
+
|
|
3661
|
+
Braced custom forms such as `{era}` are equivalent to bracketed custom forms. A bare `M` is the month, while lowercase `m` is the minute; lowercase `d` is the zero-based weekday index, while uppercase `D` is the day of month. The tokens in a readable default pattern are restricted to calendar year, era, month, day, and clock tokens so the compiler can parse an authored `datefrom` value without runtime state.
|
|
3720
3662
|
|
|
3721
3663
|
### type: map
|
|
3722
3664
|
|
|
@@ -3847,7 +3789,7 @@ map's prose.
|
|
|
3847
3789
|
| `body.orbit` | `string` | The orbit's shape — `circular` means the cycle never varies |
|
|
3848
3790
|
| `body.inclined` | `boolean` | Whether the orbit is inclined to the plane the world orbits in |
|
|
3849
3791
|
| `moon.cycle` | `number` | How many days it takes to return to the same phase |
|
|
3850
|
-
| `moon.newOn` | `date`
|
|
3792
|
+
| `moon.newOn` | day-precision `date` | A day it was new, written in the reference calendar |
|
|
3851
3793
|
| `moon.eclipses` | `string` | `never`, `rare`, `occasional` or `frequent` |
|
|
3852
3794
|
|
|
3853
3795
|
#### Why a place exists
|
|
@@ -3878,7 +3820,7 @@ data:
|
|
|
3878
3820
|
# its moon — a note of its own, because a moon is a body and not a property
|
|
3879
3821
|
data:
|
|
3880
3822
|
body: { diameterKm: 3800, orbitalRadiusKm: 388600, orbit: circular, inclined: true }
|
|
3881
|
-
moon: { cycle: 30, newOn: 720
|
|
3823
|
+
moon: { cycle: 30, newOn: 720.1, eclipses: rare }
|
|
3882
3824
|
```
|
|
3883
3825
|
|
|
3884
3826
|
**`year.days` is where the year's length lives, and every calendar in the
|
|
@@ -406,15 +406,16 @@ These fields are accepted by every note type. A field's value can still be irrel
|
|
|
406
406
|
|
|
407
407
|
Lore records in-world knowledge. A `culture` describes a people; a `custom` describes how they practice a rite, observance, or usage. A `material` describes a physical constituent and its qualities, which may vary by region. See the [lore subtype definitions](format-details.md#type-lore) for the complete vocabulary.
|
|
408
408
|
|
|
409
|
-
| Field
|
|
410
|
-
|
|
|
411
|
-
| `data.epoch`
|
|
412
|
-
| `data.months`
|
|
413
|
-
| `data.weekdays`
|
|
414
|
-
| `data.seasons`
|
|
415
|
-
| `data.
|
|
416
|
-
| `data.
|
|
417
|
-
| `data.
|
|
409
|
+
| Field | Shape | Meaning |
|
|
410
|
+
| ---------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
|
|
411
|
+
| `data.epoch` | a canonical `<year>.<day>` | Canonical day when calendar year 1, day 1 begins — `1.1`. |
|
|
412
|
+
| `data.months` | list of `{ name, abbreviation?, days }` | The months this calendar keeps, in order — position in the list is position in the year, and the day counts sum to the world's year. |
|
|
413
|
+
| `data.weekdays` | list of `{ name, abbreviation? }` | The days of the week this calendar names, in order. A calendar with no week writes none. |
|
|
414
|
+
| `data.seasons` | list of `{ name, abbreviation?, start }` | The seasons this calendar marks, starting on numbered days of the year. |
|
|
415
|
+
| `data.namedDays` | list of `{ name, abbreviation?, day }` | Names assigned to particular days of the year. |
|
|
416
|
+
| `data.eras` | list of `{ shortcode, name, marker?, abbreviation?, proclaimedBy?, start, label? }` | The year-counts kept in this calendar. A marker names one era and uses these months. |
|
|
417
|
+
| `data.formats` | map of named Calendaria format strings | Named patterns for reading and writing this calendar's dates. |
|
|
418
|
+
| `data.event` | event metadata map | A dated occurrence and its relationships to other events and places. |
|
|
418
419
|
|
|
419
420
|
### map
|
|
420
421
|
|
|
@@ -469,7 +470,7 @@ Lore records in-world knowledge. A `culture` describes a people; a `custom` desc
|
|
|
469
470
|
| `data.body.orbit` | string | The orbit's shape — `circular` means the cycle never varies. |
|
|
470
471
|
| `data.body.inclined` | boolean | Whether the orbit is inclined to the plane the world orbits in. |
|
|
471
472
|
| `data.moon.cycle` | number | How many days the body takes to return to the same phase. |
|
|
472
|
-
| `data.moon.newOn` | a date
|
|
473
|
+
| `data.moon.newOn` | a day-precision date | A day the body was new, written in the reference calendar. |
|
|
473
474
|
| `data.moon.eclipses` | string | How often the body eclipses or is eclipsed — `never`, `rare`, `occasional` or `frequent`. |
|
|
474
475
|
|
|
475
476
|
### scenario
|