## Informace | O programu (podrobněji)

^ O programu | ^^ Informace | Úkoly >>

#### Jak to funguje (podrobněji)

Na základě vstupních parametrů se program rozhodne, kterou z úloh bude řešit. Ve většině úloh je třeba analýzovat rok, a to podle (pohyblivého) data velikonoční neděle, která určuje ostatní liturgické doby. Přesněji, vykonají se následující kroky:

1. Zjistí se aktuální datum.
2. Pro daný rok se spustí funkce `analyzuj_rok()`, která naplní strukturu pro daný (kalendářní) rok, která obsahuje data nejvýznamnějších mezníků liturgického roku v daném kalendářním roce a charakteristiky roku. Mezníky pro účely programu jsou:
   1. Křest Páně (1. neděle liturgického mezidobí, kterou končí Vánoční doba),
   2. Popeleční středa (začíná Postní doba),
   3. neděle Zmrtvýchvstání Páně (končí Postní doba a začíná Velikonoční doba),
   4. Seslání Ducha Svatého (končí Velikonoční doba a pokračuje liturgické mezidobí),
   5. První neděle adventní (končí liturgické mezidobí, začíná Adventní doba),
   6. Svátek Svaté rodiny.
   Ostatní pohyblivé svátky se lehce vypočítají podle mezníků, např.:
   1. Květná neděle: 7 dní před Velikonoční nedělí (podobně Zelený čtvrtek, Velký pátek, Bílá sobota, Velikonoční pondělí, Neděle ve Velikonočním oktávu),
   2. Nejsvětější Trojice: 7 dní po Seslání Ducha Svatého,
   3. Těla a Krve Páně: 11 dní po Seslání Ducha Svatého,
   4. Nejsvětějšího Srdce Ježíšova: 19 dní po Seslání Ducha Svatého.
   Charakteristikami roku jsou:
   1. zda je rok přestupný,
   2. písmeno liturgického roku, který začíná První adventní nedělí kalendářního roku,
   3. nedělní písmeno/písmena (někdy nedělní litera),
   4. pořadové číslo týdne „v mezidobí“, v kterém začíná Postní doba (tedy v kterém je Popeleční středa),
   5. pořadové číslo týdne „v mezidobí“, který následuje po Neděli Seslání Ducha Svatého, kterou končí Velikonoční doba.
3. Pro dané datum se spustí funkce `rozbor_dne()`, která naplní strukturu pro každý den údaji jednak kalendářními (den v týdnu, pořadí dne v roce), jednak liturgickými (liturgický rok, liturgická doba, týden žaltáře, pořadové číslo slavení podle č. 59 Všeobecných směrnic o liturgickém roce a o kalendáři, zda je slavnost zasvěceným svátkem, nakonec případně vlastní jméno slavnosti).
4. Podle takto připravených struktur se lehce vygeneruje stránka s aktuálními údaji (datum, měsíc, rok).

#### Informace o jednotlivém dnu

Pro generování informace o jednotlivém dnu (bez určené modlitby) vypadá postup programu následovně: spustí funkci `rozbor_dne()` pro daný den a výsledek zobrazí. Vzpomínaná funkce`rozbor_dne()` je jednou z klíčových funkcí aplikace, proto se jí budeme věnovat trošku podrobněji.

- 1. fáze: Všeobecná liturgická data
  Tato fáze zařadí daný den (podle data, přesněji pořadového čísla dne v roce) do liturgického období, tedy podle mezníků uvedených výše určí, o jaké liturgické období jde. Program přitom interně používá následující konstanty:
  - `/* liturgicke obdobia */`
    `//OBD_ADVENTNE`
    `#define OBD_ADVENTNE_I 1 /* do 16. decembra */`
    `#define OBD_ADVENTNE_II 2 /* po 16. decembri */`
    `//OBD_VIANOCNE`
    `#define OBD_VIANOCNE_I 3 /* do slavnosti zjavenia pana */`
    `#define OBD_VIANOCNE_II 4 /* po slavnosti zjavenia pana */`
    `//OBD_CEZ_ROK`
    `#define OBD_CEZ_ROK 5`
    `//OBD_POSTNE`
    `#define OBD_POSTNE_I 6 /* do soboty v piatom tyzdni */`
    `#define OBD_POSTNE_II_VELKY_TYZDEN 7 /* velky tyzden */`
    `//OBD_VELKONOCNE`
    `#define OBD_VELKONOCNE_TROJDNIE 8 /* umucenia a zmrtvychvstania Pana */`
    `#define OBD_VELKONOCNE_I 9 /* do nanebovstupenia pana */`
    `#define OBD_VELKONOCNE_II 10 /* po nanebovstupeni pana */`
    `/* nasleduju specialne pod-obdobia */`
    `#define OBD_VELKONOCNA_OKTAVA 0 /* velkonocna nedela -- 2. velk. ne */`
    `#define OBD_OKTAVA_NARODENIA 11 /* narodenie Pana -- 1. jan. */`
  V této části se určí všechny oslavy, které jsou v breviáři v částech Vlastní části liturgických dob a Slavnosti během liturgického mezidobí. Dále se určí pořadové týdny: týden daného období, týden žaltáře. Určí se i případné oslavy, které připadnou na hraniční dny mezi dobami (mezníky).
