tonus 0.11.1 → 0.12.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 CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  All notable changes to tonus. Newest first.
4
4
 
5
+ ## 0.12.0 — 2026-09-24
6
+
7
+ A mass number is a Mass.
8
+
9
+ ### Changed
10
+
11
+ - **Breaking: `mass` is one of Masses I–XVIII, or 0.** The Kyriale's appendix
12
+ carried its Graduale page as a mass number, so Clemens Rector read as mass
13
+ 75 and the Requiem as 94, 101 and 102. Two ad libitum Kyries whose incipits
14
+ carry a numeral were worse: they read as Masses VI and X, so
15
+ `ordinarium({ mass: 6 })` returned an appendix Kyrie beside Mass VI's own,
16
+ and the era rule dated it by Mass VI's century. Every entry now carries a
17
+ `section` (`mass`, `credo`, `sprinkling`, `ad-libitum`, `requiem`), and only
18
+ the `mass` section is numbered. `ordinarium({ section: "requiem" })` replaces
19
+ `ordinarium({ mass: 102 })`. The appendix still rotates in the book's order,
20
+ now read from its Graduale pages.
21
+
5
22
  ## 0.11.1 — 2026-09-10
6
23
 
7
24
  The Kyriale says where it is printed.
@@ -1,7 +1,11 @@
1
1
  export type KyrialeOffice = "ke" | "gl" | "cr" | "sa" | "ag" | "be" | "it" | "as" | "va";
