%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% %% Copyright of edition © 2020 by Andreas Stenberg using the CPDL-license %% %% %% %% This edition can be fully distributed, duplicated, performed, and recorded %% %% Any subsequent use of the source files should be under the same thermes %% %% %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \version "2.20.0" %% The edition uses the following templates %% http://lsr.di.unimi.it/LSR/Item?id=368 %% see also http://www.lilypond.org/doc/v2.18/Documentation/snippets/paper-and-layout %% see also http://nicolas.sceaux.free.fr/ %%% book-titling.ily -- a titling stylesheet for use in books %%% %%% Author: Nicolas Sceaux %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Utility markups %% vertical space skip #(define-markup-command (vspace layout props amount) (number?) "This produces a invisible object taking vertical space." (let ((amount (* amount 3.0))) (if (> amount 0) (ly:make-stencil "" (cons -1 1) (cons 0 amount)) (ly:make-stencil "" (cons -1 1) (cons amount amount))))) #(define-markup-command (when-property layout props symbol markp) (symbol? markup?) (if (chain-assoc-get symbol props) (interpret-markup layout props markp) (ly:make-stencil '() '(1 . -1) '(1 . -1)))) #(define-markup-command (line-width-ratio layout props width-ratio arg) (number? markup?) (interpret-markup layout props (markup #:override (cons 'line-width (* width-ratio (chain-assoc-get 'line-width props))) arg))) %%% Guile does not deal with accented letters #(use-modules (ice-9 regex)) %%;; actually defined below, in a closure #(define-public string-upper-case #f) #(define accented-char-upper-case? #f) #(define accented-char-lower-case? #f) %%;; an accented character is seen as two characters by guile #(let ((lower-case-accented-string "éèêëáàâäíìîïóòôöúùûüçœæ") (upper-case-accented-string "ÉÈÊËÁÀÂÄÍÌÎÏÓÒÔÖÚÙÛÜÇŒÆ")) (define (group-by-2 chars result) (if (or (null? chars) (null? (cdr chars))) (reverse! result) (group-by-2 (cddr chars) (cons (string (car chars) (cadr chars)) result)))) (let ((lower-case-accented-chars (group-by-2 (string->list lower-case-accented-string) (list))) (upper-case-accented-chars (group-by-2 (string->list upper-case-accented-string) (list)))) (set! string-upper-case (lambda (str) (define (replace-chars str froms tos) (if (null? froms) str (replace-chars (regexp-substitute/global #f (car froms) str 'pre (car tos) 'post) (cdr froms) (cdr tos)))) (string-upcase (replace-chars str lower-case-accented-chars upper-case-accented-chars)))) (set! accented-char-upper-case? (lambda (char1 char2) (member (string char1 char2) upper-case-accented-chars string=?))) (set! accented-char-lower-case? (lambda (char1 char2) (member (string char1 char2) lower-case-accented-chars string=?))))) #(define-markup-command (smallCaps layout props text) (markup?) "Turn @code{text}, which should be a string, to small caps. @example \\markup \\small-caps \"Text between double quotes\" @end example" (define (string-list->markup strings lower) (let ((final-string (string-upper-case (apply string-append (reverse strings))))) (if lower (markup #:fontsize -2 final-string) final-string))) (define (make-small-caps rest-chars currents current-is-lower prev-result) (if (null? rest-chars) (make-concat-markup (reverse! (cons (string-list->markup currents current-is-lower) prev-result))) (let* ((ch1 (car rest-chars)) (ch2 (and (not (null? (cdr rest-chars))) (cadr rest-chars))) (this-char-string (string ch1)) (is-lower (char-lower-case? ch1)) (next-rest-chars (cdr rest-chars))) (cond ((and ch2 (accented-char-lower-case? ch1 ch2)) (set! this-char-string (string ch1 ch2)) (set! is-lower #t) (set! next-rest-chars (cddr rest-chars))) ((and ch2 (accented-char-upper-case? ch1 ch2)) (set! this-char-string (string ch1 ch2)) (set! is-lower #f) (set! next-rest-chars (cddr rest-chars)))) (if (or (and current-is-lower is-lower) (and (not current-is-lower) (not is-lower))) (make-small-caps next-rest-chars (cons this-char-string currents) is-lower prev-result) (make-small-caps next-rest-chars (list this-char-string) is-lower (if (null? currents) prev-result (cons (string-list->markup currents current-is-lower) prev-result))))))) (interpret-markup layout props (if (string? text) (make-small-caps (string->list text) (list) #f (list)) text))) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Title page %%% \paper { bookTitleMarkup = \markup \when-property #'header:title \column { \combine \null \vspace #'1 \fill-line { \box \pad-markup #0.2 \box \pad-markup #0.5 \box %\pad-markup #-1 \column { \vspace #'4 \fill-line { \fontsize #8 \bold \italic \fromproperty #'header:composer } \combine \null \vspace #1 \fill-line { \fontsize #8 \italic \fromproperty #'header:poet } \combine \null \vspace #2 \fill-line { \fontsize #10 \fromproperty #'header:title } \vspace #'2 \fill-line { \box \box \pad-markup #2.5 \epsfile #X #44 #"Canto-frontpage-of-print-cutout.eps" } \fill-line { \postscript "-20 0 moveto 40 0 rlineto stroke" } \combine \null \vspace #3 \fill-line { \fontsize #5 \fromproperty #'header:date } \combine \null \vspace #1 \fill-line { \when-property #'header:arrangement \column { \combine \null \vspace #2 \fill-line { \fontsize #3 \fromproperty #'header:arrangement } } } \vspace #6 } } } scoreTitleMarkup = \markup \null } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Table of contents %%% #(define-markup-command (paper-prop layout props name default) (symbol? markup?) "Get the value of a \\paper property, or defaults to some value" (let ((val (ly:output-def-lookup layout name))) (interpret-markup layout props (if (markup? val) val default)))) \paper { tocTitleMarkup = \markup \column { \combine \null \vspace #2 \fontsize #6 \fill-line { \paper-prop #'tocTitle "TABLE OF CONTENTS" } \combine \null \vspace #2 } tocPieceMarkup = \markup \fill-line { \line-width-ratio #0.7 \fill-line { \line { \fromproperty #'toc:text } \fromproperty #'toc:page } } tocSectionMarkup = \markup \italic \column { \fill-line { \line { \fromproperty #'toc:text "..." \fromproperty #'toc:page } } } tocChapterMarkup = \markup \large \italic \column { \combine \null \vspace #1 \fontsize #2 \fill-line { \line { \fromproperty #'toc:text %{ " ..." \fromproperty #'toc:page %} }} \combine \null \vspace #1 } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Markup commands for page headers %%% #(define-public add-odd-page-header-text #f) #(define-public add-even-page-header-text #f) #(define header-markup-aux #f) #(let ((odd-label-header-table (list)) (odd-page-header-table (list)) (even-label-header-table (list)) (even-page-header-table (list))) (set! header-markup-aux (lambda (layout props odd) (define (page-text page-number table) (if (null? table) "" (let* ((elment (car table)) (p (car elment)) (text (cadr elment)) (display-1st (caddr elment))) (cond ((and (= page-number p) (not display-1st)) #f) ((>= page-number p) text) (else (page-text page-number (cdr table))))))) (ly:make-stencil `(delay-stencil-evaluation ,(delay (ly:stencil-expr (begin (if (or (and odd (null? odd-page-header-table)) (and (not odd) (null? even-page-header-table))) (let ((page-header-table (list))) (for-each (lambda (label-header) (let* ((label (car label-header)) (text-disp (cdr label-header)) (table (ly:output-def-lookup layout 'label-page-table)) (label-page (and (list? table) (assoc label table))) (page-number (and label-page (cdr label-page))) (prev-value (and page-number (assoc page-number page-header-table)))) (if (not prev-value) (set! page-header-table (cons (cons page-number text-disp) page-header-table)) (set! page-header-table (assoc-set! page-header-table page-number (list (car text-disp) (caddr prev-value))))))) (reverse (if odd odd-label-header-table even-label-header-table))) (if odd (set! odd-page-header-table page-header-table) (set! even-page-header-table page-header-table)))) (interpret-markup layout props (let* ((page-number (chain-assoc-get 'page:page-number props -1)) (text (page-text page-number (if odd odd-page-header-table even-page-header-table))) (text-markup (markup #:italic (or text ""))) (page-number-markup (number->string page-number))) (cond ((or (= 1 page-number) (not text)) (markup #:null)) (odd (markup #:fill-line (#:null text-markup page-number-markup))) (else (markup #:fill-line (page-number-markup text-markup #:null)))))))))) (cons 0 0) (ly:stencil-extent (interpret-markup layout props "XXX") Y)))) (set! add-odd-page-header-text (lambda (parser text display-1st) (let ((label (gensym "header"))) (set! odd-label-header-table (cons (list label text display-1st) odd-label-header-table)) (collect-music-for-book (make-music 'Music 'page-marker #t 'page-label label))))) (set! add-even-page-header-text (lambda (parser text display-1st) (let ((label (gensym "header"))) (set! even-label-header-table (cons (list label text display-1st) even-label-header-table)) (collect-music-for-book (make-music 'Music 'page-marker #t 'page-label label)))))) #(define-markup-command (odd-header layout props) () (header-markup-aux layout props #t)) #(define-markup-command (even-header layout props) () (header-markup-aux layout props #f)) \paper { evenHeaderMarkup = \markup \even-header oddHeaderMarkup = \markup \odd-header } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Utilities for adding (no-)page breaks, toplevel markups %%% #(define (add-page-break parser) (collect-music-for-book (make-music 'Music 'page-marker #t 'line-break-permission 'force 'page-break-permission 'force))) #(define (add-no-page-break parser) (collect-music-for-book (make-music 'Music 'page-marker #t 'page-break-permission 'forbid))) #(define (add-toplevel-markup parser text) (collect-scores-for-book (list text))) #(define (add-toc-item parser markup-symbol text) (collect-music-for-book (add-toc-item! markup-symbol text))) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Commands %%% #(use-modules (srfi srfi-39)) #(define *book-title* (make-parameter "")) bookTitle = #(define-music-function (title) (string?) (*book-title* title) (make-music 'Music 'void #t)) chapter = #(define-music-function (title) (string?) (add-page-break (*parser*)) (add-toc-item (*parser*) 'tocChapterMarkup title) (add-even-page-header-text (*parser*) (string-upper-case (*book-title*)) #f) (add-odd-page-header-text (*parser*) (string-upper-case title) #f) (add-toplevel-markup (*parser*) (markup #:chapter-title (string-upper-case title))) (add-no-page-break (*parser*)) (make-music 'Music 'void #t)) section = #(define-music-function (title) (string?) (add-toc-item (*parser*) 'tocSectionMarkup title) (add-toplevel-markup (*parser*) (markup #:section-title (string-upper-case title))) (add-no-page-break (*parser*)) (make-music 'Music 'void #t)) piece = #(define-music-function (title) (markup?) (add-toc-item (*parser*) 'tocPieceMarkup title) (add-no-page-break (*parser*)) (if (*use-rehearsal-numbers*) (add-toplevel-markup (*parser*) (markup #:rehearsal-number (rehearsal-number)))) (add-no-page-break (*parser*)) (make-music 'Music 'void #t)) titledPiece = #(define-music-function (title) (markup?) (add-toc-item (*parser*) 'tocPieceMarkup title) (if (*use-rehearsal-numbers*) (add-toplevel-markup (*parser*) (markup #:piece-title-with-number (rehearsal-number) (string-upper-case title))) (add-toplevel-markup (*parser*) (markup #:piece-title (string-upper-case title)))) (add-no-page-break (*parser*)) (make-music 'Music 'void #t)) #(define-markup-command (chapter-title layout props title) (markup?) (interpret-markup layout props (markup #:column (#:vspace 3 #:pad-markup 3 #:fill-line (#:fontsize 5 title))))) #(define-markup-command (section-title layout props title) (markup?) (interpret-markup layout props (markup #:column (#:vspace 1 #:fill-line (#:fontsize 3 title) #:vspace 1)))) #(define-markup-command (piece-title layout props title) (markup?) (interpret-markup layout props (markup #:fill-line (#:override '(line-width . 80) title)))) #(define-markup-command (rehearsal-number layout props number) (markup?) (interpret-markup layout props (markup #:huge #:bold number))) #(define-markup-command (piece-title-with-number layout props number title) (markup? markup?) (interpret-markup layout props (markup #:rehearsal-number number #:hspace 1 #:huge title))) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Kyrie I \header { title = \markup \center-column { "Missa pro defunctis:" \fontsize #-1.5 "4. Offertorium" } composer = "Gio. Matteo Asola Veronese:" poet = \markup \center-column { "Messa à Quatro voci pari ..." "Secondo libro"} date = \markup \center-column { \fontsize #-1 \italic "Impresso Giacomo Vincenzi, & Ricciardo Amadino compagni" \fontsize #-1 \italic "In Veneto 1586" } arrangement = "Edited by Andreas Stenberg" copyright = ##f } \paper { oddFooterMarkup = \markup \fill-line { "Copyright for the edition © 2020 by Andreas Stenberg under the CPDL-license" } evenFooterMarkup = \markup \fill-line { "Copyright for the edition © 2020 by Andreas Stenberg under the CPDL-license" } %% Translate the TOC title tocTitle = "TABLE OF CONTENTS" page-breaking = #ly:minimal-breaking } %% \include "book-titling.ily" \bookTitle "G.M. Asola: Missa pro defunctis" %} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% %% Copyright of edition © 2020 by Andreas Stenberg using the CPDL-license %% %% %% %% This edition can be fully distributed, duplicated, performed, and recorded %% %% Any subsequent use of the source files should be under the same thermes %% %% %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \include "deutsch.ly" ficta = \once \set suggestAccidentals =##t %% Comment in or out as needed \chapter "4. Offertorium" \section "Domine Iesu Christe - Rex gloriæ " global = { \override Staff.TimeSignature.style = #'mensural \key f \major } %%PDF p.25, 30. sopMusic = \relative c' { \clef "G_8" \set Score.tempoHideNote = ##t \tempo 2 = 86 \time 2/2 \set Timing.measureLength = #(ly:make-moment 4/2) \override Staff.BarLine.transparent = ##t R\breve*2 r2 b1 a2 b2( g1 \ficta fis2) g2 b1( a4 g4 a2 b2) a2 a2 g1 d'1~ d2 d2 c1 %% end of first line in orig. \[a1( d1~ d2)\] \ficta cis2 d1 f2. f4 e2 d2 d2 c2 d2 d2~ d2 c2 c1 h1 r2 d2~ d2 c1 c2 b2 a2.( g4 g2~ g2 \ficta fis2) g1 r2 a2 %% end of second bar. b2 b2 d2 c2 b4( a4 d2~ d2 c2) d1 r2 d1 b2 c1 d1~ d\breve c1 r1 r2 d1 c2 b2 g2 a1 g1 a1~ a1 b1 a1 r2 d2 %% end of third line. d1 b2 c2 d1 d1 b1 a2 d2~ d2 d2 b2.( c4 d1) r2 b2~ b2 a2 b2 g2 a2 d1 \ficta c!2 d2.( e4 f2 e2~ e4 d4 %% end of fourth line (last on first page.) d1) \ficta cis2 d\breve~ d\breve r2 d2 b2 g2 d'2 d2 es1 d2 d2 es1~ es2 es2 d1 r2 c1 c2 d2( f2. e4 d2~ d2) \ficta cis2 d1 %% end of fifth line (first on second page). R\breve r1 r2 d2~ d2 d2 c2 a2 \[b1( a1)\] g2 d'2 d2.( c4 b4 a4 b2) a2 d2~( d2 \ficta cis2) d2 d2 es2 c2 es!1( %% end of sixth line. d\breve) d\breve \revert Staff.BarLine.transparent \bar "||" } sopMusicB = \relative c' { c\breve \override Staff.BarLine.transparent =##t d\breve d1 b2 c2 d1 c1 d2 \[f1( \tuplet 3/2 { e1\] d2 } d1 \ficta cis2) d1 r1 r2 d2 c2 a2 b1 a2.( b4 %% end of seventh line. c2 d1 \ficta cis2) d1 r1 r2 d2 b2 g2 a2 f'2 e2 c2 d1 c1 b2 d2 c2 a2 b2.( c4 d1) \[b1( es1)\] \cadenzaOn d\longa \revert Staff.BarLine.transparent \bar "||" \cadenzaOff } sopWords = \lyricmode { %%Domine Iesu Christe, Rex glo -- ri -- æ, Rex glo -- ri -- æ, li -- be -- ra a -- ni -- mas om -- ni -- um fi -- de -- li -- um de -- func -- to -- rum de pœ -- nis in -- fer -- ni et de pro -- fun -- do la -- cu: li -- be -- ra e -- as de o -- re le -- o -- nis, de o -- re, de o -- re le -- o -- nis, ne ab -- sor -- be -- at, ne ab -- sor -- be -- at e -- as tar -- ta -- rus, ne ca -- dant in ob -- scu -- rum: sed si -- gni -- fer sanc -- tus Mi -- cha -- el re -- præ -- sen -- tet e -- as in lu -- cem sanc -- tam, in lu -- cem sanc -- tam: } sopWordsB = \lyricmode { Quam o -- lim Ab -- ra -- hæ pro -- mi -- si -- sti, et se -- mi -- ni e -- ius, et se -- mi -- ni e -- ius, et se -- mi -- ni, et se -- mi -- ni e -- ius. } %% PDF p.58. altoMusic = \relative c' { \clef "G_8" \override Staff.BarLine.transparent = ##t b1.( a2) b2( g1) \ficta fis2 g1 r1 r1 \[a1( \tuplet 3/2 { b1\] a2 } g4 f4 g2) \ficta fis2 g2 d1 %% end of first line in orig. r2 g1 g2 f1 \[e1( \tuplet 3/2 { f1\] e2 } d2) d2 e2 a1 a2 d1 c2 b2~ b2 g2 a1 b2 g2 a1 d,1 r1 R\breve r2 a'2 c1~ c2 a2 b1 a1 %% end of second line. d,2 f2 f2 e2 f1 g1 a1 g1 b1 g2 a1 b2~( b2 a4 g4 a2 b2 g2. a4 b2 a2~ a4 g4 g1 \ficta fis2) g1 d1 es1 d1 r1 %% end of third line. r2 d'2~ d2 c2 b2 g2 a1 g1 r2 b1 a2 b2 g2 f2 g2~ g2 f2 g2 es2 d1 r1 r2 d'1 c2 d2 a2 b2 g2 a1 f2 %% end of fourth line. (last on first page). a2~( a2 g2) a1 r2 a2 f2 d2 a'2 a2 b1 a1 r2 g2~ g2 f2 g1 g2 g1 c2~ c2 c2 h1 c2.( b8 a8 g2) a2 f1. g2 %% end of fifth line. (firsrt on second page). a\breve d2. d4 c2 a2 \[b1( a1)\] g1 r1 r2 d'2 d2.( c4 b4 a4 b2) a1 \[g1( a1)\] g2 g2 a2.( b4 c1.) b2 a2( b2 a1) h\breve %% end of sith line. \revert Staff.BarLine.transparent } altoMusicB = \relative c' { g\breve \override Staff.BarLine.transparent =##t b1. b2 a2 b1( a4 g4) f1 r1 f1 f2 a2~( a2 g2) a1~ a1 r2 a2 f2 d2 e2. f4( g2. f4 d4 e4 f4 g4) a2 f2 %% end of seventh line. g2. g4 a2 d1( c2) d1 r2 d2 c2 a2 c1 b2( g1 \ficta fis2) g2 d2 f1~ f2 g2 a1 \[g1( c1~ \cadenzaOn c2\] h4 a4) h\longa*3/4 \revert Staff.BarLine.transparent } altoWords = \lyricmode { Rex glo -- ri -- æ, Rex glo -- ri -- æ, li -- be -- ra a -- ni -- mas om -- ni -- um fi -- de -- li -- um de -- func -- to -- rum de pœ -- nis in -- fer -- ni et de pro -- fun -- do la -- cu: li -- be -- ra e -- as de o -- re, de o -- re le -- o -- nis, ne ab -- sor -- be -- at e -- as tar -- ta -- rus, ne ab -- sor -- be -- at e -- as tar -- ta -- rus, ne ca -- dant in ob -- scu -- rum, in ob -- scu -- rum: sed si -- gni -- fer sanc -- tus Mi -- cha -- el re -- præ -- sen -- tet e -- as in lu -- cem sanc -- tam, in lu -- cem sanc -- tam: } altoWordsB = \lyricmode { Quam o -- lim Ab -- ra -- hæ pro -- mi -- si -- sti, et se -- mi -- ni e -- ius, et se -- mi -- ni e -- ius, et se -- mi -- ni e -- ius, et se -- mi -- ni e -- ius. } %% PDF p.93-94. tenorMusic = \relative c { \clef "G_8" \override Staff.BarLine.transparent = ##t R\breve r2 b'1 a2( b2 g1) \ficta fis2 g1 r1 \[d1( es1)\] d2( g1) \ficta fis2 %% end of first line in orig. g2 b1 b2 a2 b4( a4 g4 f4 g2 f4 d4 a'1) g2 a1 f2. f4 f2 d2 e2 f2 g2 g2 f2 a2~( a4 g4 g1 \ficta fis2) %% end of second line. g1 b1 a1 a2 g2 f2.( e8 d8 e2. d4 c1) d2 g2~ g2 f1 d2~ d2 g2 f2 a2~( a4 g4 g1 \ficta fis2) g1 g1 e2 f1 g2~( g2 %% end of third line f4 e4 f1) e2 g1( f4 e4 f2) g2 a1 d,2( g1 \ficta fis2) g2 g2 f1~ f2 e2 f2 g2( e2 f2) d2 g2~ g2 \ficta fis2 g1 %% ond of fourth line. (last on first page.) \ficta fis2( g2) d1 g1 r1 r1 r2 b2~ b2 a2 b2 g2 f1 g2( es2) d1 g2. g4 f1 d2 e2 f2 d2 e2. e4 d1 r2 a'2 %% end of fifth line. f2 d1 g2~ g2 \ficta fis2 g4( a4 b4 g4 a2. b4 c1) h1 c1 g1. g2 g2 e1 f2 d\breve e1 d1 f1 g2 %% end of sixth line. a2~( a4 g4 g1) \ficta fis2 b1 a2 f2 g2 g2 d1 g2 g1 f2 d2 g1( \ficta fis2) g1 r2 f2 g2 a2 %% end of sewenth line g2.( f8 e8 \ficta fis2 g1 \ficta fis!2) g\breve \revert Staff.BarLine.transparent } tenorMusicB = \relative c { e\breve \override Staff.BarLine.transparent =##t f1 g1 f1 \[g1( a1)\] a1~ a1 a1 \[d,1( e1)\] d4( e4 f4 d4 \[e1 d1)\] a'1 r1 r2 a2 f2 d2 e1 d2( a'2. g4 g2~ g2 f2) g2 d2 f1 g2 a2 d,1 a'2 a2 b1 a2 f2 d2( g1 \ficta fis2) g\breve~ \cadenzaOn g\longa \revert Staff.BarLine.transparent } tenorWords = \lyricmode { Rex glo -- ri -- æ, Rex glo -- ri -- æ, li -- be -- ra a -- ni -- mas om -- ni -- um fi -- de -- li -- um de -- func -- to -- rum de pœ -- nis in -- fer -- ni et de pro -- fun -- do la -- cu: li -- be -- ra e -- as, li -- be -- ra e -- as de o -- re le -- o -- nis, de o -- re le -- o -- nis, ne ab -- sor -- be -- at e -- as, ne ab -- sor -- be -- at e -- as tar -- ta -- rus, ne ca -- dant in ob -- scu -- rum: sed si -- gni -- fer sanc -- tus Mi -- cha -- el re -- præ -- sen -- tet e -- as in lu -- cem sanc -- tam, in lu -- cem sanc -- tam, in lu -- cem sanc -- tam: } tenorWordsB = \lyricmode { Quam o -- lim Ab -- ra -- hæ pro -- mi -- si -- sti, et se -- mi -- ni e -- ius, et se -- mi -- ni e -- ius, et se -- mi -- ni e -- ius. } bassMusic = \relative c { \override Staff.BarLine.transparent = ##t g'1. f2 es1 d1 g,1 d'2.( c4 b2 c2 a2) a2 g1 r1 R\breve r2 g2.( a4 b4 c4 d2) b2 c1 d2.( c4 b2) b2 a1 d1~ d2 b2 c2 d2 es2 es d1 b2 c2 a1 g1 g'1 %% endof second line. f1 f2 e2 \[d1( \tuplet 3/2 { c1\] b2 } a1) g1 d'1 b1~ b2 c2 d1 es1 d1 g,\breve R\breve d'1. b2 c1 d2.( c4 \[b1( a)\] g1 r1 r1 r2 d'2~ d2 c2 b2 g2 %% endof third line. a1 g2 g2 d'1 es2 es2 d2( g1 \ficta fis2) g1 r2 b2~ b2 a2 b2 g2 f1 g2 es2 d2. d4 g,2 g'2~ g2 \ficta fis2 g2 \ficta es2 d2 d1 %% end of fourth line. c2 b1 a1 d\breve r2 d2 b2 g2 d'2 d2 es1 d1 c1 \[g1( c1~ c2)\] c2 g1 c1. a2 b1. b2 a1 %% end of fifth line r2 d2~ d2 d2 e2 f2 g1 d1 R\breve r2 g2 g2 \ficta fis2 g1 d1 g,1 \[d'1( es1)\] d1 \[c\breve( d\breve)\] g,\breve \revert Staff.BarLine.transparent } bassMusicB = \relative c { c\breve \override Staff.BarLine.transparent =##t b1 g1 \[d'1( \tuplet 3/2 { es1)\] es2 } d1 f2.( e4 d4 c4 d1) a2 b1 a1 r2 d2 c2 a2 b1 a1 g1 r1 r1 r2 g'2 %% end of line f2 d2 es1 d1 g,1 r2 d'2 c2 a2 b1 a1 g1 r2 d'2 b2 g2 d'1 es2.( d4 c1) \cadenzaOn g\longa \revert Staff.BarLine.transparent } bassWords = \lyricmode { Rex glo -- ri -- æ, Rex glo -- ri -- æ, li -- be -- ra a -- ni -- mas om -- ni -- um fi -- de -- li -- um de -- func -- to -- rum de pœ -- nis in -- fer -- ni et de pro -- fun -- do la -- cu: li -- be -- ra e -- as de o -- re le -- o -- nis, de o -- re le -- o -- nis, ne ab -- sor -- be -- at e -- as Tar -- ta -- rus, ne ab -- sor -- be -- at e -- as tar -- ta -- rus, ne ca -- dant in ob -- scu -- rum: sed si -- gni -- fer sanc -- tus Mi -- cha -- el re -- præ -- sen -- tet e -- as in lu -- cem sanc -- tam, in lu -- cem sanc -- tam: } bassWordsB = \lyricmode { Quam o -- lim Ab -- ra -- hæ pro -- mi -- si -- sti, et se -- mi -- ni e -- ius, et se -- mi -- ni e -- ius, et se -- mi -- ni e -- ius, et se -- mi -- ni e -- ius. } incipitDiscantus = \markup { \score { { % \set Staff.instrumentName = #"Tenor " \override NoteHead.style = #'neomensural \override Rest.style = #'neomensural \override Staff.TimeSignature.style = #'mensural \cadenzaOn \clef "petrucci-c3" \key f \major \time 2/2 r\longa^\markup { \smallCaps"Canto"} r2 b1_"Rex" a2 } \layout { \context { \Voice \remove "Ligature_bracket_engraver" \consists "Mensural_ligature_engraver" } line-width = 4.5\cm } } } incipitAltus = \markup { \score { { % \set Staff.instrumentName = #"Tenor " \override NoteHead.style = #'neomensural \override Rest.style = #'neomensural \override Staff.TimeSignature.style = #'mensural \cadenzaOn \clef "petrucci-c4" \key f \major \time 2/2 b1.^\markup \smallCaps"Alto" _"Rex" a2 } \layout { \context { \Voice \remove "Ligature_bracket_engraver" \consists "Mensural_ligature_engraver" } line-width = 4.5\cm } } } incipitTenor = \markup { \score { { % \set Staff.instrumentName = #"Tenor " \override NoteHead.style = #'neomensural \override Rest.style = #'neomensural \override Staff.TimeSignature.style = #'mensural \cadenzaOn \clef "petrucci-c4" \key f \major \time 2/2 r\breve ^\markup \smallCaps"Tenore" r2 b1_"Rex" a2 } \layout { \context { \Voice \remove "Ligature_bracket_engraver" \consists "Mensural_ligature_engraver" } line-width = 5.0\cm } } } #(append! supported-clefs '(("mensural-f3" . ("clefs.mensural.f" 0 0)))) incipitBassus = \markup { \score { { % \set Staff.instrumentName = #"Tenor " \override NoteHead.style = #'neomensural \override Rest.style = #'neomensural \override Staff.TimeSignature.style = #'mensural \cadenzaOn \clef "petrucci-f" \key f \major \time 2/2 g1.^\markup \smallCaps"Basso" _"Rex" f2 } \layout { \context { \Voice \remove "Ligature_bracket_engraver" \consists "Mensural_ligature_engraver" } line-width = 4.5\cm } } } tenorInton = \relative c' { \override Staff.TimeSignature.transparent =##t \override Slur.transparent = ##t g\breve ^\markup \smallCaps"Tenore" \[f\breve( g\breve)\] g\breve g\breve \[f\breve( g\breve)\] g\breve( \[g\breve b\breve g\longa)\] \[g\longa( f\longa)\] \bar "|" } intonVords = \lyricmode { Do -- mi -- ne Ie -- su Chris -- te } transcription = \relative c { \set Score.timing = ##f \clef "G_8" \key f \major \override Staff.BarLine.transparent =##t \set Score.tempoHideNote = ##t \tempo 2 = 86 g'4 f4( g4) g4 g4 f4( g4 g4) g4( b4 g4) g4( f2) \revert Staff.BarLine.transparent \bar "||" } \markup { \column { \fill-line { \score { << \new Staff { % \set Staff.instrumentName = #"Tenor " \override NoteHead.style = #'blackpetrucci \override Rest.style = #'neomensural \override Staff.TimeSignature.style = #'mensural \cadenzaOn \clef "petrucci-c4" \key f \major \time 2/2 \tenorInton } \addlyrics { \intonVords } >> \layout { \context { \Voice \remove "Ligature_bracket_engraver" \consists "Mensural_ligature_engraver" } line-width = 5.0\cm } } } \fill-line { \score { \new Staff \with { instrumentName = \markup { \italic \center-column { "Transcrip -" "tion" } } } << \new Voice = "melody" \transcription \new Lyrics = "one" \lyricsto melody \intonVords >> \layout { \context { \Staff \remove "Time_signature_engraver" \hide Stem } \context { \Voice \override Stem.length = #0 } \context { \Score barAlways = ##t } } } } } } \score { << \new StaffGroup \with { \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 12)) } << \new Staff = treble << \set Staff.instrumentName = \incipitDiscantus \new Voice = "sopranos" { \set Staff.midiInstrument ="choir aahs" % \voiceOne << \global { \sopMusic \mark \markup { \musicglyph #"scripts.usignumcongruentiae" } \sopMusicB }>> } >> \new Lyrics = sopranos { s1 } \new Staff = "medius" << \set Staff.instrumentName = \incipitAltus \new Voice = "altos" { % \voiceTwo \set Staff.midiInstrument ="choir aahs" << \global { \altoMusic \altoMusicB }>> } >> \new Lyrics = "altos" { s1 } \new Staff = tenors << \set Staff.instrumentName = \incipitTenor \clef "treble" \new Voice = "tenors" { \set Staff.midiInstrument ="choir aahs" % \voiceOne << \global {\tenorMusic \tenorMusicB}>> } >> \new Lyrics = "tenors" { s1 } \new Staff ="basses" { \set Staff.instrumentName = \incipitBassus \new Voice = "basses" { \set Staff.midiInstrument ="choir aahs" \clef "bass" % \voiceTwo << \global {\bassMusic \bassMusicB}>> } } >> \new Lyrics = basses { s1 } \context Lyrics = sopranos \lyricsto sopranos { \sopWords \sopWordsB } \context Lyrics = altos \lyricsto altos { \altoWords \altoWordsB } \context Lyrics = tenors \lyricsto tenors { \tenorWords \tenorWordsB } \context Lyrics = basses \lyricsto basses { \bassWords \bassWordsB } >> \layout { \context { \Score % no bars in staves % \override BarLine.transparent = ##t } % the next three instructions keep the lyrics between the bar lines \context { \Lyrics \consists "Bar_engraver" \override BarLine.transparent = ##t } \context { \StaffGroup \consists "Separating_line_group_engraver" } \context { \Voice % no slurs \override Slur.transparent = ##t % Comment in the below "\remove" command to allow line % breaking also at those barlines where a note overlaps % into the next bar. The command is commented out in this % short example score, but especially for large scores, you % will typically yield better line breaking and thus improve % overall spacing if you comment in the following command. %\remove "Forbid_line_break_engraver" } indent = 4.5\cm } } %% Comment in or out as needed %\chapter "1. Kyrie" \section "Tu suscipe pro animabus illis" globalII= { \override Staff.TimeSignature.style = #'mensural \key f \major } %% PDF p.30. sopMusicII= \relative c' { \clef "G_8" \set Score.tempoHideNote = ##t \tempo 2 = 86 \time 2/2 \set Timing.measureLength = #(ly:make-moment 4/2) \override Staff.BarLine.transparent = ##t d\breve \[es1( d1~ d2)\] d2 d1~ d1 c1 f1. e2 d1. d2 cis1 d2 d2~ d2 d2 es1~ es2 es2 d1 d1 d1~ d2 c2 %% end of first line c1 a2.( b4 c2) c2 a1 c1~ c1 d1~ d2 d2 b1 c1 d1~ d2 d2 f1~ f\breve d1 e1 d1 b2 c2 d\breve d\breve \revert Staff.BarLine.transparent \bar "||" } sopWordsII = \lyricmode { %Ho -- stias et pre -- ces ti -- bi, Do -- mi -- ne, %lau -- dis of -- fe -- ri -- mus: tu su -- sci -- pe pro a -- ni -- ma -- bus il -- lis, qua -- rum ho -- di -- e me -- mo -- ri -- am fa -- ci -- mus: fac e -- as, Do -- mi -- ne, de mor -- te tran -- si -- re ad vi -- tam. } altoMusicII= \relative c' { \clef "G_8" \override Staff.BarLine.transparent = ##t b\breve c2.( b4 a4 g4 a2~ a2) a2 b1 a1. c2~ c2 c2 b1 a2 a1( g2) a1 a1 h1 c1~ c2 c2 b1 a1 b1 a2 a1 g2~( g4 f4 f1) e2 f1 g1~ g1 b1 a2 b2.( a4 g4 f4 g2) g2 a1 b1 c1~ c1 d2 %% end of second line b2~( b4 c4 d2) c1 f,1 g2.( a4 b1) c1 \cadenzaOn h\breve \revert Staff.BarLine.transparent } altoWordsII = \lyricmode { %Ho -- stias et pre -- ces ti -- bi, Do -- mi -- ne, %lau -- dis of -- fe -- ri -- mus: tu su -- sci -- pe pro a -- ni -- ma -- bus il -- lis, qua -- rum ho -- di -- e me -- mo -- ri -- am fa -- ci -- mus: fac e -- as, Do -- mi -- ne, de mor -- te tran -- si -- re ad vi -- tam. } %% PDF p.94. tenorMusicII= \relative c' { \clef "G_8" \override Staff.BarLine.transparent = ##t r1 g1~ g1 fis1~ fis2 fis2 g1 f1 a1~ a2 g2 f1~ f2 e2 d1 e1 fis1 g1 g1~ g2 g2 g1 f1 f2.( e4 f4 g4 a2) f2 e2 f1 %% end of first line in orig. g1 f1 e1~ e1 g1 f1 g1~ g2 g2 f1 g2 b1( a4 g4 a1) b2 f2~ f2 g1 a2~ a2 b1( a4 g4 \ficta fis2) g1( \ficta fis!2) g\breve \revert Staff.BarLine.transparent } tenorWordsII = \lyricmode { %Ho -- stias et pre -- ces ti -- bi, Do -- mi -- ne, %lau -- dis of -- fe -- ri -- mus: tu su -- sci -- pe pro a -- ni -- ma -- bus il -- lis, qua -- rum ho -- di -- e me -- mo -- ri -- am fa -- ci -- mus: fac e -- as, Do -- mi -- ne, de mor -- te tran -- si -- re ad vi -- tam. } %% PDF p.126 bassMusicII= \relative c { \override Staff.BarLine.transparent = ##t g'\breve \[c,1( d1~ d2)\] d2 g,1 d'1 f1~ f2 e2 d1~ d2 c2 b1 a1 d1 g,1 c1~ c2 c2 g1 d'1 b2.( c4 %% end of first line in orig. d4 e4 f1) c2 d1 c2. c4 f,1 c'1~ c1 g1 d'1 es1~ es2 \ficta es2 d1 g1 f1~ f1 b,1~ b2 b2 c1 d1 es1 d\breve g,\breve \revert Staff.BarLine.transparent } bassWordsII = \lyricmode { %Ho -- stias et pre -- ces ti -- bi, Do -- mi -- ne, %lau -- dis of -- fe -- ri -- mus: tu su -- sci -- pe pro a -- ni -- ma -- bus il -- lis, qua -- rum ho -- di -- e me -- mo -- ri -- am fa -- ci -- mus: fac e -- as, Do -- mi -- ne, de mor -- te tran -- si -- re ad vi -- tam. } incipitDiscantus = \markup { \score { { % \set Staff.instrumentName = #"Tenor " \override NoteHead.style = #'neomensural \override Rest.style = #'neomensural \override Staff.TimeSignature.style = #'mensural \cadenzaOn \clef "petrucci-c3" \key f \major \time 2/2 d'\breve^\markup { \smallCaps"Canto"} _"TV suscipe" \[es'1 d'1. \] } \layout { \context { \Voice \remove "Ligature_bracket_engraver" \consists "Mensural_ligature_engraver" } line-width = 4.5\cm } } } incipitAltus = \markup { \score { { % \set Staff.instrumentName = #"Tenor " \override NoteHead.style = #'neomensural \override Rest.style = #'neomensural \override Staff.TimeSignature.style = #'mensural \cadenzaOn \clef "petrucci-c4" \key c \major \time 2/2 b\breve^\markup \smallCaps"Alto"_"TV su" c'2. b4 } \layout { \context { \Voice \remove "Ligature_bracket_engraver" \consists "Mensural_ligature_engraver" } line-width = 4.5\cm } } } incipitTenor = \markup { \score { { % \set Staff.instrumentName = #"Tenor " \override NoteHead.style = #'neomensural \override Rest.style = #'neomensural \override Staff.TimeSignature.style = #'mensural \cadenzaOn \clef "petrucci-c4" \key c \major \time 2/2 r1^\markup \smallCaps"Tenore" _"Tu suscipe" g\breve fis1. } \layout { \context { \Voice \remove "Ligature_bracket_engraver" \consists "Mensural_ligature_engraver" } line-width = 5.0\cm } } } #(append! supported-clefs '(("mensural-f3" . ("clefs.mensural.f" 0 0)))) incipitBassus = \markup { \score { { % \set Staff.instrumentName = #"Tenor " \override NoteHead.style = #'neomensural \override Rest.style = #'neomensural \override Staff.TimeSignature.style = #'mensural \cadenzaOn \clef "mensural-f" \key c \major \time 2/2 g\breve^\markup \smallCaps"Basso"_"TV suscipe" \[c1 d1.\] d2 } \layout { \context { \Voice \remove "Ligature_bracket_engraver" \consists "Mensural_ligature_engraver" } line-width = 4.5\cm } } } %% Intonation tenorIntonII = \relative c { \override Staff.TimeSignature.transparent =##t \override Slur.transparent = ##t f\breve ^\markup \smallCaps"Tenore" \[g\breve( b\breve)\] \[b\longa( a\longa)\] f\breve \[g\breve( b\breve)\] \[b\longa( a\longa)\] f\breve \[g\breve( b\breve)\] b\breve \[g\breve( a\breve\] \[g\longa f\longa\] g\breve) \[g\longa( f\longa)\] \[a\longa( g\longa)\] \[a\breve( b\breve\] \[a\longa g\longa)\] \[g\breve( a\breve g\longa)\] f\breve g\breve g\longa \bar "|" } intonVordsII = \lyricmode { Ho -- sti -- as et pre -- ces ti -- bi, Do -- mi -- ne, lau -- dis of -- fe -- ri -- mus: } transcriptionII = \relative c { \set Score.timing = ##f \clef "G_8" \key f \major \override Staff.BarLine.transparent =##t \set Score.tempoHideNote = ##t \tempo 2 = 86 f4 g4( b4) b4( a4) f4 g4( b4) b4( a4) f4 g4( b4)%\break b4 g4( a4 g4 f4 g4) g4( f4) \break a4( g4) a4( b4 a4 g4) g4( b4 g4) f4 g4 g2 \revert Staff.BarLine.transparent \bar "||" } \markup { \column { \fill-line { \score { << \new Staff { % \set Staff.instrumentName = #"Tenor " \override NoteHead.style = #'blackpetrucci \override Rest.style = #'neomensural \override Staff.TimeSignature.style = #'mensural \cadenzaOn \clef "petrucci-c4" \key f \major \time 2/2 \tenorIntonII } \addlyrics { \intonVordsII } >> \layout { \context { \Voice \remove "Ligature_bracket_engraver" \consists "Mensural_ligature_engraver" } line-width = 5.0\cm } } } \vspace #0.5 % \fill-line { \score { \new Staff \with { instrumentName = \markup { \italic \center-column { "Transcrip -" "tion" } } } << \new Voice = "melody" \transcriptionII \new Lyrics = "one" \lyricsto melody \intonVordsII >> \layout { \context { \Staff \remove "Time_signature_engraver" \hide Stem } \context { \Voice \override Stem.length = #0 } \context { \Score indent = #20 line-width = #140 barAlways = ##t } } } % } \vspace #0.5 } } %% score for print \score { << \new StaffGroup \with { \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 12)) } << \new Staff = treble << \set Staff.instrumentName = \incipitDiscantus \new Voice = "sopranos" { \set Staff.midiInstrument ="choir aahs" % \voiceOne << \globalII\sopMusicII>> } >> \new Lyrics = sopranos { s1 } \new Staff = "medius" << \set Staff.instrumentName = \incipitAltus \new Voice = "altos" { % \voiceTwo \set Staff.midiInstrument ="choir aahs" << \globalII\altoMusicII>> } >> \new Lyrics = "altos" { s1 } \new Staff = tenors << \set Staff.instrumentName = \incipitTenor \clef "treble" \new Voice = "tenors" { \set Staff.midiInstrument ="choir aahs" % \voiceOne << \globalII\tenorMusicII>> } >> \new Lyrics = "tenors" { s1 } \new Staff ="basses" { \set Staff.instrumentName = \incipitBassus \new Voice = "basses" { \set Staff.midiInstrument ="choir aahs" \clef "bass" % \voiceTwo << \globalII\bassMusicII>> } } >> \new Lyrics = basses { s1 } \context Lyrics = sopranos \lyricsto sopranos \sopWordsII \context Lyrics = altos \lyricsto altos \altoWordsII \context Lyrics = tenors \lyricsto tenors \tenorWordsII \context Lyrics = basses \lyricsto basses \bassWordsII >> \layout { \context { \Score % no bars in staves % \override BarLine.transparent = ##t } % the next three instructions keep the lyrics between the bar lines \context { \Lyrics \consists "Bar_engraver" \override BarLine.transparent = ##t } \context { \StaffGroup \consists "Separating_line_group_engraver" } \context { \Voice % no slurs \override Slur.transparent = ##t % Comment in the below "\remove" command to allow line % breaking also at those barlines where a note overlaps % into the next bar. The command is commented out in this % short example score, but especially for large scores, you % will typically yield better line breaking and thus improve % overall spacing if you comment in the following command. %\remove "Forbid_line_break_engraver" } indent = 4.5\cm } } \markup { \column { \vspace #2 \fill-line { \fontsize #2 \bold "Ut supra. Quam olim [... et semine eius.]" } } } %% midi \score { << \new StaffGroup \with { \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 12)) } << \new Staff = treble << \set Staff.instrumentName = \incipitDiscantus \new Voice = "sopranos" { \set Staff.midiInstrument ="choir aahs" % \voiceOne << \global { s4*14 s2 \sopMusic s\breve \sopMusicB s\breve s4*34 s2 \sopMusicII s\breve \sopMusicB }>> } >> \new Lyrics = sopranos { s1 } \new Staff = "medius" << \set Staff.instrumentName = \incipitAltus \new Voice = "altos" { % \voiceTwo \set Staff.midiInstrument ="choir aahs" << \global { s4*14 s2 \altoMusic s\breve \altoMusicB s\breve s4*34 s2 \altoMusicII s\breve \altoMusicB }>> } >> \new Lyrics = "altos" { s1 } \new Staff = tenors << \set Staff.instrumentName = \incipitTenor \clef "treble" \new Voice = "tenors" { \set Staff.midiInstrument ="choir aahs" % \voiceOne << \global { \transcription s2 \tenorMusic s\breve \tenorMusicB s\breve \transcriptionII s2 \tenorMusicII s\breve \tenorMusicB }>> } >> \new Lyrics = "tenors" { s1 } \new Staff ="basses" { \set Staff.instrumentName = \incipitBassus \new Voice = "basses" { \set Staff.midiInstrument ="choir aahs" \clef "bass" % \voiceTwo << \global { s4*14 s2 \bassMusic s\breve \bassMusicB s\breve s4*34 s2 \bassMusicII s\breve \bassMusicB }>> } } >> \new Lyrics = basses { s1 } \context Lyrics = sopranos \lyricsto sopranos { \sopWords \sopWordsB } \context Lyrics = altos \lyricsto altos { \altoWords \altoWordsB } \context Lyrics = tenors \lyricsto tenors { \intonVords \tenorWords \intonVordsII \tenorWordsB } \context Lyrics = basses \lyricsto basses { \bassWords \bassWordsB } >> \midi {} } \paper { ragged-bottom = ##t ragged-last-bottom = ##t ragged-last = ##t } %{ convert-ly.py (GNU LilyPond) 2.18.2 convert-ly.py: Processing `'... Applying conversion: 2.15.7, 2.15.9, 2.15.10, 2.15.16, 2.15.17, 2.15.18, 2.15.19, 2.15.20, 2.15.25, 2.15.32, 2.15.39, 2.15.40, 2.15.42, 2.15.43, 2.16.0, 2.17.0, 2.17.4, 2.17.5, 2.17.6, 2.17.11, 2.17.14, 2.17.15, 2.17.18, 2.17.19, 2.17.20, 2.17.25, 2.17.27, 2.17.29, 2.17.97, 2.18.0 %}
  NODES