Kanon0.02.el
kanon.el , verze 0.02 z 1997-03-15 = prográmek v jazyce Emacs Lisp pro převod knih Bible kralické do kanonického formátu.
Příklad takového biblického textu viz: BK1: Epištola k Židům (svatého) Pavla apoštola.pf
Jak je vidět, tato verze programu je nedokončená.
; kanon.el v. 0.02
;
; (Copyleft) Kychot 1997
;
; Bible kralická - převod z Pilátova tvaru na kanonický
; =====================================================
;
; Tento 'kanonický' tvar vychází z původního formátu
; Vaška Piláta. Hlavní rozdíl je ve výraznějším oddělení
; odkazů od veršů: namísto původních dvou či více mezer
; stojí odkazy na samostatném řádku (resp. řádcích),
; odraženém tabelátorem (jen první z nich).
; Jednotlivé verše jsou pro přehlednost odděleny prázdným
; řádkem. Formátování zbývajících částí textu je přesněji
; formalizováno.
; Takto formátovaný text se na první pohled neliší od běžného
; textového dokumentu a je možno jej zpracovávat běžnými
; textovými editory. Navíc je tento tvar přesnější pro
; jeho další strojovou kontrolu, zpracování a úpravy
; (konkordance, HTML apod.)
; Vysvětlivky:
; -----------
; (p1 p2) seznam povinných položek p1 p2
; [p3] nepovinná položka p3
; (p5 | p6) alternatvivní položky p5 p6
; * předcházející seznam se může vícekrát opakovat, může i chybět
; + předcházející seznam se může vícekrát opakovat, musí být aspoň jeden
; // regulární výraz
; položka = definice struktury položky
; položka: příklad struktury položky
; Formátování textu:
; -----------------
; Oddělovače:
; \n prostá nová řádka (tj. ukončení řádku)
; polozka\n znamená, že položka je povinně ukončena znakem nové řádky
; (tj. je na samostatném řádku)
; \nn jedna prázdná řádka (odstavce úvodu nebo verše kapitoly)
; \nnn dvě prázdné řádky (oddělují vyšší struktury)
; \t tabelátor (na začátku řádky v seznamu v úvodu knihy)
; \sp\sp dvě mezery na začátku řádky (odkazy za veršem)
;
; Prostá nová řádka (neodražená) může mít jakožto oddělovač
; dvojí významnost:
; - Nevýznamným oddělovačem je v odstavci úvodu, v sumáři,
; ve verši nebo seznamu odkazů, která se chápe jako pokračování
; předcházející řádky, jejíž délka je limitována na 64 znaků.
; - Jako významný oddělovač je povinný k ukončení většiny
; položek:
; - v titulech
; - společně s \t v seznamech v úvodu knihy
; - společně se \sp\sp k oddělení odkazů od verše
;
; Jinými slovy: kanonizovaný text se interpretuje po řádcích,
; přičemž:
; - může-li mít předchozí řádka pokračování a není-li následující
; řádka ani prázdná, ani odražená, chápe se jako pokračování
; řádky předchozí.
; Klíčová slova (významná velikost písmen):
; ----------------------------------------
; EVANGELIUM v titulu knihy
; SKUTKOVĚ v titulu knihy
; EPIŠTOLA v titulu knihy
; PODLE v mezititulu knihy
; kapitol na konci uvodu knihy
; Kapitola v nadpisu kapitoly
; Formální definice kanonického formátu:
; ------------------------------------
; kniha = (tituly \nnn uvod \nnn pocet_kapitol \nnn kapitoly [\nnnn poznamky])
;
; titul = (titulek)+
; titulek = ((\t)+ radek_titulku\n)
;
; uvod = (odstavec_uvodu\n)*
; odstavec_uvodu = (text_uvodu\n | polozka_seznamu\n)
; polozka_seznamu = /^(\t{1,4})((I+|[A-D]|[1-4])\.|[a-d]\)) (\S.*)$/
;
; pocet_kapitol = /^\t\t\tMá kapitoly? \(d{1,2})\.$/
;
; kapitoly = (kapitola \nnn)+
; kapitola = (nadpis_kap \nn sumar \nn (vers_s_odkazy)* \nn)
; vers_s_odkazy = (vers [odkazy])
; vers = /^ (\d{1,3})\. (.*)$/
; odkazy = /^\t(.*)$/
;
; poznamky = (poznamka [\nn poznamky])
; Definice kanonického formátu lidskými slovy:
; -------------------------------------------
; - Kniha sestává z titulů, úvodu, počtu kapitol, jednotlivých
; kapitol a případně poznámek na konci. Všechny výše uvedené
; položky jsou odděleny dvěma volnými řádky, pouze případné
; poznámky na konci knihy jsou odděleny třemi volnými řádky.
;
; - Úvod může být členěn na odstavce, oddělené jednou volnou
; řádkou. Součástí odstavce může být buďto volný text, anebo
; struktura seznamu, anebo obojí. Každá položka seznamu musí
; ale stát na samostatném řádku a být od začátku řádku odražena
; odpovídajícím počtem tabelátorů.
;
; - Počet kapitol knihy je uveden na jednom samostatném řádku
; (opět odděleném volnými dvojřádky).
;
; - Kapitoly jsou číslovány od první do poslední (odpovídající
; počtu kapitol). Na začátku kapitoly je na samostatném řádku
; nadpis kapitoly ve tvaru "Kapitola <číslo>.", pak volný řádek,
; pak sumář, volný řádek, pak první verš, případně na dalším
; tabelátorem odraženém řádku odkazy; za odkazy (nejsou-li,
; tak za veršem) následuje, oddělen volným řádkem, druhý
; verš atd.
; Příklady různých položek:
; ------------------------
; titul: EVANGELIUM EPIŠTOLA K ŽIDŮM
; mezititul: PODLE
; podtitul: (SEPSÁNÍ SVATĚHO MATOUŠE) (SVATĚHO) PAVLA APOŠTOLA
; uvod:
; Jednoduchá prázdná řádka odděluje jednotlivé odstavce úvodu.
; Struktura odražených seznamů je vyjádřena tabelátory na začátku
; řádků (indentací):
; V epištole této...
; \t I.
; \t\t A.
; \t\t\t 1.
; \t\t\t\t a)
; pocet_kap:
; Má kapitol 13.
; poznamky:
; \n
; K Židům psán jest list tento ...
(defun bk-kanonizuj-knihu ()
"Prevede Pilatuv tvar na kanonicky."
(interactive)
(goto-char (point-min))
(if (bk-kanonizuj-tituly)
(if (bk-kanonizuj-uvod)
(if (bk-kanonizuj-knihu)
(bk-kanonizuj-poznamky)))))
(defun bk-kanonizuj-tituly ()
"Kanonizuje tituly - zacina od pointu"
(interactive)
(if (char-equal (char-after (point)) ?\t) ; Je zformátovaný titul?
(progn
(
)
(defun bk-kanonizuj-uvod ()
"Kanonizuje uvod - zacina od pointu"
(interactive)
(-kill-empty-lines)
)
(defun bk-kanonizuj-knihu ()
"Kanonizuje - zacina od pointu"
(interactive)
)
(defun bk-kanonizuj-poznamky ()
"Kanonizuje poznamky - zacina od pointu"
(interactive)
)
(defun -delete-blank ()
"Je-li za pointem mezera nebo tabulator, vymaze ho a vrati t. Jinak nil."
(interactive)
(if (or (char-equal (char-after (point)) ?\ )
(char-equal (char-after (point)) ?\t))
(progn (delete-char 1) t) nil))
(defun -delete-blanks ()
"Jsou-li za pointem mezery nebo tabulatory, vymaze je a vrati pocet."
(interactive)
(let ((i 0))
(while (-delete-blank) (setq i (1+ i)))))
(defun -t ()
"Test, co je za pointem."
(interactive)
(setq znak "nevim")
(if (char-equal (char-after (point)) ?\ ) (setq znak "mezera"))
(if (equal (char-after (point)) ?\t) (setq znak "tabelator"))
(message znak))
(defun -kill-empty-lines ()
"Vymaze vsechny prazdne radky a vrati jejich pocet."
(interactive)
(let ((i 0))
(while (-kill-empty-line) (setq i (1+ i)))))
(defun -kill-empty-lines ()
"Vymaze vsechny prazdne radky a vrati jejich pocet."
(interactive)
(let ((i 0))
(while (-kill-empty-line) (setq i (1+ i)))))
(defun -kill-empty-line ()
"Je-li radka prazdna, vymaze ji a vrati t. Jinak vrati nil."
(interactive)
(if (-empty-line) (progn (kill-line) t)))
(defun -empty-line ()
"Vraci t jestlize je prazdna radka, jinak nil."
(interactive)
(and (bolp) (eolp)))
(insert-string (syntax-table)
(char-syntax ?\ )
(insert ?\n)