tonus 0.9.1 → 0.10.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 +62 -0
- package/README.md +1 -1
- package/dist/census.d.ts +4 -0
- package/dist/census.js +23 -0
- package/dist/corpus.d.ts +4 -0
- package/dist/corpus.js +17 -0
- package/dist/data/am.js +10220 -3006
- package/dist/data/attestation.js +38640 -4568
- package/dist/data/attestation.json +38639 -4567
- package/dist/data/census.d.ts +2 -2
- package/dist/data/census.js +4 -4
- package/dist/data/corpus-overlap.js +5 -118
- package/dist/data/gr.d.ts +29 -2
- package/dist/data/gr.js +2436 -6411
- package/dist/data/kyriale.d.ts +1 -1
- package/dist/data/kyriale.js +38 -38
- package/dist/data/la.js +12369 -1103
- package/dist/data/lh.js +3139 -158
- package/dist/data/lu.js +17332 -2379
- package/dist/data/nocturnale-romanum.js +10656 -1899
- package/dist/data/psm.js +463 -33
- package/dist/data/types.d.ts +1 -0
- package/dist/engines/chant/chant.js +60 -13
- package/dist/engines/chant/data/masses.js +18 -18
- package/dist/engines/chant/ordinary.js +12 -5
- package/dist/engines/chant/psalm.js +4 -0
- package/dist/engines/chant/types.d.ts +32 -4
- package/dist/engines/chant/types.js +47 -4
- package/dist/engines/score/infer.js +1 -1
- package/dist/index.d.ts +5 -9
- package/dist/inscriptio.d.ts +5 -0
- package/dist/inscriptio.js +23 -0
- package/dist/score.d.ts +6 -0
- package/dist/score.js +20 -0
- package/docs/api/census.md +12 -3
- package/docs/api/chant.md +83 -63
- package/docs/api/index.md +35 -1
- package/package.json +19 -2
- package/dist/data/ams.d.ts +0 -5
- package/dist/data/ams.js +0 -122
- package/dist/data/cot.d.ts +0 -5
- package/dist/data/cot.js +0 -172
- package/dist/data/cse.d.ts +0 -5
- package/dist/data/cse.js +0 -122
package/docs/api/chant.md
CHANGED
|
@@ -9,9 +9,9 @@ carries page-level provenance back to its book.
|
|
|
9
9
|
|
|
10
10
|
- [Chant](#chant)
|
|
11
11
|
- [The corpora](#the-corpora)
|
|
12
|
-
- [The
|
|
12
|
+
- [The shelf is the books](#the-shelf-is-the-books)
|
|
13
13
|
- [The books — `corpus`](#the-books--corpus)
|
|
14
|
-
- [
|
|
14
|
+
- [What the book holds — `full`](#what-the-book-holds--full)
|
|
15
15
|
- [Retrieval — `cantus`](#retrieval--cantus)
|
|
16
16
|
- [Reaching the ordinary — `ordinary`](#reaching-the-ordinary--ordinary)
|
|
17
17
|
- [On chant ids](#on-chant-ids)
|
|
@@ -30,33 +30,29 @@ carries page-level provenance back to its book.
|
|
|
30
30
|
|
|
31
31
|
## The corpora
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
Six Solesmes books, extracted from
|
|
34
34
|
[GregoBase](https://gregobase.selapa.net/), joined by the Divinum Officium
|
|
35
35
|
propers, office, and psalter, plus the Nocturnale Romanum for the night office:
|
|
36
36
|
|
|
37
|
-
| Source | Book
|
|
38
|
-
| ------ |
|
|
39
|
-
| `gr` | Graduale Romanum
|
|
40
|
-
| `lu` | The Liber Usualis
|
|
41
|
-
| `la` | Liber antiphonarius
|
|
42
|
-
| `lh` | Liber Hymnarius
|
|
43
|
-
| `am` | Antiphonale Monasticum
|
|
44
|
-
| `
|
|
45
|
-
| `
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
The ten books list 2,767 rows for those 2,187 chants: a melody printed in two
|
|
57
|
-
books is stored once and listed under both.
|
|
58
|
-
|
|
59
|
-
`am`, `ams`, and `psm` are the monastic (Benedictine) books; the rest are
|
|
37
|
+
| Source | Book | Edition | Chants |
|
|
38
|
+
| ------ | ----------------------- | -------------- | ------ |
|
|
39
|
+
| `gr` | Graduale Romanum | Solesmes, 1961 | 1,373 |
|
|
40
|
+
| `lu` | The Liber Usualis | Solesmes, 1961 | 2,446 |
|
|
41
|
+
| `la` | Liber antiphonarius | Solesmes, 1960 | 2,506 |
|
|
42
|
+
| `lh` | Liber Hymnarius | Solesmes, 1983 | 361 |
|
|
43
|
+
| `am` | Antiphonale Monasticum | Solesmes, 1934 | 1,448 |
|
|
44
|
+
| `psm` | Psalterium Monasticum | Solesmes, 1981 | 60 |
|
|
45
|
+
| `nr` | Nocturnale Romanum | Sandhofe, 2002 | 1,564 |
|
|
46
|
+
|
|
47
|
+
**7,840 chants in all**, the Mass ordinary among them (120 settings, reached by
|
|
48
|
+
[`ordinary`](#reaching-the-ordinary--ordinary) rather than by book). That is the
|
|
49
|
+
books themselves: tonus carries what they print, whether or not the calendar
|
|
50
|
+
reaches it.
|
|
51
|
+
|
|
52
|
+
The seven books list 9,758 rows for those 7,840 chants: a melody printed in two
|
|
53
|
+
books is stored once and listed under each, with each book's own page citation.
|
|
54
|
+
|
|
55
|
+
`am` and `psm` are the monastic (Benedictine) books; the rest are
|
|
60
56
|
Roman. Every book here bears the rhythmic markings the score engine reads; that
|
|
61
57
|
is the admission rule. `nr` is the night-office repertoire (responsories,
|
|
62
58
|
antiphons) from the
|
|
@@ -64,15 +60,26 @@ antiphons) from the
|
|
|
64
60
|
community restitution, the one non-Solesmes source, admitted because it carries
|
|
65
61
|
those marks too.
|
|
66
62
|
|
|
67
|
-
### The
|
|
63
|
+
### The shelf is the books
|
|
68
64
|
|
|
69
|
-
The corpus
|
|
70
|
-
liturgical year
|
|
71
|
-
|
|
72
|
-
not shipped: 10,156 book chants become 2,187.
|
|
65
|
+
The corpus was **assignment-driven** until 2026-08-31: a chant shipped only when
|
|
66
|
+
some day of the liturgical year called for it, and 10,156 book chants became
|
|
67
|
+
2,187. That gate is gone. The shelf now carries the books whole.
|
|
73
68
|
|
|
74
|
-
|
|
75
|
-
|
|
69
|
+
The reason is that the gate answered four questions with one silence. A chant
|
|
70
|
+
absent from the shelf might be genuinely superseded repertoire, or printed in an
|
|
71
|
+
edition the calendar does not address, or proper to a sanctorale the calendar
|
|
72
|
+
does not enumerate, or simply missed by the matcher that places texts on days —
|
|
73
|
+
and nothing downstream could tell those apart, because the chant was not there
|
|
74
|
+
to ask about. Worse, the population every `census` measurement was taken against
|
|
75
|
+
was itself the product of that gate, so "how typical is this chant" quietly meant
|
|
76
|
+
"how typical among the chants one rite happened to call for".
|
|
77
|
+
|
|
78
|
+
Whether a day calls for a chant is now a question for the day verbs — `festum`,
|
|
79
|
+
`proprium`, `officium` — which answer it directly and say what their tables
|
|
80
|
+
hold. It is not a filter on the shelf. `cantus` and `corpus` ask what the books
|
|
81
|
+
print; that a chant has no day to be sung on is a fact about the calendar, not a
|
|
82
|
+
reason it should be unfindable.
|
|
76
83
|
|
|
77
84
|
## The books — `corpus`
|
|
78
85
|
|
|
@@ -86,12 +93,12 @@ book's ledger:
|
|
|
86
93
|
|
|
87
94
|
```js
|
|
88
95
|
tonus.corpus();
|
|
89
|
-
// { count:
|
|
90
|
-
// listings:
|
|
91
|
-
// total:
|
|
92
|
-
// genera: [ { office: "an", genus: "Antiphona", count:
|
|
93
|
-
// modes: [ { mode: "1", modus: "Modus I", count:
|
|
94
|
-
// books: [ …
|
|
96
|
+
// { count: 7840, // chants tonus holds, each counted once
|
|
97
|
+
// listings: 9758, // rows on the shelf — a chant in two books appears twice
|
|
98
|
+
// total: 9811, // what the books hold, before dedup
|
|
99
|
+
// genera: [ { office: "an", genus: "Antiphona", count: 3959 }, … ],
|
|
100
|
+
// modes: [ { mode: "1", modus: "Modus I", count: 1520 }, … ],
|
|
101
|
+
// books: [ …7 Corpus entries, in registry order ] }
|
|
95
102
|
```
|
|
96
103
|
|
|
97
104
|
**`count` is the number of chants**, the one to quote. `listings` is how long
|
|
@@ -128,35 +135,37 @@ interface Corpus {
|
|
|
128
135
|
}
|
|
129
136
|
```
|
|
130
137
|
|
|
131
|
-
###
|
|
138
|
+
### What the book holds — `full`
|
|
132
139
|
|
|
133
|
-
Every `Corpus` carries `full`: what the book
|
|
140
|
+
Every `Corpus` carries `full`: what the book holds in GregoBase's catalogue, in
|
|
134
141
|
the same genera/modes shape as the shipped counts.
|
|
135
142
|
|
|
136
143
|
```js
|
|
137
144
|
const am = tonus.corpus("am");
|
|
138
|
-
am.count; //
|
|
139
|
-
am.full.total; // 1456 — what
|
|
140
|
-
am.genera[0]; // { office: "an", genus: "Antiphona", count:
|
|
145
|
+
am.count; // 1448 — chants tonus lists under the Antiphonale
|
|
146
|
+
am.full.total; // 1456 — what GregoBase catalogues for the book
|
|
147
|
+
am.genera[0]; // { office: "an", genus: "Antiphona", count: 1045 }
|
|
141
148
|
am.full.genera[0]; // { office: "an", genus: "Antiphona", count: 1049 }
|
|
142
149
|
```
|
|
143
150
|
|
|
144
|
-
|
|
145
|
-
|
|
151
|
+
The two now sit close, because the shelf carries the book rather than a
|
|
152
|
+
selection from it. What remains between them is what the extractor drops for
|
|
153
|
+
reasons of its own — a chant GregoBase marks as a duplicate of another, or one
|
|
154
|
+
whose GABC will not parse — not a liturgical judgement.
|
|
146
155
|
|
|
147
|
-
Only the extractor can measure
|
|
148
|
-
|
|
149
|
-
Every shelved book reports one, including the Nocturnale, whose tally
|
|
150
|
-
from its own extract rather than from GregoBase.
|
|
156
|
+
Only the extractor can measure `full`. By the time tonus loads, its record is
|
|
157
|
+
one per chant, so the catalogue tally is read from an artifact rather than
|
|
158
|
+
derived. Every shelved book reports one, including the Nocturnale, whose tally
|
|
159
|
+
comes from its own extract rather than from GregoBase.
|
|
151
160
|
|
|
152
161
|
The metadata is drawn from GregoBase's own catalogue. The `genera` list is the
|
|
153
162
|
office distribution (descending by count); `modes` counts modes I–VIII, with a
|
|
154
163
|
final `mode: null` bucket for chants outside the eight modes (psalm tones and the
|
|
155
164
|
like) so the counts reconcile with `count`.
|
|
156
165
|
|
|
157
|
-
**Overlap.** tonus
|
|
158
|
-
|
|
159
|
-
|
|
166
|
+
**Overlap.** tonus stores one copy of each chant — the Liber Usualis owns the
|
|
167
|
+
record where several books print it — but LISTS it under every book that does,
|
|
168
|
+
so `count` is what a book prints rather than what it happens to store. `total` is the full pre-dedup count, `unique` the
|
|
160
169
|
chants a book alone has, and `shared` how many it holds in common with each other
|
|
161
170
|
book (by GregoBase chant id). These reveal, for instance, that the Liber Usualis
|
|
162
171
|
is largely the Graduale and the Antiphonarius bound together (it shares hundreds
|
|
@@ -234,11 +243,20 @@ name:
|
|
|
234
243
|
|
|
235
244
|
| `office` | `genus` | `office` | `genus` | `office` | `genus` |
|
|
236
245
|
| -------- | --------- | -------- | ------------ | -------- | ------------------ |
|
|
237
|
-
| `an` | Antiphona | `hy` | Hymnus | `
|
|
238
|
-
| `al` | Alleluia | `in` | Introitus | `
|
|
239
|
-
| `ca` | Canticum | `of` | Offertorium | `
|
|
240
|
-
| `co` | Communio | `ps` | Psalmus | `
|
|
241
|
-
| `gr` | Graduale | `re` | Responsorium | `
|
|
246
|
+
| `an` | Antiphona | `hy` | Hymnus | `se` | Sequentia |
|
|
247
|
+
| `al` | Alleluia | `in` | Introitus | `tr` | Tractus |
|
|
248
|
+
| `ca` | Canticum | `of` | Offertorium | `tp` | Tropa |
|
|
249
|
+
| `co` | Communio | `ps` | Psalmus | `or` | Toni Communes |
|
|
250
|
+
| `gr` | Graduale | `re` | Responsorium | `ky` | Kyriale |
|
|
251
|
+
| `im` | Improperia| `rb` | Resp. Breve | `va` | Varia |
|
|
252
|
+
| `pa` | Prosa | `su` | Supplicatio | | |
|
|
253
|
+
|
|
254
|
+
The labels are GregoBase's own vocabulary (`$txt['usage']`), not tonus's
|
|
255
|
+
gloss. Three were corrected in 0.10.0: `tp` reads **Tropa** (it had said
|
|
256
|
+
"Tonus Peregrinus"), `or` reads **Toni Communes** (it had said "Ordinarium"),
|
|
257
|
+
and `pa` reads **Prosa**. `ky` is the Mass ordinary's roll-up genus — the
|
|
258
|
+
part itself rides `ordinary` (`ke`, `gl`, `cr`, …), and `va` is the
|
|
259
|
+
catch-all for a chant whose office-part tonus does not recognise.
|
|
242
260
|
|
|
243
261
|
```ts
|
|
244
262
|
interface Chant {
|
|
@@ -249,7 +267,9 @@ interface Chant {
|
|
|
249
267
|
genus: string; // Latin genre name, "Antiphona", "Introitus" …
|
|
250
268
|
mode: string | null; // raw from source: "1"–"8", differentia forms ("2d", "8g"), "p"/"d"/"e" …
|
|
251
269
|
modus: string | null; // Latin mode name, "Modus I"–"Modus VIII"
|
|
252
|
-
|
|
270
|
+
books: (ChantSource | "user" | "ky")[]; // every book that prints it
|
|
271
|
+
pages: { page: string; sequence: number; extent: number }[]; // the presented book's
|
|
272
|
+
|
|
253
273
|
source: {
|
|
254
274
|
book: string;
|
|
255
275
|
year: number | null;
|
|
@@ -282,7 +302,7 @@ interface CantusQuery {
|
|
|
282
302
|
The Mass ordinary is addressable but not shelved. `ordinary` is the door:
|
|
283
303
|
|
|
284
304
|
```js
|
|
285
|
-
tonus.cantus({ ordinary: "
|
|
305
|
+
tonus.cantus({ ordinary: "ke" }); // all 31 Kyries
|
|
286
306
|
tonus.cantus({ ordinary: "gl", mode: 4 }); // mode-4 Glorias
|
|
287
307
|
tonus.cantus({ ordinary: ["as", "va"] }); // the sprinkle antiphons
|
|
288
308
|
```
|
|
@@ -302,7 +322,7 @@ is the verb, and it applies the Kyriale's own rubrics. This is flat retrieval.
|
|
|
302
322
|
An id's prefix names **the catalogue the identifier came from**, not the book
|
|
303
323
|
the chant is printed in, and not a claim about who the melody belongs to. A
|
|
304
324
|
chant carrying `gregobase:1210` is a Solesmes book chant that GregoBase happens
|
|
305
|
-
to have catalogued; the corpus is assembled from
|
|
325
|
+
to have catalogued; the corpus is assembled from seven books, and GregoBase is
|
|
306
326
|
one source among several.
|
|
307
327
|
|
|
308
328
|
The prefix is therefore **not a namespace you can query against**. GregoBase
|
|
@@ -418,13 +438,13 @@ and selected by season: **Vidi aquam** (`va`) in Paschaltide, **Asperges
|
|
|
418
438
|
me** (`as`) otherwise.
|
|
419
439
|
|
|
420
440
|
```js
|
|
421
|
-
tonus.ordinarium({ ordinary: "
|
|
441
|
+
tonus.ordinarium({ ordinary: "ke" }); // every Kyrie
|
|
422
442
|
tonus.ordinarium({ mass: 9, ordinary: "gl" }); // Gloria of Cum jubilo
|
|
423
443
|
```
|
|
424
444
|
|
|
425
445
|
| `ordinary` | `ordinarium` |
|
|
426
446
|
| ---------- | --------------------------------------------- |
|
|
427
|
-
| `
|
|
447
|
+
| `ke` | Kyrie eleison |
|
|
428
448
|
| `gl` | Gloria |
|
|
429
449
|
| `cr` | Credo |
|
|
430
450
|
| `sa` | Sanctus |
|
package/docs/api/index.md
CHANGED
|
@@ -12,6 +12,7 @@ import tonus from "tonus";
|
|
|
12
12
|
|
|
13
13
|
- [The methods](#the-methods) — by engine
|
|
14
14
|
- [The appendix](#the-appendix) — the canonical constant tables
|
|
15
|
+
- [The entries](#the-entries) — the four subpaths, and what each holds
|
|
15
16
|
- [Full contents](#full-contents) — every method and section
|
|
16
17
|
- [Conventions](#conventions) — Latin/English, dates, determinism, error contracts, bibliography
|
|
17
18
|
|
|
@@ -88,7 +89,7 @@ table of codes or English keeps English.
|
|
|
88
89
|
| ----------- | -------------------------------------------------------------------------- |
|
|
89
90
|
| `HORAE` | the eight canonical hours, Matins first — the order is the content |
|
|
90
91
|
| `OFFICIA` | office code → the Latin genus (`an` → "Antiphona") |
|
|
91
|
-
| `ORDINARIA` | ordinary code → the Latin name (`
|
|
92
|
+
| `ORDINARIA` | ordinary code → the Latin name (`ke` → "Kyrie eleison") |
|
|
92
93
|
| `MODI` | mode number → the Latin name (`"1"` → "Modus I") |
|
|
93
94
|
| `SOURCES` | book code → its bibliographic record; the codes `cantus({ source })` takes |
|
|
94
95
|
|
|
@@ -126,6 +127,39 @@ is for.
|
|
|
126
127
|
Use these to pool blocks without reproducing the distance rule. See [the census
|
|
127
128
|
contract](census.md#distance-is-cosine-per-field-group).
|
|
128
129
|
|
|
130
|
+
## The entries
|
|
131
|
+
|
|
132
|
+
The fourteen methods and every table above are on the root, and stay there. Four
|
|
133
|
+
subpath entries hold what the root index was carrying without being asked to:
|
|
134
|
+
the **anatomy** of a return value, and the types whose values a caller had to
|
|
135
|
+
spell by hand against a query or an option bag.
|
|
136
|
+
|
|
137
|
+
```js
|
|
138
|
+
import { cantus, corpus } from "tonus/corpus";
|
|
139
|
+
import { inscriptio } from "tonus/inscriptio";
|
|
140
|
+
import type { Note, Phrase } from "tonus/score";
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
| Entry | Holds |
|
|
144
|
+
| ------------------ | ------------------------------------------------------------------------- |
|
|
145
|
+
| `tonus/corpus` | the shelf and its vocabulary — `cantus`, `corpus`, `SOURCES`, `HORAE` … |
|
|
146
|
+
| `tonus/score` | what a `Score` is made of — `Note`, `Phrase`, `Syllable`, `Metrics` … |
|
|
147
|
+
| `tonus/inscriptio` | the drawing surface — `inscriptio`, `Theme`, `TrackName`, `NoteGeometry` |
|
|
148
|
+
| `tonus/census` | one chant against the corpus — `census`, `CENSUS_BLOCK_FLOATS` |
|
|
149
|
+
|
|
150
|
+
Nothing is hidden by the split. The verbs stay on the namespace — the export law
|
|
151
|
+
puts them there — and the types a root signature names (`Score`, `Chant`,
|
|
152
|
+
`Cadence`, `Metrics`, `Imprint`) stay on the root as well, because the root's own
|
|
153
|
+
signatures name them. What moved off is what only a caller already **holding** a
|
|
154
|
+
`Score` could reach.
|
|
155
|
+
|
|
156
|
+
Each entry also surfaces types that were reachable through a signature but
|
|
157
|
+
nameable nowhere: `ChantSource` and `OfficeCode` (the codes `cantus({ source })`
|
|
158
|
+
and `office` take), `Theme` and `TrackName` (what an `opts` bag accepts), and
|
|
159
|
+
`CENSUS_BLOCK_FLOATS` (the stride a caller decoding a block had to get by
|
|
160
|
+
counting `CENSUS_GROUPS`). That drift — a value you must pass but cannot name —
|
|
161
|
+
is what the entries exist to stop.
|
|
162
|
+
|
|
129
163
|
## Full contents
|
|
130
164
|
|
|
131
165
|
Every method and every section, page by page, in dependency order. Pages later in
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tonus",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Medieval music analysis: GABC plainchant exports, liturgical calendar, tuning systems, ephemeris, and the harmony of the spheres",
|
|
6
6
|
"author": "Jeffrey Pierce <jeffrey@jeffreypierce.net>",
|
|
@@ -32,6 +32,22 @@
|
|
|
32
32
|
".": {
|
|
33
33
|
"import": "./dist/index.js",
|
|
34
34
|
"types": "./dist/index.d.ts"
|
|
35
|
+
},
|
|
36
|
+
"./inscriptio": {
|
|
37
|
+
"import": "./dist/inscriptio.js",
|
|
38
|
+
"types": "./dist/inscriptio.d.ts"
|
|
39
|
+
},
|
|
40
|
+
"./census": {
|
|
41
|
+
"import": "./dist/census.js",
|
|
42
|
+
"types": "./dist/census.d.ts"
|
|
43
|
+
},
|
|
44
|
+
"./corpus": {
|
|
45
|
+
"import": "./dist/corpus.js",
|
|
46
|
+
"types": "./dist/corpus.d.ts"
|
|
47
|
+
},
|
|
48
|
+
"./score": {
|
|
49
|
+
"import": "./dist/score.js",
|
|
50
|
+
"types": "./dist/score.d.ts"
|
|
35
51
|
}
|
|
36
52
|
},
|
|
37
53
|
"main": "./dist/index.js",
|
|
@@ -49,7 +65,8 @@
|
|
|
49
65
|
"scripts": {
|
|
50
66
|
"build": "tsc && cp src/data/psalms.json dist/data/psalms.json && cp src/data/smufl-glyphs.json dist/data/smufl-glyphs.json && cp src/data/office-ferial.json dist/data/office-ferial.json && cp src/data/commune-office.json dist/data/commune-office.json && cp src/data/seasonal-respbreve.json dist/data/seasonal-respbreve.json && cp src/data/attestation.json dist/data/attestation.json && node scripts/bake-data.mjs",
|
|
51
67
|
"clean": "rm -rf dist",
|
|
52
|
-
"
|
|
68
|
+
"gate": "node scripts/gate-boundary.mjs",
|
|
69
|
+
"test": "npm run build && npm run gate && node --test --test-reporter=spec tests/*.test.mjs",
|
|
53
70
|
"prepublishOnly": "npm run clean && npm run build",
|
|
54
71
|
"lab": "npm run build && node scripts/render-lab.mjs",
|
|
55
72
|
"stress": "npm run build && node scripts/render-stress.mjs",
|
package/dist/data/ams.d.ts
DELETED
package/dist/data/ams.js
DELETED
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
export const AMS_SOURCE = {
|
|
2
|
-
book: "Antiphonale Monasticum Solesmense",
|
|
3
|
-
fullTitle: null,
|
|
4
|
-
edition: "Proprium Sanctorum — offices proper to the Solesmes congregation",
|
|
5
|
-
year: 1935,
|
|
6
|
-
editor: "Solesmes",
|
|
7
|
-
scanSource: "Scan courtesy of Dominique Crochu",
|
|
8
|
-
code: "ams",
|
|
9
|
-
};
|
|
10
|
-
export const AMS_DATA = [
|
|
11
|
-
{
|
|
12
|
-
id: "gregobase:9299",
|
|
13
|
-
incipit: "Gertrudis arca Numinis",
|
|
14
|
-
gabc: "(c4)GEr(g)trú(hi)dis,(j) ar(ih)ca(g) Nú(h')mi(f)nis,(g'_) (,)\r\nSpon(i)só(k')que(j) junc(i)ta(k) Vír(ji)gi(h)num,(g.) (;)\r\nDa(g) nup(h')ti(f)á(g)lis(e) pán(fe)ge(d)re(c'_) (,)\r\nCas(g)tos(hi) a(j)mó(ih)res(g) fœ(h')́de(f)ris.(g.) (::)\r\n",
|
|
15
|
-
office: "hy",
|
|
16
|
-
mode: "8",
|
|
17
|
-
pages: [
|
|
18
|
-
{ page: "1223", sequence: 1, extent: 1 }
|
|
19
|
-
],
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
id: "gregobase:9301",
|
|
23
|
-
incipit: "Annulis septem subarrhavit me",
|
|
24
|
-
gabc: "(c3)AN(i)nu(i)lis(i) sep(i')tem(g) sub(i')ar(j>)rhá(i)vit(hi~) me(i.) *(,) Dó(ij)mi(i)nus(i) me(i')us(g) Je(hi)sus(g) Chris(e.)tus,(e.) (;) et(e) tam(g)quam(hf~) spon(h_)sam(g'_) (,) de(f)co(e')rá(f_)vit(f'_) me(h) co(g)ró(e.)na.(e.) (::)",
|
|
25
|
-
office: "an",
|
|
26
|
-
mode: "7",
|
|
27
|
-
pages: [
|
|
28
|
-
{ page: "1225", sequence: 2, extent: 1 }
|
|
29
|
-
],
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
id: "gregobase:9302",
|
|
33
|
-
incipit: "Habuit Gertrudis potestatem",
|
|
34
|
-
gabc: "(c4)HA(d)bu(e)it(c') Ger(d)trú(dh'!iv)dis(h.) *(,) pot(hg)es(gf)tá(ghg')tem(h_/iih.) (,) cláu(h>)de(j)re(jk) cæ(ji)lum(hg~) nú(h)bi(ij)bus,(h.) (;) et(h_ggo) a(e)pe(f')rí(g)re(g_e) por(gh)tas(fe) e(d!ewf_e)jus:(dc..) (;) qui(e)a(ed) lin(cd~)gua(d) e(e_f)jus(ghg/hiHGgo) (,) cla(e')vis(f) cæ(g)li(fe) fac(d)ta(cd) est.(d.) (::)",
|
|
35
|
-
office: "an",
|
|
36
|
-
mode: "1",
|
|
37
|
-
pages: [
|
|
38
|
-
{ page: "1225", sequence: 3, extent: 2 }
|
|
39
|
-
],
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
id: "gregobase:9304",
|
|
43
|
-
incipit: "Ad sacros Virgo",
|
|
44
|
-
gabc: "(f3)Ad(c) sa(f')cros(e) vir(f.)go(h.) (,) thá(g)la(f)mos(g') an(h)hé(g.)lans(f.) (;)\r\nNúp(ff)ti(f')as(g) cæ(h.)lo(e.) (,) ce(h)le(i)brá(j')re(kxk) ges(i.)tit,(j.) (:)\r\nEt(j) pi(i')is(h) vo(g.)tis(i.) (,) ní(f)mi(f)um(g') mo(e)rán(d.)tem(c.) (,)\r\nPró(h)vo(f')cat(g) ho(e.)ram.(f.) (::)\r\n",
|
|
45
|
-
office: "hy",
|
|
46
|
-
mode: "2",
|
|
47
|
-
pages: [
|
|
48
|
-
{ page: "1226", sequence: 2, extent: 2 }
|
|
49
|
-
],
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
id: "gregobase:9306",
|
|
53
|
-
incipit: "Casta columba nidificans",
|
|
54
|
-
gabc: "(c4)Cas(h)ta(f') co(g)lúm(gh)ba(g.) (,) ni(gh)dí(hg)fi(f)cans(g'_) in(f) ca(g')vér(h)na(g') ma(h)cé(hj)ri(h)æ(h.) (,) sa(i)cri(j) lá(k')te(j)ris(ji) Je(h)su(hi) Chris(h)ti,(g.) (;) mel(ghg') su(e)a(fg)vís(g)si(fe)mum(d.) (,) de(e_f) pe(gf)tra(gh) su(h)gé(g.)bat.(g.) (::)",
|
|
55
|
-
office: "an",
|
|
56
|
-
mode: "8",
|
|
57
|
-
pages: [
|
|
58
|
-
{ page: "1229", sequence: 1, extent: 1 }
|
|
59
|
-
],
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
id: "gregobase:9307",
|
|
63
|
-
incipit: "Loquebatur Christus ad dilectam",
|
|
64
|
-
gabc: "(c4)LO(d)que(e_f)bá(g)tur(g) Chris(gh)tus(g'_) *() ad(g) di(g')léc(g)tam(d') Ger(e)trú(fe)dem(e'_) (,) fá(f)ci(fe)e(f') ad(g) fá(gh)ci(g)em,(g.) (;) sic(i_j)ut(h) so(h)let(gf) lo(g)qui(d) ho(e_f)mo(g'_) (,) ad(g) a(gf)mí(g)cum(ghg) su(e.)um.(e.) (::)",
|
|
65
|
-
office: "an",
|
|
66
|
-
mode: "4",
|
|
67
|
-
pages: [
|
|
68
|
-
{ page: "1229", sequence: 2, extent: 1 }
|
|
69
|
-
],
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
id: "gregobase:9308",
|
|
73
|
-
incipit: "Beatae Gertrudis verba",
|
|
74
|
-
gabc: "(c3)BE(e)á(e)tæ(g') Ger(h)trú(i_h)dis(g_h) ver(i_j)ba(i'_) *(,) di(i)ví(j')ni(i) e(hi)rant(h') a(h)mó(hg)ris(fe) já(fe)cu(de)la:(e.) (;) lám(f')pa(e)des(d) e(e_f)jus,(f.) (,) lám(g')pa(h)des(i) i(hg)gnis(fe) at(d)que(f_h) flam(g)má(e.)rum.(e.) (::)",
|
|
75
|
-
office: "an",
|
|
76
|
-
mode: "7",
|
|
77
|
-
pages: [
|
|
78
|
-
{ page: "1229", sequence: 3, extent: 1 }
|
|
79
|
-
],
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
id: "gregobase:9309",
|
|
83
|
-
incipit: "Dilectae animam e carcere corporis",
|
|
84
|
-
gabc: "(c4)DI(f)léc(gh)tæ(f) á(g')ni(f)mam(f'_) *(,) e(f) cár(e')ce(f)re(d') cór(c)po(d)ris(fe) ex(gh)e(gh)ún(fv_2fv_2//ggf)tem(f.) (;) ac(f)cé(ixf!gwh!io)pit(h) Chris(hj)tus(h') in(h) ul(h')nas(g) su(hv_GF)as,(f.) (;) et(e) cor(fg~) su(gf)um(d_c) il(f)li(fg) a(g)mán(gf)ter(g) a(ghg)pé(f')ru(f)it.(f.) (::)",
|
|
85
|
-
office: "an",
|
|
86
|
-
mode: "6",
|
|
87
|
-
pages: [
|
|
88
|
-
{ page: "1230", sequence: 1, extent: 1 }
|
|
89
|
-
],
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
id: "gregobase:9321",
|
|
93
|
-
incipit: "Damasci praepositus",
|
|
94
|
-
gabc: "(c3)DA(e!fwh)má(f)sci,(fe) *() præ(d)pó(ef)si(f)tus(e.) (,) gen(g')tis(h) A(i')ré(h)tæ(f') re(h)gis(g.) (;) vó(h')lu(h)it(h') me(h) com(hg~)pre(f)hén(g_h)de(g)re :(e.) (:) a(e) frá(ef)tri(e)bus(ef) per(e) mu(e_fE'D)rum(d'_) (,) sub(d)mís(e')sus(d) sum(e') in(f) spor(h_i)ta:(htg/hih.) (;) et(h) sic(i) e(g')vá(h)si(f') ma(h)nus(e') e(f>)jus(e'_) (,) in(e>) nó(c_d)mi(ef)ne(f') Dó(e)mi(de)ni.(e.) (::)",
|
|
95
|
-
office: "an",
|
|
96
|
-
mode: "8",
|
|
97
|
-
pages: [
|
|
98
|
-
{ page: "812", sequence: 3, extent: 2 }
|
|
99
|
-
],
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
id: "gregobase:9322",
|
|
103
|
-
incipit: "Ter virgis caesus sum",
|
|
104
|
-
gabc: "(c3)TER(e!fwh) vir(f>)gis(ed) cæ(ef)sus(f) sum,(e.) *(,) se(g')mel(h) la(i)pi(hf)dá(h')tus(h) sum:(g.) (;) ter(i) nau(i)frá(h')gi(h)um(h) pér(ij)tu(i)li(hg/hih.) (,) pro(fe) Chris(f!gwh_f)ti(g') nó(e)mi(de)ne.(e.) (::) E(h) u(h) o(g) u(h) a(f) e.(e.) (::)",
|
|
105
|
-
office: "an",
|
|
106
|
-
mode: "8",
|
|
107
|
-
pages: [
|
|
108
|
-
{ page: "813", sequence: 1, extent: 1 }
|
|
109
|
-
],
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
id: "gregobase:10402",
|
|
113
|
-
incipit: "Gratia Dei in me",
|
|
114
|
-
gabc: "(c3)\r\nGRá(f)ti(e)a(f) De(h_i)i(ii) *(,)\r\nin(h) me(i) vá(j')cu(h)a(ij) non(j>) fu(i.)it:(i.) (;)\r\nsed(i) grá(f_i)ti(h')a(g) e(f_e~)jus(f_e) (,)\r\nsem(d')per(e) in(f') me(h) ma(f.)net.(f.) (::) E(i) u(h) o(i) u(j) a(h) e.(f.) (::)\r\n",
|
|
115
|
-
office: "an",
|
|
116
|
-
mode: "4",
|
|
117
|
-
pages: [
|
|
118
|
-
{ page: "812", sequence: 2, extent: 1 }
|
|
119
|
-
],
|
|
120
|
-
}
|
|
121
|
-
];
|
|
122
|
-
//# sourceMappingURL=ams.js.map
|