Skip to content

Commit

Permalink
Merge pull request #4248 from FAJ-Munich/cistercian-clean
Browse files Browse the repository at this point in the history
Cistercian Deployment and fixes for Officium parvum
  • Loading branch information
APMarcello3 authored Jan 9, 2025
2 parents 62be35a + 8e2d072 commit 9c6d8e2
Show file tree
Hide file tree
Showing 522 changed files with 4,529 additions and 492 deletions.
2 changes: 2 additions & 0 deletions web/cgi-bin/DivinumOfficium/RunTimeOptions.pm
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ use constant LEGACY_MISSA_VERSION_NAMES => {
'Monastic Tridentinum 1617' => 'Tridentine - 1570',
'Monastic Divino 1930' => 'Divino Afflatu - 1954',
'Monastic - 1963' => 'Rubrics 1960 - 1960',
'Monastic Tridentinum Cisterciensis 1951' => 'Tridentine - 1910',
'Monastic Tridentinum Cisterciensis Altovadensis' => 'Reduced - 1955',
'Tridentine - 1888' => 'Tridentine - 1910',
'Tridentine - 1906' => 'Tridentine - 1910',
'Ordo Praedicatorum - 1962' => 'Ordo Praedicatorum Dominican 1962',
Expand Down
14 changes: 11 additions & 3 deletions web/cgi-bin/DivinumOfficium/SetupString.pl
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@
communi => sub { our $version },
'die' => \&get_dayname_for_condition,
feria => sub { our $dayofweek + 1 },
commune => sub {$commune},
commune => sub { our $commune },
votiva => sub { our $votive },
officio => sub { $dayname[1]; },
);
my %predicates = (
Expand Down Expand Up @@ -222,7 +223,12 @@ ($)

# aut binds tighter than et
AUTEM: for (split /\baut\b/, $condition) {
for (split /\bet\b/) {
my $negation = 0; # the first condition always has to be true

for (split /\b(et|nisi)\b/) {
$negation = 1 if /nisi/; # everthing after 'nisi' has to be false until the next 'aut'
next if /et|nisi/; # don't evaluate the captured seperator

s/^\s*(.*?)\s*$/$1/;

# Normalise whitespace.
Expand All @@ -247,8 +253,10 @@ ($)
my $predicate_text = $predicate;
$predicate = $predicates{lc($predicate)} || sub { shift =~ /$predicate_text/i };
$subject = $subjects{lc($subject)};
next AUTEM unless $subject && &$predicate(&$subject());

next AUTEM unless $subject && (&$predicate(&$subject()) xor $negation);
}

return ($vero = 1);
}
return ($vero = 0);
Expand Down
4 changes: 3 additions & 1 deletion web/cgi-bin/horas/horas.pl
Original file line number Diff line number Diff line change
Expand Up @@ -725,9 +725,11 @@ (\$$)
# Performs necessary adjustments to a short responsory.
sub postprocess_short_resp(\@$) {
my ($capit, $lang) = @_;
our (@dayname, $votive);

s/&Gloria1?/&Gloria1/ for (@$capit);

if ($dayname[0] =~ /Pasc/i) {
if (alleluia_required($dayname[0], $votive)) {
my $rlines = 0;

for (@$capit) {
Expand Down
73 changes: 41 additions & 32 deletions web/cgi-bin/horas/horascommon.pl
Original file line number Diff line number Diff line change
Expand Up @@ -355,15 +355,21 @@ sub occurrence {
}
}

if ($version =~ /Trid/i
&& (($trank[2] < 5.1 && $trank[2] > 4.2 && $trank[0] =~ /Dominica/i) || $trank[0] =~ /infra octavam Corp/i))
{
if (
$version =~ /Trid/i
&& (($trank[2] < 5.1 && $trank[2] > 4.2 && $trank[0] =~ /Dominica/i && $version !~ /altovadensis/i)
|| $trank[0] =~ /infra octavam Corp/i)
) {

# before Divino: Dominica minor and infra 8vam CC is outranked by any Duplex
$trank[2] = 2.9;
} # before Divino: Dominica minor and infra 8vam CC is outranked by any Duplex
elsif ($version =~ /divino/i && ($trank[2] < 5.1 && $trank[0] =~ /Dominica/i)) {
$trank[2] = 4.9;
} elsif ($version =~ /196/ && $tname =~ /Nat1/i && $day > 28)
{ # commemoration of the Christmas Octave according to the rubrics
} elsif ($version =~ /divino|altovadensis/i && ($trank[2] < 5.1 && $trank[0] =~ /Dominica/i)) {

# Divino: Dominica minor raised to beat Duplex majus / Cistercian 1957: to beat MM. min
$trank[2] = $version =~ /divino/i ? 4.9 : 3.9;
} elsif ($version =~ /196/ && $tname =~ /Nat1/i && $day > 28) {

# commemoration of the Christmas Octave according to the rubrics
$sname = subdirname('Tempora', $version) . "Nat$day";
%saint = %{setupstring('Latin', $sname)};
$srank = $saint{Rank};
Expand Down Expand Up @@ -734,14 +740,14 @@ sub concurrence {

# before 1955, Ash Wednesday gave way at 2nd Vespers in concurrence to a Duplex
$rank = $wrank[2] = 2.99;
} elsif ($dayname[0] =~ /Quad[0-5]|Quadp|Adv/ && $dayofweek == 0 && $version =~ /trident/i) {
} elsif ($dayname[0] =~ /Quad[0-5]|Quadp|Adv/ && $dayofweek == 0 && $version =~ /trident(?!.*altovadensis)/i) {

# before Divino Afflatu, the Sundays from Septuag to Judica gave way at 2nd Vespers in concurrence to a Duplex
$rank = $wrank[2] = 2.99;
} elsif ($dayname[0] =~ /Quad[0-5]|Quadp|Adv/ && $dayofweek == 0 && $version =~ /divino/i) {
} elsif ($dayname[0] =~ /Quad[0-5]|Quadp|Adv/ && $dayofweek == 0 && $version =~ /divino|altovadensis/i) {

# after Divino Afflatu, the Sundays from Septuag to Judica gave way at 2nd Vespers in concurrence to a Duplex II. cl.
$rank = $wrank[2] = 4.9;
# after Divino Afflatu, the Sundays from Septuag to Judica gave way at 2nd Vespers in concurrence to a Duplex II. cl. (Cist: MM. maj.)
$rank = $wrank[2] = $version =~ /divino/i ? 4.9 : 3.9;
}

if ( $cwrank[0] =~ /Dominica/i
Expand All @@ -751,21 +757,27 @@ sub concurrence {
{

# before 1955, even Major Sundays gave way at I Vespers to a Duplex (or Duplex II. cl.)
$cwrank[2] = $crank = $version =~ /trident/i ? 2.9 : 4.9;
$cwrank[2] = $crank = $version =~ /altovadensis/i ? 3.9 : $version =~ /trident/i ? 2.9 : 4.9;
}

if ( $cwrank[0] =~ /in.*octava/i
&& ($wrank[0] =~ /Dominica/i || ($winner =~ /Sancti/ && $wrank !~ /in.*octava/i))
&& $version =~ /divino/i)
{
$octvespera = 1; # Commemoration of resumed Octave on Sunday from 1st Vespers (Divino only)

# Commemoration of resumed Octave on Sunday from 1st Vespers (Divino only)
$octvespera = 1;
} elsif ($cwrank[0] =~ /Dominica/i && $trank[0] =~ /in.*octava/i
|| ($cwrank[0] =~ /infra.*octav/i && $version =~ /Trident/))
{
$octvespera = 3; # Commemoration of Octave on Saturday from 2nd Vespers

# Commemoration of Octave on Saturday from 2nd Vespers
$octvespera = 3;
}

if ($ctrank[0] =~ /Dominica/i && !($version =~ /19(?:55|6)/ && $ctrank[0] =~ /Dominica Resurrectionis/i)) {
if ($ctrank[0] =~ /Dominica/i
&& !($version =~ /19(?:55|6)|altovadensis/i && $ctrank[0] =~ /Dominica Resurrectionis/i))
{

# if tomorrow is a Sunday, get rid of today's tempora completely; necessary Commemorations are handled in the Sunday database file
if ($sanctoraloffice && $srank[0] !~ /infra octavam Nat/i) {
Expand Down Expand Up @@ -813,7 +825,7 @@ sub concurrence {
|| ($cwinner{Rank} =~ /C10/i && $winner{Rank} =~ /C1[01]/i)

# no 1st Vespers of Easter after 1955
|| ($version =~ /19(?:55|6)/ && $cwinner{Rank} =~ /Dominica Resurrectionis|Patrocinii S. Joseph/i)
|| ($version =~ /19(?:55|6)|altovadensis/i && $cwinner{Rank} =~ /Dominica Resurrectionis|Patrocinii S. Joseph/i)

# TODO: last condition should be made obsolete and handled via database
|| ($version =~ /19(?:55|6)/
Expand Down Expand Up @@ -912,17 +924,20 @@ sub concurrence {

# before DA, more Semiduplex and Duplex where treated as "A capitulo"
# In Cisterciense, even MM. maj is A capitulo in concurrence with Dom. I. classis
# In Altovadensis, even MM. min is A capitulo in concurrence with any Sunday
my $flrank =
($version =~ /cist/i && $cwinner{Rank} =~ /Dominica/i && $tomorrowname[0] =~ /Adv1|Quad[156]/)
? ($rank < 4.9 ? 2 : $rank)
($version =~ /cist/i && $cwinner{Rank} =~ /Dominica/i)
? ($rank < ($tomorrowname[0] =~ /Adv1|Quad[156]/ ? 4.9 : $version =~ /altovadensis/i ? 3.9 : 2.9) ? 2 : $rank)
: $version =~ /trident/i ? (
($rank < 2.9 && !($rank == 2.1 && $winner{Rank} !~ /infra Octavam/i)) ? 2
: ($rank >= 3 && $rank < 4.9 && $rank != 4 && $rank != 3.2) ? 3
: ($rank >= 3 && $rank < 4.9 && $rank != 4 && $rank != 3.9 && $rank != 3.2) ? 3
: $rank
)
: $rank;
my $flcrank =
$version =~ /trident/i
$version =~ /cist/i && $cwinner{Rank} =~ /Dominica/i
? 2
: $version =~ /trident/i
? ($crank < 2.91 ? 2 : ($cwinner{Rank} =~ /Dominica/i ? 2.99 : ($crank < 4.9 && $crank != 4) ? 3 : $crank))
: ($version =~ /divino/i && $cwinner{Rank} =~ /Dominica/i) ? 4.9
: $crank;
Expand Down Expand Up @@ -1579,22 +1594,14 @@ sub precedence {
}

if (my $vtv = $votive ne 'Hodie' ? $votive : '') {
if ($vtv =~ /C12/i) {
if ($vtv =~ /C12/i && $version !~ /cist/i) {
if ( ($month == 12 && ($day == 24 && $hora =~ /Vespera|Completorium/ || ($day > 24)))
|| $month == 1
|| ($month == 2 && $day < 3))
{
$vtv = 'C12N';
} elsif ($dayname[0] =~ /adv/i) {
} elsif ($dayname[0] =~ /adv/i || $winner =~ /03-25/) {
$vtv = 'C12A';
} elsif ($dayname[0] =~ /Pasc/i) {
$vtv = 'C12P';
} elsif (
$month == 3
&& (($day == 24 && $hora =~ /(Vespera|Completorium)/i)
|| $day == 25)
) {
$vtv = 'C12';
} elsif ($dayname[0] =~ /(Quadp|Quad)/i) {
$vtv = 'C12Q';
}
Expand Down Expand Up @@ -1824,8 +1831,9 @@ sub nooctnat {
# Latin spelling variety in versions
sub spell_var {
my $t = shift;
our $version;

if (our $version =~ /196/) {
if ($version =~ /196/) {

# substitute i for j
# but not in html tags!
Expand All @@ -1841,6 +1849,7 @@ sub spell_var {
} else {
$t =~ s/Génetrix/Génitrix/g;
$t =~ s/\bco(t[ií]d[ií])/quo$1/g;
$t =~ s/(allelú)ja/$1ia/gi if $version =~ /cist/i;
}
return $t;
}
Expand Down
5 changes: 4 additions & 1 deletion web/cgi-bin/horas/officium_html.pl
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,10 @@ sub headline {
# add warning for uncompleted versions
$output .=
"<H2><FONT COLOR='RED' SIZE='+1'>Please note that the database for this version ($vers) is still incomplete and under construction.</FONT></H2>\n"
if $vers =~ /1617|1930|1962|Cist/;
if $vers =~ /1962|Cist/;
$output .=
"<H2><FONT COLOR='RED'>Please note that 'Ad Matutinum' for this version ($vers) is still incomplete and under construction.</FONT></H2>\n"
if $vers =~ /1617|1930/ && $hora =~ /Matutinum/;

if ($variant eq 'P') {
$output .= par_c(<< "PrintTag");
Expand Down
15 changes: 13 additions & 2 deletions web/cgi-bin/horas/specials.pl
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ sub specials {
}

# Omit this section if the rule says so.
my $ite = substr($item, 1, index($item, ' '));
$item =~ /\#(.+?)(\s|$)/;
my $ite = $1;

if (
$rule =~ /Omit.*? $ite/i
Expand Down Expand Up @@ -134,6 +135,12 @@ sub specials {
next;
}

if ($item =~ /Commemoratio officii parvi/) {
my %mariae = %{setupstring($lang, 'CommuneM/C12.txt')};
push(@s, $item, $mariae{"COP $hora"});
next;
}

# Preces:
if ($item =~ /preces/i) {
$skipflag = !preces($item); # check if Preces Feriales or Dominicales are to be said
Expand Down Expand Up @@ -663,6 +670,7 @@ sub setbuild {
# versions 1956 and 1960 exclude from Ordinarium
sub checksuffragium {
our $collectcount;
my $ranklimit = ($version =~ /cist/i ? 4 : 3); # Roman: Duplex; Cist: MM. maj.
return 0
if $rule =~ /no suffragium/i
Expand All @@ -685,7 +693,10 @@ sub checksuffragium {
|| ($octavcount || $commemoratio{Rank} =~ /octav/i)
# Cistercian: minor Feasts of Apostles
|| $version =~ /cist/i && $commune =~ /C1a?$/i;
|| $version =~ /cist/i && $commune =~ /C1a?$/i
# Altovadensis: max 3. collects
|| $version =~ /altovadensis/i && $collectcount > 2;
if ($commemoratio && $seasonalflag) {
my @r = split(';;', $commemoratio{Rank});
Expand Down
17 changes: 15 additions & 2 deletions web/cgi-bin/horas/specials/orationes.pl
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ sub oratio {
$datafolder, $cvespera, $precesferiales, $largefont, $redfont, $label,
);

our $collectcount = 1;
my $addconclusio;
my %w = columnsel($lang) ? %winner : %winner2;
my $ind = $hora eq 'Vespera' ? $vespera : 2;
Expand Down Expand Up @@ -153,14 +154,15 @@ sub oratio {
# no dominus vobiscum after Te decet
if ($version !~ /Monastic/ || $hora ne 'Matutinum' || $rule !~ /12 lectiones/) {
if (
$version =~ /Monastic/
$version =~ /Monastic/ && ($winner !~ /C12/ || $version !~ /cist/i)
|| ( $version =~ /Ordo Praedicatorum/
&& ($rank < 3 || $dayname[1] =~ /Vigil/)
&& $winner !~ /12-24|Pasc|01-0[2-5]/)
)
{ # OP ferial office
if ($horamajor && $version !~ /Ordo Praedicatorum/) {
push(@s, '$Kyrie', '$Pater noster Et', "_");
push(@s, '$Kyrie');
push(@s, '$Pater noster Et', "_") unless $winner =~ /C12/;
} else {
push(@s, '$Kyrie', '$pater secreto', "_");
}
Expand Down Expand Up @@ -200,6 +202,8 @@ sub oratio {
my $octavestring = '!.*?(O[ckt]ta|' . &translate("Octava", $lang) . ')';
my $sundaystring = 'Dominic[aæ]|' . &translate("Dominica", $lang);

%w = columnsel($lang) ? %winner : %winner2; # prevent "contamination" from Oratio Dominica

if ($horamajor && $rank < 7) {

our $cwinner;
Expand Down Expand Up @@ -516,6 +520,7 @@ sub oratio {
my $ostr;
($ostr, $addconclusio) = delconclusio($cc{$key}, $addconclusio);
push(@s, $ostr);
$collectcount++;
}
}

Expand Down Expand Up @@ -742,6 +747,14 @@ sub getsuffragium {
: $dayname[0] =~ /pasc/i ? 2
: 1;
$suffr = $comment > 2 ? $suffr{"Suffragium $hora"} : $suffr{'Suffragium'};

if ($version =~ /altovadensis/i && $collectcount == 2 && $commune !~ /C1[012]/) {
$suffr =~ s/\n\!.*//s;
my $conclBMV = $suffr{'Suffragium ConclusioBMV'};
$suffr =~ s/$/~\n$conclBMV/s;
setbuild1('Suffragium altovadense:', "limited to three collects total");
}

if ($churchpatron) { $suffr =~ s/r\. N\./$churchpatron/; }
($suffr, $comment);
}
Expand Down
13 changes: 7 additions & 6 deletions web/cgi-bin/horas/specials/psalmi.pl
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ sub psalmi {

if ($hora =~ /^(?:Laudes|Vespera)$/i) {
$psalmi = psalmi_major($lang);
$duplexf ||= $duplex > 2;
$duplexf ||= $duplex > 2 && $winner !~ /C12/;
} else {
$psalmi = psalmi_minor($lang);
}
Expand Down Expand Up @@ -133,17 +133,17 @@ sub psalmi_minor {
if ($winner =~ /tempora/i || $testmode =~ /seasonal/i || $dayname[0] =~ /pasc/i) {

my $ind =
$hora eq 'Prima' ? 0
: $hora eq 'Tertia' ? 1
: $hora eq 'Sexta' ? 2
$hora eq 'Prima' ? ($version =~ /cist/i ? 1 : 0)
: $hora eq 'Tertia' ? ($version =~ /cist/i ? 2 : 1)
: $hora eq 'Sexta' ? ($version =~ /cist/i ? 3 : 2)
: $hora eq 'Nona' ? 4
: -1;
my $name = gettempora('Psalmi minor');

if ($name eq 'Adv') {
$name = $dayname[0];

if ($day > 16 && $day < 24 && $dayofweek) {
if ($day > 16 && $day < 24 && $dayofweek && $version !~ /cist/i) {
my $i = $dayofweek + 1;

if ($dayofweek == 6 && $version =~ /trident|monastic.*divino/i) { # take ants from feria occuring Dec 21st
Expand Down Expand Up @@ -434,7 +434,8 @@ sub psalmi_major {

if ( $version =~ /Monastic/
&& $hora eq 'Vespera'
&& ($winner !~ /C(?:9|12)/)
&& ($winner !~ /C9/)
&& ($winner !~ /C12/ || $version =~ /cist/i)
&& ($commune !~ /C9/)
&& ($dayname[0] !~ /Quad6/ || $dayofweek < 4))
{
Expand Down
Loading

0 comments on commit 9c6d8e2

Please sign in to comment.