- 2. fáze: Liturgická data pro svátky svatých
  Tato fáze pro daný den (bez ohledu na předešlé liturgické začlenění) zjistí počet svátků svatých (bereme totiž v úvahu, že v daný den může být víc libovolných památek) a pro každý z nich vytvoří datovou strukturu, která obsahuje zejména název oslavy, typ oslavy a podstrukturu s daty, která určují, odkud se má brát společná část slavení. Příklad uvádí částečné nastavení datových struktur pro datum 24. dubna:
  `_global_svaty1.typslav = SLAV_LUB_SPOMIENKA;`
  `_global_svaty1.smer = 12; /* lubovolne spomienky podla vseobecneho kalendara */`
  `strcpy(_global_svaty1.meno, "Sv. Juraja, mučeníka");`
  `_global_svaty1.spolcast = _encode_spol_cast(MODL_SPOL_CAST_MUCENIK);`
  `pocet = 2;`
  `_global_svaty2.typslav = SLAV_LUB_SPOMIENKA;`
  `_global_svaty2.smer = 12; /* lubovolne spomienky podla vseobecneho kalendara */`
  `strcpy(_global_svaty2.meno, "Sv. Fidéla zo Sigmaringenu, kňaza a mučeníka");`
  `_global_svaty2.spolcast =`
  - `_encode_spol_cast(MODL_SPOL_CAST_MUCENIK, MODL_SPOL_CAST_DUCH_PAST_KNAZ);`
  Připomínáme, že v této fázi jsou všechny oslavy, které jsou v breviáři zařazené v části Vlastní texty pro svátky svatých.
- 3. fáze: Porovnání
  Ze všech oslav, přicházejících v úvahu, se upřednostní ta oslava, která má v tabulce liturgických dní vyšší stupeň. Jde-li o sobotu v liturgickém mezidobí, bere se v úvahu i sobotní památka Panny Marie.

#### Vytvoření modlitby

Pro generování modlitby vypadá postup programu následovně:

- jde-li o nešpory/kompletář, je třeba generovat „nadvakrát“, a to proto, že v případě, kdy první nešpory následujícího dne mají přednost před nešporami tohoto dne,
- tedy v případě nešpor/kompletáře spustí funkci `rozbor_dne()` pro následující den (a pokud si to okolnosti vyžadují, i `analyzuj_rok()` pro následující rok), výsledek uchová,
- spustí funkci `rozbor_dne()` pro daný den, jak je popsáno výše, a výsledek uchová,
- nastaví se společné části pro slavení z vlastní části svatých, a to podle toho, co bylo nastaveno funkcí `rozbor_dne()` pro daný den, jak bylo popsáno výše,
- pokud oslava používá žalmy ze žaltáře, spustí se funkce, která vrátí požadované žalmy,
- v případě nešpor/kompletáře zobrazí modlitbu pro ten den, který má přednost,
- výše zmíněný výsledek obsahuje datovou strukturu s jednotlivými složkami modlitby, a to dvojice <soubor, kotva> pro každou část modlitby. (Odpovídá to označení v jednotlivých HTML souborech.) Pod částí se rozumí každá antifona, žalm, responsorium, hymnus, modlitba dne či slavení (kolekta), jednoduše všechno, co se potenciálně může opakovat a často se i opakuje. To je důvod, proč se modlitba generuje, a není ve statické podobě. Jistě je pohodlnější mít celý breviář ve statické podobě tak, jak je na internetu. Avšak on-line breviář umožňuje vygenerovat souvislý text modlitby, aniž by bylo třeba listovat v breviáři a hledat hymnus na jiném místě než antifony a na dalším místě žalmy resp. chvalozpěv.
- Modlitba se generuje tak, že do prázdné šablony (obsahuje pouze nadpisy jednotlivých částí modlitby a pevné součásti modlitby, jako úvodní Sláva Otci či závěrečné požehnání) se postupně vkládají části, a to tak, že daná část se hledá v souboru soubor od místa BEGIN:kotva po místo END:kotva (a to í několikanásobně) podle dvojice <soubor, kotva>, a to podle toho, jak je to v jednotlivém zdrojovém HTML souboru vyznačeno.

#### Náčrt ostatních funkcí

Pro generování tabulky pohyblivých oslav vypadá postup programu následovně:

- pro každý rok se spustí funkce `analyzuj_rok()`, která naplní strukturu pro daný (kalendářní) rok,
- jednotlivé údaje se vypíší do řádku tabulky (s případnými hypertextovými odkazy).

Podobně se generuje i analýza roku, kde se navíc generují i tlačítka pro následující a předchozí rok.

Autor programové části © 1999-2019 Juraj Vidéky
Pomoc při překladu do češtiny: Gorazd
Všechna práva vyhrazena.