2
+ /** Where the Kyriale prints an entry. Only `mass` entries carry a mass number. */
3
+ export type KyrialeSection = "mass" | "credo" | "sprinkling" | "ad-libitum" | "requiem";
2
4
  export interface KyrialeEntry {
3
5
  id: string;
4
6
  office: KyrialeOffice;
7
+ section: KyrialeSection;
8
+ /** One of Masses I–XVIII, or null outside the numbered Masses. */
5
9
  mass: number | null;
6
10
  mode: string | null;
7
11
  incipit: string;
@@ -1,15 +1,17 @@
1
1
  // kyriale.ts — Mass ordinary (kyriale) chants
2
2
  // Extracted from GregoBase (GR source ID 2) by scripts/extract-gregobase.mjs
3
- // Generated: 2026-09-02T05:09:24.171Z
3
+ // Generated: 2026-09-24T19:56:36.053Z
4
4
  // Entries: 120
5
5
  //
6
- // Mass numbers are derived from GR page references (e.g. page "18*" = Mass XVIII).
6
+ // `mass` is one of the eighteen numbered Masses, read from the incipit, or null;
7
+ // `section` says where the book prints the entry.
7
8
  // office-part 'ky' in GregoBase covers all ordinary parts (Kyrie, Gloria, Credo,
8
9
  // Sanctus, Agnus Dei, Ite missa est, Benedicamus); office code is inferred from incipit.
9
10
  export const KYRIALE = [
10
11
  {
11
12
  id: "gregobase:497",
12
13
  office: "as",
14
+ section: "sprinkling",
13
15
  mass: null,
14
16
  mode: "7",
15
17
  incipit: "Asperges me",
@@ -20,6 +22,7 @@ export const KYRIALE = [
20
22
  {
21
23
  id: "gregobase:555",
22
24
  office: "ag",
25
+ section: "mass",
23
26
  mass: 2,
24
27
  mode: "1",
25
28
  incipit: "Agnus Dei II",
@@ -30,6 +33,7 @@ export const KYRIALE = [
30
33
  {
31
34
  id: "gregobase:1279",
32
35
  office: "sa",
36
+ section: "mass",
33
37
  mass: 2,
34
38
  mode: "1",
35
39
  incipit: "Sanctus II",
@@ -40,6 +44,7 @@ export const KYRIALE = [
40
44
  {
41
45
  id: "gregobase:298",
42
46
  office: "sa",
47
+ section: "mass",
43
48
  mass: 18,
44
49
  mode: null,
45
50
  incipit: "Sanctus XVIII",
@@ -50,7 +55,8 @@ export const KYRIALE = [
50
55
  {
51
56
  id: "gregobase:2118",
52
57
  office: "ag",
53
- mass: 101,
58
+ section: "requiem",
59
+ mass: null,
54
60
  mode: null,
55
61
  incipit: "Agnus Dei (in Miss. def.)",
56
62
  gabc: "(c4) A(g')gnus(g) De(gh)i,(h.) *(,) qui(h') tol(h)lis(h') pec(g)cá(h)ta(f') mun(g)di :(h.) (,) do(g')na(h) e(i')is(g) ré(h')qui(g)em.(g.) (::) A(g')gnus(g) De(gh)i,(h.) *(,) qui(h') tol(h)lis(h') pec(g)cá(h)ta(f') mun(g)di :(h.) (,) do(g')na(h) e(i')is(g) ré(h')qui(g)em.(g.) (::) A(g')gnus(g) De(gh)i,(h.) *(,) qui(h') tol(h)lis(h') pec(g)cá(h)ta(f') mun(g)di :(h.) (,) do(g')na(h) e(i')is(g) ré(h')qui(g)em(g') **() sem(f)pi(h)tér(hg~)nam.(g.) (::)",
@@ -60,7 +66,8 @@ export const KYRIALE = [
60
66
  {
61
67
  id: "gregobase:823",
62
68
  office: "it",
63
- mass: 102,
69
+ section: "requiem",
70
+ mass: null,
64
71
  mode: null,
65
72
  incipit: "Requiescant",
66
73
  gabc: "(c4) RE(g)qui(h)é(h)scant(g') in(h) pa(hg)ce.(g.) (::) <sp>R/</sp>. A(g)men.(gh..) (::)",
@@ -70,6 +77,7 @@ export const KYRIALE = [
70
77
  {
71
78
  id: "gregobase:804",
72
79
  office: "it",
80
+ section: "mass",
73
81
  mass: 2,
74
82
  mode: "5",
75
83
  incipit: "Ite IIb",
@@ -80,6 +88,7 @@ export const KYRIALE = [
80
88
  {
81
89
  id: "gregobase:825",
82
90
  office: "ke",
91
+ section: "mass",
83
92
  mass: 3,
84
93
  mode: "4",
85
94
  incipit: "Kyrie III",
@@ -90,6 +99,7 @@ export const KYRIALE = [
90
99
  {
91
100
  id: "gregobase:1280",
92
101
  office: "it",
102
+ section: "mass",
93
103
  mass: 2,
94
104
  mode: "3",
95
105
  incipit: "Ite IIa",
@@ -100,6 +110,7 @@ export const KYRIALE = [
100
110
  {
101
111
  id: "gregobase:71",
102
112
  office: "gl",
113
+ section: "mass",
103
114
  mass: 3,
104
115
  mode: "8",
105
116
  incipit: "Gloria III",
@@ -110,6 +121,7 @@ export const KYRIALE = [
110
121
  {
111
122
  id: "gregobase:566",
112
123
  office: "sa",
124
+ section: "mass",
113
125
  mass: 3,
114
126
  mode: "4",
115
127
  incipit: "Sanctus III",
@@ -120,6 +132,7 @@ export const KYRIALE = [
120
132
  {
121
133
  id: "gregobase:578",
122
134
  office: "ag",
135
+ section: "mass",
123
136
  mass: 3,
124
137
  mode: "4",
125
138
  incipit: "Agnus Dei III",
@@ -130,6 +143,7 @@ export const KYRIALE = [
130
143
  {
131
144
  id: "gregobase:1061",
132
145
  office: "ke",
146
+ section: "mass",
133
147
  mass: 4,
134
148
  mode: "1",
135
149
  incipit: "Kyrie IV",
@@ -140,6 +154,7 @@ export const KYRIALE = [
140
154
  {
141
155
  id: "gregobase:2978",
142
156
  office: "gl",
157
+ section: "mass",
143
158
  mass: 4,
144
159
  mode: "4",
145
160
  incipit: "Gloria IV",
@@ -150,6 +165,7 @@ export const KYRIALE = [
150
165
  {
151
166
  id: "gregobase:264",
152
167
  office: "ag",
168
+ section: "mass",
153
169
  mass: 4,
154
170
  mode: "6",
155
171
  incipit: "Agnus Dei IV",
@@ -160,6 +176,7 @@ export const KYRIALE = [
160
176
  {
161
177
  id: "gregobase:2518",
162
178
  office: "sa",
179
+ section: "mass",
163
180
  mass: 4,
164
181
  mode: "8",
165
182
  incipit: "Sanctus IV",
@@ -170,6 +187,7 @@ export const KYRIALE = [
170
187
  {
171
188
  id: "gregobase:337",
172
189
  office: "gl",
190
+ section: "mass",
173
191
  mass: 5,
174
192
  mode: "8",
175
193
  incipit: "Gloria V",
@@ -180,6 +198,7 @@ export const KYRIALE = [
180
198
  {
181
199
  id: "gregobase:353",
182
200
  office: "it",
201
+ section: "mass",
183
202
  mass: 4,
184
203
  mode: "1",
185
204
  incipit: "Ite IV",
@@ -190,6 +209,7 @@ export const KYRIALE = [
190
209
  {
191
210
  id: "gregobase:474",
192
211
  office: "ke",
212
+ section: "mass",
193
213
  mass: 5,
194
214
  mode: "8",
195
215
  incipit: "Kyrie V",
@@ -200,6 +220,7 @@ export const KYRIALE = [
200
220
  {
201
221
  id: "gregobase:958",
202
222
  office: "va",
223
+ section: "sprinkling",
203
224
  mass: null,
204
225
  mode: "8",
205
226
  incipit: "Vidi aquam",
@@ -210,6 +231,7 @@ export const KYRIALE = [
210
231
  {
211
232
  id: "gregobase:1241",
212
233
  office: "ag",
234
+ section: "mass",
213
235
  mass: 5,
214
236
  mode: "4",
215
237
  incipit: "Agnus Dei V",
@@ -220,6 +242,7 @@ export const KYRIALE = [
220
242
  {
221
243
  id: "gregobase:2984",
222
244
  office: "sa",
245
+ section: "mass",
223
246
  mass: 5,
224
247
  mode: "4",
225
248
  incipit: "Sanctus V",
@@ -230,6 +253,7 @@ export const KYRIALE = [
230
253
  {
231
254
  id: "gregobase:1006",
232
255
  office: "it",
256
+ section: "mass",
233
257
  mass: 5,
234
258
  mode: "8",
235
259
  incipit: "Ite V",
@@ -240,6 +264,7 @@ export const KYRIALE = [
240
264
  {
241
265
  id: "gregobase:2903",
242
266
  office: "ke",
267
+ section: "mass",
243
268
  mass: 6,
244
269
  mode: "7",
245
270
  incipit: "Kyrie VI",
@@ -250,6 +275,7 @@ export const KYRIALE = [
250
275
  {
251
276
  id: "gregobase:321",
252
277
  office: "gl",
278
+ section: "mass",
253
279
  mass: 6,
254
280
  mode: "8",
255
281
  incipit: "Gloria VI",
@@ -260,6 +286,7 @@ export const KYRIALE = [
260
286
  {
261
287
  id: "gregobase:2988",
262
288
  office: "it",
289
+ section: "mass",
263
290
  mass: 1,
264
291
  mode: "8",
265
292
  incipit: "Ite Ia",
@@ -270,6 +297,7 @@ export const KYRIALE = [
270
297
  {
271
298
  id: "gregobase:387",
272
299
  office: "ag",
300
+ section: "mass",
273
301
  mass: 6,
274
302
  mode: "8",
275
303
  incipit: "Agnus Dei VI",
@@ -280,6 +308,7 @@ export const KYRIALE = [
280
308
  {
281
309
  id: "gregobase:431",
282
310
  office: "sa",
311
+ section: "mass",
283
312
  mass: 6,
284
313
  mode: "3",
285
314
  incipit: "Sanctus VI",
@@ -290,6 +319,7 @@ export const KYRIALE = [
290
319
  {
291
320
  id: "gregobase:721",
292
321
  office: "gl",
322
+ section: "mass",
293
323
  mass: 7,
294
324
  mode: "6",
295
325
  incipit: "Gloria VII",
@@ -300,6 +330,7 @@ export const KYRIALE = [
300
330
  {
301
331
  id: "gregobase:1160",
302
332
  office: "it",
333
+ section: "mass",
303
334
  mass: 6,
304
335
  mode: "8",
305
336
  incipit: "Ite VI",
@@ -310,6 +341,7 @@ export const KYRIALE = [
310
341
  {
311
342
  id: "gregobase:1262",
312
343
  office: "ke",
344
+ section: "mass",
313
345
  mass: 7,
314
346
  mode: "8",
315
347
  incipit: "Kyrie VII",
@@ -320,6 +352,7 @@ export const KYRIALE = [
320
352
  {
321
353
  id: "gregobase:1089",
322
354
  office: "sa",
355
+ section: "mass",
323
356
  mass: 7,
324
357
  mode: "8",
325
358
  incipit: "Sanctus VII",
@@ -330,6 +363,7 @@ export const KYRIALE = [
330
363
  {
331
364
  id: "gregobase:2985",
332
365
  office: "ag",
366
+ section: "mass",
333
367
  mass: 7,
334
368
  mode: "8",
335
369
  incipit: "Agnus Dei VII",
@@ -340,6 +374,7 @@ export const KYRIALE = [
340
374
  {
341
375
  id: "gregobase:31",
342
376
  office: "it",
377
+ section: "mass",
343
378
  mass: 7,
344
379
  mode: "8",
345
380
  incipit: "Ite VII",
@@ -350,6 +385,7 @@ export const KYRIALE = [
350
385
  {
351
386
  id: "gregobase:1184",
352
387
  office: "ke",
388
+ section: "mass",
353
389
  mass: 8,
354
390
  mode: "5",
355
391
  incipit: "Kyrie VIII",
@@ -360,6 +396,7 @@ export const KYRIALE = [
360
396
  {
361
397
  id: "gregobase:961",
362
398
  office: "gl",
399
+ section: "mass",
363
400
  mass: 8,
364
401
  mode: "5",
365
402
  incipit: "Gloria VIII",
@@ -370,6 +407,7 @@ export const KYRIALE = [
370
407
  {
371
408
  id: "gregobase:905",
372
409
  office: "as",
410
+ section: "ad-libitum",
373
411
  mass: null,
374
412
  mode: "7",
375
413
  incipit: "Asperges me (ad lib.) I",
@@ -380,6 +418,7 @@ export const KYRIALE = [
380
418
  {
381
419
  id: "gregobase:1384",
382
420
  office: "sa",
421
+ section: "mass",
383
422
  mass: 8,
384
423
  mode: "6",
385
424
  incipit: "Sanctus VIII",
@@ -390,6 +429,7 @@ export const KYRIALE = [
390
429
  {
391
430
  id: "gregobase:832",
392
431
  office: "it",
432
+ section: "mass",
393
433
  mass: 8,
394
434
  mode: "5",
395
435
  incipit: "Ite VIII",
@@ -400,6 +440,7 @@ export const KYRIALE = [
400
440
  {
401
441
  id: "gregobase:2760",
402
442
  office: "ag",
443
+ section: "mass",
403
444
  mass: 8,
404
445
  mode: "6",
405
446
  incipit: "Agnus Dei VIII",
@@ -410,6 +451,7 @@ export const KYRIALE = [
410
451
  {
411
452
  id: "gregobase:2771",
412
453
  office: "gl",
454
+ section: "mass",
413
455
  mass: 9,
414
456
  mode: "7",
415
457
  incipit: "Gloria IX",
@@ -420,6 +462,7 @@ export const KYRIALE = [
420
462
  {
421
463
  id: "gregobase:2976",
422
464
  office: "ke",
465
+ section: "mass",
423
466
  mass: 9,
424
467
  mode: "1",
425
468
  incipit: "Kyrie IX",
@@ -430,6 +473,7 @@ export const KYRIALE = [
430
473
  {
431
474
  id: "gregobase:587",
432
475
  office: "sa",
476
+ section: "mass",
433
477
  mass: 9,
434
478
  mode: "5",
435
479
  incipit: "Sanctus IX",
@@ -440,6 +484,7 @@ export const KYRIALE = [
440
484
  {
441
485
  id: "gregobase:707",
442
486
  office: "ag",
487
+ section: "mass",
443
488
  mass: 9,
444
489
  mode: "5",
445
490
  incipit: "Agnus Dei IX",
@@ -450,6 +495,7 @@ export const KYRIALE = [
450
495
  {
451
496
  id: "gregobase:795",
452
497
  office: "ke",
498
+ section: "mass",
453
499
  mass: 10,
454
500
  mode: "1",
455
501
  incipit: "Kyrie X",
@@ -460,6 +506,7 @@ export const KYRIALE = [
460
506
  {
461
507
  id: "gregobase:2989",
462
508
  office: "it",
509
+ section: "mass",
463
510
  mass: 9,
464
511
  mode: "1",
465
512
  incipit: "Ite IX",
@@ -470,6 +517,7 @@ export const KYRIALE = [
470
517
  {
471
518
  id: "gregobase:1204",
472
519
  office: "gl",
520
+ section: "mass",
473
521
  mass: 10,
474
522
  mode: "8",
475
523
  incipit: "Gloria X",
@@ -480,6 +528,7 @@ export const KYRIALE = [
480
528
  {
481
529
  id: "gregobase:2770",
482
530
  office: "sa",
531
+ section: "mass",
483
532
  mass: 10,
484
533
  mode: "4",
485
534
  incipit: "Sanctus X",
@@ -490,6 +539,7 @@ export const KYRIALE = [
490
539
  {
491
540
  id: "gregobase:2981",
492
541
  office: "ag",
542
+ section: "mass",
493
543
  mass: 10,
494
544
  mode: "4",
495
545
  incipit: "Agnus Dei X",
@@ -500,6 +550,7 @@ export const KYRIALE = [
500
550
  {
501
551
  id: "gregobase:2982",
502
552
  office: "ke",
553
+ section: "mass",
503
554
  mass: 11,
504
555
  mode: "1",
505
556
  incipit: "Kyrie XI",
@@ -510,6 +561,7 @@ export const KYRIALE = [
510
561
  {
511
562
  id: "gregobase:303",
512
563
  office: "gl",
564
+ section: "mass",
513
565
  mass: 11,
514
566
  mode: "2",
515
567
  incipit: "Gloria XI",
@@ -520,6 +572,7 @@ export const KYRIALE = [
520
572
  {
521
573
  id: "gregobase:142",
522
574
  office: "as",
575
+ section: "ad-libitum",
523
576
  mass: null,
524
577
  mode: "4",
525
578
  incipit: "Asperges me (ad lib.) II",
@@ -530,6 +583,7 @@ export const KYRIALE = [
530
583
  {
531
584
  id: "gregobase:1143",
532
585
  office: "ke",
586
+ section: "mass",
533
587
  mass: 1,
534
588
  mode: "8",
535
589
  incipit: "Kyrie I",
@@ -540,6 +594,7 @@ export const KYRIALE = [
540
594
  {
541
595
  id: "gregobase:1106",
542
596
  office: "sa",
597
+ section: "mass",
543
598
  mass: 11,
544
599
  mode: "2",
545
600
  incipit: "Sanctus XI",
@@ -550,6 +605,7 @@ export const KYRIALE = [
550
605
  {
551
606
  id: "gregobase:856",
552
607
  office: "it",
608
+ section: "mass",
553
609
  mass: 11,
554
610
  mode: "1",
555
611
  incipit: "Ite XI",
@@ -560,6 +616,7 @@ export const KYRIALE = [
560
616
  {
561
617
  id: "gregobase:1243",
562
618
  office: "ag",
619
+ section: "mass",
563
620
  mass: 11,
564
621
  mode: "1",
565
622
  incipit: "Agnus Dei XI",
@@ -570,6 +627,7 @@ export const KYRIALE = [
570
627
  {
571
628
  id: "gregobase:2068",
572
629
  office: "ke",
630
+ section: "mass",
573
631
  mass: 12,
574
632
  mode: "8",
575
633
  incipit: "Kyrie XII",
@@ -580,6 +638,7 @@ export const KYRIALE = [
580
638
  {
581
639
  id: "gregobase:2114",
582
640
  office: "gl",
641
+ section: "mass",
583
642
  mass: 12,
584
643
  mode: "4",
585
644
  incipit: "Gloria XII",
@@ -590,6 +649,7 @@ export const KYRIALE = [
590
649
  {
591
650
  id: "gregobase:1062",
592
651
  office: "sa",
652
+ section: "mass",
593
653
  mass: 12,
594
654
  mode: "2",
595
655
  incipit: "Sanctus XII",
@@ -600,6 +660,7 @@ export const KYRIALE = [
600
660
  {
601
661
  id: "gregobase:37",
602
662
  office: "it",
663
+ section: "mass",
603
664
  mass: 12,
604
665
  mode: "8",
605
666
  incipit: "Ite XII",
@@ -610,6 +671,7 @@ export const KYRIALE = [
610
671
  {
611
672
  id: "gregobase:137",
612
673
  office: "ke",
674
+ section: "mass",
613
675
  mass: 13,
614
676
  mode: "1",
615
677
  incipit: "Kyrie XIII",
@@ -620,6 +682,7 @@ export const KYRIALE = [
620
682
  {
621
683
  id: "gregobase:759",
622
684
  office: "ag",
685
+ section: "mass",
623
686
  mass: 12,
624
687
  mode: "2",
625
688
  incipit: "Agnus XII",
@@ -630,6 +693,7 @@ export const KYRIALE = [
630
693
  {
631
694
  id: "gregobase:2107",
632
695
  office: "gl",
696
+ section: "mass",
633
697
  mass: 13,
634
698
  mode: "1",
635
699
  incipit: "Gloria XIII",
@@ -640,6 +704,7 @@ export const KYRIALE = [
640
704
  {
641
705
  id: "gregobase:1067",
642
706
  office: "sa",
707
+ section: "mass",
643
708
  mass: 13,
644
709
  mode: "8",
645
710
  incipit: "Sanctus XIII",
@@ -650,6 +715,7 @@ export const KYRIALE = [
650
715
  {
651
716
  id: "gregobase:441",
652
717
  office: "ke",
718
+ section: "mass",
653
719
  mass: 14,
654
720
  mode: "8",
655
721
  incipit: "Kyrie XIV",
@@ -660,6 +726,7 @@ export const KYRIALE = [
660
726
  {
661
727
  id: "gregobase:878",
662
728
  office: "it",
729
+ section: "mass",
663
730
  mass: 13,
664
731
  mode: "1",
665
732
  incipit: "Ite XIII",
@@ -670,6 +737,7 @@ export const KYRIALE = [
670
737
  {
671
738
  id: "gregobase:2886",
672
739
  office: "ag",
740
+ section: "mass",
673
741
  mass: 13,
674
742
  mode: "1",
675
743
  incipit: "Agnus XIII",
@@ -680,6 +748,7 @@ export const KYRIALE = [
680
748
  {
681
749
  id: "gregobase:908",
682
750
  office: "gl",
751
+ section: "mass",
683
752
  mass: 14,
684
753
  mode: "3",
685
754
  incipit: "Gloria XIV",
@@ -690,6 +759,7 @@ export const KYRIALE = [
690
759
  {
691
760
  id: "gregobase:2979",
692
761
  office: "sa",
762
+ section: "mass",
693
763
  mass: 14,
694
764
  mode: "1",
695
765
  incipit: "Sanctus XIV",
@@ -700,6 +770,7 @@ export const KYRIALE = [
700
770
  {
701
771
  id: "gregobase:2980",
702
772
  office: "gl",
773
+ section: "mass",
703
774
  mass: 1,
704
775
  mode: "4",
705
776
  incipit: "Gloria I",
@@ -710,6 +781,7 @@ export const KYRIALE = [
710
781
  {
711
782
  id: "gregobase:2076",
712
783
  office: "ag",
784
+ section: "mass",
713
785
  mass: 14,
714
786
  mode: "8",
715
787
  incipit: "Agnus XIV",
@@ -720,6 +792,7 @@ export const KYRIALE = [
720
792
  {
721
793
  id: "gregobase:2986",
722
794
  office: "it",
795
+ section: "mass",
723
796
  mass: 14,
724
797
  mode: "8",
725
798
  incipit: "Ite XIV",
@@ -730,6 +803,7 @@ export const KYRIALE = [
730
803
  {
731
804
  id: "gregobase:393",
732
805
  office: "ke",
806
+ section: "mass",
733
807
  mass: 15,
734
808
  mode: "4",
735
809
  incipit: "Kyrie XV",
@@ -740,6 +814,7 @@ export const KYRIALE = [
740
814
  {
741
815
  id: "gregobase:2975",
742
816
  office: "gl",
817
+ section: "mass",
743
818
  mass: 15,
744
819
  mode: "4",
745
820
  incipit: "Gloria XV",
@@ -750,6 +825,7 @@ export const KYRIALE = [
750
825
  {
751
826
  id: "gregobase:386",
752
827
  office: "sa",
828
+ section: "mass",
753
829
  mass: 15,
754
830
  mode: "2",
755
831
  incipit: "Sanctus XV",
@@ -760,6 +836,7 @@ export const KYRIALE = [
760
836
  {
761
837
  id: "gregobase:620",
762
838
  office: "it",
839
+ section: "mass",
763
840
  mass: 15,
764
841
  mode: "4",
765
842
  incipit: "Ite XV",
@@ -770,6 +847,7 @@ export const KYRIALE = [
770
847
  {
771
848
  id: "gregobase:959",
772
849
  office: "ag",
850
+ section: "mass",
773
851
  mass: 15,
774
852
  mode: "1",
775
853
  incipit: "Agnus XV",
@@ -780,6 +858,7 @@ export const KYRIALE = [
780
858
  {
781
859
  id: "gregobase:545",
782
860
  office: "ke",
861
+ section: "mass",
783
862
  mass: 16,
784
863
  mode: "3",
785
864
  incipit: "Kyrie XVI",
@@ -790,6 +869,7 @@ export const KYRIALE = [
790
869
  {
791
870
  id: "gregobase:1336",
792
871
  office: "ag",
872
+ section: "mass",
793
873
  mass: 16,
794
874
  mode: "1",
795
875
  incipit: "Agnus XVI",
@@ -800,6 +880,7 @@ export const KYRIALE = [
800
880
  {
801
881
  id: "gregobase:2990",
802
882
  office: "sa",
883
+ section: "mass",
803
884
  mass: 16,
804
885
  mode: "2",
805
886
  incipit: "Sanctus XVI",
@@ -810,6 +891,7 @@ export const KYRIALE = [
810
891
  {
811
892
  id: "gregobase:272",
812
893
  office: "ke",
894
+ section: "mass",
813
895
  mass: 17,
814
896
  mode: "1",
815
897
  incipit: "Kyrie XVII",
@@ -820,6 +902,7 @@ export const KYRIALE = [
820
902
  {
821
903
  id: "gregobase:168",
822
904
  office: "ke",
905
+ section: "mass",
823
906
  mass: 17,
824
907
  mode: "6",
825
908
  incipit: "Kyrie XVII C",
@@ -830,6 +913,7 @@ export const KYRIALE = [
830
913
  {
831
914
  id: "gregobase:871",
832
915
  office: "sa",
916
+ section: "mass",
833
917
  mass: 17,
834
918
  mode: "5",
835
919
  incipit: "Sanctus XVII",
@@ -840,6 +924,7 @@ export const KYRIALE = [
840
924
  {
841
925
  id: "gregobase:1137",
842
926
  office: "ag",
927
+ section: "mass",
843
928
  mass: 17,
844
929
  mode: "5",
845
930
  incipit: "Agnus XVII",
@@ -850,6 +935,7 @@ export const KYRIALE = [
850
935
  {
851
936
  id: "gregobase:2522",
852
937
  office: "ke",
938
+ section: "mass",
853
939
  mass: 18,
854
940
  mode: "4",
855
941
  incipit: "Kyrie XVIII",
@@ -860,6 +946,7 @@ export const KYRIALE = [
860
946
  {
861
947
  id: "gregobase:2412",
862
948
  office: "ag",
949
+ section: "mass",
863
950
  mass: 18,
864
951
  mode: null,
865
952
  incipit: "Agnus XVIII",
@@ -870,6 +957,7 @@ export const KYRIALE = [
870
957
  {
871
958
  id: "gregobase:344",
872
959
  office: "cr",
960
+ section: "credo",
873
961
  mass: null,
874
962
  mode: "4",
875
963
  incipit: "Credo I",
@@ -880,7 +968,8 @@ export const KYRIALE = [
880
968
  {
881
969
  id: "gregobase:2227",
882
970
  office: "be",
883
- mass: 59,
971
+ section: "ad-libitum",
972
+ mass: null,
884
973
  mode: null,
885
974
  incipit: "Benedicamus (ad lib.)",
886
975
  gabc: "(c4) BE(h')ne(h)di(h)cá(fh)mus(h.) Dó(gh)mi(g)no.(gvFE.) (::) <sp>R/</sp>. De(h')o(h) grá(gh)ti(g)as.(gvFE.) (::)",
@@ -890,6 +979,7 @@ export const KYRIALE = [
890
979
  {
891
980
  id: "gregobase:16096",
892
981
  office: "be",
982
+ section: "mass",
893
983
  mass: 2,
894
984
  mode: "5",
895
985
  incipit: "Benedicamus II",
@@ -900,6 +990,7 @@ export const KYRIALE = [
900
990
  {
901
991
  id: "gregobase:300",
902
992
  office: "sa",
993
+ section: "mass",
903
994
  mass: 1,
904
995
  mode: "4",
905
996
  incipit: "Sanctus I",
@@ -910,6 +1001,7 @@ export const KYRIALE = [
910
1001
  {
911
1002
  id: "gregobase:2983",
912
1003
  office: "cr",
1004
+ section: "credo",
913
1005
  mass: null,
914
1006
  mode: "4",
915
1007
  incipit: "Credo II",
@@ -920,6 +1012,7 @@ export const KYRIALE = [
920
1012
  {
921
1013
  id: "gregobase:749",
922
1014
  office: "cr",
1015
+ section: "credo",
923
1016
  mass: null,
924
1017
  mode: "5",
925
1018
  incipit: "Credo III",
@@ -930,6 +1023,7 @@ export const KYRIALE = [
930
1023
  {
931
1024
  id: "gregobase:678",
932
1025
  office: "cr",
1026
+ section: "credo",
933
1027
  mass: null,
934
1028
  mode: "1",
935
1029
  incipit: "Credo IV",
@@ -940,6 +1034,7 @@ export const KYRIALE = [
940
1034
  {
941
1035
  id: "gregobase:955",
942
1036
  office: "cr",
1037
+ section: "credo",
943
1038
  mass: null,
944
1039
  mode: "4",
945
1040
  incipit: "Credo V",
@@ -950,6 +1045,7 @@ export const KYRIALE = [
950
1045
  {
951
1046
  id: "gregobase:2977",
952
1047
  office: "ag",
1048
+ section: "mass",
953
1049
  mass: 1,
954
1050
  mode: "4",
955
1051
  incipit: "Agnus Dei I",
@@ -960,6 +1056,7 @@ export const KYRIALE = [
960
1056
  {
961
1057
  id: "gregobase:2987",
962
1058
  office: "it",
1059
+ section: "mass",
963
1060
  mass: 1,
964
1061
  mode: "7",
965
1062
  incipit: "Ite Ib",
@@ -970,6 +1067,7 @@ export const KYRIALE = [
970
1067
  {
971
1068
  id: "gregobase:2934",
972
1069
  office: "cr",
1070
+ section: "credo",
973
1071
  mass: null,
974
1072
  mode: "4",
975
1073
  incipit: "Credo VI",
@@ -980,7 +1078,8 @@ export const KYRIALE = [
980
1078
  {
981
1079
  id: "gregobase:2993",
982
1080
  office: "ke",
983
- mass: 75,
1081
+ section: "ad-libitum",
1082
+ mass: null,
984
1083
  mode: "1",
985
1084
  incipit: "Kyrie (ad lib.) I. - Clemens Rector",
986
1085
  gabc: "(c4) KY(ixfg!hi)ri(h)e(hv.//ghFD.) *(,) (ixfg!hih./ghFD.) e(fvED'd)lé(c')i(d)son.(d.) (::) Ký(dc)ri(dvCA')e(cdd//cf//egFE.) (,) e(deC'A)lé(cc)i(d)son.(d.) (::) Ký(ixfg!hi)ri(h)e(hv.//ghFD.) (,) (ixfg!hih./ghFD.) e(fvED'd)lé(c')i(d)son.(d.) (::) \r\n\r\nChrí(hih)ste(hgkkkh.//ijh'/igh.) (,) e(gjI'GhhvGF'ED'd)lé(c')i(d)son.(d.) (::) Chrí(dc)ste(dvCA'/cdd cf//egFE.) (,) e(deC'A)lé(cc)i(d)son.(d.) (::) Chrí(hih)ste(hgkkkh.//ijh'/igh.) (,) e(gjI'G/hhvGF'ED'd)lé(c')i(d)son.(d.) (::) \r\n\r\nKý(ixdc/fg!hi)ri(h)e(hv.//ghFD'cdd) (,) (ixdc/fg!hih./ghFD.//hhg/hhf/ghFD.) (,) (fvEDC./ed/fgFE.) e(deC'A)lé(cc)i(d)son.(d.) (::)\r\nKý(d!ew!fvED'd)ri(cd)e(dv./cf//egFE.) (,) e(deC'A)lé(cc)i(d)son.(d.) (::) Ký(ixdc/fg!hi)ri(h)e(hv.//ghFD'/cdd) *(,) (ixdc/fg!hih.//ghFD'/cdd) *(,) (hhg/hhf/ghFD.) *(,) (hhg/hhf/ghFD.) **(,) (fvEDC./ed/fgFE.) e(deC'A)lé(cc)i(d)son.(d.) (::)",
@@ -990,7 +1089,8 @@ export const KYRIALE = [
990
1089
  {
991
1090
  id: "gregobase:2021",
992
1091
  office: "ke",
993
- mass: 76,
1092
+ section: "ad-libitum",
1093
+ mass: null,
994
1094
  mode: "1",
995
1095
  incipit: "Kyrie (ad lib.) II. - Summe Deus",
996
1096
  gabc: "(c4) KY(dh)ri(h)e(jvHGhv.//fgFDC.) <clear>*(,) e(fgf)lé(g')i(h)son.(h.) (::)\r\nKý(hj)ri(jk)e(kjk.ixhi/ghf.1) (,) e(hjIG'F)lé(g')i(h)son.(h.) (::)\r\nKý(dh)ri(h)e(jvHGhv.//fgFDC.) (,) e(fgf)lé(g')i(h)son.(h.) (::)\r\nChri(hj)ste(jkkjk.ixhiGF.) (,) e(hjIG'F)lé(g')i(h)son.(h.) (::)\r\nChri(h)ste(jk!mvmjjvIG.) e(kvJIG'F)lé(g')i(h)son.(h.) (::)\r\nChri(hj)ste(jkkjk.ixhiGF.) (,) e(hjIG'F)lé(g')i(h)son.(h.) (::)\r\nKý(hg)ri(f')e(gffvEDfg!hvhd.) e(fgf/gh!jvIG'F)lé(g')i(h)son.(h.) (::)\r\nKý(h')ri(j)e(kvJIkvJIGh.) (,) e(kvJIG'F)lé(g')i(h)son.(h.) (::)\r\nKý(hg)ri(f')e(gffvEDfg!hvhd.) <clear>*(,) (hvGF'gffvEDfg!hvhd.) <clear>**(,) e(fgf/gh!jvIG'F)lé(g')i(h)son.(h.) (::)",
@@ -1000,7 +1100,8 @@ export const KYRIALE = [
1000
1100
  {
1001
1101
  id: "gregobase:2237",
1002
1102
  office: "ke",
1003
- mass: 77,
1103
+ section: "ad-libitum",
1104
+ mass: null,
1004
1105
  mode: "2",
1005
1106
  incipit: "Kyrie (ad lib.) III / III A",
1006
1107
  gabc: "(f3) KY(f)ri(fe)e(eef.) ~~*() (fhG'FE.) (,) e(giHF'E)lé(g')i(g)son.(f.) (::) Ký(f)ri(fe)e(effc.) e(bc!evec)lé(e')i(f)son.(f.) (::) Ký(f)ri(fe)e(eef. fhG'FE.) (,) e(giHF'E)lé(g')i(g)son.(f.) (::) Chri(f!gwh)ste(hg/hji/hhe.) (,) e(giHF'E)lé(g')i(g)son.(f.) (::) Chri(f)ste(fvEC) e(efe/fhg)lé(e')i(f)son.(f.) (::) Chri(f!gwh)ste(hg/hji/hhe.) (,) e(giHF'E)lé(g')i(g)son.(f.) (::) Ký(fj)ri(ji)e(ijjh.) (,) e(jji/hhf)lé(ef)i(g)son.(f.) (::) Ký(f)ri(fe)e(i.) e(h!iw!jvIH/iif)lé(ef)i(g)son.(f.) (::) Ký(fj)ri(ji)e(ijjh.) (,) (jjvIH/iih//fhG'Ef.) ~~~~~*(;) (e!fg!hi!jvjh.) (,) e(jji/hhf)lé(ef)i(g)son.(f.) (::)",
@@ -1010,7 +1111,8 @@ export const KYRIALE = [
1010
1111
  {
1011
1112
  id: "gregobase:2254",
1012
1113
  office: "ke",
1013
- mass: 78,
1114
+ section: "ad-libitum",
1115
+ mass: null,
1014
1116
  mode: "5",
1015
1117
  incipit: "Kyrie (ad lib.) IV. - Kyrie altissime",
1016
1118
  gabc: "(c3) KY(d)ri(fh)e(hf/hiih) *{ }(jvIH'if.) e(gxhvG'FE'fd)lé(efe')i(e)son.(d.) (::) \r\nKý(d)ri(ef)e(gxfegvFD.1) e(gxd'!fh!ivvHF'E//gvFE'fd)lé(efe')i(e)son.(d.) (::) \r\nKý(d)ri(fh)e(hf/hiih//jvIH'if.) e(hvG'FE'fd)lé(efe')i(e)son.(d.) (::) \r\nChri(h)ste(gxhiH'GhvGFE'/f!gh./ivHGh.) (,) e(ijIH'h)lé(gxg')i(h)son.(h.) (::) \r\nChri(h)ste(gxf./hvG'FE'/fd.) (,) e(gx!d'!fh!ivvHF'E//gvFE'/fd)lé(efe')i(e)son.(d.) (::) \r\nChri(h)ste(gxhiH'G/hvGFE'/f!gh./ivHGh.) (,) e(ijIH'h)lé(gxg')i(h)son.(h.) (::) \r\nKý(hih)ri(gxgh)e(h./kj/klKJ'IH.0/ijh//f!gh/ih.) (,) e(gxfhG'FE'fd)lé(efe')i(e)son.(d.) (::) \r\nKý(kj)ri(kl)e(lvKJ'IH.) (,) e(gxijhhg//ikJ'IH'h)lé(g')i(h)son.(h.) (::) \r\nKý(hih)ri(gxgh)e(h./kj/klKJ'IH./ijh//f!gh/ih.0) ~~~~~*(;) (kj/klKJ'IH./gxijh//f!gh/ih.0) ~~~~~**(,) e(gxfhG'FE'fd)lé(efe')i(e)son.(d.) (::)",
@@ -1020,7 +1122,8 @@ export const KYRIALE = [
1020
1122
  {
1021
1123
  id: "gregobase:2261",
1022
1124
  office: "ke",
1023
- mass: 79,
1125
+ section: "ad-libitum",
1126
+ mass: null,
1024
1127
  mode: "7",
1025
1128
  incipit: "Kyrie (ad lib.) V / I B",
1026
1129
  gabc: "(c3) KY(efe)ri(de)e(ev./df!hvGF.) ~~~~~*(,) (hiH'GE.) e(fvED)lé(f')i(f)son.(e.) (::) Ký(bc)ri(de)e(efEDf.) (,) e(fhhvGFE'e)lé(d')i(e)son.(e.) (::) Ký(efe)ri(de)e(ev./df!hvGF.) (,) (hiH'GE.) e(fvED)lé(f')i(f)son.(e.) (::) Chri(iji)ste(hvvGF.) (,) (fi!jvIH'hvGE.) e(fvED)lé(f')i(f)son.(e.) (::) Chri(bc!de)ste(efEDf.) (,) e(fhhvGFE'e)lé(d')i(e)son.(e.) (::) Chri(iji)ste(hvvGF.) (,) (fi!jvIH'hvGE.) e(fvED)lé(f')i(f)son.(e.) (::) Ký(iji)ri(hi)e(iv./hj!kvJI.) e(jvIH)lé(jk)i(i)son.(i.) (::) Ký(iji)ri(hhg)e(f.) (,) (fi!jvIH'/hvGE.) e(fvED)lé(f')i(f)son.(e.) (::) Ký(iji)ri(hi)e(iv./hj!kvJI./jvIH/jki.) ~~~~~*(,) (ijIH/ii//hj!kvJI./jvIH/jki.) ~~~~~**(,) (ijIH'/hvGF'f//ijIH'GE.) e(fvED)lé(f')i(f)son.(e.) (::)",
@@ -1030,6 +1133,7 @@ export const KYRIALE = [
1030
1133
  {
1031
1134
  id: "gregobase:309",
1032
1135
  office: "ke",
1136
+ section: "mass",
1033
1137
  mass: 2,
1034
1138
  mode: "3",
1035
1139
  incipit: "Kyrie II",
@@ -1040,6 +1144,7 @@ export const KYRIALE = [
1040
1144
  {
1041
1145
  id: "gregobase:862",
1042
1146
  office: "gl",
1147
+ section: "mass",
1043
1148
  mass: 2,
1044
1149
  mode: "1",
1045
1150
  incipit: "Gloria II",
@@ -1050,7 +1155,8 @@ export const KYRIALE = [
1050
1155
  {
1051
1156
  id: "gregobase:2269",
1052
1157
  office: "ke",
1053
- mass: 6,
1158
+ section: "ad-libitum",
1159
+ mass: null,
1054
1160
  mode: "8",
1055
1161
  incipit: "Kyrie (ad lib.) VI",
1056
1162
  gabc: "(c4) KY(g!hw!ij)ri(ih)e(hi/jiig) ~~~~~*() (hvGEfvEDe.) (,) e(g!hjH'GF)lé(g')i(g)son.(e.) (::) \r\nKý(c!dw!ef)ri(ed)e(de/fe/!ed//evDC/dee) (,) e(c!dw!efeed//evDC)lé(d')i(e)son.(e.) (::) \r\nKý(g!hw!ij)ri(ih)e(hi/jiig//hvGE/fvEDe.) (,) e(g!hjH'GF)lé(g')i(g)son.(e.) (::) \r\nChri(j_k_j_)ste(ihj./hji/gfh.) (,) e(hjI'HG'h)lé(e)i(f)son.(g.) (::) Chri(ghe)ste(fgg ghe/fgg) (,) e(dggvF'ED)lé(e')i(f)son.(g.) (::) \r\nChri(j_k_j_)ste(ihj./hji/gfh.) (,) e(hjI'HG'h)lé(e')i(f)son.(g.) (z0::c3) \r\nKý([oll:0{1]i.j!kwll)ri(j)e(lv[oll:}]/KJ.) e(ikJI'jh)lé(j')i(i)son.(i.) (::) \r\nKý(iij)ri(ih)e(hv./fhG'E) e(fdf)lé(fg)i(e)son.(e.) (::) \r\nKý([oll:0{1]i.j!kwll)ri(j)e(lv[oll:}]/KJ./ikJI'/jh/jji.) ~~~~~*(,) ([oll:0{1]i.j!kwllvKJ//lv[oll:}]/KJI'/kvJI'jh/jji.) ~~~~~**(,) (i_[oh:h]h/ijIH./fhG'E) e(fdf)lé(fg)i(e)son.(e.) (::)",
@@ -1060,7 +1166,8 @@ export const KYRIALE = [
1060
1166
  {
1061
1167
  id: "gregobase:2363",
1062
1168
  office: "ke",
1063
- mass: 81,
1169
+ section: "ad-libitum",
1170
+ mass: null,
1064
1171
  mode: "1",
1065
1172
  incipit: "Kyrie (ad lib.) VII. - Splendor aeterne",
1066
1173
  gabc: "(c4) KY(d')ri(d)e(dcca/cd.) ~~~~~*() e(dg/hffvED'C)lé(ef)i(d)son.(d.) <i>iij.</i>(::) \r\nChri(h)ste(ghGF./gefED.) (,) e(ce!gvge/fvED'edd)lé(cd!ev)i(e)son.(d.) <i>iij.</i>(::) \r\nKý(h')ri(h)e(hg/jkJ'IH/jjh.) (,) e(ivHG'E)lé(gh!iv)i(i)son.(h.) <i>ij.</i>(::) \r\nKý(h')ri(h)e(hg/jkJ'IH/jjh./ivHG'E/gh!ivih.0) ~~~~~*(;) (jkJ'IH/jjh./ivHG'E/ghh) (,) (hiHG'hvGEed.0) ~~~~~**(,) e(ce!gvge/fvED'/edd)lé(cd!ev)i(e)son.(d.) (::)",
@@ -1070,7 +1177,8 @@ export const KYRIALE = [
1070
1177
  {
1071
1178
  id: "gregobase:2468",
1072
1179
  office: "ke",
1073
- mass: 81,
1180
+ section: "ad-libitum",
1181
+ mass: null,
1074
1182
  mode: "6",
1075
1183
  incipit: "Kyrie (ad lib.) VIII. - Firmator sancte",
1076
1184
  gabc: "(c4) KY(f)ri(df)e(ixf./gh!ivHGF') () * e(f)lé(d')i(e)son.(f.) <i>iij.</i>(::) \r\nChri(fj)ste(ixjvIH/ij/kjjh/ivHGF') e(f)lé(d')i(e)son.(f.) <i>iij.</i>(::) \r\nKý(fj)ri(j)e(kj//mvLKJ./ixij/kjjh/ivHGF') e(f)lé(d')i(e)son.(f.) <i>ij.</i>(::) \r\nKý(fj)ri(j)e(kj//mvLKJ./ixij/kjjh.) ~~~~~*(,) (ixji/jkjjh/ivHGF') e(f)lé(d')i(e)son.(f.) (::)",
@@ -1080,7 +1188,8 @@ export const KYRIALE = [
1080
1188
  {
1081
1189
  id: "gregobase:2599",
1082
1190
  office: "ke",
1083
- mass: 82,
1191
+ section: "ad-libitum",
1192
+ mass: null,
1084
1193
  mode: "8",
1085
1194
  incipit: "Kyrie (ad lib.) IX. - O Pater excelse",
1086
1195
  gabc: "(c3) KY(e')ri(e)e(evDB'/d/efe.) ~~~~~*(,) (ehhvGE) e(fe)lé(d')i(e)son.(e.) <i>iij.</i>(::) \r\nChri(f)ste(ehGE'/edf.) (,) (fhhvGF'E) e(fgeevDC)lé(d')i(e)son.(e.) <i>iij.</i>(::) \r\nKý(ei)ri(hi)e(iv./kiihj./klJ'I/kvJI.) ~~~~~*(,) e(ihhvGF'E)lé(fgf')i(f)son.(e.) <i>iij.</i>(::)",
@@ -1090,7 +1199,8 @@ export const KYRIALE = [
1090
1199
  {
1091
1200
  id: "gregobase:2604",
1092
1201
  office: "ke",
1093
- mass: 10,
1202
+ section: "ad-libitum",
1203
+ mass: null,
1094
1204
  mode: "1",
1095
1205
  incipit: "Kyrie (ad lib.) X",
1096
1206
  gabc: "(c4) KY(ixhi)ri(hg)e(hd..) *(,) e(fhGE'D)lé(c')i(d)son.(d.) <i>iij.</i>(::) Chri(hg)ste(kv.jkJH'Gh.) (,) e(hg/fvED)lé(c')i(d)son.(d.) <i>iij.</i>(::) Ký(h')ri(g)e(hghd.) (,) e(fhGE'D)lé(c')i(d)son.(d.) <i>ij.</i>(::) Ký(dfd)ri(cd)e(d./gvvF'ED.) ~~~~~*(,) e(ce!fvED)lé(c')i(d)son.(d.) (::)",
@@ -1100,7 +1210,8 @@ export const KYRIALE = [
1100
1210
  {
1101
1211
  id: "gregobase:2614",
1102
1212
  office: "ke",
1103
- mass: 83,
1213
+ section: "ad-libitum",
1214
+ mass: null,
1104
1215
  mode: "1",
1105
1216
  incipit: "Kyrie (ad lib.) XI. - Kyrie Salve",
1106
1217
  gabc: "(c4) KY(c)ri(df)e(evDC/dfe.) ~~~~~*(,) e(fgF'ED)lé(ef)i(d)son.(d.) <i>iij.</i>(::) \r\nChri(dhGFE'e)ste(d.) (,) e(fgF'ED/evDC)lé(ef)i(d)son.(d.) <i>iij.</i>(::) \r\nKý(h)ri(gh)e(h./jkJ'IH/jjh.) (,) e(hvGF'ED)lé(ef)i(d)son.(d.) <i>ij.</i>(::) \r\nKý(h)ri(gh)e(h./jkJ'IH/jjh.) ~~~~~*(,) (hghh//jkJ'IH/jjh.) ~~~~~**(,) e(hvGF'ED)lé(ef)i(d)son.(d.) (::)",
@@ -1110,7 +1221,8 @@ export const KYRIALE = [
1110
1221
  {
1111
1222
  id: "gregobase:2659",
1112
1223
  office: "gl",
1113
- mass: 83,
1224
+ section: "ad-libitum",
1225
+ mass: null,
1114
1226
  mode: "8",
1115
1227
  incipit: "Gloria (ad lib.) I.",
1116
1228
  gabc: "(c3) GLó(e)ri(ce)a(e') in(e) ex(fg)cél(hvFE'ef~)sis(e) De(c!de)o.(e.) (::)\r\nEt(e') in(h) ter(g!hi~)ra(i') pax(i) ho(hg)mí(hi)ni(hg)bus(g.) (,) bo(hi)næ(ivHG) vo(fe)lun(fh)tá(e.)tis.(e.) (::)\r\nLau(b!ce~)dá(f')mus(c) te.(b!ce.) (::)\r\nBe(e')ne(g)dí(hiH'GF'E)ci(fhf')mus(f) te.(e.) (::)\r\nAd(f')o(b)rá(c!de)mus(fe) te.(c!de.) (::)\r\nGlo(d)ri(fhG'F)fi(efb)cá(c!de)mus(fe) te.(c!de.) (::)\r\nGrá(ehg)ti(hi)as(i) á(ji)gi(h')mus(g) ti(hi)bi(i.) (;) pro(i')pter(e) ma(fh)gnam(ed~) gló(bd)ri(c)am(de~) tu(e.)am.(e.) (::)\r\nDó(h')mi(g)ne(f) De(hi)us,(i.) (,) Rex(ji) cæ(hg)lé(hi)stis,(e.) (;) De(f)us(h') Pa(i)ter(hvGE) o(fhee)mní(b)pot(de)ens.(e.) (::)\r\nDó(i')mi(h)ne(i') Fi(i)li(h') u(i)ni(k')gé(l)ni(kj)te(h.) (,) Je(hg)su(fh) Chri(e.)ste.(e.) (::)\r\nDó(i')mi(h)ne(i') De(i)us,(i.) (,) A(i')gnus(l[oll:1{1]) De(kl)i,(l.) (,0) Fí(m')li(l)us(kl) Pa([oll:}]l.)tris.(h.) (::)\r\nQui(i') tol(k)lis(l') pec(i)cá(hi)ta(f) mun(hi~)di,(i.) (;) mi(e!fg)se(fh)ré(e)re(dvCB) no(de)bis.(e.) (::)\r\nQui(i') tol(k)lis(l') pec(i)cá(hi)ta(f) mun(hi~)di,(i.) (;) <nlba>sús(il[oll:1{1]!mv)ci(l)pe(l') de(l)pre(k')ca([oll:}]l)ti(hg)ó(f)nem</nlba>(hi~) no(i.)stram.(i.) (::)\r\nQui(ef) se(e)des(dvCB') ad(e) déx(fhg)te(f')ram(e) Pa(hi)tris,(i.) (;) mi(e!fg)se(fh)ré(e)re(dvCB) no(de)bis,(e.) (::)\r\nQuó(h')ni(g)am(f) tu(hi) so(kj)lus(i) san(hi~)ctus.(i.) (::)\r\nTu(ei) so(h')lus(k) Dó(ji)mi(hi)nus.(i.) (::)\r\nTu(il[oll:1{1]) so(k')lus(l) Al([oll:}]ml)tís(k')si(j)mus,(i.) (,) Je(hg)su(fh) Chri(e.)ste.(e.) (::)\r\nCum(b) San(de~)cto(e) Spí(ehg)ri(hih)tu,(i.) (,) in(ij) gló(i)ri(hg)a(fe) De(fh)i(fe) Pa(c!de)tris.(dvCB.) (::)\r\nA(ef!hvGF'/he./cd/efe)men.(de..) (::)",
@@ -1120,7 +1232,8 @@ export const KYRIALE = [
1120
1232
  {
1121
1233
  id: "gregobase:2685",
1122
1234
  office: "gl",
1123
- mass: 85,
1235
+ section: "ad-libitum",
1236
+ mass: null,
1124
1237
  mode: "2",
1125
1238
  incipit: "Gloria (ad lib.) II.",
1126
1239
  gabc: "(f3) GLó(c)ri(ef)a(f') in(g) ex(fe)cél(eg)sis(g) De(f_[oh:h]g_[oh:h]f_[oh:h])o.(f.) (::) Et(b) in(c') ter(d)ra(ef) pax(fe) ho(f')mí(g)ni(ef)bus(f.) (,) bo(f)næ(fe) vo(fg)lun(g)tá(f_[oh:h]g_[oh:h]f_[oh:h])tis.(f.) (::) Lau(fe~)dá(eg)mus(ghG'F) te.(f_[oh:h]g_[oh:h]f._[oh:h]) (::) Be(f')ne(f)dí(fe)ci(eg)mus(ghG'F) te.(f_[oh:h]g_[oh:h]f._[oh:h]) (::) Ad(f)o(fe)rá(eg)mus(ghG'F) te.(f_[oh:h]g_[oh:h]f._[oh:h]) (::) Glo(f')ri(g)fi(hi)cá(h)mus(hvGF'g) te.(e!fg!hvGF/gfg/hhg.) (::) Grá(g)ti(gf)as(ef!gvgf) á(g)gi(fg)mus(fe) ti(e!fg!hvGF)bi(f./gfg/hhg.) (;) pro(g)pter(ij) ma(j)gnam(ivH~G~) gló(g!hi)ri(hg)am(fg) tu(e!fg!hvGF)am.(fg!hvhg.) (::) Dó(g)mi(gi)ne(h) De(hg)us,(f_e) (,) Rex(f') cæ(h)lé(fg)stis,(ghhg.) (;) De(g)us(fe) Pa(fgf)ter(f.) o(g!hi)mní(h)pot(hg)ens.(fg!hhg.) (::) Dó(g')mi(i)ne(j') Fi(j)li(i') u(h)ni(g')gé(f)ni(gh)te(g.) (,) Je(fe)su(fg) Chri(f)ste.(fg/hihhg.) (::) Dó(g)mi(gi)ne(h) De(hg)us,(f_e) (,) A(f')gnus(h) De(fg)i,(ghhg.) (;) Fí(fe)li(fg)us(g) Pa(f_[oh:h]g_[oh:h]f_[oh:h])tris.(f.) (::) Qui(f) tol(e!fg)lis(f.) pec(fe)cá(fg)ta(g) mun(fg)di,(fg/hihhg.) (;) mi(g)se(fe)ré(fg)re(g) no(f_[oh:h]g_[oh:h]f_[oh:h])bis.(f.) (::) Qui(f) tol(e!fg)lis(f.) pec(fe)cá(fg)ta(g) mun(fg)di,(fg/hihhg.) (;) sús(g')ci(i)pe(j') de(j)pre(i')ca(h)ti(g')ó(f)nem(gh) no(f.)stram.(f.) (::) Qui(e!fg!hvGFE'/fggf.0) se(g)des(gi) ad(h) déx(hg)te(fg)ram(fe) Pa(fg)tris,(f.) (;) mi(f)se(fe)ré(fg)re(g) no(f_[oh:h]g_[oh:h]f_[oh:h])bis.(f.) (::) Quó(e)ni(fg)am(g) tu(fe) so(f')lus(h) san(fg~)ctus.(g.) (::) Tu(f) so(g')lus(f) Dó(gf)mi(ef)nus.(f.) (::) Tu(f) so(g')lus(h) Al(gf~)tís(gf)si(ef)mus,(fg/hihhg.) (;) Je(fe)su(fg) Chri(f)ste.(fg/hihhg.) (::) Cum(g) San(ef!gh)cto(g') Spí(h)ri(fg)tu,(fe..) (;) in(e) gló(fg)ri(g')a(g) De(hvGF'E)i(e) Pa(f_[oh:h]g_[oh:h]f_[oh:h])tris.(f.) (::) A(fi!jvIH'G)men.(giG'FE'/fggf.0) (::)",
@@ -1130,7 +1243,8 @@ export const KYRIALE = [
1130
1243
  {
1131
1244
  id: "gregobase:2707",
1132
1245
  office: "gl",
1133
- mass: 87,
1246
+ section: "ad-libitum",
1247
+ mass: null,
1134
1248
  mode: "2",
1135
1249
  incipit: "Gloria (ad lib.) III / III B",
1136
1250
  gabc: "(f3) GLó(fg)ri(gf)a(ef) in(hg) ex(hi)cél(ivH~'G~)sis(fg) De(e_[uh:l]f)o.(f.) (::) Et(f) in(f!gwh) ter(g_[oh:h]f~)ra(f.) pax(giH'G) ho(hi)mí(gh)ni(gf)bus(f.) (,) bo(f)næ(feec) vo(ed)lun(ef~)tá(fv./ef!hvGF'Ef)tis.(f.) (::) Lau(fi~)dá(i)mus(hg) te.(f./iih/ivHGF'/ghffef.) (::) Be(f)ne(fi)dí(iji')ci(h)mus(hg) te.(f./iih/ivHGF'/ghffef.) (::) Ad(e)o(fg)rá(gfh)mus(gf) te.(f./iih/ivHGF'/ghffef.) (::) Glo(ef)ri(e)fi(fg)cá(gfh)mus(gf) te.(f./iih/ivHGF'/ghffef.) (::) Grá(fg)ti(gf)as(ef) á(g_0[uh:l]!hi)gi(hg)mus(fgF'E) ti(fg)bi(g.) (;) pro(gfh)pter(fgF'E) ma(fg~)gnam(g.) gló(gfh)ri(hg)am(gf~) tu(ef!gvgf)am.(f.) (::) Dó(fg)mi(gf)ne(fg!hi) De(gh)us,(gf..) (,) Rex(fh) cæ(fe)lé(fg)stis,(g.) (;) De(gfhhg)us(g.) Pa(gvFEfg)ter(f.) (`) o(fe~)mní(ffvEC./ef/gf)pot(ef)ens.(f.) (::) Dó(kxfjji/jkJI'/ivHG)mi(fg)ne(g.) (,) Fi(iji)li(hvGF) u(g')ni(i)gé(g')ni(f)te(giG'Fg.) (,) Je(gf)su(hg) Chri(ef!gvgf)ste.(f.) (::) Dó(kxfjji/jkJ'I/ivHG)mi(fg)ne(g) De(ef)us,(f.) (,) A(h)gnus(hg) De(fg)i,(g.) (,) Fí(iji)li(hvGF)us(giG'Fg) Pa(e_[uh:l]f)tris.(f.) (::) Qui(h) tol(g_[oh:h]f~)lis(f') pec(g)cá(ijI'H)ta(gf) mun(i_[oh:h]h)di,(fg..) (;) mi(e)se(ef)ré(f_e)re(ghg) no(f.)bis.(f.) (::) Qui(h) tol(g_[oh:h]f~)lis(f') pec(g)cá(ijI'H)ta(gf) mun(i_[oh:h]h)di,(fg..) (;) sús(e)ci(ef)pe(fgFE.) (,) de(g)pre(fe)ca(f)ti(hg)ó(hi!jvIG'F)nem(hg~) no(e_[uh:l]f)stram.(f.) (::) Qui(h) se(gvFE/fg)des(f.) (`) ad(g') déx(i)te(ij)ram(kxj_i/jkJI'/ivHG) Pa(fg)tris,(g.) (;) mi(e)se(ef)ré(f_e)re(ghg) no(f.)bis,(f.) (::) Quó(fg)ni(gf)am(ef) tu(g') so(h)lus(fe) san(fg)ctus.(f.) (::) Tu(h') so(i)lus(hvGF'g) Dó(e)mi(ef)nus.(f.) (::) Tu(g') so(i)lus(kxj_i/jkJ'Ij.) Al(fg!hi)tís(ivHG)si(fg)mus,(g.) (,) Je(gf)su(hg) Chri(ef!gvgf)ste.(f.) (::) Cum(h) San(gvFEfg)cto(f.) Spí(h_g/ivGF/h_f)ri(ef)tu,(f.) (;) in(fe~) gló(ffvEC./ef/gf)ri(ef)a(f.) (,) De(e')i(g) Pa(kxiv./jkJI'/ivH'GE/f./hvGF/gvFE/f.`eg!ijIG'h)tris.(gf..) (::) A(ffvEC./ef/gf)men.(ef..) (::)",
@@ -1140,7 +1254,8 @@ export const KYRIALE = [
1140
1254
  {
1141
1255
  id: "gregobase:2749",
1142
1256
  office: "gl",
1143
- mass: 89,
1257
+ section: "ad-libitum",
1258
+ mass: null,
1144
1259
  mode: "4",
1145
1260
  incipit: "Gloria (Ambrosian)",
1146
1261
  gabc: "(c4) GLó(h)ri(h)a(h) in(h) ex(h)cél(h)sis(h) De(h.)o.(g.) (::) Et(g) in(g) ter(h)ra(h) pax(h) ho(h)mí(i')ni(h)bus(h.) bo(h)næ(h) vo(h)lun(h)tá(h.)tis.(g.) (::) Lau(h)dá(h')mus(h) te.(g.) (::) Be(h)ne(h)dí(h')ci(h)mus(h) te.(g.) (::) Ad(h)o(h)rá(h')mus(h) te.(g.) (::) Glo(h)ri(h)fi(h)cá(h')mus(h) te.(g.) (::) Grá(g)ti(g)as(g') á(g)gi(g)mus(g') ti(g)bi(ivHG/jjkJI'j//hiHG.) (,) pro(h)pter(h) ma(h)gnam(h) gló(i)ri(h)am(h) tu(h.)am.(g.) (::) Dó(h)mi(h)ne(h) De(h)us,(g.) Rex(h) cæ(h)lé(h)stis,(g.) (,) De(h)us(h) Pa(h)ter(h) o(h)mní(h')pot(h)ens.(g.) (::) Dó(h)mi(h)ne(h) Fi(h)li(h) u(h)ni(h)gé(h')ni(h)te(g.) Je(i)su(i') Chri(j)ste.(hiH'G/jjkJI'j//hiHG.) (::) Dó(h)mi(h)ne(h) De(h)us,(g.) A(h)gnus(h) De(h)i,(g.) Fí(h)li(h)us(h) Pa(h.)tris.(g.) (::) Qui(h) tol(h)lis(h) pec(h)cá(i)ta(h') mun(g)di,(ivHG/jjkJI'j//hiHG.) (,) mi(h)se(h)ré(h)re(h) no(h.)bis.(g.) (::) Qui(h) tol(h)lis(h) pec(h)cá(i)ta(h') mun(g)di,(ivHG/jjkJI'j//hiHG.) (,) sús(h)ci(h)pe(h) de(h)pre(h)ca(h)ti(h)ó(h)nem(h) no(h.)stram.(g.) (::) Qui(g) se(h)des(h) ad(h) déx(h)te(h)ram(h) Pa(h)tris,(g.) mi(h)se(h)ré(h)re(h) no(h.)bis.(g.) (::) Quó(h)ni(h)am(h) tu(h) so(h)lus(h) san(h.)ctus.(g.) (::) Tu(h) so(h)lus(h) Dó(h')mi(h)nus.(g.) (::) Tu(h) so(h)lus(h) Al(h)tís(h')si(h)mus,(g.) Je(i)su(i) Chri(j)ste.(hiH'G/jjkJI'j//hiHG.) (::) Cum(h) San(h)cto(h) Spí(h)ri(h)tu,(h.) in(h) gló([oh:m{]i_h_)ri(g_)a(h'_) De(i_)i(h'_) Pa(h_)tris.(h.) **(,) A(h)men.(ghg/hiHG'/hvG'F_E'_/fg_2//g'1_g_2//gv'1_F_E_e[oh}]) (::)",
@@ -1150,7 +1265,8 @@ export const KYRIALE = [
1150
1265
  {
1151
1266
  id: "gregobase:2816",
1152
1267
  office: "sa",
1153
- mass: 90,
1268
+ section: "ad-libitum",
1269
+ mass: null,
1154
1270
  mode: "1",
1155
1271
  incipit: "Sanctus (ad lib.) I.",
1156
1272
  gabc: "(c4) SAn(ccd~)ctus,(d.) *(,) San(ecd)ctus,(d.) (,) San(fg)ctus(d.) (,) Dó(e')mi(g)nus(g) De(g')us(e) Sá(g')ba(g)oth.(h.) (:) Ple(h')ni(h) sunt(hg~) cæ(hj)li(g') et(h) ter(ef)ra(e.) (,) gló(evDC')ri(d)a(dfe) tu(d.)a.(d.) (:) Ho(d)sán(e')na(f) in(g') ex(f)cél(dccd~)sis.(d.) (:) Be(e')ne(e)dí(ed)ctus(c') qui(e) ve(gh)nit(h.) (,) in(g) nó(hj)mi(g)ne(eg) Dó(fe)mi(de)ni.(e.) (:) Ho(d)sán(de)na(ca) in(c) ex(dfe)cél(dccd~)sis.(d.) (::)",
@@ -1160,7 +1276,8 @@ export const KYRIALE = [
1160
1276
  {
1161
1277
  id: "gregobase:2820",
1162
1278
  office: "sa",
1163
- mass: 91,
1279
+ section: "ad-libitum",
1280
+ mass: null,
1164
1281
  mode: "4",
1165
1282
  incipit: "Sanctus (ad lib.) II.",
1166
1283
  gabc: "(c4) SAn(c!df~)ctus,(ffvED.) (,) * San(gfg)ctus,(g.) (,) San(edf)ctus(ffvEDe.) (,) Dó(d')mi(e)nus(g) De(f')us(g) Sá(ed)ba(ffe)oth.(e.) (:) Ple(d')ni(e) sunt(g!hj) cæ(hvGF')li(g) et(gh) ter(gvFE)ra(e.) (,) gló(gf)ri(e)a(fg) tu(fvED)a.(d.) (:) Ho(e)sán(fg~)na(g') in(f) ex(g)cél(ed/ffe)sis.(e.) (:) Be(d')ne(e)dí(g!hj)ctus(h.) qui(h) ve(hg)nit(h_j) (,) in(g) nó(gf)mi(e)ne(fg) Dó(f)mi(fvED)ni.(d.) (:) Ho(e)sán(fg~)na(g') in(f) ex(g)cél(ed/ffe)sis.(e.) (::)",
@@ -1170,7 +1287,8 @@ export const KYRIALE = [
1170
1287
  {
1171
1288
  id: "gregobase:2849",
1172
1289
  office: "sa",
1173
- mass: 91,
1290
+ section: "ad-libitum",
1291
+ mass: null,
1174
1292
  mode: "8",
1175
1293
  incipit: "Sanctus (ad lib.) III.",
1176
1294
  gabc: "(c3) SAn(ee/fe/hvGF)ctus,(g.) *(,) San(efe)ctus,(e.) (,) San(e)ctus(gi) Dó(i)mi(hvGF)nus(g.) (,) De(e)us(fg) Sá(giGE./hvGF'E/fg)ba(fe)oth.(e.) (:) Ple(ef)ni(e) sunt(fg) cæ(efe)li(e.) (,) et(e!gi) ter(hvGF)ra(g.) gló(e')ri(f)a(fg) tu(fe)a.(e.) (:) Ho(e)sán(gi~)na(ivGE.) in(h) ex(fgf)cél(e.)sis.(e.) (:) Be(iji')ne(g)dí(hi)ctus(i.) (,) qui(ivHF'g) ve(efe)nit(e.) (;) in(ef) nó(e)mi(fg)ne(g') Dó(i)mi(jvIH)ni.(i.) (:) Ho(i')sán(g)na(e.) in(h) ex(fgf)cél(e.)sis.(e.) (::)",
@@ -1180,7 +1298,8 @@ export const KYRIALE = [
1180
1298
  {
1181
1299
  id: "gregobase:2850",
1182
1300
  office: "ag",
1183
- mass: 92,
1301
+ section: "ad-libitum",
1302
+ mass: null,
1184
1303
  mode: "8",
1185
1304
  incipit: "Agnus (ad lib.) I.",
1186
1305
  gabc: "(c4) A(gg/ijhh)gnus(g) De(gihhg)i,(g.) *(,) qui(edg/hi) tol(ijhh)lis(g.) pec(g')cá(j)ta(kl) mun(l)di :(kvJI.) (;) mi(i')se(j)ré(ki)re(jiivHG) no(hihhg)bis.(g.) (::) A(gg/ijhh)gnus(g) De(gihhg)i,(g.) *(,) qui(edg/hi) tol(ijhh)lis(g.) pec(g')cá(j)ta(kl) mun(l)di :(kvJI.) (;) mi(i')se(j)ré(ki)re(jiivHG) no(hihhg)bis.(g.) (::) A(gg/ijhh)gnus(g) De(gihhg)i,(g.) *(,) qui(edg/hi) tol(ijhh)lis(g.) pec(g')cá(j)ta(kl) mun(l)di :(kvJI.) (;) do(i')na(j) no(ki)bis(jiivHG) pa(hihhg)cem.(g.) (::)",
@@ -1190,7 +1309,8 @@ export const KYRIALE = [
1190
1309
  {
1191
1310
  id: "gregobase:2851",
1192
1311
  office: "ag",
1193
- mass: 93,
1312
+ section: "ad-libitum",
1313
+ mass: null,
1194
1314
  mode: "6",
1195
1315
  incipit: "Agnus (ad lib.) II.",
1196
1316
  gabc: "(c4) A(ixi)gnus(hg) De(h)i,(f.) (,) * qui(e) tol(f')lis(g) pec(g')cá(f)ta(d') mun(e)di :(c.) (;) mi(f')se(d)ré(e')re(f) no(g.)bis.(f.) (::) \r\nA(ixi)gnus(hg) De(h)i,(f.) (,) * qui(e) tol(f')lis(g) pec(g')cá(f)ta(d') mun(e)di :(c.) (;) mi(f')se(d)ré(e')re(f) no(g.)bis.(f.) (::) \r\nA(ixi)gnus(hg) De(h)i,(f.) (,) * qui(e) tol(f')lis(g) pec(g')cá(f)ta(d') mun(e)di :(c.) (;) do(f')na(d) no(e')bis(f) pa(g.)cem.(f.) (::)",
@@ -1200,7 +1320,8 @@ export const KYRIALE = [
1200
1320
  {
1201
1321
  id: "gregobase:541",
1202
1322
  office: "ke",
1203
- mass: 94,
1323
+ section: "requiem",
1324
+ mass: null,
1204
1325
  mode: "6",
1205
1326
  incipit: "Kyrie eleison (in Miss. def.)",
1206
1327
  gabc: "(c4) KY(ixfg!hi)ri(h)e(hg..) <clear>*(,) e(hvGF'Ef)lé(g)i(f)son.(f.) <i>iij.</i>(::)\r\nChri(ixfg!hi)ste(hg..) (,) e(hvGF'Ef)lé(g)i(f)son.(f.) <i>iij.</i>(::)\r\nKý(ixfg!hi)ri(h)e(hg..) (,) e(hvGF'Ef)lé(g)i(f)son.(f.) <i>ij.</i>(::)\r\nKý(j)ri(f)e(ixf./ji/jkJ'IHG.) <clear>*(,) e(hvGF'Ef)lé(g)i(f)son.(f.) (::)",
@@ -21,16 +21,20 @@ function resolveMasses(feast) {
21
21
  return resolved;
22
22
  return [feast.marian ? AD_LIB.bvm : AD_LIB.standard];
23
23
  }
24
- // The numbered kyriale runs 1–18. The book's appendix — ad libitum settings and
25
- // the like — carries synthetic numbers above that range, which no feast's
26
- // `masses` list ever names; those settings are therefore reachable only as a
27
- // last-resort fallback here, or by direct `ordinarium({ mass })` query.
28
- const NUMBERED_MASS_MAX = 18;
24
+ // Where the Kyriale prints an entry. Only the "mass" section carries a mass
25
+ // number; the others are addressed by section. The appendix used to carry its
26
+ // Graduale page as a "mass" (Clemens Rector was mass 75, the Requiem 94, 101
27
+ // and 102), and the two ad libitum Kyries whose incipits carry a numeral
28
+ // collided with Masses VI and X.
29
+ const KYRIALE_SECTIONS = new Set([
30
+ "mass", "credo", "sprinkling", "ad-libitum", "requiem",
31
+ ]);
32
+ const SPRINKLING_OFFICES = new Set(["as", "va"]);
33
+ // The Cantus ad libitum, which no feast's `masses` list ever names: reachable
34
+ // on the appendix's solemnity turn, as a last-resort fallback here, or by a
35
+ // direct `ordinarium({ section: "ad-libitum" })` query.
29
36
  function isAdLibitum(entry) {
30
- // Most appendix settings sit above the numbered range, but two ad libitum
31
- // Kyries are numbered 6 and 10 in the source data, colliding with the
32
- // numbered masses — for those the incipit is the only discriminator.
33
- return (entry.mass ?? 0) > NUMBERED_MASS_MAX || /\(ad lib\./i.test(entry.incipit);
37
+ return entry.section === "ad-libitum";
34
38
  }
35
39
  /** Prefer a proper numbered setting over an appendix one at equal standing. */
36
40
  function adLibLast(a, b) {
@@ -38,12 +42,13 @@ function adLibLast(a, b) {
38
42
  }
39
43
  // The Missa pro defunctis settings belong to the Requiem, not to the temporal or
40
44
  // sanctoral day. They stay out of every calendar-driven pick and remain
41
- // reachable only by direct `ordinarium({ mass })` query. Note the Requiem's own
42
- // dismissal carries the bare incipit "Requiescant" — no "(in Miss. def.)"
43
- // qualifier — so it must be named here explicitly, or it leaks through the
44
- // last-resort appendix onto every feria whose mass prints no dismissal.
45
+ // reachable only by direct `ordinarium({ section: "requiem" })` query. The
46
+ // Requiem's own dismissal carries the bare incipit "Requiescant", which is why
47
+ // the section is data and not an incipit test: left to the incipit it leaked
48
+ // through the last-resort appendix onto every feria whose mass prints no
49
+ // dismissal.
45
50
  function isRequiem(entry) {
46
- return /in\s+Miss\.\s*def|defunct|requiescant/i.test(entry.incipit);
51
+ return entry.section === "requiem";
47
52
  }
48
53
  /**
49
54
  * Deterministic rotation of a preference list by year.
@@ -104,8 +109,14 @@ function appendixLeadsThisYear(rubric, poolSize, year) {
104
109
  const n = poolSize + 1;
105
110
  return ((year % n) + n) % n === poolSize;
106
111
  }
112
+ // The appendix in the book's own order. Its settings carry no mass number, so
113
+ // the Graduale's page orders them: Kyrie I to XI, then the Glorias, and so on.
114
+ function grPage(entry) {
115
+ const page = /\d+/.exec(entry.pages?.gr?.[0]?.page ?? "")?.[0];
116
+ return page == null ? Number.POSITIVE_INFINITY : Number(page);
117
+ }
107
118
  function appendixFor(office, pool) {
108
- return pool.filter((e) => e.office === office && isAdLibitum(e) && !isRequiem(e)).sort((a, b) => (a.mass ?? 0) - (b.mass ?? 0) || (a.id < b.id ? -1 : 1));
119
+ return pool.filter((e) => e.office === office && isAdLibitum(e) && !isRequiem(e)).sort((a, b) => grPage(a) - grPage(b) || (a.id < b.id ? -1 : 1));
109
120
  }
110
121
  /**
111
122
  * Candidate settings for one ordinary slot, most preferred first.
@@ -183,7 +194,7 @@ function entriesForOffice(office, massNumbers, year, appendixLeads, wholeMass =
183
194
  // is the standing answer — its ad libitum variants must NOT rotate against it
184
195
  // as equals, or the appendix would be sung more often than the rite itself.
185
196
  // They arrive on the appendix turn like every other appendix setting.
186
- const unnumbered = pool.filter((e) => e.office === office && e.mass == null && !isRequiem(e));
197
+ const unnumbered = pool.filter((e) => e.office === office && SPRINKLING_OFFICES.has(office) && !isRequiem(e));
187
198
  const plain = unnumbered.filter((e) => !isAdLibitum(e));
188
199
  if (plain.length)
189
200
  return rotate(plain, year);
@@ -310,6 +321,7 @@ export function entryToOrdinaryChant(entry) {
310
321
  ordinary,
311
322
  ordinarium: ORDINARIA[ordinary] ?? entry.incipit,
312
323
  mass: entry.mass ?? 0,
324
+ section: entry.section,
313
325
  };
314
326
  }
315
327
  // Maundy Thursday (In Cena Domini) is a Triduum exception: it retains a full
@@ -454,7 +466,7 @@ function assertFeasts(feasts, method) {
454
466
  throw new Error(`${method}: feast must be a Feast (from tonus.festum) — got ${typeof f}`);
455
467
  }
456
468
  }
457
- const ORDINARIUM_QUERY_KEYS = new Set([...CANTUS_QUERY_KEYS, "feast", "ordinary", "mass"]);
469
+ const ORDINARIUM_QUERY_KEYS = new Set([...CANTUS_QUERY_KEYS, "feast", "ordinary", "mass", "section"]);
458
470
  /**
459
471
  * Mass ordinary retrieval (`tonus.ordinarium`) from the Kyriale. A feast
460
472
  * drives mass selection; `mass` pins a kyriale number directly.
@@ -472,6 +484,10 @@ export function getOrdinary(query) {
472
484
  if (query.ordinary) {
473
485
  assertOrdinaryCodes(Array.isArray(query.ordinary) ? query.ordinary : [query.ordinary], "ordinarium");
474
486
  }
487
+ if (query.section != null && !KYRIALE_SECTIONS.has(query.section)) {
488
+ throw new Error(`ordinarium: unknown section "${query.section}" ` +
489
+ `(expected ${[...KYRIALE_SECTIONS].join(", ")}).`);
490
+ }
475
491
  const feasts = toArray(query.feast);
476
492
  assertFeasts(feasts, "ordinarium");
477
493
  // `mode` accepts a scalar or an array, with cantus's semantics: match any.
@@ -493,7 +509,7 @@ export function getOrdinary(query) {
493
509
  return ordinaryForFeast(f, query.mass, filterModes, adm);
494
510
  });
495
511
  }
496
- else if (query.mass != null || query.ordinary) {
512
+ else if (query.mass != null || query.ordinary || query.section) {
497
513
  // Direct kyriale query without feast context — same admissibility rule as
498
514
  // cantus, so the two doors cannot disagree.
499
515
  let entries = KYRIALE.slice();
@@ -503,6 +519,8 @@ export function getOrdinary(query) {
503
519
  }
504
520
  if (query.mass != null)
505
521
  entries = entries.filter((e) => e.mass === query.mass);
522
+ if (query.section)
523
+ entries = entries.filter((e) => e.section === query.section);
506
524
  if (query.ordinary)
507
525
  entries = entries.filter((e) => e.office === query.ordinary);
508
526
  if (filterModes)
@@ -515,6 +533,9 @@ export function getOrdinary(query) {
515
533
  return [];
516
534
  }
517
535
  // Apply remaining CantusQuery filters
536
+ if (feasts && query.section) {
537
+ results = results.filter((c) => c.section === query.section);
538
+ }
518
539
  if (query.incipit) {
519
540
  const needle = query.incipit.toLowerCase();
520
541
  results = results.filter((c) => c.incipit.toLowerCase().includes(needle));
@@ -1,4 +1,5 @@
1
1
  import type { Season, Grade, Feast } from "../cal/types.js";
2
+ import type { KyrialeSection } from "../../data/kyriale.js";
2
3
  export type { Season, Grade, Feast };
3
4
  export type OfficeCode = "an" | "al" | "ca" | "co" | "gr" | "hy" | "in" | "of" | "ps" | "re" | "rb" | "se" | "tr" | "tp" | "or" | "ky" | "va" | "im" | "pa" | "su";
4
5
  export type OrdinaryCode = "ke" | "gl" | "cr" | "sa" | "ag" | "be" | "it" | "as" | "va";
@@ -92,11 +93,14 @@ export interface Chant {
92
93
  ordinary?: OrdinaryCode;
93
94
  ordinarium?: string;
94
95
  mass?: number;
96
+ section?: KyrialeSection;
95
97
  }
96
98
  export interface OrdinaryChant extends Chant {
97
99
  ordinary: OrdinaryCode;
98
100
  ordinarium: string;
101
+ /** One of Masses I–XVIII; 0 outside the numbered Masses (see `section`). */
99
102
  mass: number;
103
+ section: KyrialeSection;
100
104
  }
101
105
  export interface GenusCount {
102
106
  office: OfficeCode;
@@ -219,7 +223,10 @@ export interface PropriumQuery extends CantusQuery {
219
223
  export interface OrdinariumQuery extends CantusQuery {
220
224
  feast?: Feast | Feast[];
221
225
  ordinary?: OrdinaryCode;
226
+ /** One of Masses I–XVIII. */
222
227
  mass?: number;
228
+ /** A section of the Kyriale: "mass", "credo", "sprinkling", "ad-libitum", "requiem". */
229
+ section?: KyrialeSection;
223
230
  }
224
231
  export interface OfficiumQuery extends CantusQuery {
225
232
  feast?: Feast | Feast[];
package/docs/api/chant.md CHANGED
@@ -405,8 +405,12 @@ interface PropriumQuery extends CantusQuery {
405
405
  `ordinarium(query?)` retrieves the fixed chants of the Mass from the
406
406
  Kyriale. A feast drives mass selection through its `masses` list, the
407
407
  masses the day's Kyriale RUBRIC appoints, derived as described in
408
- [calendar.md](calendar.md#the-days-feasts--festum); `mass` pins a kyriale
409
- number directly. Where the rubric names several masses, the year rotates
408
+ [calendar.md](calendar.md#the-days-feasts--festum); `mass` pins one of the
409
+ eighteen numbered Masses directly, and `section` asks for a part of the book:
410
+ `mass` (Masses I–XVIII), `credo` (Credo I–VI), `sprinkling` (Asperges me,
411
+ Vidi aquam), `ad-libitum` (the Cantus ad libitum) or `requiem` (the Missa pro
412
+ defunctis). Only the `mass` section carries a mass number; every other entry
413
+ reads `mass: 0`. Where the rubric names several masses, the year rotates
410
414
  through them (same feast, same year → same answer, every time), and sibling
411
415
  printings under one number (Mass I prints two dismissals; Mass XVII prints
412
416
  Kyrie A/B/C) rotate with it. Slots resolve independently, which the book
@@ -420,7 +424,7 @@ const [easter] = tonus.festum({ date: new Date("2026-04-05") });
420
424
  tonus.ordinarium({ feast: easter });
421
425
  // ky Kyrie I (mass 1) — Lux et origo, Paschal time, every year
422
426
  // gl Gloria I (mass 1)
423
- // cr Credo III (mass 3) — the credo rotates on its own cycle
427
+ // cr Credo III (mass 0) — the credo rotates on its own cycle
424
428
  // sa Sanctus I (mass 1)
425
429
  // ag Agnus Dei I (mass 1)
426
430
  // it Ite Ia (mass 1)
@@ -437,7 +441,7 @@ sings Mass XVI whole with the Mass II Benedicamus. The ad libitum appendix
437
441
  is a **solemnity boost**, reachable only under the festal rubrics (it takes
438
442
  its turn in the rotation once every _n + 1_ years); it never reaches a
439
443
  penitential day or a feria, and the Requiem settings stay out of every
440
- calendar-driven pick (reachable by `ordinarium({ mass: 102 })` only). The
444
+ calendar-driven pick (reachable by `ordinarium({ section: "requiem" })` only). The
441
445
  Triduum returns no ordinary at all: Good Friday has no Mass, and the
442
446
  Vigil's ordinary belongs to Easter. A pinned `mass` overrides the Triduum
443
447
  rule and the rotation both.
@@ -452,6 +456,7 @@ me** (`as`) otherwise.
452
456
  ```js
453
457
  tonus.ordinarium({ ordinary: "ke" }); // every Kyrie
454
458
  tonus.ordinarium({ mass: 9, ordinary: "gl" }); // Gloria of Cum jubilo
459
+ tonus.ordinarium({ section: "ad-libitum", ordinary: "ke" }); // the eleven ad libitum Kyries
455
460
  ```
456
461
 
457
462
  | `ordinary` | `ordinarium` |
@@ -470,13 +475,15 @@ tonus.ordinarium({ mass: 9, ordinary: "gl" }); // Gloria of Cum jubilo
470
475
  interface OrdinaryChant extends Chant {
471
476
  ordinary: OrdinaryCode; // movement code
472
477
  ordinarium: string; // Latin movement name, "Kyrie eleison" …
473
- mass: number;
478
+ mass: number; // 1–18, or 0 outside the numbered Masses
479
+ section: "mass" | "credo" | "sprinkling" | "ad-libitum" | "requiem";
474
480
  }
475
481
 
476
482
  interface OrdinariumQuery extends CantusQuery {
477
483
  feast?: Feast | Feast[];
478
484
  ordinary?: OrdinaryCode;
479
- mass?: number;
485
+ mass?: number; // 1–18
486
+ section?: "mass" | "credo" | "sprinkling" | "ad-libitum" | "requiem";
480
487
  }
481
488
  ```
482
489
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tonus",
3
- "version": "0.11.1",
3
+ "version": "0.12.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>",