Kanon0.02.el

Z Wikiverzity

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)