diff --git a/.github/ISSUE_TEMPLATE/new_bug_report.yml b/.github/ISSUE_TEMPLATE/new_bug_report.yml new file mode 100644 index 00000000..fe8fd521 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/new_bug_report.yml @@ -0,0 +1,56 @@ +name: Bug Report +description: File a bug report +title: "[Bug]: " +labels: ["bug"] +assignees: + - JohnRDOrazio +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + - type: input + id: contact + attributes: + label: Contact Details + description: How can we get in touch with you if we need more info? + placeholder: ex. email@example.com + validations: + required: false + - type: textarea + id: what-happened + attributes: + label: What happened? + description: Also tell us, what did you expect to happen? + placeholder: Tell us what you see! + value: "A bug happened!" + validations: + required: true + - type: dropdown + id: version + attributes: + label: Version + description: What version of the API where you using when you noticed the bug? + options: + - v1 + - v2 + - v3 (Default) + - dev (Edge) + validations: + required: true + - type: dropdown + id: browsers + attributes: + label: Which browsers are you seeing the problem on? + multiple: true + options: + - Firefox + - Chrome + - Safari + - Microsoft Edge + - type: textarea + id: error-messages + attributes: + label: Relevant error messages + description: If there are any error messages related to the bug, please add them here. This will be automatically formatted into code, so no need for backticks. + render: shell diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0a8ea542..4e95414f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,7 +22,7 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: # Check-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Update source file translation strings id: update_pot @@ -34,7 +34,7 @@ jobs: # push the output folder to your repo - name: Push changes if: ${{ steps.update_pot.outputs.POT_LINES_CHANGED > 0 }} - uses: actions-x/commit@v4 + uses: actions-x/commit@v6 with: # The committer's email address email: 41898282+github-actions[bot]@users.noreply.github.com diff --git a/.gitignore b/.gitignore index 8ea1721c..9a6f3815 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ LiturgicalCalendar.iml .idea engineCache/* allowedOrigins.php +vendor/* + diff --git a/LitCalAllFestivities.php b/LitCalAllFestivities.php new file mode 100644 index 00000000..77ceee2c --- /dev/null +++ b/LitCalAllFestivities.php @@ -0,0 +1,54 @@ + $festivity ) { + $key = $festivity[ "TAG" ]; + $FestivityCollection[ $key ] = $festivity; + $FestivityCollection[ $key ][ "NAME" ] = $NAME[ $key ]; + $FestivityCollection[ $key ][ "MISSAL" ] = $LatinMissal; + } + } + } +} + +$responseObj = [ "LitCalAllFestivities" => $FestivityCollection ]; + +$response = json_encode( $responseObj ); +$responseHash = md5( $response ); +header("Etag: \"{$responseHash}\""); +if (!empty( $_SERVER['HTTP_IF_NONE_MATCH'] ) && $_SERVER['HTTP_IF_NONE_MATCH'] === $responseHash) { + header( $_SERVER[ "SERVER_PROTOCOL" ] . " 304 Not Modified" ); + header('Content-Length: 0'); +} else { + echo $response; +} +die(); diff --git a/LitCalDiocesanData.php b/LitCalDiocesanData.php deleted file mode 100644 index 620a88c2..00000000 --- a/LitCalDiocesanData.php +++ /dev/null @@ -1,203 +0,0 @@ -APICore->setAllowedOrigins( $allowedOrigins ); -$LitCalDiocesanData->APICore->setAllowedReferers( array_map( function($el){ return $el . "/"; }, $allowedOrigins ) ); - -$LitCalDiocesanData->APICore->setAllowedAcceptHeaders( [ AcceptHeader::JSON ] ); -$LitCalDiocesanData->APICore->setAllowedRequestContentTypes( [ RequestContentType::JSON, RequestContentType::FORMDATA ] ); -$LitCalDiocesanData->Init(); - -class LitCalDiocesanData { - - private object $DATA; - private object $RESPONSE; - private ?stdClass $GeneralIndex = null; - - public APICore $APICore; - - public function __construct(){ - $this->APICore = new APICore(); - $this->RESPONSE = new stdClass(); - $this->RESPONSE->requestHeadersReceived = $this->APICore->getJsonEncodedRequestHeaders(); - } - - private function handleGetPostRequests( array $REQUEST ) { - - $this->APICore->validateAcceptHeader( true ); - if( $this->APICore->getRequestContentType() === 'application/json' ) { - $this->DATA = $this->APICore->retrieveRequestParamsFromJsonBody(); - } else { - $this->DATA = (object)$REQUEST; - } - $this->retrieveDiocesanCalendar(); - - } - - private function handlePutPatchDeleteRequests( string $requestMethod ) { - $this->APICore->validateAcceptHeader( false ); - $this->APICore->enforceAjaxRequest(); - $this->APICore->enforceReferer(); - if( $this->APICore->getRequestContentType() === 'application/json' ) { - $this->DATA = $this->APICore->retrieveRequestParamsFromJsonBody(); - if( RequestMethod::PUT === $requestMethod ) { - $this->writeDiocesanCalendar(); - } elseif( RequestMethod::DELETE === $requestMethod ) { - $this->deleteDiocesanCalendar(); - } - - } else{ - header( $_SERVER[ "SERVER_PROTOCOL" ]." 415 Unsupported Media Type", true, 415 ); - die( '{"error":"You seem to be forming a strange kind of request? Only \'application/json\' is allowed as the Content Type for the body of the Request when using Request Methods PUT, PATCH, or DELETE: the Content Type for the body of your Request was '.$_SERVER[ 'CONTENT_TYPE' ].' and you are using Request Method ' . $_SERVER[ 'REQUEST_METHOD' ] . '"}' ); - } - - } - - private function handleRequestedMethod() { - - switch( strtoupper( $_SERVER[ "REQUEST_METHOD" ] ) ) { - case RequestMethod::GET: - $this->handleGetPostRequests( $_GET ); - break; - case RequestMethod::POST: - $this->handleGetPostRequests( $_POST ); - break; - case RequestMethod::PUT: - case RequestMethod::PATCH: - $this->handlePutPatchDeleteRequests( RequestMethod::PUT ); - break; - case RequestMethod::DELETE: - $this->handlePutPatchDeleteRequests( RequestMethod::DELETE ); - break; - case RequestMethod::OPTIONS: - //continue; - break; - default: - header( $_SERVER[ "SERVER_PROTOCOL" ]." 405 Method Not Allowed", true, 405 ); - $errorMessage = '{"error":"You seem to be forming a strange kind of request? Allowed Request Methods are '; - $errorMessage .= implode( ' and ', $this->AllowedRequestMethods ); - $errorMessage .= ', but your Request Method was ' . strtoupper( $_SERVER[ 'REQUEST_METHOD' ] ) . '"}'; - die( $errorMessage ); - } - } - - private function loadIndex() { - if( file_exists( "nations/index.json" ) ){ - $this->GeneralIndex = json_decode( file_get_contents( "nations/index.json" ) ); - } - } - - private function createOrUpdateIndex( string $path, bool $delete = false ) { - if( null === $this->GeneralIndex ){ - $this->GeneralIndex = new stdClass(); - } - $key = strtoupper(preg_replace("/[^a-zA-Z]/","",$this->RESPONSE->Diocese)); - - if( $delete ) { - if( property_exists( $this->GeneralIndex, $key ) ) { - unset( $this->GeneralIndex->$key ); - } - } else { - if( !property_exists( $this->GeneralIndex, $key ) ){ - $this->GeneralIndex->$key = new stdClass(); - } - $this->GeneralIndex->$key->path = $path . "/{$this->RESPONSE->Diocese}.json"; - $this->GeneralIndex->$key->nation = $this->RESPONSE->Nation; - $this->GeneralIndex->$key->diocese = $this->RESPONSE->Diocese; - if(property_exists($this->RESPONSE,'Group')){ - $this->GeneralIndex->$key->group = $this->RESPONSE->Group; - } - } - - file_put_contents( "nations/index.json", json_encode( $this->GeneralIndex ) . PHP_EOL ); - } - - private function retrieveDiocesanCalendar() { - if( property_exists( $this->DATA, 'key' ) ) { - $key = $this->DATA->key; - $calendarPath = $this->GeneralIndex->$key->path; - if( file_exists( $calendarPath ) ) { - echo file_get_contents( $calendarPath ); - die(); - } - } - } - - private function writeDiocesanCalendar() { - if( !property_exists( $this->DATA, 'calendar' ) || !property_exists( $this->DATA, 'diocese' ) || !property_exists( $this->DATA, 'nation' ) ) { - header( $_SERVER[ "SERVER_PROTOCOL" ]." 400 Bad request", true, 400 ); - die( '{"error":"Required parameters were not received"}' ); - } else { - $this->RESPONSE->Nation = strip_tags( $this->DATA->nation ); - $this->RESPONSE->Diocese = strip_tags( $this->DATA->diocese ); - $CalData = json_decode( $this->DATA->calendar ); - if( json_last_error() !== JSON_ERROR_NONE ) { - header( $_SERVER[ "SERVER_PROTOCOL" ]." 400 Bad request", true, 400 ); - die( '{"error":"Malformed data received in parameters"}' ); - } - if( property_exists( $this->DATA, 'overrides' ) ) { - $CalData->Overrides = $this->DATA->overrides; - } - $this->RESPONSE->Calendar = json_encode( $CalData ); - if( property_exists( $this->DATA, 'group' ) ) { - $this->RESPONSE->Group = strip_tags( $this->DATA->group ); - } - $path = "nations/{$this->RESPONSE->Nation}"; - if( !file_exists( $path ) ){ - mkdir( $path, 0755, true ); - } - - file_put_contents( $path . "/{$this->RESPONSE->Diocese}.json", $this->RESPONSE->Calendar . PHP_EOL ); - - $this->createOrUpdateIndex( $path ); - header( $_SERVER[ "SERVER_PROTOCOL" ]." 201 Created", true, 201 ); - die( '{"success":"Diocesan calendar created or updated for diocese \"'. $this->RESPONSE->Diocese .'\""}' ); - - } - } - - private function deleteDiocesanCalendar() { - if( !property_exists( $this->DATA, 'calendar' ) || !property_exists( $this->DATA, 'diocese' ) || !property_exists( $this->DATA, 'nation' ) ) { - header( $_SERVER[ "SERVER_PROTOCOL" ]." 400 Bad request", true, 400 ); - die( '{"error":"Required parameters were not received"}' ); - } else { - $this->RESPONSE->Nation = strip_tags( $this->DATA->nation ); - $this->RESPONSE->Diocese = strip_tags( $this->DATA->diocese ); - $path = "nations/{$this->RESPONSE->Nation}"; - if( file_exists( $path . "/{$this->RESPONSE->Diocese}.json" ) ){ - unlink($path . "/{$this->RESPONSE->Diocese}.json"); - } - - $this->createOrUpdateIndex( $path, true ); - header( $_SERVER[ "SERVER_PROTOCOL" ]." 200 OK", true, 200 ); - die( '{"success":"Diocesan calendar deleted for diocese \"'. $this->RESPONSE->Diocese .'\""}' ); - - } - } - - public function Init() { - - $this->APICore->Init(); - $this->APICore->setResponseContentTypeHeader(); - $this->loadIndex(); - $this->handleRequestedMethod(); - - } - -} diff --git a/LitCalEngine.php b/LitCalEngine.php index 6ea5393a..37902562 100644 --- a/LitCalEngine.php +++ b/LitCalEngine.php @@ -5,9 +5,8 @@ * Author: John Romano D'Orazio * Email: priest@johnromanodorazio.com * Licensed under the Apache 2.0 License - * Version 3.0 + * Version 3.4 * Date Created: 27 December 2017 - * Note: it is necessary to set up the MySQL liturgy tables prior to using this script */ diff --git a/LitCalHealth.php b/LitCalHealth.php new file mode 100644 index 00000000..a379ade0 --- /dev/null +++ b/LitCalHealth.php @@ -0,0 +1,389 @@ +clients->attach($conn); + + echo "New connection! ({$conn->resourceId})\n"; + } + + public function onMessage(ConnectionInterface $from, $msg) { + echo sprintf('Receiving message "%s" from connection %d', $msg, $from->resourceId); + $messageReceived = json_decode( $msg ); + if( json_last_error() === JSON_ERROR_NONE ) { + if( property_exists( $messageReceived, 'action' ) ) { + switch( $messageReceived->action ) { + case 'executeValidation': + if( + property_exists( $messageReceived, 'validate' ) && + property_exists( $messageReceived, 'sourceFile' ) && + property_exists( $messageReceived, 'category' ) + ) { + $this->executeValidation( $messageReceived, $from ); + } + break; + case 'validateCalendar': + if( + property_exists( $messageReceived, 'calendar' ) && + property_exists( $messageReceived, 'year' ) && + property_exists( $messageReceived, 'category' ) + ) { + $this->validateCalendar( $messageReceived->calendar, $messageReceived->year, $messageReceived->category, $from ); + } + break; + case 'executeUnitTest': + if( + property_exists( $messageReceived, 'calendar' ) && + property_exists( $messageReceived, 'year' ) && + property_exists( $messageReceived, 'category' ) && + property_exists( $messageReceived, 'test' ) + ) { + $this->executeUnitTest( $messageReceived->calendar, $messageReceived->year, $messageReceived->category, $messageReceived->test, $from ); + } + break; + default: + $message = new stdClass(); + $message->type = "echobot"; + $message->text = $msg; + $this->sendMessage( $from, $message ); + } + } + } + + } + + public function onClose(ConnectionInterface $conn) { + // The connection is closed, remove it, as we can no longer send it messages + $this->clients->detach($conn); + + echo "Connection {$conn->resourceId} has disconnected\n"; + } + + public function onError(ConnectionInterface $conn, \Exception $e) { + echo "An error has occurred: {$e->getMessage()}\n"; + $conn->close(); + } + + private function sendMessage( ConnectionInterface $from, string|stdClass $msg ) { + if( gettype( $msg ) !== 'string' ) { + $msg = json_encode( $msg ); + } + foreach ($this->clients as $client) { + if ($from === $client) { + // The message from sender will be echoed back only to the sender, not to other clients + $client->send($msg); + } + } + } + + const DataPathToSchema = [ + "https://litcal.johnromanodorazio.com/api/dev/LitCalMetadata.php" => LitSchema::METADATA, + "data/propriumdetempore.json" => LitSchema::PROPRIUMDETEMPORE, + "data/propriumdesanctis_1970/propriumdesanctis_1970.json" => LitSchema::PROPRIUMDESANCTIS, + "data/propriumdesanctis_2002/propriumdesanctis_2002.json" => LitSchema::PROPRIUMDESANCTIS, + "data/propriumdesanctis_2008/propriumdesanctis_2008.json" => LitSchema::PROPRIUMDESANCTIS, + "data/memorialsFromDecrees/memorialsFromDecrees.json" => LitSchema::DECREEMEMORIALS, + "nations/index.json" => LitSchema::INDEX + ]; + + const LitCalBaseUrl = "https://litcal.johnromanodorazio.com/api/dev/LitCalEngine.php"; + + public function __construct() { + $this->clients = new \SplObjectStorage; + } + + private function executeValidation( object $validation, ConnectionInterface $to ) { + $dataPath = $validation->sourceFile; + switch( $validation->category ) { + case 'universalcalendar': + $schema = LitCalHealth::DataPathToSchema[ $dataPath ]; + break; + case 'nationalcalendar': + $schema = LitSchema::NATIONAL; + break; + case 'diocesancalendar': + $schema = LitSchema::DIOCESAN; + break; + case 'widerregioncalendar': + $schema = LitSchema::WIDERREGION; + break; + case 'propriumdesanctis': + $schema = LitSchema::PROPRIUMDESANCTIS; + break; + } + $data = file_get_contents( $dataPath ); + if( $data !== false ) { + $message = new stdClass(); + $message->type = "success"; + $message->text = "The Data file $dataPath exists"; + $message->classes = ".$validation->validate.file-exists"; + $this->sendMessage( $to, $message ); + + $jsonData = json_decode( $data ); + if( json_last_error() === JSON_ERROR_NONE ) { + $message = new stdClass(); + $message->type = "success"; + $message->text = "The Data file $dataPath was successfully decoded as JSON"; + $message->classes = ".$validation->validate.json-valid"; + $this->sendMessage( $to, $message ); + + $validationResult = $this->validateDataAgainstSchema( $jsonData, $schema ); + if( gettype( $validationResult ) === 'boolean' && $validationResult === true ) { + $message = new stdClass(); + $message->type = "success"; + $message->text = "The Data file $dataPath was successfully validated against the Schema $schema"; + $message->classes = ".$validation->validate.schema-valid"; + $this->sendMessage( $to, $message ); + } + else if( gettype( $validationResult === 'object' ) ) { + $validationResult->classes = ".$validation->validate.schema-valid"; + $this->sendMessage( $to, $validationResult ); + } + } else { + $message = new stdClass(); + $message->type = "error"; + $message->text = "There was an error decoding the Data file $dataPath as JSON: " . json_last_error_msg(); + $message->classes = ".$validation->validate.json-valid"; + $this->sendMessage( $to, $message ); + } + + } else { + $message = new stdClass(); + $message->type = "error"; + $message->text = "Data file $dataPath does not exist"; + $message->classes = ".$validation->validate.file-exists"; + $this->sendMessage( $to, $message ); + } + } + + private function validateCalendar( string $Calendar, int $Year, string $category, ConnectionInterface $to ) : void { + if( $Calendar === 'VATICAN' ) { + $req = "?year=$Year"; + } else { + $req = "?$category=$Calendar&year=$Year"; + } + $data = file_get_contents( self::LitCalBaseUrl . $req ); + if( $data !== false ) { + $message = new stdClass(); + $message->type = "success"; + $message->text = "The $category of $Calendar for the year $Year exists"; + $message->classes = ".calendar-$Calendar.file-exists.year-$Year"; + $this->sendMessage( $to, $message ); + + $jsonData = json_decode( $data ); + if( json_last_error() === JSON_ERROR_NONE ) { + $message = new stdClass(); + $message->type = "success"; + $message->text = "The $category of $Calendar for the year $Year was successfully decoded as JSON"; + $message->classes = ".calendar-$Calendar.json-valid.year-$Year"; + $this->sendMessage( $to, $message ); + + $validationResult = $this->validateDataAgainstSchema( $jsonData, LitSchema::LITCAL ); + if( gettype( $validationResult ) === 'boolean' && $validationResult === true ) { + $message = new stdClass(); + $message->type = "success"; + $message->text = "The $category of $Calendar for the year $Year was successfully validated against the Schema " . LitSchema::LITCAL; + $message->classes = ".calendar-$Calendar.schema-valid.year-$Year"; + $this->sendMessage( $to, $message ); + } + else if( gettype( $validationResult === 'object' ) ) { + $validationResult->classes = ".calendar-$Calendar.schema-valid.year-$Year"; + $this->sendMessage( $to, $validationResult ); + } + } else { + $message = new stdClass(); + $message->type = "error"; + $message->text = "There was an error decoding the $category of $Calendar for the year $Year from the URL " . self::LitCalBaseUrl . $req . " as JSON: " . json_last_error_msg(); + $message->classes = ".calendar-$Calendar.json-valid.year-$Year"; + $this->sendMessage( $to, $message ); + } + } else { + $message = new stdClass(); + $message->type = "error"; + $message->text = "The $category of $Calendar for the year $Year does not exist at the URL " . self::LitCalBaseUrl . $req; + $message->classes = ".calendar-$Calendar.file-exists.year-$Year"; + $this->sendMessage( $to, $message ); + } + } + + private function executeUnitTest( string $Calendar, int $Year, string $category, string $test, ConnectionInterface $to ) { + switch( $test ) { + case 'testJohnBaptist': + $this->testJohnBaptist( $Calendar, $Year, $category, $to ); + break; + case 'testStJaneFrancesDeChantalMoved': + $this->testStJaneFrancesDeChantalMoved( $Calendar, $Year, $category, $to, 'StJaneFrancesDeChantalMoved' ); + break; + case 'testStJaneFrancesDeChantalOverridden': + $this->testStJaneFrancesDeChantalMoved( $Calendar, $Year, $category, $to, 'StJaneFrancesDeChantalOverridden' ); + break; + } + } + + private function testJohnBaptist( string $Calendar, int $Year, string $category, ConnectionInterface $to ) : void { + if( $Calendar === 'VATICAN' ) { + $req = "?year=$Year"; + } else { + $req = "?$category=$Calendar&year=$Year"; + } + $data = file_get_contents( self::LitCalBaseUrl . $req ); + if( $data !== false ) { + $message = new stdClass(); + $message->type = "success"; + $message->text = "The Universal Calendar for the year $Year exists"; + $message->classes = ".nativityjohnbaptist.year-{$Year}.file-exists"; + $this->sendMessage( $to, $message ); + + $jsonData = json_decode( $data ); + if( json_last_error() === JSON_ERROR_NONE ) { + $message = new stdClass(); + $message->type = "success"; + $message->text = "The Universal Calendar for the year $Year was successfully decoded as JSON"; + $message->classes = ".nativityjohnbaptist.year-{$Year}.json-valid"; + $this->sendMessage( $to, $message ); + + $validationResult = $this->validateDataAgainstSchema( $jsonData, LitSchema::LITCAL ); + if( gettype( $validationResult ) === 'boolean' && $validationResult === true ) { + $message = new stdClass(); + $message->type = "success"; + $message->text = "The Universal Calendar for the year $Year was successfully validated against the Schema " . LitSchema::LITCAL; + $message->classes = ".nativityjohnbaptist.year-{$Year}.schema-valid"; + $this->sendMessage( $to, $message ); + NativityJohnBaptistTest::$testObject = $jsonData; + $NativityJohnBaptistTest = new NativityJohnBaptistTest; + $testResult = $NativityJohnBaptistTest->testJune23(); + if( gettype( $testResult ) === 'boolean' && $testResult === true ) { + $message = new stdClass(); + $message->type = "success"; + $message->text = "Nativity of John the Baptist test passed for the Universal Calendar for the year $Year"; + $message->classes = ".nativityjohnbaptist.year-{$Year}.test-valid"; + $this->sendMessage( $to, $message ); + } + else if( gettype( $testResult ) === 'object' ) { + $testResult->classes = ".nativityjohnbaptist.year-{$Year}.test-valid"; + $this->sendMessage( $to, $testResult ); + } + } + else if( gettype( $validationResult === 'object' ) ) { + $validationResult->classes = ".nativityjohnbaptist.year-{$Year}.schema-valid"; + $this->sendMessage( $to, $validationResult ); + } + } else { + $message = new stdClass(); + $message->type = "error"; + $message->text = "There was an error decoding the Universal Calendar for the year $Year from the URL " . self::LitCalBaseUrl . $req . " as JSON: " . json_last_error_msg(); + $message->classes = ".nativityjohnbaptist.year-{$Year}.json-valid"; + $this->sendMessage( $to, $message ); + } + } else { + $message = new stdClass(); + $message->type = "error"; + $message->text = "The Universal Calendar for the year $Year does not exist at the URL " . self::LitCalBaseUrl . $req; + $message->classes = ".nativityjohnbaptist.year-{$Year}.file-exists"; + $this->sendMessage( $to, $message ); + } + } + + private function testStJaneFrancesDeChantalMoved( string $Calendar, int $Year, string $category, ConnectionInterface $to, string $test ) : void { + if( $Calendar === 'VATICAN' ) { + $req = "?year=$Year"; + } else { + $req = "?$category=$Calendar&year=$Year"; + } + $data = file_get_contents( self::LitCalBaseUrl . $req ); + if( $data !== false ) { + $message = new stdClass(); + $message->type = "success"; + $message->text = "The Universal Calendar for the year $Year exists"; + $message->classes = ".{$test}.year-{$Year}.file-exists"; + $this->sendMessage( $to, $message ); + + $jsonData = json_decode( $data ); + if( json_last_error() === JSON_ERROR_NONE ) { + $message = new stdClass(); + $message->type = "success"; + $message->text = "The Universal Calendar for the year $Year was successfully decoded as JSON"; + $message->classes = ".{$test}.year-{$Year}.json-valid"; + $this->sendMessage( $to, $message ); + + $validationResult = $this->validateDataAgainstSchema( $jsonData, LitSchema::LITCAL ); + if( gettype( $validationResult ) === 'boolean' && $validationResult === true ) { + $message = new stdClass(); + $message->type = "success"; + $message->text = "The Universal Calendar for the year $Year was successfully validated against the Schema " . LitSchema::LITCAL; + $message->classes = ".{$test}.year-{$Year}.schema-valid"; + $this->sendMessage( $to, $message ); + StJaneFrancesDeChantalTest::$testObject = $jsonData; + $StJaneFrancesDeChantalTest = new StJaneFrancesDeChantalTest; + if( $test === 'StJaneFrancesDeChantalMoved' ) { + $testResult = $StJaneFrancesDeChantalTest->testMovedOrNot(); + } + else if( $test === 'StJaneFrancesDeChantalOverridden' ) { + $testResult = $StJaneFrancesDeChantalTest->testOverridden(); + } + if( gettype( $testResult ) === 'boolean' && $testResult === true ) { + $message = new stdClass(); + $message->type = "success"; + $message->text = "Saint Jane Frances de Chantal test ($test) passed for the Universal Calendar for the year $Year"; + $message->classes = ".{$test}.year-{$Year}.test-valid"; + $this->sendMessage( $to, $message ); + } + else if( gettype( $testResult ) === 'object' ) { + $testResult->classes = ".{$test}.year-{$Year}.test-valid"; + $this->sendMessage( $to, $testResult ); + } + } + else if( gettype( $validationResult === 'object' ) ) { + $validationResult->classes = ".{$test}.year-{$Year}.schema-valid"; + $this->sendMessage( $to, $validationResult ); + } + } else { + $message = new stdClass(); + $message->type = "error"; + $message->text = "There was an error decoding the Universal Calendar for the year $Year from the URL " . self::LitCalBaseUrl . $req . " as JSON: " . json_last_error_msg(); + $message->classes = ".{$test}.year-{$Year}.json-valid"; + $this->sendMessage( $to, $message ); + } + } else { + $message = new stdClass(); + $message->type = "error"; + $message->text = "The Universal Calendar for the year $Year does not exist at the URL " . self::LitCalBaseUrl . $req; + $message->classes = ".{$test}.year-{$Year}.file-exists"; + $this->sendMessage( $to, $message ); + } + } + + private function validateDataAgainstSchema( object|array $data, string $schemaUrl ) : bool|object { + $res = false; + try { + $schema = Schema::import( $schemaUrl ); + $schema->in($data); + $res = true; + } catch (InvalidValue|Exception $e) { + $message = new stdClass(); + $message->type = "error"; + $message->text = LitSchema::ERROR_MESSAGES[ $schemaUrl ] . PHP_EOL . $e->getMessage(); + return $message; + } + return $res; + } + +} + + +$LitCalHealth = new LitCalHealth(); diff --git a/LitCalMetadata.php b/LitCalMetadata.php index d16ee011..1885d229 100644 --- a/LitCalMetadata.php +++ b/LitCalMetadata.php @@ -1,5 +1,7 @@ $value ) { unset( $diocesanCalendars[$key]["path"] ); + if( array_key_exists( "group", $value ) && $value !== "" ) { + if( !array_key_exists($value["group"], $diocesanGroups) ) { + $diocesanGroups[$value["group"]] = []; + } + $diocesanGroups[$value["group"]][] = $key; + } if( !array_key_exists($diocesanCalendars[$key]["nation"], $nationalCalendars) ) { $nationalCalendars[$diocesanCalendars[$key]["nation"]] = []; + $nationalCalendarsMetadata[$diocesanCalendars[$key]["nation"]] = [ + "missals" => [], + "widerRegions" => [], + "dioceses" => [] + ]; } $nationalCalendars[$diocesanCalendars[$key]["nation"]][] = $key; + $nationalCalendarsMetadata[$diocesanCalendars[$key]["nation"]]["dioceses"][] = $key; } foreach( $baseNationalCalendars as $nation ) { if( !array_key_exists( $nation, $nationalCalendars ) ) { $nationalCalendars[$nation] = []; } + if( file_exists( "nations/$nation/$nation.json" ) ) { + $nationData = json_decode( file_get_contents( "nations/$nation/$nation.json" ) ); + $nationalCalendarsMetadata[$nation]["missals"] = $nationData->Metadata->Missals; + $nationalCalendarsMetadata[$nation]["widerRegions"][] = $nationData->Metadata->WiderRegion->name; + } } + $filterDirResults = ['..', '.', 'index.json']; + $dirResults = array_diff( scandir('nations'), $filterDirResults ); + $widerRegionsFiles = array_values( array_filter( $dirResults, function($el) { + return !is_dir('nations/' . $el) && pathinfo('nations/' . $el, PATHINFO_EXTENSION) === 'json'; + }) ); + $widerRegionsNames = array_map( function($el){ + return pathinfo('nations/' . $el, PATHINFO_FILENAME); + }, $widerRegionsFiles ); - echo json_encode( [ + $response = json_encode( [ "LitCalMetadata" => [ "NationalCalendars" => $nationalCalendars, - "DiocesanCalendars" => $diocesanCalendars - ], + "NationalCalendarsMetadata" => $nationalCalendarsMetadata, + "DiocesanCalendars" => $diocesanCalendars, + "DiocesanGroups" => $diocesanGroups, + "WiderRegions" => $widerRegionsNames, + "RomanMissals" => RomanMissal::produceMetadata() + ] ], JSON_PRETTY_PRINT ); + $responseHash = md5( $response ); + header("Etag: \"{$responseHash}\""); + if (!empty( $_SERVER['HTTP_IF_NONE_MATCH'] ) && $_SERVER['HTTP_IF_NONE_MATCH'] === $responseHash) { + header( $_SERVER[ "SERVER_PROTOCOL" ] . " 304 Not Modified" ); + header('Content-Length: 0'); + } else { + echo $response; + } } else { http_response_code(503); } diff --git a/LitCalRegionalData.php b/LitCalRegionalData.php new file mode 100644 index 00000000..1319217d --- /dev/null +++ b/LitCalRegionalData.php @@ -0,0 +1,323 @@ +APICore->setAllowedOrigins( $allowedOrigins ); +$LitCalRegionalData->APICore->setAllowedReferers( array_map( function($el){ return $el . "/"; }, $allowedOrigins ) ); + +$LitCalRegionalData->APICore->setAllowedAcceptHeaders( [ AcceptHeader::JSON ] ); +$LitCalRegionalData->APICore->setAllowedRequestContentTypes( [ RequestContentType::JSON, RequestContentType::FORMDATA ] ); +$LitCalRegionalData->Init(); + +class LitCalRegionalData { + + private object $DATA; + private object $RESPONSE; + //The General Index is currently only used for diocesan calendars + private ?stdClass $GeneralIndex = null; + + public APICore $APICore; + + public function __construct(){ + $this->APICore = new APICore(); + $this->RESPONSE = new stdClass(); + $this->RESPONSE->requestHeadersReceived = $this->APICore->getJsonEncodedRequestHeaders(); + } + + private function handleRequestedMethod() { + switch( strtoupper( $_SERVER[ "REQUEST_METHOD" ] ) ) { + case RequestMethod::GET: + $this->handleGetPostRequests( $_GET ); + break; + case RequestMethod::POST: + $this->handleGetPostRequests( $_POST ); + break; + case RequestMethod::PUT: + case RequestMethod::PATCH: + $this->handlePutPatchDeleteRequests( RequestMethod::PUT ); + break; + case RequestMethod::DELETE: + $this->handlePutPatchDeleteRequests( RequestMethod::DELETE ); + break; + case RequestMethod::OPTIONS: + //continue; + break; + default: + header( $_SERVER[ "SERVER_PROTOCOL" ]." 405 Method Not Allowed", true, 405 ); + $errorMessage = '{"error":"You seem to be forming a strange kind of request? Allowed Request Methods are '; + $errorMessage .= implode( ' and ', $this->AllowedRequestMethods ); + $errorMessage .= ', but your Request Method was ' . strtoupper( $_SERVER[ 'REQUEST_METHOD' ] ) . '"}'; + die( $errorMessage ); + } + } + + private function handleGetPostRequests( array $REQUEST ) { + + $this->APICore->validateAcceptHeader( true ); + if( $this->APICore->getRequestContentType() === 'application/json' ) { + $this->DATA = $this->APICore->retrieveRequestParamsFromJsonBody(); + } else { + $this->DATA = (object)$REQUEST; + } + $this->retrieveRegionalCalendar(); + } + + private function handlePutPatchDeleteRequests( string $requestMethod ) { + $this->APICore->validateAcceptHeader( false ); + $this->APICore->enforceAjaxRequest(); + $this->APICore->enforceReferer(); + if( $this->APICore->getRequestContentType() === 'application/json' ) { + $this->DATA = $this->APICore->retrieveRequestParamsFromJsonBody(); + if( RequestMethod::PUT === $requestMethod ) { + $this->writeRegionalCalendar(); + } elseif( RequestMethod::DELETE === $requestMethod ) { + $this->deleteRegionalCalendar(); + } + } else{ + header( $_SERVER[ "SERVER_PROTOCOL" ]." 415 Unsupported Media Type", true, 415 ); + die( '{"error":"You seem to be forming a strange kind of request? Only \'application/json\' is allowed as the Content Type for the body of the Request when using Request Methods PUT, PATCH, or DELETE: the Content Type for the body of your Request was '.$_SERVER[ 'CONTENT_TYPE' ].' and you are using Request Method ' . $_SERVER[ 'REQUEST_METHOD' ] . '"}' ); + } + } + + private function retrieveRegionalCalendar() { + if( property_exists( $this->DATA, 'category' ) && property_exists( $this->DATA, 'key' ) ) { + $category = $this->DATA->category; + $key = $this->DATA->key; + switch( $category ) { + case "diocesanCalendar": + $calendarDataFile = $this->GeneralIndex->$key->path; + break; + case "widerRegionCalendar": + $calendarDataFile = "nations/{$key}.json"; + break; + case "nationalCalendar": + $calendarDataFile = "nations/{$key}/{$key}.json"; + break; + } + + if( file_exists( $calendarDataFile ) ) { + if( $category === "diocesanCalendar" ) { + echo file_get_contents( $calendarDataFile ); + die(); + } else { + $this->RESPONSE = json_decode( file_get_contents( $calendarDataFile ) ); + $uKey = strtoupper( $key ); + if( $category === "widerRegionCalendar" ) { + $this->RESPONSE->isMultilingual = is_dir( "nations/{$uKey}" ); + $locale = strtolower( $this->DATA->locale ); + if( file_exists( "nations/{$uKey}/{$locale}.json" ) ) { + $localeData = json_decode( file_get_contents( "nations/{$uKey}/{$locale}.json" ) ); + foreach( $this->RESPONSE->LitCal as $idx => $el ) { + $this->RESPONSE->LitCal[$idx]->Festivity->name = $localeData->{$this->RESPONSE->LitCal[$idx]->Festivity->tag}; + } + } + } + echo json_encode( $this->RESPONSE ); + die(); + } + } else { + header( $_SERVER[ "SERVER_PROTOCOL" ]." 404 Not Found", true, 404 ); + echo "{\"message\":\"file $calendarDataFile does not exist\"}"; + die(); + } + } + } + + private function writeRegionalCalendar() { + if( property_exists( $this->DATA, 'LitCal' ) && property_exists( $this->DATA, 'Metadata' ) && property_exists( $this->DATA, 'Settings' ) ) { + $region = $this->DATA->Metadata->Region; + if( $region === 'UNITED STATES' ) { + $region = 'USA'; + } + $path = "nations/{$region}"; + if( !file_exists( $path ) ) { + mkdir( $path, 0755, true ); + } + + $test = $this->validateDataAgainstSchema( $this->DATA, LitSchema::NATIONAL ); + if( $test === true ) { + $data = json_encode( $this->DATA, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE ); + file_put_contents( $path . "/{$region}.json", $data . PHP_EOL ); + header( $_SERVER[ "SERVER_PROTOCOL" ]." 201 Created", true, 201 ); + die( '{"success":"National calendar created or updated for nation \"'. $this->DATA->Metadata->Region .'\""}' ); + } else { + header( $_SERVER[ "SERVER_PROTOCOL" ]." 422 Unprocessable Entity", true, 422 ); + die( json_encode( $test ) ); + } + + } + else if ( property_exists( $this->DATA, 'LitCal' ) && property_exists( $this->DATA, 'Metadata' ) && property_exists( $this->DATA, 'NationalCalendars' ) ) { + $this->DATA->Metadata->WiderRegion = ucfirst( strtolower( $this->DATA->Metadata->WiderRegion ) ); + $widerRegion = strtoupper( $this->DATA->Metadata->WiderRegion ); + if( $this->DATA->Metadata->IsMultilingual === true ) { + $path = "nations/{$widerRegion}"; + if( !file_exists( $path ) ) { + mkdir( $path, 0755, true ); + } + $translationJSON = new stdClass(); + foreach( $this->DATA->LitCal as $CalEvent ) { + $translationJSON->{ $CalEvent->Festivity->tag } = ''; + } + if( count( $this->DATA->Metadata->Languages ) > 0 ) { + foreach( $this->DATA->Metadata->Languages as $iso ) { + if( !file_exists( "nations/{$widerRegion}/{$iso}.json" ) ) { + file_put_contents( "nations/{$widerRegion}/{$iso}.json", json_encode( $translationJSON, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE ) ); + } + } + } + } + + $test = $this->validateDataAgainstSchema( $this->DATA, LitSchema::WIDERREGION ); + if( $test === true ) { + $data = json_encode( $this->DATA, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE ); + file_put_contents( "nations/{$this->DATA->Metadata->WiderRegion}.json", $data . PHP_EOL ); + header( $_SERVER[ "SERVER_PROTOCOL" ]." 201 Created", true, 201 ); + die( '{"success":"Wider region calendar created or updated for region \"'. $this->DATA->Metadata->WiderRegion .'\""}' ); + } else { + header( $_SERVER[ "SERVER_PROTOCOL" ]." 422 Unprocessable Entity", true, 422 ); + die( json_encode( $test ) ); + } + + } + else if ( property_exists( $this->DATA, 'LitCal' ) && property_exists( $this->DATA, 'Diocese' ) && property_exists( $this->DATA, 'Nation' ) ) { + $this->RESPONSE->Nation = strip_tags( $this->DATA->Nation ); + $this->RESPONSE->Diocese = strip_tags( $this->DATA->Diocese ); + $CalData = json_decode( $this->DATA->LitCal ); + if( json_last_error() !== JSON_ERROR_NONE ) { + header( $_SERVER[ "SERVER_PROTOCOL" ]." 400 Bad request", true, 400 ); + die( '{"error":"Malformed data received in parameters"}' ); + } + if( property_exists( $this->DATA, 'Overrides' ) ) { + $CalData->Overrides = $this->DATA->Overrides; + } + $this->RESPONSE->Calendar = json_encode( $CalData, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE ); + if( property_exists( $this->DATA, 'group' ) ) { + $this->RESPONSE->Group = strip_tags( $this->DATA->group ); + } + $path = "nations/{$this->RESPONSE->Nation}"; + if( !file_exists( $path ) ){ + mkdir( $path, 0755, true ); + } + + $test = $this->validateDataAgainstSchema( $CalData, LitSchema::DIOCESAN ); + if( $test === true ) { + file_put_contents( $path . "/{$this->RESPONSE->Diocese}.json", $this->RESPONSE->Calendar . PHP_EOL ); + } else { + header( $_SERVER[ "SERVER_PROTOCOL" ]." 422 Unprocessable Entity", true, 422 ); + die( json_encode( $test ) ); + } + + $this->createOrUpdateIndex( $path ); + header( $_SERVER[ "SERVER_PROTOCOL" ]." 201 Created", true, 201 ); + die( '{"success":"Diocesan calendar created or updated for diocese \"'. $this->RESPONSE->Diocese .'\""}' ); + + } + else { + header( $_SERVER[ "SERVER_PROTOCOL" ]." 400 Bad request", true, 400 ); + die( '{"error":"Not all required parameters were received (LitCal, Metadata, Settings|NationalCalendars OR LitCal, diocese, nation)"}' ); + } + } + + private function deleteRegionalCalendar() { + if( !property_exists( $this->DATA, 'LitCal' ) || !property_exists( $this->DATA, 'Diocese' ) || !property_exists( $this->DATA, 'Nation' ) ) { + header( $_SERVER[ "SERVER_PROTOCOL" ]." 400 Bad request", true, 400 ); + die( '{"error":"Required parameters were not received"}' ); + } else { + $this->RESPONSE->Nation = strip_tags( $this->DATA->Nation ); + $this->RESPONSE->Diocese = strip_tags( $this->DATA->Diocese ); + $path = "nations/{$this->RESPONSE->Nation}"; + if( file_exists( $path . "/{$this->RESPONSE->Diocese}.json" ) ){ + unlink($path . "/{$this->RESPONSE->Diocese}.json"); + } + + $this->createOrUpdateIndex( $path, true ); + header( $_SERVER[ "SERVER_PROTOCOL" ]." 200 OK", true, 200 ); + die( '{"success":"Diocesan calendar deleted for nation \"'. $this->RESPONSE->Diocese .'\""}' ); + + } + } + + private function loadIndex() { + if( file_exists( "nations/index.json" ) ){ + $this->GeneralIndex = json_decode( file_get_contents( "nations/index.json" ) ); + } + } + + private function createOrUpdateIndex( string $path, bool $delete = false ) { + if( null === $this->GeneralIndex ){ + $this->GeneralIndex = new stdClass(); + } + $key = strtoupper(preg_replace("/[^a-zA-Z]/","",$this->RESPONSE->Diocese)); + + if( $delete ) { + if( property_exists( $this->GeneralIndex, $key ) ) { + unset( $this->GeneralIndex->$key ); + } + } else { + if( !property_exists( $this->GeneralIndex, $key ) ){ + $this->GeneralIndex->$key = new stdClass(); + } + $this->GeneralIndex->$key->path = $path . "/{$this->RESPONSE->Diocese}.json"; + $this->GeneralIndex->$key->nation = $this->RESPONSE->Nation; + $this->GeneralIndex->$key->diocese = $this->RESPONSE->Diocese; + if(property_exists($this->RESPONSE,'Group')){ + $this->GeneralIndex->$key->group = $this->RESPONSE->Group; + } + } + + $test = $this->validateDataAgainstSchema( $this->GeneralIndex, LitSchema::INDEX ); + if( $test === true ) { + file_put_contents( "nations/index.json", json_encode( $this->GeneralIndex, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE ) . PHP_EOL ); + } else { + header( $_SERVER[ "SERVER_PROTOCOL" ]." 422 Unprocessable Entity", true, 422 ); + die( json_encode( $test ) ); + } + + } + + private function validateDataAgainstSchema( object $data, string $schemaUrl ) : bool { + $result = new stdClass(); + $schema = Schema::import( $schemaUrl ); + try { + $validation = $schema->in($data); + return true; + } catch (Exception $e) { + $result->error = LitSchema::ERROR_MESSAGES[ $schemaUrl ] . PHP_EOL . $e->getMessage(); + header( $_SERVER[ "SERVER_PROTOCOL" ]." 422 Unprocessable Entity", true, 422 ); + die( json_encode( $result ) ); + } + } + + public function Init() { + $this->APICore->Init(); + $this->APICore->setResponseContentTypeHeader(); + $this->loadIndex(); + $this->handleRequestedMethod(); + } + +} diff --git a/LitCalTestServer.php b/LitCalTestServer.php new file mode 100644 index 00000000..65eb0739 --- /dev/null +++ b/LitCalTestServer.php @@ -0,0 +1,18 @@ +run(); diff --git a/README.md b/README.md index dfd04a3a..1d106ca8 100644 --- a/README.md +++ b/README.md @@ -180,6 +180,33 @@ Two object keys are returned: # CHANGELOG +## [v3.4](https://github.com/JohnRDOrazio/LiturgicalCalendar/releases/tag/v3.4) (June 6th 2022) + * Fix issue with Saint Vincent deacon in national calendar for USA c27289f3c893a184d605e8b1a495a48e2e76669d + * simplify calculation of Vigil Masses 0afa39b838611554d32fd0d1c2a80a11a92ec696 + * add cache-control headers to the Metadata enpoint 3d77f602f29d6a3afaacefb43b3b147ca1dedaef + * complete move from MySQL tables to JSON source files d9c73447da1f9997eb0716a6591badc2a0e928ab + * add DiocesanGroups info to the Metadata endpoint a378f16e5072c4c298b5bf31263222f159148fbb + * move National Calendar data and Wider Region calendar data to JSON source files 1716486704a51eca41cdc066e66744c9c832f05b, 4e298779201e49ab820453be2e8c3f1083082935, 15f16c38cd4c1ba0ded4805760f8c369b9584b49, 5b27417ed32f782c50527f4d7a33df1318f60767, 1247b98d309a7d7eb936740a4094213b826a9ef5, cdf8bdb99f8ddaff52382259ec600a6ec33058a2, 62ad9461757c4e7e6b7c22a2ed5b0567f6052bd7, 7395ef4e75ef0548fcf5dff916cc9b2e77d9f8f6, e5d010f093da4599d9b378396a0b89e7d2763a1f, 9ada5aa092888a1c5ab1df31bc19c185273634f5, c9646a6b24ee9998aed74d077b455231f67183de, 25aa01a8ffd4abf2df97f4fd7ce035361310c6bb, ea5beacd4d21c050aaf0629596feef430f4faa5b, b81b8681c1d2307d3ad95c0aefc15fca3cb92aa2, a837f7b739e215af6eba2337b513200af778d71c, 7e9e894e5320ace19eadcdd656e90f5a7ac5e911, 4d1eca213b11a8231cfa4938908cbcca617b88df, e86ccdace21b6545a2f5c6ea6328ddafe849ba39, 445d22c865709f5621f1b4a3098d8471109650e0, a0e693f2abdd458c85d0526fbde09e85850be74c, + * add cache-control headers to the Main endpoint d2ae04de03a2b08360c7ab62e04830c41a34a0f7 and df7e17da9e9e331cfb84f6b7ccb4af4c5632bd41 + * add WiderRegions info to the Metadata endpoint b3f567f71a7566da8ba20cc943bd4578534c3ac4 + * add methods to FestivityCollection a9e176092f44da4fe0fe505097bd69ddc5ea614a + * add year limits to Roman Missals 0f939ba6dcca1866b13721bafc5f519c47d8ed16 + * fix enum validations 4c595c17e1bbf41e6c87e25aa043b97664cbb577, c3d2492f926faeaca5819e27e0b829369669b16a + * various fixes 8330fa096b7e0a4154dcc6e00a3d7100d81f1896, 6cf80da677a203ccfdd0d6b0a97aeebd63b3e011, a7e85de029fec3f2952129b97fc0428c740232cc, 4e0a5979552a79382f74edb052f4578333d2a007, 8ee7065c334aa93e6fe0a078b312256cad7cf061, 44df76f230d2595c57a0abe44539efb543f0dc4f, 5638ec6950ac5742175d7e6656c18af873b43cfd, 4f7c11f106496a7d31c504444927182676b567c4, 4decc12dd019a11c2fb0d632df9c34298750f5fa, 54500104b1276c826796542919c53b86fb32c4e6, e2c1f6c71b5fbda4757ecd8cef82dda5c570d8f7, fcb11085ca5c7f3bf82b5dc36808e2e57b4cbbdb, ec772a0b228b76d652436ba2c221f4824808b6a6, d804c7e5d686e59d633ee50df76553291df477e9, a52019ed070436b5d271b05591d5d2e7f5d93477, 8eadab79ea5200535b21a6f7a37257a7a13305e7 + * add Roman Missal info to the Metadata endpoint 715c28ac7b8113df0aa2c8ad81092828a13c619b + * output 404 error for unavailable resources 0bcbd3b09bbe4f8e6d6ddae9cdc1c732a824091a + * define JSON schemas b66f4d243834a6e19d33505f7ce123ddee651c51, 0db16a7748e4d10bd6c10e3491cf5325232080ca, 1574c01ab4c66bdbcad1f050ea9e2aa580e2d7a1, a70f38350e6eca9e44979ad900c1b8e75787bd92, a9ac10eb96a3a5c409d306812d4d65e98d4b4dd6, bd2ba8ba4a8ff99a25002cc6835b44280ee00e60, fabf7b65a2996695e510768272d84741c2bf8c3e, 8b8ae2a50ad926b4ebcb932aacc0d66d26eb969b, 85066b8e946117609c5a944987c943b127d084ea, 8a66bf4ab497f3c0e9dff64262c737a0f12bbb55, 3f79b058b666061b71a44b8c3bc7a710c0a25f95, 5e82f30e2ca0386a8445080a5173d36a7675dff3, 552eaa3a8a08e1872865b030e6006a7d2e3f2ca9, f6823001940c4fb2b7bc8ad84c26073cc031c1ae, b48bb7274b3dd436ad22fb2187724cec3e665319, 289f4c2caf21de6b646b699d6a2e7ae5af054fe1, 1245cfcaf9b2014a3cdc63c9d021bd09a2525e31, a4d8bc42692d5609e0d4b4057d7f4c8c2ca2dbb7, 1257b9b839408f9a7abb665828a2d5bae46ec356, baef32b45f91bd7abc05845f1fcb0a91ec62ec3c, 09edca182dfb11dfd0ab81310a20e3494c931688, 228af9cbc07ec41004046af44b37101fab410f1f + * create JSON schema validation 3938a278a7fe78bdda30d5d77de6766baa9c7ea1, 85702b023e78159d140cdb301f06d22f0cad4efe, a296cc556ef5d166e5cea4b66c2ddd2fd83334f0, 21f254090b4be79fef871ca02fb9c7fb4b2f5ebb, 765bac9eba97910f200d6cc6f0030f0ada17975f, 10d7619811bef7f55a6498cf3c3351ddfe1f6ae6, 4828724ff4ce90ed66e1572ccec5ede20aa21004, 9cbb8e637b3785ae2839a75c0eb63434b1232bcb, 16809cbc78ee9aa2b9155f0347f49af81f7322c3, a1de05c641b6d103b89577ca225da3d95073bb65 + * add more data for National Calendars to the Metadata endpoint 34ef54f06d5183b463cce0305f649c182edca2b3 + * update translations +## [v3.3](https://github.com/JohnRDOrazio/LiturgicalCalendar/releases/tag/v3.3) (January 27th 2022) + * move festivity data from the 2008 Editio Typica Tertia emendata out from the `LitCalAPI.php`, to a JSON file + * move data for festivities from Decrees of the Congregation of Divine Worship out from the `LitCalAPI.php`, to a JSON file +## [v3.2](https://github.com/JohnRDOrazio/LiturgicalCalendar/releases/tag/v3.2) (January 23rd 2022) + * allow full CORS requests from enabled domains + * allow Diocesan overrides for Epiphany, Ascension and Corpus Christi +## [v3.1](https://github.com/JohnRDOrazio/LiturgicalCalendar/releases/tag/v3.1) (December 26th 2021) + * bugfix which was missed in the v3.0 release: 86ee62ad68d58736880da2b5b39117dec7386dfc ## [v3.0](https://github.com/JohnRDOrazio/LiturgicalCalendar/releases/tag/v3.0) (December 26th 2021) * all calendar data moved from a MySQL database to JSON files, that can be tracked in the repository @@ -224,7 +251,7 @@ add translations for the Messages array in Italian, English and Latin (please fo * move as many festivities as possible to the MySQL tables to allow for localization (mobile feasts will be calculated in the script, but still need to be localized) * add ICS data generation (requires more localization strings, because it is already a form of final display of the data) -## [v2.0](https://github.com/JohnRDOrazio/LiturgicalCalendar/releases/tag/1.0) (January 8th 2018) +## [v2.0](https://github.com/JohnRDOrazio/LiturgicalCalendar/releases/tag/2.0) (January 8th 2018) * separate the display logic from the engine, so that the engine can act as an endpoint * make the engine return JSON or XML data that the display logic can use to generate a user-friendly representation of the data diff --git a/composer.json b/composer.json new file mode 100644 index 00000000..c158d45a --- /dev/null +++ b/composer.json @@ -0,0 +1,7 @@ +{ + "require": { + "swaggest/json-schema": "^0.12", + "phpunit/phpunit": "^9", + "cboden/ratchet": "^0.4.4" + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 00000000..79d871de --- /dev/null +++ b/composer.lock @@ -0,0 +1,3648 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "915dec09222581a50d1afa1274b75b0b", + "packages": [ + { + "name": "cboden/ratchet", + "version": "v0.4.4", + "source": { + "type": "git", + "url": "https://github.com/ratchetphp/Ratchet.git", + "reference": "5012dc954541b40c5599d286fd40653f5716a38f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ratchetphp/Ratchet/zipball/5012dc954541b40c5599d286fd40653f5716a38f", + "reference": "5012dc954541b40c5599d286fd40653f5716a38f", + "shasum": "" + }, + "require": { + "guzzlehttp/psr7": "^1.7|^2.0", + "php": ">=5.4.2", + "ratchet/rfc6455": "^0.3.1", + "react/event-loop": ">=0.4", + "react/socket": "^1.0 || ^0.8 || ^0.7 || ^0.6 || ^0.5", + "symfony/http-foundation": "^2.6|^3.0|^4.0|^5.0|^6.0", + "symfony/routing": "^2.6|^3.0|^4.0|^5.0|^6.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ratchet\\": "src/Ratchet" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "role": "Developer" + }, + { + "name": "Matt Bonneau", + "role": "Developer" + } + ], + "description": "PHP WebSocket library", + "homepage": "http://socketo.me", + "keywords": [ + "Ratchet", + "WebSockets", + "server", + "sockets", + "websocket" + ], + "support": { + "chat": "https://gitter.im/reactphp/reactphp", + "issues": "https://github.com/ratchetphp/Ratchet/issues", + "source": "https://github.com/ratchetphp/Ratchet/tree/v0.4.4" + }, + "time": "2021-12-14T00:20:41+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-03-03T08:28:38+00:00" + }, + { + "name": "evenement/evenement", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/igorw/evenement.git", + "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/igorw/evenement/zipball/531bfb9d15f8aa57454f5f0285b18bec903b8fb7", + "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7", + "shasum": "" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Evenement": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "Événement is a very simple event dispatching library for PHP", + "keywords": [ + "event-dispatcher", + "event-emitter" + ], + "support": { + "issues": "https://github.com/igorw/evenement/issues", + "source": "https://github.com/igorw/evenement/tree/master" + }, + "time": "2017-07-23T21:35:13+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.2.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/c94a94f120803a18554c1805ef2e539f8285f9a2", + "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.2.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2022-03-20T21:55:58+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2022-03-03T13:19:32+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.13.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + }, + "time": "2021-11-30T19:35:32+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + }, + "time": "2021-10-19T17:43:47+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "77a32518733312af16a44300404e945338981de3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", + "reference": "77a32518733312af16a44300404e945338981de3", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + }, + "time": "2022-03-15T21:29:03+00:00" + }, + { + "name": "phplang/scope-exit", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/phplang/scope-exit.git", + "reference": "239b73abe89f9414aa85a7ca075ec9445629192b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phplang/scope-exit/zipball/239b73abe89f9414aa85a7ca075ec9445629192b", + "reference": "239b73abe89f9414aa85a7ca075ec9445629192b", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpLang\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD" + ], + "authors": [ + { + "name": "Sara Golemon", + "email": "pollita@php.net", + "homepage": "https://twitter.com/SaraMG", + "role": "Developer" + } + ], + "description": "Emulation of SCOPE_EXIT construct from C++", + "homepage": "https://github.com/phplang/scope-exit", + "keywords": [ + "cleanup", + "exit", + "scope" + ], + "support": { + "issues": "https://github.com/phplang/scope-exit/issues", + "source": "https://github.com/phplang/scope-exit/tree/master" + }, + "time": "2016-09-17T00:15:18+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.15.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.2", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^6.0 || ^7.0", + "phpunit/phpunit": "^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + }, + "time": "2021-12-08T12:19:24+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.15", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.13.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-03-07T09:28:20+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.5.20", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.0", + "sebastian/version": "^3.0.2" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-04-01T12:37:26+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ratchet/rfc6455", + "version": "v0.3.1", + "source": { + "type": "git", + "url": "https://github.com/ratchetphp/RFC6455.git", + "reference": "7c964514e93456a52a99a20fcfa0de242a43ccdb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ratchetphp/RFC6455/zipball/7c964514e93456a52a99a20fcfa0de242a43ccdb", + "reference": "7c964514e93456a52a99a20fcfa0de242a43ccdb", + "shasum": "" + }, + "require": { + "guzzlehttp/psr7": "^2 || ^1.7", + "php": ">=5.4.2" + }, + "require-dev": { + "phpunit/phpunit": "^5.7", + "react/socket": "^1.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ratchet\\RFC6455\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "role": "Developer" + }, + { + "name": "Matt Bonneau", + "role": "Developer" + } + ], + "description": "RFC6455 WebSocket protocol handler", + "homepage": "http://socketo.me", + "keywords": [ + "WebSockets", + "rfc6455", + "websocket" + ], + "support": { + "chat": "https://gitter.im/reactphp/reactphp", + "issues": "https://github.com/ratchetphp/RFC6455/issues", + "source": "https://github.com/ratchetphp/RFC6455/tree/v0.3.1" + }, + "time": "2021-12-09T23:20:49+00:00" + }, + { + "name": "react/cache", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/reactphp/cache.git", + "reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/cache/zipball/4bf736a2cccec7298bdf745db77585966fc2ca7e", + "reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/promise": "^3.0 || ^2.0 || ^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, Promise-based cache interface for ReactPHP", + "keywords": [ + "cache", + "caching", + "promise", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/cache/issues", + "source": "https://github.com/reactphp/cache/tree/v1.1.1" + }, + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2021-02-02T06:47:52+00:00" + }, + { + "name": "react/dns", + "version": "v1.9.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/dns.git", + "reference": "6d38296756fa644e6cb1bfe95eff0f9a4ed6edcb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/dns/zipball/6d38296756fa644e6cb1bfe95eff0f9a4ed6edcb", + "reference": "6d38296756fa644e6cb1bfe95eff0f9a4ed6edcb", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/cache": "^1.0 || ^0.6 || ^0.5", + "react/event-loop": "^1.2", + "react/promise": "^3.0 || ^2.7 || ^1.2.1", + "react/promise-timer": "^1.8" + }, + "require-dev": { + "clue/block-react": "^1.2", + "phpunit/phpunit": "^9.3 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Dns\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async DNS resolver for ReactPHP", + "keywords": [ + "async", + "dns", + "dns-resolver", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/dns/issues", + "source": "https://github.com/reactphp/dns/tree/v1.9.0" + }, + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2021-12-20T08:46:54+00:00" + }, + { + "name": "react/event-loop", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/event-loop.git", + "reference": "187fb56f46d424afb6ec4ad089269c72eec2e137" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/187fb56f46d424afb6ec4ad089269c72eec2e137", + "reference": "187fb56f46d424afb6ec4ad089269c72eec2e137", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" + }, + "suggest": { + "ext-event": "~1.0 for ExtEventLoop", + "ext-pcntl": "For signal handling support when using the StreamSelectLoop", + "ext-uv": "* for ExtUvLoop" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\EventLoop\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], + "support": { + "issues": "https://github.com/reactphp/event-loop/issues", + "source": "https://github.com/reactphp/event-loop/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-03-17T11:10:22+00:00" + }, + { + "name": "react/promise", + "version": "v2.9.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910", + "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "React\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "support": { + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v2.9.0" + }, + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-02-11T10:27:51+00:00" + }, + { + "name": "react/promise-timer", + "version": "v1.8.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise-timer.git", + "reference": "0bbbcc79589e5bfdddba68a287f1cb805581a479" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise-timer/zipball/0bbbcc79589e5bfdddba68a287f1cb805581a479", + "reference": "0bbbcc79589e5bfdddba68a287f1cb805581a479", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "react/event-loop": "^1.2", + "react/promise": "^3.0 || ^2.7.0 || ^1.2.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "React\\Promise\\Timer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "A trivial implementation of timeouts for Promises, built on top of ReactPHP.", + "homepage": "https://github.com/reactphp/promise-timer", + "keywords": [ + "async", + "event-loop", + "promise", + "reactphp", + "timeout", + "timer" + ], + "support": { + "issues": "https://github.com/reactphp/promise-timer/issues", + "source": "https://github.com/reactphp/promise-timer/tree/v1.8.0" + }, + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2021-12-06T11:08:48+00:00" + }, + { + "name": "react/socket", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/socket.git", + "reference": "f474156aaab4f09041144fa8b57c7d70aed32a1c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/socket/zipball/f474156aaab4f09041144fa8b57c7d70aed32a1c", + "reference": "f474156aaab4f09041144fa8b57c7d70aed32a1c", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/dns": "^1.8", + "react/event-loop": "^1.2", + "react/promise": "^2.6.0 || ^1.2.1", + "react/promise-timer": "^1.8", + "react/stream": "^1.2" + }, + "require-dev": { + "clue/block-react": "^1.5", + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", + "react/promise-stream": "^1.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Socket\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", + "keywords": [ + "Connection", + "Socket", + "async", + "reactphp", + "stream" + ], + "support": { + "issues": "https://github.com/reactphp/socket/issues", + "source": "https://github.com/reactphp/socket/tree/v1.11.0" + }, + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-01-14T10:14:32+00:00" + }, + { + "name": "react/stream", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/stream.git", + "reference": "7a423506ee1903e89f1e08ec5f0ed430ff784ae9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/stream/zipball/7a423506ee1903e89f1e08ec5f0ed430ff784ae9", + "reference": "7a423506ee1903e89f1e08ec5f0ed430ff784ae9", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.2" + }, + "require-dev": { + "clue/stream-filter": "~1.2", + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Stream\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", + "keywords": [ + "event-driven", + "io", + "non-blocking", + "pipe", + "reactphp", + "readable", + "stream", + "writable" + ], + "support": { + "issues": "https://github.com/reactphp/stream/issues", + "source": "https://github.com/reactphp/stream/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2021-07-11T12:37:55+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-04-03T09:37:03+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-11-11T14:18:36+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-02-14T08:28:10+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-03-15T09:54:48+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "swaggest/json-diff", + "version": "v3.8.3", + "source": { + "type": "git", + "url": "https://github.com/swaggest/json-diff.git", + "reference": "bb3e3b4e9d842bb2e48f31ea568d0459968d1d42" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swaggest/json-diff/zipball/bb3e3b4e9d842bb2e48f31ea568d0459968d1d42", + "reference": "bb3e3b4e9d842bb2e48f31ea568d0459968d1d42", + "shasum": "" + }, + "require": { + "ext-json": "*" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.23" + }, + "type": "library", + "autoload": { + "psr-4": { + "Swaggest\\JsonDiff\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Viacheslav Poturaev", + "email": "vearutop@gmail.com" + } + ], + "description": "JSON diff/rearrange/patch/pointer library for PHP", + "support": { + "issues": "https://github.com/swaggest/json-diff/issues", + "source": "https://github.com/swaggest/json-diff/tree/v3.8.3" + }, + "time": "2021-09-25T22:09:03+00:00" + }, + { + "name": "swaggest/json-schema", + "version": "v0.12.39", + "source": { + "type": "git", + "url": "https://github.com/swaggest/php-json-schema.git", + "reference": "193ba39cce1ffa2d55ddd5445315e945a63298a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swaggest/php-json-schema/zipball/193ba39cce1ffa2d55ddd5445315e945a63298a2", + "reference": "193ba39cce1ffa2d55ddd5445315e945a63298a2", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=5.4", + "phplang/scope-exit": "^1.0", + "swaggest/json-diff": "^3.8.2", + "symfony/polyfill-mbstring": "^1.19" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.23" + }, + "suggest": { + "ext-mbstring": "For better performance" + }, + "type": "library", + "autoload": { + "psr-4": { + "Swaggest\\JsonSchema\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Viacheslav Poturaev", + "email": "vearutop@gmail.com" + } + ], + "description": "High definition PHP structures with JSON-schema based validation", + "support": { + "email": "vearutop@gmail.com", + "issues": "https://github.com/swaggest/php-json-schema/issues", + "source": "https://github.com/swaggest/php-json-schema/tree/v0.12.39" + }, + "time": "2021-10-15T18:12:27+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v5.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "6b0d0e4aca38d57605dcd11e2416994b38774522" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6b0d0e4aca38d57605dcd11e2416994b38774522", + "reference": "6b0d0e4aca38d57605dcd11e2416994b38774522", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v5.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-17T15:07:29+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "30885182c981ab175d4d034db0f6f469898070ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", + "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-10-20T20:35:02+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-11-30T18:21:41+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-04T08:16:47+00:00" + }, + { + "name": "symfony/routing", + "version": "v5.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/e07817bb6244ea33ef5ad31abc4a9288bef3f2f7", + "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<5.3", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.3|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v5.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-18T21:45:37+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, + "time": "2021-03-09T10:59:23+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/data/memorialsFromDecrees/i18n/en.json b/data/memorialsFromDecrees/i18n/en.json index f44e4605..2d4a0de0 100644 --- a/data/memorialsFromDecrees/i18n/en.json +++ b/data/memorialsFromDecrees/i18n/en.json @@ -1,14 +1,14 @@ -{ - "MaryMotherChurch": "Blessed Virgin Mary, Mother of the Church", - "StMartha": "Saints Martha, Mary and Lazarus", - "StJohnXXIII": "Saint John XXIII, Pope", - "StJohnPaulII": "Saint John Paul II, Pope", - "LadyLoreto": "Blessed Virgin Mary of Loreto", - "StPaulVI": "Saint Paul VI, Pope", - "StFaustinaKowalska": "Saint Faustina Kowalska", - "StGregoryNarek": "Saint Gregory of Narek, abbot and doctor of the Church", - "StJohnAvila": "Saint John of Avila, priest and doctor of the Church", - "StHildegardBingen": "Saint Hildegard of Bingen, virgin and doctor of the Church", - "StThereseChildJesus": "Saint Thérèse of the Child Jesus, virgin and doctor of the Church", - "StIrenaeus": "Saint Irenaeus, bishop and martyr and doctor of the Church" -} +{ + "MaryMotherChurch": "Blessed Virgin Mary, Mother of the Church", + "StMartha": "Saints Martha, Mary and Lazarus", + "StJohnXXIII": "Saint John XXIII, Pope", + "StJohnPaulII": "Saint John Paul II, Pope", + "LadyLoreto": "Blessed Virgin Mary of Loreto", + "StPaulVI": "Saint Paul VI, Pope", + "StFaustinaKowalska": "Saint Faustina Kowalska", + "StGregoryNarek": "Saint Gregory of Narek, Abbot and Doctor of the Church", + "StJohnAvila": "Saint John of Avila, Priest and Doctor of the Church", + "StHildegardBingen": "Saint Hildegard of Bingen, Virgin and Doctor of the Church", + "StThereseChildJesus": "Saint Thérèse of the Child Jesus, Virgin and Doctor of the Church", + "StIrenaeus": "Saint Irenaeus, Bishop and Martyr and Doctor of the Church" +} diff --git a/data/memorialsFromDecrees/i18n/it.json b/data/memorialsFromDecrees/i18n/it.json index ea8b8d58..4347705b 100644 --- a/data/memorialsFromDecrees/i18n/it.json +++ b/data/memorialsFromDecrees/i18n/it.json @@ -1,14 +1,14 @@ -{ - "MaryMotherChurch": "Beata Vergine Maria, Madre della Chiesa", - "StMartha": "Santi Marta, Maria e Lazzaro", - "StJohnXXIII": "San Giovanni XXIII, papa", - "StJohnPaulII": "San Giovanni Paolo II, papa", - "LadyLoreto": "Beata Maria Vergine di Loreto", - "StPaulVI": "San Paolo VI, Papa", - "StFaustinaKowalska": "Santa Faustina Kowalska", - "StGregoryNarek": "San Gregorio di Narek, abate e dottore della Chiesa", - "StJohnAvila": "San Giovanni d'Avila, sacerdote e dottore della Chiesa", - "StHildegardBingen": "Santa Ildegarda de Bingen, vergine e dottore della Chiesa", - "StThereseChildJesus": "Santa Teresa di Gesù Bambino, vergine e dottore della Chiesa", - "StIrenaeus": "Sant'Ireneo, vescovo e martire e dottore della Chiesa" -} +{ + "MaryMotherChurch": "Beata Vergine Maria, Madre della Chiesa", + "StMartha": "Santi Marta, Maria e Lazzaro", + "StJohnXXIII": "San Giovanni XXIII, papa", + "StJohnPaulII": "San Giovanni Paolo II, papa", + "LadyLoreto": "Beata Maria Vergine di Loreto", + "StPaulVI": "San Paolo VI, Papa", + "StFaustinaKowalska": "Santa Faustina Kowalska", + "StGregoryNarek": "San Gregorio di Narek, abate e dottore della Chiesa", + "StJohnAvila": "San Giovanni d'Avila, sacerdote e dottore della Chiesa", + "StHildegardBingen": "Santa Ildegarda de Bingen, vergine e dottore della Chiesa", + "StThereseChildJesus": "Santa Teresa di Gesù Bambino, vergine e dottore della Chiesa", + "StIrenaeus": "Sant'Ireneo, vescovo e martire e dottore della Chiesa" +} diff --git a/data/memorialsFromDecrees/memorialsFromDecrees.json b/data/memorialsFromDecrees/memorialsFromDecrees.json index 0ef0149f..2dc98197 100644 --- a/data/memorialsFromDecrees/memorialsFromDecrees.json +++ b/data/memorialsFromDecrees/memorialsFromDecrees.json @@ -2,11 +2,11 @@ { "Festivity": { "TAG": "StMaryMagdalene", - "GRADE": 4, - "sinceYear": 2016 + "GRADE": 4 }, "Metadata": { "action": "setProperty", + "sinceYear": 2016, "property": "grade", "decreeURL": "http://www.vatican.va/roman_curia/congregations/ccdds/documents/articolo-roche-maddalena_%s.pdf", "decreeLangs": { @@ -25,9 +25,9 @@ "Festivity": { "TAG": "MaryMotherChurch", "GRADE": 3, - "COMMON": "Proper", + "COMMON": ["Proper"], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": ["white"], "TYPE": "mobile", "READINGS": { "FIRST_READING": "", @@ -70,9 +70,9 @@ "GRADE": 2, "MONTH": 10, "DAY": 11, - "COMMON": "Pastors:For a Pope", + "COMMON": ["Pastors:For a Pope"], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": ["white"], "TYPE": "fixed", "READINGS": { "FIRST_READING": "", @@ -102,9 +102,9 @@ "GRADE": 2, "MONTH": 10, "DAY": 22, - "COMMON": "Pastors:For a Pope", + "COMMON": ["Pastors:For a Pope"], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": ["white"], "TYPE": "fixed", "READINGS": { "FIRST_READING": "", @@ -134,9 +134,9 @@ "GRADE": 2, "MONTH": 12, "DAY": 10, - "COMMON": "Blessed Virgin Mary", + "COMMON": ["Blessed Virgin Mary"], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": ["white"], "TYPE": "fixed", "READINGS": { "FIRST_READING": "", @@ -166,9 +166,9 @@ "GRADE": 2, "MONTH": 5, "DAY": 29, - "COMMON": "Pastors:For a Pope", + "COMMON": ["Pastors:For a Pope"], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": ["white"], "TYPE": "fixed", "READINGS": { "FIRST_READING": "", @@ -199,9 +199,9 @@ "GRADE": 2, "MONTH": 10, "DAY": 5, - "COMMON": "Holy Men and Women:For Religious", + "COMMON": ["Holy Men and Women:For Religious"], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": ["white"], "TYPE": "fixed", "READINGS": { "FIRST_READING": "", @@ -231,9 +231,9 @@ "GRADE": 2, "MONTH": 2, "DAY": 27, - "COMMON": "Holy Men and Women:For an Abbot,Doctors", + "COMMON": ["Holy Men and Women:For an Abbot", "Doctors"], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": ["white"], "TYPE": "fixed", "READINGS": { "FIRST_READING": "", @@ -264,9 +264,9 @@ "GRADE": 2, "MONTH": 5, "DAY": 10, - "COMMON": "Pastors:For One Pastor,Doctors", + "COMMON": ["Pastors:For One Pastor", "Doctors"], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": ["white"], "TYPE": "fixed", "READINGS": { "FIRST_READING": "", @@ -297,9 +297,9 @@ "GRADE": 2, "MONTH": 9, "DAY": 17, - "COMMON": "Virgins:For One Virgin,Doctors", + "COMMON": ["Virgins:For One Virgin", "Doctors"], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": ["white"], "TYPE": "fixed", "READINGS": { "FIRST_READING": "", @@ -327,7 +327,7 @@ { "Festivity": { "TAG": "StThereseChildJesus", - "COMMON": "Proper" + "COMMON": ["Proper"] }, "Metadata": { "action": "makeDoctor", @@ -347,7 +347,7 @@ { "Festivity": { "TAG": "StIrenaeus", - "COMMON": "Proper" + "COMMON": ["Proper"] }, "Metadata": { "action": "makeDoctor", diff --git a/data/propriumdesanctis_1970/i18n/en.json b/data/propriumdesanctis_1970/i18n/en.json index 05bf1c7a..9ff972dc 100644 --- a/data/propriumdesanctis_1970/i18n/en.json +++ b/data/propriumdesanctis_1970/i18n/en.json @@ -1,189 +1,189 @@ -{ - "StsBasilGreg": "Saints Basil the Great and Gregory Nazianzen, bishops and doctors", - "StRayPenyafort": "Saint Raymond of Penyafort, priest", - "StHilaryPoitiers": "Saint Hilary of Poitiers, bishop and doctor", - "StAnthonyEgypt": "Saint Anthony of Egypt, abbot", - "StFabianPope": "Saint Fabian, pope and martyr", - "StSebastian": "Saint Sebastian, martyr", - "StAgnes": "Saint Agnes, virgin and martyr", - "StVincentDeacon": "Saint Vincent, deacon and martyr", - "StFrancisDeSales": "Saint Francis de Sales, bishop and doctor", - "ConversionStPaul": "The Conversion of Saint Paul, apostle", - "StsTimothyTitus": "Saints Timothy and Titus, bishops", - "StAngelaMerici": "Saint Angela Merici, virgin", - "StThomasAquinas": "Saint Thomas Aquinas, priest and doctor", - "StJohnBosco": "Saint John Bosco, priest", - "Presentation": "Presentation of the Lord", - "StBlase": "Saint Blase, bishop and martyr", - "StAnsgar": "Saint Ansgar, bishop", - "StAgatha": "Saint Agatha, virgin and martyr", - "StsPaulMiki": "Saints Paul Miki and companions, martyrs", - "StJeromeEmiliani": "Saint Jerome Emiliani, priest", - "StScholastica": "Saint Scholastica, virgin", - "LadyLourdes": "Our Lady of Lourdes", - "StsCyrilMethodius": "Saints Cyril, monk, and Methodius, bishop", - "SevenHolyFounders": "Seven Holy Founders of the Servite Order", - "StPeterDamian": "Saint Peter Damian, bishop and doctor of the Church", - "ChairStPeter": "Chair of Saint Peter, apostle", - "StPolycarp": "Saint Polycarp, bishop and martyr", - "StCasimir": "Saint Casimir", - "StsPerpetuaFelicity": "Saints Perpetua and Felicity, martyrs", - "StJohnGod": "Saint John of God, religious", - "StFrancesRome": "Saint Frances of Rome, religious", - "StPatrick": "Saint Patrick, bishop", - "StCyrilJerusalem": "Saint Cyril of Jerusalem, bishop and doctor", - "StJoseph": "Saint Joseph Husband of the Blessed Virgin Mary", - "StTuribius": "Saint Turibius of Mogrovejo, bishop", - "Annunciation": "Annunciation of the Lord", - "StFrancisPaola": "Saint Francis of Paola, hermit", - "StIsidore": "Saint Isidore, bishop and doctor of the Church", - "StVincentFerrer": "Saint Vincent Ferrer, priest", - "StJohnBaptistDeLaSalle": "Saint John Baptist de la Salle, priest", - "StStanislaus": "Saint Stanislaus, bishop and martyr", - "StMartinPope": "Saint Martin I, pope and martyr", - "StAnselm": "Saint Anselm of Canterbury, bishop and doctor of the Church", - "StGeorge": "Saint George, martyr", - "StFidelisSigmaringen": "Saint Fidelis of Sigmaringen, priest and martyr", - "StMarkEvangelist": "Saint Mark the Evangelist", - "StPeterChanel": "Saint Peter Chanel, priest and martyr", - "StCatherineSiena": "Saint Catherine of Siena, virgin and doctor of the Church", - "StPiusV": "Saint Pius V, pope", - "StJosephWorker": "Saint Joseph the Worker", - "StAthanasius": "Saint Athanasius, bishop and doctor", - "StsPhilipJames": "Saints Philip and James, Apostles", - "StsNereusAchilleus": "Saints Nereus and Achilleus, martyrs", - "StPancras": "Saint Pancras, martyr", - "StMatthiasAp": "Saint Matthias the Apostle", - "StJohnIPope": "Saint John I, pope and martyr", - "StBernardineSiena": "Saint Bernardine of Siena, priest", - "StBedeVenerable": "Saint Bede the Venerable, priest and doctor", - "StGregoryVII": "Saint Gregory VII, pope", - "StMaryMagdalenePazzi": "Saint Mary Magdalene de Pazzi, virgin", - "StPhilipNeri": "Saint Philip Neri, priest", - "StAugustineCanterbury": "Saint Augustine of Canterbury, bishop", - "Visitation": "Visitation of the Blessed Virgin Mary", - "StJustinMartyr": "Saint Justin Martyr", - "StsMarcellinusPeter": "Saints Marcellinus and Peter, martyrs", - "StsCharlesLwanga": "Saints Charles Lwanga and companions, martyrs", - "StBoniface": "Saint Boniface, bishop and martyr", - "StNorbert": "Saint Norbert, bishop", - "StEphrem": "Saint Ephrem, deacon and doctor", - "StBarnabasAp": "Saint Barnabas the Apostle", - "StAnthonyPadua": "Saint Anthony of Padua, priest and doctor", - "StRomuald": "Saint Romuald, abbot", - "StAloysiusGonzaga": "Saint Aloysius Gonzaga, religious", - "StPaulinusNola": "Saint Paulinus of Nola, bishop", - "StsJohnFisherThomasMore": "Saints John Fisher, bishop and martyr and Thomas More, martyr", - "NativityJohnBaptist": "Nativity of Saint John the Baptist", - "StCyrilAlexandria": "Saint Cyril of Alexandria, bishop and doctor", - "StIrenaeus": "Saint Irenaeus, bishop and martyr", - "StsPeterPaulAp": "Saints Peter and Paul, Apostles", - "FirstMartyrsRome": "First Martyrs of the Church of Rome", - "StThomasAp": "Saint Thomas the Apostle", - "StElizabethPortugal": "Saint Elizabeth of Portugal", - "StAnthonyZaccaria": "Saint Anthony Zaccaria, priest", - "StMariaGoretti": "Saint Maria Goretti, virgin and martyr", - "StBenedict": "Saint Benedict, abbot", - "StHenry": "Saint Henry", - "StCamillusDeLellis": "Saint Camillus de Lellis, priest", - "StBonaventure": "Saint Bonaventure, bishop and doctor", - "LadyMountCarmel": "Our Lady of Mount Carmel", - "StLawrenceBrindisi": "Saint Lawrence of Brindisi, priest and doctor", - "StMaryMagdalene": "Saint Mary Magdalene", - "StBridget": "Saint Bridget, religious", - "StJamesAp": "Saint James, apostle", - "StsJoachimAnne": "Saints Joachim and Anne", - "StMartha": "Saint Martha", - "StPeterChrysologus": "Saint Peter Chrysologus, bishop and doctor", - "StIgnatiusLoyola": "Saint Ignatius of Loyola, priest", - "StAlphonsusMariaDeLiguori": "Saint Alphonsus Maria de Liguori, bishop and doctor of the Church", - "StEusebius": "Saint Eusebius of Vercelli, bishop", - "StJeanVianney": "Saint Jean Vianney (the Curé of Ars), priest", - "DedicationStMaryMajor": "Dedication of the Basilica of Saint Mary Major", - "Transfiguration": "Transfiguration of the Lord", - "StSixtusIIPope": "Saint Sixtus II, pope, and companions, martyrs", - "StCajetan": "Saint Cajetan, priest", - "StDominic": "Saint Dominic, priest", - "StLawrenceDeacon": "Saint Lawrence, deacon and martyr", - "StClare": "Saint Clare, virgin", - "StJaneFrancesDeChantal": "Saint Jane Frances de Chantal, religious", - "StsPontianHippolytus": "Saints Pontian, pope, and Hippolytus, priest, martyrs", - "Assumption": "Assumption of the Blessed Virgin Mary", - "StStephenHungary": "Saint Stephen of Hungary", - "StJohnEudes": "Saint John Eudes, priest", - "StBernardClairvaux": "Saint Bernard of Clairvaux, abbot and doctor of the Church", - "StPiusX": "Saint Pius X, pope", - "QueenshipMary": "Queenship of Blessed Virgin Mary", - "StRoseLima": "Saint Rose of Lima, virgin", - "StBartholomewAp": "Saint Bartholomew the Apostle", - "StLouis": "Saint Louis", - "StJosephCalasanz": "Saint Joseph Calasanz, priest", - "StMonica": "Saint Monica", - "StAugustineHippo": "Saint Augustine of Hippo, bishop and doctor of the Church", - "BeheadingJohnBaptist": "The Beheading of Saint John the Baptist, martyr", - "StGregoryGreat": "Saint Gregory the Great, pope and doctor", - "NativityVirginMary": "Nativity of the Blessed Virgin Mary", - "StJohnChrysostom": "Saint John Chrysostom, bishop and doctor", - "ExaltationCross": "Exaltation of the Holy Cross", - "LadySorrows": "Our Lady of Sorrows", - "StsCorneliusCyprian": "Saints Cornelius, pope, and Cyprian, bishop, martyrs", - "StRobertBellarmine": "Saint Robert Bellarmine, bishop and doctor", - "StJanuarius": "Saint Januarius, bishop and martyr", - "StMatthewEvangelist": "Saint Matthew the Evangelist, Apostle", - "StsCosmasDamian": "Saints Cosmas and Damian, martyrs", - "StVincentDePaul": "Saint Vincent de Paul, priest", - "StWenceslaus": "Saint Wenceslaus, martyr", - "StsArchangels": "Saints Michael, Gabriel and Raphael, Archangels", - "StJerome": "Saint Jerome, priest and doctor", - "StThereseChildJesus": "Saint Thérèse of the Child Jesus, virgin", - "GuardianAngels": "Guardian Angels", - "StFrancisAssisi": "Saint Francis of Assisi", - "StBruno": "Saint Bruno, priest", - "LadyRosary": "Our Lady of the Rosary", - "StDenis": "Saint Denis, bishop, and companions, martyrs", - "StJohnLeonardi": "Saint John Leonardi, priest", - "StCallistusIPope": "Saint Callistus I, pope and martyr", - "StTeresaJesus": "Saint Teresa of Jesus, virgin and doctor", - "StHedwig": "Saint Hedwig, religious", - "StMargaretAlacoque": "Saint Margaret Mary Alacoque, virgin", - "StIgnatiusAntioch": "Saint Ignatius of Antioch, bishop and martyr", - "StLukeEvangelist": "Saint Luke the Evangelist", - "StsJeanBrebeuf": "Saints John de Brébeuf and Isaac Jogues, Priests, and Companions, Martyrs", - "StPaulCross": "Saint Paul of the Cross, Priest", - "StJohnCapistrano": "Saint John of Capistrano, priest", - "StAnthonyMaryClaret": "Saint Anthony Mary Claret, bishop", - "StSimonStJudeAp": "Saint Simon and Saint Jude, apostles", - "AllSaints": "All Saints Day", - "AllSouls": "Commemoration of all the Faithful Departed (All Souls' Day)", - "StMartinPorres": "Saint Martin de Porres, religious", - "StCharlesBorromeo": "Saint Charles Borromeo, bishop", - "DedicationLateran": "Dedication of the Lateran basilica", - "StLeoGreat": "Saint Leo the Great, pope and doctor", - "StMartinTours": "Saint Martin of Tours, bishop", - "StJosaphat": "Saint Josaphat, bishop and martyr", - "StAlbertGreat": "Saint Albert the Great, bishop and doctor", - "StMargaretScotland": "Saint Margaret of Scotland", - "StGertrudeGreat": "Saint Gertrude the Great, virgin", - "StElizabethHungary": "Saint Elizabeth of Hungary, religious", - "DedicationStsPeterPaul": "Dedication of the basilicas of Saints Peter and Paul, Apostles", - "PresentationMary": "Presentation of the Blessed Virgin Mary", - "StCecilia": "Saint Cecilia, virgin and martyr", - "StClementIPope": "Saint Clement I, pope and martyr", - "StColumban": "Saint Columban, religious", - "StAndrewAp": "Saint Andrew the Apostle", - "StFrancisXavier": "Saint Francis Xavier, priest", - "StJohnDamascene": "Saint John Damascene, priest and doctor", - "StNicholas": "Saint Nicholas, bishop", - "StAmbrose": "Saint Ambrose, bishop and doctor", - "ImmaculateConception": "Immaculate Conception of the Blessed Virgin Mary", - "StDamasusIPope": "Saint Damasus I, pope", - "StLucySyracuse": "Saint Lucy of Syracuse, virgin and martyr", - "StJohnCross": "Saint John of the Cross, priest and doctor", - "StPeterCanisius": "Saint Peter Canisius, priest and doctor", - "StJohnKanty": "Saint John of Kanty, priest", - "StStephenProtomartyr": "Saint Stephen, the first martyr", - "StJohnEvangelist": "Saint John, Apostle and Evangelist", - "HolyInnocents": "Holy Innocents, martyrs", - "StThomasBecket": "Saint Thomas Becket, bishop and martyr", - "StSylvesterIPope": "Saint Sylvester I, pope" -} \ No newline at end of file +{ + "StsBasilGreg": "Saints Basil the Great and Gregory Nazianzen, Bishops and Doctors of the Church", + "StRayPenyafort": "Saint Raymond of Penyafort, Priest", + "StHilaryPoitiers": "Saint Hilary, Bishop and Doctor of the Church", + "StAnthonyEgypt": "Saint Anthony, Abbot", + "StFabianPope": "Saint Fabian, Pope and Martyr", + "StSebastian": "Saint Sebastian, Martyr", + "StAgnes": "Saint Agnes, Virgin and Martyr", + "StVincentDeacon": "Saint Vincent, Deacon and Martyr", + "StFrancisDeSales": "Saint Francis de Sales, Bishop and Doctor of the Church", + "ConversionStPaul": "The Conversion of Saint Paul the Apostle", + "StsTimothyTitus": "Saints Timothy and Titus, Bishops", + "StAngelaMerici": "Saint Angela Merici, Virgin", + "StThomasAquinas": "Saint Thomas Aquinas, Priest and Doctor of the Church", + "StJohnBosco": "Saint John Bosco, Priest", + "Presentation": "Presentation of the Lord", + "StBlase": "Saint Blase, Bishop and Martyr", + "StAnsgar": "Saint Ansgar, Bishop", + "StAgatha": "Saint Agatha, Virgin and Martyr", + "StsPaulMiki": "Saint Paul Miki and Companions, Martyrs", + "StJeromeEmiliani": "Saint Jerome Emiliani, Priest", + "StScholastica": "Saint Scholastica, Virgin", + "LadyLourdes": "Our Lady of Lourdes", + "StsCyrilMethodius": "Saints Cyril, Monk, and Methodius, Bishop", + "SevenHolyFounders": "The Seven Holy Founders of the Servite Order", + "StPeterDamian": "Saint Peter Damian, Bishop and Doctor of the Church", + "ChairStPeter": "The Chair of Saint Peter the Apostle", + "StPolycarp": "Saint Polycarp, Bishop and Martyr", + "StCasimir": "Saint Casimir", + "StsPerpetuaFelicity": "Saints Perpetua and Felicity, Martyrs", + "StJohnGod": "Saint John of God, Religious", + "StFrancesRome": "Saint Frances of Rome, Religious", + "StPatrick": "Saint Patrick, Bishop", + "StCyrilJerusalem": "Saint Cyril of Jerusalem, Bishop and Doctor of the Church", + "StJoseph": "Saint Joseph Husband of the Blessed Virgin Mary", + "StTuribius": "Saint Turibius of Mogrovejo, Bishop", + "Annunciation": "Annunciation of the Lord", + "StFrancisPaola": "Saint Francis of Paola, Hermit", + "StIsidore": "Saint Isidore, Bishop and Doctor of the Church", + "StVincentFerrer": "Saint Vincent Ferrer, Priest", + "StJohnBaptistDeLaSalle": "Saint John Baptist de la Salle, Priest", + "StStanislaus": "Saint Stanislaus, Bishop and Martyr", + "StMartinPope": "Saint Martin I, Pope and Martyr", + "StAnselm": "Saint Anselm, Bishop and Doctor of the Church", + "StGeorge": "Saint George, Martyr", + "StFidelisSigmaringen": "Saint Fidelis of Sigmaringen, Priest and Martyr", + "StMarkEvangelist": "Saint Mark the Evangelist", + "StPeterChanel": "Saint Peter Chanel, Priest and Martyr", + "StCatherineSiena": "Saint Catherine of Siena, Virgin and Doctor of the Church", + "StPiusV": "Saint Pius V, Pope", + "StJosephWorker": "Saint Joseph the Worker", + "StAthanasius": "Saint Athanasius, Bishop and Doctor of the Church", + "StsPhilipJames": "Saints Philip and James, Apostles", + "StsNereusAchilleus": "Saints Nereus and Achilleus, Martyrs", + "StPancras": "Saint Pancras, Martyr", + "StMatthiasAp": "Saint Matthias the Apostle", + "StJohnIPope": "Saint John I, Pope and Martyr", + "StBernardineSiena": "Saint Bernardine of Siena, Priest", + "StBedeVenerable": "Saint Bede the Venerable, Priest and Doctor of the Church", + "StGregoryVII": "Saint Gregory VII, Pope", + "StMaryMagdalenePazzi": "Saint Mary Magdalene de Pazzi, Virgin", + "StPhilipNeri": "Saint Philip Neri, Priest", + "StAugustineCanterbury": "Saint Augustine of Canterbury, Bishop", + "Visitation": "Visitation of the Blessed Virgin Mary", + "StJustinMartyr": "Saint Justin Martyr", + "StsMarcellinusPeter": "Saints Marcellinus and Peter, Martyrs", + "StsCharlesLwanga": "Saint Charles Lwanga and Companions, Martyrs", + "StBoniface": "Saint Boniface, Bishop and Martyr", + "StNorbert": "Saint Norbert, Bishop", + "StEphrem": "Saint Ephrem, Deacon and Doctor of the Church", + "StBarnabasAp": "Saint Barnabas the Apostle", + "StAnthonyPadua": "Saint Anthony of Padua, Priest and Doctor of the Church", + "StRomuald": "Saint Romuald, Abbot", + "StAloysiusGonzaga": "Saint Aloysius Gonzaga, Religious", + "StPaulinusNola": "Saint Paulinus of Nola, Bishop", + "StsJohnFisherThomasMore": "Saints John Fisher, Bishop, and Thomas More, Martyrs", + "NativityJohnBaptist": "The Nativity of Saint John the Baptist", + "StCyrilAlexandria": "Saint Cyril of Alexandria, Bishop and Doctor of the Church", + "StIrenaeus": "Saint Irenaeus, Bishop and Martyr", + "StsPeterPaulAp": "Saints Peter and Paul, Apostles", + "FirstMartyrsRome": "The First Martyrs of the Holy Roman Church", + "StThomasAp": "Saint Thomas the Apostle", + "StElizabethPortugal": "Saint Elizabeth of Portugal", + "StAnthonyZaccaria": "Saint Anthony Zaccaria, Priest", + "StMariaGoretti": "Saint Maria Goretti, Virgin and Martyr", + "StBenedict": "Saint Benedict, Abbot", + "StHenry": "Saint Henry", + "StCamillusDeLellis": "Saint Camillus de Lellis, Priest", + "StBonaventure": "Saint Bonaventure, Bishop and Doctor of the Church", + "LadyMountCarmel": "Our Lady of Mount Carmel", + "StLawrenceBrindisi": "Saint Lawrence of Brindisi, Priest and Doctor of the Church", + "StMaryMagdalene": "Saint Mary Magdalene", + "StBridget": "Saint Bridget, Religious", + "StJamesAp": "Saint James, Apostle", + "StsJoachimAnne": "Saints Joachim and Anne, Parents of the Blessed Virgin Mary", + "StMartha": "Saint Martha", + "StPeterChrysologus": "Saint Peter Chrysologus, Bishop and Doctor of the Church", + "StIgnatiusLoyola": "Saint Ignatius of Loyola, Priest", + "StAlphonsusMariaDeLiguori": "Saint Alphonsus Mary Liguori, Bishop and Doctor of the Church", + "StEusebius": "Saint Eusebius of Vercelli, Bishop", + "StJeanVianney": "Saint John Mary Vianney, Priest", + "DedicationStMaryMajor": "The Dedication of the Basilica of Saint Mary Major", + "Transfiguration": "The Transfiguration of the Lord", + "StSixtusIIPope": "Saint Sixtus II, Pope, and Companions, Martyrs", + "StCajetan": "Saint Cajetan, Priest", + "StDominic": "Saint Dominic, Priest", + "StLawrenceDeacon": "Saint Lawrence, Deacon and Martyr", + "StClare": "Saint Clare, Virgin", + "StJaneFrancesDeChantal": "Saint Jane Frances de Chantal, Religious", + "StsPontianHippolytus": "Saints Pontian, Pope, and Hippolytus, Priest, Martyrs", + "Assumption": "The Assumption of the Blessed Virgin Mary", + "StStephenHungary": "Saint Stephen of Hungary", + "StJohnEudes": "Saint John Eudes, Priest", + "StBernardClairvaux": "Saint Bernard, Abbot and Doctor of the Church", + "StPiusX": "Saint Pius X, Pope", + "QueenshipMary": "The Queenship of the Blessed Virgin Mary", + "StRoseLima": "Saint Rose of Lima, virgin", + "StBartholomewAp": "Saint Bartholomew, Apostle", + "StLouis": "Saint Louis", + "StJosephCalasanz": "Saint Joseph Calasanz, Priest", + "StMonica": "Saint Monica", + "StAugustineHippo": "Saint Augustine, Bishop and Doctor of the Church", + "BeheadingJohnBaptist": "The Beheading of Saint John the Baptist, Martyr", + "StGregoryGreat": "Saint Gregory the Great, Pope and Doctor of the Church", + "NativityVirginMary": "The Nativity of the Blessed Virgin Mary", + "StJohnChrysostom": "Saint John Chrysostom, Bishop and Doctor of the Church", + "ExaltationCross": "Exaltation of the Holy Cross", + "LadySorrows": "Our Lady of Sorrows", + "StsCorneliusCyprian": "Saints Cornelius, Pope, and Cyprian, Bishop, Martyrs", + "StRobertBellarmine": "Saint Robert Bellarmine, Bishop and Doctor of the Church", + "StJanuarius": "Saint Januarius, Bishop and Martyr", + "StMatthewEvangelist": "Saint Matthew, Apostle and Evangelist", + "StsCosmasDamian": "Saints Cosmas and Damian, Martyrs", + "StVincentDePaul": "Saint Vincent de Paul, Priest", + "StWenceslaus": "Saint Wenceslaus, Martyr", + "StsArchangels": "Saints Michael, Gabriel and Raphael, Archangels", + "StJerome": "Saint Jerome, Priest and Doctor of the Church", + "StThereseChildJesus": "Saint Thérèse of the Child Jesus, Virgin", + "GuardianAngels": "The Holy Guardian Angels", + "StFrancisAssisi": "Saint Francis of Assisi", + "StBruno": "Saint Bruno, Priest", + "LadyRosary": "Our Lady of the Rosary", + "StDenis": "Saint Denis, Bishop, and Companions, Martyrs", + "StJohnLeonardi": "Saint John Leonardi, Priest", + "StCallistusIPope": "Saint Callistus I, Pope and Martyr", + "StTeresaJesus": "Saint Teresa of Jesus, Virgin and Doctor of the Church", + "StHedwig": "Saint Hedwig, Religious", + "StMargaretAlacoque": "Saint Margaret Mary Alacoque, Virgin", + "StIgnatiusAntioch": "Saint Ignatius of Antioch, Bishop and Martyr", + "StLukeEvangelist": "Saint Luke, Evangelist", + "StsJeanBrebeuf": "Saints John de Brébeuf and Isaac Jogues, Priests, and Companions, Martyrs", + "StPaulCross": "Saint Paul of the Cross, Priest", + "StJohnCapistrano": "Saint John of Capestrano, Priest", + "StAnthonyMaryClaret": "Saint Anthony Mary Claret, Bishop", + "StSimonStJudeAp": "Saints Simon and Jude, Apostles", + "AllSaints": "All Saints", + "AllSouls": "The Commemoration of all the Faithful Departed (All Souls' Day)", + "StMartinPorres": "Saint Martin de Porres, Religious", + "StCharlesBorromeo": "Saint Charles Borromeo, Bishop", + "DedicationLateran": "The Dedication of the Lateran Basilica", + "StLeoGreat": "Saint Leo the Great, Pope and Doctor of the Church", + "StMartinTours": "Saint Martin of Tours, Bishop", + "StJosaphat": "Saint Josaphat, Bishop and Martyr", + "StAlbertGreat": "Saint Albert the Great, Bishop and Doctor of the Church", + "StMargaretScotland": "Saint Margaret of Scotland", + "StGertrudeGreat": "Saint Gertrude the Great, Virgin", + "StElizabethHungary": "Saint Elizabeth of Hungary, Religious", + "DedicationStsPeterPaul": "The Dedication of the Basilicas of Saints Peter and Paul, Apostles", + "PresentationMary": "The Presentation of the Blessed Virgin Mary", + "StCecilia": "Saint Cecilia, Virgin and Martyr", + "StClementIPope": "Saint Clement I, Pope and Martyr", + "StColumban": "Saint Columban, Religious", + "StAndrewAp": "Saint Andrew, Apostle", + "StFrancisXavier": "Saint Francis Xavier, Priest", + "StJohnDamascene": "Saint John Damascene, Priest and Doctor of the Church", + "StNicholas": "Saint Nicholas, Bishop", + "StAmbrose": "Saint Ambrose, Bishop and Doctor of the Church", + "ImmaculateConception": "The Immaculate Conception of the Blessed Virgin Mary", + "StDamasusIPope": "Saint Damasus I, Pope", + "StLucySyracuse": "Saint Lucy of Syracuse, Virgin and Martyr", + "StJohnCross": "Saint John of the Cross, Priest and Doctor of the Church", + "StPeterCanisius": "Saint Peter Canisius, Priest and Doctor of the Church", + "StJohnKanty": "Saint John of Kanty, Priest", + "StStephenProtomartyr": "Saint Stephen, The First Martyr", + "StJohnEvangelist": "Saint John, Apostle and Evangelist", + "HolyInnocents": "The Holy Innocents, Martyrs", + "StThomasBecket": "Saint Thomas Becket, Bishop and Martyr", + "StSylvesterIPope": "Saint Sylvester I, Pope" +} diff --git a/data/propriumdesanctis_1970/propriumdesanctis_1970.json b/data/propriumdesanctis_1970/propriumdesanctis_1970.json index 3a682243..ff5469e2 100644 --- a/data/propriumdesanctis_1970/propriumdesanctis_1970.json +++ b/data/propriumdesanctis_1970/propriumdesanctis_1970.json @@ -4,9 +4,13 @@ "DAY": 2, "TAG": "StsBasilGreg", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Ef 4, 1-7.11-13", "RESPONSORIAL_PSALM": "Salmo 23", @@ -20,9 +24,13 @@ "DAY": 7, "TAG": "StRayPenyafort", "GRADE": 2, - "COMMON": "Pastors:For One Pastor", + "COMMON": [ + "Pastors:For One Pastor" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "2 Cor 5, 14-20", "RESPONSORIAL_PSALM": "Salmo 103", @@ -36,9 +44,14 @@ "DAY": 13, "TAG": "StHilaryPoitiers", "GRADE": 2, - "COMMON": "Pastors:For a Bishop,Doctors", + "COMMON": [ + "Pastors:For a Bishop", + "Doctors" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "1Gv 2, 18-25", "RESPONSORIAL_PSALM": "Salmo 110", @@ -52,9 +65,13 @@ "DAY": 17, "TAG": "StAnthonyEgypt", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Ef 6, 10-13.18", "RESPONSORIAL_PSALM": "Salmo 16", @@ -68,9 +85,15 @@ "DAY": 20, "TAG": "StFabianPope", "GRADE": 2, - "COMMON": "Martyrs:For One Martyr,Pastors:For a Pope", + "COMMON": [ + "Martyrs:For One Martyr", + "Pastors:For a Pope" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "1 Pt 5, 1-4", "RESPONSORIAL_PSALM": "Salmo 40", @@ -84,9 +107,13 @@ "DAY": 20, "TAG": "StSebastian", "GRADE": 2, - "COMMON": "Martyrs:For One Martyr", + "COMMON": [ + "Martyrs:For One Martyr" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "1 Pt 3, 14-17", "RESPONSORIAL_PSALM": "Salmo 34", @@ -100,9 +127,15 @@ "DAY": 21, "TAG": "StAgnes", "GRADE": 3, - "COMMON": "Martyrs:For a Virgin Martyr,Virgins:For One Virgin", + "COMMON": [ + "Martyrs:For a Virgin Martyr", + "Virgins:For One Virgin" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "1Cor 1, 26-31", "RESPONSORIAL_PSALM": "Salmo 23", @@ -116,9 +149,13 @@ "DAY": 22, "TAG": "StVincentDeacon", "GRADE": 2, - "COMMON": "Martyrs:For One Martyr", + "COMMON": [ + "Martyrs:For One Martyr" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "2 Cor 4, 7-15", "RESPONSORIAL_PSALM": "Salmo 34", @@ -132,9 +169,14 @@ "DAY": 24, "TAG": "StFrancisDeSales", "GRADE": 3, - "COMMON": "Pastors:For a Bishop,Doctors", + "COMMON": [ + "Pastors:For a Bishop", + "Doctors" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Ef 3, 8-12", "RESPONSORIAL_PSALM": "Salmo 37", @@ -148,9 +190,13 @@ "DAY": 25, "TAG": "ConversionStPaul", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "At 22, 3-16|At 9, 1-22", "RESPONSORIAL_PSALM": "Salmo 117", @@ -164,9 +210,13 @@ "DAY": 26, "TAG": "StsTimothyTitus", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "2Tim 1, 1-8|Tito 1, 1-5", "RESPONSORIAL_PSALM": "Salmo 96", @@ -180,9 +230,14 @@ "DAY": 27, "TAG": "StAngelaMerici", "GRADE": 2, - "COMMON": "Virgins:For One Virgin,Holy Men and Women:For Educators", + "COMMON": [ + "Virgins:For One Virgin", + "Holy Men and Women:For Educators" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "1 Pt 4, 7-11", "RESPONSORIAL_PSALM": "Salmo 148", @@ -196,9 +251,14 @@ "DAY": 28, "TAG": "StThomasAquinas", "GRADE": 3, - "COMMON": "Pastors:For One Pastor,Doctors", + "COMMON": [ + "Pastors:For One Pastor", + "Doctors" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Sap 7, 7-10.15-16", "RESPONSORIAL_PSALM": "Salmo 119", @@ -212,9 +272,14 @@ "DAY": 31, "TAG": "StJohnBosco", "GRADE": 3, - "COMMON": "Pastors:For One Pastor,Holy Men and Women:For Educators", + "COMMON": [ + "Pastors:For One Pastor", + "Holy Men and Women:For Educators" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Fil 4, 4-9", "RESPONSORIAL_PSALM": "Salmo 103", @@ -228,9 +293,13 @@ "DAY": 2, "TAG": "Presentation", "GRADE": 5, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Mal 3, 1-4", "RESPONSORIAL_PSALM": "Sal 24", @@ -244,9 +313,15 @@ "DAY": 3, "TAG": "StBlase", "GRADE": 2, - "COMMON": "Martyrs:For One Martyr,Pastors:For a Bishop", + "COMMON": [ + "Martyrs:For One Martyr", + "Pastors:For a Bishop" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "Rm 5, 1-5", "RESPONSORIAL_PSALM": "Salmo 117", @@ -260,9 +335,14 @@ "DAY": 3, "TAG": "StAnsgar", "GRADE": 2, - "COMMON": "Pastors:For a Bishop,Pastors:For Missionaries", + "COMMON": [ + "Pastors:For a Bishop", + "Pastors:For Missionaries" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Is 52, 7-10", "RESPONSORIAL_PSALM": "Salmo 96", @@ -276,9 +356,15 @@ "DAY": 5, "TAG": "StAgatha", "GRADE": 3, - "COMMON": "Martyrs:For a Virgin Martyr,Virgins:For One Virgin", + "COMMON": [ + "Martyrs:For a Virgin Martyr", + "Virgins:For One Virgin" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "1Cor 1, 26-31", "RESPONSORIAL_PSALM": "Salmo 31", @@ -292,9 +378,13 @@ "DAY": 6, "TAG": "StsPaulMiki", "GRADE": 3, - "COMMON": "Martyrs:For Several Martyrs", + "COMMON": [ + "Martyrs:For Several Martyrs" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "Gal 2, 19-20", "RESPONSORIAL_PSALM": "Salmo 126", @@ -308,9 +398,13 @@ "DAY": 8, "TAG": "StJeromeEmiliani", "GRADE": 2, - "COMMON": "Holy Men and Women:For Educators", + "COMMON": [ + "Holy Men and Women:For Educators" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Tb 12, 6-13", "RESPONSORIAL_PSALM": "Salmo 34", @@ -324,9 +418,14 @@ "DAY": 10, "TAG": "StScholastica", "GRADE": 3, - "COMMON": "Virgins:For One Virgin,Holy Men and Women:For a Nun", + "COMMON": [ + "Virgins:For One Virgin", + "Holy Men and Women:For a Nun" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Ct 8, 6-7", "RESPONSORIAL_PSALM": "Salmo 148", @@ -340,9 +439,13 @@ "DAY": 11, "TAG": "LadyLourdes", "GRADE": 2, - "COMMON": "Blessed Virgin Mary", + "COMMON": [ + "Blessed Virgin Mary" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Is 66, 10-14c", "RESPONSORIAL_PSALM": "Gdt Gdt 13, 18-19", @@ -356,9 +459,13 @@ "DAY": 14, "TAG": "StsCyrilMethodius", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "At 13, 46-49|Is 52, 7-10", "RESPONSORIAL_PSALM": "Salmo 117", @@ -372,9 +479,13 @@ "DAY": 17, "TAG": "SevenHolyFounders", "GRADE": 2, - "COMMON": "Holy Men and Women:For Religious", + "COMMON": [ + "Holy Men and Women:For Religious" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Rm 8, 26-30", "RESPONSORIAL_PSALM": "Salmo 34", @@ -388,9 +499,14 @@ "DAY": 21, "TAG": "StPeterDamian", "GRADE": 2, - "COMMON": "Pastors:For a Bishop,Doctors", + "COMMON": [ + "Pastors:For a Bishop", + "Doctors" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "2 Tm 4, 1-5", "RESPONSORIAL_PSALM": "Salmo 16", @@ -404,9 +520,13 @@ "DAY": 22, "TAG": "ChairStPeter", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "1Pt 5, 1-4", "RESPONSORIAL_PSALM": "Salmo 23", @@ -420,9 +540,15 @@ "DAY": 23, "TAG": "StPolycarp", "GRADE": 3, - "COMMON": "Martyrs:For One Martyr,Pastors:For a Bishop", + "COMMON": [ + "Martyrs:For One Martyr", + "Pastors:For a Bishop" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "Ap 2, 8-11", "RESPONSORIAL_PSALM": "Salmo 31", @@ -436,9 +562,13 @@ "DAY": 4, "TAG": "StCasimir", "GRADE": 2, - "COMMON": "Holy Men and Women:For One Saint", + "COMMON": [ + "Holy Men and Women:For One Saint" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Fil 3, 8-14", "RESPONSORIAL_PSALM": "Salmo 15", @@ -452,9 +582,13 @@ "DAY": 7, "TAG": "StsPerpetuaFelicity", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "Rm 8, 31b-39", "RESPONSORIAL_PSALM": "Salmo 124", @@ -468,9 +602,14 @@ "DAY": 8, "TAG": "StJohnGod", "GRADE": 2, - "COMMON": "Holy Men and Women:For Religious,Holy Men and Women:For Those Who Practiced Works of Mercy", + "COMMON": [ + "Holy Men and Women:For Religious", + "Holy Men and Women:For Those Who Practiced Works of Mercy" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "1 Gv 3, 14-18", "RESPONSORIAL_PSALM": "Salmo 112", @@ -484,9 +623,14 @@ "DAY": 9, "TAG": "StFrancesRome", "GRADE": 2, - "COMMON": "Holy Men and Women:For Religious,Holy Men and Women:For Holy Women", + "COMMON": [ + "Holy Men and Women:For Religious", + "Holy Men and Women:For Holy Women" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Pr 31, 10-13.19-20.30-31", "RESPONSORIAL_PSALM": "Salmo 34", @@ -500,9 +644,14 @@ "DAY": 17, "TAG": "StPatrick", "GRADE": 2, - "COMMON": "Pastors:For a Bishop,Pastors:For Missionaries", + "COMMON": [ + "Pastors:For a Bishop", + "Pastors:For Missionaries" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "1 Pt 4, 7-11", "RESPONSORIAL_PSALM": "Salmo 96", @@ -516,9 +665,14 @@ "DAY": 18, "TAG": "StCyrilJerusalem", "GRADE": 2, - "COMMON": "Pastors:For a Bishop,Doctors", + "COMMON": [ + "Pastors:For a Bishop", + "Doctors" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "1 Gv 5, 1-5", "RESPONSORIAL_PSALM": "Salmo 19", @@ -532,9 +686,13 @@ "DAY": 19, "TAG": "StJoseph", "GRADE": 6, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "2Sam 7, 4-5a.12-14a.16", "RESPONSORIAL_PSALM": "Salmo 89", @@ -548,9 +706,13 @@ "DAY": 23, "TAG": "StTuribius", "GRADE": 2, - "COMMON": "Pastors:For a Bishop", + "COMMON": [ + "Pastors:For a Bishop" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "2 Tm 1, 13-14; 2, 1-3", "RESPONSORIAL_PSALM": "Salmo 96", @@ -564,9 +726,13 @@ "DAY": 25, "TAG": "Annunciation", "GRADE": 6, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Is 7, 10-14; 8, 10c", "RESPONSORIAL_PSALM": "Salmo 40", @@ -580,9 +746,13 @@ "DAY": 2, "TAG": "StFrancisPaola", "GRADE": 2, - "COMMON": "Holy Men and Women:For Religious", + "COMMON": [ + "Holy Men and Women:For Religious" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Fil 3, 8-14", "RESPONSORIAL_PSALM": "Salmo 16", @@ -596,9 +766,14 @@ "DAY": 4, "TAG": "StIsidore", "GRADE": 2, - "COMMON": "Pastors:For a Bishop,Doctors", + "COMMON": [ + "Pastors:For a Bishop", + "Doctors" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "2 Cor 4, 1-2.5-7", "RESPONSORIAL_PSALM": "Salmo 37", @@ -612,9 +787,13 @@ "DAY": 5, "TAG": "StVincentFerrer", "GRADE": 2, - "COMMON": "Pastors:For Missionaries", + "COMMON": [ + "Pastors:For Missionaries" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "2 Tm 4, 1-5", "RESPONSORIAL_PSALM": "Salmo 40", @@ -628,9 +807,14 @@ "DAY": 7, "TAG": "StJohnBaptistDeLaSalle", "GRADE": 3, - "COMMON": "Pastors:For One Pastor,Holy Men and Women:For Educators", + "COMMON": [ + "Pastors:For One Pastor", + "Holy Men and Women:For Educators" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "1Tim 1, 13-14; 2, 1-3", "RESPONSORIAL_PSALM": "Salmo 1", @@ -644,9 +828,15 @@ "DAY": 11, "TAG": "StStanislaus", "GRADE": 3, - "COMMON": "Martyrs:For One Martyr,Pastors:For a Bishop", + "COMMON": [ + "Martyrs:For One Martyr", + "Pastors:For a Bishop" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "Ap 12, 10-12a", "RESPONSORIAL_PSALM": "Salmo 34", @@ -660,9 +850,15 @@ "DAY": 13, "TAG": "StMartinPope", "GRADE": 2, - "COMMON": "Martyrs:For One Martyr,Pastors:For a Pope", + "COMMON": [ + "Martyrs:For One Martyr", + "Pastors:For a Pope" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "2 Tm 2, 8-13; 3, 10-12", "RESPONSORIAL_PSALM": "Salmo 126", @@ -676,9 +872,14 @@ "DAY": 21, "TAG": "StAnselm", "GRADE": 2, - "COMMON": "Pastors:For a Bishop,Doctors", + "COMMON": [ + "Pastors:For a Bishop", + "Doctors" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Ef 3, 14-19", "RESPONSORIAL_PSALM": "Salmo 34", @@ -692,9 +893,13 @@ "DAY": 23, "TAG": "StGeorge", "GRADE": 2, - "COMMON": "Martyrs:For One Martyr", + "COMMON": [ + "Martyrs:For One Martyr" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "Ap 21, 5-7", "RESPONSORIAL_PSALM": "Salmo 126", @@ -708,9 +913,15 @@ "DAY": 24, "TAG": "StFidelisSigmaringen", "GRADE": 2, - "COMMON": "Martyrs:For One Martyr,Pastors:For One Pastor", + "COMMON": [ + "Martyrs:For One Martyr", + "Pastors:For One Pastor" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "Col 1, 24-29", "RESPONSORIAL_PSALM": "Salmo 34", @@ -724,9 +935,13 @@ "DAY": 25, "TAG": "StMarkEvangelist", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "1Pt 5, 5b-14", "RESPONSORIAL_PSALM": "Salmo 89", @@ -740,9 +955,15 @@ "DAY": 28, "TAG": "StPeterChanel", "GRADE": 2, - "COMMON": "Martyrs:For One Martyr,Pastors:For Missionaries", + "COMMON": [ + "Martyrs:For One Martyr", + "Pastors:For Missionaries" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "1 Cor 1, 18-25", "RESPONSORIAL_PSALM": "Salmo 117", @@ -756,9 +977,13 @@ "DAY": 29, "TAG": "StCatherineSiena", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "1Gv 1, 5 – 2, 2", "RESPONSORIAL_PSALM": "Salmo 103", @@ -772,9 +997,13 @@ "DAY": 30, "TAG": "StPiusV", "GRADE": 2, - "COMMON": "Pastors:For a Pope", + "COMMON": [ + "Pastors:For a Pope" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "1 Cor 4, 1-5", "RESPONSORIAL_PSALM": "Salmo 110", @@ -788,9 +1017,13 @@ "DAY": 1, "TAG": "StJosephWorker", "GRADE": 2, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Gen 1, 26 – 2, 3|Col 3, 14-15.17.23-24", "RESPONSORIAL_PSALM": "Salmo 90", @@ -804,9 +1037,13 @@ "DAY": 2, "TAG": "StAthanasius", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "1Gv 5, 1-5", "RESPONSORIAL_PSALM": "Salmo 37", @@ -820,9 +1057,13 @@ "DAY": 3, "TAG": "StsPhilipJames", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "1Cor 15, 1-8a", "RESPONSORIAL_PSALM": "Salmo 19", @@ -836,9 +1077,13 @@ "DAY": 12, "TAG": "StsNereusAchilleus", "GRADE": 2, - "COMMON": "Martyrs:For Several Martyrs", + "COMMON": [ + "Martyrs:For Several Martyrs" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "Ap 7, 9-17", "RESPONSORIAL_PSALM": "Salmo 124", @@ -852,9 +1097,13 @@ "DAY": 12, "TAG": "StPancras", "GRADE": 2, - "COMMON": "Martyrs:For One Martyr", + "COMMON": [ + "Martyrs:For One Martyr" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "Ap 19, 1.5-9a", "RESPONSORIAL_PSALM": "Salmo 103", @@ -868,9 +1117,13 @@ "DAY": 14, "TAG": "StMatthiasAp", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "At 1, 15-17.20-26", "RESPONSORIAL_PSALM": "Salmo 113", @@ -884,9 +1137,15 @@ "DAY": 18, "TAG": "StJohnIPope", "GRADE": 2, - "COMMON": "Martyrs:For One Martyr,Pastors:For a Pope", + "COMMON": [ + "Martyrs:For One Martyr", + "Pastors:For a Pope" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "Ap 3, 14b.20-22", "RESPONSORIAL_PSALM": "Salmo 23", @@ -900,9 +1159,14 @@ "DAY": 20, "TAG": "StBernardineSiena", "GRADE": 2, - "COMMON": "Pastors:For Missionaries,Holy Men and Women:For Religious", + "COMMON": [ + "Pastors:For Missionaries", + "Holy Men and Women:For Religious" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "At 4, 8-12", "RESPONSORIAL_PSALM": "Salmo 40", @@ -916,9 +1180,14 @@ "DAY": 25, "TAG": "StBedeVenerable", "GRADE": 2, - "COMMON": "Doctors,Holy Men and Women:For a Monk", + "COMMON": [ + "Doctors", + "Holy Men and Women:For a Monk" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "1 Cor 2, 10b-16", "RESPONSORIAL_PSALM": "Salmo 119", @@ -932,9 +1201,13 @@ "DAY": 25, "TAG": "StGregoryVII", "GRADE": 2, - "COMMON": "Pastors:For a Pope", + "COMMON": [ + "Pastors:For a Pope" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "At 20, 17-18a.28-32.36", "RESPONSORIAL_PSALM": "Salmo 110", @@ -948,9 +1221,14 @@ "DAY": 25, "TAG": "StMaryMagdalenePazzi", "GRADE": 2, - "COMMON": "Virgins:For One Virgin,Holy Men and Women:For Religious", + "COMMON": [ + "Virgins:For One Virgin", + "Holy Men and Women:For Religious" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "1 Cor 7, 25-35", "RESPONSORIAL_PSALM": "Salmo 148", @@ -964,9 +1242,13 @@ "DAY": 26, "TAG": "StPhilipNeri", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Fil 4, 4-9", "RESPONSORIAL_PSALM": "Salmo 34", @@ -980,9 +1262,14 @@ "DAY": 27, "TAG": "StAugustineCanterbury", "GRADE": 2, - "COMMON": "Pastors:For a Bishop,Pastors:For Missionaries", + "COMMON": [ + "Pastors:For a Bishop", + "Pastors:For Missionaries" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "1 Ts 2, 2b-8", "RESPONSORIAL_PSALM": "Salmo 96", @@ -996,9 +1283,13 @@ "DAY": 31, "TAG": "Visitation", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Sof 3, 14-18|Rm 12, 9-16b", "RESPONSORIAL_PSALM": "Is 12, 2-6", @@ -1012,9 +1303,13 @@ "DAY": 1, "TAG": "StJustinMartyr", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "1Cor 1, 18-25", "RESPONSORIAL_PSALM": "Salmo 34", @@ -1028,9 +1323,13 @@ "DAY": 2, "TAG": "StsMarcellinusPeter", "GRADE": 2, - "COMMON": "Martyrs:For Several Martyrs", + "COMMON": [ + "Martyrs:For Several Martyrs" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "2 Cor 6, 4-10", "RESPONSORIAL_PSALM": "Salmo 124", @@ -1044,9 +1343,13 @@ "DAY": 3, "TAG": "StsCharlesLwanga", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "Macc 7, 1-2.9-14", "RESPONSORIAL_PSALM": "Salmo 124", @@ -1060,9 +1363,15 @@ "DAY": 5, "TAG": "StBoniface", "GRADE": 3, - "COMMON": "Martyrs:For One Martyr,Pastors:For Missionaries", + "COMMON": [ + "Martyrs:For One Martyr", + "Pastors:For Missionaries" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "At 26, 19-23", "RESPONSORIAL_PSALM": "Salmo 117", @@ -1076,9 +1385,14 @@ "DAY": 6, "TAG": "StNorbert", "GRADE": 2, - "COMMON": "Pastors:For a Bishop,Holy Men and Women:For Religious", + "COMMON": [ + "Pastors:For a Bishop", + "Holy Men and Women:For Religious" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Ez 34, 11-16", "RESPONSORIAL_PSALM": "Salmo 23", @@ -1092,9 +1406,13 @@ "DAY": 9, "TAG": "StEphrem", "GRADE": 2, - "COMMON": "Doctors", + "COMMON": [ + "Doctors" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Col 3, 12-17", "RESPONSORIAL_PSALM": "Salmo 37", @@ -1108,9 +1426,13 @@ "DAY": 11, "TAG": "StBarnabasAp", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "At 11, 21b-26; 13, 1-3", "RESPONSORIAL_PSALM": "Salmo 98", @@ -1124,9 +1446,15 @@ "DAY": 13, "TAG": "StAnthonyPadua", "GRADE": 3, - "COMMON": "Pastors:For One Pastor,Doctors,Holy Men and Women:For Religious", + "COMMON": [ + "Pastors:For One Pastor", + "Doctors", + "Holy Men and Women:For Religious" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Is 61, 1-3a", "RESPONSORIAL_PSALM": "Salmo 89", @@ -1140,9 +1468,13 @@ "DAY": 19, "TAG": "StRomuald", "GRADE": 2, - "COMMON": "Holy Men and Women:For an Abbot", + "COMMON": [ + "Holy Men and Women:For an Abbot" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "Fil 3, 8-10", "RESPONSORIAL_PSALM": "Salmo 131", @@ -1156,9 +1488,13 @@ "DAY": 21, "TAG": "StAloysiusGonzaga", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "1Gv 5, 1-5", "RESPONSORIAL_PSALM": "Salmo 16", @@ -1172,9 +1508,13 @@ "DAY": 22, "TAG": "StPaulinusNola", "GRADE": 2, - "COMMON": "Pastors:For a Bishop", + "COMMON": [ + "Pastors:For a Bishop" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "2Cor 8, 9-15", "RESPONSORIAL_PSALM": "Salmo 40", @@ -1188,9 +1528,13 @@ "DAY": 22, "TAG": "StsJohnFisherThomasMore", "GRADE": 2, - "COMMON": "Martyrs:For Several Martyrs", + "COMMON": [ + "Martyrs:For Several Martyrs" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "1 Pt 4, 12-19", "RESPONSORIAL_PSALM": "Salmo 126", @@ -1204,18 +1548,22 @@ "DAY": 24, "TAG": "NativityJohnBaptist", "GRADE": 6, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { - "VIGIL" : { + "VIGIL": { "FIRST_READING": "Ger 1, 4-10", "RESPONSORIAL_PSALM": "Salmo 71", "SECOND_READING": "1Pt 1, 8-12", "ALLELUIA_VERSE": " Gv 1, 7; Lc 1, 17 ", "GOSPEL": "Lc 1, 5-17" }, - "DAY" : { + "DAY": { "FIRST_READING": "Ger 1, 4-10", "RESPONSORIAL_PSALM": "Salmo 71", "SECOND_READING": "1Pt 1, 8-12", @@ -1229,9 +1577,14 @@ "DAY": 27, "TAG": "StCyrilAlexandria", "GRADE": 2, - "COMMON": "Pastors:For a Bishop,Doctors", + "COMMON": [ + "Pastors:For a Bishop", + "Doctors" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1245,9 +1598,14 @@ "DAY": 28, "TAG": "StIrenaeus", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1261,9 +1619,13 @@ "DAY": 29, "TAG": "StsPeterPaulAp", "GRADE": 6, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1277,9 +1639,13 @@ "DAY": 30, "TAG": "FirstMartyrsRome", "GRADE": 2, - "COMMON": "Martyrs:For Several Martyrs", + "COMMON": [ + "Martyrs:For Several Martyrs" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1293,9 +1659,13 @@ "DAY": 3, "TAG": "StThomasAp", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1309,9 +1679,13 @@ "DAY": 4, "TAG": "StElizabethPortugal", "GRADE": 2, - "COMMON": "Holy Men and Women:For Those Who Practiced Works of Mercy", + "COMMON": [ + "Holy Men and Women:For Those Who Practiced Works of Mercy" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1325,9 +1699,15 @@ "DAY": 5, "TAG": "StAnthonyZaccaria", "GRADE": 2, - "COMMON": "Pastors:For One Pastor,Holy Men and Women:For Religious,Holy Men and Women:For Educators", + "COMMON": [ + "Pastors:For One Pastor", + "Holy Men and Women:For Religious", + "Holy Men and Women:For Educators" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1341,9 +1721,15 @@ "DAY": 6, "TAG": "StMariaGoretti", "GRADE": 2, - "COMMON": "Martyrs:For a Virgin Martyr,Virgins:For One Virgin", + "COMMON": [ + "Martyrs:For a Virgin Martyr", + "Virgins:For One Virgin" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1357,9 +1743,13 @@ "DAY": 11, "TAG": "StBenedict", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1373,9 +1763,13 @@ "DAY": 13, "TAG": "StHenry", "GRADE": 2, - "COMMON": "Holy Men and Women:For One Saint", + "COMMON": [ + "Holy Men and Women:For One Saint" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1389,9 +1783,13 @@ "DAY": 14, "TAG": "StCamillusDeLellis", "GRADE": 2, - "COMMON": "Holy Men and Women:For Those Who Practiced Works of Mercy", + "COMMON": [ + "Holy Men and Women:For Those Who Practiced Works of Mercy" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1405,9 +1803,14 @@ "DAY": 15, "TAG": "StBonaventure", "GRADE": 3, - "COMMON": "Pastors:For a Bishop,Doctors", + "COMMON": [ + "Pastors:For a Bishop", + "Doctors" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1421,9 +1824,13 @@ "DAY": 16, "TAG": "LadyMountCarmel", "GRADE": 2, - "COMMON": "Blessed Virgin Mary", + "COMMON": [ + "Blessed Virgin Mary" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1437,9 +1844,15 @@ "DAY": 21, "TAG": "StLawrenceBrindisi", "GRADE": 2, - "COMMON": "Pastors:For One Pastor,Doctors,Holy Men and Women:For Religious", + "COMMON": [ + "Pastors:For One Pastor", + "Doctors", + "Holy Men and Women:For Religious" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1453,9 +1866,13 @@ "DAY": 22, "TAG": "StMaryMagdalene", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1469,9 +1886,14 @@ "DAY": 23, "TAG": "StBridget", "GRADE": 2, - "COMMON": "Holy Men and Women:For Religious,Holy Men and Women:For Holy Women", + "COMMON": [ + "Holy Men and Women:For Religious", + "Holy Men and Women:For Holy Women" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1485,9 +1907,13 @@ "DAY": 25, "TAG": "StJamesAp", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1501,9 +1927,13 @@ "DAY": 26, "TAG": "StsJoachimAnne", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1517,9 +1947,13 @@ "DAY": 29, "TAG": "StMartha", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1533,9 +1967,14 @@ "DAY": 30, "TAG": "StPeterChrysologus", "GRADE": 2, - "COMMON": "Pastors:For a Bishop,Doctors", + "COMMON": [ + "Pastors:For a Bishop", + "Doctors" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1549,9 +1988,13 @@ "DAY": 31, "TAG": "StIgnatiusLoyola", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1565,9 +2008,14 @@ "DAY": 1, "TAG": "StAlphonsusMariaDeLiguori", "GRADE": 3, - "COMMON": "Pastors:For a Bishop,Doctors", + "COMMON": [ + "Pastors:For a Bishop", + "Doctors" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1581,9 +2029,13 @@ "DAY": 2, "TAG": "StEusebius", "GRADE": 2, - "COMMON": "Pastors:For a Bishop", + "COMMON": [ + "Pastors:For a Bishop" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1597,9 +2049,13 @@ "DAY": 4, "TAG": "StJeanVianney", "GRADE": 3, - "COMMON": "Pastors:For One Pastor", + "COMMON": [ + "Pastors:For One Pastor" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1613,9 +2069,13 @@ "DAY": 5, "TAG": "DedicationStMaryMajor", "GRADE": 2, - "COMMON": "Blessed Virgin Mary", + "COMMON": [ + "Blessed Virgin Mary" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1629,9 +2089,13 @@ "DAY": 6, "TAG": "Transfiguration", "GRADE": 5, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1645,9 +2109,13 @@ "DAY": 7, "TAG": "StSixtusIIPope", "GRADE": 2, - "COMMON": "Martyrs:For Several Martyrs", + "COMMON": [ + "Martyrs:For Several Martyrs" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1661,9 +2129,14 @@ "DAY": 7, "TAG": "StCajetan", "GRADE": 2, - "COMMON": "Pastors:For One Pastor,Holy Men and Women:For Religious", + "COMMON": [ + "Pastors:For One Pastor", + "Holy Men and Women:For Religious" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1677,9 +2150,13 @@ "DAY": 8, "TAG": "StDominic", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1693,9 +2170,14 @@ "DAY": 10, "TAG": "StLawrenceDeacon", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1709,9 +2191,14 @@ "DAY": 11, "TAG": "StClare", "GRADE": 3, - "COMMON": "Virgins:For One Virgin,Holy Men and Women:For a Nun", + "COMMON": [ + "Virgins:For One Virgin", + "Holy Men and Women:For a Nun" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1725,9 +2212,13 @@ "DAY": 12, "TAG": "StJaneFrancesDeChantal", "GRADE": 2, - "COMMON": "Holy Men and Women:For Religious", + "COMMON": [ + "Holy Men and Women:For Religious" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1741,9 +2232,15 @@ "DAY": 13, "TAG": "StsPontianHippolytus", "GRADE": 2, - "COMMON": "Martyrs:For Several Martyrs,Pastors:For Several Pastors", + "COMMON": [ + "Martyrs:For Several Martyrs", + "Pastors:For Several Pastors" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1757,9 +2254,13 @@ "DAY": 15, "TAG": "Assumption", "GRADE": 6, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1773,9 +2274,13 @@ "DAY": 16, "TAG": "StStephenHungary", "GRADE": 2, - "COMMON": "Holy Men and Women:For One Saint", + "COMMON": [ + "Holy Men and Women:For One Saint" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1789,9 +2294,14 @@ "DAY": 19, "TAG": "StJohnEudes", "GRADE": 2, - "COMMON": "Pastors:For One Pastor,Holy Men and Women:For Religious", + "COMMON": [ + "Pastors:For One Pastor", + "Holy Men and Women:For Religious" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1805,9 +2315,13 @@ "DAY": 20, "TAG": "StBernardClairvaux", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1821,9 +2335,13 @@ "DAY": 21, "TAG": "StPiusX", "GRADE": 3, - "COMMON": "Pastors:For a Pope", + "COMMON": [ + "Pastors:For a Pope" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1837,9 +2355,13 @@ "DAY": 22, "TAG": "QueenshipMary", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1853,9 +2375,13 @@ "DAY": 23, "TAG": "StRoseLima", "GRADE": 2, - "COMMON": "Virgins:For One Virgin", + "COMMON": [ + "Virgins:For One Virgin" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1869,9 +2395,13 @@ "DAY": 24, "TAG": "StBartholomewAp", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1885,9 +2415,13 @@ "DAY": 25, "TAG": "StLouis", "GRADE": 2, - "COMMON": "Holy Men and Women:For One Saint", + "COMMON": [ + "Holy Men and Women:For One Saint" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1901,9 +2435,14 @@ "DAY": 25, "TAG": "StJosephCalasanz", "GRADE": 2, - "COMMON": "Pastors:For One Pastor,Holy Men and Women:For Educators", + "COMMON": [ + "Pastors:For One Pastor", + "Holy Men and Women:For Educators" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1917,9 +2456,13 @@ "DAY": 27, "TAG": "StMonica", "GRADE": 3, - "COMMON": "Holy Men and Women:For Holy Women", + "COMMON": [ + "Holy Men and Women:For Holy Women" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1933,9 +2476,13 @@ "DAY": 28, "TAG": "StAugustineHippo", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1949,9 +2496,13 @@ "DAY": 29, "TAG": "BeheadingJohnBaptist", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1965,9 +2516,13 @@ "DAY": 3, "TAG": "StGregoryGreat", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1981,9 +2536,13 @@ "DAY": 8, "TAG": "NativityVirginMary", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -1997,9 +2556,13 @@ "DAY": 13, "TAG": "StJohnChrysostom", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2013,9 +2576,13 @@ "DAY": 14, "TAG": "ExaltationCross", "GRADE": 5, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2029,9 +2596,13 @@ "DAY": 15, "TAG": "LadySorrows", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2045,9 +2616,15 @@ "DAY": 16, "TAG": "StsCorneliusCyprian", "GRADE": 3, - "COMMON": "Martyrs:For Several Martyrs,Pastors:For a Bishop", + "COMMON": [ + "Martyrs:For Several Martyrs", + "Pastors:For a Bishop" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2061,9 +2638,14 @@ "DAY": 17, "TAG": "StRobertBellarmine", "GRADE": 2, - "COMMON": "Pastors:For a Bishop,Doctors", + "COMMON": [ + "Pastors:For a Bishop", + "Doctors" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2077,9 +2659,15 @@ "DAY": 19, "TAG": "StJanuarius", "GRADE": 2, - "COMMON": "Martyrs:For One Martyr,Pastors:For a Bishop", + "COMMON": [ + "Martyrs:For One Martyr", + "Pastors:For a Bishop" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2093,9 +2681,13 @@ "DAY": 21, "TAG": "StMatthewEvangelist", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2109,9 +2701,13 @@ "DAY": 26, "TAG": "StsCosmasDamian", "GRADE": 2, - "COMMON": "Martyrs:For Several Martyrs", + "COMMON": [ + "Martyrs:For Several Martyrs" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2125,9 +2721,13 @@ "DAY": 27, "TAG": "StVincentDePaul", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2141,9 +2741,13 @@ "DAY": 28, "TAG": "StWenceslaus", "GRADE": 2, - "COMMON": "Martyrs:For One Martyr", + "COMMON": [ + "Martyrs:For One Martyr" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2157,9 +2761,13 @@ "DAY": 29, "TAG": "StsArchangels", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2173,9 +2781,13 @@ "DAY": 30, "TAG": "StJerome", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2189,9 +2801,13 @@ "DAY": 1, "TAG": "StThereseChildJesus", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2205,9 +2821,13 @@ "DAY": 2, "TAG": "GuardianAngels", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2221,9 +2841,13 @@ "DAY": 4, "TAG": "StFrancisAssisi", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2237,9 +2861,14 @@ "DAY": 6, "TAG": "StBruno", "GRADE": 2, - "COMMON": "Pastors:For One Pastor,Holy Men and Women:For a Monk", + "COMMON": [ + "Pastors:For One Pastor", + "Holy Men and Women:For a Monk" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2253,9 +2882,13 @@ "DAY": 7, "TAG": "LadyRosary", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2269,9 +2902,13 @@ "DAY": 9, "TAG": "StDenis", "GRADE": 2, - "COMMON": "Martyrs:For Several Martyrs", + "COMMON": [ + "Martyrs:For Several Martyrs" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2285,9 +2922,14 @@ "DAY": 9, "TAG": "StJohnLeonardi", "GRADE": 2, - "COMMON": "Pastors:For Missionaries,Holy Men and Women:For Those Who Practiced Works of Mercy", + "COMMON": [ + "Pastors:For Missionaries", + "Holy Men and Women:For Those Who Practiced Works of Mercy" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2301,9 +2943,15 @@ "DAY": 14, "TAG": "StCallistusIPope", "GRADE": 2, - "COMMON": "Martyrs:For One Martyr,Pastors:For a Pope", + "COMMON": [ + "Martyrs:For One Martyr", + "Pastors:For a Pope" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2317,9 +2965,13 @@ "DAY": 15, "TAG": "StTeresaJesus", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2333,9 +2985,14 @@ "DAY": 16, "TAG": "StHedwig", "GRADE": 2, - "COMMON": "Holy Men and Women:For Religious,Holy Men and Women:For Holy Women", + "COMMON": [ + "Holy Men and Women:For Religious", + "Holy Men and Women:For Holy Women" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2349,9 +3006,13 @@ "DAY": 16, "TAG": "StMargaretAlacoque", "GRADE": 2, - "COMMON": "Virgins:For One Virgin", + "COMMON": [ + "Virgins:For One Virgin" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2365,9 +3026,14 @@ "DAY": 17, "TAG": "StIgnatiusAntioch", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2381,9 +3047,13 @@ "DAY": 18, "TAG": "StLukeEvangelist", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2397,9 +3067,13 @@ "DAY": 19, "TAG": "StsJeanBrebeuf", "GRADE": 2, - "COMMON": "Martyrs:For Missionary Martyrs", + "COMMON": [ + "Martyrs:For Missionary Martyrs" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2413,9 +3087,13 @@ "DAY": 19, "TAG": "StPaulCross", "GRADE": 2, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2429,9 +3107,14 @@ "DAY": 23, "TAG": "StJohnCapistrano", "GRADE": 2, - "COMMON": "Pastors:For Missionaries,Holy Men and Women:For Religious", + "COMMON": [ + "Pastors:For Missionaries", + "Holy Men and Women:For Religious" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2445,9 +3128,14 @@ "DAY": 24, "TAG": "StAnthonyMaryClaret", "GRADE": 2, - "COMMON": "Pastors:For a Bishop,Pastors:For Missionaries", + "COMMON": [ + "Pastors:For a Bishop", + "Pastors:For Missionaries" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2461,9 +3149,13 @@ "DAY": 28, "TAG": "StSimonStJudeAp", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2477,9 +3169,13 @@ "DAY": 1, "TAG": "AllSaints", "GRADE": 6, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2493,9 +3189,13 @@ "DAY": 2, "TAG": "AllSouls", "GRADE": 6, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "purple", + "COLOR": [ + "purple" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2509,9 +3209,13 @@ "DAY": 3, "TAG": "StMartinPorres", "GRADE": 2, - "COMMON": "Holy Men and Women:For Religious", + "COMMON": [ + "Holy Men and Women:For Religious" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2525,9 +3229,13 @@ "DAY": 4, "TAG": "StCharlesBorromeo", "GRADE": 3, - "COMMON": "Pastors:For a Bishop", + "COMMON": [ + "Pastors:For a Bishop" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2541,9 +3249,13 @@ "DAY": 9, "TAG": "DedicationLateran", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2557,9 +3269,13 @@ "DAY": 10, "TAG": "StLeoGreat", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2573,9 +3289,13 @@ "DAY": 11, "TAG": "StMartinTours", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2589,9 +3309,14 @@ "DAY": 12, "TAG": "StJosaphat", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2605,9 +3330,14 @@ "DAY": 15, "TAG": "StAlbertGreat", "GRADE": 2, - "COMMON": "Pastors:For a Bishop,Doctors", + "COMMON": [ + "Pastors:For a Bishop", + "Doctors" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2621,9 +3351,13 @@ "DAY": 16, "TAG": "StMargaretScotland", "GRADE": 2, - "COMMON": "Holy Men and Women:For Those Who Practiced Works of Mercy", + "COMMON": [ + "Holy Men and Women:For Those Who Practiced Works of Mercy" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2637,9 +3371,14 @@ "DAY": 16, "TAG": "StGertrudeGreat", "GRADE": 2, - "COMMON": "Virgins:For One Virgin,Holy Men and Women:For a Nun", + "COMMON": [ + "Virgins:For One Virgin", + "Holy Men and Women:For a Nun" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2653,9 +3392,13 @@ "DAY": 17, "TAG": "StElizabethHungary", "GRADE": 3, - "COMMON": "Holy Men and Women:For Those Who Practiced Works of Mercy", + "COMMON": [ + "Holy Men and Women:For Those Who Practiced Works of Mercy" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2669,9 +3412,13 @@ "DAY": 18, "TAG": "DedicationStsPeterPaul", "GRADE": 2, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2685,9 +3432,13 @@ "DAY": 21, "TAG": "PresentationMary", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2701,9 +3452,15 @@ "DAY": 22, "TAG": "StCecilia", "GRADE": 3, - "COMMON": "Martyrs:For a Virgin Martyr,Virgins:For One Virgin", + "COMMON": [ + "Martyrs:For a Virgin Martyr", + "Virgins:For One Virgin" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2717,9 +3474,15 @@ "DAY": 23, "TAG": "StClementIPope", "GRADE": 2, - "COMMON": "Martyrs:For One Martyr,Pastors:For a Pope", + "COMMON": [ + "Martyrs:For One Martyr", + "Pastors:For a Pope" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2733,9 +3496,14 @@ "DAY": 23, "TAG": "StColumban", "GRADE": 2, - "COMMON": "Pastors:For Missionaries,Holy Men and Women:For an Abbot", + "COMMON": [ + "Pastors:For Missionaries", + "Holy Men and Women:For an Abbot" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2749,9 +3517,13 @@ "DAY": 30, "TAG": "StAndrewAp", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2765,9 +3537,13 @@ "DAY": 3, "TAG": "StFrancisXavier", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2781,9 +3557,14 @@ "DAY": 4, "TAG": "StJohnDamascene", "GRADE": 2, - "COMMON": "Pastors:For One Pastor,Doctors", + "COMMON": [ + "Pastors:For One Pastor", + "Doctors" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2797,9 +3578,13 @@ "DAY": 6, "TAG": "StNicholas", "GRADE": 2, - "COMMON": "Pastors:For a Bishop", + "COMMON": [ + "Pastors:For a Bishop" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2813,9 +3598,13 @@ "DAY": 7, "TAG": "StAmbrose", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2829,9 +3618,13 @@ "DAY": 8, "TAG": "ImmaculateConception", "GRADE": 6, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2845,9 +3638,13 @@ "DAY": 11, "TAG": "StDamasusIPope", "GRADE": 2, - "COMMON": "Pastors:For a Pope", + "COMMON": [ + "Pastors:For a Pope" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2861,9 +3658,15 @@ "DAY": 13, "TAG": "StLucySyracuse", "GRADE": 3, - "COMMON": "Martyrs:For a Virgin Martyr,Virgins:For One Virgin", + "COMMON": [ + "Martyrs:For a Virgin Martyr", + "Virgins:For One Virgin" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2877,9 +3680,13 @@ "DAY": 14, "TAG": "StJohnCross", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2893,9 +3700,14 @@ "DAY": 21, "TAG": "StPeterCanisius", "GRADE": 2, - "COMMON": "Pastors:For One Pastor,Doctors", + "COMMON": [ + "Pastors:For One Pastor", + "Doctors" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2909,9 +3721,14 @@ "DAY": 23, "TAG": "StJohnKanty", "GRADE": 2, - "COMMON": "Pastors:For One Pastor,Holy Men and Women:For Those Who Practiced Works of Mercy", + "COMMON": [ + "Pastors:For One Pastor", + "Holy Men and Women:For Those Who Practiced Works of Mercy" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2925,9 +3742,13 @@ "DAY": 26, "TAG": "StStephenProtomartyr", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2941,9 +3762,13 @@ "DAY": 27, "TAG": "StJohnEvangelist", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2957,9 +3782,13 @@ "DAY": 28, "TAG": "HolyInnocents", "GRADE": 4, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2973,9 +3802,15 @@ "DAY": 29, "TAG": "StThomasBecket", "GRADE": 2, - "COMMON": "Martyrs:For One Martyr,Pastors:For a Bishop", + "COMMON": [ + "Martyrs:For One Martyr", + "Pastors:For a Bishop" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -2989,9 +3824,13 @@ "DAY": 31, "TAG": "StSylvesterIPope", "GRADE": 2, - "COMMON": "Pastors:For a Pope", + "COMMON": [ + "Pastors:For a Pope" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", diff --git a/data/propriumdesanctis_2002/i18n/en.json b/data/propriumdesanctis_2002/i18n/en.json index 4094d7ae..67e7ab5d 100644 --- a/data/propriumdesanctis_2002/i18n/en.json +++ b/data/propriumdesanctis_2002/i18n/en.json @@ -1,21 +1,21 @@ -{ - "NameJesus": "The Most Holy Name of Jesus", - "StJosephineBakhita": "Saint Josephine Bakhita, virgin", - "StAdalbert": "Saint Adalbert, bishop and martyr", - "StLouisGrignionMontfort": "Saint Louis Grignion de Montfort, priest", - "LadyFatima": "Our Lady of Fatima", - "StChristopherMagallanes": "Saint Christopher Magallanes and companions, martyrs", - "StRitaCascia": "Saint Rita of Cascia", - "StAugustineZhaoRong": "Saint Augustine Zhao Rong and companions, martyrs", - "StApollinaris": "Saint Apollinaris, bishop and martyr", - "StSharbelMakhluf": "Saint Sharbel Makhluf, hermit", - "StPeterJulianEymard": "Saint Peter Julian Eymard, priest", - "StEdithStein": "Saint Teresa Benedicta of the Cross (Edith Stein), virgin and martyr", - "StMaximilianKolbe": "Saint Maximilian Mary Kolbe, priest and martyr", - "StPeterClaver": "Saint Peter Claver, priest", - "HolyNameMary": "Holy Name of the Blessed Virgin Mary", - "StAndrewKimTaegon": "Saint Andrew Kim Taegon, priest, and Paul Chong Hasang and companions, martyrs", - "StsLawrenceRuiz": "Saints Lawrence Ruiz and companions, martyrs", - "StAndrewDungLac": "Saint Andrew Dung-Lac and his companions, martyrs", - "StCatherineAlexandria": "Saint Catherine of Alexandria, virgin and martyr" -} +{ + "NameJesus": "The Most Holy Name of Jesus", + "StJosephineBakhita": "Saint Josephine Bakhita, Virgin", + "StAdalbert": "Saint Adalbert, Bishop and Martyr", + "StLouisGrignionMontfort": "Saint Louis Grignion de Montfort, Priest", + "LadyFatima": "Our Lady of Fatima", + "StChristopherMagallanes": "Saint Christopher Magallanes, Priest, and Companions, Martyrs", + "StRitaCascia": "Saint Rita of Cascia, Religious", + "StAugustineZhaoRong": "Saint Augustine Zhao Rong, Priest, and Companions, Martyrs", + "StApollinaris": "Saint Apollinaris, Bishop and Martyr", + "StSharbelMakhluf": "Saint Sharbel Makhluf, Hermit", + "StPeterJulianEymard": "Saint Peter Julian Eymard, Priest", + "StEdithStein": "Saint Teresa Benedicta of the Cross, Virgin and Martyr", + "StMaximilianKolbe": "Saint Maximilian Mary Kolbe, Priest and Martyr", + "StPeterClaver": "Saint Peter Claver, Priest", + "HolyNameMary": "The Holy Name of the Blessed Virgin Mary", + "StAndrewKimTaegon": "Saint Andrew Kim Tae-gŏn, Priest, and Paul Chŏng Ha-sang, and Companions, Martyrs", + "StsLawrenceRuiz": "Saint Lawrence Ruiz and Companions, Martyrs", + "StAndrewDungLac": "Saint Andrew Dũng-Lạc, Priest, and Companions, Martyrs", + "StCatherineAlexandria": "Saint Catherine of Alexandria, Virgin and Martyr" +} diff --git a/data/propriumdesanctis_2002/propriumdesanctis_2002.json b/data/propriumdesanctis_2002/propriumdesanctis_2002.json index 0619f91e..b620bd53 100644 --- a/data/propriumdesanctis_2002/propriumdesanctis_2002.json +++ b/data/propriumdesanctis_2002/propriumdesanctis_2002.json @@ -4,9 +4,13 @@ "DAY": 3, "TAG": "NameJesus", "GRADE": 2, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -20,9 +24,13 @@ "DAY": 8, "TAG": "StJosephineBakhita", "GRADE": 2, - "COMMON": "Virgins:For One Virgin", + "COMMON": [ + "Virgins:For One Virgin" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -36,9 +44,15 @@ "DAY": 23, "TAG": "StAdalbert", "GRADE": 2, - "COMMON": "Martyrs:For One Martyr,Pastors:For a Bishop", + "COMMON": [ + "Martyrs:For One Martyr", + "Pastors:For a Bishop" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -52,9 +66,13 @@ "DAY": 28, "TAG": "StLouisGrignionMontfort", "GRADE": 2, - "COMMON": "Pastors:For One Pastor", + "COMMON": [ + "Pastors:For One Pastor" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -68,9 +86,13 @@ "DAY": 13, "TAG": "LadyFatima", "GRADE": 2, - "COMMON": "Blessed Virgin Mary", + "COMMON": [ + "Blessed Virgin Mary" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -84,9 +106,13 @@ "DAY": 21, "TAG": "StChristopherMagallanes", "GRADE": 2, - "COMMON": "Martyrs:For Several Martyrs", + "COMMON": [ + "Martyrs:For Several Martyrs" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -100,9 +126,13 @@ "DAY": 22, "TAG": "StRitaCascia", "GRADE": 2, - "COMMON": "Holy Men and Women:For Religious", + "COMMON": [ + "Holy Men and Women:For Religious" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -116,9 +146,13 @@ "DAY": 9, "TAG": "StAugustineZhaoRong", "GRADE": 2, - "COMMON": "Martyrs:For Several Martyrs", + "COMMON": [ + "Martyrs:For Several Martyrs" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -132,9 +166,15 @@ "DAY": 20, "TAG": "StApollinaris", "GRADE": 2, - "COMMON": "Martyrs:For One Martyr,Pastors:For a Bishop", + "COMMON": [ + "Martyrs:For One Martyr", + "Pastors:For a Bishop" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -148,9 +188,14 @@ "DAY": 24, "TAG": "StSharbelMakhluf", "GRADE": 2, - "COMMON": "Pastors:For One Pastor,Holy Men and Women:For a Monk", + "COMMON": [ + "Pastors:For One Pastor", + "Holy Men and Women:For a Monk" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -164,9 +209,14 @@ "DAY": 2, "TAG": "StPeterJulianEymard", "GRADE": 2, - "COMMON": "Pastors:For One Pastor,Holy Men and Women:For Religious", + "COMMON": [ + "Pastors:For One Pastor", + "Holy Men and Women:For Religious" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -180,9 +230,15 @@ "DAY": 9, "TAG": "StEdithStein", "GRADE": 2, - "COMMON": "Martyrs:For a Virgin Martyr,Virgins:For One Virgin", + "COMMON": [ + "Martyrs:For a Virgin Martyr", + "Virgins:For One Virgin" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -196,9 +252,14 @@ "DAY": 14, "TAG": "StMaximilianKolbe", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -212,9 +273,14 @@ "DAY": 9, "TAG": "StPeterClaver", "GRADE": 2, - "COMMON": "Pastors:For One Pastor,Holy Men and Women:For Those Who Practiced Works of Mercy", + "COMMON": [ + "Pastors:For One Pastor", + "Holy Men and Women:For Those Who Practiced Works of Mercy" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -228,9 +294,13 @@ "DAY": 12, "TAG": "HolyNameMary", "GRADE": 2, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -244,9 +314,13 @@ "DAY": 20, "TAG": "StAndrewKimTaegon", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -260,9 +334,13 @@ "DAY": 28, "TAG": "StsLawrenceRuiz", "GRADE": 2, - "COMMON": "Martyrs:For Several Martyrs", + "COMMON": [ + "Martyrs:For Several Martyrs" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -276,9 +354,13 @@ "DAY": 24, "TAG": "StAndrewDungLac", "GRADE": 3, - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -292,9 +374,15 @@ "DAY": 25, "TAG": "StCatherineAlexandria", "GRADE": 2, - "COMMON": "Martyrs:For a Virgin Martyr,Virgins:For One Virgin", + "COMMON": [ + "Martyrs:For a Virgin Martyr", + "Virgins:For One Virgin" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", diff --git a/data/propriumdesanctis_2008/propriumdesanctis_2008.json b/data/propriumdesanctis_2008/propriumdesanctis_2008.json index 15439f52..82cf0d82 100644 --- a/data/propriumdesanctis_2008/propriumdesanctis_2008.json +++ b/data/propriumdesanctis_2008/propriumdesanctis_2008.json @@ -4,9 +4,14 @@ "DAY": 23, "TAG": "StPioPietrelcina", "GRADE": 3, - "COMMON": "Pastors:For One Pastor,Holy Men and Women:For Religious", + "COMMON": [ + "Pastors:For One Pastor", + "Holy Men and Women:For Religious" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -20,9 +25,13 @@ "DAY": 12, "TAG": "LadyGuadalupe", "GRADE": 2, - "COMMON": "Blessed Virgin Mary", + "COMMON": [ + "Blessed Virgin Mary" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -36,9 +45,13 @@ "DAY": 9, "TAG": "JuanDiego", "GRADE": 2, - "COMMON": "Holy Men and Women:For One Saint", + "COMMON": [ + "Holy Men and Women:For One Saint" + ], "CALENDAR": "GENERAL ROMAN", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", diff --git a/data/propriumdesanctis_ITALY_1983/propriumdesanctis_ITALY_1983.json b/data/propriumdesanctis_ITALY_1983/propriumdesanctis_ITALY_1983.json index dd3d20ef..986d9c5a 100644 --- a/data/propriumdesanctis_ITALY_1983/propriumdesanctis_ITALY_1983.json +++ b/data/propriumdesanctis_ITALY_1983/propriumdesanctis_ITALY_1983.json @@ -6,9 +6,15 @@ "NAME": "Sant'Adalberto, vescovo e martire", "GRADE": 2, "DISPLAYGRADE": "", - "COMMON": "Martyrs:For One Martyr,Pastors:For a Bishop", + "COMMON": [ + "Martyrs:For One Martyr", + "Pastors:For a Bishop" + ], "CALENDAR": "", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -24,9 +30,13 @@ "NAME": "San Luigi Grignon de Montfort", "GRADE": 2, "DISPLAYGRADE": "", - "COMMON": "Pastors:For One Pastor", + "COMMON": [ + "Pastors:For One Pastor" + ], "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -42,9 +52,14 @@ "NAME": "San Pietro Giuliani, sacerdote", "GRADE": 2, "DISPLAYGRADE": "", - "COMMON": "Pastors:For One Pastor,Holy Men and Women:For Religious", + "COMMON": [ + "Pastors:For One Pastor", + "Holy Men and Women:For Religious" + ], "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -60,9 +75,14 @@ "NAME": "San Massimiliano Kolbe, sacerdote e martire", "GRADE": 3, "DISPLAYGRADE": "", - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "", - "COLOR": "white,red", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -78,9 +98,14 @@ "NAME": "San Pietro Claver, sacerdote", "GRADE": 2, "DISPLAYGRADE": "", - "COMMON": "Pastors:For One Pastor,Holy Men and Women:For Those Who Practiced Works of Mercy", + "COMMON": [ + "Pastors:For One Pastor", + "Holy Men and Women:For Those Who Practiced Works of Mercy" + ], "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -96,9 +121,13 @@ "NAME": "Santi Andrea Kim Taegon, sacerdote, Paolo Chong Hasang e compagni martiri", "GRADE": 3, "DISPLAYGRADE": "", - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -114,9 +143,13 @@ "NAME": "Santi Lorenzo Ruiz e compagni martiri", "GRADE": 2, "DISPLAYGRADE": "", - "COMMON": "Martyrs:For Several Martyrs", + "COMMON": [ + "Martyrs:For Several Martyrs" + ], "CALENDAR": "", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -132,9 +165,13 @@ "NAME": "Sant'Andrea Dung-Lac e compagni martiri", "GRADE": 3, "DISPLAYGRADE": "", - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "", - "COLOR": "red", + "COLOR": [ + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", diff --git a/data/propriumdesanctis_USA_2011/propriumdesanctis_USA_2011.json b/data/propriumdesanctis_USA_2011/propriumdesanctis_USA_2011.json index 9e1edd3d..6ea86aad 100644 --- a/data/propriumdesanctis_USA_2011/propriumdesanctis_USA_2011.json +++ b/data/propriumdesanctis_USA_2011/propriumdesanctis_USA_2011.json @@ -6,9 +6,13 @@ "NAME": "Saint Elizabeth Ann Seton, Religious", "GRADE": 3, "DISPLAYGRADE": "", - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -24,9 +28,13 @@ "NAME": "Saint John Neumann, Bishop", "GRADE": 3, "DISPLAYGRADE": "", - "COMMON": "Proper", + "COMMON": [ + "Proper" + ], "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -42,9 +50,13 @@ "NAME": "Saint André Bessette, Religious", "GRADE": 2, "DISPLAYGRADE": "", - "COMMON": "Holy Men and Women:For Religious", + "COMMON": [ + "Holy Men and Women:For Religious" + ], "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -60,9 +72,15 @@ "NAME": "Day of Prayer for the Legal Protection of Unborn Children", "GRADE": 3, "DISPLAYGRADE": "National Day of Prayer", - "COMMON": "Masses and Prayers for Various Needs and Occasions:For Giving Thanks to God for the Gift of Human Life,Preservation of Peace and Justice", + "COMMON": [ + "Masses and Prayers for Various Needs and Occasions:For Giving Thanks to God for the Gift of Human Life", + "Preservation of Peace and Justice" + ], "CALENDAR": "", - "COLOR": "purple,white", + "COLOR": [ + "purple", + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -78,9 +96,13 @@ "NAME": "Saint Katharine Drexel, Virgin", "GRADE": 2, "DISPLAYGRADE": "", - "COMMON": "Virgins:For One Virgin", + "COMMON": [ + "Virgins:For One Virgin" + ], "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -96,9 +118,13 @@ "NAME": "Saint Damien de Veuster, Priest", "GRADE": 2, "DISPLAYGRADE": "", - "COMMON": "Pastors:For Missionaries", + "COMMON": [ + "Pastors:For Missionaries" + ], "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -114,9 +140,13 @@ "NAME": "Saint Isidore", "GRADE": 2, "DISPLAYGRADE": "", - "COMMON": "Holy Men and Women:For One Saint", + "COMMON": [ + "Holy Men and Women:For One Saint" + ], "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -132,9 +162,14 @@ "NAME": "Blessed Junípero Serra, Priest", "GRADE": 2, "DISPLAYGRADE": "", - "COMMON": "Pastors:For One Pastor,Pastors:For Missionaries", + "COMMON": [ + "Pastors:For One Pastor", + "Pastors:For Missionaries" + ], "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -150,9 +185,13 @@ "NAME": "Independence Day", "GRADE": 3, "DISPLAYGRADE": "National Holiday", - "COMMON": "", + "COMMON": [ + "Proper" + ], "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -168,9 +207,13 @@ "NAME": "Blessed Kateri Tekakwitha, Virgin", "GRADE": 3, "DISPLAYGRADE": "", - "COMMON": "Virgins:For One Virgin", + "COMMON": [ + "Virgins:For One Virgin" + ], "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -186,9 +229,14 @@ "NAME": "Saint Peter Claver, Priest", "GRADE": 3, "DISPLAYGRADE": "", - "COMMON": "Pastors:For One Pastor,Holy Men and Women:For Those Who Practiced Works of Mercy", + "COMMON": [ + "Pastors:For One Pastor", + "Holy Men and Women:For Those Who Practiced Works of Mercy" + ], "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -204,9 +252,13 @@ "NAME": "Blessed Marie Rose Durocher, Virgin", "GRADE": 2, "DISPLAYGRADE": "", - "COMMON": "Virgins:For One Virgin", + "COMMON": [ + "Virgins:For One Virgin" + ], "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -222,9 +274,14 @@ "NAME": "Saint Frances Xavier Cabrini, Virgin", "GRADE": 3, "DISPLAYGRADE": "", - "COMMON": "Virgins:For One Virgin,Holy Men and Women:For Those Who Practiced Works of Mercy", + "COMMON": [ + "Virgins:For One Virgin", + "Holy Men and Women:For Those Who Practiced Works of Mercy" + ], "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -240,9 +297,13 @@ "NAME": "Saint Rose Philippine Duchesne, Virgin", "GRADE": 2, "DISPLAYGRADE": "", - "COMMON": "Virgins:For One Virgin", + "COMMON": [ + "Virgins:For One Virgin" + ], "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", @@ -258,27 +319,15 @@ "NAME": "Blessed Miguel Agustín Pro, Priest and Martyr", "GRADE": 2, "DISPLAYGRADE": "", - "COMMON": "Martyrs:For One Martyr,Pastors:For One Pastor", + "COMMON": [ + "Martyrs:For One Martyr", + "Pastors:For One Pastor" + ], "CALENDAR": "", - "COLOR": "white,red", - "READINGS": { - "FIRST_READING": "", - "RESPONSORIAL_PSALM": "", - "SECOND_READING": "", - "ALLELUIA_VERSE": "", - "GOSPEL": "" - } - }, - { - "MONTH": 12, - "DAY": 12, - "TAG": "LadyGuadalupe", - "NAME": "Our Lady of Guadalupe", - "GRADE": 4, - "DISPLAYGRADE": "", - "COMMON": "Proper", - "CALENDAR": "", - "COLOR": "white", + "COLOR": [ + "white", + "red" + ], "READINGS": { "FIRST_READING": "", "RESPONSORIAL_PSALM": "", diff --git a/data/propriumdetempore.json b/data/propriumdetempore.json new file mode 100644 index 00000000..33745fd0 --- /dev/null +++ b/data/propriumdetempore.json @@ -0,0 +1,700 @@ +{ + "HolyThurs": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "GoodFri": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "EasterVigil": { + "READINGS": { + "FIRST_READING": "Genesis 1:1-2:2|Genesis 1:1,26-31a", + "RESPONSORIAL_PSALM": "Psalm 104:1-2,5-6,10,12,13-14,24,35|Psalm 33:4-5,6-7,12-13,20,22", + "SECOND_READING": "Genesis 22:1-18|Genesis 22:1-2,9,10-13,15-18", + "RESPONSORIAL_PSALM_2": "Psalm 16:5,8,9-10,11", + "THIRD_READING": "Exodus 14:15-15:1", + "RESPONSORIAL_PSALM_3": "Exodus 15:1-2,3-4,5-6,17-18", + "FOURTH_READING": "Isaiah 54:5-14", + "RESPONSORIAL_PSALM_4": "Psalm 30:2,4,5-6,11-12,13", + "FIFTH_READING": "Isaiah 55:1-11", + "RESPONSORIAL_PSALM_5": "Isaiah 12:2-3,4,5-6", + "SIXTH_READING": "Baruch 3:9-15,32;4:4", + "RESPONSORIAL_PSALM_6": "Psalm 19:8,9,10,11", + "SEVENTH_READING": "Ezekiel 36:16-17,18-28", + "RESPONSORIAL_PSALM_7": "Psalm 42:3,5;43:3,4|Isaiah 12:2-3,4,5-6|Psalm 51:12-13,14-15,18-19", + "EPISTLE": "Romans 6:3-11", + "RESPONSORIAL_PSALM_EPISTLE": "Psalm 118:1-2,16-17,22-23", + "ALLELUIA_VERSE": "", + "GOSPEL": "Luke 24:1-12" + } + }, + "Easter": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Christmas": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "MotherGod": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Epiphany": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Ascension": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Pentecost": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Easter7": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Christmas2": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Advent1": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Advent2": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Advent3": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Advent4": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Lent1": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Lent2": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Lent3": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Lent4": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Lent5": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "PalmSun": { + "READINGS": { + "PALM_GOSPEL": "", + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Easter2": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Easter3": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Easter4": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Easter5": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Easter6": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Trinity": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "CorpusChristi": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "AshWednesday": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "MonHolyWeek": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "TueHolyWeek": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "WedHolyWeek": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "MonOctaveEaster": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "TueOctaveEaster": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "WedOctaveEaster": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "ThuOctaveEaster": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "FriOctaveEaster": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "SatOctaveEaster": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "SacredHeart": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "ChristKing": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "BaptismLord": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "HolyFamily": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday2": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday3": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday4": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday5": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday6": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday7": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday8": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday9": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday10": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday11": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday12": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday13": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday14": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday15": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday16": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday17": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday18": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday19": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday20": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday21": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday22": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday23": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday24": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday25": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday26": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday27": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday28": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday29": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday30": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday31": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday32": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday33": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "OrdSunday34": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "ImmaculateHeart": { + "READINGS": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + } +} diff --git a/i18n/de/LC_MESSAGES/litcal.mo b/i18n/de/LC_MESSAGES/litcal.mo new file mode 100644 index 00000000..d625cf5e Binary files /dev/null and b/i18n/de/LC_MESSAGES/litcal.mo differ diff --git a/i18n/de/LC_MESSAGES/litcal.po b/i18n/de/LC_MESSAGES/litcal.po index c052441d..34f85625 100644 --- a/i18n/de/LC_MESSAGES/litcal.po +++ b/i18n/de/LC_MESSAGES/litcal.po @@ -2,111 +2,131 @@ # Copyright (C) 2021 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Ubuntu , 2021. -# +# John R. D'Orazio , 2022. msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-27 14:41+0000\n" -"PO-Revision-Date: 2021-12-14 00:21+0100\n" -"Last-Translator: Ubuntu \n" -"Language-Team: German\n" +"POT-Creation-Date: 2022-06-06 08:21+0000\n" +"PO-Revision-Date: 2022-06-06 06:40+0000\n" +"Last-Translator: John R. D'Orazio \n" +"Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ASCII\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.12.1\n" -#: includes/LitCalAPI.php:222 +#: includes/LitCalAPI.php:229 #, php-format msgid "" "Only years from 1970 and after are supported. You tried requesting the year " "%d." msgstr "" -#: includes/LitCalAPI.php:329 includes/LitCalAPI.php:368 +#. translators: name of the Roman Missal +#: includes/LitCalAPI.php:265 +#, php-format +msgid "Data for the sanctorale from %s could not be found." +msgstr "" + +#. translators: name of the Roman Missal +#: includes/LitCalAPI.php:272 +#, php-format +msgid "Translation data for the sanctorale from %s could not be found." +msgstr "" + +#: includes/LitCalAPI.php:348 includes/LitCalAPI.php:387 #, php-format msgid "%s day before Epiphany" msgstr "" -#: includes/LitCalAPI.php:343 includes/LitCalAPI.php:381 +#: includes/LitCalAPI.php:362 includes/LitCalAPI.php:400 #, php-format msgid "%s day after Epiphany" msgstr "" -#: includes/LitCalAPI.php:533 includes/LitCalAPI.php:549 -#: includes/LitCalAPI.php:575 +#. translators: 1: Festivity name, 2: Festivity date, 3: Requested calendar year, 4: Explicatory string for the transferral (ex. the Saturday preceding Palm Sunday), 5: actual date for the transferral, 6: Decree of the Congregation for Divine Worship +#. translators: 1: Festivity name, 2: Festivity date, 3: Requested calendar year, 4: Explicatory string for the transferral, 5: actual date for the transferral, 6: Decree of the Congregation for Divine Worship +#: includes/LitCalAPI.php:553 includes/LitCalAPI.php:570 +#: includes/LitCalAPI.php:597 #, php-format msgid "" -"The Solemnity '%s' falls on %s in the year %d, the celebration has been " -"transferred to %s (%s) as per the %s." +"The Solemnity '%1$s' falls on %2$s in the year %3$d, the celebration has " +"been transferred to %4$s (%5$s) as per the %6$s." msgstr "" -#: includes/LitCalAPI.php:537 +#: includes/LitCalAPI.php:557 msgid "the Saturday preceding Palm Sunday" msgstr "" -#: includes/LitCalAPI.php:542 includes/LitCalAPI.php:558 -#: includes/LitCalAPI.php:584 includes/LitCalAPI.php:612 -#: includes/LitCalAPI.php:898 includes/LitCalAPI.php:1017 -#: includes/LitCalAPI.php:1073 includes/LitCalAPI.php:1230 -#: includes/LitCalAPI.php:1275 includes/LitCalAPI.php:1302 -#: includes/LitCalAPI.php:1411 includes/LitCalAPI.php:1423 -#: includes/LitCalAPI.php:1438 includes/LitCalAPI.php:1464 -#: includes/FestivityCollection.php:386 +#: includes/LitCalAPI.php:562 includes/LitCalAPI.php:579 +#: includes/LitCalAPI.php:606 includes/LitCalAPI.php:636 +#: includes/LitCalAPI.php:928 includes/LitCalAPI.php:1047 +#: includes/LitCalAPI.php:1103 includes/LitCalAPI.php:1262 +#: includes/LitCalAPI.php:1307 includes/LitCalAPI.php:1334 +#: includes/LitCalAPI.php:1444 includes/LitCalAPI.php:1457 +#: includes/LitCalAPI.php:1472 includes/LitCalAPI.php:1499 +#: includes/FestivityCollection.php:365 msgid "Decree of the Congregation for Divine Worship" msgstr "" -#: includes/LitCalAPI.php:553 +#: includes/LitCalAPI.php:574 msgid "the Monday following the Second Sunday of Easter" msgstr "" -#: includes/LitCalAPI.php:579 +#: includes/LitCalAPI.php:601 msgid "the following Monday" msgstr "" -#: includes/LitCalAPI.php:590 +#. translators: 1: Festivity name, 2: Coinciding Festivity name, 3: Requested calendar year +#: includes/LitCalAPI.php:613 #, php-format msgid "" -"The Solemnity '%s' coincides with the Solemnity '%s' in the year %d. We " -"should ask the Congregation for Divine Worship what to do about this!" +"The Solemnity '%1$s' coincides with the Solemnity '%2$s' in the year %3$d. " +"We should ask the Congregation for Divine Worship what to do about this!" msgstr "" -#: includes/LitCalAPI.php:608 +#. translators: 1: Festivity name, 2: Coinciding Festivity name, 3: Requested calendar year, 4: Decree of the Congregation for Divine Worship +#: includes/LitCalAPI.php:632 #, php-format msgid "" -"Seeing that the Solemnity '%s' coincides with the Solemnity '%s' in the year " -"%d, it has been anticipated by one day as per %s." +"Seeing that the Solemnity '%1$s' coincides with the Solemnity '%2$s' in the " +"year %3$d, it has been anticipated by one day as per %4$s." msgstr "" -#: includes/LitCalAPI.php:676 +#. translators: 1: Festivity name (Christmas), 2: Requested calendar year, 3: Festivity name (Holy Family), 4: New date for Holy Family +#: includes/LitCalAPI.php:701 #, php-format msgid "" -"'%s' falls on a Sunday in the year %d, therefore the Feast '%s' is " -"celebrated on %s rather than on the Sunday after Christmas." +"'%1$s' falls on a Sunday in the year %2$d, therefore the Feast '%3$s' is " +"celebrated on %4$s rather than on the Sunday after Christmas." msgstr "" -#: includes/LitCalAPI.php:710 includes/LitCalAPI.php:734 +#. translators: 1: Festivity name, 2: Superseding Festivity grade, 3: Superseding Festivity name, 4: Requested calendar year +#: includes/LitCalAPI.php:736 includes/LitCalAPI.php:761 #, php-format -msgid "'%s' is superseded by the %s '%s' in the year %d." +msgid "'%1$s' is superseded by the %2$s '%3$s' in the year %4$d." msgstr "" -#: includes/LitCalAPI.php:787 +#: includes/LitCalAPI.php:814 #, php-format msgid "of the %s Week of Advent" msgstr "" -#: includes/LitCalAPI.php:804 +#: includes/LitCalAPI.php:831 #, php-format msgid "%s Day of the Octave of Christmas" msgstr "" -#: includes/LitCalAPI.php:828 +#: includes/LitCalAPI.php:855 #, php-format msgid "of the %s Week of Lent" msgstr "" -#: includes/LitCalAPI.php:833 +#: includes/LitCalAPI.php:860 msgid "after Ash Wednesday" msgstr "" @@ -116,7 +136,7 @@ msgstr "" #. 3. Day of the festivity #. 4. Year from which the festivity has been added #. 5. Source of the information -#. 6. Current year +#. 6. Requested calendar year #. #. translators: #. 1. Grade or rank of the festivity being created @@ -124,17 +144,25 @@ msgstr "" #. 3. Indication of the mobile date for the festivity being created #. 4. Year from which the festivity has been added #. 5. Source of the information -#. 6. Current year +#. 6. Requested calendar year #. -#: includes/LitCalAPI.php:853 includes/LitCalAPI.php:1109 -#: includes/LitCalAPI.php:1286 +#. translators: +#. 1. Grade or rank of the festivity +#. 2. Name of the festivity +#. 3. Day of the festivity +#. 4. Year from which the festivity has been added +#. 5. Source of the information +#. 6. Requested calendar year +#. +#: includes/LitCalAPI.php:880 includes/LitCalAPI.php:1141 +#: includes/LitCalAPI.php:1318 includes/LitCalAPI.php:1840 #, php-format msgid "" "The %1$s '%2$s' has been added on %3$s since the year %4$d (%5$s), " "applicable to the year %6$d." msgstr "" -#: includes/LitCalAPI.php:884 includes/LitCalAPI.php:976 +#: includes/LitCalAPI.php:914 includes/LitCalAPI.php:1006 msgid "" "Vatican Press conference: Presentation of the Editio Typica Tertia of the " "Roman Missal" @@ -143,9 +171,9 @@ msgstr "" #. translators: #. 1. Grade or rank of the festivity #. 2. Name of the festivity -#. 3. Current year +#. 3. Requested calendar year #. -#: includes/LitCalAPI.php:930 +#: includes/LitCalAPI.php:960 #, php-format msgid "" "The %1$s '%2$s' either falls between 17 Dec. and 24 Dec., or during the " @@ -158,14 +186,14 @@ msgstr "" #. 2. Name of the festivity that has been superseded #. 3. Grade or rank of the festivity that is superseding #. 4. Name of the festivity that is superseding -#. 5. Current year +#. 5. Requested calendar year #. -#: includes/LitCalAPI.php:952 +#: includes/LitCalAPI.php:982 #, php-format msgid "The %1$s '%2$s' is superseded by the %3$s '%4$s' in the year %5$d." msgstr "" -#: includes/LitCalAPI.php:972 +#: includes/LitCalAPI.php:1002 msgid "Apostolic Constitution Missale Romanum" msgstr "" @@ -178,9 +206,9 @@ msgstr "" #. 6. Date in which the superseded festivity is usually celebrated #. 7. Grade or rank of the festivity that is superseding #. 8. Name of the festivity that is superseding -#. 9. Current year +#. 9. Requested calendar year #. -#: includes/LitCalAPI.php:994 +#: includes/LitCalAPI.php:1024 #, php-format msgid "" "The %1$s '%2$s', added in the %3$s of the Roman Missal since the year %4$d " @@ -196,9 +224,9 @@ msgstr "" #. 5. Source of the information #. 6. Grade or rank of the superseding festivity #. 7. Name of the superseding festivity -#. 8. Current year +#. 8. Requested calendar year #. -#: includes/LitCalAPI.php:1030 +#: includes/LitCalAPI.php:1060 #, php-format msgid "" "The %1$s '%2$s', added on %3$s since the year %4$d (%5$s), is however " @@ -208,17 +236,17 @@ msgstr "" #. translators: #. 1. Name of the first coinciding Memorial #. 2. Name of the second coinciding Memorial -#. 3. Current year +#. 3. Requested calendar year #. 4. Source of the information #. -#: includes/LitCalAPI.php:1069 +#: includes/LitCalAPI.php:1099 #, php-format msgid "" "The Memorial '%1$s' coincides with another Memorial '%2$s' in the year %3$d. " "They are both reduced in rank to optional memorials (%4$s)." msgstr "" -#: includes/LitCalAPI.php:1088 +#: includes/LitCalAPI.php:1120 msgid "the Monday after Pentecost" msgstr "" @@ -227,10 +255,10 @@ msgstr "" #. 2. Name of the festivity #. 3. New name of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1144 +#: includes/LitCalAPI.php:1176 #, php-format msgid "" "The name of the %1$s '%2$s' has been changed to %3$s since the year %4$d, " @@ -242,10 +270,10 @@ msgstr "" #. 2. Name of the festivity #. 3. New grade of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1166 +#: includes/LitCalAPI.php:1198 #, php-format msgid "" "The %1$s '%2$s' has been raised to the rank of %3$s since the year %4$d, " @@ -257,10 +285,10 @@ msgstr "" #. 2. Name of the festivity #. 3. New grade of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1176 +#: includes/LitCalAPI.php:1208 #, php-format msgid "" "The %1$s '%2$s' has been lowered to the rank of %3$s since the year %4$d, " @@ -270,17 +298,17 @@ msgstr "" #. translators: #. 1. Name of the festivity #. 2. Year in which was declared Doctor -#. 3. Current year +#. 3. Requested calendar year #. 4. Source of the information #. -#: includes/LitCalAPI.php:1210 +#: includes/LitCalAPI.php:1242 #, php-format msgid "" "'%1$s' has been declared a Doctor of the Church since the year %2$d, " "applicable to the year %3$d (%4$s)." msgstr "" -#: includes/LitCalAPI.php:1218 +#: includes/LitCalAPI.php:1250 msgid "and Doctor of the Church" msgstr "" @@ -292,9 +320,9 @@ msgstr "" #. 5. Source of the information #. 6. Grade or rank of superseding festivity #. 7. Name of superseding festivity -#. 8. Current year +#. 8. Requested calendar year #. -#: includes/LitCalAPI.php:1323 +#: includes/LitCalAPI.php:1355 #, php-format msgid "" "The %1$s '%2$s', added on %3$s since the year %4$d (%5$s), is however " @@ -302,7 +330,7 @@ msgid "" msgstr "" #. translators: -#. 1. Current year +#. 1. Requested calendar year #. 2. Grade or rank of suppressed festivity #. 3. Name of suppressed festivity #. 4. Grade or rank of the festivity being created @@ -311,29 +339,31 @@ msgstr "" #. 7. Year from which the festivity has been added #. 8. Source of the information #. -#: includes/LitCalAPI.php:1351 +#: includes/LitCalAPI.php:1383 #, php-format msgid "" "In the year %1$d, the %2$s '%3$s' has been suppressed by the %4$s '%5$s', " "added on %6$s since the year %7$d (%8$s)." msgstr "" -#: includes/LitCalAPI.php:1409 +#. translators: 1: Festivity name, 2: Source of the information, 3: Requested calendar year +#: includes/LitCalAPI.php:1442 #, php-format msgid "" -"The optional memorial '%s' has been transferred from Dec. 12 to Aug. 12 " -"since the year 2002 (%s), applicable to the year %d." +"The optional memorial '%1$s' has been transferred from Dec. 12 to Aug. 12 " +"since the year 2002 (%2$s), applicable to the year %3$d." msgstr "" -#: includes/LitCalAPI.php:1421 +#. translators: 1: Festivity name, 2: Source of the information, 3: Requested calendar year +#: includes/LitCalAPI.php:1455 #, php-format msgid "" -"The optional memorial '%s', which would have been superseded this year by a " -"Sunday or Solemnity were it on Dec. 12, has however been transferred to Aug. " -"12 since the year 2002 (%s), applicable to the year %d." +"The optional memorial '%1$s', which would have been superseded this year by " +"a Sunday or Solemnity were it on Dec. 12, has however been transferred to " +"Aug. 12 since the year 2002 (%2$s), applicable to the year %3$d." msgstr "" -#: includes/LitCalAPI.php:1436 +#: includes/LitCalAPI.php:1470 #, php-format msgid "" "The optional memorial '%1$s' has been transferred from Dec. 12 to Aug. 12 " @@ -341,89 +371,143 @@ msgid "" "superseded by a Sunday, a Solemnity, or a Feast '%4$s' in the year %3$d." msgstr "" -#: includes/LitCalAPI.php:1462 +#. translators: 1: Festivity name, 2: Source of the information +#: includes/LitCalAPI.php:1497 #, php-format msgid "" -"The Feast '%s' would have been suppressed this year ( 2009 ) since it falls " -"on a Sunday, however being the Year of the Apostle Paul, as per the %s it " -"has been reinstated so that local churches can optionally celebrate the " -"memorial." +"The Feast '%1$s' would have been suppressed this year ( 2009 ) since it " +"falls on a Sunday, however being the Year of the Apostle Paul, as per the " +"%2$s it has been reinstated so that local churches can optionally celebrate " +"the memorial." msgstr "" -#: includes/LitCalAPI.php:1486 +#: includes/LitCalAPI.php:1521 #, php-format msgid "of the %s Week of Easter" msgstr "" -#: includes/LitCalAPI.php:1522 includes/LitCalAPI.php:1551 +#: includes/LitCalAPI.php:1557 includes/LitCalAPI.php:1586 #, php-format msgid "of the %s Week of Ordinary Time" msgstr "" -#: includes/LitCalAPI.php:1574 +#: includes/LitCalAPI.php:1609 msgid "Saturday Memorial of the Blessed Virgin Mary" msgstr "" +#: includes/LitCalAPI.php:1634 includes/LitCalAPI.php:1637 +#, php-format +msgid "Error retrieving and decoding Wider Region data from file %s." +msgstr "" + +#: includes/LitCalAPI.php:1644 +#, php-format +msgid "Error retrieving and decoding National data from file %s." +msgstr "" + #. translators: #. 1. Grade of the festivity #. 2. Name of the festivity #. 3. Date on which the festivity is usually celebrated #. 4. Grade of the superseding festivity #. 5. Name of the superseding festivity -#. 6. Current year +#. 6. Requested calendar year #. -#: includes/LitCalAPI.php:1633 +#: includes/LitCalAPI.php:1677 #, php-format msgid "" "The %1$s '%2$s', usually celebrated on %3$s, is suppressed by the %4$s " "'%5$s' in the year %6$d." msgstr "" -#: includes/LitCalAPI.php:1651 -msgctxt "Male singular" -msgid "patron of Europe" +#. translators: +#. 1. Name of the first coinciding Memorial +#. 2. Name of the second coinciding Memorial +#. 3. Requested calendar year +#. 4. Source of the information +#. +#: includes/LitCalAPI.php:1742 +#, php-format +msgid "" +"The Memorial '%1$s' coincides with another Memorial '%2$s' in the year %3$d. " +"They are both reduced in rank to optional memorials." msgstr "" -#: includes/LitCalAPI.php:1652 includes/LitCalAPI.php:1660 -#: includes/LitCalAPI.php:1664 includes/LitCalAPI.php:1683 -msgctxt "Female singular" -msgid "patron of Europe" +#: includes/LitCalAPI.php:1805 +msgid "" +"We should be creating a new festivity, however we do not seem to have the " +"correct date information in order to proceed" msgstr "" -#: includes/LitCalAPI.php:1653 -msgctxt "Male plural" -msgid "patrons of Europe" +#. translators: Name of the Roman Missal +#: includes/LitCalAPI.php:1920 +#, php-format +msgid "Found a sanctorale data file for %s" msgstr "" -#: includes/LitCalAPI.php:1671 -msgid "Saint Teresa Benedicta of the Cross, Virgin and Martyr" +#. translators: +#. 1. Festivity grade +#. 2. Festivity name +#. 3. Festivity date +#. 4. Edition of the Roman Missal +#. 5. Superseding festivity grade +#. 6. Superseding festivity name +#. 7. Requested calendar year +#. +#: includes/LitCalAPI.php:1950 +#, php-format +msgid "" +"The %1$s '%2$s' (%3$s), added to the national calendar in the %4$s, is " +"superseded by the %5$s '%6$s' in the year %7$d" +msgstr "" + +#. translators: Name of the Roman Missal +#: includes/LitCalAPI.php:1965 +#, php-format +msgid "Could not find a sanctorale data file for %s" +msgstr "" + +#. translators: 1. Festivity grade, 2. Festivity name, 3. New festivity name, 4: Requested calendar year, 5. Old date, 6. New date +#: includes/LitCalAPI.php:2057 +#, php-format +msgid "" +"The %1$s '%2$s' is transferred from %5$s to %6$s as per the %7$s, to make " +"room for '%3$s': applicable to the year %4$d." +msgstr "" + +#. translators: 1. Festivity grade, 2. Festivity name, 3. Old date, 4. New date, 5. Source of the information, 6. New festivity name, 7. Superseding festivity grade, 8. Superseding festivity name, 9: Requested calendar year +#: includes/LitCalAPI.php:2076 +#, php-format +msgid "" +"The %1$s '%2$s' would have been transferred from %3$s to %4$s as per the " +"%5$s, to make room for '%6$s', however it is suppressed by the %7$s '%8$s' " +"in the year %9$d." msgstr "" #. translators: when there are multiple possible commons, this will be the glue "or from the common of..." #: includes/LitMessages.php:142 includes/LitMessages.php:153 -#: includes/enums/LitCommon.php:327 +#: includes/enums/LitCommon.php:346 msgid "or" msgstr "" #. translators: in reference to the cycle of liturgical years (A, B, C; I, II) -#: includes/FestivityCollection.php:36 +#: includes/FestivityCollection.php:44 msgid "YEAR" msgstr "" -#: includes/FestivityCollection.php:37 +#: includes/FestivityCollection.php:45 msgid "Vigil Mass" msgstr "" -#: includes/FestivityCollection.php:339 includes/FestivityCollection.php:366 +#: includes/FestivityCollection.php:359 #, php-format msgid "" -"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " -"This last Solemnity takes precedence, therefore it will maintain Vespers II " -"and an evening Mass, while the first Solemnity will not have a Vigil Mass or " -"Vespers I." +"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. As " +"per %s, the first has precedence, therefore the Vigil Mass is confirmed as " +"are I Vespers." msgstr "" -#: includes/FestivityCollection.php:352 includes/FestivityCollection.php:410 +#: includes/FestivityCollection.php:373 #, php-format msgid "" "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " @@ -432,15 +516,16 @@ msgid "" "evening Mass." msgstr "" -#: includes/FestivityCollection.php:380 +#: includes/FestivityCollection.php:383 #, php-format msgid "" -"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. As " -"per %s, the first has precedence, therefore the Vigil Mass is confirmed as " -"are I Vespers." +"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " +"This last Solemnity takes precedence, therefore it will maintain Vespers II " +"and an evening Mass, while the first Solemnity will not have a Vigil Mass or " +"Vespers I." msgstr "" -#: includes/FestivityCollection.php:392 +#: includes/FestivityCollection.php:443 #, php-format msgid "" "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. We " @@ -448,27 +533,27 @@ msgid "" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:24 +#: includes/enums/LitColor.php:27 msgid "green" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:27 +#: includes/enums/LitColor.php:30 msgid "purple" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:30 +#: includes/enums/LitColor.php:33 msgid "white" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:33 +#: includes/enums/LitColor.php:36 msgid "red" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:36 +#: includes/enums/LitColor.php:39 msgid "pink" msgstr "" @@ -665,7 +750,7 @@ msgctxt "(SING_MASC)" msgid "of" msgstr "" -#: includes/enums/LitCommon.php:323 +#: includes/enums/LitCommon.php:342 msgid "From the Common" msgstr "" @@ -682,27 +767,27 @@ msgstr "" #. translators: liturgical rank. Keep Capitalized #: includes/enums/LitGrade.php:100 msgid "Optional memorial" -msgstr "" +msgstr "Optionale Gedenkstät" #. translators: liturgical rank. Keep Capitalized #: includes/enums/LitGrade.php:105 msgid "Memorial" -msgstr "" +msgstr "Gedenkstät" #. translators: liturgical rank. Keep UPPERCASE #: includes/enums/LitGrade.php:110 msgid "FEAST" -msgstr "" +msgstr "FEST" #. translators: liturgical rank. Keep UPPERCASE #: includes/enums/LitGrade.php:115 msgid "FEAST OF THE LORD" -msgstr "" +msgstr "FEST DES HERRN" #. translators: liturgical rank. Keep UPPERCASE #: includes/enums/LitGrade.php:120 msgid "SOLEMNITY" -msgstr "" +msgstr "FESTLICHKEIT" #. translators: liturgical rank. Keep lowercase #: includes/enums/LitGrade.php:125 diff --git a/i18n/es/LC_MESSAGES/litcal.mo b/i18n/es/LC_MESSAGES/litcal.mo new file mode 100644 index 00000000..d46c0791 Binary files /dev/null and b/i18n/es/LC_MESSAGES/litcal.mo differ diff --git a/i18n/es/LC_MESSAGES/litcal.po b/i18n/es/LC_MESSAGES/litcal.po index da18f0a1..ef8676b4 100644 --- a/i18n/es/LC_MESSAGES/litcal.po +++ b/i18n/es/LC_MESSAGES/litcal.po @@ -2,111 +2,137 @@ # Copyright (C) 2021 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Ubuntu , 2021. -# +# John R. D'Orazio , 2022. msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-27 14:41+0000\n" -"PO-Revision-Date: 2021-12-14 00:20+0100\n" -"Last-Translator: Ubuntu \n" -"Language-Team: Spanish\n" +"POT-Creation-Date: 2022-06-06 08:21+0000\n" +"PO-Revision-Date: 2022-05-21 10:16+0000\n" +"Last-Translator: John R. D'Orazio \n" +"Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ASCII\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.12.1\n" -#: includes/LitCalAPI.php:222 +#: includes/LitCalAPI.php:229 #, php-format msgid "" "Only years from 1970 and after are supported. You tried requesting the year " "%d." msgstr "" +"Solo se admiten los años a partir de 1970. Intentaste solicitar el año %d." -#: includes/LitCalAPI.php:329 includes/LitCalAPI.php:368 +#. translators: name of the Roman Missal +#: includes/LitCalAPI.php:265 #, php-format -msgid "%s day before Epiphany" +msgid "Data for the sanctorale from %s could not be found." msgstr "" -#: includes/LitCalAPI.php:343 includes/LitCalAPI.php:381 +#. translators: name of the Roman Missal +#: includes/LitCalAPI.php:272 #, php-format -msgid "%s day after Epiphany" +msgid "Translation data for the sanctorale from %s could not be found." msgstr "" -#: includes/LitCalAPI.php:533 includes/LitCalAPI.php:549 -#: includes/LitCalAPI.php:575 +#: includes/LitCalAPI.php:348 includes/LitCalAPI.php:387 +#, php-format +msgid "%s day before Epiphany" +msgstr "%s día antes de la Epifanía" + +#: includes/LitCalAPI.php:362 includes/LitCalAPI.php:400 #, php-format +msgid "%s day after Epiphany" +msgstr "%s día después de la Epifanía" + +#. translators: 1: Festivity name, 2: Festivity date, 3: Requested calendar year, 4: Explicatory string for the transferral (ex. the Saturday preceding Palm Sunday), 5: actual date for the transferral, 6: Decree of the Congregation for Divine Worship +#. translators: 1: Festivity name, 2: Festivity date, 3: Requested calendar year, 4: Explicatory string for the transferral, 5: actual date for the transferral, 6: Decree of the Congregation for Divine Worship +#: includes/LitCalAPI.php:553 includes/LitCalAPI.php:570 +#: includes/LitCalAPI.php:597 +#, fuzzy, php-format +#| msgid "" +#| "The Solemnity '%s' falls on %s in the year %d, the celebration has been " +#| "transferred to %s (%s) as per the %s." msgid "" -"The Solemnity '%s' falls on %s in the year %d, the celebration has been " -"transferred to %s (%s) as per the %s." +"The Solemnity '%1$s' falls on %2$s in the year %3$d, the celebration has " +"been transferred to %4$s (%5$s) as per the %6$s." msgstr "" +"La Solemnidad '%s' coincide con %s en el año %d, por tanto, la " +"celebración ha sido trasladada a %s (%s) según el %s." -#: includes/LitCalAPI.php:537 +#: includes/LitCalAPI.php:557 msgid "the Saturday preceding Palm Sunday" -msgstr "" - -#: includes/LitCalAPI.php:542 includes/LitCalAPI.php:558 -#: includes/LitCalAPI.php:584 includes/LitCalAPI.php:612 -#: includes/LitCalAPI.php:898 includes/LitCalAPI.php:1017 -#: includes/LitCalAPI.php:1073 includes/LitCalAPI.php:1230 -#: includes/LitCalAPI.php:1275 includes/LitCalAPI.php:1302 -#: includes/LitCalAPI.php:1411 includes/LitCalAPI.php:1423 -#: includes/LitCalAPI.php:1438 includes/LitCalAPI.php:1464 -#: includes/FestivityCollection.php:386 +msgstr "Sábado anterior al Domingo de Ramos" + +#: includes/LitCalAPI.php:562 includes/LitCalAPI.php:579 +#: includes/LitCalAPI.php:606 includes/LitCalAPI.php:636 +#: includes/LitCalAPI.php:928 includes/LitCalAPI.php:1047 +#: includes/LitCalAPI.php:1103 includes/LitCalAPI.php:1262 +#: includes/LitCalAPI.php:1307 includes/LitCalAPI.php:1334 +#: includes/LitCalAPI.php:1444 includes/LitCalAPI.php:1457 +#: includes/LitCalAPI.php:1472 includes/LitCalAPI.php:1499 +#: includes/FestivityCollection.php:365 msgid "Decree of the Congregation for Divine Worship" -msgstr "" +msgstr "Decreto de la Congregación para el Culto Divino" -#: includes/LitCalAPI.php:553 +#: includes/LitCalAPI.php:574 msgid "the Monday following the Second Sunday of Easter" msgstr "" -#: includes/LitCalAPI.php:579 +#: includes/LitCalAPI.php:601 msgid "the following Monday" msgstr "" -#: includes/LitCalAPI.php:590 +#. translators: 1: Festivity name, 2: Coinciding Festivity name, 3: Requested calendar year +#: includes/LitCalAPI.php:613 #, php-format msgid "" -"The Solemnity '%s' coincides with the Solemnity '%s' in the year %d. We " -"should ask the Congregation for Divine Worship what to do about this!" +"The Solemnity '%1$s' coincides with the Solemnity '%2$s' in the year %3$d. " +"We should ask the Congregation for Divine Worship what to do about this!" msgstr "" -#: includes/LitCalAPI.php:608 +#. translators: 1: Festivity name, 2: Coinciding Festivity name, 3: Requested calendar year, 4: Decree of the Congregation for Divine Worship +#: includes/LitCalAPI.php:632 #, php-format msgid "" -"Seeing that the Solemnity '%s' coincides with the Solemnity '%s' in the year " -"%d, it has been anticipated by one day as per %s." +"Seeing that the Solemnity '%1$s' coincides with the Solemnity '%2$s' in the " +"year %3$d, it has been anticipated by one day as per %4$s." msgstr "" -#: includes/LitCalAPI.php:676 +#. translators: 1: Festivity name (Christmas), 2: Requested calendar year, 3: Festivity name (Holy Family), 4: New date for Holy Family +#: includes/LitCalAPI.php:701 #, php-format msgid "" -"'%s' falls on a Sunday in the year %d, therefore the Feast '%s' is " -"celebrated on %s rather than on the Sunday after Christmas." +"'%1$s' falls on a Sunday in the year %2$d, therefore the Feast '%3$s' is " +"celebrated on %4$s rather than on the Sunday after Christmas." msgstr "" -#: includes/LitCalAPI.php:710 includes/LitCalAPI.php:734 +#. translators: 1: Festivity name, 2: Superseding Festivity grade, 3: Superseding Festivity name, 4: Requested calendar year +#: includes/LitCalAPI.php:736 includes/LitCalAPI.php:761 #, php-format -msgid "'%s' is superseded by the %s '%s' in the year %d." +msgid "'%1$s' is superseded by the %2$s '%3$s' in the year %4$d." msgstr "" -#: includes/LitCalAPI.php:787 +#: includes/LitCalAPI.php:814 #, php-format msgid "of the %s Week of Advent" msgstr "" -#: includes/LitCalAPI.php:804 +#: includes/LitCalAPI.php:831 #, php-format msgid "%s Day of the Octave of Christmas" msgstr "" -#: includes/LitCalAPI.php:828 +#: includes/LitCalAPI.php:855 #, php-format msgid "of the %s Week of Lent" msgstr "" -#: includes/LitCalAPI.php:833 +#: includes/LitCalAPI.php:860 msgid "after Ash Wednesday" msgstr "" @@ -116,7 +142,7 @@ msgstr "" #. 3. Day of the festivity #. 4. Year from which the festivity has been added #. 5. Source of the information -#. 6. Current year +#. 6. Requested calendar year #. #. translators: #. 1. Grade or rank of the festivity being created @@ -124,17 +150,25 @@ msgstr "" #. 3. Indication of the mobile date for the festivity being created #. 4. Year from which the festivity has been added #. 5. Source of the information -#. 6. Current year +#. 6. Requested calendar year #. -#: includes/LitCalAPI.php:853 includes/LitCalAPI.php:1109 -#: includes/LitCalAPI.php:1286 +#. translators: +#. 1. Grade or rank of the festivity +#. 2. Name of the festivity +#. 3. Day of the festivity +#. 4. Year from which the festivity has been added +#. 5. Source of the information +#. 6. Requested calendar year +#. +#: includes/LitCalAPI.php:880 includes/LitCalAPI.php:1141 +#: includes/LitCalAPI.php:1318 includes/LitCalAPI.php:1840 #, php-format msgid "" "The %1$s '%2$s' has been added on %3$s since the year %4$d (%5$s), " "applicable to the year %6$d." msgstr "" -#: includes/LitCalAPI.php:884 includes/LitCalAPI.php:976 +#: includes/LitCalAPI.php:914 includes/LitCalAPI.php:1006 msgid "" "Vatican Press conference: Presentation of the Editio Typica Tertia of the " "Roman Missal" @@ -143,9 +177,9 @@ msgstr "" #. translators: #. 1. Grade or rank of the festivity #. 2. Name of the festivity -#. 3. Current year +#. 3. Requested calendar year #. -#: includes/LitCalAPI.php:930 +#: includes/LitCalAPI.php:960 #, php-format msgid "" "The %1$s '%2$s' either falls between 17 Dec. and 24 Dec., or during the " @@ -158,14 +192,14 @@ msgstr "" #. 2. Name of the festivity that has been superseded #. 3. Grade or rank of the festivity that is superseding #. 4. Name of the festivity that is superseding -#. 5. Current year +#. 5. Requested calendar year #. -#: includes/LitCalAPI.php:952 +#: includes/LitCalAPI.php:982 #, php-format msgid "The %1$s '%2$s' is superseded by the %3$s '%4$s' in the year %5$d." msgstr "" -#: includes/LitCalAPI.php:972 +#: includes/LitCalAPI.php:1002 msgid "Apostolic Constitution Missale Romanum" msgstr "" @@ -178,9 +212,9 @@ msgstr "" #. 6. Date in which the superseded festivity is usually celebrated #. 7. Grade or rank of the festivity that is superseding #. 8. Name of the festivity that is superseding -#. 9. Current year +#. 9. Requested calendar year #. -#: includes/LitCalAPI.php:994 +#: includes/LitCalAPI.php:1024 #, php-format msgid "" "The %1$s '%2$s', added in the %3$s of the Roman Missal since the year %4$d " @@ -196,9 +230,9 @@ msgstr "" #. 5. Source of the information #. 6. Grade or rank of the superseding festivity #. 7. Name of the superseding festivity -#. 8. Current year +#. 8. Requested calendar year #. -#: includes/LitCalAPI.php:1030 +#: includes/LitCalAPI.php:1060 #, php-format msgid "" "The %1$s '%2$s', added on %3$s since the year %4$d (%5$s), is however " @@ -208,17 +242,17 @@ msgstr "" #. translators: #. 1. Name of the first coinciding Memorial #. 2. Name of the second coinciding Memorial -#. 3. Current year +#. 3. Requested calendar year #. 4. Source of the information #. -#: includes/LitCalAPI.php:1069 +#: includes/LitCalAPI.php:1099 #, php-format msgid "" "The Memorial '%1$s' coincides with another Memorial '%2$s' in the year %3$d. " "They are both reduced in rank to optional memorials (%4$s)." msgstr "" -#: includes/LitCalAPI.php:1088 +#: includes/LitCalAPI.php:1120 msgid "the Monday after Pentecost" msgstr "" @@ -227,10 +261,10 @@ msgstr "" #. 2. Name of the festivity #. 3. New name of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1144 +#: includes/LitCalAPI.php:1176 #, php-format msgid "" "The name of the %1$s '%2$s' has been changed to %3$s since the year %4$d, " @@ -242,10 +276,10 @@ msgstr "" #. 2. Name of the festivity #. 3. New grade of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1166 +#: includes/LitCalAPI.php:1198 #, php-format msgid "" "The %1$s '%2$s' has been raised to the rank of %3$s since the year %4$d, " @@ -257,10 +291,10 @@ msgstr "" #. 2. Name of the festivity #. 3. New grade of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1176 +#: includes/LitCalAPI.php:1208 #, php-format msgid "" "The %1$s '%2$s' has been lowered to the rank of %3$s since the year %4$d, " @@ -270,17 +304,17 @@ msgstr "" #. translators: #. 1. Name of the festivity #. 2. Year in which was declared Doctor -#. 3. Current year +#. 3. Requested calendar year #. 4. Source of the information #. -#: includes/LitCalAPI.php:1210 +#: includes/LitCalAPI.php:1242 #, php-format msgid "" "'%1$s' has been declared a Doctor of the Church since the year %2$d, " "applicable to the year %3$d (%4$s)." msgstr "" -#: includes/LitCalAPI.php:1218 +#: includes/LitCalAPI.php:1250 msgid "and Doctor of the Church" msgstr "" @@ -292,9 +326,9 @@ msgstr "" #. 5. Source of the information #. 6. Grade or rank of superseding festivity #. 7. Name of superseding festivity -#. 8. Current year +#. 8. Requested calendar year #. -#: includes/LitCalAPI.php:1323 +#: includes/LitCalAPI.php:1355 #, php-format msgid "" "The %1$s '%2$s', added on %3$s since the year %4$d (%5$s), is however " @@ -302,7 +336,7 @@ msgid "" msgstr "" #. translators: -#. 1. Current year +#. 1. Requested calendar year #. 2. Grade or rank of suppressed festivity #. 3. Name of suppressed festivity #. 4. Grade or rank of the festivity being created @@ -311,29 +345,31 @@ msgstr "" #. 7. Year from which the festivity has been added #. 8. Source of the information #. -#: includes/LitCalAPI.php:1351 +#: includes/LitCalAPI.php:1383 #, php-format msgid "" "In the year %1$d, the %2$s '%3$s' has been suppressed by the %4$s '%5$s', " "added on %6$s since the year %7$d (%8$s)." msgstr "" -#: includes/LitCalAPI.php:1409 +#. translators: 1: Festivity name, 2: Source of the information, 3: Requested calendar year +#: includes/LitCalAPI.php:1442 #, php-format msgid "" -"The optional memorial '%s' has been transferred from Dec. 12 to Aug. 12 " -"since the year 2002 (%s), applicable to the year %d." +"The optional memorial '%1$s' has been transferred from Dec. 12 to Aug. 12 " +"since the year 2002 (%2$s), applicable to the year %3$d." msgstr "" -#: includes/LitCalAPI.php:1421 +#. translators: 1: Festivity name, 2: Source of the information, 3: Requested calendar year +#: includes/LitCalAPI.php:1455 #, php-format msgid "" -"The optional memorial '%s', which would have been superseded this year by a " -"Sunday or Solemnity were it on Dec. 12, has however been transferred to Aug. " -"12 since the year 2002 (%s), applicable to the year %d." +"The optional memorial '%1$s', which would have been superseded this year by " +"a Sunday or Solemnity were it on Dec. 12, has however been transferred to " +"Aug. 12 since the year 2002 (%2$s), applicable to the year %3$d." msgstr "" -#: includes/LitCalAPI.php:1436 +#: includes/LitCalAPI.php:1470 #, php-format msgid "" "The optional memorial '%1$s' has been transferred from Dec. 12 to Aug. 12 " @@ -341,89 +377,143 @@ msgid "" "superseded by a Sunday, a Solemnity, or a Feast '%4$s' in the year %3$d." msgstr "" -#: includes/LitCalAPI.php:1462 +#. translators: 1: Festivity name, 2: Source of the information +#: includes/LitCalAPI.php:1497 #, php-format msgid "" -"The Feast '%s' would have been suppressed this year ( 2009 ) since it falls " -"on a Sunday, however being the Year of the Apostle Paul, as per the %s it " -"has been reinstated so that local churches can optionally celebrate the " -"memorial." +"The Feast '%1$s' would have been suppressed this year ( 2009 ) since it " +"falls on a Sunday, however being the Year of the Apostle Paul, as per the " +"%2$s it has been reinstated so that local churches can optionally celebrate " +"the memorial." msgstr "" -#: includes/LitCalAPI.php:1486 +#: includes/LitCalAPI.php:1521 #, php-format msgid "of the %s Week of Easter" msgstr "" -#: includes/LitCalAPI.php:1522 includes/LitCalAPI.php:1551 +#: includes/LitCalAPI.php:1557 includes/LitCalAPI.php:1586 #, php-format msgid "of the %s Week of Ordinary Time" msgstr "" -#: includes/LitCalAPI.php:1574 +#: includes/LitCalAPI.php:1609 msgid "Saturday Memorial of the Blessed Virgin Mary" msgstr "" +#: includes/LitCalAPI.php:1634 includes/LitCalAPI.php:1637 +#, php-format +msgid "Error retrieving and decoding Wider Region data from file %s." +msgstr "" + +#: includes/LitCalAPI.php:1644 +#, php-format +msgid "Error retrieving and decoding National data from file %s." +msgstr "" + #. translators: #. 1. Grade of the festivity #. 2. Name of the festivity #. 3. Date on which the festivity is usually celebrated #. 4. Grade of the superseding festivity #. 5. Name of the superseding festivity -#. 6. Current year +#. 6. Requested calendar year #. -#: includes/LitCalAPI.php:1633 +#: includes/LitCalAPI.php:1677 #, php-format msgid "" "The %1$s '%2$s', usually celebrated on %3$s, is suppressed by the %4$s " "'%5$s' in the year %6$d." msgstr "" -#: includes/LitCalAPI.php:1651 -msgctxt "Male singular" -msgid "patron of Europe" +#. translators: +#. 1. Name of the first coinciding Memorial +#. 2. Name of the second coinciding Memorial +#. 3. Requested calendar year +#. 4. Source of the information +#. +#: includes/LitCalAPI.php:1742 +#, php-format +msgid "" +"The Memorial '%1$s' coincides with another Memorial '%2$s' in the year %3$d. " +"They are both reduced in rank to optional memorials." +msgstr "" + +#: includes/LitCalAPI.php:1805 +msgid "" +"We should be creating a new festivity, however we do not seem to have the " +"correct date information in order to proceed" +msgstr "" + +#. translators: Name of the Roman Missal +#: includes/LitCalAPI.php:1920 +#, php-format +msgid "Found a sanctorale data file for %s" +msgstr "" + +#. translators: +#. 1. Festivity grade +#. 2. Festivity name +#. 3. Festivity date +#. 4. Edition of the Roman Missal +#. 5. Superseding festivity grade +#. 6. Superseding festivity name +#. 7. Requested calendar year +#. +#: includes/LitCalAPI.php:1950 +#, php-format +msgid "" +"The %1$s '%2$s' (%3$s), added to the national calendar in the %4$s, is " +"superseded by the %5$s '%6$s' in the year %7$d" msgstr "" -#: includes/LitCalAPI.php:1652 includes/LitCalAPI.php:1660 -#: includes/LitCalAPI.php:1664 includes/LitCalAPI.php:1683 -msgctxt "Female singular" -msgid "patron of Europe" +#. translators: Name of the Roman Missal +#: includes/LitCalAPI.php:1965 +#, php-format +msgid "Could not find a sanctorale data file for %s" msgstr "" -#: includes/LitCalAPI.php:1653 -msgctxt "Male plural" -msgid "patrons of Europe" +#. translators: 1. Festivity grade, 2. Festivity name, 3. New festivity name, 4: Requested calendar year, 5. Old date, 6. New date +#: includes/LitCalAPI.php:2057 +#, php-format +msgid "" +"The %1$s '%2$s' is transferred from %5$s to %6$s as per the %7$s, to make " +"room for '%3$s': applicable to the year %4$d." msgstr "" -#: includes/LitCalAPI.php:1671 -msgid "Saint Teresa Benedicta of the Cross, Virgin and Martyr" +#. translators: 1. Festivity grade, 2. Festivity name, 3. Old date, 4. New date, 5. Source of the information, 6. New festivity name, 7. Superseding festivity grade, 8. Superseding festivity name, 9: Requested calendar year +#: includes/LitCalAPI.php:2076 +#, php-format +msgid "" +"The %1$s '%2$s' would have been transferred from %3$s to %4$s as per the " +"%5$s, to make room for '%6$s', however it is suppressed by the %7$s '%8$s' " +"in the year %9$d." msgstr "" #. translators: when there are multiple possible commons, this will be the glue "or from the common of..." #: includes/LitMessages.php:142 includes/LitMessages.php:153 -#: includes/enums/LitCommon.php:327 +#: includes/enums/LitCommon.php:346 msgid "or" msgstr "" #. translators: in reference to the cycle of liturgical years (A, B, C; I, II) -#: includes/FestivityCollection.php:36 +#: includes/FestivityCollection.php:44 msgid "YEAR" msgstr "" -#: includes/FestivityCollection.php:37 +#: includes/FestivityCollection.php:45 msgid "Vigil Mass" msgstr "" -#: includes/FestivityCollection.php:339 includes/FestivityCollection.php:366 +#: includes/FestivityCollection.php:359 #, php-format msgid "" -"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " -"This last Solemnity takes precedence, therefore it will maintain Vespers II " -"and an evening Mass, while the first Solemnity will not have a Vigil Mass or " -"Vespers I." +"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. As " +"per %s, the first has precedence, therefore the Vigil Mass is confirmed as " +"are I Vespers." msgstr "" -#: includes/FestivityCollection.php:352 includes/FestivityCollection.php:410 +#: includes/FestivityCollection.php:373 #, php-format msgid "" "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " @@ -432,15 +522,16 @@ msgid "" "evening Mass." msgstr "" -#: includes/FestivityCollection.php:380 +#: includes/FestivityCollection.php:383 #, php-format msgid "" -"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. As " -"per %s, the first has precedence, therefore the Vigil Mass is confirmed as " -"are I Vespers." +"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " +"This last Solemnity takes precedence, therefore it will maintain Vespers II " +"and an evening Mass, while the first Solemnity will not have a Vigil Mass or " +"Vespers I." msgstr "" -#: includes/FestivityCollection.php:392 +#: includes/FestivityCollection.php:443 #, php-format msgid "" "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. We " @@ -448,27 +539,27 @@ msgid "" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:24 +#: includes/enums/LitColor.php:27 msgid "green" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:27 +#: includes/enums/LitColor.php:30 msgid "purple" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:30 +#: includes/enums/LitColor.php:33 msgid "white" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:33 +#: includes/enums/LitColor.php:36 msgid "red" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:36 +#: includes/enums/LitColor.php:39 msgid "pink" msgstr "" @@ -665,7 +756,7 @@ msgctxt "(SING_MASC)" msgid "of" msgstr "" -#: includes/enums/LitCommon.php:323 +#: includes/enums/LitCommon.php:342 msgid "From the Common" msgstr "" @@ -682,27 +773,27 @@ msgstr "" #. translators: liturgical rank. Keep Capitalized #: includes/enums/LitGrade.php:100 msgid "Optional memorial" -msgstr "" +msgstr "Memoria facultativa" #. translators: liturgical rank. Keep Capitalized #: includes/enums/LitGrade.php:105 msgid "Memorial" -msgstr "" +msgstr "Memoria obligatoria" #. translators: liturgical rank. Keep UPPERCASE #: includes/enums/LitGrade.php:110 msgid "FEAST" -msgstr "" +msgstr "FIESTA" #. translators: liturgical rank. Keep UPPERCASE #: includes/enums/LitGrade.php:115 msgid "FEAST OF THE LORD" -msgstr "" +msgstr "FIESTA DEL SEÑOR" #. translators: liturgical rank. Keep UPPERCASE #: includes/enums/LitGrade.php:120 msgid "SOLEMNITY" -msgstr "" +msgstr "SOLEMNIDAD" #. translators: liturgical rank. Keep lowercase #: includes/enums/LitGrade.php:125 diff --git a/i18n/fr/LC_MESSAGES/litcal.mo b/i18n/fr/LC_MESSAGES/litcal.mo new file mode 100644 index 00000000..77bace1c Binary files /dev/null and b/i18n/fr/LC_MESSAGES/litcal.mo differ diff --git a/i18n/fr/LC_MESSAGES/litcal.po b/i18n/fr/LC_MESSAGES/litcal.po index b37f4cc1..b35f7bab 100644 --- a/i18n/fr/LC_MESSAGES/litcal.po +++ b/i18n/fr/LC_MESSAGES/litcal.po @@ -7,106 +7,126 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-27 14:41+0000\n" -"PO-Revision-Date: 2021-12-14 00:20+0100\n" -"Last-Translator: Ubuntu \n" -"Language-Team: French\n" +"POT-Creation-Date: 2022-06-06 08:21+0000\n" +"PO-Revision-Date: 2022-02-16 09:56+0000\n" +"Last-Translator: John R. D'Orazio \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ASCII\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.10.1\n" -#: includes/LitCalAPI.php:222 +#: includes/LitCalAPI.php:229 #, php-format msgid "" "Only years from 1970 and after are supported. You tried requesting the year " "%d." msgstr "" -#: includes/LitCalAPI.php:329 includes/LitCalAPI.php:368 +#. translators: name of the Roman Missal +#: includes/LitCalAPI.php:265 +#, php-format +msgid "Data for the sanctorale from %s could not be found." +msgstr "" + +#. translators: name of the Roman Missal +#: includes/LitCalAPI.php:272 +#, php-format +msgid "Translation data for the sanctorale from %s could not be found." +msgstr "" + +#: includes/LitCalAPI.php:348 includes/LitCalAPI.php:387 #, php-format msgid "%s day before Epiphany" msgstr "" -#: includes/LitCalAPI.php:343 includes/LitCalAPI.php:381 +#: includes/LitCalAPI.php:362 includes/LitCalAPI.php:400 #, php-format msgid "%s day after Epiphany" msgstr "" -#: includes/LitCalAPI.php:533 includes/LitCalAPI.php:549 -#: includes/LitCalAPI.php:575 +#. translators: 1: Festivity name, 2: Festivity date, 3: Requested calendar year, 4: Explicatory string for the transferral (ex. the Saturday preceding Palm Sunday), 5: actual date for the transferral, 6: Decree of the Congregation for Divine Worship +#. translators: 1: Festivity name, 2: Festivity date, 3: Requested calendar year, 4: Explicatory string for the transferral, 5: actual date for the transferral, 6: Decree of the Congregation for Divine Worship +#: includes/LitCalAPI.php:553 includes/LitCalAPI.php:570 +#: includes/LitCalAPI.php:597 #, php-format msgid "" -"The Solemnity '%s' falls on %s in the year %d, the celebration has been " -"transferred to %s (%s) as per the %s." +"The Solemnity '%1$s' falls on %2$s in the year %3$d, the celebration has " +"been transferred to %4$s (%5$s) as per the %6$s." msgstr "" -#: includes/LitCalAPI.php:537 +#: includes/LitCalAPI.php:557 msgid "the Saturday preceding Palm Sunday" msgstr "" -#: includes/LitCalAPI.php:542 includes/LitCalAPI.php:558 -#: includes/LitCalAPI.php:584 includes/LitCalAPI.php:612 -#: includes/LitCalAPI.php:898 includes/LitCalAPI.php:1017 -#: includes/LitCalAPI.php:1073 includes/LitCalAPI.php:1230 -#: includes/LitCalAPI.php:1275 includes/LitCalAPI.php:1302 -#: includes/LitCalAPI.php:1411 includes/LitCalAPI.php:1423 -#: includes/LitCalAPI.php:1438 includes/LitCalAPI.php:1464 -#: includes/FestivityCollection.php:386 +#: includes/LitCalAPI.php:562 includes/LitCalAPI.php:579 +#: includes/LitCalAPI.php:606 includes/LitCalAPI.php:636 +#: includes/LitCalAPI.php:928 includes/LitCalAPI.php:1047 +#: includes/LitCalAPI.php:1103 includes/LitCalAPI.php:1262 +#: includes/LitCalAPI.php:1307 includes/LitCalAPI.php:1334 +#: includes/LitCalAPI.php:1444 includes/LitCalAPI.php:1457 +#: includes/LitCalAPI.php:1472 includes/LitCalAPI.php:1499 +#: includes/FestivityCollection.php:365 msgid "Decree of the Congregation for Divine Worship" msgstr "" -#: includes/LitCalAPI.php:553 +#: includes/LitCalAPI.php:574 msgid "the Monday following the Second Sunday of Easter" msgstr "" -#: includes/LitCalAPI.php:579 +#: includes/LitCalAPI.php:601 msgid "the following Monday" msgstr "" -#: includes/LitCalAPI.php:590 +#. translators: 1: Festivity name, 2: Coinciding Festivity name, 3: Requested calendar year +#: includes/LitCalAPI.php:613 #, php-format msgid "" -"The Solemnity '%s' coincides with the Solemnity '%s' in the year %d. We " -"should ask the Congregation for Divine Worship what to do about this!" +"The Solemnity '%1$s' coincides with the Solemnity '%2$s' in the year %3$d. " +"We should ask the Congregation for Divine Worship what to do about this!" msgstr "" -#: includes/LitCalAPI.php:608 +#. translators: 1: Festivity name, 2: Coinciding Festivity name, 3: Requested calendar year, 4: Decree of the Congregation for Divine Worship +#: includes/LitCalAPI.php:632 #, php-format msgid "" -"Seeing that the Solemnity '%s' coincides with the Solemnity '%s' in the year " -"%d, it has been anticipated by one day as per %s." +"Seeing that the Solemnity '%1$s' coincides with the Solemnity '%2$s' in the " +"year %3$d, it has been anticipated by one day as per %4$s." msgstr "" -#: includes/LitCalAPI.php:676 +#. translators: 1: Festivity name (Christmas), 2: Requested calendar year, 3: Festivity name (Holy Family), 4: New date for Holy Family +#: includes/LitCalAPI.php:701 #, php-format msgid "" -"'%s' falls on a Sunday in the year %d, therefore the Feast '%s' is " -"celebrated on %s rather than on the Sunday after Christmas." +"'%1$s' falls on a Sunday in the year %2$d, therefore the Feast '%3$s' is " +"celebrated on %4$s rather than on the Sunday after Christmas." msgstr "" -#: includes/LitCalAPI.php:710 includes/LitCalAPI.php:734 +#. translators: 1: Festivity name, 2: Superseding Festivity grade, 3: Superseding Festivity name, 4: Requested calendar year +#: includes/LitCalAPI.php:736 includes/LitCalAPI.php:761 #, php-format -msgid "'%s' is superseded by the %s '%s' in the year %d." +msgid "'%1$s' is superseded by the %2$s '%3$s' in the year %4$d." msgstr "" -#: includes/LitCalAPI.php:787 +#: includes/LitCalAPI.php:814 #, php-format msgid "of the %s Week of Advent" msgstr "" -#: includes/LitCalAPI.php:804 +#: includes/LitCalAPI.php:831 #, php-format msgid "%s Day of the Octave of Christmas" msgstr "" -#: includes/LitCalAPI.php:828 +#: includes/LitCalAPI.php:855 #, php-format msgid "of the %s Week of Lent" msgstr "" -#: includes/LitCalAPI.php:833 +#: includes/LitCalAPI.php:860 msgid "after Ash Wednesday" msgstr "" @@ -116,7 +136,7 @@ msgstr "" #. 3. Day of the festivity #. 4. Year from which the festivity has been added #. 5. Source of the information -#. 6. Current year +#. 6. Requested calendar year #. #. translators: #. 1. Grade or rank of the festivity being created @@ -124,17 +144,25 @@ msgstr "" #. 3. Indication of the mobile date for the festivity being created #. 4. Year from which the festivity has been added #. 5. Source of the information -#. 6. Current year +#. 6. Requested calendar year #. -#: includes/LitCalAPI.php:853 includes/LitCalAPI.php:1109 -#: includes/LitCalAPI.php:1286 +#. translators: +#. 1. Grade or rank of the festivity +#. 2. Name of the festivity +#. 3. Day of the festivity +#. 4. Year from which the festivity has been added +#. 5. Source of the information +#. 6. Requested calendar year +#. +#: includes/LitCalAPI.php:880 includes/LitCalAPI.php:1141 +#: includes/LitCalAPI.php:1318 includes/LitCalAPI.php:1840 #, php-format msgid "" "The %1$s '%2$s' has been added on %3$s since the year %4$d (%5$s), " "applicable to the year %6$d." msgstr "" -#: includes/LitCalAPI.php:884 includes/LitCalAPI.php:976 +#: includes/LitCalAPI.php:914 includes/LitCalAPI.php:1006 msgid "" "Vatican Press conference: Presentation of the Editio Typica Tertia of the " "Roman Missal" @@ -143,9 +171,9 @@ msgstr "" #. translators: #. 1. Grade or rank of the festivity #. 2. Name of the festivity -#. 3. Current year +#. 3. Requested calendar year #. -#: includes/LitCalAPI.php:930 +#: includes/LitCalAPI.php:960 #, php-format msgid "" "The %1$s '%2$s' either falls between 17 Dec. and 24 Dec., or during the " @@ -158,14 +186,14 @@ msgstr "" #. 2. Name of the festivity that has been superseded #. 3. Grade or rank of the festivity that is superseding #. 4. Name of the festivity that is superseding -#. 5. Current year +#. 5. Requested calendar year #. -#: includes/LitCalAPI.php:952 +#: includes/LitCalAPI.php:982 #, php-format msgid "The %1$s '%2$s' is superseded by the %3$s '%4$s' in the year %5$d." msgstr "" -#: includes/LitCalAPI.php:972 +#: includes/LitCalAPI.php:1002 msgid "Apostolic Constitution Missale Romanum" msgstr "" @@ -178,9 +206,9 @@ msgstr "" #. 6. Date in which the superseded festivity is usually celebrated #. 7. Grade or rank of the festivity that is superseding #. 8. Name of the festivity that is superseding -#. 9. Current year +#. 9. Requested calendar year #. -#: includes/LitCalAPI.php:994 +#: includes/LitCalAPI.php:1024 #, php-format msgid "" "The %1$s '%2$s', added in the %3$s of the Roman Missal since the year %4$d " @@ -196,9 +224,9 @@ msgstr "" #. 5. Source of the information #. 6. Grade or rank of the superseding festivity #. 7. Name of the superseding festivity -#. 8. Current year +#. 8. Requested calendar year #. -#: includes/LitCalAPI.php:1030 +#: includes/LitCalAPI.php:1060 #, php-format msgid "" "The %1$s '%2$s', added on %3$s since the year %4$d (%5$s), is however " @@ -208,17 +236,17 @@ msgstr "" #. translators: #. 1. Name of the first coinciding Memorial #. 2. Name of the second coinciding Memorial -#. 3. Current year +#. 3. Requested calendar year #. 4. Source of the information #. -#: includes/LitCalAPI.php:1069 +#: includes/LitCalAPI.php:1099 #, php-format msgid "" "The Memorial '%1$s' coincides with another Memorial '%2$s' in the year %3$d. " "They are both reduced in rank to optional memorials (%4$s)." msgstr "" -#: includes/LitCalAPI.php:1088 +#: includes/LitCalAPI.php:1120 msgid "the Monday after Pentecost" msgstr "" @@ -227,10 +255,10 @@ msgstr "" #. 2. Name of the festivity #. 3. New name of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1144 +#: includes/LitCalAPI.php:1176 #, php-format msgid "" "The name of the %1$s '%2$s' has been changed to %3$s since the year %4$d, " @@ -242,10 +270,10 @@ msgstr "" #. 2. Name of the festivity #. 3. New grade of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1166 +#: includes/LitCalAPI.php:1198 #, php-format msgid "" "The %1$s '%2$s' has been raised to the rank of %3$s since the year %4$d, " @@ -257,10 +285,10 @@ msgstr "" #. 2. Name of the festivity #. 3. New grade of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1176 +#: includes/LitCalAPI.php:1208 #, php-format msgid "" "The %1$s '%2$s' has been lowered to the rank of %3$s since the year %4$d, " @@ -270,17 +298,17 @@ msgstr "" #. translators: #. 1. Name of the festivity #. 2. Year in which was declared Doctor -#. 3. Current year +#. 3. Requested calendar year #. 4. Source of the information #. -#: includes/LitCalAPI.php:1210 +#: includes/LitCalAPI.php:1242 #, php-format msgid "" "'%1$s' has been declared a Doctor of the Church since the year %2$d, " "applicable to the year %3$d (%4$s)." msgstr "" -#: includes/LitCalAPI.php:1218 +#: includes/LitCalAPI.php:1250 msgid "and Doctor of the Church" msgstr "" @@ -292,9 +320,9 @@ msgstr "" #. 5. Source of the information #. 6. Grade or rank of superseding festivity #. 7. Name of superseding festivity -#. 8. Current year +#. 8. Requested calendar year #. -#: includes/LitCalAPI.php:1323 +#: includes/LitCalAPI.php:1355 #, php-format msgid "" "The %1$s '%2$s', added on %3$s since the year %4$d (%5$s), is however " @@ -302,7 +330,7 @@ msgid "" msgstr "" #. translators: -#. 1. Current year +#. 1. Requested calendar year #. 2. Grade or rank of suppressed festivity #. 3. Name of suppressed festivity #. 4. Grade or rank of the festivity being created @@ -311,29 +339,31 @@ msgstr "" #. 7. Year from which the festivity has been added #. 8. Source of the information #. -#: includes/LitCalAPI.php:1351 +#: includes/LitCalAPI.php:1383 #, php-format msgid "" "In the year %1$d, the %2$s '%3$s' has been suppressed by the %4$s '%5$s', " "added on %6$s since the year %7$d (%8$s)." msgstr "" -#: includes/LitCalAPI.php:1409 +#. translators: 1: Festivity name, 2: Source of the information, 3: Requested calendar year +#: includes/LitCalAPI.php:1442 #, php-format msgid "" -"The optional memorial '%s' has been transferred from Dec. 12 to Aug. 12 " -"since the year 2002 (%s), applicable to the year %d." +"The optional memorial '%1$s' has been transferred from Dec. 12 to Aug. 12 " +"since the year 2002 (%2$s), applicable to the year %3$d." msgstr "" -#: includes/LitCalAPI.php:1421 +#. translators: 1: Festivity name, 2: Source of the information, 3: Requested calendar year +#: includes/LitCalAPI.php:1455 #, php-format msgid "" -"The optional memorial '%s', which would have been superseded this year by a " -"Sunday or Solemnity were it on Dec. 12, has however been transferred to Aug. " -"12 since the year 2002 (%s), applicable to the year %d." +"The optional memorial '%1$s', which would have been superseded this year by " +"a Sunday or Solemnity were it on Dec. 12, has however been transferred to " +"Aug. 12 since the year 2002 (%2$s), applicable to the year %3$d." msgstr "" -#: includes/LitCalAPI.php:1436 +#: includes/LitCalAPI.php:1470 #, php-format msgid "" "The optional memorial '%1$s' has been transferred from Dec. 12 to Aug. 12 " @@ -341,89 +371,143 @@ msgid "" "superseded by a Sunday, a Solemnity, or a Feast '%4$s' in the year %3$d." msgstr "" -#: includes/LitCalAPI.php:1462 +#. translators: 1: Festivity name, 2: Source of the information +#: includes/LitCalAPI.php:1497 #, php-format msgid "" -"The Feast '%s' would have been suppressed this year ( 2009 ) since it falls " -"on a Sunday, however being the Year of the Apostle Paul, as per the %s it " -"has been reinstated so that local churches can optionally celebrate the " -"memorial." +"The Feast '%1$s' would have been suppressed this year ( 2009 ) since it " +"falls on a Sunday, however being the Year of the Apostle Paul, as per the " +"%2$s it has been reinstated so that local churches can optionally celebrate " +"the memorial." msgstr "" -#: includes/LitCalAPI.php:1486 +#: includes/LitCalAPI.php:1521 #, php-format msgid "of the %s Week of Easter" msgstr "" -#: includes/LitCalAPI.php:1522 includes/LitCalAPI.php:1551 +#: includes/LitCalAPI.php:1557 includes/LitCalAPI.php:1586 #, php-format msgid "of the %s Week of Ordinary Time" msgstr "" -#: includes/LitCalAPI.php:1574 +#: includes/LitCalAPI.php:1609 msgid "Saturday Memorial of the Blessed Virgin Mary" msgstr "" +#: includes/LitCalAPI.php:1634 includes/LitCalAPI.php:1637 +#, php-format +msgid "Error retrieving and decoding Wider Region data from file %s." +msgstr "" + +#: includes/LitCalAPI.php:1644 +#, php-format +msgid "Error retrieving and decoding National data from file %s." +msgstr "" + #. translators: #. 1. Grade of the festivity #. 2. Name of the festivity #. 3. Date on which the festivity is usually celebrated #. 4. Grade of the superseding festivity #. 5. Name of the superseding festivity -#. 6. Current year +#. 6. Requested calendar year #. -#: includes/LitCalAPI.php:1633 +#: includes/LitCalAPI.php:1677 #, php-format msgid "" "The %1$s '%2$s', usually celebrated on %3$s, is suppressed by the %4$s " "'%5$s' in the year %6$d." msgstr "" -#: includes/LitCalAPI.php:1651 -msgctxt "Male singular" -msgid "patron of Europe" +#. translators: +#. 1. Name of the first coinciding Memorial +#. 2. Name of the second coinciding Memorial +#. 3. Requested calendar year +#. 4. Source of the information +#. +#: includes/LitCalAPI.php:1742 +#, php-format +msgid "" +"The Memorial '%1$s' coincides with another Memorial '%2$s' in the year %3$d. " +"They are both reduced in rank to optional memorials." +msgstr "" + +#: includes/LitCalAPI.php:1805 +msgid "" +"We should be creating a new festivity, however we do not seem to have the " +"correct date information in order to proceed" +msgstr "" + +#. translators: Name of the Roman Missal +#: includes/LitCalAPI.php:1920 +#, php-format +msgid "Found a sanctorale data file for %s" +msgstr "" + +#. translators: +#. 1. Festivity grade +#. 2. Festivity name +#. 3. Festivity date +#. 4. Edition of the Roman Missal +#. 5. Superseding festivity grade +#. 6. Superseding festivity name +#. 7. Requested calendar year +#. +#: includes/LitCalAPI.php:1950 +#, php-format +msgid "" +"The %1$s '%2$s' (%3$s), added to the national calendar in the %4$s, is " +"superseded by the %5$s '%6$s' in the year %7$d" msgstr "" -#: includes/LitCalAPI.php:1652 includes/LitCalAPI.php:1660 -#: includes/LitCalAPI.php:1664 includes/LitCalAPI.php:1683 -msgctxt "Female singular" -msgid "patron of Europe" +#. translators: Name of the Roman Missal +#: includes/LitCalAPI.php:1965 +#, php-format +msgid "Could not find a sanctorale data file for %s" msgstr "" -#: includes/LitCalAPI.php:1653 -msgctxt "Male plural" -msgid "patrons of Europe" +#. translators: 1. Festivity grade, 2. Festivity name, 3. New festivity name, 4: Requested calendar year, 5. Old date, 6. New date +#: includes/LitCalAPI.php:2057 +#, php-format +msgid "" +"The %1$s '%2$s' is transferred from %5$s to %6$s as per the %7$s, to make " +"room for '%3$s': applicable to the year %4$d." msgstr "" -#: includes/LitCalAPI.php:1671 -msgid "Saint Teresa Benedicta of the Cross, Virgin and Martyr" +#. translators: 1. Festivity grade, 2. Festivity name, 3. Old date, 4. New date, 5. Source of the information, 6. New festivity name, 7. Superseding festivity grade, 8. Superseding festivity name, 9: Requested calendar year +#: includes/LitCalAPI.php:2076 +#, php-format +msgid "" +"The %1$s '%2$s' would have been transferred from %3$s to %4$s as per the " +"%5$s, to make room for '%6$s', however it is suppressed by the %7$s '%8$s' " +"in the year %9$d." msgstr "" #. translators: when there are multiple possible commons, this will be the glue "or from the common of..." #: includes/LitMessages.php:142 includes/LitMessages.php:153 -#: includes/enums/LitCommon.php:327 +#: includes/enums/LitCommon.php:346 msgid "or" msgstr "" #. translators: in reference to the cycle of liturgical years (A, B, C; I, II) -#: includes/FestivityCollection.php:36 +#: includes/FestivityCollection.php:44 msgid "YEAR" msgstr "" -#: includes/FestivityCollection.php:37 +#: includes/FestivityCollection.php:45 msgid "Vigil Mass" msgstr "" -#: includes/FestivityCollection.php:339 includes/FestivityCollection.php:366 +#: includes/FestivityCollection.php:359 #, php-format msgid "" -"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " -"This last Solemnity takes precedence, therefore it will maintain Vespers II " -"and an evening Mass, while the first Solemnity will not have a Vigil Mass or " -"Vespers I." +"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. As " +"per %s, the first has precedence, therefore the Vigil Mass is confirmed as " +"are I Vespers." msgstr "" -#: includes/FestivityCollection.php:352 includes/FestivityCollection.php:410 +#: includes/FestivityCollection.php:373 #, php-format msgid "" "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " @@ -432,15 +516,16 @@ msgid "" "evening Mass." msgstr "" -#: includes/FestivityCollection.php:380 +#: includes/FestivityCollection.php:383 #, php-format msgid "" -"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. As " -"per %s, the first has precedence, therefore the Vigil Mass is confirmed as " -"are I Vespers." +"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " +"This last Solemnity takes precedence, therefore it will maintain Vespers II " +"and an evening Mass, while the first Solemnity will not have a Vigil Mass or " +"Vespers I." msgstr "" -#: includes/FestivityCollection.php:392 +#: includes/FestivityCollection.php:443 #, php-format msgid "" "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. We " @@ -448,27 +533,27 @@ msgid "" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:24 +#: includes/enums/LitColor.php:27 msgid "green" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:27 +#: includes/enums/LitColor.php:30 msgid "purple" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:30 +#: includes/enums/LitColor.php:33 msgid "white" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:33 +#: includes/enums/LitColor.php:36 msgid "red" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:36 +#: includes/enums/LitColor.php:39 msgid "pink" msgstr "" @@ -665,7 +750,7 @@ msgctxt "(SING_MASC)" msgid "of" msgstr "" -#: includes/enums/LitCommon.php:323 +#: includes/enums/LitCommon.php:342 msgid "From the Common" msgstr "" @@ -692,19 +777,19 @@ msgstr "" #. translators: liturgical rank. Keep UPPERCASE #: includes/enums/LitGrade.php:110 msgid "FEAST" -msgstr "" +msgstr "FÊTE" #. translators: liturgical rank. Keep UPPERCASE #: includes/enums/LitGrade.php:115 msgid "FEAST OF THE LORD" -msgstr "" +msgstr "FÊTE DU SEIGNEUR" #. translators: liturgical rank. Keep UPPERCASE #: includes/enums/LitGrade.php:120 msgid "SOLEMNITY" -msgstr "" +msgstr "SOLENNITÉ" #. translators: liturgical rank. Keep lowercase #: includes/enums/LitGrade.php:125 msgid "celebration with precedence over solemnities" -msgstr "" +msgstr "célébration qui prime sur les solennités" diff --git a/i18n/it/LC_MESSAGES/litcal.mo b/i18n/it/LC_MESSAGES/litcal.mo index 5f35f345..c8c076c5 100644 Binary files a/i18n/it/LC_MESSAGES/litcal.mo and b/i18n/it/LC_MESSAGES/litcal.mo differ diff --git a/i18n/it/LC_MESSAGES/litcal.po b/i18n/it/LC_MESSAGES/litcal.po index 544eb4cc..5c6f8ff9 100644 --- a/i18n/it/LC_MESSAGES/litcal.po +++ b/i18n/it/LC_MESSAGES/litcal.po @@ -2,13 +2,13 @@ # Copyright (C) 2021 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Ubuntu , 2021. -# +# John R. D'Orazio , 2022. msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-27 14:41+0000\n" -"PO-Revision-Date: 2022-01-27 14:23+0000\n" +"Report-Msgid-Bugs-To: priest@johnromanodorazio.com\n" +"POT-Creation-Date: 2022-06-06 08:21+0000\n" +"PO-Revision-Date: 2022-06-06 08:59+0000\n" "Last-Translator: John R. D'Orazio \n" "Language-Team: Italian \n" @@ -17,9 +17,9 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.10.1\n" +"X-Generator: Weblate 4.12.1\n" -#: includes/LitCalAPI.php:222 +#: includes/LitCalAPI.php:229 #, php-format msgid "" "Only years from 1970 and after are supported. You tried requesting the year " @@ -28,97 +28,116 @@ msgstr "" "Sono supportati anni dal 1970 in poi soltanto. Tu invece hai provato a " "richiedere l'anno %d." -#: includes/LitCalAPI.php:329 includes/LitCalAPI.php:368 +#. translators: name of the Roman Missal +#: includes/LitCalAPI.php:265 +#, php-format +msgid "Data for the sanctorale from %s could not be found." +msgstr "Non sono stati trovati dati per il santorale di: %s." + +#. translators: name of the Roman Missal +#: includes/LitCalAPI.php:272 +#, php-format +msgid "Translation data for the sanctorale from %s could not be found." +msgstr "Non sono stati trovati dati per la traduzione del santorale di: %s." + +#: includes/LitCalAPI.php:348 includes/LitCalAPI.php:387 #, php-format msgid "%s day before Epiphany" msgstr "%s giorno prima dell'Epifania" -#: includes/LitCalAPI.php:343 includes/LitCalAPI.php:381 +#: includes/LitCalAPI.php:362 includes/LitCalAPI.php:400 #, php-format msgid "%s day after Epiphany" msgstr "%s giorno dopo l'Epifania" -#: includes/LitCalAPI.php:533 includes/LitCalAPI.php:549 -#: includes/LitCalAPI.php:575 +#. translators: 1: Festivity name, 2: Festivity date, 3: Requested calendar year, 4: Explicatory string for the transferral (ex. the Saturday preceding Palm Sunday), 5: actual date for the transferral, 6: Decree of the Congregation for Divine Worship +#. translators: 1: Festivity name, 2: Festivity date, 3: Requested calendar year, 4: Explicatory string for the transferral, 5: actual date for the transferral, 6: Decree of the Congregation for Divine Worship +#: includes/LitCalAPI.php:553 includes/LitCalAPI.php:570 +#: includes/LitCalAPI.php:597 #, php-format msgid "" -"The Solemnity '%s' falls on %s in the year %d, the celebration has been " -"transferred to %s (%s) as per the %s." +"The Solemnity '%1$s' falls on %2$s in the year %3$d, the celebration has " +"been transferred to %4$s (%5$s) as per the %6$s." msgstr "" -"La Solennità '%s' coincide con %s nell'anno %d, pertanto la " -"celebrazione è stata trasferita al %s (%s) in accordo con il %s." +"La Solennità '%1$s' cade di %2$s nell'anno %3$d, pertanto la " +"celebrazione è stata trasferita al %4$s (%5$s) in accordo con il %6$s." -#: includes/LitCalAPI.php:537 +#: includes/LitCalAPI.php:557 msgid "the Saturday preceding Palm Sunday" msgstr "sabato che precede la Domenica delle Palme" -#: includes/LitCalAPI.php:542 includes/LitCalAPI.php:558 -#: includes/LitCalAPI.php:584 includes/LitCalAPI.php:612 -#: includes/LitCalAPI.php:898 includes/LitCalAPI.php:1017 -#: includes/LitCalAPI.php:1073 includes/LitCalAPI.php:1230 -#: includes/LitCalAPI.php:1275 includes/LitCalAPI.php:1302 -#: includes/LitCalAPI.php:1411 includes/LitCalAPI.php:1423 -#: includes/LitCalAPI.php:1438 includes/LitCalAPI.php:1464 -#: includes/FestivityCollection.php:386 +#: includes/LitCalAPI.php:562 includes/LitCalAPI.php:579 +#: includes/LitCalAPI.php:606 includes/LitCalAPI.php:636 +#: includes/LitCalAPI.php:928 includes/LitCalAPI.php:1047 +#: includes/LitCalAPI.php:1103 includes/LitCalAPI.php:1262 +#: includes/LitCalAPI.php:1307 includes/LitCalAPI.php:1334 +#: includes/LitCalAPI.php:1444 includes/LitCalAPI.php:1457 +#: includes/LitCalAPI.php:1472 includes/LitCalAPI.php:1499 +#: includes/FestivityCollection.php:365 msgid "Decree of the Congregation for Divine Worship" msgstr "Decreto della Congregazione per il Culto Divino" -#: includes/LitCalAPI.php:553 +#: includes/LitCalAPI.php:574 msgid "the Monday following the Second Sunday of Easter" msgstr "lunedì che segue la Seconda Domenica di Pasqua" -#: includes/LitCalAPI.php:579 +#: includes/LitCalAPI.php:601 msgid "the following Monday" msgstr "lunedì seguente" -#: includes/LitCalAPI.php:590 +#. translators: 1: Festivity name, 2: Coinciding Festivity name, 3: Requested calendar year +#: includes/LitCalAPI.php:613 #, php-format msgid "" -"The Solemnity '%s' coincides with the Solemnity '%s' in the year %d. We " -"should ask the Congregation for Divine Worship what to do about this!" +"The Solemnity '%1$s' coincides with the Solemnity '%2$s' in the year %3$d. " +"We should ask the Congregation for Divine Worship what to do about this!" msgstr "" -"La Solennità '%s' coincide con la Solennità '%s' nell'anno %d. " -"Dovremmo chiedere alla Congregazione del Culto Divino cosa fare a riguardo!" +"La Solennità '%1$s' coincide con la Solennità '%2$s' nell'anno " +"%3$d. Dovremmo chiedere alla Congregazione del Culto Divino cosa fare a " +"riguardo!" -#: includes/LitCalAPI.php:608 +#. translators: 1: Festivity name, 2: Coinciding Festivity name, 3: Requested calendar year, 4: Decree of the Congregation for Divine Worship +#: includes/LitCalAPI.php:632 #, php-format msgid "" -"Seeing that the Solemnity '%s' coincides with the Solemnity '%s' in the year " -"%d, it has been anticipated by one day as per %s." +"Seeing that the Solemnity '%1$s' coincides with the Solemnity '%2$s' in the " +"year %3$d, it has been anticipated by one day as per %4$s." msgstr "" -"Visto che la Solennità '%s' coincide con la Solennità '%s' " -"nell'anno %d, la prima è stata anticipata di un giorno come da %s." +"Visto che la Solennità '%1$s' coincide con la Solennità '%2$s' " +"nell'anno %3$d, la prima è stata anticipata di un giorno come da %4$s." -#: includes/LitCalAPI.php:676 +#. translators: 1: Festivity name (Christmas), 2: Requested calendar year, 3: Festivity name (Holy Family), 4: New date for Holy Family +#: includes/LitCalAPI.php:701 #, php-format msgid "" -"'%s' falls on a Sunday in the year %d, therefore the Feast '%s' is " -"celebrated on %s rather than on the Sunday after Christmas." +"'%1$s' falls on a Sunday in the year %2$d, therefore the Feast '%3$s' is " +"celebrated on %4$s rather than on the Sunday after Christmas." msgstr "" -"'%s' coincide con una Domenica nell'anno %d, pertanto la Festa '%s' " -"viene celebrata il %s anziché la Domenica dopo Natale." +"'%1$s' coincide con una Domenica nell'anno %2$d, pertanto la Festa " +"'%3$s' viene celebrata il %4$s anziché la Domenica dopo Natale." -#: includes/LitCalAPI.php:710 includes/LitCalAPI.php:734 +#. translators: 1: Festivity name, 2: Superseding Festivity grade, 3: Superseding Festivity name, 4: Requested calendar year +#: includes/LitCalAPI.php:736 includes/LitCalAPI.php:761 #, php-format -msgid "'%s' is superseded by the %s '%s' in the year %d." -msgstr "'%s' è soppiantata dalla %s '%s' nell'anno %d." +msgid "'%1$s' is superseded by the %2$s '%3$s' in the year %4$d." +msgstr "'%1$s' è soppiantata dalla %2$s '%3$s' nell'anno %4$d." -#: includes/LitCalAPI.php:787 +#: includes/LitCalAPI.php:814 #, php-format msgid "of the %s Week of Advent" msgstr "della %s Settimana dell'Avvento" -#: includes/LitCalAPI.php:804 +#: includes/LitCalAPI.php:831 #, php-format msgid "%s Day of the Octave of Christmas" msgstr "%s Giorno dell'Ottava di Natale" -#: includes/LitCalAPI.php:828 +#: includes/LitCalAPI.php:855 #, php-format msgid "of the %s Week of Lent" msgstr "della %s Settimana di Quaresima" -#: includes/LitCalAPI.php:833 +#: includes/LitCalAPI.php:860 msgid "after Ash Wednesday" msgstr "dopo il Mercoledì delle Ceneri" @@ -128,7 +147,7 @@ msgstr "dopo il Mercoledì delle Ceneri" #. 3. Day of the festivity #. 4. Year from which the festivity has been added #. 5. Source of the information -#. 6. Current year +#. 6. Requested calendar year #. #. translators: #. 1. Grade or rank of the festivity being created @@ -136,10 +155,18 @@ msgstr "dopo il Mercoledì delle Ceneri" #. 3. Indication of the mobile date for the festivity being created #. 4. Year from which the festivity has been added #. 5. Source of the information -#. 6. Current year +#. 6. Requested calendar year +#. +#. translators: +#. 1. Grade or rank of the festivity +#. 2. Name of the festivity +#. 3. Day of the festivity +#. 4. Year from which the festivity has been added +#. 5. Source of the information +#. 6. Requested calendar year #. -#: includes/LitCalAPI.php:853 includes/LitCalAPI.php:1109 -#: includes/LitCalAPI.php:1286 +#: includes/LitCalAPI.php:880 includes/LitCalAPI.php:1141 +#: includes/LitCalAPI.php:1318 includes/LitCalAPI.php:1840 #, php-format msgid "" "The %1$s '%2$s' has been added on %3$s since the year %4$d (%5$s), " @@ -148,7 +175,7 @@ msgstr "" "La %1$s '%2$s' è stata inserita il giorno %3$s a partire dall'anno %4$d " "(%5$s), applicabile pertanto all'anno %6$d." -#: includes/LitCalAPI.php:884 includes/LitCalAPI.php:976 +#: includes/LitCalAPI.php:914 includes/LitCalAPI.php:1006 msgid "" "Vatican Press conference: Presentation of the Editio Typica Tertia of the " "Roman Missal" @@ -159,9 +186,9 @@ msgstr "" #. translators: #. 1. Grade or rank of the festivity #. 2. Name of the festivity -#. 3. Current year +#. 3. Requested calendar year #. -#: includes/LitCalAPI.php:930 +#: includes/LitCalAPI.php:960 #, php-format msgid "" "The %1$s '%2$s' either falls between 17 Dec. and 24 Dec., or during the " @@ -177,14 +204,14 @@ msgstr "" #. 2. Name of the festivity that has been superseded #. 3. Grade or rank of the festivity that is superseding #. 4. Name of the festivity that is superseding -#. 5. Current year +#. 5. Requested calendar year #. -#: includes/LitCalAPI.php:952 +#: includes/LitCalAPI.php:982 #, php-format msgid "The %1$s '%2$s' is superseded by the %3$s '%4$s' in the year %5$d." msgstr "La %1$s '%2$s' è soppiantata dalla %3$s '%4$s' nell'anno %5$d." -#: includes/LitCalAPI.php:972 +#: includes/LitCalAPI.php:1002 msgid "Apostolic Constitution Missale Romanum" msgstr "Costituzione Apostolica Missale Romanum" @@ -197,9 +224,9 @@ msgstr "Costituzione Apostolica Missale Romanum" #. 6. Date in which the superseded festivity is usually celebrated #. 7. Grade or rank of the festivity that is superseding #. 8. Name of the festivity that is superseding -#. 9. Current year +#. 9. Requested calendar year #. -#: includes/LitCalAPI.php:994 +#: includes/LitCalAPI.php:1024 #, php-format msgid "" "The %1$s '%2$s', added in the %3$s of the Roman Missal since the year %4$d " @@ -218,9 +245,9 @@ msgstr "" #. 5. Source of the information #. 6. Grade or rank of the superseding festivity #. 7. Name of the superseding festivity -#. 8. Current year +#. 8. Requested calendar year #. -#: includes/LitCalAPI.php:1030 +#: includes/LitCalAPI.php:1060 #, php-format msgid "" "The %1$s '%2$s', added on %3$s since the year %4$d (%5$s), is however " @@ -232,10 +259,10 @@ msgstr "" #. translators: #. 1. Name of the first coinciding Memorial #. 2. Name of the second coinciding Memorial -#. 3. Current year +#. 3. Requested calendar year #. 4. Source of the information #. -#: includes/LitCalAPI.php:1069 +#: includes/LitCalAPI.php:1099 #, php-format msgid "" "The Memorial '%1$s' coincides with another Memorial '%2$s' in the year %3$d. " @@ -244,7 +271,7 @@ msgstr "" "La Memoria '%1$s' coincide con un'altra Memoria '%2$s' nell'anno %3$d. Tutte " "e due sono ridotte al grado di memorie facoltative (%4$s)." -#: includes/LitCalAPI.php:1088 +#: includes/LitCalAPI.php:1120 msgid "the Monday after Pentecost" msgstr "il lunedì dopo la Pentecoste" @@ -253,10 +280,10 @@ msgstr "il lunedì dopo la Pentecoste" #. 2. Name of the festivity #. 3. New name of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1144 +#: includes/LitCalAPI.php:1176 #, php-format msgid "" "The name of the %1$s '%2$s' has been changed to %3$s since the year %4$d, " @@ -270,10 +297,10 @@ msgstr "" #. 2. Name of the festivity #. 3. New grade of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1166 +#: includes/LitCalAPI.php:1198 #, php-format msgid "" "The %1$s '%2$s' has been raised to the rank of %3$s since the year %4$d, " @@ -287,10 +314,10 @@ msgstr "" #. 2. Name of the festivity #. 3. New grade of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1176 +#: includes/LitCalAPI.php:1208 #, php-format msgid "" "The %1$s '%2$s' has been lowered to the rank of %3$s since the year %4$d, " @@ -302,10 +329,10 @@ msgstr "" #. translators: #. 1. Name of the festivity #. 2. Year in which was declared Doctor -#. 3. Current year +#. 3. Requested calendar year #. 4. Source of the information #. -#: includes/LitCalAPI.php:1210 +#: includes/LitCalAPI.php:1242 #, php-format msgid "" "'%1$s' has been declared a Doctor of the Church since the year %2$d, " @@ -314,7 +341,7 @@ msgstr "" "'%1$s' è stato dichiarato Dottore della Chiesa sin dal %2$d, applicabile " "pertanto all'anno %3$d (%4$s)." -#: includes/LitCalAPI.php:1218 +#: includes/LitCalAPI.php:1250 msgid "and Doctor of the Church" msgstr "e Dottore della Chiesa" @@ -326,9 +353,9 @@ msgstr "e Dottore della Chiesa" #. 5. Source of the information #. 6. Grade or rank of superseding festivity #. 7. Name of superseding festivity -#. 8. Current year +#. 8. Requested calendar year #. -#: includes/LitCalAPI.php:1323 +#: includes/LitCalAPI.php:1355 #, php-format msgid "" "The %1$s '%2$s', added on %3$s since the year %4$d (%5$s), is however " @@ -338,7 +365,7 @@ msgstr "" "superata dalla %6$s '%7$s' nell'anno %8$d." #. translators: -#. 1. Current year +#. 1. Requested calendar year #. 2. Grade or rank of suppressed festivity #. 3. Name of suppressed festivity #. 4. Grade or rank of the festivity being created @@ -347,7 +374,7 @@ msgstr "" #. 7. Year from which the festivity has been added #. 8. Source of the information #. -#: includes/LitCalAPI.php:1351 +#: includes/LitCalAPI.php:1383 #, php-format msgid "" "In the year %1$d, the %2$s '%3$s' has been suppressed by the %4$s '%5$s', " @@ -356,27 +383,30 @@ msgstr "" "Nell'anno %1$d, la %2$s '%3$s' è stata soppressa dalla %4$s '%5$s', aggiunta " "il giorno %6$s sin dal %7$d (%8$s)." -#: includes/LitCalAPI.php:1409 +#. translators: 1: Festivity name, 2: Source of the information, 3: Requested calendar year +#: includes/LitCalAPI.php:1442 #, php-format msgid "" -"The optional memorial '%s' has been transferred from Dec. 12 to Aug. 12 " -"since the year 2002 (%s), applicable to the year %d." +"The optional memorial '%1$s' has been transferred from Dec. 12 to Aug. 12 " +"since the year 2002 (%2$s), applicable to the year %3$d." msgstr "" -"La memoria facoltativa '%s' è stata trasferita dal 12 Dic. al 12 Agosto sin " -"dal 2002 (%s), applicabile pertanto all'anno %d." +"La memoria facoltativa '%1$s' è stata trasferita dal 12 Dic. al 12 Agosto " +"sin dal 2002 (%2$s), applicabile pertanto all'anno %3$d." -#: includes/LitCalAPI.php:1421 +#. translators: 1: Festivity name, 2: Source of the information, 3: Requested calendar year +#: includes/LitCalAPI.php:1455 #, php-format msgid "" -"The optional memorial '%s', which would have been superseded this year by a " -"Sunday or Solemnity were it on Dec. 12, has however been transferred to Aug. " -"12 since the year 2002 (%s), applicable to the year %d." +"The optional memorial '%1$s', which would have been superseded this year by " +"a Sunday or Solemnity were it on Dec. 12, has however been transferred to " +"Aug. 12 since the year 2002 (%2$s), applicable to the year %3$d." msgstr "" -"La memoria facoltativa '%s', che sarebbe stata soppressa quest'anno da una " +"La memoria facoltativa '%1$s', che sarebbe stata soppressa quest'anno da una " "Domenica o da una Solennità se veniva celebrata il 12 Dic., è stata tuttavia " -"trasferita al 12 Agosto sin dal 2002 (%s), applicabile pertanto all'anno %d." +"trasferita al 12 Agosto sin dal 2002 (%2$s), applicabile pertanto all'anno " +"%3$d." -#: includes/LitCalAPI.php:1436 +#: includes/LitCalAPI.php:1470 #, php-format msgid "" "The optional memorial '%1$s' has been transferred from Dec. 12 to Aug. 12 " @@ -387,42 +417,56 @@ msgstr "" "sin dal 2002 (%2$s), applicabile pertanto all'anno %3$d. Tuttavia, è " "soppressa da una Domenica, una Solennità o una Festa '%4$s' nell'anno %3$d." -#: includes/LitCalAPI.php:1462 +#. translators: 1: Festivity name, 2: Source of the information +#: includes/LitCalAPI.php:1497 #, php-format msgid "" -"The Feast '%s' would have been suppressed this year ( 2009 ) since it falls " -"on a Sunday, however being the Year of the Apostle Paul, as per the %s it " -"has been reinstated so that local churches can optionally celebrate the " -"memorial." +"The Feast '%1$s' would have been suppressed this year ( 2009 ) since it " +"falls on a Sunday, however being the Year of the Apostle Paul, as per the " +"%2$s it has been reinstated so that local churches can optionally celebrate " +"the memorial." msgstr "" -"La Festa '%s' sarebbe stata soppressa quest'anno ( 2009 ) visto che cade di " -"Domenica, tuttavia trattandosi dell'Anno dell'Apostolo Paolo, è stata " -"restituita secondo il %s in modo che le chiese locali abbiano facoltà di " +"La Festa '%1$s' sarebbe stata soppressa quest'anno ( 2009 ) visto che cade " +"di Domenica, tuttavia trattandosi dell'Anno dell'Apostolo Paolo, è stata " +"restituita secondo il %2$s in modo che le chiese locali abbiano facoltà di " "mantenere la memoria." -#: includes/LitCalAPI.php:1486 +#: includes/LitCalAPI.php:1521 #, php-format msgid "of the %s Week of Easter" msgstr "della %s Settimana di Pasqua" -#: includes/LitCalAPI.php:1522 includes/LitCalAPI.php:1551 +#: includes/LitCalAPI.php:1557 includes/LitCalAPI.php:1586 #, php-format msgid "of the %s Week of Ordinary Time" msgstr "della %s Settimana del Tempo Ordinario" -#: includes/LitCalAPI.php:1574 +#: includes/LitCalAPI.php:1609 msgid "Saturday Memorial of the Blessed Virgin Mary" msgstr "Memoria di Santa Maria in sabato" +#: includes/LitCalAPI.php:1634 includes/LitCalAPI.php:1637 +#, php-format +msgid "Error retrieving and decoding Wider Region data from file %s." +msgstr "" +"Errore nella lettura o nella decodifica dei dati per la Regione più ampia " +"dal file %s." + +#: includes/LitCalAPI.php:1644 +#, php-format +msgid "Error retrieving and decoding National data from file %s." +msgstr "" +"Errore nella lettura o nella decodifica dei dati Nazionali dal file %s." + #. translators: #. 1. Grade of the festivity #. 2. Name of the festivity #. 3. Date on which the festivity is usually celebrated #. 4. Grade of the superseding festivity #. 5. Name of the superseding festivity -#. 6. Current year +#. 6. Requested calendar year #. -#: includes/LitCalAPI.php:1633 +#: includes/LitCalAPI.php:1677 #, php-format msgid "" "The %1$s '%2$s', usually celebrated on %3$s, is suppressed by the %4$s " @@ -431,55 +475,108 @@ msgstr "" "La %1$s '%2$s', celebrata solitamente il giorno %3$s, è soppressa dalla %4$s " "'%5$s' nell'anno %6$d." -#: includes/LitCalAPI.php:1651 -msgctxt "Male singular" -msgid "patron of Europe" -msgstr "patrono d'Europa" +#. translators: +#. 1. Name of the first coinciding Memorial +#. 2. Name of the second coinciding Memorial +#. 3. Requested calendar year +#. 4. Source of the information +#. +#: includes/LitCalAPI.php:1742 +#, php-format +msgid "" +"The Memorial '%1$s' coincides with another Memorial '%2$s' in the year %3$d. " +"They are both reduced in rank to optional memorials." +msgstr "" +"La Memoria '%1$s' coincide con un'altra Memoria '%2$s' nell'anno %3$d. Tutte " +"e due sono ridotte al grado di memorie facoltative." + +#: includes/LitCalAPI.php:1805 +msgid "" +"We should be creating a new festivity, however we do not seem to have the " +"correct date information in order to proceed" +msgstr "" +"Dovremmo creare una nuova festività, tuttavia sembra che non ci sono le " +"corrette informazioni sulla data per poter procedere" + +#. translators: Name of the Roman Missal +#: includes/LitCalAPI.php:1920 +#, php-format +msgid "Found a sanctorale data file for %s" +msgstr "Trovato un file con dati per il santorale di: %s" + +#. translators: +#. 1. Festivity grade +#. 2. Festivity name +#. 3. Festivity date +#. 4. Edition of the Roman Missal +#. 5. Superseding festivity grade +#. 6. Superseding festivity name +#. 7. Requested calendar year +#. +#: includes/LitCalAPI.php:1950 +#, php-format +msgid "" +"The %1$s '%2$s' (%3$s), added to the national calendar in the %4$s, is " +"superseded by the %5$s '%6$s' in the year %7$d" +msgstr "" +"La %1$s '%2$s' (%3$s), aggiunta al calendario nazionale nel %4$s, è tuttavia " +"superata dalla %5$s '%6$s' nell'anno %7$d" -#: includes/LitCalAPI.php:1652 includes/LitCalAPI.php:1660 -#: includes/LitCalAPI.php:1664 includes/LitCalAPI.php:1683 -msgctxt "Female singular" -msgid "patron of Europe" -msgstr "patrona d'Europa" +#. translators: Name of the Roman Missal +#: includes/LitCalAPI.php:1965 +#, php-format +msgid "Could not find a sanctorale data file for %s" +msgstr "Non è stato trovato un file con i dati del santorale di: %s" -#: includes/LitCalAPI.php:1653 -msgctxt "Male plural" -msgid "patrons of Europe" -msgstr "patroni d'Europa" +#. translators: 1. Festivity grade, 2. Festivity name, 3. New festivity name, 4: Requested calendar year, 5. Old date, 6. New date +#: includes/LitCalAPI.php:2057 +#, php-format +msgid "" +"The %1$s '%2$s' is transferred from %5$s to %6$s as per the %7$s, to make " +"room for '%3$s': applicable to the year %4$d." +msgstr "" +"La %1$s '%2$s' è stata trasferita da %5$s a %6$s secondo il %7$s, per " +"lasciare luogo a '%3$s': applicabile pertanto all'anno %4$d." -#: includes/LitCalAPI.php:1671 -msgid "Saint Teresa Benedicta of the Cross, Virgin and Martyr" -msgstr "Santa Teresa Benedetta della Croce (Edith Stein), vergine e martire" +#. translators: 1. Festivity grade, 2. Festivity name, 3. Old date, 4. New date, 5. Source of the information, 6. New festivity name, 7. Superseding festivity grade, 8. Superseding festivity name, 9: Requested calendar year +#: includes/LitCalAPI.php:2076 +#, php-format +msgid "" +"The %1$s '%2$s' would have been transferred from %3$s to %4$s as per the " +"%5$s, to make room for '%6$s', however it is suppressed by the %7$s '%8$s' " +"in the year %9$d." +msgstr "" +"La %1$s '%2$s', sarebbe stata trasferita da %3$s a %4$s secondo il %5$s, per " +"lasciare luogo a '%6$s', tuttavia è soppressa dalla %7$s '%8$s' nell'anno " +"%9$d." #. translators: when there are multiple possible commons, this will be the glue "or from the common of..." #: includes/LitMessages.php:142 includes/LitMessages.php:153 -#: includes/enums/LitCommon.php:327 +#: includes/enums/LitCommon.php:346 msgid "or" msgstr "oppure" #. translators: in reference to the cycle of liturgical years (A, B, C; I, II) -#: includes/FestivityCollection.php:36 +#: includes/FestivityCollection.php:44 msgid "YEAR" msgstr "ANNO" -#: includes/FestivityCollection.php:37 +#: includes/FestivityCollection.php:45 msgid "Vigil Mass" msgstr "Messa della vigilia" -#: includes/FestivityCollection.php:339 includes/FestivityCollection.php:366 +#: includes/FestivityCollection.php:359 #, php-format msgid "" -"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " -"This last Solemnity takes precedence, therefore it will maintain Vespers II " -"and an evening Mass, while the first Solemnity will not have a Vigil Mass or " -"Vespers I." +"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. As " +"per %s, the first has precedence, therefore the Vigil Mass is confirmed as " +"are I Vespers." msgstr "" "La Messa nella Vigilia per la %s '%s' coincide con la %s '%s' nell'anno %d. " -"Quest'ultima Solennità ha la precedenza, pertanto manterrà i Secondi Vespri " -"e una Messa serale, mentre la prima Solennità non avrà né una Messa di " -"Vigilia né i Primi Vespri." +"Secondo il %s, la prima ha la precedenza, pertanto la Messa nella Vigilia è " +"confermata come anche i Primi Vespri." -#: includes/FestivityCollection.php:352 includes/FestivityCollection.php:410 +#: includes/FestivityCollection.php:373 #, php-format msgid "" "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " @@ -492,18 +589,20 @@ msgstr "" "Messa di Vigilia, mentre l'ultima Solennità non avrà né i Secondi Vespri né " "una Messa serale." -#: includes/FestivityCollection.php:380 +#: includes/FestivityCollection.php:383 #, php-format msgid "" -"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. As " -"per %s, the first has precedence, therefore the Vigil Mass is confirmed as " -"are I Vespers." +"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " +"This last Solemnity takes precedence, therefore it will maintain Vespers II " +"and an evening Mass, while the first Solemnity will not have a Vigil Mass or " +"Vespers I." msgstr "" "La Messa nella Vigilia per la %s '%s' coincide con la %s '%s' nell'anno %d. " -"Secondo il %s, la prima ha la precedenza, pertanto la Messa nella Vigilia è " -"confermata come anche i Primi Vespri." +"Quest'ultima Solennità ha la precedenza, pertanto manterrà i Secondi Vespri " +"e una Messa serale, mentre la prima Solennità non avrà né una Messa di " +"Vigilia né i Primi Vespri." -#: includes/FestivityCollection.php:392 +#: includes/FestivityCollection.php:443 #, php-format msgid "" "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. We " @@ -513,27 +612,27 @@ msgstr "" "Dovremmo chiedere alla Congregazione del Culto Divino cosa fare a riguardo!" #. translators: context = liturgical color -#: includes/enums/LitColor.php:24 +#: includes/enums/LitColor.php:27 msgid "green" msgstr "verde" #. translators: context = liturgical color -#: includes/enums/LitColor.php:27 +#: includes/enums/LitColor.php:30 msgid "purple" msgstr "viola" #. translators: context = liturgical color -#: includes/enums/LitColor.php:30 +#: includes/enums/LitColor.php:33 msgid "white" msgstr "bianco" #. translators: context = liturgical color -#: includes/enums/LitColor.php:33 +#: includes/enums/LitColor.php:36 msgid "red" msgstr "rosso" #. translators: context = liturgical color -#: includes/enums/LitColor.php:36 +#: includes/enums/LitColor.php:39 msgid "pink" msgstr "rosa" @@ -614,12 +713,12 @@ msgstr "Per una santa martire" #. translators: context = from the Common of nn: nn #: includes/enums/LitCommon.php:88 msgid "For a Pope" -msgstr "Per i papi" +msgstr "Per un papa" #. translators: context = from the Common of nn: nn #: includes/enums/LitCommon.php:90 msgid "For a Bishop" -msgstr "Per i vescovi" +msgstr "Per un vescovo" #. translators: context = from the Common of nn: nn #: includes/enums/LitCommon.php:92 @@ -629,7 +728,7 @@ msgstr "Per un pastore" #. translators: context = from the Common of nn: nn #: includes/enums/LitCommon.php:94 msgid "For Several Pastors" -msgstr "Per i pastori" +msgstr "Per più pastori" #. translators: context = from the Common of nn: nn #: includes/enums/LitCommon.php:96 @@ -669,7 +768,7 @@ msgstr "Per più santi" #. translators: context = from the Common of nn: nn #: includes/enums/LitCommon.php:110 msgid "For One Saint" -msgstr "Per un Santo" +msgstr "Per un santo" #. translators: context = from the Common of nn: nn #: includes/enums/LitCommon.php:112 @@ -684,7 +783,7 @@ msgstr "Per un monaco" #. translators: context = from the Common of nn: nn #: includes/enums/LitCommon.php:116 msgid "For a Nun" -msgstr "Per i religiosi" +msgstr "Per una monaca" #. translators: context = from the Common of nn: nn #: includes/enums/LitCommon.php:118 @@ -730,7 +829,7 @@ msgctxt "(SING_MASC)" msgid "of" msgstr "del" -#: includes/enums/LitCommon.php:323 +#: includes/enums/LitCommon.php:342 msgid "From the Common" msgstr "Dal Comune" @@ -774,6 +873,21 @@ msgstr "SOLENNITÀ" msgid "celebration with precedence over solemnities" msgstr "celebrazione con precedenza sulle solennità" +#~ msgctxt "Male singular" +#~ msgid "patron of Europe" +#~ msgstr "patrono d'Europa" + +#~ msgctxt "Female singular" +#~ msgid "patron of Europe" +#~ msgstr "patrona d'Europa" + +#~ msgctxt "Male plural" +#~ msgid "patrons of Europe" +#~ msgstr "patroni d'Europa" + +#~ msgid "Saint Teresa Benedicta of the Cross, Virgin and Martyr" +#~ msgstr "Santa Teresa Benedetta della Croce (Edith Stein), vergine e martire" + #~ msgid "" #~ "The Memorial '%s', added on %s since the year %d (%s), is however " #~ "superseded by a Solemnity or a Feast '%s' in the year %d." diff --git a/i18n/la/LC_MESSAGES/litcal.mo b/i18n/la/LC_MESSAGES/litcal.mo index e81d530f..5c0345da 100644 Binary files a/i18n/la/LC_MESSAGES/litcal.mo and b/i18n/la/LC_MESSAGES/litcal.mo differ diff --git a/i18n/la/LC_MESSAGES/litcal.po b/i18n/la/LC_MESSAGES/litcal.po index 1292f174..d9b09020 100644 --- a/i18n/la/LC_MESSAGES/litcal.po +++ b/i18n/la/LC_MESSAGES/litcal.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-27 14:41+0000\n" -"PO-Revision-Date: 2021-12-25 23:32+0000\n" +"POT-Creation-Date: 2022-06-06 08:21+0000\n" +"PO-Revision-Date: 2022-03-03 16:15+0000\n" "Last-Translator: John R. D'Orazio \n" "Language-Team: Latin \n" @@ -17,9 +17,9 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.9.1\n" +"X-Generator: Weblate 4.10.1\n" -#: includes/LitCalAPI.php:222 +#: includes/LitCalAPI.php:229 #, php-format msgid "" "Only years from 1970 and after are supported. You tried requesting the year " @@ -27,97 +27,128 @@ msgid "" msgstr "" "Petere potes nisi ab annis MCMLXX et ultra. Tu anno %d conatus est petere." -#: includes/LitCalAPI.php:329 includes/LitCalAPI.php:368 +#. translators: name of the Roman Missal +#: includes/LitCalAPI.php:265 +#, php-format +msgid "Data for the sanctorale from %s could not be found." +msgstr "" + +#. translators: name of the Roman Missal +#: includes/LitCalAPI.php:272 +#, php-format +msgid "Translation data for the sanctorale from %s could not be found." +msgstr "" + +#: includes/LitCalAPI.php:348 includes/LitCalAPI.php:387 #, php-format msgid "%s day before Epiphany" msgstr "Dies %s ante Epiphaniam" -#: includes/LitCalAPI.php:343 includes/LitCalAPI.php:381 +#: includes/LitCalAPI.php:362 includes/LitCalAPI.php:400 #, php-format msgid "%s day after Epiphany" msgstr "Dies %s post Epiphaniam" -#: includes/LitCalAPI.php:533 includes/LitCalAPI.php:549 -#: includes/LitCalAPI.php:575 -#, php-format +#. translators: 1: Festivity name, 2: Festivity date, 3: Requested calendar year, 4: Explicatory string for the transferral (ex. the Saturday preceding Palm Sunday), 5: actual date for the transferral, 6: Decree of the Congregation for Divine Worship +#. translators: 1: Festivity name, 2: Festivity date, 3: Requested calendar year, 4: Explicatory string for the transferral, 5: actual date for the transferral, 6: Decree of the Congregation for Divine Worship +#: includes/LitCalAPI.php:553 includes/LitCalAPI.php:570 +#: includes/LitCalAPI.php:597 +#, fuzzy, php-format +#| msgid "" +#| "The Solemnity '%s' falls on %s in the year %d, the celebration has been " +#| "transferred to %s (%s) as per the %s." msgid "" -"The Solemnity '%s' falls on %s in the year %d, the celebration has been " -"transferred to %s (%s) as per the %s." +"The Solemnity '%1$s' falls on %2$s in the year %3$d, the celebration has " +"been transferred to %4$s (%5$s) as per the %6$s." msgstr "" "Coincidet enim Sollemnitas '%s' cum %s in anno %d, ergo " "traslata est celebratio ad %s (%s) secundum %s." -#: includes/LitCalAPI.php:537 +#: includes/LitCalAPI.php:557 msgid "the Saturday preceding Palm Sunday" msgstr "sabbatum ante Dominicam in Palmis" -#: includes/LitCalAPI.php:542 includes/LitCalAPI.php:558 -#: includes/LitCalAPI.php:584 includes/LitCalAPI.php:612 -#: includes/LitCalAPI.php:898 includes/LitCalAPI.php:1017 -#: includes/LitCalAPI.php:1073 includes/LitCalAPI.php:1230 -#: includes/LitCalAPI.php:1275 includes/LitCalAPI.php:1302 -#: includes/LitCalAPI.php:1411 includes/LitCalAPI.php:1423 -#: includes/LitCalAPI.php:1438 includes/LitCalAPI.php:1464 -#: includes/FestivityCollection.php:386 +#: includes/LitCalAPI.php:562 includes/LitCalAPI.php:579 +#: includes/LitCalAPI.php:606 includes/LitCalAPI.php:636 +#: includes/LitCalAPI.php:928 includes/LitCalAPI.php:1047 +#: includes/LitCalAPI.php:1103 includes/LitCalAPI.php:1262 +#: includes/LitCalAPI.php:1307 includes/LitCalAPI.php:1334 +#: includes/LitCalAPI.php:1444 includes/LitCalAPI.php:1457 +#: includes/LitCalAPI.php:1472 includes/LitCalAPI.php:1499 +#: includes/FestivityCollection.php:365 msgid "Decree of the Congregation for Divine Worship" msgstr "Decretum Congregationis pro Cultu Divino" -#: includes/LitCalAPI.php:553 +#: includes/LitCalAPI.php:574 msgid "the Monday following the Second Sunday of Easter" msgstr "diem Lunæ post Dominicam Secundam Paschæ" -#: includes/LitCalAPI.php:579 +#: includes/LitCalAPI.php:601 msgid "the following Monday" msgstr "diem Lunæ proximum" -#: includes/LitCalAPI.php:590 -#, php-format +#. translators: 1: Festivity name, 2: Coinciding Festivity name, 3: Requested calendar year +#: includes/LitCalAPI.php:613 +#, fuzzy, php-format +#| msgid "" +#| "The Solemnity '%s' coincides with the Solemnity '%s' in the year %d. We " +#| "should ask the Congregation for Divine Worship what to do about this!" msgid "" -"The Solemnity '%s' coincides with the Solemnity '%s' in the year %d. We " -"should ask the Congregation for Divine Worship what to do about this!" +"The Solemnity '%1$s' coincides with the Solemnity '%2$s' in the year %3$d. " +"We should ask the Congregation for Divine Worship what to do about this!" msgstr "" "Sollemnitas '%s' coincidet cum Sollemnitate '%s' in anno %d. " "Oportet quaerere a Congregatione Cultu Divino quid facere!" -#: includes/LitCalAPI.php:608 -#, php-format +#. translators: 1: Festivity name, 2: Coinciding Festivity name, 3: Requested calendar year, 4: Decree of the Congregation for Divine Worship +#: includes/LitCalAPI.php:632 +#, fuzzy, php-format +#| msgid "" +#| "Seeing that the Solemnity '%s' coincides with the Solemnity '%s' in the " +#| "year %d, it has been anticipated by one day as per %s." msgid "" -"Seeing that the Solemnity '%s' coincides with the Solemnity '%s' in the year " -"%d, it has been anticipated by one day as per %s." +"Seeing that the Solemnity '%1$s' coincides with the Solemnity '%2$s' in the " +"year %3$d, it has been anticipated by one day as per %4$s." msgstr "" "Ex causa Sollemnitas '%s' coincidet cum Sollemnitate '%s' in " "anno %d, anticipata est ab uno die secundum %s." -#: includes/LitCalAPI.php:676 -#, php-format +#. translators: 1: Festivity name (Christmas), 2: Requested calendar year, 3: Festivity name (Holy Family), 4: New date for Holy Family +#: includes/LitCalAPI.php:701 +#, fuzzy, php-format +#| msgid "" +#| "'%s' falls on a Sunday in the year %d, therefore the Feast '%s' is " +#| "celebrated on %s rather than on the Sunday after Christmas." msgid "" -"'%s' falls on a Sunday in the year %d, therefore the Feast '%s' is " -"celebrated on %s rather than on the Sunday after Christmas." +"'%1$s' falls on a Sunday in the year %2$d, therefore the Feast '%3$s' is " +"celebrated on %4$s rather than on the Sunday after Christmas." msgstr "" "'%s' coincidet cum Dominica in anno %d, ergo Festum '%s' celebrentur " "die %s quam Dominica post Nativitate." -#: includes/LitCalAPI.php:710 includes/LitCalAPI.php:734 -#, php-format -msgid "'%s' is superseded by the %s '%s' in the year %d." +#. translators: 1: Festivity name, 2: Superseding Festivity grade, 3: Superseding Festivity name, 4: Requested calendar year +#: includes/LitCalAPI.php:736 includes/LitCalAPI.php:761 +#, fuzzy, php-format +#| msgid "'%s' is superseded by the %s '%s' in the year %d." +msgid "'%1$s' is superseded by the %2$s '%3$s' in the year %4$d." msgstr "'%s' subplantata est ab %s '%s' in anno %d." -#: includes/LitCalAPI.php:787 +#: includes/LitCalAPI.php:814 #, php-format msgid "of the %s Week of Advent" msgstr "Hebdomadæ %s Adventus" -#: includes/LitCalAPI.php:804 +#: includes/LitCalAPI.php:831 #, php-format msgid "%s Day of the Octave of Christmas" msgstr "Dies %s Octavæ Nativitatis" -#: includes/LitCalAPI.php:828 +#: includes/LitCalAPI.php:855 #, php-format msgid "of the %s Week of Lent" msgstr "Hebdomadæ %s Quadragesimæ" -#: includes/LitCalAPI.php:833 +#: includes/LitCalAPI.php:860 msgid "after Ash Wednesday" msgstr "post Feria IV Cinerum" @@ -127,7 +158,7 @@ msgstr "post Feria IV Cinerum" #. 3. Day of the festivity #. 4. Year from which the festivity has been added #. 5. Source of the information -#. 6. Current year +#. 6. Requested calendar year #. #. translators: #. 1. Grade or rank of the festivity being created @@ -135,22 +166,27 @@ msgstr "post Feria IV Cinerum" #. 3. Indication of the mobile date for the festivity being created #. 4. Year from which the festivity has been added #. 5. Source of the information -#. 6. Current year +#. 6. Requested calendar year #. -#: includes/LitCalAPI.php:853 includes/LitCalAPI.php:1109 -#: includes/LitCalAPI.php:1286 -#, fuzzy, php-format -#| msgid "" -#| "The %s '%s' has been added on %s since the year %d (%s), applicable to " -#| "the year %d." +#. translators: +#. 1. Grade or rank of the festivity +#. 2. Name of the festivity +#. 3. Day of the festivity +#. 4. Year from which the festivity has been added +#. 5. Source of the information +#. 6. Requested calendar year +#. +#: includes/LitCalAPI.php:880 includes/LitCalAPI.php:1141 +#: includes/LitCalAPI.php:1318 includes/LitCalAPI.php:1840 +#, php-format msgid "" "The %1$s '%2$s' has been added on %3$s since the year %4$d (%5$s), " "applicable to the year %6$d." msgstr "" -"%s '%s' aggregata est igitur in die %s ab anno %d (%s), ergo " -"viget in anno %d." +"%1$s '%2$s' aggregata est igitur in die %3$s ab anno %4$d (%5$s), " +"ergo viget in anno %6$d." -#: includes/LitCalAPI.php:884 includes/LitCalAPI.php:976 +#: includes/LitCalAPI.php:914 includes/LitCalAPI.php:1006 msgid "" "Vatican Press conference: Presentation of the Editio Typica Tertia of the " "Roman Missal" @@ -159,21 +195,17 @@ msgstr "" #. translators: #. 1. Grade or rank of the festivity #. 2. Name of the festivity -#. 3. Current year +#. 3. Requested calendar year #. -#: includes/LitCalAPI.php:930 -#, fuzzy, php-format -#| msgid "" -#| "The %s '%s' either falls between 17 Dec. and 24 Dec., or during the " -#| "Octave of Christmas, or on the weekdays of the Lenten season in the year " -#| "%d, rank reduced to Commemoration." +#: includes/LitCalAPI.php:960 +#, php-format msgid "" "The %1$s '%2$s' either falls between 17 Dec. and 24 Dec., or during the " "Octave of Christmas, or on the weekdays of the Lenten season in the year " "%3$d, rank reduced to Commemoration." msgstr "" -"Accidit %s '%s' aut infra 17 Dec. et 24 Dec. aut infra Octavam " -"Nativitatis aut infra ferias Quadragesimae in anno %d, ergo reductus est " +"Accidit %1$s '%2$s' aut infra 17 Dec. et 24 Dec. aut infra Octavam " +"Nativitatis aut infra ferias Quadragesimae in anno %3$d, ergo reductus est " "gradus ad Commemorationem." #. translators: @@ -181,15 +213,14 @@ msgstr "" #. 2. Name of the festivity that has been superseded #. 3. Grade or rank of the festivity that is superseding #. 4. Name of the festivity that is superseding -#. 5. Current year +#. 5. Requested calendar year #. -#: includes/LitCalAPI.php:952 -#, fuzzy, php-format -#| msgid "'%s' is superseded by the %s '%s' in the year %d." +#: includes/LitCalAPI.php:982 +#, php-format msgid "The %1$s '%2$s' is superseded by the %3$s '%4$s' in the year %5$d." -msgstr "'%s' subplantata est ab %s '%s' in anno %d." +msgstr "%1$s '%2$s' subplantata est ab %3$s '%4$s' in anno %5$d." -#: includes/LitCalAPI.php:972 +#: includes/LitCalAPI.php:1002 msgid "Apostolic Constitution Missale Romanum" msgstr "" @@ -202,20 +233,17 @@ msgstr "" #. 6. Date in which the superseded festivity is usually celebrated #. 7. Grade or rank of the festivity that is superseding #. 8. Name of the festivity that is superseding -#. 9. Current year +#. 9. Requested calendar year #. -#: includes/LitCalAPI.php:994 -#, fuzzy, php-format -#| msgid "" -#| "The %s '%s', added in the %s of the Roman Missal since the year %d (%s) " -#| "and usually celebrated on %s, is suppressed by the %s '%s' in the year %d." +#: includes/LitCalAPI.php:1024 +#, php-format msgid "" "The %1$s '%2$s', added in the %3$s of the Roman Missal since the year %4$d " "(%5$s) and usually celebrated on %6$s, is suppressed by the %7$s '%8$s' in " "the year %9$d." msgstr "" -"%s '%s' aggregata in %s Missalis Romani ab anno %d (%s) et plerumque " -"celebrata in die %s subplantata est ab %s '%s' in anno %d." +"%1$s '%2$s' aggregata in %3$s Missalis Romani ab anno %4$d (%5$s) et " +"plerumque celebrata in die %6$s subplantata est ab %7$s '%8$s' in anno %9$d." #. translators: #. 1. Grade or rank of the festivity @@ -225,39 +253,33 @@ msgstr "" #. 5. Source of the information #. 6. Grade or rank of the superseding festivity #. 7. Name of the superseding festivity -#. 8. Current year +#. 8. Requested calendar year #. -#: includes/LitCalAPI.php:1030 -#, fuzzy, php-format -#| msgid "" -#| "The %s '%s', added on %s since the year %d (%s), is however superseded by " -#| "a Sunday, a Solemnity or a Feast '%s' in the year %d." +#: includes/LitCalAPI.php:1060 +#, php-format msgid "" "The %1$s '%2$s', added on %3$s since the year %4$d (%5$s), is however " "superseded by a %6$s '%7$s' in the year %8$d." msgstr "" -"%s '%s', aggregata in die %s ab anno %d (%s), subplantata est ab " -"Dominica, aut Sollemnitate, aut Festu '%s' in anno %d." +"%1$s '%2$s', aggregata in die %3$s ab anno %4$d (%5$s), subplantata est ab " +"%6$s '%7$s' in anno %8$d." #. translators: #. 1. Name of the first coinciding Memorial #. 2. Name of the second coinciding Memorial -#. 3. Current year +#. 3. Requested calendar year #. 4. Source of the information #. -#: includes/LitCalAPI.php:1069 -#, fuzzy, php-format -#| msgid "" -#| "The Memorial '%s' coincides with another Memorial '%s' in the year %d. " -#| "They are both reduced in rank to optional memorials (%s)." +#: includes/LitCalAPI.php:1099 +#, php-format msgid "" "The Memorial '%1$s' coincides with another Memorial '%2$s' in the year %3$d. " "They are both reduced in rank to optional memorials (%4$s)." msgstr "" -"Memoria '%s' coincidet cum alia Memoria '%s' in anno %d. Ergo " -"ambo simul redunctur in gradu Memoriæ ad libitum (%s)." +"Memoria '%1$s' coincidet cum alia Memoria '%2$s' in anno %3$d. Ergo ambo " +"simul redunctur in gradu Memoriæ ad libitum (%4$s)." -#: includes/LitCalAPI.php:1088 +#: includes/LitCalAPI.php:1120 msgid "the Monday after Pentecost" msgstr "dies Lunae post Pentecostem" @@ -266,80 +288,68 @@ msgstr "dies Lunae post Pentecostem" #. 2. Name of the festivity #. 3. New name of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1144 -#, fuzzy, php-format -#| msgid "" -#| "The %s '%s' has been raised to the rank of %s since the year %d, " -#| "applicable to the year %d (%s)." +#: includes/LitCalAPI.php:1176 +#, php-format msgid "" "The name of the %1$s '%2$s' has been changed to %3$s since the year %4$d, " "applicable to the year %5$d (%6$s)." msgstr "" -"%s '%s' elevata est in gradu %s ab anno %d, ergo applicatur ad anno " -"%d (%s)." +"%1$s '%2$s' elevata est in gradu %3$s ab anno %4$d, ergo applicatur ad anno " +"%5$d (%6$s)." #. translators: #. 1. Grade or rank of the festivity #. 2. Name of the festivity #. 3. New grade of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1166 -#, fuzzy, php-format -#| msgid "" -#| "The %s '%s' has been raised to the rank of %s since the year %d, " -#| "applicable to the year %d (%s)." +#: includes/LitCalAPI.php:1198 +#, php-format msgid "" "The %1$s '%2$s' has been raised to the rank of %3$s since the year %4$d, " "applicable to the year %5$d (%6$s)." msgstr "" -"%s '%s' elevata est in gradu %s ab anno %d, ergo applicatur ad anno " -"%d (%s)." +"%1$s '%2$s' elevata est in gradu %3$s ab anno %4$d, ergo applicatur ad anno " +"%5$d (%6$s)." #. translators: #. 1. Grade or rank of the festivity #. 2. Name of the festivity #. 3. New grade of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1176 -#, fuzzy, php-format -#| msgid "" -#| "The %s '%s' has been raised to the rank of %s since the year %d, " -#| "applicable to the year %d (%s)." +#: includes/LitCalAPI.php:1208 +#, php-format msgid "" "The %1$s '%2$s' has been lowered to the rank of %3$s since the year %4$d, " "applicable to the year %5$d (%6$s)." msgstr "" -"%s '%s' elevata est in gradu %s ab anno %d, ergo applicatur ad anno " -"%d (%s)." +"%1$s '%2$s' elevata est in gradu %3$s ab anno %4$d, ergo applicatur ad anno " +"%5$d (%6$s)." #. translators: #. 1. Name of the festivity #. 2. Year in which was declared Doctor -#. 3. Current year +#. 3. Requested calendar year #. 4. Source of the information #. -#: includes/LitCalAPI.php:1210 -#, fuzzy, php-format -#| msgid "" -#| "The %s '%s' has been raised to the rank of %s since the year %d, " -#| "applicable to the year %d (%s)." +#: includes/LitCalAPI.php:1242 +#, php-format msgid "" "'%1$s' has been declared a Doctor of the Church since the year %2$d, " "applicable to the year %3$d (%4$s)." msgstr "" -"%s '%s' elevata est in gradu %s ab anno %d, ergo applicatur ad anno " -"%d (%s)." +"'%1$s' declarato/a est Doctor Ecclesiæ ab anno %2$d, ergo applicatur ad anno " +"%3$d (%4$s)." -#: includes/LitCalAPI.php:1218 +#: includes/LitCalAPI.php:1250 #, fuzzy #| msgid "Dedication of a Church" msgid "and Doctor of the Church" @@ -353,22 +363,19 @@ msgstr "Dedicationis ecclesiæ" #. 5. Source of the information #. 6. Grade or rank of superseding festivity #. 7. Name of superseding festivity -#. 8. Current year +#. 8. Requested calendar year #. -#: includes/LitCalAPI.php:1323 -#, fuzzy, php-format -#| msgid "" -#| "The %s '%s', added on %s since the year %d (%s), is however superseded by " -#| "a Sunday, a Solemnity or a Feast '%s' in the year %d." +#: includes/LitCalAPI.php:1355 +#, php-format msgid "" "The %1$s '%2$s', added on %3$s since the year %4$d (%5$s), is however " "superseded by the %6$s '%7$s' in the year %8$d." msgstr "" -"%s '%s', aggregata in die %s ab anno %d (%s), subplantata est ab " -"Dominica, aut Sollemnitate, aut Festu '%s' in anno %d." +"%1$s '%2$s', aggregata in die %3$s ab anno %4$d (%5$s), subplantata est ab " +"%6$s '%7$s' in anno %8$d." #. translators: -#. 1. Current year +#. 1. Requested calendar year #. 2. Grade or rank of suppressed festivity #. 3. Name of suppressed festivity #. 4. Grade or rank of the festivity being created @@ -377,38 +384,45 @@ msgstr "" #. 7. Year from which the festivity has been added #. 8. Source of the information #. -#: includes/LitCalAPI.php:1351 -#, fuzzy, php-format -#| msgid "" -#| "The %s '%s' has been suppressed by the Memorial '%s', added on %s since " -#| "the year %d (%s)." +#: includes/LitCalAPI.php:1383 +#, php-format msgid "" "In the year %1$d, the %2$s '%3$s' has been suppressed by the %4$s '%5$s', " "added on %6$s since the year %7$d (%8$s)." msgstr "" -"%s '%s' subplantata est ad Memoria '%s', aggregata in die %s ab anno %d (%s)." +"In anno %1$d, %2$s '%3$s' subplantata est ad %4$s '%5$s', aggregata in die " +"%6$s ab anno %7$d (%8$s)." -#: includes/LitCalAPI.php:1409 -#, php-format +#. translators: 1: Festivity name, 2: Source of the information, 3: Requested calendar year +#: includes/LitCalAPI.php:1442 +#, fuzzy, php-format +#| msgid "" +#| "The optional memorial '%s' has been transferred from Dec. 12 to Aug. 12 " +#| "since the year 2002 (%s), applicable to the year %d." msgid "" -"The optional memorial '%s' has been transferred from Dec. 12 to Aug. 12 " -"since the year 2002 (%s), applicable to the year %d." +"The optional memorial '%1$s' has been transferred from Dec. 12 to Aug. 12 " +"since the year 2002 (%2$s), applicable to the year %3$d." msgstr "" "Memoria ad libitum '%s' traslata est de 12 Dec. ad 12 Aug. ab anno " "2002 (%s), ergo viget in anno %d." -#: includes/LitCalAPI.php:1421 -#, php-format +#. translators: 1: Festivity name, 2: Source of the information, 3: Requested calendar year +#: includes/LitCalAPI.php:1455 +#, fuzzy, php-format +#| msgid "" +#| "The optional memorial '%s', which would have been superseded this year by " +#| "a Sunday or Solemnity were it on Dec. 12, has however been transferred to " +#| "Aug. 12 since the year 2002 (%s), applicable to the year %d." msgid "" -"The optional memorial '%s', which would have been superseded this year by a " -"Sunday or Solemnity were it on Dec. 12, has however been transferred to Aug. " -"12 since the year 2002 (%s), applicable to the year %d." +"The optional memorial '%1$s', which would have been superseded this year by " +"a Sunday or Solemnity were it on Dec. 12, has however been transferred to " +"Aug. 12 since the year 2002 (%2$s), applicable to the year %3$d." msgstr "" "Memoria ad libitum '%s' qua subplantata fuisset ab Dominica aut " "Sollemnitate si celebrata fuisset in die 12 Dec., nihilominus traslata est " "ad 12 Aug. ab anno 2002 (%s), ergo viget in anno %d." -#: includes/LitCalAPI.php:1436 +#: includes/LitCalAPI.php:1470 #, php-format msgid "" "The optional memorial '%1$s' has been transferred from Dec. 12 to Aug. 12 " @@ -419,100 +433,168 @@ msgstr "" "anno 2002 (%2$s), ergo viget in anno %3$d. Nihilominus subplantata est ab " "Dominica, aut Sollemnitate, aut Festu \\'%4$s\\' in anno %3$d." -#: includes/LitCalAPI.php:1462 -#, php-format +#. translators: 1: Festivity name, 2: Source of the information +#: includes/LitCalAPI.php:1497 +#, fuzzy, php-format +#| msgid "" +#| "The Feast '%s' would have been suppressed this year ( 2009 ) since it " +#| "falls on a Sunday, however being the Year of the Apostle Paul, as per the " +#| "%s it has been reinstated so that local churches can optionally celebrate " +#| "the memorial." msgid "" -"The Feast '%s' would have been suppressed this year ( 2009 ) since it falls " -"on a Sunday, however being the Year of the Apostle Paul, as per the %s it " -"has been reinstated so that local churches can optionally celebrate the " -"memorial." +"The Feast '%1$s' would have been suppressed this year ( 2009 ) since it " +"falls on a Sunday, however being the Year of the Apostle Paul, as per the " +"%2$s it has been reinstated so that local churches can optionally celebrate " +"the memorial." msgstr "" "Festum '%s' hoc anno ( 2009 ) supprimeretur quia congruit cum Dominica, " "tamen quamvis sit Annus Pauli Apostoli, restituta est secundum %s ut " "permittant ecclesias locales ad memoriam celebrandam." -#: includes/LitCalAPI.php:1486 +#: includes/LitCalAPI.php:1521 #, php-format msgid "of the %s Week of Easter" msgstr "Hebdomadæ %s Temporis Paschali" -#: includes/LitCalAPI.php:1522 includes/LitCalAPI.php:1551 +#: includes/LitCalAPI.php:1557 includes/LitCalAPI.php:1586 #, php-format msgid "of the %s Week of Ordinary Time" msgstr "Hebdomadæ %s Temporis Ordinarii" -#: includes/LitCalAPI.php:1574 +#: includes/LitCalAPI.php:1609 msgid "Saturday Memorial of the Blessed Virgin Mary" msgstr "Memoria Sanctæ Mariæ in Sabbato" +#: includes/LitCalAPI.php:1634 includes/LitCalAPI.php:1637 +#, php-format +msgid "Error retrieving and decoding Wider Region data from file %s." +msgstr "" + +#: includes/LitCalAPI.php:1644 +#, php-format +msgid "Error retrieving and decoding National data from file %s." +msgstr "" + #. translators: #. 1. Grade of the festivity #. 2. Name of the festivity #. 3. Date on which the festivity is usually celebrated #. 4. Grade of the superseding festivity #. 5. Name of the superseding festivity -#. 6. Current year +#. 6. Requested calendar year #. -#: includes/LitCalAPI.php:1633 -#, fuzzy, php-format -#| msgid "" -#| "The %s '%s', usually celebrated on %s, is suppressed by the %s '%s' in " -#| "the year %d." +#: includes/LitCalAPI.php:1677 +#, php-format msgid "" "The %1$s '%2$s', usually celebrated on %3$s, is suppressed by the %4$s " "'%5$s' in the year %6$d." msgstr "" -"%s '%s', celebrata plerumque in die %s, subplantata est ab %s '%s' in anno " -"%d." +"%1$s '%2$s', celebrata plerumque in die %3$s, subplantata est ab %4$s '%5$s' " +"in anno %6$d." + +#. translators: +#. 1. Name of the first coinciding Memorial +#. 2. Name of the second coinciding Memorial +#. 3. Requested calendar year +#. 4. Source of the information +#. +#: includes/LitCalAPI.php:1742 +#, php-format +msgid "" +"The Memorial '%1$s' coincides with another Memorial '%2$s' in the year %3$d. " +"They are both reduced in rank to optional memorials." +msgstr "" +"Memoria '%1$s' coincidet cum alia Memoria '%2$s' in anno %3$d. Ergo ambo " +"simul redunctur in gradu Memoriæ ad libitum." -#: includes/LitCalAPI.php:1651 -msgctxt "Male singular" -msgid "patron of Europe" -msgstr "patronus Europae" +#: includes/LitCalAPI.php:1805 +msgid "" +"We should be creating a new festivity, however we do not seem to have the " +"correct date information in order to proceed" +msgstr "" -#: includes/LitCalAPI.php:1652 includes/LitCalAPI.php:1660 -#: includes/LitCalAPI.php:1664 includes/LitCalAPI.php:1683 -msgctxt "Female singular" -msgid "patron of Europe" -msgstr "patrona Europae" +#. translators: Name of the Roman Missal +#: includes/LitCalAPI.php:1920 +#, php-format +msgid "Found a sanctorale data file for %s" +msgstr "" -#: includes/LitCalAPI.php:1653 -msgctxt "Male plural" -msgid "patrons of Europe" -msgstr "patroni Europae" +#. translators: +#. 1. Festivity grade +#. 2. Festivity name +#. 3. Festivity date +#. 4. Edition of the Roman Missal +#. 5. Superseding festivity grade +#. 6. Superseding festivity name +#. 7. Requested calendar year +#. +#: includes/LitCalAPI.php:1950 +#, php-format +msgid "" +"The %1$s '%2$s' (%3$s), added to the national calendar in the %4$s, is " +"superseded by the %5$s '%6$s' in the year %7$d" +msgstr "" +"%1$s '%2$s' (%3$s), aggregata calendario nationali in %4$s, subplantata est " +"ab %5$s '%6$s' in anno %7$d" + +#. translators: Name of the Roman Missal +#: includes/LitCalAPI.php:1965 +#, php-format +msgid "Could not find a sanctorale data file for %s" +msgstr "" -#: includes/LitCalAPI.php:1671 -msgid "Saint Teresa Benedicta of the Cross, Virgin and Martyr" -msgstr "Sanctæ Teresiæ Benedictæ a Cruce, virginis et martyris" +#. translators: 1. Festivity grade, 2. Festivity name, 3. New festivity name, 4: Requested calendar year, 5. Old date, 6. New date +#: includes/LitCalAPI.php:2057 +#, fuzzy, php-format +#| msgid "" +#| "The %1$s '%2$s' has been added on %3$s since the year %4$d (%5$s), " +#| "applicable to the year %6$d." +msgid "" +"The %1$s '%2$s' is transferred from %5$s to %6$s as per the %7$s, to make " +"room for '%3$s': applicable to the year %4$d." +msgstr "" +"%1$s '%2$s' aggregata est igitur in die %3$s ab anno %4$d (%5$s), " +"ergo viget in anno %6$d." + +#. translators: 1. Festivity grade, 2. Festivity name, 3. Old date, 4. New date, 5. Source of the information, 6. New festivity name, 7. Superseding festivity grade, 8. Superseding festivity name, 9: Requested calendar year +#: includes/LitCalAPI.php:2076 +#, fuzzy, php-format +#| msgid "" +#| "The %1$s '%2$s', added in the %3$s of the Roman Missal since the year " +#| "%4$d (%5$s) and usually celebrated on %6$s, is suppressed by the %7$s " +#| "'%8$s' in the year %9$d." +msgid "" +"The %1$s '%2$s' would have been transferred from %3$s to %4$s as per the " +"%5$s, to make room for '%6$s', however it is suppressed by the %7$s '%8$s' " +"in the year %9$d." +msgstr "" +"%1$s '%2$s' aggregata in %3$s Missalis Romani ab anno %4$d (%5$s) et " +"plerumque celebrata in die %6$s subplantata est ab %7$s '%8$s' in anno %9$d." #. translators: when there are multiple possible commons, this will be the glue "or from the common of..." #: includes/LitMessages.php:142 includes/LitMessages.php:153 -#: includes/enums/LitCommon.php:327 +#: includes/enums/LitCommon.php:346 msgid "or" msgstr "vel" #. translators: in reference to the cycle of liturgical years (A, B, C; I, II) -#: includes/FestivityCollection.php:36 +#: includes/FestivityCollection.php:44 msgid "YEAR" msgstr "ANNUM" -#: includes/FestivityCollection.php:37 +#: includes/FestivityCollection.php:45 msgid "Vigil Mass" msgstr "Missa in Vigilia" -#: includes/FestivityCollection.php:339 includes/FestivityCollection.php:366 +#: includes/FestivityCollection.php:359 #, php-format msgid "" -"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " -"This last Solemnity takes precedence, therefore it will maintain Vespers II " -"and an evening Mass, while the first Solemnity will not have a Vigil Mass or " -"Vespers I." +"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. As " +"per %s, the first has precedence, therefore the Vigil Mass is confirmed as " +"are I Vespers." msgstr "" -"Missa in Vigilia %s '%s' coincidet cum %s'%s' in anno %d. Sollemnitas ultima " -"praecedentia habet, ergo servabit Secundis Vesperis atque Missa vesperum, " -"cum Sollemnitas prima neque Missa in Vigilia neque Primis Vesperis servabit." -#: includes/FestivityCollection.php:352 includes/FestivityCollection.php:410 +#: includes/FestivityCollection.php:373 #, php-format msgid "" "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " @@ -521,15 +603,19 @@ msgid "" "evening Mass." msgstr "" -#: includes/FestivityCollection.php:380 +#: includes/FestivityCollection.php:383 #, php-format msgid "" -"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. As " -"per %s, the first has precedence, therefore the Vigil Mass is confirmed as " -"are I Vespers." +"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " +"This last Solemnity takes precedence, therefore it will maintain Vespers II " +"and an evening Mass, while the first Solemnity will not have a Vigil Mass or " +"Vespers I." msgstr "" +"Missa in Vigilia %s '%s' coincidet cum %s'%s' in anno %d. Sollemnitas ultima " +"praecedentia habet, ergo servabit Secundis Vesperis atque Missa vesperum, " +"cum Sollemnitas prima neque Missa in Vigilia neque Primis Vesperis servabit." -#: includes/FestivityCollection.php:392 +#: includes/FestivityCollection.php:443 #, php-format msgid "" "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. We " @@ -539,27 +625,27 @@ msgstr "" "Congregatione Cultu Divino quid facere!" #. translators: context = liturgical color -#: includes/enums/LitColor.php:24 +#: includes/enums/LitColor.php:27 msgid "green" msgstr "viridis" #. translators: context = liturgical color -#: includes/enums/LitColor.php:27 +#: includes/enums/LitColor.php:30 msgid "purple" msgstr "purpura" #. translators: context = liturgical color -#: includes/enums/LitColor.php:30 +#: includes/enums/LitColor.php:33 msgid "white" msgstr "albus" #. translators: context = liturgical color -#: includes/enums/LitColor.php:33 +#: includes/enums/LitColor.php:36 msgid "red" msgstr "ruber" #. translators: context = liturgical color -#: includes/enums/LitColor.php:36 +#: includes/enums/LitColor.php:39 msgid "pink" msgstr "rosea" @@ -590,7 +676,7 @@ msgstr "Pastorum" #. translators: context = from the Common of nn #: includes/enums/LitCommon.php:67 msgid "Doctors" -msgstr "Doctorum" +msgstr "Doctorum Ecclesiæ" #. translators: context = from the Common of nn #: includes/enums/LitCommon.php:69 @@ -720,7 +806,7 @@ msgstr "Pro religiosis" #. translators: context = from the Common of nn: nn #: includes/enums/LitCommon.php:120 msgid "For Those Who Practiced Works of Mercy" -msgstr "Pro iis qui opera misericordiae exercuerunt" +msgstr "Pro iis qui opera misericordiæ exercuerunt" #. translators: context = from the Common of nn: nn #: includes/enums/LitCommon.php:122 @@ -756,7 +842,7 @@ msgctxt "(SING_MASC)" msgid "of" msgstr "" -#: includes/enums/LitCommon.php:323 +#: includes/enums/LitCommon.php:342 msgid "From the Common" msgstr "De Commune" @@ -800,6 +886,21 @@ msgstr "SOLLEMNITAS" msgid "celebration with precedence over solemnities" msgstr "celebratio altioris ordinis quam sollemnitatis" +#~ msgctxt "Male singular" +#~ msgid "patron of Europe" +#~ msgstr "patronus Europae" + +#~ msgctxt "Female singular" +#~ msgid "patron of Europe" +#~ msgstr "patrona Europae" + +#~ msgctxt "Male plural" +#~ msgid "patrons of Europe" +#~ msgstr "patroni Europae" + +#~ msgid "Saint Teresa Benedicta of the Cross, Virgin and Martyr" +#~ msgstr "Sanctæ Teresiæ Benedictæ a Cruce, virginis et martyris" + #~ msgid "" #~ "The Memorial '%s', added on %s since the year %d (%s), is however " #~ "superseded by a Solemnity or a Feast '%s' in the year %d." diff --git a/i18n/litcal.pot b/i18n/litcal.pot index ac8e3f05..b958d584 100644 --- a/i18n/litcal.pot +++ b/i18n/litcal.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-27 14:41+0000\n" +"POT-Creation-Date: 2022-06-06 08:21+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,96 +17,114 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: includes/LitCalAPI.php:222 +#: includes/LitCalAPI.php:229 #, php-format msgid "" "Only years from 1970 and after are supported. You tried requesting the year " "%d." msgstr "" -#: includes/LitCalAPI.php:329 includes/LitCalAPI.php:368 +#. translators: name of the Roman Missal +#: includes/LitCalAPI.php:265 +#, php-format +msgid "Data for the sanctorale from %s could not be found." +msgstr "" + +#. translators: name of the Roman Missal +#: includes/LitCalAPI.php:272 +#, php-format +msgid "Translation data for the sanctorale from %s could not be found." +msgstr "" + +#: includes/LitCalAPI.php:348 includes/LitCalAPI.php:387 #, php-format msgid "%s day before Epiphany" msgstr "" -#: includes/LitCalAPI.php:343 includes/LitCalAPI.php:381 +#: includes/LitCalAPI.php:362 includes/LitCalAPI.php:400 #, php-format msgid "%s day after Epiphany" msgstr "" -#: includes/LitCalAPI.php:533 includes/LitCalAPI.php:549 -#: includes/LitCalAPI.php:575 +#. translators: 1: Festivity name, 2: Festivity date, 3: Requested calendar year, 4: Explicatory string for the transferral (ex. the Saturday preceding Palm Sunday), 5: actual date for the transferral, 6: Decree of the Congregation for Divine Worship +#. translators: 1: Festivity name, 2: Festivity date, 3: Requested calendar year, 4: Explicatory string for the transferral, 5: actual date for the transferral, 6: Decree of the Congregation for Divine Worship +#: includes/LitCalAPI.php:553 includes/LitCalAPI.php:570 +#: includes/LitCalAPI.php:597 #, php-format msgid "" -"The Solemnity '%s' falls on %s in the year %d, the celebration has been " -"transferred to %s (%s) as per the %s." +"The Solemnity '%1$s' falls on %2$s in the year %3$d, the celebration has " +"been transferred to %4$s (%5$s) as per the %6$s." msgstr "" -#: includes/LitCalAPI.php:537 +#: includes/LitCalAPI.php:557 msgid "the Saturday preceding Palm Sunday" msgstr "" -#: includes/LitCalAPI.php:542 includes/LitCalAPI.php:558 -#: includes/LitCalAPI.php:584 includes/LitCalAPI.php:612 -#: includes/LitCalAPI.php:898 includes/LitCalAPI.php:1017 -#: includes/LitCalAPI.php:1073 includes/LitCalAPI.php:1230 -#: includes/LitCalAPI.php:1275 includes/LitCalAPI.php:1302 -#: includes/LitCalAPI.php:1411 includes/LitCalAPI.php:1423 -#: includes/LitCalAPI.php:1438 includes/LitCalAPI.php:1464 -#: includes/FestivityCollection.php:386 +#: includes/LitCalAPI.php:562 includes/LitCalAPI.php:579 +#: includes/LitCalAPI.php:606 includes/LitCalAPI.php:636 +#: includes/LitCalAPI.php:928 includes/LitCalAPI.php:1047 +#: includes/LitCalAPI.php:1103 includes/LitCalAPI.php:1262 +#: includes/LitCalAPI.php:1307 includes/LitCalAPI.php:1334 +#: includes/LitCalAPI.php:1444 includes/LitCalAPI.php:1457 +#: includes/LitCalAPI.php:1472 includes/LitCalAPI.php:1499 +#: includes/FestivityCollection.php:365 msgid "Decree of the Congregation for Divine Worship" msgstr "" -#: includes/LitCalAPI.php:553 +#: includes/LitCalAPI.php:574 msgid "the Monday following the Second Sunday of Easter" msgstr "" -#: includes/LitCalAPI.php:579 +#: includes/LitCalAPI.php:601 msgid "the following Monday" msgstr "" -#: includes/LitCalAPI.php:590 +#. translators: 1: Festivity name, 2: Coinciding Festivity name, 3: Requested calendar year +#: includes/LitCalAPI.php:613 #, php-format msgid "" -"The Solemnity '%s' coincides with the Solemnity '%s' in the year %d. We " -"should ask the Congregation for Divine Worship what to do about this!" +"The Solemnity '%1$s' coincides with the Solemnity '%2$s' in the year %3$d. " +"We should ask the Congregation for Divine Worship what to do about this!" msgstr "" -#: includes/LitCalAPI.php:608 +#. translators: 1: Festivity name, 2: Coinciding Festivity name, 3: Requested calendar year, 4: Decree of the Congregation for Divine Worship +#: includes/LitCalAPI.php:632 #, php-format msgid "" -"Seeing that the Solemnity '%s' coincides with the Solemnity '%s' in the year " -"%d, it has been anticipated by one day as per %s." +"Seeing that the Solemnity '%1$s' coincides with the Solemnity '%2$s' in the " +"year %3$d, it has been anticipated by one day as per %4$s." msgstr "" -#: includes/LitCalAPI.php:676 +#. translators: 1: Festivity name (Christmas), 2: Requested calendar year, 3: Festivity name (Holy Family), 4: New date for Holy Family +#: includes/LitCalAPI.php:701 #, php-format msgid "" -"'%s' falls on a Sunday in the year %d, therefore the Feast '%s' is " -"celebrated on %s rather than on the Sunday after Christmas." +"'%1$s' falls on a Sunday in the year %2$d, therefore the Feast '%3$s' is " +"celebrated on %4$s rather than on the Sunday after Christmas." msgstr "" -#: includes/LitCalAPI.php:710 includes/LitCalAPI.php:734 +#. translators: 1: Festivity name, 2: Superseding Festivity grade, 3: Superseding Festivity name, 4: Requested calendar year +#: includes/LitCalAPI.php:736 includes/LitCalAPI.php:761 #, php-format -msgid "'%s' is superseded by the %s '%s' in the year %d." +msgid "'%1$s' is superseded by the %2$s '%3$s' in the year %4$d." msgstr "" -#: includes/LitCalAPI.php:787 +#: includes/LitCalAPI.php:814 #, php-format msgid "of the %s Week of Advent" msgstr "" -#: includes/LitCalAPI.php:804 +#: includes/LitCalAPI.php:831 #, php-format msgid "%s Day of the Octave of Christmas" msgstr "" -#: includes/LitCalAPI.php:828 +#: includes/LitCalAPI.php:855 #, php-format msgid "of the %s Week of Lent" msgstr "" -#: includes/LitCalAPI.php:833 +#: includes/LitCalAPI.php:860 msgid "after Ash Wednesday" msgstr "" @@ -116,7 +134,7 @@ msgstr "" #. 3. Day of the festivity #. 4. Year from which the festivity has been added #. 5. Source of the information -#. 6. Current year +#. 6. Requested calendar year #. #. translators: #. 1. Grade or rank of the festivity being created @@ -124,17 +142,25 @@ msgstr "" #. 3. Indication of the mobile date for the festivity being created #. 4. Year from which the festivity has been added #. 5. Source of the information -#. 6. Current year +#. 6. Requested calendar year +#. +#. translators: +#. 1. Grade or rank of the festivity +#. 2. Name of the festivity +#. 3. Day of the festivity +#. 4. Year from which the festivity has been added +#. 5. Source of the information +#. 6. Requested calendar year #. -#: includes/LitCalAPI.php:853 includes/LitCalAPI.php:1109 -#: includes/LitCalAPI.php:1286 +#: includes/LitCalAPI.php:880 includes/LitCalAPI.php:1141 +#: includes/LitCalAPI.php:1318 includes/LitCalAPI.php:1840 #, php-format msgid "" "The %1$s '%2$s' has been added on %3$s since the year %4$d (%5$s), " "applicable to the year %6$d." msgstr "" -#: includes/LitCalAPI.php:884 includes/LitCalAPI.php:976 +#: includes/LitCalAPI.php:914 includes/LitCalAPI.php:1006 msgid "" "Vatican Press conference: Presentation of the Editio Typica Tertia of the " "Roman Missal" @@ -143,9 +169,9 @@ msgstr "" #. translators: #. 1. Grade or rank of the festivity #. 2. Name of the festivity -#. 3. Current year +#. 3. Requested calendar year #. -#: includes/LitCalAPI.php:930 +#: includes/LitCalAPI.php:960 #, php-format msgid "" "The %1$s '%2$s' either falls between 17 Dec. and 24 Dec., or during the " @@ -158,14 +184,14 @@ msgstr "" #. 2. Name of the festivity that has been superseded #. 3. Grade or rank of the festivity that is superseding #. 4. Name of the festivity that is superseding -#. 5. Current year +#. 5. Requested calendar year #. -#: includes/LitCalAPI.php:952 +#: includes/LitCalAPI.php:982 #, php-format msgid "The %1$s '%2$s' is superseded by the %3$s '%4$s' in the year %5$d." msgstr "" -#: includes/LitCalAPI.php:972 +#: includes/LitCalAPI.php:1002 msgid "Apostolic Constitution Missale Romanum" msgstr "" @@ -178,9 +204,9 @@ msgstr "" #. 6. Date in which the superseded festivity is usually celebrated #. 7. Grade or rank of the festivity that is superseding #. 8. Name of the festivity that is superseding -#. 9. Current year +#. 9. Requested calendar year #. -#: includes/LitCalAPI.php:994 +#: includes/LitCalAPI.php:1024 #, php-format msgid "" "The %1$s '%2$s', added in the %3$s of the Roman Missal since the year %4$d " @@ -196,9 +222,9 @@ msgstr "" #. 5. Source of the information #. 6. Grade or rank of the superseding festivity #. 7. Name of the superseding festivity -#. 8. Current year +#. 8. Requested calendar year #. -#: includes/LitCalAPI.php:1030 +#: includes/LitCalAPI.php:1060 #, php-format msgid "" "The %1$s '%2$s', added on %3$s since the year %4$d (%5$s), is however " @@ -208,17 +234,17 @@ msgstr "" #. translators: #. 1. Name of the first coinciding Memorial #. 2. Name of the second coinciding Memorial -#. 3. Current year +#. 3. Requested calendar year #. 4. Source of the information #. -#: includes/LitCalAPI.php:1069 +#: includes/LitCalAPI.php:1099 #, php-format msgid "" "The Memorial '%1$s' coincides with another Memorial '%2$s' in the year %3$d. " "They are both reduced in rank to optional memorials (%4$s)." msgstr "" -#: includes/LitCalAPI.php:1088 +#: includes/LitCalAPI.php:1120 msgid "the Monday after Pentecost" msgstr "" @@ -227,10 +253,10 @@ msgstr "" #. 2. Name of the festivity #. 3. New name of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1144 +#: includes/LitCalAPI.php:1176 #, php-format msgid "" "The name of the %1$s '%2$s' has been changed to %3$s since the year %4$d, " @@ -242,10 +268,10 @@ msgstr "" #. 2. Name of the festivity #. 3. New grade of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1166 +#: includes/LitCalAPI.php:1198 #, php-format msgid "" "The %1$s '%2$s' has been raised to the rank of %3$s since the year %4$d, " @@ -257,10 +283,10 @@ msgstr "" #. 2. Name of the festivity #. 3. New grade of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1176 +#: includes/LitCalAPI.php:1208 #, php-format msgid "" "The %1$s '%2$s' has been lowered to the rank of %3$s since the year %4$d, " @@ -270,17 +296,17 @@ msgstr "" #. translators: #. 1. Name of the festivity #. 2. Year in which was declared Doctor -#. 3. Current year +#. 3. Requested calendar year #. 4. Source of the information #. -#: includes/LitCalAPI.php:1210 +#: includes/LitCalAPI.php:1242 #, php-format msgid "" "'%1$s' has been declared a Doctor of the Church since the year %2$d, " "applicable to the year %3$d (%4$s)." msgstr "" -#: includes/LitCalAPI.php:1218 +#: includes/LitCalAPI.php:1250 msgid "and Doctor of the Church" msgstr "" @@ -292,9 +318,9 @@ msgstr "" #. 5. Source of the information #. 6. Grade or rank of superseding festivity #. 7. Name of superseding festivity -#. 8. Current year +#. 8. Requested calendar year #. -#: includes/LitCalAPI.php:1323 +#: includes/LitCalAPI.php:1355 #, php-format msgid "" "The %1$s '%2$s', added on %3$s since the year %4$d (%5$s), is however " @@ -302,7 +328,7 @@ msgid "" msgstr "" #. translators: -#. 1. Current year +#. 1. Requested calendar year #. 2. Grade or rank of suppressed festivity #. 3. Name of suppressed festivity #. 4. Grade or rank of the festivity being created @@ -311,29 +337,31 @@ msgstr "" #. 7. Year from which the festivity has been added #. 8. Source of the information #. -#: includes/LitCalAPI.php:1351 +#: includes/LitCalAPI.php:1383 #, php-format msgid "" "In the year %1$d, the %2$s '%3$s' has been suppressed by the %4$s '%5$s', " "added on %6$s since the year %7$d (%8$s)." msgstr "" -#: includes/LitCalAPI.php:1409 +#. translators: 1: Festivity name, 2: Source of the information, 3: Requested calendar year +#: includes/LitCalAPI.php:1442 #, php-format msgid "" -"The optional memorial '%s' has been transferred from Dec. 12 to Aug. 12 " -"since the year 2002 (%s), applicable to the year %d." +"The optional memorial '%1$s' has been transferred from Dec. 12 to Aug. 12 " +"since the year 2002 (%2$s), applicable to the year %3$d." msgstr "" -#: includes/LitCalAPI.php:1421 +#. translators: 1: Festivity name, 2: Source of the information, 3: Requested calendar year +#: includes/LitCalAPI.php:1455 #, php-format msgid "" -"The optional memorial '%s', which would have been superseded this year by a " -"Sunday or Solemnity were it on Dec. 12, has however been transferred to Aug. " -"12 since the year 2002 (%s), applicable to the year %d." +"The optional memorial '%1$s', which would have been superseded this year by " +"a Sunday or Solemnity were it on Dec. 12, has however been transferred to " +"Aug. 12 since the year 2002 (%2$s), applicable to the year %3$d." msgstr "" -#: includes/LitCalAPI.php:1436 +#: includes/LitCalAPI.php:1470 #, php-format msgid "" "The optional memorial '%1$s' has been transferred from Dec. 12 to Aug. 12 " @@ -341,89 +369,143 @@ msgid "" "superseded by a Sunday, a Solemnity, or a Feast '%4$s' in the year %3$d." msgstr "" -#: includes/LitCalAPI.php:1462 +#. translators: 1: Festivity name, 2: Source of the information +#: includes/LitCalAPI.php:1497 #, php-format msgid "" -"The Feast '%s' would have been suppressed this year ( 2009 ) since it falls " -"on a Sunday, however being the Year of the Apostle Paul, as per the %s it " -"has been reinstated so that local churches can optionally celebrate the " -"memorial." +"The Feast '%1$s' would have been suppressed this year ( 2009 ) since it " +"falls on a Sunday, however being the Year of the Apostle Paul, as per the " +"%2$s it has been reinstated so that local churches can optionally celebrate " +"the memorial." msgstr "" -#: includes/LitCalAPI.php:1486 +#: includes/LitCalAPI.php:1521 #, php-format msgid "of the %s Week of Easter" msgstr "" -#: includes/LitCalAPI.php:1522 includes/LitCalAPI.php:1551 +#: includes/LitCalAPI.php:1557 includes/LitCalAPI.php:1586 #, php-format msgid "of the %s Week of Ordinary Time" msgstr "" -#: includes/LitCalAPI.php:1574 +#: includes/LitCalAPI.php:1609 msgid "Saturday Memorial of the Blessed Virgin Mary" msgstr "" +#: includes/LitCalAPI.php:1634 includes/LitCalAPI.php:1637 +#, php-format +msgid "Error retrieving and decoding Wider Region data from file %s." +msgstr "" + +#: includes/LitCalAPI.php:1644 +#, php-format +msgid "Error retrieving and decoding National data from file %s." +msgstr "" + #. translators: #. 1. Grade of the festivity #. 2. Name of the festivity #. 3. Date on which the festivity is usually celebrated #. 4. Grade of the superseding festivity #. 5. Name of the superseding festivity -#. 6. Current year +#. 6. Requested calendar year #. -#: includes/LitCalAPI.php:1633 +#: includes/LitCalAPI.php:1677 #, php-format msgid "" "The %1$s '%2$s', usually celebrated on %3$s, is suppressed by the %4$s " "'%5$s' in the year %6$d." msgstr "" -#: includes/LitCalAPI.php:1651 -msgctxt "Male singular" -msgid "patron of Europe" +#. translators: +#. 1. Name of the first coinciding Memorial +#. 2. Name of the second coinciding Memorial +#. 3. Requested calendar year +#. 4. Source of the information +#. +#: includes/LitCalAPI.php:1742 +#, php-format +msgid "" +"The Memorial '%1$s' coincides with another Memorial '%2$s' in the year %3$d. " +"They are both reduced in rank to optional memorials." +msgstr "" + +#: includes/LitCalAPI.php:1805 +msgid "" +"We should be creating a new festivity, however we do not seem to have the " +"correct date information in order to proceed" +msgstr "" + +#. translators: Name of the Roman Missal +#: includes/LitCalAPI.php:1920 +#, php-format +msgid "Found a sanctorale data file for %s" msgstr "" -#: includes/LitCalAPI.php:1652 includes/LitCalAPI.php:1660 -#: includes/LitCalAPI.php:1664 includes/LitCalAPI.php:1683 -msgctxt "Female singular" -msgid "patron of Europe" +#. translators: +#. 1. Festivity grade +#. 2. Festivity name +#. 3. Festivity date +#. 4. Edition of the Roman Missal +#. 5. Superseding festivity grade +#. 6. Superseding festivity name +#. 7. Requested calendar year +#. +#: includes/LitCalAPI.php:1950 +#, php-format +msgid "" +"The %1$s '%2$s' (%3$s), added to the national calendar in the %4$s, is " +"superseded by the %5$s '%6$s' in the year %7$d" +msgstr "" + +#. translators: Name of the Roman Missal +#: includes/LitCalAPI.php:1965 +#, php-format +msgid "Could not find a sanctorale data file for %s" msgstr "" -#: includes/LitCalAPI.php:1653 -msgctxt "Male plural" -msgid "patrons of Europe" +#. translators: 1. Festivity grade, 2. Festivity name, 3. New festivity name, 4: Requested calendar year, 5. Old date, 6. New date +#: includes/LitCalAPI.php:2057 +#, php-format +msgid "" +"The %1$s '%2$s' is transferred from %5$s to %6$s as per the %7$s, to make " +"room for '%3$s': applicable to the year %4$d." msgstr "" -#: includes/LitCalAPI.php:1671 -msgid "Saint Teresa Benedicta of the Cross, Virgin and Martyr" +#. translators: 1. Festivity grade, 2. Festivity name, 3. Old date, 4. New date, 5. Source of the information, 6. New festivity name, 7. Superseding festivity grade, 8. Superseding festivity name, 9: Requested calendar year +#: includes/LitCalAPI.php:2076 +#, php-format +msgid "" +"The %1$s '%2$s' would have been transferred from %3$s to %4$s as per the " +"%5$s, to make room for '%6$s', however it is suppressed by the %7$s '%8$s' " +"in the year %9$d." msgstr "" #. translators: when there are multiple possible commons, this will be the glue "or from the common of..." #: includes/LitMessages.php:142 includes/LitMessages.php:153 -#: includes/enums/LitCommon.php:327 +#: includes/enums/LitCommon.php:346 msgid "or" msgstr "" #. translators: in reference to the cycle of liturgical years (A, B, C; I, II) -#: includes/FestivityCollection.php:36 +#: includes/FestivityCollection.php:44 msgid "YEAR" msgstr "" -#: includes/FestivityCollection.php:37 +#: includes/FestivityCollection.php:45 msgid "Vigil Mass" msgstr "" -#: includes/FestivityCollection.php:339 includes/FestivityCollection.php:366 +#: includes/FestivityCollection.php:359 #, php-format msgid "" -"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " -"This last Solemnity takes precedence, therefore it will maintain Vespers II " -"and an evening Mass, while the first Solemnity will not have a Vigil Mass or " -"Vespers I." +"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. As " +"per %s, the first has precedence, therefore the Vigil Mass is confirmed as " +"are I Vespers." msgstr "" -#: includes/FestivityCollection.php:352 includes/FestivityCollection.php:410 +#: includes/FestivityCollection.php:373 #, php-format msgid "" "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " @@ -432,15 +514,16 @@ msgid "" "evening Mass." msgstr "" -#: includes/FestivityCollection.php:380 +#: includes/FestivityCollection.php:383 #, php-format msgid "" -"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. As " -"per %s, the first has precedence, therefore the Vigil Mass is confirmed as " -"are I Vespers." +"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " +"This last Solemnity takes precedence, therefore it will maintain Vespers II " +"and an evening Mass, while the first Solemnity will not have a Vigil Mass or " +"Vespers I." msgstr "" -#: includes/FestivityCollection.php:392 +#: includes/FestivityCollection.php:443 #, php-format msgid "" "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. We " @@ -448,27 +531,27 @@ msgid "" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:24 +#: includes/enums/LitColor.php:27 msgid "green" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:27 +#: includes/enums/LitColor.php:30 msgid "purple" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:30 +#: includes/enums/LitColor.php:33 msgid "white" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:33 +#: includes/enums/LitColor.php:36 msgid "red" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:36 +#: includes/enums/LitColor.php:39 msgid "pink" msgstr "" @@ -665,7 +748,7 @@ msgctxt "(SING_MASC)" msgid "of" msgstr "" -#: includes/enums/LitCommon.php:323 +#: includes/enums/LitCommon.php:342 msgid "From the Common" msgstr "" diff --git a/i18n/pt/LC_MESSAGES/litcal.mo b/i18n/pt/LC_MESSAGES/litcal.mo new file mode 100644 index 00000000..bf0deb44 Binary files /dev/null and b/i18n/pt/LC_MESSAGES/litcal.mo differ diff --git a/i18n/pt/LC_MESSAGES/litcal.po b/i18n/pt/LC_MESSAGES/litcal.po index beadd5a3..9e6d4d53 100644 --- a/i18n/pt/LC_MESSAGES/litcal.po +++ b/i18n/pt/LC_MESSAGES/litcal.po @@ -2,111 +2,131 @@ # Copyright (C) 2021 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Ubuntu , 2021. -# +# John R. D'Orazio , 2022. msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-27 14:41+0000\n" -"PO-Revision-Date: 2021-12-14 00:21+0100\n" -"Last-Translator: Ubuntu \n" -"Language-Team: Portuguese\n" +"POT-Creation-Date: 2022-06-06 08:21+0000\n" +"PO-Revision-Date: 2022-06-02 20:16+0000\n" +"Last-Translator: John R. D'Orazio \n" +"Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ASCII\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Weblate 4.12.1\n" -#: includes/LitCalAPI.php:222 +#: includes/LitCalAPI.php:229 #, php-format msgid "" "Only years from 1970 and after are supported. You tried requesting the year " "%d." msgstr "" -#: includes/LitCalAPI.php:329 includes/LitCalAPI.php:368 +#. translators: name of the Roman Missal +#: includes/LitCalAPI.php:265 +#, php-format +msgid "Data for the sanctorale from %s could not be found." +msgstr "" + +#. translators: name of the Roman Missal +#: includes/LitCalAPI.php:272 +#, php-format +msgid "Translation data for the sanctorale from %s could not be found." +msgstr "" + +#: includes/LitCalAPI.php:348 includes/LitCalAPI.php:387 #, php-format msgid "%s day before Epiphany" msgstr "" -#: includes/LitCalAPI.php:343 includes/LitCalAPI.php:381 +#: includes/LitCalAPI.php:362 includes/LitCalAPI.php:400 #, php-format msgid "%s day after Epiphany" msgstr "" -#: includes/LitCalAPI.php:533 includes/LitCalAPI.php:549 -#: includes/LitCalAPI.php:575 +#. translators: 1: Festivity name, 2: Festivity date, 3: Requested calendar year, 4: Explicatory string for the transferral (ex. the Saturday preceding Palm Sunday), 5: actual date for the transferral, 6: Decree of the Congregation for Divine Worship +#. translators: 1: Festivity name, 2: Festivity date, 3: Requested calendar year, 4: Explicatory string for the transferral, 5: actual date for the transferral, 6: Decree of the Congregation for Divine Worship +#: includes/LitCalAPI.php:553 includes/LitCalAPI.php:570 +#: includes/LitCalAPI.php:597 #, php-format msgid "" -"The Solemnity '%s' falls on %s in the year %d, the celebration has been " -"transferred to %s (%s) as per the %s." +"The Solemnity '%1$s' falls on %2$s in the year %3$d, the celebration has " +"been transferred to %4$s (%5$s) as per the %6$s." msgstr "" -#: includes/LitCalAPI.php:537 +#: includes/LitCalAPI.php:557 msgid "the Saturday preceding Palm Sunday" msgstr "" -#: includes/LitCalAPI.php:542 includes/LitCalAPI.php:558 -#: includes/LitCalAPI.php:584 includes/LitCalAPI.php:612 -#: includes/LitCalAPI.php:898 includes/LitCalAPI.php:1017 -#: includes/LitCalAPI.php:1073 includes/LitCalAPI.php:1230 -#: includes/LitCalAPI.php:1275 includes/LitCalAPI.php:1302 -#: includes/LitCalAPI.php:1411 includes/LitCalAPI.php:1423 -#: includes/LitCalAPI.php:1438 includes/LitCalAPI.php:1464 -#: includes/FestivityCollection.php:386 +#: includes/LitCalAPI.php:562 includes/LitCalAPI.php:579 +#: includes/LitCalAPI.php:606 includes/LitCalAPI.php:636 +#: includes/LitCalAPI.php:928 includes/LitCalAPI.php:1047 +#: includes/LitCalAPI.php:1103 includes/LitCalAPI.php:1262 +#: includes/LitCalAPI.php:1307 includes/LitCalAPI.php:1334 +#: includes/LitCalAPI.php:1444 includes/LitCalAPI.php:1457 +#: includes/LitCalAPI.php:1472 includes/LitCalAPI.php:1499 +#: includes/FestivityCollection.php:365 msgid "Decree of the Congregation for Divine Worship" msgstr "" -#: includes/LitCalAPI.php:553 +#: includes/LitCalAPI.php:574 msgid "the Monday following the Second Sunday of Easter" msgstr "" -#: includes/LitCalAPI.php:579 +#: includes/LitCalAPI.php:601 msgid "the following Monday" msgstr "" -#: includes/LitCalAPI.php:590 +#. translators: 1: Festivity name, 2: Coinciding Festivity name, 3: Requested calendar year +#: includes/LitCalAPI.php:613 #, php-format msgid "" -"The Solemnity '%s' coincides with the Solemnity '%s' in the year %d. We " -"should ask the Congregation for Divine Worship what to do about this!" +"The Solemnity '%1$s' coincides with the Solemnity '%2$s' in the year %3$d. " +"We should ask the Congregation for Divine Worship what to do about this!" msgstr "" -#: includes/LitCalAPI.php:608 +#. translators: 1: Festivity name, 2: Coinciding Festivity name, 3: Requested calendar year, 4: Decree of the Congregation for Divine Worship +#: includes/LitCalAPI.php:632 #, php-format msgid "" -"Seeing that the Solemnity '%s' coincides with the Solemnity '%s' in the year " -"%d, it has been anticipated by one day as per %s." +"Seeing that the Solemnity '%1$s' coincides with the Solemnity '%2$s' in the " +"year %3$d, it has been anticipated by one day as per %4$s." msgstr "" -#: includes/LitCalAPI.php:676 +#. translators: 1: Festivity name (Christmas), 2: Requested calendar year, 3: Festivity name (Holy Family), 4: New date for Holy Family +#: includes/LitCalAPI.php:701 #, php-format msgid "" -"'%s' falls on a Sunday in the year %d, therefore the Feast '%s' is " -"celebrated on %s rather than on the Sunday after Christmas." +"'%1$s' falls on a Sunday in the year %2$d, therefore the Feast '%3$s' is " +"celebrated on %4$s rather than on the Sunday after Christmas." msgstr "" -#: includes/LitCalAPI.php:710 includes/LitCalAPI.php:734 +#. translators: 1: Festivity name, 2: Superseding Festivity grade, 3: Superseding Festivity name, 4: Requested calendar year +#: includes/LitCalAPI.php:736 includes/LitCalAPI.php:761 #, php-format -msgid "'%s' is superseded by the %s '%s' in the year %d." +msgid "'%1$s' is superseded by the %2$s '%3$s' in the year %4$d." msgstr "" -#: includes/LitCalAPI.php:787 +#: includes/LitCalAPI.php:814 #, php-format msgid "of the %s Week of Advent" msgstr "" -#: includes/LitCalAPI.php:804 +#: includes/LitCalAPI.php:831 #, php-format msgid "%s Day of the Octave of Christmas" msgstr "" -#: includes/LitCalAPI.php:828 +#: includes/LitCalAPI.php:855 #, php-format msgid "of the %s Week of Lent" msgstr "" -#: includes/LitCalAPI.php:833 +#: includes/LitCalAPI.php:860 msgid "after Ash Wednesday" msgstr "" @@ -116,7 +136,7 @@ msgstr "" #. 3. Day of the festivity #. 4. Year from which the festivity has been added #. 5. Source of the information -#. 6. Current year +#. 6. Requested calendar year #. #. translators: #. 1. Grade or rank of the festivity being created @@ -124,17 +144,25 @@ msgstr "" #. 3. Indication of the mobile date for the festivity being created #. 4. Year from which the festivity has been added #. 5. Source of the information -#. 6. Current year +#. 6. Requested calendar year #. -#: includes/LitCalAPI.php:853 includes/LitCalAPI.php:1109 -#: includes/LitCalAPI.php:1286 +#. translators: +#. 1. Grade or rank of the festivity +#. 2. Name of the festivity +#. 3. Day of the festivity +#. 4. Year from which the festivity has been added +#. 5. Source of the information +#. 6. Requested calendar year +#. +#: includes/LitCalAPI.php:880 includes/LitCalAPI.php:1141 +#: includes/LitCalAPI.php:1318 includes/LitCalAPI.php:1840 #, php-format msgid "" "The %1$s '%2$s' has been added on %3$s since the year %4$d (%5$s), " "applicable to the year %6$d." msgstr "" -#: includes/LitCalAPI.php:884 includes/LitCalAPI.php:976 +#: includes/LitCalAPI.php:914 includes/LitCalAPI.php:1006 msgid "" "Vatican Press conference: Presentation of the Editio Typica Tertia of the " "Roman Missal" @@ -143,9 +171,9 @@ msgstr "" #. translators: #. 1. Grade or rank of the festivity #. 2. Name of the festivity -#. 3. Current year +#. 3. Requested calendar year #. -#: includes/LitCalAPI.php:930 +#: includes/LitCalAPI.php:960 #, php-format msgid "" "The %1$s '%2$s' either falls between 17 Dec. and 24 Dec., or during the " @@ -158,14 +186,14 @@ msgstr "" #. 2. Name of the festivity that has been superseded #. 3. Grade or rank of the festivity that is superseding #. 4. Name of the festivity that is superseding -#. 5. Current year +#. 5. Requested calendar year #. -#: includes/LitCalAPI.php:952 +#: includes/LitCalAPI.php:982 #, php-format msgid "The %1$s '%2$s' is superseded by the %3$s '%4$s' in the year %5$d." msgstr "" -#: includes/LitCalAPI.php:972 +#: includes/LitCalAPI.php:1002 msgid "Apostolic Constitution Missale Romanum" msgstr "" @@ -178,9 +206,9 @@ msgstr "" #. 6. Date in which the superseded festivity is usually celebrated #. 7. Grade or rank of the festivity that is superseding #. 8. Name of the festivity that is superseding -#. 9. Current year +#. 9. Requested calendar year #. -#: includes/LitCalAPI.php:994 +#: includes/LitCalAPI.php:1024 #, php-format msgid "" "The %1$s '%2$s', added in the %3$s of the Roman Missal since the year %4$d " @@ -196,9 +224,9 @@ msgstr "" #. 5. Source of the information #. 6. Grade or rank of the superseding festivity #. 7. Name of the superseding festivity -#. 8. Current year +#. 8. Requested calendar year #. -#: includes/LitCalAPI.php:1030 +#: includes/LitCalAPI.php:1060 #, php-format msgid "" "The %1$s '%2$s', added on %3$s since the year %4$d (%5$s), is however " @@ -208,17 +236,17 @@ msgstr "" #. translators: #. 1. Name of the first coinciding Memorial #. 2. Name of the second coinciding Memorial -#. 3. Current year +#. 3. Requested calendar year #. 4. Source of the information #. -#: includes/LitCalAPI.php:1069 +#: includes/LitCalAPI.php:1099 #, php-format msgid "" "The Memorial '%1$s' coincides with another Memorial '%2$s' in the year %3$d. " "They are both reduced in rank to optional memorials (%4$s)." msgstr "" -#: includes/LitCalAPI.php:1088 +#: includes/LitCalAPI.php:1120 msgid "the Monday after Pentecost" msgstr "" @@ -227,10 +255,10 @@ msgstr "" #. 2. Name of the festivity #. 3. New name of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1144 +#: includes/LitCalAPI.php:1176 #, php-format msgid "" "The name of the %1$s '%2$s' has been changed to %3$s since the year %4$d, " @@ -242,10 +270,10 @@ msgstr "" #. 2. Name of the festivity #. 3. New grade of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1166 +#: includes/LitCalAPI.php:1198 #, php-format msgid "" "The %1$s '%2$s' has been raised to the rank of %3$s since the year %4$d, " @@ -257,10 +285,10 @@ msgstr "" #. 2. Name of the festivity #. 3. New grade of the festivity #. 4. Year from which the grade has been changed -#. 5. Current year +#. 5. Requested calendar year #. 6. Source of the information #. -#: includes/LitCalAPI.php:1176 +#: includes/LitCalAPI.php:1208 #, php-format msgid "" "The %1$s '%2$s' has been lowered to the rank of %3$s since the year %4$d, " @@ -270,17 +298,17 @@ msgstr "" #. translators: #. 1. Name of the festivity #. 2. Year in which was declared Doctor -#. 3. Current year +#. 3. Requested calendar year #. 4. Source of the information #. -#: includes/LitCalAPI.php:1210 +#: includes/LitCalAPI.php:1242 #, php-format msgid "" "'%1$s' has been declared a Doctor of the Church since the year %2$d, " "applicable to the year %3$d (%4$s)." msgstr "" -#: includes/LitCalAPI.php:1218 +#: includes/LitCalAPI.php:1250 msgid "and Doctor of the Church" msgstr "" @@ -292,9 +320,9 @@ msgstr "" #. 5. Source of the information #. 6. Grade or rank of superseding festivity #. 7. Name of superseding festivity -#. 8. Current year +#. 8. Requested calendar year #. -#: includes/LitCalAPI.php:1323 +#: includes/LitCalAPI.php:1355 #, php-format msgid "" "The %1$s '%2$s', added on %3$s since the year %4$d (%5$s), is however " @@ -302,7 +330,7 @@ msgid "" msgstr "" #. translators: -#. 1. Current year +#. 1. Requested calendar year #. 2. Grade or rank of suppressed festivity #. 3. Name of suppressed festivity #. 4. Grade or rank of the festivity being created @@ -311,29 +339,31 @@ msgstr "" #. 7. Year from which the festivity has been added #. 8. Source of the information #. -#: includes/LitCalAPI.php:1351 +#: includes/LitCalAPI.php:1383 #, php-format msgid "" "In the year %1$d, the %2$s '%3$s' has been suppressed by the %4$s '%5$s', " "added on %6$s since the year %7$d (%8$s)." msgstr "" -#: includes/LitCalAPI.php:1409 +#. translators: 1: Festivity name, 2: Source of the information, 3: Requested calendar year +#: includes/LitCalAPI.php:1442 #, php-format msgid "" -"The optional memorial '%s' has been transferred from Dec. 12 to Aug. 12 " -"since the year 2002 (%s), applicable to the year %d." +"The optional memorial '%1$s' has been transferred from Dec. 12 to Aug. 12 " +"since the year 2002 (%2$s), applicable to the year %3$d." msgstr "" -#: includes/LitCalAPI.php:1421 +#. translators: 1: Festivity name, 2: Source of the information, 3: Requested calendar year +#: includes/LitCalAPI.php:1455 #, php-format msgid "" -"The optional memorial '%s', which would have been superseded this year by a " -"Sunday or Solemnity were it on Dec. 12, has however been transferred to Aug. " -"12 since the year 2002 (%s), applicable to the year %d." +"The optional memorial '%1$s', which would have been superseded this year by " +"a Sunday or Solemnity were it on Dec. 12, has however been transferred to " +"Aug. 12 since the year 2002 (%2$s), applicable to the year %3$d." msgstr "" -#: includes/LitCalAPI.php:1436 +#: includes/LitCalAPI.php:1470 #, php-format msgid "" "The optional memorial '%1$s' has been transferred from Dec. 12 to Aug. 12 " @@ -341,89 +371,143 @@ msgid "" "superseded by a Sunday, a Solemnity, or a Feast '%4$s' in the year %3$d." msgstr "" -#: includes/LitCalAPI.php:1462 +#. translators: 1: Festivity name, 2: Source of the information +#: includes/LitCalAPI.php:1497 #, php-format msgid "" -"The Feast '%s' would have been suppressed this year ( 2009 ) since it falls " -"on a Sunday, however being the Year of the Apostle Paul, as per the %s it " -"has been reinstated so that local churches can optionally celebrate the " -"memorial." +"The Feast '%1$s' would have been suppressed this year ( 2009 ) since it " +"falls on a Sunday, however being the Year of the Apostle Paul, as per the " +"%2$s it has been reinstated so that local churches can optionally celebrate " +"the memorial." msgstr "" -#: includes/LitCalAPI.php:1486 +#: includes/LitCalAPI.php:1521 #, php-format msgid "of the %s Week of Easter" msgstr "" -#: includes/LitCalAPI.php:1522 includes/LitCalAPI.php:1551 +#: includes/LitCalAPI.php:1557 includes/LitCalAPI.php:1586 #, php-format msgid "of the %s Week of Ordinary Time" msgstr "" -#: includes/LitCalAPI.php:1574 +#: includes/LitCalAPI.php:1609 msgid "Saturday Memorial of the Blessed Virgin Mary" msgstr "" +#: includes/LitCalAPI.php:1634 includes/LitCalAPI.php:1637 +#, php-format +msgid "Error retrieving and decoding Wider Region data from file %s." +msgstr "" + +#: includes/LitCalAPI.php:1644 +#, php-format +msgid "Error retrieving and decoding National data from file %s." +msgstr "" + #. translators: #. 1. Grade of the festivity #. 2. Name of the festivity #. 3. Date on which the festivity is usually celebrated #. 4. Grade of the superseding festivity #. 5. Name of the superseding festivity -#. 6. Current year +#. 6. Requested calendar year #. -#: includes/LitCalAPI.php:1633 +#: includes/LitCalAPI.php:1677 #, php-format msgid "" "The %1$s '%2$s', usually celebrated on %3$s, is suppressed by the %4$s " "'%5$s' in the year %6$d." msgstr "" -#: includes/LitCalAPI.php:1651 -msgctxt "Male singular" -msgid "patron of Europe" +#. translators: +#. 1. Name of the first coinciding Memorial +#. 2. Name of the second coinciding Memorial +#. 3. Requested calendar year +#. 4. Source of the information +#. +#: includes/LitCalAPI.php:1742 +#, php-format +msgid "" +"The Memorial '%1$s' coincides with another Memorial '%2$s' in the year %3$d. " +"They are both reduced in rank to optional memorials." msgstr "" -#: includes/LitCalAPI.php:1652 includes/LitCalAPI.php:1660 -#: includes/LitCalAPI.php:1664 includes/LitCalAPI.php:1683 -msgctxt "Female singular" -msgid "patron of Europe" +#: includes/LitCalAPI.php:1805 +msgid "" +"We should be creating a new festivity, however we do not seem to have the " +"correct date information in order to proceed" msgstr "" -#: includes/LitCalAPI.php:1653 -msgctxt "Male plural" -msgid "patrons of Europe" +#. translators: Name of the Roman Missal +#: includes/LitCalAPI.php:1920 +#, php-format +msgid "Found a sanctorale data file for %s" msgstr "" -#: includes/LitCalAPI.php:1671 -msgid "Saint Teresa Benedicta of the Cross, Virgin and Martyr" +#. translators: +#. 1. Festivity grade +#. 2. Festivity name +#. 3. Festivity date +#. 4. Edition of the Roman Missal +#. 5. Superseding festivity grade +#. 6. Superseding festivity name +#. 7. Requested calendar year +#. +#: includes/LitCalAPI.php:1950 +#, php-format +msgid "" +"The %1$s '%2$s' (%3$s), added to the national calendar in the %4$s, is " +"superseded by the %5$s '%6$s' in the year %7$d" +msgstr "" + +#. translators: Name of the Roman Missal +#: includes/LitCalAPI.php:1965 +#, php-format +msgid "Could not find a sanctorale data file for %s" +msgstr "" + +#. translators: 1. Festivity grade, 2. Festivity name, 3. New festivity name, 4: Requested calendar year, 5. Old date, 6. New date +#: includes/LitCalAPI.php:2057 +#, php-format +msgid "" +"The %1$s '%2$s' is transferred from %5$s to %6$s as per the %7$s, to make " +"room for '%3$s': applicable to the year %4$d." +msgstr "" + +#. translators: 1. Festivity grade, 2. Festivity name, 3. Old date, 4. New date, 5. Source of the information, 6. New festivity name, 7. Superseding festivity grade, 8. Superseding festivity name, 9: Requested calendar year +#: includes/LitCalAPI.php:2076 +#, php-format +msgid "" +"The %1$s '%2$s' would have been transferred from %3$s to %4$s as per the " +"%5$s, to make room for '%6$s', however it is suppressed by the %7$s '%8$s' " +"in the year %9$d." msgstr "" #. translators: when there are multiple possible commons, this will be the glue "or from the common of..." #: includes/LitMessages.php:142 includes/LitMessages.php:153 -#: includes/enums/LitCommon.php:327 +#: includes/enums/LitCommon.php:346 msgid "or" msgstr "" #. translators: in reference to the cycle of liturgical years (A, B, C; I, II) -#: includes/FestivityCollection.php:36 +#: includes/FestivityCollection.php:44 msgid "YEAR" msgstr "" -#: includes/FestivityCollection.php:37 +#: includes/FestivityCollection.php:45 msgid "Vigil Mass" msgstr "" -#: includes/FestivityCollection.php:339 includes/FestivityCollection.php:366 +#: includes/FestivityCollection.php:359 #, php-format msgid "" -"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " -"This last Solemnity takes precedence, therefore it will maintain Vespers II " -"and an evening Mass, while the first Solemnity will not have a Vigil Mass or " -"Vespers I." +"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. As " +"per %s, the first has precedence, therefore the Vigil Mass is confirmed as " +"are I Vespers." msgstr "" -#: includes/FestivityCollection.php:352 includes/FestivityCollection.php:410 +#: includes/FestivityCollection.php:373 #, php-format msgid "" "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " @@ -432,15 +516,16 @@ msgid "" "evening Mass." msgstr "" -#: includes/FestivityCollection.php:380 +#: includes/FestivityCollection.php:383 #, php-format msgid "" -"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. As " -"per %s, the first has precedence, therefore the Vigil Mass is confirmed as " -"are I Vespers." +"The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. " +"This last Solemnity takes precedence, therefore it will maintain Vespers II " +"and an evening Mass, while the first Solemnity will not have a Vigil Mass or " +"Vespers I." msgstr "" -#: includes/FestivityCollection.php:392 +#: includes/FestivityCollection.php:443 #, php-format msgid "" "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. We " @@ -448,27 +533,27 @@ msgid "" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:24 +#: includes/enums/LitColor.php:27 msgid "green" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:27 +#: includes/enums/LitColor.php:30 msgid "purple" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:30 +#: includes/enums/LitColor.php:33 msgid "white" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:33 +#: includes/enums/LitColor.php:36 msgid "red" msgstr "" #. translators: context = liturgical color -#: includes/enums/LitColor.php:36 +#: includes/enums/LitColor.php:39 msgid "pink" msgstr "" @@ -665,7 +750,7 @@ msgctxt "(SING_MASC)" msgid "of" msgstr "" -#: includes/enums/LitCommon.php:323 +#: includes/enums/LitCommon.php:342 msgid "From the Common" msgstr "" @@ -682,27 +767,27 @@ msgstr "" #. translators: liturgical rank. Keep Capitalized #: includes/enums/LitGrade.php:100 msgid "Optional memorial" -msgstr "" +msgstr "Memória opcional" #. translators: liturgical rank. Keep Capitalized #: includes/enums/LitGrade.php:105 msgid "Memorial" -msgstr "" +msgstr "Memória" #. translators: liturgical rank. Keep UPPERCASE #: includes/enums/LitGrade.php:110 msgid "FEAST" -msgstr "" +msgstr "FESTA" #. translators: liturgical rank. Keep UPPERCASE #: includes/enums/LitGrade.php:115 msgid "FEAST OF THE LORD" -msgstr "" +msgstr "FESTA DO SENHOR" #. translators: liturgical rank. Keep UPPERCASE #: includes/enums/LitGrade.php:120 msgid "SOLEMNITY" -msgstr "" +msgstr "SOLENIDADE" #. translators: liturgical rank. Keep lowercase #: includes/enums/LitGrade.php:125 diff --git a/includes/APICore.php b/includes/APICore.php index db1b50b2..b5f7655f 100644 --- a/includes/APICore.php +++ b/includes/APICore.php @@ -113,6 +113,7 @@ public function setResponseContentType( string $responseContentType ) : void { } public function setResponseContentTypeHeader() : void { + header( 'Cache-Control: must-revalidate, max-age=259200' ); //cache for 1 month header( "Content-Type: {$this->ResponseContentType}; charset=utf-8" ); } diff --git a/includes/Festivity.php b/includes/Festivity.php index f9450286..0bf2a253 100644 --- a/includes/Festivity.php +++ b/includes/Festivity.php @@ -2,8 +2,10 @@ ini_set('date.timezone', 'Europe/Vatican'); include_once( 'enums/LitColor.php' ); +include_once( 'enums/LitCommon.php' ); include_once( 'enums/LitFeastType.php' ); include_once( 'enums/LitGrade.php' ); +include_once( 'LitDateTime.php' ); class Festivity implements JsonSerializable { @@ -11,12 +13,12 @@ class Festivity implements JsonSerializable public int $idx; public string $name; - public DateTime $date; - public string $color; + public LitDateTime $date; + public array $color; public string $type; public int $grade; public string $displayGrade; - public string $common; //"Proper" or specified common(s) of saints... + public array $common; //"Proper" or specified common(s) of saints... /** The following properties are not used in construction, they are only set externally */ public ?string $liturgicalYear = null; @@ -26,20 +28,45 @@ class Festivity implements JsonSerializable public ?bool $hasVesperII = null; public ?int $psalterWeek = null; - function __construct(string $name, DateTime $date, string $color = '???', string $type = '???', int $grade = LitGrade::WEEKDAY, string $common = '', string $displayGrade='') + function __construct(string $name, LitDateTime $date, string|array $color = [ '???' ], string $type = '???', int $grade = LitGrade::WEEKDAY, string|array $common = [ '???' ], string $displayGrade='') { $this->idx = self::$eventIdx++; $this->name = $name; $this->date = $date; //DateTime object - $_color = strtolower( $color ); - //the color string can contain multiple colors separated by a pipe character, which correspond with the multiple commons to choose from for that festivity - $this->color = strpos( $_color, "," ) && LitColor::areValid( explode(",", $_color) ) ? $_color : ( LitColor::isValid( $_color ) ? $_color : '???' ); + if( is_array( $color ) ) { + if( LitColor::areValid( $color ) ) { + $this->color = $color; + } + } + else if ( is_string( $color ) ) { + $_color = strtolower( $color ); + //the color string can contain multiple colors separated by a comma, when there are multiple commons to choose from for that festivity + $this->color = strpos( $_color, "," ) && LitColor::areValid( explode(",", $_color) ) ? explode(",", $_color) : ( LitColor::isValid( $_color ) ? [ $_color ] : [ '???' ] ); + } $_type = strtolower( $type ); $this->type = LitFeastType::isValid( $_type ) ? $_type : '???'; $this->grade = $grade >= LitGrade::WEEKDAY && $grade <= LitGrade::HIGHER_SOLEMNITY ? $grade : -1; $this->displayGrade = $displayGrade; - $this->common = $common; + //Festivity::debugWrite( "*** Festivity.php *** common vartype = " . gettype( $common ) ); + if( is_string( $common ) ) { + //Festivity::debugWrite( "*** Festivity.php *** common vartype is string, value = $common" ); + $this->common = LitCommon::areValid( explode(",", $common) ) ? explode(",", $common) : []; + } + else if( is_array( $common ) ) { + //Festivity::debugWrite( "*** Festivity.php *** common vartype is array, value = " . implode( ', ', $common ) ); + if( LitCommon::areValid( $common ) ) { + $this->common = $common; + } else { + //Festivity::debugWrite( "*** Festivity.php *** common values have not passed the validity test!" ); + $this->common = []; + } + } + } + /* + private static function debugWrite( string $string ) { + file_put_contents( "debug.log", $string . PHP_EOL, FILE_APPEND ); } + */ /* * * * * * * * * * * * * * * * * * * * * * * * * * Funzione statica di comparazione @@ -62,7 +89,8 @@ public function jsonSerialize() : mixed { $returnArr = [ 'eventIdx' => $this->idx, 'name' => $this->name, - 'date' => $this->date->format('U'), //serialize the DateTime object as a PHP timestamp + //serialize the DateTime object as a PHP timestamp (seconds since the Unix Epoch) + 'date' => (int) $this->date->format('U'), 'color' => $this->color, 'type' => $this->type, 'grade' => $this->grade, diff --git a/includes/FestivityCollection.php b/includes/FestivityCollection.php index 7ea6ef81..0ea85ae7 100644 --- a/includes/FestivityCollection.php +++ b/includes/FestivityCollection.php @@ -4,6 +4,7 @@ include_once( 'includes/Festivity.php' ); include_once( 'includes/LitMessages.php' ); include_once( 'includes/LitSettings.php' ); +include_once( 'includes/LitDateTime.php' ); class FestivityCollection { @@ -12,10 +13,10 @@ class FestivityCollection { private array $feasts = []; private array $memorials = []; private array $WeekdayAdventChristmasLent = []; - private array $WeekdaysEpiphany = []; - private array $SolemnitiesLordBVM = []; - private array $SundaysAdventLentEaster = []; - private array $T = []; + private array $WeekdaysEpiphany = []; + private array $SolemnitiesLordBVM = []; + private array $SundaysAdventLentEaster = []; + private array $T = []; private IntlDateFormatter $dayOfTheWeek; private LitSettings $LitSettings; private LitGrade $LitGrade; @@ -24,7 +25,14 @@ class FestivityCollection { public function __construct( LitSettings $LitSettings ) { $this->LitSettings = $LitSettings; - $this->dayOfTheWeek = IntlDateFormatter::create( strtolower( $this->LitSettings->Locale ), IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'UTC', IntlDateFormatter::GREGORIAN, "EEEE" ); + $this->dayOfTheWeek = IntlDateFormatter::create( + strtolower( $this->LitSettings->Locale ), + IntlDateFormatter::FULL, + IntlDateFormatter::NONE, + 'UTC', + IntlDateFormatter::GREGORIAN, + "EEEE" + ); if( $this->LitSettings->Locale === LitLocale::LATIN ) { $this->T = [ "YEAR" => "ANNUM", @@ -40,11 +48,11 @@ public function __construct( LitSettings $LitSettings ) { $this->LitGrade = new LitGrade( $this->LitSettings->Locale ); } - private static function DateIsSunday( DateTime $dt ) : bool { + public static function DateIsSunday( DateTime $dt ) : bool { return (int)$dt->format( 'N' ) === 7; } - private static function DateIsNotSunday( DateTime $dt ) : bool { + public static function DateIsNotSunday( DateTime $dt ) : bool { return (int)$dt->format( 'N' ) !== 7; } @@ -98,11 +106,11 @@ public function getCalEventsFromDate( DateTime $date ) : array { return array_filter( $this->festivities, function( $el ) use ( $date ) { return $el->date == $date; } ); } - public function isSolemnityLordBVM( string $key ) { + public function isSolemnityLordBVM( string $key ) : bool { return in_array( $key, $this->SolemnitiesLordBVM ); } - public function isSundayAdventLentEaster( DateTime $date ) { + public function isSundayAdventLentEaster( DateTime $date ) : bool { return in_array( $date, $this->SundaysAdventLentEaster ); } @@ -110,22 +118,42 @@ public function inSolemnities( DateTime $date ) : bool { return in_array( $date, $this->solemnities ); } + public function notInSolemnities( DateTime $date ) : bool { + return !$this->inSolemnities( $date ); + } + public function inFeasts( DateTime $date ) : bool { return in_array( $date, $this->feasts ); } + public function notInFeasts( DateTime $date ) : bool { + return !$this->inFeasts( $date ); + } + public function inSolemnitiesOrFeasts( DateTime $date ) : bool { return $this->inSolemnities( $date ) || $this->inFeasts( $date ); } + public function notInSolemnitiesOrFeasts( DateTime $date ) : bool { + return !$this->inSolemnitiesOrFeasts( $date ); + } + public function inMemorials( DateTime $date ) : bool { return in_array( $date, $this->memorials ); } + public function notInMemorials( DateTime $date ) : bool { + return !$this->inMemorials( $date ); + } + public function inFeastsOrMemorials( DateTime $date ) : bool { return $this->inFeasts( $date ) || $this->inMemorials( $date ); } + public function notInFeastsOrMemorials( DateTime $date ) : bool { + return !$this->inFeastsOrMemorials( $date ); + } + public function inSolemnitiesFeastsOrMemorials( DateTime $date ) : bool { return $this->inSolemnities( $date ) || $this->inFeastsOrMemorials( $date ); } @@ -221,7 +249,7 @@ private function handleGradeProperty( string $key, int $value, int $oldValue ) : } public function setProperty( string $key, string $property, string|int|bool $value ) : bool { - $reflect = new ReflectionClass( new Festivity("test", new DateTime('NOW')) ); + $reflect = new ReflectionClass( new Festivity("test", new LitDateTime('NOW')) ); if( array_key_exists( $key, $this->festivities ) ) { $oldValue = $this->festivities[ $key ]->{$property}; if( $reflect->hasProperty( $property ) ) { @@ -275,6 +303,94 @@ public function setCyclesAndVigils() { } } + private function festivityCanHaveVigil( Festivity|stdClass $festivity, ?string $key = null ) : bool { + if( $festivity instanceof Festivity ) { + return ( + false === ( $key === 'AllSouls' ) + && false === ( $key === 'AshWednesday' ) + && false === ( $festivity->date > $this->festivities[ "PalmSun" ]->date && $festivity->date < $this->festivities[ "Easter" ]->date ) + && false === ( $festivity->date > $this->festivities[ "Easter" ]->date && $festivity->date < $this->festivities[ "Easter2" ]->date ) + ); + } + else if( $festivity instanceof stdClass ) { + return ( + false === ( $festivity->event->date > $this->festivities[ "PalmSun" ]->date && $festivity->event->date < $this->festivities[ "Easter" ]->date ) + && false === ( $festivity->event->date > $this->festivities[ "Easter" ]->date && $festivity->event->date < $this->festivities[ "Easter2" ]->date ) + ); + } + } + + private function createVigilMass( string $key, Festivity $festivity, DateTime $VigilDate ) : void { + $this->festivities[ $key . "_vigil" ] = new Festivity( + $festivity->name . " " . $this->T[ "Vigil Mass" ], + $VigilDate, + $festivity->color, + $festivity->type, + $festivity->grade, + $festivity->common + ); + $this->festivities[ $key ]->hasVigilMass = true; + $this->festivities[ $key ]->hasVesperI = true; + $this->festivities[ $key ]->hasVesperII = true; + $this->festivities[ $key . "_vigil" ]->isVigilMass = true; + $this->festivities[ $key . "_vigil" ]->liturgicalYear = $this->festivities[ $key ]->liturgicalYear; + } + + private function coincidingFestivityTakesPrecedenceOverVigil( string $key, Festivity $festivity, stdClass $coincidingFestivity ) : bool { + return ( + $festivity->grade < $coincidingFestivity->event->grade || + ( $this->isSolemnityLordBVM( $coincidingFestivity->key ) && !$this->isSolemnityLordBVM( $key ) ) + ); + } + + private function vigilTakesPrecedenceOverCoincidingFestivity( string $key, Festivity $festivity, stdClass $coincidingFestivity ) : bool { + return ( + $festivity->grade > $coincidingFestivity->event->grade || + ( $this->isSolemnityLordBVM( $key ) && !$this->isSolemnityLordBVM( $coincidingFestivity->key ) ) + ); + } + + private function handleVigilFestivityCoincidence( string $key, Festivity $festivity, string $festivityGrade, stdClass $coincidingFestivity, bool|string $vigilTakesPrecedence ) : void { + if( gettype($vigilTakesPrecedence) === "string" && $vigilTakesPrecedence === "YEAR2022" ) { + $festivity->hasVigilMass = true; + $festivity->hasVesperI = true; + $coincidingFestivity->event->hasVesperII = false; + $this->Messages[] = 'IMPORTANT ' . sprintf( + _( "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. As per %s, the first has precedence, therefore the Vigil Mass is confirmed as are I Vespers." ), + $festivityGrade, + $festivity->name, + $coincidingFestivity->grade, + $coincidingFestivity->event->name, + $this->LitSettings->Year, + '' . _( "Decree of the Congregation for Divine Worship" ) . '' + ); + } else { + $festivity->hasVigilMass = $vigilTakesPrecedence; + $festivity->hasVesperI = $vigilTakesPrecedence; + $coincidingFestivity->event->hasVesperII = !$vigilTakesPrecedence; + if( $vigilTakesPrecedence ) { + $this->Messages[] = 'IMPORTANT ' . sprintf( + _( "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. Since the first Solemnity has precedence, it will have Vespers I and a vigil Mass, whereas the last Solemnity will not have either Vespers II or an evening Mass." ), + $festivityGrade, + $festivity->name, + $coincidingFestivity->grade, + $coincidingFestivity->event->name, + $this->LitSettings->Year + ); + } else { + unset( $this->festivities[ $key . "_vigil" ] ); + $this->Messages[] = 'IMPORTANT ' . sprintf( + _( "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. This last Solemnity takes precedence, therefore it will maintain Vespers II and an evening Mass, while the first Solemnity will not have a Vigil Mass or Vespers I." ), + $festivityGrade, + $festivity->name, + $coincidingFestivity->grade, + $coincidingFestivity->event->name, + $this->LitSettings->Year + ); + } + } + } + private function calculateVigilMass( string $key, Festivity $festivity ) { //Let's calculate Vigil Masses while we're at it @@ -295,25 +411,8 @@ private function calculateVigilMass( string $key, Festivity $festivity ) { //conditions for which the festivity SHOULD have a vigil if( self::DateIsSunday( $festivity->date ) || true === ( $festivity->grade >= LitGrade::SOLEMNITY ) ){ //filter out cases in which the festivity should NOT have a vigil - if( - false === ( $key === 'AllSouls' ) - && false === ( $key === 'AshWednesday' ) - && false === ( $festivity->date > $this->festivities[ "PalmSun" ]->date && $festivity->date < $this->festivities[ "Easter" ]->date ) - && false === ( $festivity->date > $this->festivities[ "Easter" ]->date && $festivity->date < $this->festivities[ "Easter2" ]->date ) - ){ - $this->festivities[ $key . "_vigil" ] = new Festivity( - $festivity->name . " " . $this->T[ "Vigil Mass" ], - $VigilDate, - $festivity->color, - $festivity->type, - $festivity->grade, - $festivity->common - ); - $this->festivities[ $key ]->hasVigilMass = true; - $this->festivities[ $key ]->hasVesperI = true; - $this->festivities[ $key ]->hasVesperII = true; - $this->festivities[ $key . "_vigil" ]->isVigilMass = true; - $this->festivities[ $key . "_vigil" ]->liturgicalYear = $this->festivities[ $key ]->liturgicalYear; + if( $this->festivityCanHaveVigil( $festivity, $key ) ) { + $this->createVigilMass( $key, $festivity, $VigilDate ); //if however the Vigil coincides with another Solemnity let's make a note of it! if( $this->inSolemnities( $VigilDate ) ) { $coincidingFestivity = new stdClass(); @@ -329,85 +428,19 @@ private function calculateVigilMass( string $key, Festivity $festivity ) { } //suppress warning messages for known situations, like the Octave of Easter - if( $festivity->grade !== LitGrade::HIGHER_SOLEMNITY ){ - if( $festivity->grade < $coincidingFestivity->event->grade ){ - $festivity->hasVigilMass = false; - $festivity->hasVesperI = false; - $coincidingFestivity->event->hasVesperII = true; - unset( $this->festivities[ $key . "_vigil" ] ); - $this->Messages[] = 'IMPORTANT ' . sprintf( - _( "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. This last Solemnity takes precedence, therefore it will maintain Vespers II and an evening Mass, while the first Solemnity will not have a Vigil Mass or Vespers I." ), - $festivityGrade, - $festivity->name, - $coincidingFestivity->grade, - $coincidingFestivity->event->name, - $this->LitSettings->Year - ); + if( $festivity->grade !== LitGrade::HIGHER_SOLEMNITY ) { + if( $this->coincidingFestivityTakesPrecedenceOverVigil( $key, $festivity, $coincidingFestivity ) ) { + $this->handleVigilFestivityCoincidence( $key, $festivity, $festivityGrade, $coincidingFestivity, false ); } - else if( $festivity->grade > $coincidingFestivity->event->grade || ( $this->isSolemnityLordBVM( $key ) && !$this->isSolemnityLordBVM( $coincidingFestivity->key ) ) ) { - $festivity->hasVigilMass = true; - $festivity->hasVesperI = true; - $coincidingFestivity->event->hasVesperII = false; - $this->Messages[] = 'IMPORTANT ' . sprintf( - _( "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. Since the first Solemnity has precedence, it will have Vespers I and a vigil Mass, whereas the last Solemnity will not have either Vespers II or an evening Mass." ), - $festivityGrade, - $festivity->name, - $coincidingFestivity->grade, - $coincidingFestivity->event->name, - $this->LitSettings->Year - ); + else if( $this->vigilTakesPrecedenceOverCoincidingFestivity( $key, $festivity, $coincidingFestivity ) ) { + $this->handleVigilFestivityCoincidence( $key, $festivity, $festivityGrade, $coincidingFestivity, true ); } - else if( $this->isSolemnityLordBVM( $coincidingFestivity->key ) && !$this->isSolemnityLordBVM( $key ) ){ - $coincidingFestivity->event->hasVesperII = true; - $festivity->hasVesperI = false; - $festivity->hasVigilMass = false; - unset( $this->festivities[ $key . "_vigil" ] ); - $this->Messages[] = 'IMPORTANT ' . sprintf( - _( "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. This last Solemnity takes precedence, therefore it will maintain Vespers II and an evening Mass, while the first Solemnity will not have a Vigil Mass or Vespers I." ), - $festivityGrade, - $festivity->name, - $coincidingFestivity->grade, - $coincidingFestivity->event->name, - $this->LitSettings->Year - ); - } else { - if( $this->LitSettings->Year === 2022 ){ - if( $key === 'SacredHeart' || $key === 'Lent3' || $key === 'Assumption' ){ - $coincidingFestivity->event->hasVesperII = false; - $festivity->hasVesperI = true; - $festivity->hasVigilMass = true; - $this->Messages[] = 'IMPORTANT ' . sprintf( - _( "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. As per %s, the first has precedence, therefore the Vigil Mass is confirmed as are I Vespers." ), - $festivityGrade, - $festivity->name, - $coincidingFestivity->grade, - $coincidingFestivity->event->name, - $this->LitSettings->Year, - '' . _( "Decree of the Congregation for Divine Worship" ) . '' - ); - } - } - else { - $this->Messages[] = 'IMPORTANT ' . sprintf( - _( "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. We should ask the Congregation for Divine Worship what to do about this!" ), - $festivityGrade, - $festivity->name, - $coincidingFestivity->grade, - $coincidingFestivity->event->name, - $this->LitSettings->Year - ); - } + else if ( $this->LitSettings->Year === 2022 && ( $key === 'SacredHeart' || $key === 'Lent3' || $key === 'Assumption' ) ) { + $this->handleVigilFestivityCoincidence( $key, $festivity, $festivityGrade, $coincidingFestivity, "YEAR2022" ); } - } else { - if( - //false === ( $key === 'AllSouls' ) - //&& false === ( $key === 'AshWednesday' ) - false === ( $coincidingFestivity->event->date > $this->festivities[ "PalmSun" ]->date && $coincidingFestivity->event->date < $this->festivities[ "Easter" ]->date ) - && false === ( $coincidingFestivity->event->date > $this->festivities[ "Easter" ]->date && $coincidingFestivity->event->date < $this->festivities[ "Easter2" ]->date ) - ){ - + else { $this->Messages[] = 'IMPORTANT ' . sprintf( - _( "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. Since the first Solemnity has precedence, it will have Vespers I and a vigil Mass, whereas the last Solemnity will not have either Vespers II or an evening Mass." ), + _( "The Vigil Mass for the %s '%s' coincides with the %s '%s' in the year %d. We should ask the Congregation for Divine Worship what to do about this!" ), $festivityGrade, $festivity->name, $coincidingFestivity->grade, @@ -416,6 +449,9 @@ private function calculateVigilMass( string $key, Festivity $festivity ) { ); } } + else if ( $this->festivityCanHaveVigil( $coincidingFestivity, null ) ) { + $this->handleVigilFestivityCoincidence( $key, $festivity, $festivityGrade, $coincidingFestivity, true ); + } } } else { $this->festivities[ $key ]->hasVigilMass = false; diff --git a/includes/LitCalAPI.php b/includes/LitCalAPI.php index 0904969a..d2640d8c 100644 --- a/includes/LitCalAPI.php +++ b/includes/LitCalAPI.php @@ -17,11 +17,12 @@ include_once( "includes/LitSettings.php" ); include_once( "includes/LitFunc.php" ); include_once( "includes/LitMessages.php" ); +include_once( "includes/LitDateTime.php" ); include_once( "includes/pgettext.php" ); class LitCalAPI { - const API_VERSION = '3.3'; + const API_VERSION = '3.4'; public APICore $APICore; private string $CacheDuration = ""; @@ -32,6 +33,8 @@ class LitCalAPI { private LitGrade $LitGrade; private ?object $DiocesanData = null; + private ?object $NationalData = null; + private ?object $WiderRegionData = null; private ?object $GeneralIndex = null; private NumberFormatter $formatter; private NumberFormatter $formatterFem; @@ -50,6 +53,10 @@ public function __construct(){ $this->CacheDuration = "_" . CacheDuration::MONTH . date( "m" ); } + private static function debugWrite( string $string ) { + file_put_contents( "debug.log", $string . PHP_EOL, FILE_APPEND ); + } + private function initParameterData() { if ( $this->APICore->getRequestContentType() === RequestContentType::JSON ) { $json = file_get_contents( 'php://input' ); @@ -172,7 +179,7 @@ private function updateSettingsBasedOnDiocesanCalendar() : void { } - private function loadLocalCalendarData() : void { + private function loadDiocesanCalendarData() : void { if( $this->LitSettings->DiocesanCalendar !== null ){ //since a Diocesan calendar is being requested, we need to retrieve the JSON data //first we need to discover the path, so let's retrieve our index file @@ -220,14 +227,14 @@ private function dieIfBeforeMinYear() : void { //with the Prima Editio Typica of the Roman Missal and the General Norms promulgated with the Motu Proprio "Mysterii Paschali" in 1969 if ( $this->LitSettings->Year < 1970 ) { $this->Messages[] = sprintf( _( "Only years from 1970 and after are supported. You tried requesting the year %d." ), $this->LitSettings->Year ); - $this->GenerateResponseToRequest(); + $this->GenerateResponse(); } } /** * Retrieve Higher Ranking Solemnities from Proprium de Tempore */ - private function populatePropriumDeTempore() : void { + private function loadPropriumDeTemporeData() : void { $propriumdetemporeFile = strtolower( "data/propriumdetempore/{$this->LitSettings->Locale}.json" ); if( file_exists( $propriumdetemporeFile ) ) { $PropriumDeTempore = json_decode( file_get_contents( $propriumdetemporeFile ), true ); @@ -241,7 +248,7 @@ private function populatePropriumDeTempore() : void { } } - private function readPropriumDeSanctisJSONData( string $missal ) : void { + private function loadPropriumDeSanctisData( string $missal ) : void { $propriumdesanctisFile = RomanMissal::getSanctoraleFileName( $missal ); $propriumdesanctisI18nPath = RomanMissal::getSanctoraleI18nFilePath( $missal ); @@ -252,7 +259,19 @@ private function readPropriumDeSanctisJSONData( string $missal ) : void { if( json_last_error() !== JSON_ERROR_NONE ) { die( '{"ERROR": "There was an error trying to retrieve and decode JSON i18n data for the Proprium de Sanctis for the Missal ' . RomanMissal::getName( $missal ) . ': ' . json_last_error_msg() . '"}' ); } + } else { + $this->Messages[] = sprintf( + /**translators: name of the Roman Missal */ + _( 'Data for the sanctorale from %s could not be found.' ), + RomanMissal::getName( $missal ) + ); } + } else { + $this->Messages[] = sprintf( + /**translators: name of the Roman Missal */ + _( 'Translation data for the sanctorale from %s could not be found.' ), + RomanMissal::getName( $missal ) + ); } if( file_exists( $propriumdesanctisFile ) ) { @@ -271,7 +290,7 @@ private function readPropriumDeSanctisJSONData( string $missal ) : void { } } - private function readMemorialsFromDecreesJSONData() : void { + private function loadMemorialsFromDecreesData() : void { $memorialsFromDecreesFile = "data/memorialsFromDecrees/memorialsFromDecrees.json"; $memorialsFromDecreesI18nPath = "data/memorialsFromDecrees/i18n/"; $memorialsFromDecreesI18nFile = $memorialsFromDecreesI18nPath . strtolower( $this->LitSettings->Locale ) . ".json"; @@ -313,13 +332,13 @@ private function calculateEasterTriduum() : void { } private function calculateEpiphanyJan6() : void { - $Epiphany = new Festivity( $this->PropriumDeTempore[ "Epiphany" ][ "NAME" ], DateTime::createFromFormat( '!j-n-Y', '6-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ), LitColor::WHITE, LitFeastType::FIXED, LitGrade::HIGHER_SOLEMNITY ); + $Epiphany = new Festivity( $this->PropriumDeTempore[ "Epiphany" ][ "NAME" ], LitDateTime::createFromFormat( '!j-n-Y', '6-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ), LitColor::WHITE, LitFeastType::FIXED, LitGrade::HIGHER_SOLEMNITY ); $this->Cal->addFestivity( "Epiphany", $Epiphany ); //If a Sunday occurs on a day from Jan. 2 through Jan. 5, it is called the "Second Sunday of Christmas" //Weekdays from Jan. 2 through Jan. 5 are called "*day before Epiphany" $nth = 0; for ( $i = 2; $i <= 5; $i++ ) { - $dateTime = DateTime::createFromFormat( '!j-n-Y', $i . '-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $dateTime = LitDateTime::createFromFormat( '!j-n-Y', $i . '-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); if ( self::DateIsSunday( $dateTime ) ) { $Christmas2 = new Festivity( $this->PropriumDeTempore[ "Christmas2" ][ "NAME" ], $dateTime, LitColor::WHITE, LitFeastType::MOBILE, LitGrade::FEAST_LORD ); $this->Cal->addFestivity( "Christmas2", $Christmas2 ); @@ -333,13 +352,13 @@ private function calculateEpiphanyJan6() : void { } //Weekdays from Jan. 7 until the following Sunday are called "*day after Epiphany" - $SundayAfterEpiphany = (int)DateTime::createFromFormat( '!j-n-Y', '6-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'next Sunday' )->format( 'j' ); + $SundayAfterEpiphany = (int)LitDateTime::createFromFormat( '!j-n-Y', '6-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'next Sunday' )->format( 'j' ); if ( $SundayAfterEpiphany !== 7 ) { //this means January 7th, it does not refer to the day of the week which is obviously Sunday in this case $nth = 0; for ( $i = 7; $i < $SundayAfterEpiphany; $i++ ) { $nth++; $nthStr = $this->LitSettings->Locale === LitLocale::LATIN ? LitMessages::LATIN_ORDINAL[ $nth ] : $this->formatter->format( $nth ); - $dateTime = DateTime::createFromFormat( '!j-n-Y', $i . '-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $dateTime = LitDateTime::createFromFormat( '!j-n-Y', $i . '-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); $name = $this->LitSettings->Locale === LitLocale::LATIN ? sprintf( "Dies %s post Epiphaniam", $nthStr ) : sprintf( _( "%s day after Epiphany" ), ucfirst( $nthStr ) ); $festivity = new Festivity( $name, $dateTime, LitColor::WHITE, LitFeastType::MOBILE ); $this->Cal->addFestivity( "DayAfterEpiphany" . $nth, $festivity ); @@ -349,7 +368,7 @@ private function calculateEpiphanyJan6() : void { private function calculateEpiphanySunday() : void { //If January 2nd is a Sunday, then go with Jan 2nd - $dateTime = DateTime::createFromFormat( '!j-n-Y', '2-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $dateTime = LitDateTime::createFromFormat( '!j-n-Y', '2-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); if ( self::DateIsSunday( $dateTime ) ) { $Epiphany = new Festivity( $this->PropriumDeTempore[ "Epiphany" ][ "NAME" ], $dateTime, LitColor::WHITE, LitFeastType::MOBILE, LitGrade::HIGHER_SOLEMNITY ); $this->Cal->addFestivity( "Epiphany", $Epiphany ); @@ -366,20 +385,20 @@ private function calculateEpiphanySunday() : void { $nth++; $nthStr = $this->LitSettings->Locale === LitLocale::LATIN ? LitMessages::LATIN_ORDINAL[ $nth ] : $this->formatter->format( $nth ); $name = $this->LitSettings->Locale === LitLocale::LATIN ? sprintf( "Dies %s ante Epiphaniam", $nthStr ) : sprintf( _( "%s day before Epiphany" ), ucfirst( $nthStr ) ); - $dateTime = DateTime::createFromFormat( '!j-n-Y', $i . '-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $dateTime = LitDateTime::createFromFormat( '!j-n-Y', $i . '-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); $festivity = new Festivity( $name, $dateTime, LitColor::WHITE, LitFeastType::MOBILE ); $this->Cal->addFestivity( "DayBeforeEpiphany" . $nth, $festivity ); } //If Epiphany occurs on or before Jan. 6, then the days of the week following Epiphany are called "*day after Epiphany" and the Sunday following Epiphany is the Baptism of the Lord. if ( $DayOfEpiphany < 7 ) { - $SundayAfterEpiphany = (int)DateTime::createFromFormat( '!j-n-Y', '2-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'next Sunday' )->modify( 'next Sunday' )->format( 'j' ); + $SundayAfterEpiphany = (int)LitDateTime::createFromFormat( '!j-n-Y', '2-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'next Sunday' )->modify( 'next Sunday' )->format( 'j' ); $nth = 0; for ( $i = $DayOfEpiphany + 1; $i < $SundayAfterEpiphany; $i++ ) { $nth++; $nthStr = $this->LitSettings->Locale === LitLocale::LATIN ? LitMessages::LATIN_ORDINAL[ $nth ] : $this->formatter->format( $nth ); $name = $this->LitSettings->Locale === LitLocale::LATIN ? sprintf( "Dies %s post Epiphaniam", $nthStr ) : sprintf( _( "%s day after Epiphany" ), ucfirst( $nthStr ) ); - $dateTime = DateTime::createFromFormat( '!j-n-Y', $i . '-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $dateTime = LitDateTime::createFromFormat( '!j-n-Y', $i . '-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); $festivity = new Festivity( $name, $dateTime, LitColor::WHITE, LitFeastType::MOBILE ); $this->Cal->addFestivity( "DayAfterEpiphany" . $nth, $festivity ); } @@ -390,7 +409,7 @@ private function calculateEpiphanySunday() : void { private function calculateChristmasEpiphany() : void { $Christmas = new Festivity( $this->PropriumDeTempore[ "Christmas" ][ "NAME" ], - DateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ), + LitDateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ), LitColor::WHITE, LitFeastType::FIXED, LitGrade::HIGHER_SOLEMNITY @@ -421,10 +440,10 @@ private function calculateAscensionPentecost() : void { } private function calculateSundaysMajorSeasons() : void { - $this->Cal->addFestivity( "Advent1", new Festivity( $this->PropriumDeTempore[ "Advent1" ][ "NAME" ], DateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' )->sub( new DateInterval( 'P' . ( 3 * 7 ) . 'D' ) ), LitColor::PURPLE, LitFeastType::MOBILE, LitGrade::HIGHER_SOLEMNITY ) ); - $this->Cal->addFestivity( "Advent2", new Festivity( $this->PropriumDeTempore[ "Advent2" ][ "NAME" ], DateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' )->sub( new DateInterval( 'P' . ( 2 * 7 ) . 'D' ) ), LitColor::PURPLE, LitFeastType::MOBILE, LitGrade::HIGHER_SOLEMNITY ) ); - $this->Cal->addFestivity( "Advent3", new Festivity( $this->PropriumDeTempore[ "Advent3" ][ "NAME" ], DateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' )->sub( new DateInterval( 'P7D' ) ), LitColor::PINK, LitFeastType::MOBILE, LitGrade::HIGHER_SOLEMNITY ) ); - $this->Cal->addFestivity( "Advent4", new Festivity( $this->PropriumDeTempore[ "Advent4" ][ "NAME" ], DateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' ), LitColor::PURPLE, LitFeastType::MOBILE, LitGrade::HIGHER_SOLEMNITY ) ); + $this->Cal->addFestivity( "Advent1", new Festivity( $this->PropriumDeTempore[ "Advent1" ][ "NAME" ], LitDateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' )->sub( new DateInterval( 'P' . ( 3 * 7 ) . 'D' ) ), LitColor::PURPLE, LitFeastType::MOBILE, LitGrade::HIGHER_SOLEMNITY ) ); + $this->Cal->addFestivity( "Advent2", new Festivity( $this->PropriumDeTempore[ "Advent2" ][ "NAME" ], LitDateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' )->sub( new DateInterval( 'P' . ( 2 * 7 ) . 'D' ) ), LitColor::PURPLE, LitFeastType::MOBILE, LitGrade::HIGHER_SOLEMNITY ) ); + $this->Cal->addFestivity( "Advent3", new Festivity( $this->PropriumDeTempore[ "Advent3" ][ "NAME" ], LitDateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' )->sub( new DateInterval( 'P7D' ) ), LitColor::PINK, LitFeastType::MOBILE, LitGrade::HIGHER_SOLEMNITY ) ); + $this->Cal->addFestivity( "Advent4", new Festivity( $this->PropriumDeTempore[ "Advent4" ][ "NAME" ], LitDateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' ), LitColor::PURPLE, LitFeastType::MOBILE, LitGrade::HIGHER_SOLEMNITY ) ); $this->Cal->addFestivity( "Lent1", new Festivity( $this->PropriumDeTempore[ "Lent1" ][ "NAME" ], LitFunc::calcGregEaster( $this->LitSettings->Year )->sub( new DateInterval( 'P' . ( 6 * 7 ) . 'D' ) ), LitColor::PURPLE, LitFeastType::MOBILE, LitGrade::HIGHER_SOLEMNITY ) ); $this->Cal->addFestivity( "Lent2", new Festivity( $this->PropriumDeTempore[ "Lent2" ][ "NAME" ], LitFunc::calcGregEaster( $this->LitSettings->Year )->sub( new DateInterval( 'P' . ( 5 * 7 ) . 'D' ) ), LitColor::PURPLE, LitFeastType::MOBILE, LitGrade::HIGHER_SOLEMNITY ) ); $this->Cal->addFestivity( "Lent3", new Festivity( $this->PropriumDeTempore[ "Lent3" ][ "NAME" ], LitFunc::calcGregEaster( $this->LitSettings->Year )->sub( new DateInterval( 'P' . ( 4 * 7 ) . 'D' ) ), LitColor::PURPLE, LitFeastType::MOBILE, LitGrade::HIGHER_SOLEMNITY ) ); @@ -484,20 +503,20 @@ private function calculateMobileSolemnitiesOfTheLord() : void { $this->Cal->addFestivity( "SacredHeart", $SacredHeart ); //Christ the King is calculated backwards from the first sunday of advent - $ChristKing = new Festivity( $this->PropriumDeTempore[ "ChristKing" ][ "NAME" ], DateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' )->sub( new DateInterval( 'P' . ( 4 * 7 ) . 'D' ) ), LitColor::RED, LitFeastType::MOBILE, LitGrade::SOLEMNITY ); + $ChristKing = new Festivity( $this->PropriumDeTempore[ "ChristKing" ][ "NAME" ], LitDateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' )->sub( new DateInterval( 'P' . ( 4 * 7 ) . 'D' ) ), LitColor::RED, LitFeastType::MOBILE, LitGrade::SOLEMNITY ); $this->Cal->addFestivity( "ChristKing", $ChristKing ); } private function calculateFixedSolemnities() : void { //even though Mary Mother of God is a fixed date solemnity, however it is found in the Proprium de Tempore and not in the Proprium de Sanctis - $MotherGod = new Festivity( $this->PropriumDeTempore[ "MotherGod" ][ "NAME" ], DateTime::createFromFormat( '!j-n-Y', '1-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ), LitColor::WHITE, LitFeastType::FIXED, LitGrade::SOLEMNITY ); + $MotherGod = new Festivity( $this->PropriumDeTempore[ "MotherGod" ][ "NAME" ], LitDateTime::createFromFormat( '!j-n-Y', '1-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ), LitColor::WHITE, LitFeastType::FIXED, LitGrade::SOLEMNITY ); $this->Cal->addFestivity( "MotherGod", $MotherGod ); $tempCalSolemnities = array_filter( $this->tempCal[ RomanMissal::EDITIO_TYPICA_1970 ], function( $el ){ return $el->GRADE === LitGrade::SOLEMNITY; } ); foreach( $tempCalSolemnities as $row ) { - $currentFeastDate = DateTime::createFromFormat( '!j-n-Y', $row->DAY . '-' . $row->MONTH . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $currentFeastDate = LitDateTime::createFromFormat( '!j-n-Y', $row->DAY . '-' . $row->MONTH . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); $tempFestivity = new Festivity( $row->NAME, $currentFeastDate, $row->COLOR, LitFeastType::FIXED, $row->GRADE, $row->COMMON ); - + //LitCalAPI::debugWrite( "adding new fixed solemnity '$row->NAME', common vartype = " . gettype( $row->COMMON ) . ", common = " . implode(', ', $row->COMMON) ); //A Solemnity impeded in any given year is transferred to the nearest day following designated in nn. 1-8 of the Tables given above ( LY 60 ) //However if a solemnity is impeded by a Sunday of Advent, Lent or Easter Time, the solemnity is transferred to the Monday following, //or to the nearest free day, as laid down by the General Norms. @@ -530,7 +549,8 @@ private function calculateFixedSolemnities() : void { if( $row->TAG === "StJoseph" && $currentFeastDate >= $this->Cal->getFestivity("PalmSun")->date && $currentFeastDate <= $this->Cal->getFestivity("Easter")->date ){ $tempFestivity->date = LitFunc::calcGregEaster( $this->LitSettings->Year )->sub( new DateInterval( 'P8D' ) ); $this->Messages[] = sprintf( - _( "The Solemnity '%s' falls on %s in the year %d, the celebration has been transferred to %s (%s) as per the %s." ), + /**translators: 1: Festivity name, 2: Festivity date, 3: Requested calendar year, 4: Explicatory string for the transferral (ex. the Saturday preceding Palm Sunday), 5: actual date for the transferral, 6: Decree of the Congregation for Divine Worship */ + _( 'The Solemnity \'%1$s\' falls on %2$s in the year %3$d, the celebration has been transferred to %4$s (%5$s) as per the %6$s.' ), $tempFestivity->name, $this->Cal->solemnityFromDate( $currentFeastDate )->name, $this->LitSettings->Year, @@ -546,7 +566,8 @@ private function calculateFixedSolemnities() : void { //if the Annunciation falls during Holy Week or within the Octave of Easter, it is transferred to the Monday after the Second Sunday of Easter. $tempFestivity->date = LitFunc::calcGregEaster( $this->LitSettings->Year )->add( new DateInterval( 'P8D' ) ); $this->Messages[] = sprintf( - _( "The Solemnity '%s' falls on %s in the year %d, the celebration has been transferred to %s (%s) as per the %s." ), + /**translators: 1: Festivity name, 2: Festivity date, 3: Requested calendar year, 4: Explicatory string for the transferral (ex. the Saturday preceding Palm Sunday), 5: actual date for the transferral, 6: Decree of the Congregation for Divine Worship */ + _( 'The Solemnity \'%1$s\' falls on %2$s in the year %3$d, the celebration has been transferred to %4$s (%5$s) as per the %6$s.' ), $tempFestivity->name, $this->Cal->solemnityFromDate( $currentFeastDate )->name, $this->LitSettings->Year, @@ -572,7 +593,8 @@ private function calculateFixedSolemnities() : void { $tempFestivity->date = clone( $currentFeastDate ); $tempFestivity->date->add( new DateInterval( 'P1D' ) ); $this->Messages[] = sprintf( - _( "The Solemnity '%s' falls on %s in the year %d, the celebration has been transferred to %s (%s) as per the %s." ), + /**translators: 1: Festivity name, 2: Festivity date, 3: Requested calendar year, 4: Explicatory string for the transferral, 5: actual date for the transferral, 6: Decree of the Congregation for Divine Worship */ + _( 'The Solemnity \'%1$s\' falls on %2$s in the year %3$d, the celebration has been transferred to %4$s (%5$s) as per the %6$s.' ), $tempFestivity->name, $this->Cal->solemnityFromDate( $currentFeastDate )->name, $this->LitSettings->Year, @@ -587,7 +609,8 @@ private function calculateFixedSolemnities() : void { else{ //In all other cases, let's make a note of what's happening and ask the Congegation for Divine Worship $this->Messages[] = 'IMPORTANT ' . sprintf( - _( "The Solemnity '%s' coincides with the Solemnity '%s' in the year %d. We should ask the Congregation for Divine Worship what to do about this!" ), + /**translators: 1: Festivity name, 2: Coinciding Festivity name, 3: Requested calendar year */ + _( 'The Solemnity \'%1$s\' coincides with the Solemnity \'%2$s\' in the year %3$d. We should ask the Congregation for Divine Worship what to do about this!' ), $row->NAME, $this->Cal->solemnityFromDate( $currentFeastDate )->name, $this->LitSettings->Year @@ -605,7 +628,8 @@ private function calculateFixedSolemnities() : void { if( !$this->Cal->inSolemnities( $NativityJohnBaptistNewDate->sub( new DateInterval( 'P1D' ) ) ) ) { $tempFestivity->date->sub( new DateInterval( 'P1D' ) ); $this->Messages[] = 'IMPORTANT ' . sprintf( - _( "Seeing that the Solemnity '%s' coincides with the Solemnity '%s' in the year %d, it has been anticipated by one day as per %s." ), + /**translators: 1: Festivity name, 2: Coinciding Festivity name, 3: Requested calendar year, 4: Decree of the Congregation for Divine Worship */ + _( 'Seeing that the Solemnity \'%1$s\' coincides with the Solemnity \'%2$s\' in the year %3$d, it has been anticipated by one day as per %4$s.' ), $tempFestivity->name, $SacredHeart->name, $this->LitSettings->Year, @@ -645,8 +669,8 @@ private function calculateFeastsOfTheLord() : void { $this->BaptismLordMod = 'next Sunday'; //If Epiphany is celebrated on Sunday between Jan. 2 - Jan 8, and Jan. 7 or Jan. 8 is Sunday, then Baptism of the Lord is celebrated on the Monday immediately following that Sunday if ( $this->LitSettings->Epiphany === Epiphany::SUNDAY_JAN2_JAN8 ) { - $dateJan7 = DateTime::createFromFormat( '!j-n-Y', '7-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); - $dateJan8 = DateTime::createFromFormat( '!j-n-Y', '8-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $dateJan7 = LitDateTime::createFromFormat( '!j-n-Y', '7-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $dateJan8 = LitDateTime::createFromFormat( '!j-n-Y', '8-1-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); if ( self::DateIsSunday( $dateJan7 ) ) { $this->BaptismLordFmt = '7-1-' . $this->LitSettings->Year; $this->BaptismLordMod = 'next Monday'; @@ -655,7 +679,7 @@ private function calculateFeastsOfTheLord() : void { $this->BaptismLordMod = 'next Monday'; } } - $BaptismLord = new Festivity( $this->PropriumDeTempore[ "BaptismLord" ][ "NAME" ], DateTime::createFromFormat( '!j-n-Y', $this->BaptismLordFmt, new DateTimeZone( 'UTC' ) )->modify( $this->BaptismLordMod ), LitColor::WHITE, LitFeastType::MOBILE, LitGrade::FEAST_LORD ); + $BaptismLord = new Festivity( $this->PropriumDeTempore[ "BaptismLord" ][ "NAME" ], LitDateTime::createFromFormat( '!j-n-Y', $this->BaptismLordFmt, new DateTimeZone( 'UTC' ) )->modify( $this->BaptismLordMod ), LitColor::WHITE, LitFeastType::MOBILE, LitGrade::FEAST_LORD ); $this->Cal->addFestivity( "BaptismLord", $BaptismLord ); //the other feasts of the Lord ( Presentation, Transfiguration and Triumph of the Holy Cross) are fixed date feasts @@ -663,17 +687,18 @@ private function calculateFeastsOfTheLord() : void { $tempCal = array_filter( $this->tempCal[ RomanMissal::EDITIO_TYPICA_1970 ], function( $el ){ return $el->GRADE === LitGrade::FEAST_LORD; } ); foreach ( $tempCal as $row ) { - $currentFeastDate = DateTime::createFromFormat( '!j-n-Y', $row->DAY . '-' . $row->MONTH . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $currentFeastDate = LitDateTime::createFromFormat( '!j-n-Y', $row->DAY . '-' . $row->MONTH . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); $festivity = new Festivity( $row->NAME, $currentFeastDate, $row->COLOR, LitFeastType::FIXED, $row->GRADE, $row->COMMON ); $this->Cal->addFestivity( $row->TAG, $festivity ); } //Holy Family is celebrated the Sunday after Christmas, unless Christmas falls on a Sunday, in which case it is celebrated Dec. 30 if ( self::DateIsSunday( $this->Cal->getFestivity( "Christmas" )->date ) ) { - $holyFamilyDate = DateTime::createFromFormat( '!j-n-Y', '30-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $holyFamilyDate = LitDateTime::createFromFormat( '!j-n-Y', '30-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); $HolyFamily = new Festivity( $this->PropriumDeTempore[ "HolyFamily" ][ "NAME" ], $holyFamilyDate, LitColor::WHITE, LitFeastType::MOBILE, LitGrade::FEAST_LORD ); $this->Messages[] = sprintf( - _( "'%s' falls on a Sunday in the year %d, therefore the Feast '%s' is celebrated on %s rather than on the Sunday after Christmas." ), + /**translators: 1: Festivity name (Christmas), 2: Requested calendar year, 3: Festivity name (Holy Family), 4: New date for Holy Family */ + _( '\'%1$s\' falls on a Sunday in the year %2$d, therefore the Feast \'%3$s\' is celebrated on %4$s rather than on the Sunday after Christmas.' ), $this->Cal->getFestivity( "Christmas" )->name, $this->LitSettings->Year, $HolyFamily->name, @@ -683,7 +708,7 @@ private function calculateFeastsOfTheLord() : void { ) ); } else { - $holyFamilyDate = DateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'next Sunday' ); + $holyFamilyDate = LitDateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'next Sunday' ); $HolyFamily = new Festivity( $this->PropriumDeTempore[ "HolyFamily" ][ "NAME" ], $holyFamilyDate, LitColor::WHITE, LitFeastType::MOBILE, LitGrade::FEAST_LORD ); } $this->Cal->addFestivity( "HolyFamily", $HolyFamily ); @@ -695,19 +720,20 @@ private function calculateSundaysChristmasOrdinaryTime() : void { //If a fixed date Feast of the Lord occurs on a Sunday in Ordinary Time, the feast is celebrated in place of the Sunday //Sundays of Ordinary Time in the First part of the year are numbered from after the Baptism of the Lord ( which begins the 1st week of Ordinary Time ) until Ash Wednesday - $firstOrdinary = DateTime::createFromFormat( '!j-n-Y', $this->BaptismLordFmt, new DateTimeZone( 'UTC' ) )->modify( $this->BaptismLordMod ); + $firstOrdinary = LitDateTime::createFromFormat( '!j-n-Y', $this->BaptismLordFmt, new DateTimeZone( 'UTC' ) )->modify( $this->BaptismLordMod ); //Basically we take Ash Wednesday as the limit... //Here is ( Ash Wednesday - 7 ) since one more cycle will complete... $firstOrdinaryLimit = LitFunc::calcGregEaster( $this->LitSettings->Year )->sub( new DateInterval( 'P53D' ) ); $ordSun = 1; while ( $firstOrdinary >= $this->Cal->getFestivity( "BaptismLord" )->date && $firstOrdinary < $firstOrdinaryLimit ) { - $firstOrdinary = DateTime::createFromFormat( '!j-n-Y', $this->BaptismLordFmt, new DateTimeZone( 'UTC' ) )->modify( $this->BaptismLordMod )->modify( 'next Sunday' )->add( new DateInterval( 'P' . ( ( $ordSun - 1 ) * 7 ) . 'D' ) ); + $firstOrdinary = LitDateTime::createFromFormat( '!j-n-Y', $this->BaptismLordFmt, new DateTimeZone( 'UTC' ) )->modify( $this->BaptismLordMod )->modify( 'next Sunday' )->add( new DateInterval( 'P' . ( ( $ordSun - 1 ) * 7 ) . 'D' ) ); $ordSun++; if ( !$this->Cal->inSolemnities( $firstOrdinary ) ) { $this->Cal->addFestivity( "OrdSunday" . $ordSun, new Festivity( $this->PropriumDeTempore[ "OrdSunday" . $ordSun ][ "NAME" ], $firstOrdinary, LitColor::GREEN, LitFeastType::MOBILE, LitGrade::FEAST_LORD ) ); } else { $this->Messages[] = sprintf( - _( "'%s' is superseded by the %s '%s' in the year %d." ), + /**translators: 1: Festivity name, 2: Superseding Festivity grade, 3: Superseding Festivity name, 4: Requested calendar year */ + _( '\'%1$s\' is superseded by the %2$s \'%3$s\' in the year %4$d.' ), $this->PropriumDeTempore[ "OrdSunday" . $ordSun ][ "NAME" ], $this->Cal->solemnityFromDate( $firstOrdinary )->grade > LitGrade::SOLEMNITY ? '' . $this->LitGrade->i18n( $this->Cal->solemnityFromDate( $firstOrdinary )->grade, false ) . '' : $this->LitGrade->i18n( $this->Cal->solemnityFromDate( $firstOrdinary )->grade, false ), $this->Cal->solemnityFromDate( $firstOrdinary )->name, @@ -717,7 +743,7 @@ private function calculateSundaysChristmasOrdinaryTime() : void { } //Sundays of Ordinary Time in the Latter part of the year are numbered backwards from Christ the King ( 34th ) to Pentecost - $lastOrdinary = DateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' )->sub( new DateInterval( 'P' . ( 4 * 7 ) . 'D' ) ); + $lastOrdinary = LitDateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' )->sub( new DateInterval( 'P' . ( 4 * 7 ) . 'D' ) ); //We take Trinity Sunday as the limit... //Here is ( Trinity Sunday + 7 ) since one more cycle will complete... $lastOrdinaryLowerLimit = LitFunc::calcGregEaster( $this->LitSettings->Year )->add( new DateInterval( 'P' . ( 7 * 9 ) . 'D' ) ); @@ -725,13 +751,14 @@ private function calculateSundaysChristmasOrdinaryTime() : void { $ordSunCycle = 4; while ( $lastOrdinary <= $this->Cal->getFestivity( "ChristKing" )->date && $lastOrdinary > $lastOrdinaryLowerLimit ) { - $lastOrdinary = DateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' )->sub( new DateInterval( 'P' . ( ++$ordSunCycle * 7 ) . 'D' ) ); + $lastOrdinary = LitDateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' )->sub( new DateInterval( 'P' . ( ++$ordSunCycle * 7 ) . 'D' ) ); $ordSun--; if ( !$this->Cal->inSolemnities( $lastOrdinary ) ) { $this->Cal->addFestivity( "OrdSunday" . $ordSun, new Festivity( $this->PropriumDeTempore[ "OrdSunday" . $ordSun ][ "NAME" ], $lastOrdinary, LitColor::GREEN, LitFeastType::MOBILE, LitGrade::FEAST_LORD ) ); } else { $this->Messages[] = sprintf( - _( "'%s' is superseded by the %s '%s' in the year %d." ), + /**translators: 1: Festivity name, 2: Superseding Festivity grade, 3: Superseding Festivity name, 4: Requested calendar year */ + _( '\'%1$s\' is superseded by the %2$s \'%3$s\' in the year %4$d.' ), $this->PropriumDeTempore[ "OrdSunday" . $ordSun ][ "NAME" ], $this->Cal->solemnityFromDate( $lastOrdinary )->grade > LitGrade::SOLEMNITY ? '' . $this->LitGrade->i18n( $this->Cal->solemnityFromDate( $lastOrdinary )->grade, false ) . '' : $this->LitGrade->i18n( $this->Cal->solemnityFromDate( $lastOrdinary )->grade, false ), $this->Cal->solemnityFromDate( $lastOrdinary )->name, @@ -746,7 +773,7 @@ private function calculateFeastsMarySaints() : void { $tempCal = array_filter( $this->tempCal[ RomanMissal::EDITIO_TYPICA_1970 ], function( $el ){ return $el->GRADE === LitGrade::FEAST; } ); foreach ( $tempCal as $row ) { - $row->DATE = DateTime::createFromFormat( '!j-n-Y', $row->DAY . '-' . $row->MONTH . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $row->DATE = LitDateTime::createFromFormat( '!j-n-Y', $row->DAY . '-' . $row->MONTH . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); //If a Feast ( not of the Lord ) occurs on a Sunday in Ordinary Time, the Sunday is celebrated. ( e.g., St. Luke, 1992 ) //obviously solemnities also have precedence if ( self::DateIsNotSunday( $row->DATE ) && !$this->Cal->inSolemnities( $row->DATE ) ) { @@ -760,7 +787,7 @@ private function calculateFeastsMarySaints() : void { //With the decree Apostolorum Apostola ( June 3rd 2016 ), the Congregation for Divine Worship //with the approval of Pope Francis elevated the memorial of Saint Mary Magdalen to a Feast //source: http://www.vatican.va/roman_curia/congregations/ccdds/documents/articolo-roche-maddalena_it.pdf - //This is taken care of ahead when the memorials are created, see comment tag MARYMAGDALEN: + //This is taken care of ahead when the "memorials from decrees" are applied } @@ -771,10 +798,10 @@ private function calculateWeekdaysAdvent() : void { $DoMAdvent1 = $this->Cal->getFestivity("Advent1")->date->format( 'j' ); //DoM == Day of Month $MonthAdvent1 = $this->Cal->getFestivity("Advent1")->date->format( 'n' ); - $weekdayAdvent = DateTime::createFromFormat( '!j-n-Y', $DoMAdvent1 . '-' . $MonthAdvent1 . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $weekdayAdvent = LitDateTime::createFromFormat( '!j-n-Y', $DoMAdvent1 . '-' . $MonthAdvent1 . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); $weekdayAdventCnt = 1; while ( $weekdayAdvent >= $this->Cal->getFestivity("Advent1")->date && $weekdayAdvent < $this->Cal->getFestivity("Christmas")->date ) { - $weekdayAdvent = DateTime::createFromFormat( '!j-n-Y', $DoMAdvent1 . '-' . $MonthAdvent1 . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->add( new DateInterval( 'P' . $weekdayAdventCnt . 'D' ) ); + $weekdayAdvent = LitDateTime::createFromFormat( '!j-n-Y', $DoMAdvent1 . '-' . $MonthAdvent1 . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->add( new DateInterval( 'P' . $weekdayAdventCnt . 'D' ) ); //if we're not dealing with a sunday or a solemnity, then create the weekday if ( $this->Cal->notInSolemnitiesFeastsOrMemorials( $weekdayAdvent ) && self::DateIsNotSunday( $weekdayAdvent ) ) { @@ -795,10 +822,10 @@ private function calculateWeekdaysAdvent() : void { } private function calculateWeekdaysChristmasOctave() : void { - $weekdayChristmas = DateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $weekdayChristmas = LitDateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); $weekdayChristmasCnt = 1; - while ( $weekdayChristmas >= $this->Cal->getFestivity( "Christmas" )->date && $weekdayChristmas < DateTime::createFromFormat( '!j-n-Y', '31-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ) ) { - $weekdayChristmas = DateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->add( new DateInterval( 'P' . $weekdayChristmasCnt . 'D' ) ); + while ( $weekdayChristmas >= $this->Cal->getFestivity( "Christmas" )->date && $weekdayChristmas < LitDateTime::createFromFormat( '!j-n-Y', '31-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ) ) { + $weekdayChristmas = LitDateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->add( new DateInterval( 'P' . $weekdayChristmasCnt . 'D' ) ); if ( $this->Cal->notInSolemnitiesFeastsOrMemorials( $weekdayChristmas ) && self::DateIsNotSunday( $weekdayChristmas ) ) { $ordinal = ucfirst( LitMessages::getOrdinal( ( $weekdayChristmasCnt + 1 ), $this->LitSettings->Locale, $this->formatter, LitMessages::LATIN_ORDINAL ) ); $name = $this->LitSettings->Locale === LitLocale::LATIN ? sprintf( "Dies %s Octavæ Nativitatis", $ordinal ) : sprintf( _( "%s Day of the Octave of Christmas" ), $ordinal ); @@ -814,10 +841,10 @@ private function calculateWeekdaysLent() : void { //Day of the Month of Ash Wednesday $DoMAshWednesday = $this->Cal->getFestivity( "AshWednesday" )->date->format( 'j' ); $MonthAshWednesday = $this->Cal->getFestivity( "AshWednesday" )->date->format( 'n' ); - $weekdayLent = DateTime::createFromFormat( '!j-n-Y', $DoMAshWednesday . '-' . $MonthAshWednesday . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $weekdayLent = LitDateTime::createFromFormat( '!j-n-Y', $DoMAshWednesday . '-' . $MonthAshWednesday . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); $weekdayLentCnt = 1; while ( $weekdayLent >= $this->Cal->getFestivity( "AshWednesday" )->date && $weekdayLent < $this->Cal->getFestivity( "PalmSun" )->date ) { - $weekdayLent = DateTime::createFromFormat( '!j-n-Y', $DoMAshWednesday . '-' . $MonthAshWednesday . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->add( new DateInterval( 'P' . $weekdayLentCnt . 'D' ) ); + $weekdayLent = LitDateTime::createFromFormat( '!j-n-Y', $DoMAshWednesday . '-' . $MonthAshWednesday . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->add( new DateInterval( 'P' . $weekdayLentCnt . 'D' ) ); if ( !$this->Cal->inSolemnities( $weekdayLent ) && self::DateIsNotSunday( $weekdayLent ) ) { if ( $weekdayLent > $this->Cal->getFestivity("Lent1")->date ) { $upper = (int)$weekdayLent->format( 'z' ); @@ -848,7 +875,7 @@ private function addMissalMemorialMessage( object $row ) { * 3. Day of the festivity * 4. Year from which the festivity has been added * 5. Source of the information - * 6. Current year + * 6. Requested calendar year */ $message = _( 'The %1$s \'%2$s\' has been added on %3$s since the year %4$d (%5$s), applicable to the year %6$d.' ); $this->Messages[] = sprintf( @@ -872,9 +899,12 @@ private function calculateMemorials( int $grade = LitGrade::MEMORIAL, string $mi $tempCal = array_filter( $this->tempCal[ $missal ], function( $el ) use ( $grade ){ return $el->GRADE === $grade; } ); foreach ( $tempCal as $row ) { //If it doesn't occur on a Sunday or a Solemnity or a Feast of the Lord or a Feast or an obligatory memorial, then go ahead and create the optional memorial - $row->DATE = DateTime::createFromFormat( '!j-n-Y', $row->DAY . '-' . $row->MONTH . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $row->DATE = LitDateTime::createFromFormat( '!j-n-Y', $row->DAY . '-' . $row->MONTH . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); if ( self::DateIsNotSunday( $row->DATE ) && $this->Cal->notInSolemnitiesFeastsOrMemorials( $row->DATE ) ) { $newFestivity = new Festivity( $row->NAME, $row->DATE, $row->COLOR, LitFeastType::FIXED, $row->GRADE, $row->COMMON ); + //LitCalAPI::debugWrite( "adding new memorial '$row->NAME', common vartype = " . gettype( $row->COMMON ) . ", common = " . implode(', ', $row->COMMON) ); + //LitCalAPI::debugWrite( ">>> added new memorial '$newFestivity->name', common vartype = " . gettype( $newFestivity->common ) . ", common = " . implode(', ', $newFestivity->common) ); + $this->Cal->addFestivity( $row->TAG, $newFestivity ); $this->reduceMemorialsInAdventLentToCommemoration( $row->DATE, $row ); @@ -919,13 +949,13 @@ private function calculateMemorials( int $grade = LitGrade::MEMORIAL, string $mi private function reduceMemorialsInAdventLentToCommemoration( DateTime $currentFeastDate, stdClass $row ) { //If a fixed date optional memorial falls between 17 Dec. to 24 Dec., the Octave of Christmas or weekdays of the Lenten season, - //it is reduced in rank to a Commemoration ( only the collect can be used + //it is reduced in rank to a Commemoration ( only the collect can be used ) if ( $this->Cal->inWeekdaysAdventChristmasLent( $currentFeastDate ) ) { $this->Cal->setProperty( $row->TAG, "grade", LitGrade::COMMEMORATION ); /**translators: * 1. Grade or rank of the festivity * 2. Name of the festivity - * 3. Current year + * 3. Requested calendar year */ $message = _( 'The %1$s \'%2$s\' either falls between 17 Dec. and 24 Dec., or during the Octave of Christmas, or on the weekdays of the Lenten season in the year %3$d, rank reduced to Commemoration.' ); $this->Messages[] = sprintf( @@ -947,7 +977,7 @@ private function removeWeekdaysEpiphanyOverridenByMemorials( string $tag ) { * 2. Name of the festivity that has been superseded * 3. Grade or rank of the festivity that is superseding * 4. Name of the festivity that is superseding - * 5. Current year + * 5. Requested calendar year */ $message = _( 'The %1$s \'%2$s\' is superseded by the %3$s \'%4$s\' in the year %5$d.' ); $this->Messages[] = sprintf( @@ -989,7 +1019,7 @@ private function handleCoincidence( stdClass $row, string $missal = RomanMissal: * 6. Date in which the superseded festivity is usually celebrated * 7. Grade or rank of the festivity that is superseding * 8. Name of the festivity that is superseding - * 9. Current year + * 9. Requested calendar year */ $message = _( 'The %1$s \'%2$s\', added in the %3$s of the Roman Missal since the year %4$d (%5$s) and usually celebrated on %6$s, is suppressed by the %7$s \'%8$s\' in the year %9$d.' ); $this->Messages[] = sprintf( @@ -1025,7 +1055,7 @@ private function handleCoincidenceDecree( object $row ) : void { * 5. Source of the information * 6. Grade or rank of the superseding festivity * 7. Name of the superseding festivity - * 8. Current year + * 8. Requested calendar year */ _( 'The %1$s \'%2$s\', added on %3$s since the year %4$d (%5$s), is however superseded by a %6$s \'%7$s\' in the year %8$d.' ), $this->LitGrade->i18n( $row->Festivity->GRADE ), @@ -1063,7 +1093,7 @@ private function checkImmaculateHeartCoincidence( DateTime $currentFeastDate, st /**translators: * 1. Name of the first coinciding Memorial * 2. Name of the second coinciding Memorial - * 3. Current year + * 3. Requested calendar year * 4. Source of the information */ _( 'The Memorial \'%1$s\' coincides with another Memorial \'%2$s\' in the year %3$d. They are both reduced in rank to optional memorials (%4$s).' ), @@ -1082,6 +1112,8 @@ private function checkImmaculateHeartCoincidence( DateTime $currentFeastDate, st private function createFestivityFromDecree( object $row ) : void { if( $row->Festivity->TYPE === "mobile" ) { //we won't have a date defined for mobile festivites, we'll have to calculate them here case by case + //otherwise we'll have to create a language that we can interpret in an automated fashion... + //for example we can use strtotime switch( $row->Festivity->TAG ) { case "MaryMotherChurch": $row->Festivity->DATE = LitFunc::calcGregEaster( $this->LitSettings->Year )->add( new DateInterval( 'P' . ( 7 * 7 + 1 ) . 'D' ) ); @@ -1091,7 +1123,7 @@ private function createFestivityFromDecree( object $row ) : void { $this->createMobileFestivity( $row ); } } else { - $row->Festivity->DATE = DateTime::createFromFormat( '!j-n-Y', "{$row->Festivity->DAY}-{$row->Festivity->MONTH}-{$this->LitSettings->Year}", new DateTimeZone( 'UTC' ) ); + $row->Festivity->DATE = LitDateTime::createFromFormat( '!j-n-Y', "{$row->Festivity->DAY}-{$row->Festivity->MONTH}-{$this->LitSettings->Year}", new DateTimeZone( 'UTC' ) ); $decree = $this->elaborateDecreeSource( $row ); if( $row->Festivity->GRADE === LitGrade::MEMORIAL_OPT ) { if( $this->Cal->notInSolemnitiesFeastsOrMemorials( $row->Festivity->DATE ) ) { @@ -1104,7 +1136,7 @@ private function createFestivityFromDecree( object $row ) : void { * 3. Day of the festivity * 4. Year from which the festivity has been added * 5. Source of the information - * 6. Current year + * 6. Requested calendar year */ _( 'The %1$s \'%2$s\' has been added on %3$s since the year %4$d (%5$s), applicable to the year %6$d.' ), $this->LitGrade->i18n( $row->Festivity->GRADE, false ), @@ -1138,7 +1170,7 @@ private function setPropertyBasedOnDecree( object $row ) : void { * 2. Name of the festivity * 3. New name of the festivity * 4. Year from which the grade has been changed - * 5. Current year + * 5. Requested calendar year * 6. Source of the information */ $message = _( 'The name of the %1$s \'%2$s\' has been changed to %3$s since the year %4$d, applicable to the year %5$d (%6$s).' ); @@ -1160,7 +1192,7 @@ private function setPropertyBasedOnDecree( object $row ) : void { * 2. Name of the festivity * 3. New grade of the festivity * 4. Year from which the grade has been changed - * 5. Current year + * 5. Requested calendar year * 6. Source of the information */ $message = _( 'The %1$s \'%2$s\' has been raised to the rank of %3$s since the year %4$d, applicable to the year %5$d (%6$s).' ); @@ -1170,7 +1202,7 @@ private function setPropertyBasedOnDecree( object $row ) : void { * 2. Name of the festivity * 3. New grade of the festivity * 4. Year from which the grade has been changed - * 5. Current year + * 5. Requested calendar year * 6. Source of the information */ $message = _( 'The %1$s \'%2$s\' has been lowered to the rank of %3$s since the year %4$d, applicable to the year %5$d (%6$s).' ); @@ -1204,7 +1236,7 @@ function( $row ) { /**translators: * 1. Name of the festivity * 2. Year in which was declared Doctor - * 3. Current year + * 3. Requested calendar year * 4. Source of the information */ $message = _( '\'%1$s\' has been declared a Doctor of the Church since the year %2$d, applicable to the year %3$d (%4$s).' ); @@ -1281,7 +1313,7 @@ private function createMobileFestivity( object $row ) : void { * 3. Indication of the mobile date for the festivity being created * 4. Year from which the festivity has been added * 5. Source of the information - * 6. Current year + * 6. Requested calendar year */ _( 'The %1$s \'%2$s\' has been added on %3$s since the year %4$d (%5$s), applicable to the year %6$d.' ), $this->LitGrade->i18n( $row->Festivity->GRADE, false ), @@ -1318,7 +1350,7 @@ private function checkCoincidencesNewMobileFestivity( object $row ) : bool { * 5. Source of the information * 6. Grade or rank of superseding festivity * 7. Name of superseding festivity - * 8. Current year + * 8. Requested calendar year */ _( 'The %1$s \'%2$s\', added on %3$s since the year %4$d (%5$s), is however superseded by the %6$s \'%7$s\' in the year %8$d.' ), $this->LitGrade->i18n( $row->Festivity->GRADE, false ), @@ -1339,7 +1371,7 @@ private function checkCoincidencesNewMobileFestivity( object $row ) : bool { foreach( $coincidingFestivities as $coincidingFestivityKey => $coincidingFestivity ) { $this->Messages[] = sprintf( /**translators: - * 1. Current year + * 1. Requested calendar year * 2. Grade or rank of suppressed festivity * 3. Name of suppressed festivity * 4. Grade or rank of the festivity being created @@ -1398,15 +1430,16 @@ private function createImmaculateHeart() { * source: http://www.vatican.va/roman_curia/congregations/ccdds/documents/rc_con_ccdds_doc_20000628_guadalupe_lt.html */ private function handleSaintJaneFrancesDeChantal() { - $StJaneFrancesNewDate = DateTime::createFromFormat( '!j-n-Y', '12-8-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $StJaneFrancesNewDate = LitDateTime::createFromFormat( '!j-n-Y', '12-8-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $langs = ["LA" => "lt", "ES" => "es"]; + $lang = in_array( $this->LitSettings->Locale, array_keys($langs) ) ? $langs[$this->LitSettings->Locale] : "lt"; if ( self::DateIsNotSunday( $StJaneFrancesNewDate ) && $this->Cal->notInSolemnitiesFeastsOrMemorials( $StJaneFrancesNewDate ) ) { $festivity = $this->Cal->getFestivity( "StJaneFrancesDeChantal" ); - $langs = ["LA" => "lt", "ES" => "es"]; - $lang = in_array( $this->LitSettings->Locale, array_keys($langs) ) ? $langs[$this->LitSettings->Locale] : "lt"; if( $festivity !== null ) { $this->Cal->moveFestivityDate( "StJaneFrancesDeChantal", $StJaneFrancesNewDate ); $this->Messages[] = sprintf( - _( "The optional memorial '%s' has been transferred from Dec. 12 to Aug. 12 since the year 2002 (%s), applicable to the year %d." ), + /**translators: 1: Festivity name, 2: Source of the information, 3: Requested calendar year */ + _( 'The optional memorial \'%1$s\' has been transferred from Dec. 12 to Aug. 12 since the year 2002 (%2$s), applicable to the year %3$d.' ), $festivity->name, "" . _( 'Decree of the Congregation for Divine Worship' ) . '', $this->LitSettings->Year @@ -1418,7 +1451,8 @@ private function handleSaintJaneFrancesDeChantal() { $festivity = new Festivity( $row->NAME, $StJaneFrancesNewDate, $row->COLOR, LitFeastType::FIXED, $row->GRADE, $row->COMMON ); $this->Cal->addFestivity( "StJaneFrancesDeChantal", $festivity ); $this->Messages[] = sprintf( - _( "The optional memorial '%s', which would have been superseded this year by a Sunday or Solemnity were it on Dec. 12, has however been transferred to Aug. 12 since the year 2002 (%s), applicable to the year %d." ), + /**translators: 1: Festivity name, 2: Source of the information, 3: Requested calendar year */ + _( 'The optional memorial \'%1$s\', which would have been superseded this year by a Sunday or Solemnity were it on Dec. 12, has however been transferred to Aug. 12 since the year 2002 (%2$s), applicable to the year %3$d.' ), $festivity->name, "" . _( 'Decree of the Congregation for Divine Worship' ) . '', $this->LitSettings->Year @@ -1454,12 +1488,13 @@ private function applyOptionalMemorialDecree2009() : void { $festivity = $this->Cal->getFestivity( "ConversionStPaul" ); if( $festivity === null ) { $row = $this->tempCal[ RomanMissal::EDITIO_TYPICA_1970 ][ "ConversionStPaul" ]; - $festivity = new Festivity( $row->NAME, DateTime::createFromFormat( '!j-n-Y', '25-1-2009', new DateTimeZone( 'UTC' ) ), LitColor::WHITE, LitFeastType::FIXED, LitGrade::MEMORIAL_OPT, LitCommon::PROPRIO ); + $festivity = new Festivity( $row->NAME, LitDateTime::createFromFormat( '!j-n-Y', '25-1-2009', new DateTimeZone( 'UTC' ) ), LitColor::WHITE, LitFeastType::FIXED, LitGrade::MEMORIAL_OPT, LitCommon::PROPRIO ); $this->Cal->addFestivity( "ConversionStPaul", $festivity ); $langs = ["FR" => "fr", "EN" => "en", "IT" => "it", "LA" => "lt", "PT" => "pt", "ES" => "sp", "DE" => "ge"]; $lang = in_array( $this->LitSettings->Locale, array_keys($langs) ) ? $langs[$this->LitSettings->Locale] : "en"; $this->Messages[] = sprintf( - _( 'The Feast \'%s\' would have been suppressed this year ( 2009 ) since it falls on a Sunday, however being the Year of the Apostle Paul, as per the %s it has been reinstated so that local churches can optionally celebrate the memorial.' ), + /**translators: 1: Festivity name, 2: Source of the information */ + _( 'The Feast \'%1$s\' would have been suppressed this year ( 2009 ) since it falls on a Sunday, however being the Year of the Apostle Paul, as per the %2$s it has been reinstated so that local churches can optionally celebrate the memorial.' ), '' . $row->NAME . '', "" . _( 'Decree of the Congregation for Divine Worship' ) . '' ); @@ -1473,10 +1508,10 @@ private function calculateWeekdaysMajorSeasons() : void { $DoMEaster = $this->Cal->getFestivity( "Easter" )->date->format( 'j' ); //day of the month of Easter $MonthEaster = $this->Cal->getFestivity( "Easter" )->date->format( 'n' ); //month of Easter //let's start cycling dates one at a time starting from Easter itself - $weekdayEaster = DateTime::createFromFormat( '!j-n-Y', $DoMEaster . '-' . $MonthEaster . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $weekdayEaster = LitDateTime::createFromFormat( '!j-n-Y', $DoMEaster . '-' . $MonthEaster . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); $weekdayEasterCnt = 1; while ( $weekdayEaster >= $this->Cal->getFestivity( "Easter" )->date && $weekdayEaster < $this->Cal->getFestivity( "Pentecost" )->date ) { - $weekdayEaster = DateTime::createFromFormat( '!j-n-Y', $DoMEaster . '-' . $MonthEaster . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->add( new DateInterval( 'P' . $weekdayEasterCnt . 'D' ) ); + $weekdayEaster = LitDateTime::createFromFormat( '!j-n-Y', $DoMEaster . '-' . $MonthEaster . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->add( new DateInterval( 'P' . $weekdayEasterCnt . 'D' ) ); if ( $this->Cal->notInSolemnitiesFeastsOrMemorials( $weekdayEaster ) && self::DateIsNotSunday( $weekdayEaster ) ) { $upper = (int)$weekdayEaster->format( 'z' ); $diff = $upper - (int)$this->Cal->getFestivity( "Easter" )->date->format( 'z' ); //day count between current day and Easter Sunday @@ -1503,12 +1538,12 @@ private function calculateWeekdaysOrdinaryTime() : void { $ordWeekday = 1; $currentOrdWeek = 1; - $firstOrdinary = DateTime::createFromFormat( '!j-n-Y', $this->BaptismLordFmt, new DateTimeZone( 'UTC' ) )->modify( $this->BaptismLordMod ); - $firstSunday = DateTime::createFromFormat( '!j-n-Y', $this->BaptismLordFmt, new DateTimeZone( 'UTC' ) )->modify( $this->BaptismLordMod )->modify( 'next Sunday' ); + $firstOrdinary = LitDateTime::createFromFormat( '!j-n-Y', $this->BaptismLordFmt, new DateTimeZone( 'UTC' ) )->modify( $this->BaptismLordMod ); + $firstSunday = LitDateTime::createFromFormat( '!j-n-Y', $this->BaptismLordFmt, new DateTimeZone( 'UTC' ) )->modify( $this->BaptismLordMod )->modify( 'next Sunday' ); $dayFirstSunday = (int)$firstSunday->format( 'z' ); while ( $firstOrdinary >= $FirstWeekdaysLowerLimit && $firstOrdinary < $FirstWeekdaysUpperLimit ) { - $firstOrdinary = DateTime::createFromFormat( '!j-n-Y', $this->BaptismLordFmt, new DateTimeZone( 'UTC' ) )->modify( $this->BaptismLordMod )->add( new DateInterval( 'P' . $ordWeekday . 'D' ) ); + $firstOrdinary = LitDateTime::createFromFormat( '!j-n-Y', $this->BaptismLordFmt, new DateTimeZone( 'UTC' ) )->modify( $this->BaptismLordMod )->add( new DateInterval( 'P' . $ordWeekday . 'D' ) ); if ( $this->Cal->notInSolemnitiesFeastsOrMemorials( $firstOrdinary ) ) { //The Baptism of the Lord is the First Sunday, so the weekdays following are of the First Week of Ordinary Time //After the Second Sunday, let's calculate which week of Ordinary Time we're in @@ -1531,12 +1566,12 @@ private function calculateWeekdaysOrdinaryTime() : void { //In the second part of the year, weekdays of ordinary time begin the day after Pentecost $SecondWeekdaysLowerLimit = $this->Cal->getFestivity( "Pentecost" )->date; //and end with the Feast of Christ the King - $SecondWeekdaysUpperLimit = DateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' )->sub( new DateInterval( 'P' . ( 3 * 7 ) . 'D' ) ); + $SecondWeekdaysUpperLimit = LitDateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' )->sub( new DateInterval( 'P' . ( 3 * 7 ) . 'D' ) ); $ordWeekday = 1; //$currentOrdWeek = 1; $lastOrdinary = LitFunc::calcGregEaster( $this->LitSettings->Year )->add( new DateInterval( 'P' . ( 7 * 7 ) . 'D' ) ); - $dayLastSunday = (int)DateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' )->sub( new DateInterval( 'P' . ( 3 * 7 ) . 'D' ) )->format( 'z' ); + $dayLastSunday = (int)LitDateTime::createFromFormat( '!j-n-Y', '25-12-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) )->modify( 'last Sunday' )->sub( new DateInterval( 'P' . ( 3 * 7 ) . 'D' ) )->format( 'z' ); while ( $lastOrdinary >= $SecondWeekdaysLowerLimit && $lastOrdinary < $SecondWeekdaysUpperLimit ) { $lastOrdinary = LitFunc::calcGregEaster( $this->LitSettings->Year )->add( new DateInterval( 'P' . ( 7 * 7 + $ordWeekday ) . 'D' ) ); @@ -1564,11 +1599,11 @@ private function calculateWeekdaysOrdinaryTime() : void { // so that our cycle using "next Saturday" logic will actually start from the first Saturday of the year ), // and then continue for every next Saturday until we reach the last Saturday of the year private function calculateSaturdayMemorialBVM() : void { - $currentSaturday = new DateTime( "previous Saturday January {$this->LitSettings->Year}", new DateTimeZone( 'UTC' ) ); - $lastSatDT = new DateTime( "last Saturday December {$this->LitSettings->Year}", new DateTimeZone( 'UTC' ) ); + $currentSaturday = new LitDateTime( "previous Saturday January {$this->LitSettings->Year}", new DateTimeZone( 'UTC' ) ); + $lastSatDT = new LitDateTime( "last Saturday December {$this->LitSettings->Year}", new DateTimeZone( 'UTC' ) ); $SatMemBVM_cnt = 0; while( $currentSaturday <= $lastSatDT ){ - $currentSaturday = DateTime::createFromFormat( '!j-n-Y', $currentSaturday->format( 'j-n-Y' ),new DateTimeZone( 'UTC' ) )->modify( 'next Saturday' ); + $currentSaturday = LitDateTime::createFromFormat( '!j-n-Y', $currentSaturday->format( 'j-n-Y' ),new DateTimeZone( 'UTC' ) )->modify( 'next Saturday' ); if( $this->Cal->notInSolemnitiesFeastsOrMemorials( $currentSaturday ) ) { $memID = "SatMemBVM" . ++$SatMemBVM_cnt; $name = $this->LitSettings->Locale === LitLocale::LATIN ? "Memoria Sanctæ Mariæ in Sabbato" : _( "Saturday Memorial of the Blessed Virgin Mary" ); @@ -1578,308 +1613,476 @@ private function calculateSaturdayMemorialBVM() : void { } } - private function applyCalendarItaly() : void { - $this->applyPatronSaintsEurope(); - $this->applyPatronSaintsItaly(); - if( $this->LitSettings->Year >= 1983 && $this->LitSettings->Year < 2002 ) { - $this->readPropriumDeSanctisJSONData( RomanMissal::ITALY_EDITION_1983 ); - //The extra liturgical events found in the 1983 edition of the Roman Missal in Italian, - //were then incorporated into the Latin edition in 2002 ( effectively being incorporated into the General Roman Calendar ) - //so when dealing with Italy, we only need to add them from 1983 until 2002, after which it's taken care of by the General Calendar - $this->applyMessaleRomano1983(); - } - - //The Sanctorale in the 2020 edition Messale Romano is based on the Latin 2008 Edition, - // there isn't really anything different from preceding editions or from the 2008 edition - } - - private function makePatron( string $tag, string $nameSuffix, int $day, int $month, string $color, string $EditionRomanMissal = RomanMissal::EDITIO_TYPICA_1970 ) { - $festivity = $this->Cal->getFestivity( $tag ); - if( $festivity !== null ) { - if( $festivity->grade < LitGrade::FEAST ) { - $this->Cal->setProperty( $tag, "grade", LitGrade::FEAST ); - } - $this->Cal->setProperty( $tag, "name", $festivity->name . ", " . $nameSuffix ); - $this->Cal->setProperty( $tag, "common", LitCommon::PROPRIO ); - } else{ - //check what's going on, for example, if it's a Sunday or Solemnity - $currentFeastDate = DateTime::createFromFormat( '!j-n-Y', "{$day}-{$month}-" . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); - $row = $this->tempCal[ $EditionRomanMissal ][ $tag ]; - //let's also get the name back from the database, so we can give some feedback and maybe even recreate the festivity - $FestivityName = $row->NAME . ", " . $nameSuffix; - if( $this->Cal->inSolemnitiesFeastsOrMemorials( $currentFeastDate ) || self::DateIsSunday( $currentFeastDate ) ) { - $coincidingFestivity = new stdClass(); - $coincidingFestivity->event = $this->Cal->solemnityFromDate( $currentFeastDate ); - if ( self::DateIsSunday( $currentFeastDate ) && $coincidingFestivity->event->grade < LitGrade::SOLEMNITY ){ - //it's a Sunday - $coincidingFestivity->grade = $this->LitSettings->Locale === LitLocale::LATIN ? 'Die Domini' : ucfirst( $this->dayOfTheWeek->format( $currentFeastDate->format( 'U' ) ) ); - } else if ( $this->Cal->inSolemnities( $currentFeastDate ) ) { - //it's a Feast of the Lord or a Solemnity - $coincidingFestivity->grade = ( $coincidingFestivity->event->grade > LitGrade::SOLEMNITY ? '' . $this->LitGrade->i18n( $coincidingFestivity->event->grade, false ) . '' : $this->LitGrade->i18n( $coincidingFestivity->grade, false ) ); - } else if ( $this->Cal->inFeastsOrMemorials( $currentFeastDate ) ) { - //we should probably be able to create it anyways in this case? - $this->Cal->addFestivity( $tag, new Festivity( $FestivityName, $currentFeastDate, $color, LitFeastType::FIXED, LitGrade::FEAST, LitCommon::PROPRIO ) ); - $coincidingFestivity->grade = $this->LitGrade->i18n( $coincidingFestivity->event->grade, false ); + private function loadNationalCalendarData() : void { + $nationalDataFile = "nations/{$this->LitSettings->NationalCalendar}/{$this->LitSettings->NationalCalendar}.json"; + if( file_exists( $nationalDataFile ) ) { + $this->NationalData = json_decode( file_get_contents( $nationalDataFile ) ); + if( json_last_error() === JSON_ERROR_NONE ) { + if( property_exists( $this->NationalData, "Metadata" ) && property_exists( $this->NationalData->Metadata, "WiderRegion" ) ){ + $widerRegionDataFile = $this->NationalData->Metadata->WiderRegion->jsonFile; + $widerRegionI18nFile = $this->NationalData->Metadata->WiderRegion->i18nFile; + if( file_exists( $widerRegionI18nFile ) ) { + $widerRegionI18nData = json_decode( file_get_contents( $widerRegionI18nFile ) ); + if( json_last_error() === JSON_ERROR_NONE && file_exists( $widerRegionDataFile ) ) { + $this->WiderRegionData = json_decode( file_get_contents( $widerRegionDataFile ) ); + if( json_last_error() === JSON_ERROR_NONE && property_exists( $this->WiderRegionData, "LitCal" ) ) { + foreach( $this->WiderRegionData->LitCal as $idx => $value ) { + $tag = $value->Festivity->tag; + $this->WiderRegionData->LitCal[$idx]->Festivity->name = $widerRegionI18nData->{ $tag }; + } + } else { + $this->Messages[] = sprintf( _( "Error retrieving and decoding Wider Region data from file %s." ), $widerRegionDataFile ) . ": " . json_last_error_msg(); + } + } else { + $this->Messages[] = sprintf( _( "Error retrieving and decoding Wider Region data from file %s." ), $widerRegionI18nFile ) . ": " . json_last_error_msg(); + } + } + } else { + $this->Messages[] = "Could not find a WiderRegion property in the Metadata for the National Calendar {$this->LitSettings->NationalCalendar}"; } - $this->Messages[] = 'IMPORTANT ' . sprintf( - /**translators: - * 1. Grade of the festivity - * 2. Name of the festivity - * 3. Date on which the festivity is usually celebrated - * 4. Grade of the superseding festivity - * 5. Name of the superseding festivity - * 6. Current year - */ - _( 'The %1$s \'%2$s\', usually celebrated on %3$s, is suppressed by the %4$s \'%5$s\' in the year %6$d.' ), - $this->LitGrade->i18n( LitGrade::FEAST, false ), - $FestivityName, - $this->dayAndMonth->format( $currentFeastDate->format( 'U' ) ), - $coincidingFestivity->grade, - $coincidingFestivity->event->name, - $this->LitSettings->Year - ); + } else { + $this->Messages[] = sprintf( _( "Error retrieving and decoding National data from file %s." ), $nationalDataFile ) . ": " . json_last_error_msg(); } } } - - //Insert or elevate the Patron Saints of Europe - private function applyPatronSaintsEurope() : void { - - //Saint Benedict, Saint Bridget, and Saint Cyril and Methodius elevated to Feast, with title "patrono/i d'Europa" added - //then from 1999, Saint Catherine of Siena and Saint Edith Stein, elevated to Feast with title "compatrona d'Europa" added - $this->makePatron( "StBenedict", pgettext("Male singular", "patron of Europe"), 11, 7, LitColor::WHITE ); - $this->makePatron( "StBridget", pgettext("Female singular", "patron of Europe"), 23, 7, LitColor::WHITE ); - $this->makePatron( "StsCyrilMethodius", pgettext("Male plural", "patrons of Europe"), 14, 2, LitColor::WHITE ); - - //In 1999, Pope John Paul II elevated Catherine of Siena from patron of Italy to patron of Europe - if( $this->LitSettings->Year >= 1999 ) { - if( $this->LitSettings->NationalCalendar === "ITALY" ) { - $name = "patrona d'Italia e d'Europa"; - } else { - $name = pgettext("Female singular", "patron of Europe"); - } - $this->makePatron( "StCatherineSiena", $name, 29, 4, LitColor::WHITE ); - if( $this->LitSettings->Year >= 2002 ) { - $this->makePatron( "StEdithStein", pgettext("Female singular", "patron of Europe"), 9, 8, LitColor::WHITE, RomanMissal::EDITIO_TYPICA_TERTIA_2002 ); - } else { - //between 1999 and 2002 we have to manually create StEdithStein - //since the makePatron method expects to find data from the Missals, - //we are going to have to fake this one as belonging to a Missal... - //let's add it to the future Missal that doesn't exist yet - $EdithStein = new stdClass(); - $EdithStein->NAME = _("Saint Teresa Benedicta of the Cross, Virgin and Martyr"); - $EdithStein->MONTH = 8; - $EdithStein->DAY = 9; - $EdithStein->TAG = "StEdithStein"; - $EdithStein->GRADE = LitGrade::MEMORIAL_OPT; - $EdithStein->COMMON = LitCommon::AB( [LitCommon::PRO_VIRGINE_MARTYRE,LitCommon::PRO_UNA_VIRGINE] ); - $EdithStein->CALENDAR = "GENERAL ROMAN"; - $EdithStein->COLOR = "white,red"; - $this->tempCal[ RomanMissal::EDITIO_TYPICA_TERTIA_2002 ][ "StEdithStein" ] = $EdithStein; - $EdithStein->DATE = DateTime::createFromFormat( '!j-n-Y', $EdithStein->DAY . '-' . $EdithStein->MONTH . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); - if( !$this->Cal->inSolemnitiesFeastsOrMemorials( $EdithStein->DATE ) ) { - $this->Cal->addFestivity( $EdithStein->TAG, new Festivity( $EdithStein->NAME, $EdithStein->DATE, $EdithStein->COLOR, LitFeastType::FIXED, $EdithStein->GRADE, $EdithStein->COMMON ) ); - $this->makePatron( "StEdithStein", pgettext("Female singular", "patron of Europe"), $EdithStein->DAY, $EdithStein->MONTH, $EdithStein->COLOR, RomanMissal::EDITIO_TYPICA_TERTIA_2002 ); - } + private function handleMissingFestivity( object $row ) : void { + $currentFeastDate = LitDateTime::createFromFormat( '!j-n-Y', "{$row->Festivity->day}-{$row->Festivity->month}-" . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + //let's also get the name back from the database, so we can give some feedback and maybe even recreate the festivity + if( $this->Cal->inSolemnitiesFeastsOrMemorials( $currentFeastDate ) || self::DateIsSunday( $currentFeastDate ) ) { + $coincidingFestivity = $this->Cal->determineSundaySolemnityOrFeast( $currentFeastDate, $this->LitSettings ); + if ( $this->Cal->inFeastsOrMemorials( $currentFeastDate ) ) { + //we should probably be able to create it anyways in this case? + $this->Cal->addFestivity( + $row->Festivity->tag, + new Festivity( + $row->Festivity->name, + $currentFeastDate, + $row->Festivity->color, + LitFeastType::FIXED, + $row->Festivity->grade, + LitCommon::PROPRIO + ) + ); } + $this->Messages[] = 'IMPORTANT ' . sprintf( + /**translators: + * 1. Grade of the festivity + * 2. Name of the festivity + * 3. Date on which the festivity is usually celebrated + * 4. Grade of the superseding festivity + * 5. Name of the superseding festivity + * 6. Requested calendar year + */ + _( 'The %1$s \'%2$s\', usually celebrated on %3$s, is suppressed by the %4$s \'%5$s\' in the year %6$d.' ), + $this->LitGrade->i18n( $row->Festivity->grade, false ), + $row->Festivity->name, + $this->dayAndMonth->format( $currentFeastDate->format( 'U' ) ), + $coincidingFestivity->grade, + $coincidingFestivity->event->name, + $this->LitSettings->Year + ); } } - //Insert or elevate the Patron Saints of Italy - private function applyPatronSaintsItaly() : void { - if ( $this->LitSettings->Year < 1999 ) { - //We only have to deal with years before 1999, because from 1999 - //it will be taken care of by Patron saints of Europe - $this->makePatron( "StCatherineSiena", "patrona d'Italia", 29, 4, LitColor::WHITE ); + private function festivityCanBeCreated( object $row ) : bool { + switch( $row->Festivity->grade ) { + case LitGrade::MEMORIAL_OPT: + return $this->Cal->notInSolemnitiesFeastsOrMemorials( $row->Festivity->DATE ); + case LitGrade::MEMORIAL: + return $this->Cal->notInSolemnitiesOrFeasts( $row->Festivity->DATE ); + //however we still have to handle possible coincidences with another memorial + case LitGrade::FEAST: + return $this->Cal->notInSolemnities( $row->Festivity->DATE ); + //however we still have to handle possible coincidences with another feast + case LitGrade::SOLEMNITY: + return true; + //however we still have to handle possible coincidences with another solemnity } - $this->makePatron( "StFrancisAssisi", "patrono d'Italia", 4, 10, LitColor::WHITE ); + return false; } - private function applyMessaleRomano1983() : void { - //we have no solemnities or feasts in this data, at the most memorials - foreach ( $this->tempCal[ RomanMissal::ITALY_EDITION_1983 ] as $row ) { - $currentFeastDate = DateTime::createFromFormat( '!j-n-Y', $row->DAY . '-' . $row->MONTH . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); - if( !$this->Cal->inSolemnitiesOrFeasts( $currentFeastDate ) ) { - $festivity = new Festivity( "[ ITALIA ] " . $row->NAME, $currentFeastDate, $row->COLOR, LitFeastType::FIXED, $row->GRADE, $row->COMMON, $row->DISPLAYGRADE ); - $this->Cal->addFestivity( $row->TAG, $festivity ); - } - else{ - $coincidingFestivity = $this->Cal->determineSundaySolemnityOrFeast( $currentFeastDate, $this->LitSettings ); + private function festivityDoesNotCoincide( object $row ) : bool { + switch( $row->Festivity->grade ) { + case LitGrade::MEMORIAL_OPT: + return true; + //optional memorials never have problems as regards coincidence with another optional memorial + case LitGrade::MEMORIAL: + return $this->Cal->notInMemorials( $row->Festivity->DATE ); + case LitGrade::FEAST: + return $this->Cal->notInFeasts( $row->Festivity->DATE ); + case LitGrade::SOLEMNITY: + return $this->Cal->notInSolemnities( $row->Festivity->DATE ); + } + //functions should generally have a default return value + //however, it would make no sense to give a default return value here + //we really need to cover all cases and give a sure return value + } + + private function handleFestivityCreationWithCoincidence( object $row ) : void { + switch( $row->Festivity->grade ) { + case LitGrade::MEMORIAL: + //both memorials become optional memorials + $coincidingFestivities = $this->Cal->getCalEventsFromDate( $row->Festivity->DATE ); + $coincidingMemorials = array_filter( $coincidingFestivities, function( $el ) { return $el->grade === LitGrade::MEMORIAL; } ); + $coincidingMemorialName = ''; + foreach( $coincidingMemorials as $key => $value ) { + $this->Cal->setProperty( $key, "grade", LitGrade::MEMORIAL_OPT ); + $coincidingMemorialName = $value->name; + } + $festivity = new Festivity( $row->Festivity->name, $row->Festivity->DATE, $row->Festivity->color, LitFeastType::FIXED, LitGrade::MEMORIAL_OPT, $row->Festivity->common ); + $this->Cal->addFestivity( $row->Festivity->tag, $festivity ); $this->Messages[] = sprintf( - "ITALIA: la %s '%s' (%s), aggiunta al calendario nell'edizione del Messale Romano del 1983 pubblicata dalla CEI, è soppressa dalla %s '%s' nell'anno %d", - $row->DISPLAYGRADE !== "" ? $row->DISPLAYGRADE : $this->LitGrade->i18n( $row->GRADE, false ), - '' . $row->NAME . '', - $this->dayAndMonth->format( $currentFeastDate->format( 'U' ) ), - $coincidingFestivity->grade, - $coincidingFestivity->event->name, + /**translators: + * 1. Name of the first coinciding Memorial + * 2. Name of the second coinciding Memorial + * 3. Requested calendar year + * 4. Source of the information + */ + _( 'The Memorial \'%1$s\' coincides with another Memorial \'%2$s\' in the year %3$d. They are both reduced in rank to optional memorials.' ), + $row->Festivity->name, + $coincidingMemorialName, $this->LitSettings->Year ); - } + break; + case LitGrade::FEAST: + //there seems to be a coincidence with a different Feast on the same day! + //what should we do about this? perhaps move one of them? + $coincidingFestivities = $this->Cal->getCalEventsFromDate( $row->Festivity->DATE ); + $coincidingFeasts = array_filter( $coincidingFestivities, function( $el ) { return $el->grade === LitGrade::FEAST; } ); + $coincidingFeastName = ''; + foreach( $coincidingFeasts as $key => $value ) { + //$this->Cal->setProperty( $key, "grade", LitGrade::MEMORIAL_OPT ); + $coincidingFeastName = $value->name; + } + $this->Messages[] = 'IMPORTANT ' . $this->LitSettings->NationalCalendar . ": " . sprintf( + /**translators: 1. Festivity name, 2. Festivity date, 3. Coinciding festivity name, 4. Requested calendar year */ + 'The Feast \'%1$s\', usually celebrated on %2$s, coincides with another Feast \'%3$s\' in the year %4$d! Does something need to be done about this?', + '' . $row->Festivity->name . '', + '' . $this->dayAndMonth->format( $row->Festivity->DATE->format( 'U' ) ) . '', + '' . $coincidingFeastName . '', + $this->LitSettings->Year + ); + break; + case LitGrade::SOLEMNITY: + //there seems to be a coincidence with a different Solemnity on the same day! + //should we attempt to move to the next open slot? + $this->Messages[] = 'IMPORTANT ' . $this->LitSettings->NationalCalendar . ": " . sprintf( + /**translators: 1. Festivity name, 2. Festivity date, 3. Coinciding festivity name, 4. Requested calendar year */ + 'The Solemnity \'%1$s\', usually celebrated on %2$s, coincides with the Sunday or Solemnity \'%3$s\' in the year %4$d! Does something need to be done about this?', + '' . $row->Festivity->name . '', + '' . $this->dayAndMonth->format( $row->Festivity->DATE->format( 'U' ) ) . '', + '' . $this->Cal->solemnityFromDate( $row->Festivity->DATE )->name . '', + $this->LitSettings->Year + ); + break; } } - private function applyCalendarUSA() : void { - - //The Solemnity of the Immaculate Conception is the Patronal FeastDay of the United States of America - $festivity = $this->Cal->getFestivity( "ImmaculateConception" ); - if( $festivity !== null ) { - $this->makePatron( "ImmaculateConception", "Patronal feastday of the United States of America", 8, 12, LitColor::WHITE ); - } - - //move Saint Vincent Deacon from Jan 22 to Jan 23 in order to allow for National Day of Prayer for the Unborn on Jan 22 - //however if Jan 22 is a Sunday, National Day of Prayer for the Unborn is moved to Jan 23 ( in place of Saint Vincent Deacon ) - $festivity = $this->Cal->getFestivity( "StVincentDeacon" ); - if( $festivity !== null ){ - //I believe we don't have to worry about suppressing, because if it's on a Sunday it won't exist already - //so if the National Day of Prayer happens on a Sunday and must be moved to Monday, Saint Vincent will be already gone anyways - $StVincentDeaconNewDate = $festivity->date->add( new DateInterval( 'P1D' ) ); - $this->Cal->moveFestivityDate( "StVincentDeacon", $StVincentDeaconNewDate ); - //let's not worry about translating these messages, just leave them in English - $this->Messages[] = sprintf( - "USA: The Memorial '%s' was moved from Jan 22 to Jan 23 to make room for the National Day of Prayer for the Unborn, as per the 2011 Roman Missal issued by the USCCB", - '' . $festivity->name . '' - ); - $this->Cal->setProperty( "StVincentDeacon", "name", "[ USA ] " . $festivity->name ); - } + private function createNewRegionalOrNationalFestivity( object $row ) : void { + if( + property_exists( $row->Festivity, 'strtotime' ) + && $row->Festivity->strtotime !== '' + ) { + $festivityDateTS = strtotime( $row->Festivity->strtotime . ' ' . $this->LitSettings->Year . ' UTC' ); + $row->Festivity->DATE = new LitDateTime( "@$festivityDateTS" ); + $row->Festivity->DATE->setTimeZone(new DateTimeZone('UTC')); + } + else if( + property_exists( $row->Festivity, 'month' ) + && $row->Festivity->month >= 1 + && $row->Festivity->month <= 12 + && property_exists( $row->Festivity, 'day' ) + && $row->Festivity->day >= 1 + && $row->Festivity->day <= cal_days_in_month(CAL_GREGORIAN, $row->Festivity->month, $this->LitSettings->Year) + ) { + $row->Festivity->DATE = LitDateTime::createFromFormat( '!j-n-Y', "{$row->Festivity->day}-{$row->Festivity->month}-{$this->LitSettings->Year}", new DateTimeZone( 'UTC' ) ); + } else { + ob_start(); + var_dump($row); + $a=ob_get_contents(); + ob_end_clean(); + $this->Messages[] = _( 'We should be creating a new festivity, however we do not seem to have the correct date information in order to proceed' ) . ' :: ' . $a; + return; + } + if( $this->festivityCanBeCreated( $row ) ) { + if( $this->festivityDoesNotCoincide( $row ) ) { + if( !property_exists( $row->Festivity, 'type' ) || !LitFeastType::isValid( $row->Festivity->type ) ) { + $row->Festivity->type = property_exists( $row->Festivity, 'strtotime' ) ? LitFeastType::MOBILE : LitFeastType::FIXED; + } + $festivity = new Festivity( $row->Festivity->name, $row->Festivity->DATE, $row->Festivity->color, $row->Festivity->type, $row->Festivity->grade, $row->Festivity->common ); + $this->Cal->addFestivity( $row->Festivity->tag, $festivity ); + } else { + $this->handleFestivityCreationWithCoincidence( $row ); + } + $infoSource = 'unknown'; + if( property_exists( $row->Metadata, 'decreeURL' ) ) { + $infoSource = $this->elaborateDecreeSource( $row ); + } + else if( property_exists( $row->Metadata, 'missal' ) ) { + $infoSource = RomanMissal::getName( $row->Metadata->missal ); + } - $festivity = $this->Cal->getFestivity( "StsJeanBrebeuf" ); - if( $festivity !== null ) { - //if it exists, it means it's not on a Sunday, so we can go ahead and elevate it to Memorial - $this->Cal->setProperty( "StsJeanBrebeuf", "grade", LitGrade::MEMORIAL ); + $formattedDateStr = $this->LitSettings->Locale === LitLocale::LATIN ? ( $row->Festivity->DATE->format( 'j' ) . ' ' . LitMessages::LATIN_MONTHS[ (int)$row->Festivity->DATE->format( 'n' ) ] ) : + ( $this->LitSettings->Locale === LitLocale::ENGLISH ? $row->Festivity->DATE->format( 'F jS' ) : + $this->dayAndMonth->format( $row->Festivity->DATE->format( 'U' ) ) + ); + $dateStr = property_exists( $row->Festivity, 'strtotime' ) && $row->Festivity->strtotime !== '' ? '' . $row->Festivity->strtotime . '' : $formattedDateStr; $this->Messages[] = sprintf( - "USA: The optional memorial '%s' is elevated to Memorial on Oct 19 as per the 2011 Roman Missal issued by the USCCB, applicable to the year %d", - '' . $festivity->name . '', + /**translators: + * 1. Grade or rank of the festivity + * 2. Name of the festivity + * 3. Day of the festivity + * 4. Year from which the festivity has been added + * 5. Source of the information + * 6. Requested calendar year + */ + _( 'The %1$s \'%2$s\' has been added on %3$s since the year %4$d (%5$s), applicable to the year %6$d.' ), + $this->LitGrade->i18n( $row->Festivity->grade, false ), + $row->Festivity->name, + $dateStr, + $row->Metadata->sinceYear, + $infoSource, $this->LitSettings->Year ); - $this->Cal->setProperty( "StsJeanBrebeuf", "name", "[ USA ] " . $festivity->name ); - - $festivity1 = $this->Cal->getFestivity( "StPaulCross" ); - if( $festivity1 !== null ){ //of course it will exist if StsJeanBrebeuf exists, they are originally on the same day - $this->Cal->moveFestivityDate( "StPaulCross", $festivity1->date->add( new DateInterval( 'P1D' ) ) ); - if( $this->Cal->inSolemnitiesFeastsOrMemorials( $festivity1->date ) ) { - $this->Messages[] = sprintf( - "USA: The optional memorial '%s' is transferred from Oct 19 to Oct 20 as per the 2011 Roman Missal issued by the USCCB, to make room for '%s' elevated to the rank of Memorial, however in the year %d it is superseded by a higher ranking liturgical event", - '' . $festivity1->name . '', - '' . $festivity->name . '', - $this->LitSettings->Year - ); - $this->Cal->removeFestivity( "StPaulCross" ); - }else{ - $this->Messages[] = sprintf( - 'USA: The optional memorial \'%1$s\' is transferred from Oct 19 to Oct 20 as per the 2011 Roman Missal issued by the USCCB, to make room for \'%2$s\' elevated to the rank of Memorial: applicable to the year %3$d.', - '' . $festivity1->name . '', - '' . $festivity->name . '', - $this->LitSettings->Year - ); - $this->Cal->setProperty( "StPaulCross", "name", "[ USA ] " . $festivity1->name ); + }// else { + //$this->handleCoincidenceDecree( $row ); + //} + } + + private function handleNationalCalendarRows( array $rows ) : void { + foreach( $rows as $row ) { + if( $this->LitSettings->Year >= $row->Metadata->sinceYear ) { + if( property_exists( $row->Metadata, "untilYear" ) && $this->LitSettings->Year >= $row->Metadata->untilYear ) { + continue; + } else { + //if either the property doesn't exist (so no limit is set) + //or there is a limit but we are within those limits + switch( $row->Metadata->action ) { + case "makePatron": + $festivity = $this->Cal->getFestivity( $row->Festivity->tag ); + if( $festivity !== null ) { + if( $festivity->grade !== $row->Festivity->grade ) { + $this->Cal->setProperty( $row->Festivity->tag, "grade", $row->Festivity->grade ); + } + $this->Cal->setProperty( $row->Festivity->tag, "name", $row->Festivity->name ); + } else { + $this->handleMissingFestivity( $row ); + } + break; + case "createNew": + $this->createNewRegionalOrNationalFestivity( $row ); + break; + case "setProperty": + switch( $row->Metadata->property ) { + case "name": + $this->Cal->setProperty( $row->Festivity->tag, "name", $row->Festivity->name ); + break; + case "grade": + $this->Cal->setProperty( $row->Festivity->tag, "grade", $row->Festivity->grade ); + break; + } + break; + case "moveFestivity": + $festivityNewDate = LitDateTime::createFromFormat( '!j-n-Y', $row->Festivity->day.'-'.$row->Festivity->month.'-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $this->moveFestivityDate( $row->Festivity->tag, $festivityNewDate, $row->Metadata->reason, $row->Metadata->missal ); + break; + } } } } - else{ - //if Oct 19 is a Sunday or Solemnity, Saint Paul of the Cross won't exist. But it still needs to be moved to Oct 20 so we must create it again - //just keep in mind the StsJeanBrebeuf also won't exist, so we need to retrieve the name from the tempCal - $currentFeastDate = DateTime::createFromFormat( '!j-n-Y', '20-10-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); - $festivity = $this->Cal->getFestivity( "StPaulCross" ); - if( !$this->Cal->inSolemnities( $currentFeastDate ) && $festivity === null ) { - $row = $this->tempCal[ RomanMissal::EDITIO_TYPICA_1970 ][ "StPaulCross" ]; - $row2 = $this->tempCal[ RomanMissal::EDITIO_TYPICA_1970 ][ "StsJeanBrebeuf" ]; - $festivity = new Festivity( "[ USA ] " . $row->NAME, $currentFeastDate, $row->COLOR, LitFeastType::FIXED, $row->GRADE, $row->COMMON ); - $this->Cal->addFestivity( "StPaulCross", $festivity ); - $this->Messages[] = sprintf( - 'USA: The optional memorial \'%1$s\' is transferred from Oct 19 to Oct 20 as per the 2011 Roman Missal issued by the USCCB, to make room for \'%2$s\' elevated to the rank of Memorial: applicable to the year %3$d.', - $row->NAME, - '' . $row2->NAME . '', - $this->LitSettings->Year - ); - } - } - - //The fourth Thursday of November is Thanksgiving - $thanksgivingDateTS = strtotime( 'fourth thursday of november ' . $this->LitSettings->Year . ' UTC' ); - $thanksgivingDate = new DateTime( "@$thanksgivingDateTS", new DateTimeZone( 'UTC' ) ); - $festivity = new Festivity( "[ USA ] Thanksgiving", $thanksgivingDate, LitColor::WHITE, LitFeastType::MOBILE, LitGrade::MEMORIAL, '', 'National Holiday' ); - $this->Cal->addFestivity( "ThanksgivingDay", $festivity ); - - $currentFeastDate = DateTime::createFromFormat( '!j-n-Y', '18-7-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); - $this->moveFestivityDate( "StCamillusDeLellis", $currentFeastDate, "Blessed Kateri Tekakwitha" ); + } - $currentFeastDate = DateTime::createFromFormat( '!j-n-Y', '5-7-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); - $this->moveFestivityDate( "StElizabethPortugal", $currentFeastDate, "Independence Day" ); + private function applyNationalCalendar() : void { + //first thing is apply any wider region festivities, such as Patron Saints of the Wider Region (example: Europe) + if( $this->WiderRegionData !== null && property_exists( $this->WiderRegionData, "LitCal" ) ) { + $this->handleNationalCalendarRows( $this->WiderRegionData->LitCal ); + } - $this->readPropriumDeSanctisJSONData( RomanMissal::USA_EDITION_2011 ); + if( $this->NationalData !== null && property_exists( $this->NationalData, "LitCal" ) ) { + $this->handleNationalCalendarRows( $this->NationalData->LitCal ); + } - foreach ( $this->tempCal[ RomanMissal::USA_EDITION_2011 ] as $row ) { - $currentFeastDate = DateTime::createFromFormat( '!j-n-Y', $row->DAY . '-' . $row->MONTH . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); - if( !$this->Cal->inSolemnities( $currentFeastDate ) ) { - $festivity = new Festivity( "[ USA ] " . $row->NAME, $currentFeastDate, $row->COLOR, LitFeastType::FIXED, $row->GRADE, $row->COMMON, $row->DISPLAYGRADE ); - $this->Cal->addFestivity( $row->TAG, $festivity ); - } - else if( self::DateIsSunday( $currentFeastDate ) && $row->TAG === "PrayerUnborn" ){ - $festivity = new Festivity( "[ USA ] " . $row->NAME, $currentFeastDate->add( new DateInterval( 'P1D' ) ), $row->COLOR, LitFeastType::FIXED, $row->GRADE, $row->COMMON, $row->DISPLAYGRADE ); - $this->Cal->addFestivity( $row->TAG, $festivity ); - $this->Messages[] = sprintf( - "USA: The National Day of Prayer for the Unborn is set to Jan 22 as per the 2011 Roman Missal issued by the USCCB, however since it coincides with a Sunday or a Solemnity in the year %d, it has been moved to Jan 23", - $this->LitSettings->Year - ); + if( $this->NationalData !== null && property_exists( $this->NationalData, "Metadata" ) && property_exists( $this->NationalData->Metadata, "Missals" ) ) { + if( $this->NationalData->Metadata->Region === 'UNITED STATES' ) { + $this->NationalData->Metadata->Region = 'USA'; } - else{ - $this->Messages[] = sprintf( - "USA: the %s '%s', added to the calendar as per the 2011 Roman Missal issued by the USCCB, is superseded by a Sunday or a Solemnity in the year %d", - $row->DISPLAYGRADE !== "" ? $row->DISPLAYGRADE : $this->LitGrade->i18n( $row->GRADE, false ), - '' . $row->NAME . '', - $this->LitSettings->Year - ); + $this->Messages[] = "Found Missals for region " . $this->NationalData->Metadata->Region. ": " . implode(', ', $this->NationalData->Metadata->Missals); + foreach( $this->NationalData->Metadata->Missals as $missal ) { + $yearLimits = RomanMissal::getYearLimits( $missal ); + if( $this->LitSettings->Year >= $yearLimits->sinceYear ) { + if( property_exists( $yearLimits, "untilYear" ) && $this->LitSettings->Year >= $yearLimits->untilYear ) { + continue; + } else { + if( RomanMissal::getSanctoraleFileName( $missal ) !== false ) { + $this->Messages[] = sprintf( + /**translators: Name of the Roman Missal */ + _( 'Found a sanctorale data file for %s' ), + RomanMissal::getName( $missal ) + ); + $this->loadPropriumDeSanctisData( $missal ); + foreach ( $this->tempCal[ $missal ] as $row ) { + $currentFeastDate = LitDateTime::createFromFormat( '!j-n-Y', $row->DAY . '-' . $row->MONTH . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + if( !$this->Cal->inSolemnitiesOrFeasts( $currentFeastDate ) ) { + $festivity = new Festivity( "[ {$this->NationalData->Metadata->Region} ] " . $row->NAME, $currentFeastDate, $row->COLOR, LitFeastType::FIXED, $row->GRADE, $row->COMMON, $row->DISPLAYGRADE ); + $this->Cal->addFestivity( $row->TAG, $festivity ); + } + else{ + if( self::DateIsSunday( $currentFeastDate ) && $row->TAG === "PrayerUnborn" ) { + $festivity = new Festivity( "[ USA ] " . $row->NAME, $currentFeastDate->add( new DateInterval( 'P1D' ) ), $row->COLOR, LitFeastType::FIXED, $row->GRADE, $row->COMMON, $row->DISPLAYGRADE ); + $this->Cal->addFestivity( $row->TAG, $festivity ); + $this->Messages[] = sprintf( + "USA: The National Day of Prayer for the Unborn is set to Jan 22 as per the 2011 Roman Missal issued by the USCCB, however since it coincides with a Sunday or a Solemnity in the year %d, it has been moved to Jan 23", + $this->LitSettings->Year + ); + } else { + $coincidingFestivity = $this->Cal->determineSundaySolemnityOrFeast( $currentFeastDate, $this->LitSettings ); + $this->Messages[] = sprintf( + /**translators: + * 1. Festivity grade + * 2. Festivity name + * 3. Festivity date + * 4. Edition of the Roman Missal + * 5. Superseding festivity grade + * 6. Superseding festivity name + * 7. Requested calendar year + */ + $this->NationalData->Metadata->Region . ": " . _( 'The %1$s \'%2$s\' (%3$s), added to the national calendar in the %4$s, is superseded by the %5$s \'%6$s\' in the year %7$d' ), + $row->DISPLAYGRADE !== "" ? $row->DISPLAYGRADE : $this->LitGrade->i18n( $row->GRADE, false ), + '' . $row->NAME . '', + $this->dayAndMonth->format( $currentFeastDate->format( 'U' ) ), + RomanMissal::getName( $missal ), + $coincidingFestivity->grade, + $coincidingFestivity->event->name, + $this->LitSettings->Year + ); + } + } + } + } else { + $this->Messages[] = sprintf( + /**translators: Name of the Roman Missal */ + _( 'Could not find a sanctorale data file for %s' ), + RomanMissal::getName( $missal ) + ); + } + } + } } - } - } + } else { + $this->Messages[] = "Did not find any Missals for region " . $this->NationalData->Metadata->Region; + } + } + + // private function makePatron( string $tag, string $nameSuffix, int $day, int $month, array|string $color, string $EditionRomanMissal = RomanMissal::EDITIO_TYPICA_1970 ) { + // $festivity = $this->Cal->getFestivity( $tag ); + // if( $festivity !== null ) { + // if( $festivity->grade < LitGrade::FEAST ) { + // $this->Cal->setProperty( $tag, "grade", LitGrade::FEAST ); + // } + // $this->Cal->setProperty( $tag, "name", $festivity->name . ", " . $nameSuffix ); + // $this->Cal->setProperty( $tag, "common", LitCommon::PROPRIO ); + // } else{ + // //check what's going on, for example, if it's a Sunday or Solemnity + // $currentFeastDate = LitDateTime::createFromFormat( '!j-n-Y', "{$day}-{$month}-" . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + // $row = $this->tempCal[ $EditionRomanMissal ][ $tag ]; + // //let's also get the name back from the database, so we can give some feedback and maybe even recreate the festivity + // $FestivityName = $row->NAME . ", " . $nameSuffix; + // if( $this->Cal->inSolemnitiesFeastsOrMemorials( $currentFeastDate ) || self::DateIsSunday( $currentFeastDate ) ) { + // $coincidingFestivity = new stdClass(); + // $coincidingFestivity->event = $this->Cal->solemnityFromDate( $currentFeastDate ); + // if ( self::DateIsSunday( $currentFeastDate ) && $coincidingFestivity->event->grade < LitGrade::SOLEMNITY ){ + // //it's a Sunday + // $coincidingFestivity->grade = $this->LitSettings->Locale === LitLocale::LATIN ? 'Die Domini' : ucfirst( $this->dayOfTheWeek->format( $currentFeastDate->format( 'U' ) ) ); + // } else if ( $this->Cal->inSolemnities( $currentFeastDate ) ) { + // //it's a Feast of the Lord or a Solemnity + // $coincidingFestivity->grade = ( $coincidingFestivity->event->grade > LitGrade::SOLEMNITY ? '' . $this->LitGrade->i18n( $coincidingFestivity->event->grade, false ) . '' : $this->LitGrade->i18n( $coincidingFestivity->grade, false ) ); + // } else if ( $this->Cal->inFeastsOrMemorials( $currentFeastDate ) ) { + // //we should probably be able to create it anyways in this case? + // $this->Cal->addFestivity( $tag, new Festivity( $FestivityName, $currentFeastDate, $color, LitFeastType::FIXED, LitGrade::FEAST, LitCommon::PROPRIO ) ); + // $coincidingFestivity->grade = $this->LitGrade->i18n( $coincidingFestivity->event->grade, false ); + // } + // $this->Messages[] = 'IMPORTANT ' . sprintf( + // /**translators: + // * 1. Grade of the festivity + // * 2. Name of the festivity + // * 3. Date on which the festivity is usually celebrated + // * 4. Grade of the superseding festivity + // * 5. Name of the superseding festivity + // * 6. Requested calendar year + // */ + // _( 'The %1$s \'%2$s\', usually celebrated on %3$s, is suppressed by the %4$s \'%5$s\' in the year %6$d.' ), + // $this->LitGrade->i18n( LitGrade::FEAST, false ), + // $FestivityName, + // $this->dayAndMonth->format( $currentFeastDate->format( 'U' ) ), + // $coincidingFestivity->grade, + // $coincidingFestivity->event->name, + // $this->LitSettings->Year + // ); + // } + // } + // } - /**currently only using this for the USA calendar - * The celebrations being transferred are all from the 1970 Editio Typica - * - * If it were to become useful for other national calendars, - * we might have to abstract out the Calendar that is the source - * of the festivity that is being transferred + /** + * So far, the celebrations being transferred are all originally from the 1970 Editio Typica + * and they are currently only celebrations from the USA calendar... + * However the method should work for any calendar */ - private function moveFestivityDate( string $tag, DateTime $newDate, string $inFavorOf ) { + private function moveFestivityDate( string $tag, DateTime $newDate, string $inFavorOf, $missal ) { $festivity = $this->Cal->getFestivity( $tag ); $newDateStr = $newDate->format('F jS'); - if( !$this->Cal->inSolemnities( $newDate ) ) { - if( $festivity !== null ){ - //Move from old date to new date, to make room for another celebration - $this->Cal->moveFestivityDate( $tag, $newDate ); + if( !$this->Cal->inSolemnitiesFeastsOrMemorials( $newDate ) ) { + if( $festivity !== null ) { $oldDateStr = $festivity->date->format('F jS'); + $this->Cal->moveFestivityDate( $tag, $newDate ); } else{ //if it was suppressed on the original date because of a higher ranking celebration, //we should recreate it on the new date - $row = $this->tempCal[ RomanMissal::EDITIO_TYPICA_1970 ][ $tag ]; - $festivity = new Festivity( $row->NAME, $newDate, $row->COLOR, LitFeastType::FIXED, $row->GRADE, $row->COMMON ); - $this->Cal->addFestivity( $tag, $festivity ); - $oldDate = DateTime::createFromFormat( '!j-n-Y', $row->DAY . '-' . $row->MONTH . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); - $oldDateStr = $oldDate->format('F jS'); + //except in the case of Saint Vincent Deacon when we're dealing with the Roman Missal USA edition, + //since the National Day of Prayer will take over the new date + if( $tag !== "StVincentDeacon" || $missal !== RomanMissal::USA_EDITION_2011 ) { + $row = $this->tempCal[ RomanMissal::EDITIO_TYPICA_1970 ][ $tag ]; + $festivity = new Festivity( $row->NAME, $newDate, $row->COLOR, LitFeastType::FIXED, $row->GRADE, $row->COMMON ); + $this->Cal->addFestivity( $tag, $festivity ); + $oldDate = LitDateTime::createFromFormat( '!j-n-Y', $row->DAY . '-' . $row->MONTH . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + $oldDateStr = $oldDate->format('F jS'); + } + } + + //If the festivity has been successfully recreated, let's make a note about that + if( $festivity !== null ) { + $this->Messages[] = sprintf( + /**translators: 1. Festivity grade, 2. Festivity name, 3. New festivity name, 4: Requested calendar year, 5. Old date, 6. New date */ + _( 'The %1$s \'%2$s\' is transferred from %5$s to %6$s as per the %7$s, to make room for \'%3$s\': applicable to the year %4$d.' ), + $this->LitGrade->i18n( $festivity->grade ), + '' . $festivity->name . '', + '' . $inFavorOf . '', + $this->LitSettings->Year, + $oldDateStr, + $newDateStr, + RomanMissal::getName( $missal ) + ); + //$this->Cal->setProperty( $tag, "name", "[ USA ] " . $festivity->name ); } - $this->Messages[] = sprintf( - 'USA: The optional memorial \'%1$s\' is transferred from %4$s to %5$s as per the 2011 Roman Missal issued by the USCCB, to make room for the Memorial \'%2$s\': applicable to the year %3$d.', - '' . $festivity->name . '', - '' . $inFavorOf . '', - $this->LitSettings->Year, - $oldDateStr, - $newDateStr - ); - $this->Cal->setProperty( $tag, "name", "[ USA ] " . $festivity->name ); } else{ if( $festivity !== null ) { $oldDateStr = $festivity->date->format('F jS'); - //If the new date is already covered by a Solmenity, then we can't move the celebration, so we simply suppress it + $coincidingFestivity = $this->Cal->determineSundaySolemnityOrFeast( $newDate ); + //If the new date is already covered by a Solemnity, Feast or Memorial, then we can't move the celebration, so we simply suppress it $this->Messages[] = sprintf( - 'USA: The optional memorial \'%1$s\' is transferred from %4$s to %5$s as per the 2011 Roman Missal issued by the USCCB, to make room for the Memorial \'%2$s\', however it is superseded by a higher ranking festivity in the year %3$d.', + /**translators: 1. Festivity grade, 2. Festivity name, 3. Old date, 4. New date, 5. Source of the information, 6. New festivity name, 7. Superseding festivity grade, 8. Superseding festivity name, 9: Requested calendar year */ + _( 'The %1$s \'%2$s\' would have been transferred from %3$s to %4$s as per the %5$s, to make room for \'%6$s\', however it is suppressed by the %7$s \'%8$s\' in the year %9$d.' ), + $this->LitGrade->i18n( $festivity->grade ), '' . $festivity->name . '', - '' . $inFavorOf . '', - $this->LitSettings->Year, $oldDateStr, - $newDateStr + $newDateStr, + RomanMissal::getName( $missal ), + '' . $inFavorOf . '', + $coincidingFestivity->grade, + $coincidingFestivity->event->name, + $this->LitSettings->Year ); $this->Cal->removeFestivity( $tag ); } @@ -1896,7 +2099,7 @@ private static function DateIsNotSunday( DateTime $dt ) : bool { private function calculateUniversalCalendar() : void { - $this->populatePropriumDeTempore(); + $this->loadPropriumDeTemporeData(); /** * CALCULATE LITURGICAL EVENTS BASED ON THE ORDER OF PRECEDENCE OF LITURGICAL DAYS ( LY 59 ) * General Norms for the Liturgical Year and the Calendar ( issued on Feb. 14 1969 ) @@ -1915,7 +2118,7 @@ private function calculateUniversalCalendar() : void { $this->calculateEasterOctave(); //3. Solemnities of the Lord, of the Blessed Virgin Mary, and of saints listed in the General Calendar $this->calculateMobileSolemnitiesOfTheLord(); - $this->readPropriumDeSanctisJSONData( RomanMissal::EDITIO_TYPICA_1970 ); + $this->loadPropriumDeSanctisData( RomanMissal::EDITIO_TYPICA_1970 ); $this->calculateFixedSolemnities(); //this will also handle All Souls Day //4. PROPER SOLEMNITIES: @@ -1949,16 +2152,16 @@ private function calculateUniversalCalendar() : void { $this->calculateMemorials( LitGrade::MEMORIAL, RomanMissal::EDITIO_TYPICA_1970 ); if ( $this->LitSettings->Year >= 2002 ) { - $this->readPropriumDeSanctisJSONData( RomanMissal::EDITIO_TYPICA_TERTIA_2002 ); + $this->loadPropriumDeSanctisData( RomanMissal::EDITIO_TYPICA_TERTIA_2002 ); $this->calculateMemorials( LitGrade::MEMORIAL, RomanMissal::EDITIO_TYPICA_TERTIA_2002 ); } if( $this->LitSettings->Year >= 2008 ) { - $this->readPropriumDeSanctisJSONData( RomanMissal::EDITIO_TYPICA_TERTIA_EMENDATA_2008 ); + $this->loadPropriumDeSanctisData( RomanMissal::EDITIO_TYPICA_TERTIA_EMENDATA_2008 ); $this->calculateMemorials( LitGrade::MEMORIAL, RomanMissal::EDITIO_TYPICA_TERTIA_EMENDATA_2008 ); } - $this->readMemorialsFromDecreesJSONData(); + $this->loadMemorialsFromDecreesData(); $this->applyDecrees( LitGrade::MEMORIAL ); //11. Proper obligatory memorials, and that is: @@ -2001,33 +2204,34 @@ private function calculateUniversalCalendar() : void { private function applyDiocesanCalendar() { foreach( $this->DiocesanData->LitCal as $key => $obj ) { - if( is_array( $obj->color ) ) { - $obj->color = implode( ',', $obj->color ); - } //if sinceYear is undefined or null or empty, let's go ahead and create the event in any case //creation will be restricted only if explicitly defined by the sinceYear property - if( $this->LitSettings->Year >= $obj->sinceYear || $obj->sinceYear === null || $obj->sinceYear == '' ) { - $currentFeastDate = DateTime::createFromFormat( '!j-n-Y', $obj->day . '-' . $obj->month . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); + if( $this->LitSettings->Year >= $obj->sinceYear || $obj->sinceYear === null || $obj->sinceYear === 0 ) { + $currentFeastDate = LitDateTime::createFromFormat( '!j-n-Y', $obj->day . '-' . $obj->month . '-' . $this->LitSettings->Year, new DateTimeZone( 'UTC' ) ); if( $obj->grade > LitGrade::FEAST ) { if( $this->Cal->inSolemnities( $currentFeastDate ) && $key != $this->Cal->solemnityKeyFromDate( $currentFeastDate ) ) { //there seems to be a coincidence with a different Solemnity on the same day! //should we attempt to move to the next open slot? - $this->Messages[] = 'IMPORTANT ' . sprintf( - $this->LitSettings->DiocesanCalendar . ": the Solemnity '%s', proper to the calendar of the " . $this->GeneralIndex->{$this->LitSettings->DiocesanCalendar}->diocese . " and usually celebrated on %s, coincides with the Sunday or Solemnity '%s' in the year %d! Does something need to be done about this?", + $this->Messages[] = 'IMPORTANT ' . $this->LitSettings->DiocesanCalendar . ": " . sprintf( + /**translators: 1: Festivity name, 2: Name of the diocese, 3: Festivity date, 4: Coinciding festivity name, 5: Requested calendar year */ + 'The Solemnity \'%1$s\', proper to the calendar of the %2$s and usually celebrated on %3$s, coincides with the Sunday or Solemnity \'%4$s\' in the year %5$d! Does something need to be done about this?', '' . $obj->name . '', + $this->GeneralIndex->{$this->LitSettings->DiocesanCalendar}->diocese, '' . $this->dayAndMonth->format( $currentFeastDate->format( 'U' ) ) . '', '' . $this->Cal->solemnityFromDate( $currentFeastDate )->name . '', $this->LitSettings->Year ); } - $this->Cal->addFestivity( $this->LitSettings->DiocesanCalendar . "_" . $key, new Festivity( "[ " . $this->GeneralIndex->{$this->LitSettings->DiocesanCalendar}->diocese . " ] " . $obj->name, $currentFeastDate, strtolower( $obj->color ), LitFeastType::FIXED, $obj->grade, $obj->common ) ); + $this->Cal->addFestivity( $this->LitSettings->DiocesanCalendar . "_" . $key, new Festivity( "[ " . $this->GeneralIndex->{$this->LitSettings->DiocesanCalendar}->diocese . " ] " . $obj->name, $currentFeastDate, $obj->color, LitFeastType::FIXED, $obj->grade, $obj->common ) ); } else if ( $obj->grade <= LitGrade::FEAST && !$this->Cal->inSolemnities( $currentFeastDate ) ) { - $this->Cal->addFestivity( $this->LitSettings->DiocesanCalendar . "_" . $key, new Festivity( "[ " . $this->GeneralIndex->{$this->LitSettings->DiocesanCalendar}->diocese . " ] " . $obj->name, $currentFeastDate, strtolower( $obj->color ), LitFeastType::FIXED, $obj->grade, $obj->common ) ); + $this->Cal->addFestivity( $this->LitSettings->DiocesanCalendar . "_" . $key, new Festivity( "[ " . $this->GeneralIndex->{$this->LitSettings->DiocesanCalendar}->diocese . " ] " . $obj->name, $currentFeastDate, $obj->color, LitFeastType::FIXED, $obj->grade, $obj->common ) ); } else { - $this->Messages[] = sprintf( - $this->LitSettings->DiocesanCalendar . ": the %s '%s', proper to the calendar of the " . $this->GeneralIndex->{$this->LitSettings->DiocesanCalendar}->diocese . " and usually celebrated on %s, is suppressed by the Sunday or Solemnity %s in the year %d", + $this->Messages[] = $this->LitSettings->DiocesanCalendar . ": " . sprintf( + /**translators: 1: Festivity grade, 2: Festivity name, 3: Name of the diocese, 4: Festivity date, 5: Coinciding festivity name, 6: Requested calendar year */ + 'The %1$s \'%2$s\', proper to the calendar of the %3$s and usually celebrated on %4$s, is suppressed by the Sunday or Solemnity %5$s in the year %6$d', $this->LitGrade->i18n( $obj->grade, false ), '' . $obj->name . '', + $this->GeneralIndex->{$this->LitSettings->DiocesanCalendar}->diocese, '' . $this->dayAndMonth->format( $currentFeastDate->format( 'U' ) ) . '', '' . $this->Cal->solemnityFromDate( $currentFeastDate )->name . '', $this->LitSettings->Year @@ -2160,45 +2364,49 @@ private function generateResponse() { $SerializeableLitCal->Settings->DiocesanCalendar = $this->LitSettings->DiocesanCalendar; } - $SerializeableLitCal->Metadata->VERSION = self::API_VERSION; - $SerializeableLitCal->Metadata->RequestHeaders = $this->APICore->getJsonEncodedRequestHeaders(); - $SerializeableLitCal->Metadata->Solemnities = $this->Cal->getSolemnities(); - $SerializeableLitCal->Metadata->FeastsMemorials = $this->Cal->getFeastsAndMemorials(); + $SerializeableLitCal->Metadata->VERSION = self::API_VERSION; + $SerializeableLitCal->Metadata->RequestHeaders = $this->APICore->getJsonEncodedRequestHeaders(); + $SerializeableLitCal->Metadata->Solemnities = $this->Cal->getSolemnities(); + $SerializeableLitCal->Metadata->FeastsMemorials = $this->Cal->getFeastsAndMemorials(); //make sure we have an engineCache folder for the current Version - if( realpath( "engineCache/v" . str_replace( ".","_",self::API_VERSION ) ) === false ){ - mkdir( "engineCache/v" . str_replace( ".","_",self::API_VERSION ), 0755, true ); + if( realpath( "engineCache/v" . str_replace( ".", "_", self::API_VERSION ) ) === false ) { + mkdir( "engineCache/v" . str_replace( ".", "_", self::API_VERSION ), 0755, true ); } switch ( $this->LitSettings->ReturnType ) { case ReturnType::JSON: - file_put_contents( $this->CACHEFILE, json_encode( $SerializeableLitCal ) ); - echo json_encode( $SerializeableLitCal ); + $response = json_encode( $SerializeableLitCal ); break; case ReturnType::XML: $jsonStr = json_encode( $SerializeableLitCal ); $jsonObj = json_decode( $jsonStr, true ); $xml = new SimpleXMLElement ( "" ); LitFunc::convertArray2XML( $jsonObj, $xml ); - file_put_contents( $this->CACHEFILE, $xml->asXML() ); - print $xml->asXML(); + $response = $xml->asXML(); break; case ReturnType::ICS: $infoObj = $this->getGithubReleaseInfo(); if( $infoObj->status === "success" ) { - $ical = $this->produceIcal( $SerializeableLitCal, $infoObj->obj ); - file_put_contents( $this->CACHEFILE, $ical ); - echo $ical; + $response = $this->produceIcal( $SerializeableLitCal, $infoObj->obj ); } else{ die( 'Error receiving or parsing info from github about latest release: '.$infoObj->message ); } break; default: - file_put_contents( $this->CACHEFILE, json_encode( $SerializeableLitCal ) ); - echo json_encode( $SerializeableLitCal ); + $response = json_encode( $SerializeableLitCal ); break; } + file_put_contents( $this->CACHEFILE, $response ); + $responseHash = md5( $response ); + header("Etag: \"{$responseHash}\""); + if (!empty( $_SERVER['HTTP_IF_NONE_MATCH'] ) && $_SERVER['HTTP_IF_NONE_MATCH'] === $responseHash) { + header( $_SERVER[ "SERVER_PROTOCOL" ] . " 304 Not Modified" ); + header('Content-Length: 0'); + } else { + echo $response; + } die(); } @@ -2247,13 +2455,23 @@ public function setAllowedReturnTypes( array $returnTypes ) : void { public function Init(){ $this->APICore->Init(); $this->initParameterData(); - $this->loadLocalCalendarData(); + $this->loadDiocesanCalendarData(); $this->APICore->setResponseContentTypeHeader(); + if( $this->cacheFileIsAvailable() ){ //If we already have done the calculation //and stored the results in a cache file //then we're done, just output this and die - echo file_get_contents( $this->CACHEFILE ); + //or better, make the client use it's own cache copy! + $response = file_get_contents( $this->CACHEFILE ); + $responseHash = md5( $response ); + header("Etag: \"{$responseHash}\""); + if (!empty( $_SERVER['HTTP_IF_NONE_MATCH'] ) && $_SERVER['HTTP_IF_NONE_MATCH'] === $responseHash) { + header( $_SERVER[ "SERVER_PROTOCOL" ] . " 304 Not Modified" ); + header('Content-Length: 0'); + } else { + echo $response; + } die(); } else { $this->dieIfBeforeMinYear(); @@ -2261,18 +2479,8 @@ public function Init(){ $this->calculateUniversalCalendar(); if( $this->LitSettings->NationalCalendar !== null ) { - switch( $this->LitSettings->NationalCalendar ){ - case 'ITALY': - $this->applyCalendarItaly(); - break; - case 'USA': - //I don't have any data before 2011 - //I need copies of the calendar from the Missals printed before 2011... - if( $this->LitSettings->Year >= 2011 ) { - $this->applyCalendarUSA(); - } - break; - } + $this->loadNationalCalendarData(); + $this->applyNationalCalendar(); } if( $this->LitSettings->DiocesanCalendar !== null && $this->DiocesanData !== null ) { diff --git a/includes/LitDateTime.php b/includes/LitDateTime.php new file mode 100644 index 00000000..40e58b98 --- /dev/null +++ b/includes/LitDateTime.php @@ -0,0 +1,14 @@ +getTimezone() ), true ); + $returnArr = [ + 'date' => $this->format('c'), //serialize the DateTime object as a PHP timestamp + ...$tz + ]; + return $returnArr; + } +} diff --git a/includes/LitFunc.php b/includes/LitFunc.php index aec9d64f..09ee8cc7 100644 --- a/includes/LitFunc.php +++ b/includes/LitFunc.php @@ -1,5 +1,7 @@ add(new DateInterval($dateDiff)); */ $GregDateDiff = array(); - $GregDateDiff[0] = [DateTime::createFromFormat('!j-n-Y', '4-10-1582'),"P10D"]; //add 10 == GREGORIAN CUTOVER DATE + $GregDateDiff[0] = [LitDateTime::createFromFormat('!j-n-Y', '4-10-1582'),"P10D"]; //add 10 == GREGORIAN CUTOVER DATE $idx = 0; $cc = 10; for($cent = 17;$cent <= 99; $cent++){ if($cent % 4 > 0){ - $GregDateDiff[++$idx] = [DateTime::createFromFormat('!j-n-Y', '28-2-'.$cent.'00'),"P" . ++$cc . "D"]; + $GregDateDiff[++$idx] = [LitDateTime::createFromFormat('!j-n-Y', '28-2-'.$cent.'00'),"P" . ++$cc . "D"]; } } @@ -105,18 +107,18 @@ public static function calcJulianEaster( int $Y, bool $gregCal=false ) : DateTim } } /* - $GregDateDiff[1] = DateTime::createFromFormat('!j-n-Y', '28-2-1700'); //add 11 (1600 was a leap year) - $GregDateDiff[2] = DateTime::createFromFormat('!j-n-Y', '28-2-1800'); //add 12 - $GregDateDiff[3] = DateTime::createFromFormat('!j-n-Y', '28-2-1900'); //add 13 - $GregDateDiff[4] = DateTime::createFromFormat('!j-n-Y', '28-2-2100'); //add 14 (2000 was a leap year) - $GregDateDiff[5] = DateTime::createFromFormat('!j-n-Y', '28-2-2200'); //add 15 - $GregDateDiff[6] = DateTime::createFromFormat('!j-n-Y', '28-2-2300'); //add 16 - $GregDateDiff[7] = DateTime::createFromFormat('!j-n-Y', '28-2-2500'); //add 17 (2400 will be a leap year) - $GregDateDiff[8] = DateTime::createFromFormat('!j-n-Y', '28-2-2600'); //add 18 - $GregDateDiff[9] = DateTime::createFromFormat('!j-n-Y', '28-2-2700'); //add 19 - $GregDateDiff[10] = DateTime::createFromFormat('!j-n-Y', '28-2-2900'); //add 20 (2800 will be a leap year) - $GregDateDiff[11] = DateTime::createFromFormat('!j-n-Y', '28-2-3000'); //add 21 - $GregDateDiff[12] = DateTime::createFromFormat('!j-n-Y', '28-2-3100'); //add 22 + $GregDateDiff[1] = LitDateTime::createFromFormat('!j-n-Y', '28-2-1700'); //add 11 (1600 was a leap year) + $GregDateDiff[2] = LitDateTime::createFromFormat('!j-n-Y', '28-2-1800'); //add 12 + $GregDateDiff[3] = LitDateTime::createFromFormat('!j-n-Y', '28-2-1900'); //add 13 + $GregDateDiff[4] = LitDateTime::createFromFormat('!j-n-Y', '28-2-2100'); //add 14 (2000 was a leap year) + $GregDateDiff[5] = LitDateTime::createFromFormat('!j-n-Y', '28-2-2200'); //add 15 + $GregDateDiff[6] = LitDateTime::createFromFormat('!j-n-Y', '28-2-2300'); //add 16 + $GregDateDiff[7] = LitDateTime::createFromFormat('!j-n-Y', '28-2-2500'); //add 17 (2400 will be a leap year) + $GregDateDiff[8] = LitDateTime::createFromFormat('!j-n-Y', '28-2-2600'); //add 18 + $GregDateDiff[9] = LitDateTime::createFromFormat('!j-n-Y', '28-2-2700'); //add 19 + $GregDateDiff[10] = LitDateTime::createFromFormat('!j-n-Y', '28-2-2900'); //add 20 (2800 will be a leap year) + $GregDateDiff[11] = LitDateTime::createFromFormat('!j-n-Y', '28-2-3000'); //add 21 + $GregDateDiff[12] = LitDateTime::createFromFormat('!j-n-Y', '28-2-3100'); //add 22 */ } return $dateObj; diff --git a/includes/enums/LitColor.php b/includes/enums/LitColor.php index e185b415..1d46d868 100644 --- a/includes/enums/LitColor.php +++ b/includes/enums/LitColor.php @@ -10,6 +10,9 @@ class LitColor { public static array $values = [ "green", "purple", "white", "red", "pink" ]; public static function isValid( string $value ) { + if( strpos($value, ',') ) { + return areValid( explode(',', $value) ); + } return in_array( $value, self::$values ); } diff --git a/includes/enums/LitCommon.php b/includes/enums/LitCommon.php index 53ec55e6..7eb99e3f 100644 --- a/includes/enums/LitCommon.php +++ b/includes/enums/LitCommon.php @@ -162,7 +162,7 @@ public function __construct( string $locale ) { self::PRO_SANCTIS_MULIERIBUS => "Pro sanctis mulieribus" ]; - public static function POSSESSIVE( string $value ) : string { + private static function POSSESSIVE( string $value ) : string { switch( $value ) { case "Blessed Virgin Mary": /**translators: (singular feminine) glue between "From the Common" and the actual common. Latin: leave empty! */ @@ -261,13 +261,21 @@ public static function POSSESSIVE( string $value ) : string { ]; public static function isValid( string $value ) { + if( strpos($value, ',') || strpos($value, ':') ) { + $values = preg_split('/[,:]/', $value); + return self::areValid( $values ); + } return in_array( $value, self::$values ); } public static function areValid( array $values ) { + $values = array_reduce($values, function( $carry, $key ){ + return strpos($key, ':') ? ( $carry + explode(':', $key) ) : ( [ ...$carry, $key ] ); + }, [] ); return empty( array_diff( $values, self::$values ) ); } + /* public static function AB( string|array $value ) : string { if( is_array( $value ) ) { $mapped = array_map('self::AB', $value); @@ -287,9 +295,13 @@ public static function AB( string|array $value ) : string { } } } + */ - public function i18n( string $value ) : string { - if( self::isValid( $value ) ) { + private function i18n( string|array $value ) : string|array { + if( is_array( $value ) && self::areValid( $value ) ) { + return array_map( [$this, 'i18n'], $value ); + } + else if( self::isValid( $value ) ) { if( $this->locale === LitLocale::LATIN ) { return self::LATIN[ $value ]; } else{ @@ -299,7 +311,10 @@ public function i18n( string $value ) : string { return $value; } - public function getPossessive( string $value ) : string { + private function getPossessive( string|array $value ) : string|array { + if( is_array( $value ) ) { + return array_map( [$this, 'getPossessive'], $value ); + } return $this->locale === LitLocale::LATIN ? "" : self::POSSESSIVE( $value ); } @@ -307,12 +322,16 @@ public function getPossessive( string $value ) : string { * Function C * Returns a translated human readable string of the Common or the Proper */ - public function C( string $common="" ) : string { - if ($common !== "") { - if( $common === LitCommon::PROPRIO ) { + public function C( string|array $common="" ) : string|array { + if ( ( is_string( $common ) && $common !== "" ) || is_array( $common ) ) { + if( (is_string( $common ) && $common === LitCommon::PROPRIO) || ( is_array( $common ) && in_array( LitCommon::PROPRIO, $common ) ) ) { $common = $this->i18n( $common ); - } else{ - $commons = explode(",", $common); + } else { + if( is_string( $common ) ) { + $commons = explode(",", $common); + } else { + $commons = $common; + } $commons = array_map(function ($txt) { if( strpos($txt, ":") !== false ){ [$commonGeneral, $commonSpecific] = explode(":", $txt); diff --git a/includes/enums/LitSchema.php b/includes/enums/LitSchema.php new file mode 100644 index 00000000..8f05e7a9 --- /dev/null +++ b/includes/enums/LitSchema.php @@ -0,0 +1,29 @@ + "Schema validation error: Index not updated", + LitSchema::DIOCESAN => "Schema validation error: Diocesan Calendar not created / updated", + LitSchema::NATIONAL => "Schema validation error: National Calendar not created / updated", + LitSchema::PROPRIUMDESANCTIS => "Schema validation error: Proprium de Sanctis data not created / updated", + LitSchema::PROPRIUMDETEMPORE => "Schema validation error: Proprium de Tempore data not created / updated", + LitSchema::WIDERREGION => "Schema validation error: Wider Region data not created / updated", + LitSchema::DECREEMEMORIALS => "Schema validation error: Memorials from Decrees data not created / updated", + LitSchema::I18N => "Schema validation error: Translation data not created / updated", + LitSchema::METADATA => "Schema validation error: LitCalMetadata not valid", + LitSchema::LITCAL => "Schema validation error: LitCal not valid" + ]; + +} diff --git a/includes/enums/RomanMissal.php b/includes/enums/RomanMissal.php index b6066eca..3ca07e79 100644 --- a/includes/enums/RomanMissal.php +++ b/includes/enums/RomanMissal.php @@ -13,47 +13,60 @@ class RomanMissal { const ITALY_EDITION_2020 = "ITALY_2020"; public static array $values = [ - "LITURGY__calendar_propriumdesanctis" => "VATICAN_1970", - "LITURGY__calendar_propriumdesanctis_1971" => "VATICAN_1971", - "LITURGY__calendar_propriumdesanctis_1975" => "VATICAN_1975", - "LITURGY__calendar_propriumdesanctis_2002" => "VATICAN_2002", - "LITURGY__calendar_propriumdesanctis_2008" => "VATICAN_2008", - "LITURGY__USA_calendar_propriumdesanctis_2011" => "USA_2011", - "LITURGY__ITALY_calendar_propriumdesanctis_1983" => "ITALY_1983", - "LITURGY__ITALY_calendar_propriumdesanctis_2020" => "ITALY_2020" + "VATICAN_1970", + "VATICAN_1971", + "VATICAN_1975", + "VATICAN_2002", + "VATICAN_2008", + "USA_2011", + "ITALY_1983", + "ITALY_2020" ]; public static array $names = [ - "VATICAN_1970" => "Editio Typica 1970", - "VATICAN_1971" => "Reimpressio Emendata 1971", - "VATICAN_1975" => "Editio Typica Secunda 1975", - "VATICAN_2002" => "Editio Typica Tertia 2002", - "VATICAN_2008" => "Editio Typica Tertia Emendata 2008", - "USA_2011" => "Roman Missal 2011 Edition", - "ITALY_1983" => "Messale Romano ed. 1983", - "ITALY_2020" => "Messale Romano ed. 2020" + self::EDITIO_TYPICA_1970 => "Editio Typica 1970", + self::REIMPRESSIO_EMENDATA_1971 => "Reimpressio Emendata 1971", + self::EDITIO_TYPICA_SECUNDA_1975 => "Editio Typica Secunda 1975", + self::EDITIO_TYPICA_TERTIA_2002 => "Editio Typica Tertia 2002", + self::EDITIO_TYPICA_TERTIA_EMENDATA_2008 => "Editio Typica Tertia Emendata 2008", + self::USA_EDITION_2011 => "2011 Roman Missal issued by the USCCB", + self::ITALY_EDITION_1983 => "Messale Romano ed. 1983 pubblicata dalla CEI", + self::ITALY_EDITION_2020 => "Messale Romano ed. 2020 pubblicata dalla CEI" ]; public static array $jsonFiles = [ - "VATICAN_1970" => "data/propriumdesanctis_1970/propriumdesanctis_1970.json", - "VATICAN_1971" => false, - "VATICAN_1975" => false, - "VATICAN_2002" => "data/propriumdesanctis_2002/propriumdesanctis_2002.json", - "VATICAN_2008" => "data/propriumdesanctis_2008/propriumdesanctis_2008.json", - "USA_2011" => "data/propriumdesanctis_USA_2011/propriumdesanctis_USA_2011.json", - "ITALY_1983" => "data/propriumdesanctis_ITALY_1983/propriumdesanctis_ITALY_1983.json", - "ITALY_2020" => false + self::EDITIO_TYPICA_1970 => "data/propriumdesanctis_1970/propriumdesanctis_1970.json", + self::REIMPRESSIO_EMENDATA_1971 => false, + self::EDITIO_TYPICA_SECUNDA_1975 => false, + self::EDITIO_TYPICA_TERTIA_2002 => "data/propriumdesanctis_2002/propriumdesanctis_2002.json", + self::EDITIO_TYPICA_TERTIA_EMENDATA_2008 => "data/propriumdesanctis_2008/propriumdesanctis_2008.json", + self::USA_EDITION_2011 => "data/propriumdesanctis_USA_2011/propriumdesanctis_USA_2011.json", + self::ITALY_EDITION_1983 => "data/propriumdesanctis_ITALY_1983/propriumdesanctis_ITALY_1983.json", + self::ITALY_EDITION_2020 => false ]; public static array $i18nPath = [ - "VATICAN_1970" => "data/propriumdesanctis_1970/i18n/", - "VATICAN_1971" => false, - "VATICAN_1975" => false, - "VATICAN_2002" => "data/propriumdesanctis_2002/i18n/", - "VATICAN_2008" => "data/propriumdesanctis_2008/i18n/", - "USA_2011" => false, - "ITALY_1983" => false, - "ITALY_2020" => false + self::EDITIO_TYPICA_1970 => "data/propriumdesanctis_1970/i18n/", + self::REIMPRESSIO_EMENDATA_1971 => false, + self::EDITIO_TYPICA_SECUNDA_1975 => false, + self::EDITIO_TYPICA_TERTIA_2002 => "data/propriumdesanctis_2002/i18n/", + self::EDITIO_TYPICA_TERTIA_EMENDATA_2008 => "data/propriumdesanctis_2008/i18n/", + self::USA_EDITION_2011 => false, + self::ITALY_EDITION_1983 => false, + self::ITALY_EDITION_2020 => false + ]; + + public static array $yearLimits = [ + self::EDITIO_TYPICA_1970 => [ "sinceYear" => 1970 ], + self::REIMPRESSIO_EMENDATA_1971 => [ "sinceYear" => 1971 ], + self::EDITIO_TYPICA_SECUNDA_1975 => [ "sinceYear" => 1975 ], + self::EDITIO_TYPICA_TERTIA_2002 => [ "sinceYear" => 2002 ], + self::EDITIO_TYPICA_TERTIA_EMENDATA_2008 => [ "sinceYear" => 2008 ], + self::USA_EDITION_2011 => [ "sinceYear" => 2011 ], + //the festivities applied in the '83 edition were incorporated into the Latin 2002 edition, + //therefore we no longer need to apply them after the year 2002 since the Latin edition takes precedence + self::ITALY_EDITION_1983 => [ "sinceYear" => 1983, "untilYear" => 2002 ], + self::ITALY_EDITION_2020 => [ "sinceYear" => 2020 ] ]; @@ -65,8 +78,8 @@ public static function isLatinMissal( $value ) : bool { return in_array( $value, self::$values ) && strpos( $value, "VATICAN_" ); } - public static function getSanctoraleTableName( $value ) : string|int|false { - return array_search( $value, self::$values ); + public static function getName( $value ) : string { + return self::$names[ $value ]; } public static function getSanctoraleFileName( $value ) : string|false { @@ -77,7 +90,15 @@ public static function getSanctoraleI18nFilePath( $value ) : string|false { return self::$i18nPath[ $value ]; } - public static function getName( $value ) : string { - return self::$names[ $value ]; + public static function getYearLimits( $value ) : object { + return (object) self::$yearLimits[ $value ]; + } + + public static function produceMetadata() : array { + $reflectionClass = new ReflectionClass(static::class); + $metadata = $reflectionClass->getConstants(); + array_walk($metadata, function(string &$v){ $v = [ "value" => $v, "name" => self::getName( $v ), "sanctoraleFileName" => self::getSanctoraleFileName( $v ), "yearLimits" => self::$yearLimits[ $v ] ]; }); + return $metadata; } + } diff --git a/nations/AMERICAS/en.json b/nations/AMERICAS/en.json new file mode 100644 index 00000000..ef98ecb7 --- /dev/null +++ b/nations/AMERICAS/en.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "[ USA ] Our Lady of Guadalupe" +} diff --git a/nations/AMERICAS/en_CA.json b/nations/AMERICAS/en_CA.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/en_CA.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/en_US.json b/nations/AMERICAS/en_US.json new file mode 100644 index 00000000..ef98ecb7 --- /dev/null +++ b/nations/AMERICAS/en_US.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "[ USA ] Our Lady of Guadalupe" +} diff --git a/nations/AMERICAS/es.json b/nations/AMERICAS/es.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_419.json b/nations/AMERICAS/es_419.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_419.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_AR.json b/nations/AMERICAS/es_AR.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_AR.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_BO.json b/nations/AMERICAS/es_BO.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_BO.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_BR.json b/nations/AMERICAS/es_BR.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_BR.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_BZ.json b/nations/AMERICAS/es_BZ.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_BZ.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_CL.json b/nations/AMERICAS/es_CL.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_CL.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_CO.json b/nations/AMERICAS/es_CO.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_CO.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_CR.json b/nations/AMERICAS/es_CR.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_CR.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_CU.json b/nations/AMERICAS/es_CU.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_CU.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_DO.json b/nations/AMERICAS/es_DO.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_DO.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_EC.json b/nations/AMERICAS/es_EC.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_EC.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_GT.json b/nations/AMERICAS/es_GT.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_GT.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_HN.json b/nations/AMERICAS/es_HN.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_HN.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_MX.json b/nations/AMERICAS/es_MX.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_MX.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_NI.json b/nations/AMERICAS/es_NI.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_NI.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_PA.json b/nations/AMERICAS/es_PA.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_PA.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_PE.json b/nations/AMERICAS/es_PE.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_PE.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_PR.json b/nations/AMERICAS/es_PR.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_PR.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_PY.json b/nations/AMERICAS/es_PY.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_PY.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/es_SV.json b/nations/AMERICAS/es_SV.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/es_SV.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/fr.json b/nations/AMERICAS/fr.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/fr.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/fr_CA.json b/nations/AMERICAS/fr_CA.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/fr_CA.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/pt.json b/nations/AMERICAS/pt.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/pt.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/AMERICAS/pt_BR.json b/nations/AMERICAS/pt_BR.json new file mode 100644 index 00000000..41fcf9a0 --- /dev/null +++ b/nations/AMERICAS/pt_BR.json @@ -0,0 +1,3 @@ +{ + "LadyGuadalupe": "" +} \ No newline at end of file diff --git a/nations/ASIA/ja_JP.json b/nations/ASIA/ja_JP.json new file mode 100644 index 00000000..858f4551 --- /dev/null +++ b/nations/ASIA/ja_JP.json @@ -0,0 +1,3 @@ +{ + "StFrancisXavier": "" +} \ No newline at end of file diff --git a/nations/ASIA/zh_Hans_CN.json b/nations/ASIA/zh_Hans_CN.json new file mode 100644 index 00000000..858f4551 --- /dev/null +++ b/nations/ASIA/zh_Hans_CN.json @@ -0,0 +1,3 @@ +{ + "StFrancisXavier": "" +} \ No newline at end of file diff --git a/nations/Americas.json b/nations/Americas.json new file mode 100644 index 00000000..fd83bd15 --- /dev/null +++ b/nations/Americas.json @@ -0,0 +1,83 @@ +{ + "LitCal": [ + { + "Festivity": { + "tag": "LadyGuadalupe", + "name": "[ USA ] Our Lady of Guadalupe", + "color": [ + "white" + ], + "grade": 4, + "day": 12, + "month": 12 + }, + "Metadata": { + "action": "makePatron", + "sinceYear": 1999, + "decreeURL": "https:\/\/www.vatican.va\/content\/john-paul-ii\/%s\/homilies\/1999\/documents\/hf_jp-ii_hom_19990123_mexico-guadalupe.html", + "decreeLangs": { + "DE": "de", + "ES": "es", + "EN": "en", + "FR": "fr", + "IT": "it", + "PT": "pt" + } + } + } + ], + "NationalCalendars": { + "Canada": "CA", + "United States": "US", + "Brazil": "BR", + "Argentina": "AR", + "Belize": "BZ", + "Bolivia": "BO", + "Chile": "CL", + "Colombia": "CO", + "Costa Rica": "CR", + "Cuba": "CU", + "Dominican Republic": "DO", + "Ecuador": "EC", + "El Salvador": "SV", + "Guatemala": "GT", + "Honduras": "HN", + "Latin America": "419", + "Mexico": "MX", + "Nicaragua": "NI", + "Panama": "PA", + "Paraguay": "PY", + "Peru": "PE", + "Puerto Rico": "PR" + }, + "Metadata": { + "IsMultilingual": true, + "Languages": [ + "en_CA", + "en_US", + "fr_CA", + "pt_BR", + "es_AR", + "es_BZ", + "es_BO", + "es_BR", + "es_CL", + "es_CO", + "es_CR", + "es_CU", + "es_DO", + "es_EC", + "es_SV", + "es_GT", + "es_HN", + "es_419", + "es_MX", + "es_NI", + "es_PA", + "es_PY", + "es_PE", + "es_PR" + ], + "WiderRegion": "Americas" + } +} diff --git a/nations/Asia.json b/nations/Asia.json new file mode 100644 index 00000000..93768a40 --- /dev/null +++ b/nations/Asia.json @@ -0,0 +1,42 @@ +{ + "LitCal": [ + { + "Festivity": { + "tag": "StFrancisXavier", + "name": "San Francesco Saverio, sacerdote", + "color": [ + "white" + ], + "grade": 4, + "day": 3, + "month": 12 + }, + "Metadata": { + "action": "makePatron", + "sinceYear": 1970, + "decreeURL": "https:\/\/www.vatican.va\/content\/john-paul-ii\/%s\/apost_exhortations\/documents\/hf_jp-ii_exh_06111999_ecclesia-in-asia.html", + "decreeLangs": { + "DE": "de", + "EN": "en", + "ES": "es", + "FR": "fr", + "IT": "it", + "PT": "pt", + "ZH": "zh" + } + } + } + ], + "NationalCalendars": { + "China": "CN", + "Japan": "JP" + }, + "Metadata": { + "IsMultilingual": true, + "Languages": [ + "zh_Hans_CN", + "ja_JP" + ], + "WiderRegion": "Asia" + } +} diff --git a/nations/EUROPE/bg.json b/nations/EUROPE/bg.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/bg.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/bg_BG.json b/nations/EUROPE/bg_BG.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/bg_BG.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/cs.json b/nations/EUROPE/cs.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/cs.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/cs_CZ.json b/nations/EUROPE/cs_CZ.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/cs_CZ.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/da.json b/nations/EUROPE/da.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/da.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/da_DK.json b/nations/EUROPE/da_DK.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/da_DK.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/de.json b/nations/EUROPE/de.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/de.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/de_AT.json b/nations/EUROPE/de_AT.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/de_AT.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/de_BE.json b/nations/EUROPE/de_BE.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/de_BE.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/de_CH.json b/nations/EUROPE/de_CH.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/de_CH.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/de_DE.json b/nations/EUROPE/de_DE.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/de_DE.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/de_LI.json b/nations/EUROPE/de_LI.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/de_LI.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/de_LU.json b/nations/EUROPE/de_LU.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/de_LU.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/el.json b/nations/EUROPE/el.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/el.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/el_CY.json b/nations/EUROPE/el_CY.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/el_CY.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/el_GR.json b/nations/EUROPE/el_GR.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/el_GR.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/es.json b/nations/EUROPE/es.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/es.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/es_ES.json b/nations/EUROPE/es_ES.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/es_ES.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/et.json b/nations/EUROPE/et.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/et.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/et_EE.json b/nations/EUROPE/et_EE.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/et_EE.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/fi.json b/nations/EUROPE/fi.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/fi.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/fi_FI.json b/nations/EUROPE/fi_FI.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/fi_FI.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/fr.json b/nations/EUROPE/fr.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/fr.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/fr_BE.json b/nations/EUROPE/fr_BE.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/fr_BE.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/fr_FR.json b/nations/EUROPE/fr_FR.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/fr_FR.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/ga.json b/nations/EUROPE/ga.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/ga.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/ga_IE.json b/nations/EUROPE/ga_IE.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/ga_IE.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/hr.json b/nations/EUROPE/hr.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/hr.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/hr_HR.json b/nations/EUROPE/hr_HR.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/hr_HR.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/hu.json b/nations/EUROPE/hu.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/hu.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/hu_HU.json b/nations/EUROPE/hu_HU.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/hu_HU.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/it.json b/nations/EUROPE/it.json new file mode 100644 index 00000000..de7a9e86 --- /dev/null +++ b/nations/EUROPE/it.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "San Benedetto, abate, patrono d'Europa", + "StsCyrilMethodius": "Santi Cirillo, monaco, e Metodio, vescovo, patroni d'Europa", + "StBridget": "Santa Brigida, religiosa, patrona d'Europa", + "StCatherineSiena": "Santa Caterina da Siena, vergine e dottore della Chiesa, patrona d'Italia e d'Europa", + "StEdithStein": "Santa Teresa Benedetta della Croce, vergine e martire, patrona d'Europa" +} diff --git a/nations/EUROPE/it_CH.json b/nations/EUROPE/it_CH.json new file mode 100644 index 00000000..c5ac419b --- /dev/null +++ b/nations/EUROPE/it_CH.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "San Benedetto, abate, patrono d'Europa", + "StsCyrilMethodius": "Santi Cirillo, monaco, e Metodio, vescovo, patroni d'Europa", + "StBridget": "Santa Brigida, religiosa, patrona d'Europa", + "StCatherineSiena": "Santa Caterina da Siena, vergine e dottore della Chiesa, patrona d'Italia e d'Europa", + "StEdithStein": "Santa Teresa Benedetta della Croce, vergine e martire, patrona d'Europa" +} diff --git a/nations/EUROPE/it_IT.json b/nations/EUROPE/it_IT.json new file mode 100644 index 00000000..c5ac419b --- /dev/null +++ b/nations/EUROPE/it_IT.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "San Benedetto, abate, patrono d'Europa", + "StsCyrilMethodius": "Santi Cirillo, monaco, e Metodio, vescovo, patroni d'Europa", + "StBridget": "Santa Brigida, religiosa, patrona d'Europa", + "StCatherineSiena": "Santa Caterina da Siena, vergine e dottore della Chiesa, patrona d'Italia e d'Europa", + "StEdithStein": "Santa Teresa Benedetta della Croce, vergine e martire, patrona d'Europa" +} diff --git a/nations/EUROPE/lb.json b/nations/EUROPE/lb.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/lb.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/lb_LU.json b/nations/EUROPE/lb_LU.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/lb_LU.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/lt.json b/nations/EUROPE/lt.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/lt.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/lt_LT.json b/nations/EUROPE/lt_LT.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/lt_LT.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/lv.json b/nations/EUROPE/lv.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/lv.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/lv_LV.json b/nations/EUROPE/lv_LV.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/lv_LV.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/mt.json b/nations/EUROPE/mt.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/mt.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/mt_MT.json b/nations/EUROPE/mt_MT.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/mt_MT.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/nl.json b/nations/EUROPE/nl.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/nl.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/nl_NL.json b/nations/EUROPE/nl_NL.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/nl_NL.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/pl.json b/nations/EUROPE/pl.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/pl.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/pl_PL.json b/nations/EUROPE/pl_PL.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/pl_PL.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/pt.json b/nations/EUROPE/pt.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/pt.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/pt_PT.json b/nations/EUROPE/pt_PT.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/pt_PT.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/ro.json b/nations/EUROPE/ro.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/ro.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/ro_RO.json b/nations/EUROPE/ro_RO.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/ro_RO.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/sk.json b/nations/EUROPE/sk.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/sk.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/sk_SK.json b/nations/EUROPE/sk_SK.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/sk_SK.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/sl.json b/nations/EUROPE/sl.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/sl.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/sl_SI.json b/nations/EUROPE/sl_SI.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/sl_SI.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/sv.json b/nations/EUROPE/sv.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/sv.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/sv_SE.json b/nations/EUROPE/sv_SE.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/sv_SE.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/tr.json b/nations/EUROPE/tr.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/tr.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/EUROPE/tr_CY.json b/nations/EUROPE/tr_CY.json new file mode 100644 index 00000000..8ce3ff1e --- /dev/null +++ b/nations/EUROPE/tr_CY.json @@ -0,0 +1,7 @@ +{ + "StBenedict": "", + "StsCyrilMethodius": "", + "StBridget": "", + "StCatherineSiena": "", + "StEdithStein": "" +} \ No newline at end of file diff --git a/nations/Europe.json b/nations/Europe.json new file mode 100644 index 00000000..77c951b0 --- /dev/null +++ b/nations/Europe.json @@ -0,0 +1,237 @@ +{ + "LitCal": [ + { + "Festivity": { + "tag": "StBenedict", + "name": "San Benedetto, abate, patrono d'Europa", + "color": [ + "white" + ], + "grade": 4, + "day": 11, + "month": 7 + }, + "Metadata": { + "action": "makePatron", + "sinceYear": 1964, + "decreeURL": "https:\/\/www.vatican.va\/content\/paul-vi\/%s\/apost_letters\/documents\/hf_p-vi_apl_19641024_pacis-nuntius.html", + "decreeLangs": { + "IT": "it", + "ES": "es", + "LA": "la" + } + } + }, + { + "Festivity": { + "tag": "StsCyrilMethodius", + "name": "Santi Cirillo, monaco, e Metodio, vescovo, patroni d'Europa", + "color": [ + "white" + ], + "grade": 4, + "day": 14, + "month": 2 + }, + "Metadata": { + "action": "makePatron", + "sinceYear": 1980, + "decreeURL": "https:\/\/www.vatican.va\/content\/john-paul-ii\/%s\/apost_letters\/1980\/documents\/hf_jp-ii_apl_31121980_egregiae-virtutis.html", + "decreeLangs": { + "ES": "es", + "IT": "it", + "LA": "la", + "PT": "pt" + } + } + }, + { + "Festivity": { + "tag": "StBridget", + "name": "Santa Brigida, religiosa, patrona d'Europa", + "color": [ + "white" + ], + "grade": 4, + "day": 23, + "month": 7 + }, + "Metadata": { + "action": "makePatron", + "sinceYear": 1999, + "decreeURL": "https:\/\/www.vatican.va\/content\/john-paul-ii\/%s\/motu_proprio\/documents\/hf_jp-ii_motu-proprio_01101999_co-patronesses-europe.html", + "decreeLangs": { + "DE": "de", + "EN": "en", + "ES": "es", + "FR": "fr", + "IT": "it", + "LA": "la", + "PT": "pt" + } + } + }, + { + "Festivity": { + "tag": "StCatherineSiena", + "name": "Santa Caterina da Siena, vergine e dottore della Chiesa, patrona d'Italia e d'Europa", + "color": [ + "white" + ], + "grade": 4, + "day": 29, + "month": 4 + }, + "Metadata": { + "action": "makePatron", + "sinceYear": 1999, + "decreeURL": "https:\/\/www.vatican.va\/content\/john-paul-ii\/%s\/motu_proprio\/documents\/hf_jp-ii_motu-proprio_01101999_co-patronesses-europe.html", + "decreeLangs": { + "DE": "de", + "EN": "en", + "ES": "es", + "FR": "fr", + "IT": "it", + "LA": "la", + "PT": "pt" + } + } + }, + { + "Festivity": { + "tag": "StEdithStein", + "name": "Santa Teresa Benedetta della Croce, vergine e martire, patrona d'Europa", + "color": [ + "white", + "red" + ], + "grade": 4, + "day": 9, + "month": 8, + "common": [ + "Martyrs:For a Virgin Martyr", + "Virgins:For One Virgin" + ], + "readings": { + "FIRST_READING": "", + "RESPONSORIAL_PSALM": "", + "SECOND_READING": "", + "ALLELUIA_VERSE": "", + "GOSPEL": "" + } + }, + "Metadata": { + "action": "createNew", + "sinceYear": 1999, + "untilYear": 2002, + "decreeURL": "https:\/\/www.vatican.va\/content\/john-paul-ii\/%s\/motu_proprio\/documents\/hf_jp-ii_motu-proprio_01101999_co-patronesses-europe.html", + "decreeLangs": { + "DE": "de", + "EN": "en", + "ES": "es", + "FR": "fr", + "IT": "it", + "LA": "la", + "PT": "pt" + } + } + }, + { + "Festivity": { + "tag": "StEdithStein", + "name": "Santa Teresa Benedetta della Croce, vergine e martire, patrona d'Europa", + "color": [ + "white", + "red" + ], + "grade": 4, + "day": 9, + "month": 8 + }, + "Metadata": { + "action": "makePatron", + "sinceYear": 2002, + "decreeURL": "https:\/\/www.vatican.va\/content\/john-paul-ii\/%s\/motu_proprio\/documents\/hf_jp-ii_motu-proprio_01101999_co-patronesses-europe.html", + "decreeLangs": { + "DE": "de", + "EN": "en", + "ES": "es", + "FR": "fr", + "IT": "it", + "LA": "la", + "PT": "pt" + } + } + } + ], + "NationalCalendars": { + "Bulgaria": "BG", + "Czechia": "CZ", + "Croatia": "HR", + "Denmark": "DK", + "Estonia": "EE", + "Finland": "FI", + "Belgium": "BE", + "France": "FR", + "Cyprus": "CY", + "Greece": "GR", + "Ireland": "IE", + "Italy": "IT", + "Switzerland": "CH", + "Latvia": "LV", + "Lithuania": "LT", + "Luxembourg": "LU", + "Malta": "MT", + "Netherlands": "NL", + "Poland": "PL", + "Portugal": "PT", + "Romania": "RO", + "Slovakia": "SK", + "Slovenia": "SI", + "Spain": "ES", + "Sweden": "SE", + "Austria": "AT", + "Germany": "DE", + "Liechtenstein": "LI", + "Hungary": "HU" + }, + "Metadata": { + "IsMultilingual": true, + "Languages": [ + "bg_BG", + "cs_CZ", + "hr_HR", + "da_DK", + "et_EE", + "fi_FI", + "fr_BE", + "fr_FR", + "el_CY", + "el_GR", + "ga_IE", + "it_IT", + "it_CH", + "lv_LV", + "lt_LT", + "lb_LU", + "mt_MT", + "nl_NL", + "pl_PL", + "pt_PT", + "ro_RO", + "sk_SK", + "sl_SI", + "es_ES", + "sv_SE", + "de_AT", + "de_BE", + "de_DE", + "de_LI", + "de_LU", + "de_CH", + "tr_CY", + "hu_HU" + ], + "WiderRegion": "Europe" + } +} diff --git a/nations/ITALY/Diocesi di Roma.json b/nations/ITALY/Diocesi di Roma.json index 18ad0d44..f161286d 100644 --- a/nations/ITALY/Diocesi di Roma.json +++ b/nations/ITALY/Diocesi di Roma.json @@ -1 +1,473 @@ -{"LitCal":{"BeatoGregorioXpapa":{"name":"Beato Gregorio X, papa","color":"white","grade":2,"common":"Pastors:For a Pope","day":9,"month":1,"formRowNum":0,"sinceYear":"1973"},"SanVincenzoPallottisacerdote":{"name":"San Vincenzo Pallotti, sacerdote","color":"white","grade":3,"common":"Proper","day":22,"month":1,"formRowNum":1,"sinceYear":"1973"},"BeataLudovicaAlbertoni":{"name":"Beata Ludovica Albertoni","color":"white","grade":2,"common":"Holy Men and Women:For Those Who Practiced Works of Mercy","day":1,"month":2,"formRowNum":1,"sinceYear":"1973"},"SantoIlaropapa":{"name":"Santo Ilaro, papa","color":"white","grade":2,"common":"Pastors:For a Pope","day":28,"month":2,"formRowNum":2,"sinceYear":"1973"},"SanFeliceIIIpapa":{"name":"San Felice III, papa","color":"white","grade":2,"common":"Pastors:For a Pope","day":1,"month":3,"formRowNum":3,"sinceYear":"1973"},"SanMartinoIpapaemartire":{"name":"San Martino I, papa e martire","color":"red,white","grade":3,"common":"Martyrs:For One Martyr,Pastors:For a Pope","day":13,"month":4,"formRowNum":2,"sinceYear":"1973"},"SanBenedettoGiuseppeLabre":{"name":"San Benedetto Giuseppe Labre","color":"white","grade":3,"common":"Proper","day":16,"month":4,"formRowNum":3,"sinceYear":"1973"},"SanLeoneIXpapa":{"name":"San Leone IX, papa","color":"white","grade":3,"common":"Proper","day":19,"month":4,"formRowNum":4,"sinceYear":"1973"},"SanPioVpapa":{"name":"San Pio V, papa","color":"white","grade":3,"common":"Pastors:For a Pope","day":30,"month":4,"formRowNum":5,"sinceYear":"1973"},"SanFelicedaCantalicereligioso":{"name":"San Felice da Cantalice, religioso","color":"white","grade":2,"common":"Proper","day":18,"month":5,"formRowNum":4,"sinceYear":"1973"},"SanGiovanniBattistadeRossisacerdote":{"name":"San Giovanni Battista de Rossi, sacerdote","color":"white","grade":3,"common":"Proper","day":23,"month":5,"formRowNum":6,"sinceYear":"1973"},"BeataMariaVergineAuxiliumChristianorum":{"name":"Beata Maria Vergine «Auxilium Christianorum»","color":"white","grade":2,"common":"Proper","day":24,"month":5,"formRowNum":5,"sinceYear":"1973"},"SanGregorioVIIpapa":{"name":"San Gregorio VII, papa","color":"white","grade":3,"common":"Pastors:For a Pope","day":25,"month":5,"formRowNum":7,"sinceYear":"1973"},"SantiMarcellinoePietromartiri":{"name":"Santi Marcellino e Pietro, martiri","color":"red","grade":3,"common":"Martyrs:For Several Martyrs","day":2,"month":6,"formRowNum":8,"sinceYear":"1973"},"BeataAnnaMariaTaigi":{"name":"Beata Anna Maria Taigi","color":"white","grade":3,"common":"Holy Men and Women:For Holy Women","day":9,"month":6,"formRowNum":9,"sinceYear":"1973"},"SantiGiovanniePaolomartiri":{"name":"Santi Giovanni e Paolo, martiri","color":"red","grade":2,"common":"Martyrs","day":26,"month":6,"formRowNum":6,"sinceYear":"1973"},"SantiPietroePaoloApostoliPatroniprincipalidiRoma":{"name":"Santi Pietro e Paolo, Apostoli, Patroni principali di Roma","color":"red","grade":6,"common":"Proper","day":29,"month":6,"formRowNum":0,"sinceYear":"1973"},"SantiPrimiMartiridellaChiesaRomana":{"name":"Santi Primi Martiri della Chiesa Romana","color":"red","grade":3,"common":"Martyrs:For Several Martyrs","day":30,"month":6,"formRowNum":10,"sinceYear":"1973"},"SantaBrigidareligiosa":{"name":"Santa Brigida, religiosa","color":"white","grade":3,"common":"Holy Men and Women:For Religious,Holy Men and Women:For Holy Women","day":23,"month":7,"formRowNum":11,"sinceYear":"1973"},"BeatoInnocenzoXIpapa":{"name":"Beato Innocenzo XI, papa","color":"white","grade":2,"common":"Pastors:For a Pope","day":12,"month":8,"formRowNum":8,"sinceYear":"1973"},"SanSistoIIIpapa":{"name":"San Sisto III, papa","color":"white","grade":2,"common":"Pastors:For a Pope","day":19,"month":8,"formRowNum":9,"sinceYear":"1973"},"SanGasparedelBufalosacerdote":{"name":"San Gaspare del Bufalo, sacerdote","color":"white","grade":3,"common":"Proper","day":21,"month":10,"formRowNum":13,"sinceYear":"1973"},"SanNicolaIpapa":{"name":"San Nicola I, papa","color":"white","grade":3,"common":"Pastors:For a Pope","day":13,"month":11,"formRowNum":14,"sinceYear":"1973"},"SanGelasioIpapa":{"name":"San Gelasio I, papa","color":"white","grade":2,"common":"Pastors:For a Pope","day":20,"month":11,"formRowNum":10,"sinceYear":"1973"},"SanClementeIpapaemartire":{"name":"San Clemente I, papa e martire","color":"red,white","grade":3,"common":"Martyrs:For One Martyr,Pastors:For a Pope","day":23,"month":11,"formRowNum":15,"sinceYear":"1973"},"SanSiriciopapa":{"name":"San Siricio, papa","color":"white","grade":2,"common":"Pastors:For a Pope","day":26,"month":11,"formRowNum":11,"sinceYear":"1973"},"SanLeonardodaPortoMauriziosacerdote":{"name":"San Leonardo da Porto Maurizio, sacerdote","color":"white","grade":2,"common":"Holy Men and Women:For Religious","day":26,"month":11,"formRowNum":12,"sinceYear":"1973"},"SanDamasoIpapa":{"name":"San Damaso I, papa","color":"white","grade":3,"common":"Pastors:For a Pope","day":11,"month":12,"formRowNum":16,"sinceYear":"1973"},"DedicazionedellaBasilicaPapaledelSSSalvatoreCattedralediRoma":{"name":"Dedicazione della Basilica Papale del SS. Salvatore, Cattedrale di Roma","color":"white","grade":4,"common":"Dedication of a Church","day":9,"month":11,"formRowNum":1,"sinceYear":"1973"},"SanGiovanniPaoloIIpapa":{"name":"San Giovanni Paolo II, papa","color":"white","grade":3,"common":"Pastors:For a Pope","day":22,"month":10,"formRowNum":17,"sinceYear":"2014"},"BeatoUrbanoIIpapa":{"name":"Beato Urbano II, papa","color":"white","grade":2,"common":"Pastors:For a Pope","day":28,"month":7,"formRowNum":7,"sinceYear":"1973"},"SantAgatonepapa":{"name":"Sant'Agatone, papa","color":"white","grade":3,"common":"Pastors:For a Pope","day":10,"month":1,"formRowNum":0,"sinceYear":"1973"},"SanCallistoIpapaemartire":{"name":"San Callisto I, papa e martire","color":"red,white","grade":3,"common":"Martyrs:For One Martyr,Pastors:For a Pope","day":14,"month":10,"formRowNum":12,"sinceYear":"1970"}}} +{ + "LitCal": { + "BeatoGregorioXpapa": { + "name": "Beato Gregorio X, papa", + "color": [ + "white" + ], + "grade": 2, + "common": [ + "Pastors:For a Pope" + ], + "day": 9, + "month": 1, + "formRowNum": 0, + "sinceYear": 1973 + }, + "SanVincenzoPallottisacerdote": { + "name": "San Vincenzo Pallotti, sacerdote", + "color": [ + "white" + ], + "grade": 3, + "common": [ + "Proper" + ], + "day": 22, + "month": 1, + "formRowNum": 1, + "sinceYear": 1973 + }, + "BeataLudovicaAlbertoni": { + "name": "Beata Ludovica Albertoni", + "color": [ + "white" + ], + "grade": 2, + "common": [ + "Holy Men and Women:For Those Who Practiced Works of Mercy" + ], + "day": 1, + "month": 2, + "formRowNum": 1, + "sinceYear": 1973 + }, + "SantoIlaropapa": { + "name": "Santo Ilaro, papa", + "color": [ + "white" + ], + "grade": 2, + "common": [ + "Pastors:For a Pope" + ], + "day": 28, + "month": 2, + "formRowNum": 2, + "sinceYear": 1973 + }, + "SanFeliceIIIpapa": { + "name": "San Felice III, papa", + "color": [ + "white" + ], + "grade": 2, + "common": [ + "Pastors:For a Pope" + ], + "day": 1, + "month": 3, + "formRowNum": 3, + "sinceYear": 1973 + }, + "SanMartinoIpapaemartire": { + "name": "San Martino I, papa e martire", + "color": [ + "red", + "white" + ], + "grade": 3, + "common": [ + "Martyrs:For One Martyr", + "Pastors:For a Pope" + ], + "day": 13, + "month": 4, + "formRowNum": 2, + "sinceYear": 1973 + }, + "SanBenedettoGiuseppeLabre": { + "name": "San Benedetto Giuseppe Labre", + "color": [ + "white" + ], + "grade": 3, + "common": [ + "Proper" + ], + "day": 16, + "month": 4, + "formRowNum": 3, + "sinceYear": 1973 + }, + "SanLeoneIXpapa": { + "name": "San Leone IX, papa", + "color": [ + "white" + ], + "grade": 3, + "common": [ + "Proper" + ], + "day": 19, + "month": 4, + "formRowNum": 4, + "sinceYear": 1973 + }, + "SanPioVpapa": { + "name": "San Pio V, papa", + "color": [ + "white" + ], + "grade": 3, + "common": [ + "Pastors:For a Pope" + ], + "day": 30, + "month": 4, + "formRowNum": 5, + "sinceYear": 1973 + }, + "SanFelicedaCantalicereligioso": { + "name": "San Felice da Cantalice, religioso", + "color": [ + "white" + ], + "grade": 2, + "common": [ + "Proper" + ], + "day": 18, + "month": 5, + "formRowNum": 4, + "sinceYear": 1973 + }, + "SanGiovanniBattistadeRossisacerdote": { + "name": "San Giovanni Battista de Rossi, sacerdote", + "color": [ + "white" + ], + "grade": 3, + "common": [ + "Proper" + ], + "day": 23, + "month": 5, + "formRowNum": 6, + "sinceYear": 1973 + }, + "BeataMariaVergineAuxiliumChristianorum": { + "name": "Beata Maria Vergine «Auxilium Christianorum»", + "color": [ + "white" + ], + "grade": 2, + "common": [ + "Proper" + ], + "day": 24, + "month": 5, + "formRowNum": 5, + "sinceYear": 1973 + }, + "SanGregorioVIIpapa": { + "name": "San Gregorio VII, papa", + "color": [ + "white" + ], + "grade": 3, + "common": [ + "Pastors:For a Pope" + ], + "day": 25, + "month": 5, + "formRowNum": 7, + "sinceYear": 1973 + }, + "SantiMarcellinoePietromartiri": { + "name": "Santi Marcellino e Pietro, martiri", + "color": [ + "red" + ], + "grade": 3, + "common": [ + "Martyrs:For Several Martyrs" + ], + "day": 2, + "month": 6, + "formRowNum": 8, + "sinceYear": 1973 + }, + "BeataAnnaMariaTaigi": { + "name": "Beata Anna Maria Taigi", + "color": [ + "white" + ], + "grade": 3, + "common": [ + "Holy Men and Women:For Holy Women" + ], + "day": 9, + "month": 6, + "formRowNum": 9, + "sinceYear": 1973 + }, + "SantiGiovanniePaolomartiri": { + "name": "Santi Giovanni e Paolo, martiri", + "color": [ + "red" + ], + "grade": 2, + "common": [ + "Martyrs" + ], + "day": 26, + "month": 6, + "formRowNum": 6, + "sinceYear": 1973 + }, + "SantiPietroePaoloApostoliPatroniprincipalidiRoma": { + "name": "Santi Pietro e Paolo, Apostoli, Patroni principali di Roma", + "color": [ + "red" + ], + "grade": 6, + "common": [ + "Proper" + ], + "day": 29, + "month": 6, + "formRowNum": 0, + "sinceYear": 1973 + }, + "SantiPrimiMartiridellaChiesaRomana": { + "name": "Santi Primi Martiri della Chiesa Romana", + "color": [ + "red" + ], + "grade": 3, + "common": [ + "Martyrs:For Several Martyrs" + ], + "day": 30, + "month": 6, + "formRowNum": 10, + "sinceYear": 1973 + }, + "SantaBrigidareligiosa": { + "name": "Santa Brigida, religiosa", + "color": [ + "white" + ], + "grade": 3, + "common": [ + "Holy Men and Women:For Religious", + "Holy Men and Women:For Holy Women" + ], + "day": 23, + "month": 7, + "formRowNum": 11, + "sinceYear": 1973 + }, + "BeatoInnocenzoXIpapa": { + "name": "Beato Innocenzo XI, papa", + "color": [ + "white" + ], + "grade": 2, + "common": [ + "Pastors:For a Pope" + ], + "day": 12, + "month": 8, + "formRowNum": 8, + "sinceYear": 1973 + }, + "SanSistoIIIpapa": { + "name": "San Sisto III, papa", + "color": [ + "white" + ], + "grade": 2, + "common": [ + "Pastors:For a Pope" + ], + "day": 19, + "month": 8, + "formRowNum": 9, + "sinceYear": 1973 + }, + "SanGasparedelBufalosacerdote": { + "name": "San Gaspare del Bufalo, sacerdote", + "color": [ + "white" + ], + "grade": 3, + "common": [ + "Proper" + ], + "day": 21, + "month": 10, + "formRowNum": 13, + "sinceYear": 1973 + }, + "SanNicolaIpapa": { + "name": "San Nicola I, papa", + "color": [ + "white" + ], + "grade": 3, + "common": [ + "Pastors:For a Pope" + ], + "day": 13, + "month": 11, + "formRowNum": 14, + "sinceYear": 1973 + }, + "SanGelasioIpapa": { + "name": "San Gelasio I, papa", + "color": [ + "white" + ], + "grade": 2, + "common": [ + "Pastors:For a Pope" + ], + "day": 20, + "month": 11, + "formRowNum": 10, + "sinceYear": 1973 + }, + "SanClementeIpapaemartire": { + "name": "San Clemente I, papa e martire", + "color": [ + "red", + "white" + ], + "grade": 3, + "common": [ + "Martyrs:For One Martyr", + "Pastors:For a Pope" + ], + "day": 23, + "month": 11, + "formRowNum": 15, + "sinceYear": 1973 + }, + "SanSiriciopapa": { + "name": "San Siricio, papa", + "color": [ + "white" + ], + "grade": 2, + "common": [ + "Pastors:For a Pope" + ], + "day": 26, + "month": 11, + "formRowNum": 11, + "sinceYear": 1973 + }, + "SanLeonardodaPortoMauriziosacerdote": { + "name": "San Leonardo da Porto Maurizio, sacerdote", + "color": [ + "white" + ], + "grade": 2, + "common": [ + "Holy Men and Women:For Religious" + ], + "day": 26, + "month": 11, + "formRowNum": 12, + "sinceYear": 1973 + }, + "SanDamasoIpapa": { + "name": "San Damaso I, papa", + "color": [ + "white" + ], + "grade": 3, + "common": [ + "Pastors:For a Pope" + ], + "day": 11, + "month": 12, + "formRowNum": 16, + "sinceYear": 1973 + }, + "DedicazionedellaBasilicaPapaledelSSSalvatoreCattedralediRoma": { + "name": "Dedicazione della Basilica Papale del SS. Salvatore, Cattedrale di Roma", + "color": [ + "white" + ], + "grade": 4, + "common": [ + "Dedication of a Church" + ], + "day": 9, + "month": 11, + "formRowNum": 1, + "sinceYear": 1973 + }, + "SanGiovanniPaoloIIpapa": { + "name": "San Giovanni Paolo II, papa", + "color": [ + "white" + ], + "grade": 3, + "common": [ + "Pastors:For a Pope" + ], + "day": 22, + "month": 10, + "formRowNum": 17, + "sinceYear": 2014 + }, + "BeatoUrbanoIIpapa": { + "name": "Beato Urbano II, papa", + "color": [ + "white" + ], + "grade": 2, + "common": [ + "Pastors:For a Pope" + ], + "day": 28, + "month": 7, + "formRowNum": 7, + "sinceYear": 1973 + }, + "SantAgatonepapa": { + "name": "Sant'Agatone, papa", + "color": [ + "white" + ], + "grade": 3, + "common": [ + "Pastors:For a Pope" + ], + "day": 10, + "month": 1, + "formRowNum": 0, + "sinceYear": 1973 + }, + "SanCallistoIpapaemartire": { + "name": "San Callisto I, papa e martire", + "color": [ + "red", + "white" + ], + "grade": 3, + "common": [ + "Martyrs:For One Martyr", + "Pastors:For a Pope" + ], + "day": 14, + "month": 10, + "formRowNum": 12, + "sinceYear": 1970 + } + } +} diff --git a/nations/ITALY/Diocesi di Sora - Cassino - Aquino - Pontecorvo.json b/nations/ITALY/Diocesi di Sora - Cassino - Aquino - Pontecorvo.json new file mode 100644 index 00000000..afb210cd --- /dev/null +++ b/nations/ITALY/Diocesi di Sora - Cassino - Aquino - Pontecorvo.json @@ -0,0 +1,26 @@ +{ + "LitCal": { + "DedicazionedellaChiesaMadrediCassinoinCassino": { + "name": "Dedicazione della Chiesa Madre di Cassino (in Cassino)", + "color": ["white"], + "grade": 6, + "common": ["Dedication of a Church"], + "day": 5, + "month": 6, + "formRowNum": 1, + "sinceYear": 1970 + }, + "SantaRestituta": { + "name": "Santa Restituta", + "color": [ + "white" + ], + "grade": 4, + "common": ["Proper"], + "day": 27, + "month": 5, + "formRowNum": 0, + "sinceYear": 1970 + } + } +} diff --git a/nations/ITALY/ITALY.json b/nations/ITALY/ITALY.json new file mode 100644 index 00000000..ac224b40 --- /dev/null +++ b/nations/ITALY/ITALY.json @@ -0,0 +1,57 @@ +{ + "LitCal": [ + { + "Festivity": { + "tag": "StCatherineSiena", + "name": "Santa Caterina da Siena, vergine e dottore della Chiesa, patrona d'Italia", + "color": [ + "white" + ], + "grade": 4, + "day": 29, + "month": 4 + }, + "Metadata": { + "action": "makePatron", + "sinceYear": 1939, + "untilYear": 1999, + "decreeURL": "https:\/\/www.vatican.va\/content\/pius-xii\/it\/briefs\/documents\/hf_p-xii_brief_19390618_patroni-italia.html" + } + }, + { + "Festivity": { + "tag": "StFrancisAssisi", + "name": "San Francesco d'Assisi, patrono d'Italia", + "color": [ + "white" + ], + "grade": 4, + "day": 29, + "month": 4 + }, + "Metadata": { + "action": "makePatron", + "sinceYear": 1939, + "decreeURL": "https:\/\/www.vatican.va\/content\/pius-xii\/it\/briefs\/documents\/hf_p-xii_brief_19390618_patroni-italia.html" + } + } + ], + "Settings": { + "Epiphany": "JAN6", + "Ascension": "SUNDAY", + "CorpusChristi": "SUNDAY", + "Locale": "IT" + }, + "Metadata": { + "Region": "ITALY", + "WiderRegion": { + "name": "Europe", + "jsonFile": "nations\/Europe.json", + "i18nFile": "nations\/EUROPE\/it.json" + }, + "Missals": [ + "ITALY_1983", + "ITALY_2020" + ] + } +} diff --git a/nations/USA/Archdiocese of Boston (Massachusetts).json b/nations/USA/Archdiocese of Boston (Massachusetts).json index 6d5aca48..ca16943c 100644 --- a/nations/USA/Archdiocese of Boston (Massachusetts).json +++ b/nations/USA/Archdiocese of Boston (Massachusetts).json @@ -1 +1,19 @@ -{"LitCal":{"DedicationoftheCathedraloftheHolyCross":{"name":"Dedication of the Cathedral of the Holy Cross","color":"white","grade":4,"common":"Dedication of a Church","day":8,"month":12,"formRowNum":1,"sinceYear":"1970"}},"Overrides":{"Epiphany":"JAN6","Ascension":"THURSDAY","CorpusChristi":"THURSDAY"}} +{ + "LitCal": { + "DedicationoftheCathedraloftheHolyCross": { + "name": "Dedication of the Cathedral of the Holy Cross", + "color": ["white"], + "grade": 4, + "common": ["Dedication of a Church"], + "day": 8, + "month": 12, + "formRowNum": 1, + "sinceYear": 1970 + } + }, + "Overrides": { + "Epiphany": "JAN6", + "Ascension": "THURSDAY", + "CorpusChristi": "THURSDAY" + } +} diff --git a/nations/USA/USA.json b/nations/USA/USA.json new file mode 100644 index 00000000..99f25a9c --- /dev/null +++ b/nations/USA/USA.json @@ -0,0 +1,188 @@ +{ + "LitCal": [ + { + "Festivity": { + "tag": "ImmaculateConception", + "name": "The Immaculate Conception of the Blessed Virgin Mary, Patronal feastday of the United States of America", + "color": [ + "white" + ], + "grade": 6, + "day": 8, + "month": 12 + }, + "Metadata": { + "action": "makePatron", + "sinceYear": 1970 + } + }, + { + "Festivity": { + "tag": "StVincentDeacon", + "name": "Saint Vincent, Deacon and Martyr", + "day": 23, + "month": 1 + }, + "Metadata": { + "action": "moveFestivity", + "missal": "USA_2011", + "reason": "National Day of Prayer for the Unborn", + "sinceYear": 1970 + } + }, + { + "Festivity": { + "tag": "StVincentDeacon", + "name": "[ USA ] Saint Vincent, Deacon and Martyr", + "day": 22, + "month": 1 + }, + "Metadata": { + "action": "setProperty", + "property": "name", + "sinceYear": 1970 + } + }, + { + "Festivity": { + "tag": "StPaulCross", + "name": "Saint Paul of the Cross, Priest", + "day": 20, + "month": 10 + }, + "Metadata": { + "action": "moveFestivity", + "missal": "USA_2011", + "reason": "Saint John Brebeuf (elevated to memorial)", + "sinceYear": 1970 + } + }, + { + "Festivity": { + "tag": "StPaulCross", + "name": "[ USA ] Saint Paul of the Cross, Priest", + "day": 19, + "month": 10 + }, + "Metadata": { + "action": "setProperty", + "property": "name", + "sinceYear": 1970 + } + }, + { + "Festivity": { + "tag": "StsJeanBrebeuf", + "name": "Saints John de Brébeuf and Isaac Jogues, Priests, and Companions, Martyrs", + "grade": 3, + "day": 19, + "month": 10 + }, + "Metadata": { + "action": "setProperty", + "property": "grade", + "sinceYear": 1970 + } + }, + { + "Festivity": { + "tag": "StsJeanBrebeuf", + "name": "[ USA ] Saints John de Brébeuf and Isaac Jogues, Priests, and Companions, Martyrs", + "day": 19, + "month": 10 + }, + "Metadata": { + "action": "setProperty", + "property": "name", + "sinceYear": 1970 + } + }, + { + "Festivity": { + "tag": "ThanksgivingDay", + "name": "[ USA ] Thanksgiving", + "color": [ + "white" + ], + "grade": 3, + "strtotime": "fourth thursday of november", + "common": [] + }, + "Metadata": { + "action": "createNew", + "sinceYear": 1970 + } + }, + { + "Festivity": { + "tag": "StCamillusDeLellis", + "name": "Saint Camillus de Lellis, Priest", + "day": 18, + "month": 7 + }, + "Metadata": { + "action": "moveFestivity", + "missal": "USA_2011", + "reason": "Blessed Kateri Tekakwitha", + "sinceYear": 1970 + } + }, + { + "Festivity": { + "tag": "StCamillusDeLellis", + "name": "[ USA ] Saint Camillus de Lellis, Priest", + "day": 14, + "month": 7 + }, + "Metadata": { + "action": "setProperty", + "property": "name", + "sinceYear": 1970 + } + }, + { + "Festivity": { + "tag": "StElizabethPortugal", + "name": "Saint Elizabeth of Portugal", + "day": 5, + "month": 7 + }, + "Metadata": { + "action": "moveFestivity", + "missal": "USA_2011", + "reason": "Independence Day", + "sinceYear": 1970 + } + }, + { + "Festivity": { + "tag": "StElizabethPortugal", + "name": "[ USA ] Saint Elizabeth of Portugal", + "day": 4, + "month": 7 + }, + "Metadata": { + "action": "setProperty", + "property": "name", + "sinceYear": 1970 + } + } + ], + "Settings": { + "Epiphany": "SUNDAY_JAN2_JAN8", + "Ascension": "SUNDAY", + "CorpusChristi": "SUNDAY", + "Locale": "EN" + }, + "Metadata": { + "Region": "UNITED STATES", + "WiderRegion": { + "name": "Americas", + "jsonFile": "nations\/Americas.json", + "i18nFile": "nations\/AMERICAS\/en.json" + }, + "Missals": [ + "USA_2011" + ] + } +} diff --git a/nations/index.json b/nations/index.json index 5eff8744..c2856930 100644 --- a/nations/index.json +++ b/nations/index.json @@ -1 +1,19 @@ -{"DIOCESIDIROMA":{"path":"nations\/ITALY\/Diocesi di Roma.json","nation":"ITALY","diocese":"Diocesi di Roma","group":"Diocesi del Lazio"},"ARCHDIOCESEOFBOSTONMASSACHUSETTS":{"path":"nations\/USA\/Archdiocese of Boston (Massachusetts).json","nation":"USA","diocese":"Archdiocese of Boston (Massachusetts)"}} +{ + "DIOCESIDIROMA": { + "path": "nations\/ITALY\/Diocesi di Roma.json", + "nation": "ITALY", + "diocese": "Diocesi di Roma", + "group": "Diocesi del Lazio" + }, + "ARCHDIOCESEOFBOSTONMASSACHUSETTS": { + "path": "nations\/USA\/Archdiocese of Boston (Massachusetts).json", + "nation": "USA", + "diocese": "Archdiocese of Boston (Massachusetts)" + }, + "DIOCESIDISORACASSINOAQUINOPONTECORVO": { + "path": "nations\/ITALY\/Diocesi di Sora - Cassino - Aquino - Pontecorvo.json", + "nation": "ITALY", + "diocese": "Diocesi di Sora - Cassino - Aquino - Pontecorvo", + "group": "Diocesi del Lazio" + } +} diff --git a/schemas/CommonDef.json b/schemas/CommonDef.json new file mode 100644 index 00000000..1150f929 --- /dev/null +++ b/schemas/CommonDef.json @@ -0,0 +1,611 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "LitColor": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "white", + "red", + "green", + "purple", + "pink" + ] + }, + "title": "LitColor" + }, + "LitCommon": { + "type": "array", + "minItems": 0, + "maxItems": 3, + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Proper", + "Dedication of a Church", + "Blessed Virgin Mary", + "Martyrs", + "Pastors", + "Doctors", + "Virgins", + "Holy Men and Women", + "Martyrs:For One Martyr", + "Martyrs:For Several Martyrs", + "Martyrs:For Missionary Martyrs", + "Martyrs:For One Missionary Martyr", + "Martyrs:For Several Missionary Martyrs", + "Martyrs:For a Virgin Martyr", + "Martyrs:For a Holy Woman Martyr", + "Pastors:For a Pope", + "Pastors:For a Bishop", + "Pastors:For One Pastor", + "Pastors:For Several Pastors", + "Pastors:For Founders of a Church", + "Pastors:For One Founder", + "Pastors:For Several Founders", + "Pastors:For Missionaries", + "Virgins:For One Virgin", + "Virgins:For Several Virgins", + "Holy Men and Women:For Several Saints", + "Holy Men and Women:For One Saint", + "Holy Men and Women:For an Abbot", + "Holy Men and Women:For a Monk", + "Holy Men and Women:For a Nun", + "Holy Men and Women:For Religious", + "Holy Men and Women:For Those Who Practiced Works of Mercy", + "Holy Men and Women:For Educators", + "Holy Men and Women:For Holy Women", + "Masses and Prayers for Various Needs and Occasions:For Giving Thanks to God for the Gift of Human Life", + "Preservation of Peace and Justice" + ] + }, + "title": "Common" + }, + "LitGrade": { + "type": "integer", + "minimum": 0, + "maximum": 7, + "description": "0 = WEEKDAY, 1 = COMMEMORATION, 2 = MEMORIAL_OPT, 3 = MEMORIAL, 4 = FEAST, 5 = FEAST_LORD, 6 = SOLEMNITY, 7 = HIGHER_SOLEMNITY", + "title": "LitGrade" + }, + "Readings": { + "type": "object", + "additionalProperties": false, + "properties": { + "PALM_GOSPEL": { + "type": "string" + }, + "FIRST_READING": { + "type": "string" + }, + "RESPONSORIAL_PSALM": { + "type": "string" + }, + "SECOND_READING": { + "type": "string" + }, + "RESPONSORIAL_PSALM_2": { + "type": "string" + }, + "THIRD_READING": { + "type": "string" + }, + "RESPONSORIAL_PSALM_3": { + "type": "string" + }, + "FOURTH_READING": { + "type": "string" + }, + "RESPONSORIAL_PSALM_4": { + "type": "string" + }, + "FIFTH_READING": { + "type": "string" + }, + "RESPONSORIAL_PSALM_5": { + "type": "string" + }, + "SIXTH_READING": { + "type": "string" + }, + "RESPONSORIAL_PSALM_6": { + "type": "string" + }, + "SEVENTH_READING": { + "type": "string" + }, + "RESPONSORIAL_PSALM_7": { + "type": "string" + }, + "EPISTLE": { + "type": "string" + }, + "RESPONSORIAL_PSALM_EPISTLE": { + "type": "string" + }, + "ALLELUIA_VERSE": { + "type": "string" + }, + "GOSPEL": { + "type": "string" + } + }, + "required": [ + "FIRST_READING", + "RESPONSORIAL_PSALM", + "ALLELUIA_VERSE", + "GOSPEL" + ], + "title": "Readings" + }, + "Day": { + "type": "integer", + "minimum": 1, + "description": "maximum value will be 28, 29, 30, or 31 depending on whether we are dealing with a leap year, and whether we are dealing with a month that usually has 28, 30, or 31 days", + "title": "Day" + }, + "Month": { + "type": "integer", + "minimum": 1, + "maximum": 12, + "title": "Month" + }, + "LitFeastType": { + "type": "string", + "enum": [ + "fixed", + "mobile" + ], + "title": "LitFeastType" + }, + "Epiphany": { + "type": "string", + "enum": [ + "JAN6", + "SUNDAY_JAN2_JAN8" + ], + "title": "Epiphany" + }, + "Ascension": { + "type": "string", + "enum": [ + "SUNDAY", + "THURSDAY" + ], + "title": "Ascension" + }, + "CorpusChristi": { + "type": "string", + "enum": [ + "SUNDAY", + "THURSDAY" + ], + "title": "CorpusChristi" + }, + "DecreeLangs": { + "type": "object", + "additionalProperties": false, + "properties": { + "DE": { + "type": "string", + "description": "German", + "enum": [ + "de", + "ge" + ] + }, + "EN": { + "type": "string", + "description": "English", + "enum": [ + "en" + ] + }, + "ES": { + "type": "string", + "description": "Spanish", + "enum": [ + "es", + "sp" + ] + }, + "FR": { + "type": "string", + "description": "French", + "enum": [ + "fr" + ] + }, + "IT": { + "type": "string", + "description": "Italian", + "enum": [ + "it" + ] + }, + "LA": { + "type": "string", + "description": "Latin", + "enum": [ + "la" + ] + }, + "PL": { + "type": "string", + "description": "Polish", + "enum": [ + "pl" + ] + }, + "PT": { + "type": "string", + "description": "Portuguese", + "enum": [ + "po", + "pt" + ] + } + }, + "description": "mapping between two-letter ISO code for a language, and the actual two-letter representation used in the Decree URL", + "title": "DecreeLangs" + }, + "Calendar": { + "type": "string", + "enum": [ + "", + "GENERAL ROMAN" + ], + "title": "Calendar" + }, + "DecreeURL": { + "type": "string", + "pattern": "^https?:\\\/\\\/(www\\.)?[a-zA-Z]{1,50}\\.[a-zA-Z]{1,6}([-a-zA-Z0-9()@:%._+~\\\/]*)\\.(html|pdf)$", + "title": "DecreeURL" + }, + "Missals": { + "type": "array", + "uniqueItems": true, + "description": "Missals as defined in the PHP RomanMissal enum, from which data for the current calendar is drawn", + "items": { + "$ref": "#/definitions/Missal" + } + }, + "MissalDef": { + "type": "string", + "enum": [ + "EDITIO_TYPICA_1970", + "REIMPRESSIO_EMENDATA_1971", + "EDITIO_TYPICA_SECUNDA_1975", + "EDITIO_TYPICA_TERTIA_2002", + "EDITIO_TYPICA_TERTIA_EMENDATA_2008", + "USA_EDITION_2011", + "ITALY_EDITION_1983", + "ITALY_EDITION_2020" + ] + }, + "Missal": { + "type": "string", + "enum": [ + "VATICAN_1970", + "VATICAN_1971", + "VATICAN_1975", + "VATICAN_2002", + "VATICAN_2008", + "USA_2011", + "ITALY_1983", + "ITALY_2020" + ] + }, + "MissalName": { + "type": "string", + "enum": [ + "Editio Typica 1970", + "Reimpressio Emendata 1971", + "Editio Typica Secunda 1975", + "Editio Typica Tertia 2002", + "Editio Typica Tertia Emendata 2008", + "2011 Roman Missal issued by the USCCB", + "Messale Romano ed. 1983 pubblicata dalla CEI", + "Messale Romano ed. 2020 pubblicata dalla CEI" + ] + }, + "MissalFileName": { + "type": [ "string", "boolean" ], + "enum": [ + "data/propriumdesanctis_1970/propriumdesanctis_1970.json", + "data/propriumdesanctis_2002/propriumdesanctis_2002.json", + "data/propriumdesanctis_2008/propriumdesanctis_2008.json", + "data/propriumdesanctis_USA_2011/propriumdesanctis_USA_2011.json", + "data/propriumdesanctis_ITALY_1983/propriumdesanctis_ITALY_1983.json", + false + ] + }, + "Region": { + "type": "string", + "enum": [ + "AFGHANISTAN", + "ÅLAND ISLANDS", + "ALBANIA", + "ALGERIA", + "AMERICAN SAMOA", + "ANDORRA", + "ANGOLA", + "ANGUILLA", + "ANTIGUA & BARBUDA", + "ARGENTINA", + "ARMENIA", + "ARUBA", + "AUSTRALIA", + "AUSTRIA", + "AZERBAIJAN", + "BAHAMAS", + "BAHRAIN", + "BANGLADESH", + "BARBADOS", + "BELARUS", + "BELGIUM", + "BELIZE", + "BENIN", + "BERMUDA", + "BHUTAN", + "BOLIVIA", + "BOSNIA & HERZEGOVINA", + "BOTSWANA", + "BRAZIL", + "BRITISH INDIAN OCEAN TERRITORY", + "BRITISH VIRGIN ISLANDS", + "BRUNEI", + "BULGARIA", + "BURKINA FASO", + "BURUNDI", + "CAMBODIA", + "CAMEROON", + "CANADA", + "CANARY ISLANDS", + "CAPE VERDE", + "CARIBBEAN NETHERLANDS", + "CAYMAN ISLANDS", + "CENTRAL AFRICAN REPUBLIC", + "CEUTA & MELILLA", + "CHAD", + "CHILE", + "CHINA", + "CHRISTMAS ISLAND", + "COCOS (KEELING) ISLANDS", + "COLOMBIA", + "COMOROS", + "CONGO - BRAZZAVILLE", + "CONGO - KINSHASA", + "COOK ISLANDS", + "COSTA RICA", + "CÔTE D’IVOIRE", + "CROATIA", + "CUBA", + "CURAÇAO", + "CYPRUS", + "CZECHIA", + "DENMARK", + "DIEGO GARCIA", + "DJIBOUTI", + "DOMINICA", + "DOMINICAN REPUBLIC", + "ECUADOR", + "EGYPT", + "EL SALVADOR", + "EQUATORIAL GUINEA", + "ERITREA", + "ESTONIA", + "ESWATINI", + "ETHIOPIA", + "EUROPE", + "FALKLAND ISLANDS", + "FAROE ISLANDS", + "FIJI", + "FINLAND", + "FRANCE", + "FRENCH GUIANA", + "FRENCH POLYNESIA", + "GABON", + "GAMBIA", + "GEORGIA", + "GERMANY", + "GHANA", + "GIBRALTAR", + "GREECE", + "GREENLAND", + "GRENADA", + "GUADELOUPE", + "GUAM", + "GUATEMALA", + "GUERNSEY", + "GUINEA", + "GUINEA-BISSAU", + "GUYANA", + "HAITI", + "HONDURAS", + "HONG KONG SAR CHINA", + "HUNGARY", + "ICELAND", + "INDIA", + "INDONESIA", + "IRAN", + "IRAQ", + "IRELAND", + "ISLE OF MAN", + "ISRAEL", + "ITALY", + "JAMAICA", + "JAPAN", + "JERSEY", + "JORDAN", + "KAZAKHSTAN", + "KENYA", + "KIRIBATI", + "KOSOVO", + "KUWAIT", + "KYRGYZSTAN", + "LAOS", + "LATIN AMERICA", + "LATVIA", + "LEBANON", + "LESOTHO", + "LIBERIA", + "LIBYA", + "LIECHTENSTEIN", + "LITHUANIA", + "LUXEMBOURG", + "MACAO SAR CHINA", + "MADAGASCAR", + "MALAWI", + "MALAYSIA", + "MALI", + "MALTA", + "MARSHALL ISLANDS", + "MARTINIQUE", + "MAURITANIA", + "MAURITIUS", + "MAYOTTE", + "MEXICO", + "MICRONESIA", + "MOLDOVA", + "MONACO", + "MONGOLIA", + "MONTENEGRO", + "MONTSERRAT", + "MOROCCO", + "MOZAMBIQUE", + "MYANMAR (BURMA)", + "NAMIBIA", + "NAURU", + "NEPAL", + "NETHERLANDS", + "NEW CALEDONIA", + "NEW ZEALAND", + "NICARAGUA", + "NIGER", + "NIGERIA", + "NIUE", + "NORFOLK ISLAND", + "NORTH KOREA", + "NORTH MACEDONIA", + "NORTHERN MARIANA ISLANDS", + "NORWAY", + "OMAN", + "PAKISTAN", + "PALAU", + "PALESTINIAN TERRITORIES", + "PANAMA", + "PAPUA NEW GUINEA", + "PARAGUAY", + "PERU", + "PHILIPPINES", + "PITCAIRN ISLANDS", + "POLAND", + "PORTUGAL", + "PUERTO RICO", + "QATAR", + "RÉUNION", + "ROMANIA", + "RUSSIA", + "RWANDA", + "SAMOA", + "SAN MARINO", + "SÃO TOMÉ & PRÍNCIPE", + "SAUDI ARABIA", + "SENEGAL", + "SERBIA", + "SEYCHELLES", + "SIERRA LEONE", + "SINGAPORE", + "SINT MAARTEN", + "SLOVAKIA", + "SLOVENIA", + "SOLOMON ISLANDS", + "SOMALIA", + "SOUTH AFRICA", + "SOUTH KOREA", + "SOUTH SUDAN", + "SPAIN", + "SRI LANKA", + "ST_ BARTHÉLEMY", + "ST_ HELENA", + "ST_ KITTS & NEVIS", + "ST_ LUCIA", + "ST_ MARTIN", + "ST_ PIERRE & MIQUELON", + "ST_ VINCENT & GRENADINES", + "SUDAN", + "SURINAME", + "SVALBARD & JAN MAYEN", + "SWEDEN", + "SWITZERLAND", + "SYRIA", + "TAIWAN", + "TAJIKISTAN", + "TANZANIA", + "THAILAND", + "TIMOR-LESTE", + "TOGO", + "TOKELAU", + "TONGA", + "TRINIDAD & TOBAGO", + "TUNISIA", + "TURKEY", + "TURKMENISTAN", + "TURKS & CAICOS ISLANDS", + "TUVALU", + "U_S_ OUTLYING ISLANDS", + "U_S_ VIRGIN ISLANDS", + "UGANDA", + "UKRAINE", + "UNITED ARAB EMIRATES", + "UNITED KINGDOM", + "UNITED STATES", + "USA", + "URUGUAY", + "UZBEKISTAN", + "VANUATU", + "VATICAN", + "VATICAN CITY", + "VENEZUELA", + "VIETNAM", + "WALLIS & FUTUNA", + "WESTERN SAHARA", + "WORLD", + "YEMEN", + "ZAMBIA", + "ZIMBABWE" + ] + }, + "MemorialFromDecreesAction": { + "type": "string", + "enum": [ + "createNew", + "setProperty", + "makeDoctor" + ], + "title": "MemorialFromDecreesAction" + }, + "WiderRegionCalendarAction": { + "type": "string", + "enum": [ + "createNew", + "makePatron" + ], + "title": "WiderRegionCalendarAction" + }, + "NationalCalendarAction": { + "type": "string", + "enum": [ + "createNew", + "setProperty", + "makePatron", + "moveFestivity" + ], + "title": "NationalCalendarAction" + } + } +} diff --git a/schemas/DiocesanCalendar.json b/schemas/DiocesanCalendar.json new file mode 100644 index 00000000..273fd682 --- /dev/null +++ b/schemas/DiocesanCalendar.json @@ -0,0 +1,91 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/DiocesanCalendar", + "definitions": { + "DiocesanCalendar": { + "type": "object", + "additionalProperties": false, + "properties": { + "LitCal": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/LitCal" + } + }, + "Overrides": { + "$ref": "#/definitions/Overrides" + } + }, + "required": [ + "LitCal" + ], + "title": "DiocesanCalendar" + }, + "LitCal": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "color": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitColor" + }, + "grade": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitGrade" + }, + "common": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitCommon" + }, + "day": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Day" + }, + "month": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Month" + }, + "readings": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Readings" + }, + "formRowNum": { + "type": "integer" + }, + "sinceYear": { + "type": "integer" + }, + "decreeURL": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/DecreeURL" + }, + "decreeLangs": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/DecreeLangs" + } + }, + "required": [ + "color", + "common", + "day", + "formRowNum", + "grade", + "month", + "name", + "sinceYear" + ], + "title": "LitCal" + }, + "Overrides": { + "type": "object", + "additionalProperties": false, + "properties": { + "Epiphany": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Epiphany" + }, + "Ascension": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Ascension" + }, + "CorpusChristi": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/CorpusChristi" + } + }, + "title": "Overrides" + } + } +} diff --git a/schemas/Index.json b/schemas/Index.json new file mode 100644 index 00000000..60052765 --- /dev/null +++ b/schemas/Index.json @@ -0,0 +1,35 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/Index", + "definitions": { + "Index": { + "type": "object", + "patternProperties": { + "[A-Z]{1,255}": { + "type": "object", + "additionalProperties": false, + "properties": { + "path": { + "type": "string", + "pattern": "^nations\\\/[A-Z &()\\-]+\\\/[a-zA-Z0-9 ()-]+\\.json$" + }, + "nation": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Region" + }, + "diocese": { + "type": "string" + }, + "group": { + "type": "string" + } + }, + "required": [ + "path", + "nation", + "diocese" + ] + } + } + } + } +} diff --git a/schemas/LitCal.json b/schemas/LitCal.json new file mode 100644 index 00000000..e8d147dd --- /dev/null +++ b/schemas/LitCal.json @@ -0,0 +1,195 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/LitCal", + "definitions": { + "LitCal": { + "type": "object", + "additionalProperties": false, + "properties": { + "Settings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Year": { + "type": "integer", + "minimum": 1969, + "maximum": 9999 + }, + "Epiphany": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Epiphany" + }, + "Ascension": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Ascension" + }, + "CorpusChristi": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/CorpusChristi" + }, + "Locale": { + "type": "string", + "enum": [ + "DE", + "EN", + "ES", + "FR", + "IT", + "LA", + "PT" + ] + }, + "ReturnType": { + "type": "string", + "enum": [ + "ICS", + "JSON", + "XML" + ] + }, + "NationalCalendar": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Region" + }, + "DiocesanCalendar": { + "type": "string" + } + }, + "required": [ + "Year", + "Epiphany", + "Ascension", + "CorpusChristi", + "Locale", + "ReturnType" + ] + }, + "Metadata": { + "type": "object", + "additionalProperties": false, + "properties": { + "VERSION": { + "type": "string", + "minLength": 3, + "maxLength": 5, + "pattern": "^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)$" + }, + "RequestHeaders": { + "type": "string", + "contentMediaType": "application/json" + }, + "Solemnities": { + "$ref": "#/definitions/DateTimeObjectCollection" + }, + "FeastsMemorials": { + "$ref": "#/definitions/DateTimeObjectCollection" + } + }, + "required": [ + "VERSION", + "RequestHeaders", + "Solemnities", + "FeastsMemorials" + ] + }, + "LitCal": { + "type": "object", + "patternProperties": { + "": { + "$ref": "#/definitions/Festivity" + } + } + }, + "Messages": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "Settings", + "Metadata", + "LitCal", + "Messages" + ] + }, + "DateTimeObjectCollection": { + "type": "object", + "patternProperties": { + "": { + "type": "object", + "additionalProperties": false, + "properties": { + "date": { + "type": "string", + "format": "date-time" + }, + "timezone_type": { + "type": "integer", + "const": 3 + }, + "timezone": { + "type": "string", + "const": "UTC" + } + } + } + } + }, + "Festivity": { + "type": "object", + "properties": { + "eventIdx": { + "type": "integer", + "minimum": 0, + "maximum": 999 + }, + "name": { + "type": "string" + }, + "date": { + "type": "integer", + "minimum": -86400, + "maximum": 253402214400 + }, + "color": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitColor" + }, + "type": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitFeastType" + }, + "grade": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitGrade" + }, + "displayGrade": { + "type": "string" + }, + "common": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitCommon" + }, + "liturgicalYear": { + "type": "string" + }, + "isVigilMass": { + "type": "boolean" + }, + "hasVigilMass": { + "type": "boolean" + }, + "hasVesperI": { + "type": "boolean" + }, + "hasVesperII": { + "type": "boolean" + } + }, + "required": [ + "eventIdx", + "name", + "date", + "color", + "type", + "grade", + "displayGrade", + "common" + ] + } + } +} diff --git a/schemas/LitCalMetadata.json b/schemas/LitCalMetadata.json new file mode 100644 index 00000000..f72f48f6 --- /dev/null +++ b/schemas/LitCalMetadata.json @@ -0,0 +1,179 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "LitCalMetadata", + "type": "object", + "properties": { + "LitCalMetadata": { + "$ref": "#/definitions/LitCalMetadata" + } + }, + "required": [ + "LitCalMetadata" + ], + "additionalProperties": false, + "definitions": { + "LitCalMetadata": { + "type": "object", + "properties": { + "NationalCalendars": { + "type": "object", + "propertyNames": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Region" + }, + "patternProperties": { + "": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "NationalCalendarsMetadata": { + "type": "object", + "additionalProperties": false, + "propertyNames": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Region" + }, + "patternProperties": { + "": { + "type": "object", + "properties": { + "missals": { + "type": "array", + "items": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Missal" + } + }, + "widerRegions": { + "type": "array", + "items": { + "$ref": "#/definitions/WiderRegionDef" + } + }, + "dioceses": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "DiocesanCalendars": { + "type": "object", + "patternProperties": { + "": { + "type": "object", + "properties": { + "nation": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Region" + }, + "diocese": { + "type": "string" + }, + "group": { + "type": "string" + } + }, + "required": [ + "nation", + "diocese" + ] + } + } + }, + "DiocesanGroups": { + "type": "object", + "patternProperties": { + "": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "WiderRegions": { + "type": "array", + "items": { + "$ref": "#/definitions/WiderRegionDef" + } + }, + "RomanMissals": { + "type": "object", + "propertyNames": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/MissalDef" + }, + "patternProperties": { + "": { + "type": "object", + "properties": { + "value": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Missal" + }, + "name": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/MissalName" + }, + "sanctoraleFileName": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/MissalFileName" + }, + "yearLimits": { + "type": "object", + "properties": { + "sinceYear": { + "type": "integer" + }, + "untilYear": { + "type": "integer" + } + }, + "required": [ "sinceYear" ], + "additionalProperties": false + } + }, + "required": [ + "value", + "name", + "sanctoraleFileName", + "yearLimits" + ], + "additionalProperties": false + } + } + } + }, + "required": [ + "NationalCalendars", + "NationalCalendarsMetadata", + "DiocesanCalendars", + "DiocesanGroups", + "WiderRegions", + "RomanMissals" + ], + "additionalProperties": false + }, + "WiderRegionDef": { + "type": "string", + "enum": [ + "Africa", + "Alsace", + "Americas", + "Anatolia", + "Antarctica", + "Asia", + "Australasia", + "Central Africa", + "Central America", + "Europe", + "Indies", + "North Africa", + "Oceania", + "Scandinavia", + "South America", + "West Indies" + ] + } + } +} diff --git a/schemas/LitCalTranslation.json b/schemas/LitCalTranslation.json new file mode 100644 index 00000000..26138720 --- /dev/null +++ b/schemas/LitCalTranslation.json @@ -0,0 +1,19 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/LitCalTranslation", + "definitions": { + "LitCalTranslation": { + "type": "object", + "description": "a collection of key value pairs, in which the keys are the tags for Liturgical events as defined in the Liturgical Calendar json definition being translated; the name of the current file is the two-letter ISO code of the language for the translation", + "additionalProperties": { + "$ref": "#/definitions/Translation" + }, + "title": "LitCalTranslation" + }, + "Translation": { + "type": "string", + "description": "a key value pair in which the key is a Liturgical event tag that corresponds to the same tag in the corresponding Liturgical Calendar JSON definition being translated, and the value is the translated value", + "title": "Translation" + } + } +} diff --git a/schemas/MemorialsFromDecrees.json b/schemas/MemorialsFromDecrees.json new file mode 100644 index 00000000..8e1c3437 --- /dev/null +++ b/schemas/MemorialsFromDecrees.json @@ -0,0 +1,93 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "array", + "items": { + "$ref": "#/definitions/MemorialsFromDecrees" + }, + "definitions": { + "MemorialsFromDecrees": { + "type": "object", + "additionalProperties": false, + "properties": { + "Festivity": { + "$ref": "#/definitions/Festivity" + }, + "Metadata": { + "$ref": "#/definitions/Metadata" + } + }, + "required": [ + "Festivity", + "Metadata" + ], + "title": "MemorialsFromDecrees" + }, + "Festivity": { + "type": "object", + "additionalProperties": false, + "properties": { + "TAG": { + "type": "string" + }, + "GRADE": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitGrade" + }, + "COMMON": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitCommon" + }, + "CALENDAR": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Calendar" + }, + "COLOR": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitColor" + }, + "TYPE": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitFeastType" + }, + "READINGS": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Readings" + }, + "MONTH": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Month" + }, + "DAY": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Day" + } + }, + "required": [ + "TAG" + ], + "title": "Festivity" + }, + "Metadata": { + "type": "object", + "additionalProperties": false, + "properties": { + "action": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/MemorialFromDecreesAction" + }, + "property": { + "type": "string", + "enum": [ + "name", + "grade" + ] + }, + "decreeURL": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/DecreeURL" + }, + "decreeLangs": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/DecreeLangs" + }, + "sinceYear": { + "type": "integer" + } + }, + "required": [ + "action", + "decreeURL" + ], + "title": "Metadata" + } + } +} diff --git a/schemas/NationalCalendar.json b/schemas/NationalCalendar.json new file mode 100644 index 00000000..903da89e --- /dev/null +++ b/schemas/NationalCalendar.json @@ -0,0 +1,208 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/NationalCalendar", + "definitions": { + "NationalCalendar": { + "type": "object", + "additionalProperties": false, + "properties": { + "LitCal": { + "type": "array", + "items": { + "$ref": "#/definitions/LitCal" + } + }, + "Settings": { + "$ref": "#/definitions/Settings" + }, + "Metadata": { + "$ref": "#/definitions/NationalCalendarMetadata" + } + }, + "required": [ + "LitCal", + "Metadata", + "Settings" + ], + "title": "NationalCalendar" + }, + "LitCal": { + "type": "object", + "additionalProperties": false, + "properties": { + "Festivity": { + "$ref": "#/definitions/Festivity" + }, + "Metadata": { + "$ref": "#/definitions/LitCalMetadata" + } + }, + "required": [ + "Festivity", + "Metadata" + ], + "title": "LitCal" + }, + "Festivity": { + "type": "object", + "additionalProperties": false, + "properties": { + "tag": { + "type": "string" + }, + "name": { + "type": "string" + }, + "color": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitColor" + }, + "grade": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitGrade" + }, + "day": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Day" + }, + "month": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Month" + }, + "common": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitCommon" + }, + "readings": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Readings" + }, + "strtotime": { + "type": "string", + "description": "supports PHP strtotime string format" + } + }, + "anyOf": [ + { + "required": [ + "day", + "month", + "name", + "tag" + ] + }, + { + "required": [ + "strtotime", + "name", + "tag", + "common", + "color", + "grade" + ] + } + ], + "title": "Festivity" + }, + "LitCalMetadata": { + "type": "object", + "additionalProperties": false, + "properties": { + "action": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/NationalCalendarAction" + }, + "sinceYear": { + "type": "integer" + }, + "untilYear": { + "type": "integer" + }, + "missal": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Missal" + }, + "reason": { + "type": "string" + }, + "property": { + "type": "string", + "enum": [ + "name", + "grade" + ] + }, + "decreeURL": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/DecreeURL" + }, + "decreeLangs": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/DecreeLangs" + } + }, + "required": [ + "action", + "sinceYear" + ], + "title": "LitCalMetadata" + }, + "NationalCalendarMetadata": { + "type": "object", + "additionalProperties": false, + "properties": { + "Region": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Region" + }, + "WiderRegion": { + "$ref": "#/definitions/WiderRegion" + }, + "Missals": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Missals" + } + }, + "required": [ + "Missals", + "Region", + "WiderRegion" + ], + "title": "NationalCalendarMetadata" + }, + "WiderRegion": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "jsonFile": { + "type": "string" + }, + "i18nFile": { + "type": "string" + } + }, + "required": [ + "i18nFile", + "jsonFile", + "name" + ], + "title": "WiderRegion" + }, + "Settings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Epiphany": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Epiphany" + }, + "Ascension": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Ascension" + }, + "CorpusChristi": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/CorpusChristi" + }, + "Locale": { + "type": "string" + } + }, + "required": [ + "Ascension", + "CorpusChristi", + "Epiphany", + "Locale" + ], + "title": "Settings" + } + } +} diff --git a/schemas/PropriumDeSanctis.json b/schemas/PropriumDeSanctis.json new file mode 100644 index 00000000..a21ac911 --- /dev/null +++ b/schemas/PropriumDeSanctis.json @@ -0,0 +1,83 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "array", + "items": { + "$ref": "#/definitions/PropriumDeSanctis" + }, + "definitions": { + "PropriumDeSanctis": { + "type": "object", + "additionalProperties": false, + "properties": { + "MONTH": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Month" + }, + "DAY": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Day" + }, + "TAG": { + "type": "string" + }, + "NAME": { + "type": "string" + }, + "GRADE": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitGrade" + }, + "DISPLAYGRADE": { + "type": "string" + }, + "COMMON": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitCommon" + }, + "CALENDAR": { + "$ref": "#/definitions/Calendar" + }, + "COLOR": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitColor" + }, + "READINGS": { + "oneOf": [ + { + "$ref": "#/definitions/LiturgicalEventWithVigilMass" + }, + { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Readings" + } + ] + } + }, + "required": [ + "CALENDAR", + "COLOR", + "COMMON", + "DAY", + "GRADE", + "MONTH", + "READINGS", + "TAG" + ], + "title": "PropriumDeSanctis" + }, + "LiturgicalEventWithVigilMass": { + "type": "object", + "additionalProperties": false, + "properties": { + "VIGIL": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Readings" + }, + "DAY": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Readings" + } + }, + "required": [ + "VIGIL", + "DAY" + ], + "title": "LiturgicalEventWithMass" + }, + "Calendar": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Calendar" + } + } +} diff --git a/schemas/PropriumDeTempore.json b/schemas/PropriumDeTempore.json new file mode 100644 index 00000000..8ca1dd70 --- /dev/null +++ b/schemas/PropriumDeTempore.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "$ref": "#/definitions/PropriumDeTempore", + "definitions": { + "PropriumDeTempore": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/LitEvent" + }, + "title": "PropriumDeTempore" + }, + "LitEvent": { + "type": "object", + "additionalProperties": false, + "properties": { + "READINGS": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Readings" + } + }, + "required": [ + "READINGS" + ] + } + } +} diff --git a/schemas/WiderRegionCalendar.json b/schemas/WiderRegionCalendar.json new file mode 100644 index 00000000..8d127075 --- /dev/null +++ b/schemas/WiderRegionCalendar.json @@ -0,0 +1,401 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/WiderRegionCalendar", + "definitions": { + "WiderRegionCalendar": { + "type": "object", + "additionalProperties": false, + "properties": { + "LitCal": { + "type": "array", + "items": { + "$ref": "#/definitions/LitCal" + } + }, + "NationalCalendars": { + "$ref": "#/definitions/NationalCalendars" + }, + "Metadata": { + "$ref": "#/definitions/CalendarMetadata" + } + }, + "required": [ + "LitCal", + "NationalCalendars", + "Metadata" + ], + "title": "WiderRegionCalendar" + }, + "LitCal": { + "type": "object", + "additionalProperties": false, + "properties": { + "Festivity": { + "$ref": "#/definitions/Festivity" + }, + "Metadata": { + "$ref": "#/definitions/Metadata" + } + }, + "required": [ + "Festivity", + "Metadata" + ], + "title": "LitCal" + }, + "Festivity": { + "type": "object", + "additionalProperties": false, + "properties": { + "tag": { + "type": "string" + }, + "name": { + "type": "string" + }, + "color": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitColor" + }, + "grade": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitGrade" + }, + "day": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Day" + }, + "month": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Month" + }, + "common": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/LitCommon" + }, + "readings": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/Readings" + } + }, + "required": [ + "color", + "day", + "grade", + "month", + "tag" + ], + "title": "Festivity" + }, + "Metadata": { + "type": "object", + "additionalProperties": false, + "properties": { + "action": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/WiderRegionCalendarAction" + }, + "sinceYear": { + "type": "integer" + }, + "decreeURL": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/DecreeURL" + }, + "decreeLangs": { + "$ref": "https://litcal.org/api/dev/schemas/CommonDef.json#/definitions/DecreeLangs" + }, + "untilYear": { + "type": "integer" + } + }, + "required": [ + "action", + "decreeLangs", + "decreeURL", + "sinceYear" + ], + "title": "Metadata" + }, + "NationalCalendars": { + "type": "object", + "propertyNames": { + "enum": [ + "Afghanistan", + "Åland Islands", + "Albania", + "Algeria", + "American Samoa", + "Andorra", + "Angola", + "Anguilla", + "Antigua & Barbuda", + "Argentina", + "Armenia", + "Aruba", + "Australia", + "Austria", + "Azerbaijan", + "Bahamas", + "Bahrain", + "Bangladesh", + "Barbados", + "Belarus", + "Belgium", + "Belize", + "Benin", + "Bermuda", + "Bhutan", + "Bolivia", + "Bosnia & Herzegovina", + "Botswana", + "Brazil", + "British Indian Ocean Territory", + "British Virgin Islands", + "Brunei", + "Bulgaria", + "Burkina Faso", + "Burundi", + "Cambodia", + "Cameroon", + "Canada", + "Canary Islands", + "Cape Verde", + "Caribbean Netherlands", + "Cayman Islands", + "Central African Republic", + "Ceuta & Melilla", + "Chad", + "Chile", + "China", + "Christmas Island", + "Cocos (Keeling) Islands", + "Colombia", + "Comoros", + "Congo - Brazzaville", + "Congo - Kinshasa", + "Cook Islands", + "Costa Rica", + "Côte d’Ivoire", + "Croatia", + "Cuba", + "Curaçao", + "Cyprus", + "Czechia", + "Denmark", + "Diego Garcia", + "Djibouti", + "Dominica", + "Dominican Republic", + "Ecuador", + "Egypt", + "El Salvador", + "Equatorial Guinea", + "Eritrea", + "Estonia", + "Eswatini", + "Ethiopia", + "Europe", + "Falkland Islands", + "Faroe Islands", + "Fiji", + "Finland", + "France", + "French Guiana", + "French Polynesia", + "Gabon", + "Gambia", + "Georgia", + "Germany", + "Ghana", + "Gibraltar", + "Greece", + "Greenland", + "Grenada", + "Guadeloupe", + "Guam", + "Guatemala", + "Guernsey", + "Guinea", + "Guinea-Bissau", + "Guyana", + "Haiti", + "Honduras", + "Hong Kong SAR China", + "Hungary", + "Iceland", + "India", + "Indonesia", + "Iran", + "Iraq", + "Ireland", + "Isle of Man", + "Israel", + "Italy", + "Jamaica", + "Japan", + "Jersey", + "Jordan", + "Kazakhstan", + "Kenya", + "Kiribati", + "Kosovo", + "Kuwait", + "Kyrgyzstan", + "Laos", + "Latin America", + "Latvia", + "Lebanon", + "Lesotho", + "Liberia", + "Libya", + "Liechtenstein", + "Lithuania", + "Luxembourg", + "Macao SAR China", + "Madagascar", + "Malawi", + "Malaysia", + "Mali", + "Malta", + "Marshall Islands", + "Martinique", + "Mauritania", + "Mauritius", + "Mayotte", + "Mexico", + "Micronesia", + "Moldova", + "Monaco", + "Mongolia", + "Montenegro", + "Montserrat", + "Morocco", + "Mozambique", + "Myanmar (Burma)", + "Namibia", + "Nauru", + "Nepal", + "Netherlands", + "New Caledonia", + "New Zealand", + "Nicaragua", + "Niger", + "Nigeria", + "Niue", + "Norfolk Island", + "North Korea", + "North Macedonia", + "Northern Mariana Islands", + "Norway", + "Oman", + "Pakistan", + "Palau", + "Palestinian Territories", + "Panama", + "Papua New Guinea", + "Paraguay", + "Peru", + "Philippines", + "Pitcairn Islands", + "Poland", + "Portugal", + "Puerto Rico", + "Qatar", + "Réunion", + "Romania", + "Russia", + "Rwanda", + "Samoa", + "San Marino", + "São Tomé & Príncipe", + "Saudi Arabia", + "Senegal", + "Serbia", + "Seychelles", + "Sierra Leone", + "Singapore", + "Sint Maarten", + "Slovakia", + "Slovenia", + "Solomon Islands", + "Somalia", + "South Africa", + "South Korea", + "South Sudan", + "Spain", + "Sri Lanka", + "St. Barthélemy", + "St. Helena", + "St. Kitts & Nevis", + "St. Lucia", + "St. Martin", + "St. Pierre & Miquelon", + "St. Vincent & Grenadines", + "Sudan", + "Suriname", + "Svalbard & Jan Mayen", + "Sweden", + "Switzerland", + "Syria", + "Taiwan", + "Tajikistan", + "Tanzania", + "Thailand", + "Timor-Leste", + "Togo", + "Tokelau", + "Tonga", + "Trinidad & Tobago", + "Tunisia", + "Turkey", + "Turkmenistan", + "Turks & Caicos Islands", + "Tuvalu", + "U.S. Outlying Islands", + "U.S. Virgin Islands", + "Uganda", + "Ukraine", + "United Arab Emirates", + "United Kingdom", + "United States", + "Uruguay", + "Uzbekistan", + "Vanuatu", + "Vatican City", + "Venezuela", + "Vietnam", + "Wallis & Futuna", + "Western Sahara", + "World", + "Yemen", + "Zambia", + "Zimbabwe" + ] + }, + "patternProperties": { + "": { + "type": "string", + "pattern": "[A-Z1-9]{2,3}" + } + }, + "title": "NationalCalendars" + }, + "CalendarMetadata": { + "type": "object", + "additionalProperties": false, + "properties": { + "IsMultilingual": { + "type": "boolean" + }, + "Languages": { + "type": "array", + "items": { + "type": "string", + "pattern": "[a-z]{2}_[A-Z1-9]{2,3}" + } + }, + "WiderRegion": { + "type": "string" + } + }, + "required": [ + "IsMultilingual", + "WiderRegion" + ], + "title": "CalendarMetadata" + } + } +} diff --git a/tests/NativityJohnBaptistTest.php b/tests/NativityJohnBaptistTest.php new file mode 100644 index 00000000..0e3928fe --- /dev/null +++ b/tests/NativityJohnBaptistTest.php @@ -0,0 +1,38 @@ + 1655942400, + 2033 => 2003097600, + 2044 => 2350252800 + ]; + + public function testJune23() : bool|object { + $res = false; + $expectedValue = self::$expectedValues[ self::$testObject->Settings->Year ]; + try { + $this->assertSame( $expectedValue, self::$testObject->LitCal->NativityJohnBaptist->date ); + $res = true; + } catch (Exception $e) { + $message = new stdClass(); + $type = property_exists( self::$testObject->Settings, 'NationalCalendar' ) ? 'the national calendar of ' : ( + property_exists( self::$testObject->Settings, 'DiocesanCalendar' ) ? 'the diocesan calendar of ' : '' + ); + $Calendar = property_exists( self::$testObject->Settings, 'NationalCalendar' ) ? self::$testObject->Settings->NationalCalendar : ( + property_exists( self::$testObject->Settings, 'DiocesanCalendar' ) ? self::$testObject->Settings->DiocesanCalendar : 'the Universal Roman Calendar' + ); + $message->type = "error"; + $message->text = "Nativity of John the Baptist test failed for Year " . self::$testObject->Settings->Year . " in {$type}{$Calendar}. Expected value: {$expectedValue}, actual value: " . self::$testObject->LitCal->NativityJohnBaptist->date . PHP_EOL . $e->getMessage(); + return $message; + } + return $res; + } +} diff --git a/tests/StJaneFrancesDeChantalTest.php b/tests/StJaneFrancesDeChantalTest.php new file mode 100644 index 00000000..edef07ca --- /dev/null +++ b/tests/StJaneFrancesDeChantalTest.php @@ -0,0 +1,83 @@ + 1008115200, + 2002 => 1029110400, + 2010 => 1281571200 //this test is significant since December 12th falls on a Sunday, so the memorial would have been suppressed if it hadn't been moved + ]; + + //Years from 2002 in which August 12th is a Sunday + public static array $overriddenSince2002 = [ + 2012, + 2018, + 2029, + 2035, + 2040, + 2046 + ]; + + //Years before 2002 in which December 12th is a Sunday + public static array $overriddenBefore2002 = [ + 1971, + 1976, + 1982, + 1993, + 1999 + ]; + + + public function testMovedOrNot() : bool|object { + $res = false; + $expectedValue = self::$expectedValues[ self::$testObject->Settings->Year ]; + try { + $this->assertSame( $expectedValue, self::$testObject->LitCal->StJaneFrancesDeChantal->date ); + $res = true; + } catch (Exception $e) { + $message = new stdClass(); + $type = property_exists( self::$testObject->Settings, 'NationalCalendar' ) ? 'the national calendar of ' : ( + property_exists( self::$testObject->Settings, 'DiocesanCalendar' ) ? 'the diocesan calendar of ' : '' + ); + $Calendar = property_exists( self::$testObject->Settings, 'NationalCalendar' ) ? self::$testObject->Settings->NationalCalendar : ( + property_exists( self::$testObject->Settings, 'DiocesanCalendar' ) ? self::$testObject->Settings->DiocesanCalendar : 'the Universal Roman Calendar' + ); + $message->type = "error"; + $message->text = "Saint Jane Frances de Chantal test (moved or not) failed for Year " . self::$testObject->Settings->Year . " in {$type}{$Calendar}. Expected value: {$expectedValue}, actual value: " . self::$testObject->LitCal->NativityJohnBaptist->date . PHP_EOL . $e->getMessage(); + return $message; + } + return $res; + } + + public function testOverridden() : bool|object { + $res = false; + if( in_array( self::$testObject->Settings->Year, self::$overriddenSince2002 ) || in_array( self::$testObject->Settings->Year, self::$overriddenBefore2002 ) ) { + try { + $this->assertObjectNotHasAttribute( 'StJaneFrancesDeChantal', self::$testObject->LitCal ); + $res = true; + } catch(Exception $e) { + $message = new stdClass(); + $type = property_exists( self::$testObject->Settings, 'NationalCalendar' ) ? 'the national calendar of ' : ( + property_exists( self::$testObject->Settings, 'DiocesanCalendar' ) ? 'the diocesan calendar of ' : '' + ); + $Calendar = property_exists( self::$testObject->Settings, 'NationalCalendar' ) ? self::$testObject->Settings->NationalCalendar : ( + property_exists( self::$testObject->Settings, 'DiocesanCalendar' ) ? self::$testObject->Settings->DiocesanCalendar : 'the Universal Roman Calendar' + ); + $message->type = "error"; + $message->text = "Saint Jane Frances de Chantal test (overriden) failed for Year " . self::$testObject->Settings->Year . " in {$type}{$Calendar}. The memorial should have been overridden since it falls on a Sunday!" . PHP_EOL . $e->getMessage(); + return $message; + } + } + return $res; + } +}