Kapitola 5. Úprava DSSSL stylů

Obsah

5.1. Úprava chování stylu pomocí parametrů
5.1.1. Běžné úpravy pro tisk
5.1.2. Běžné úpravy pro generování HTML
5.2. Předefinování pravidel pro zpracování elementů
5.3. Úpravy automaticky generovaných textů

Průběh formátování pomocí DSSSL stylů lze řídit mnoha parametry. Kompletní přehled parametrů je popsán v dokumentaci k DSSSL stylům [DSSSL-DOC]. Složitější úpravy je nutné naprogramovat přímo v DSSSL [DSSSL].

5.1. Úprava chování stylu pomocí parametrů

Pokud chceme upravit chování stylu, musíme si vytvořit nový styl. Ten přitom naimportuje původní styl a předefinuje potřebné parametry. DSSSL styly jsou vlastně SGML dokumenty, takže existující styl se importuje pomocí mechanismu entit. Kostra našeho stylu může vypadat zhruba takto:

<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [
<!ENTITY docbook.dsl SYSTEM "c:/docbook/dsssl/print/docbook.dsl" CDATA DSSSL>
]>

<style-specification id="my-docbook-print" use="docbook">

;; naše úpravy

</style-specification>

<external-specification id="docbook" document="docbook.dsl">

Musíme samozřejmě na druhé řádce upravit cestu tak, aby ukazovala na místo, kde se na našem systému nachází styl, ze kterého vycházíme. Z podstaty DSSSL existují pro DocBook dva druhy stylů – pro tisk (adresář print) a pro HTML (adresář html) – které jsou zcela samostatné.

Když chceme pomocí upraveného stylu zformátovat nějaký dokument, předáme Jade jako parametr náš styl:

jade -d tisk.dsl -t rtf c:\docbook\jade\xml.dcl prvni.xml

5.1.1. Běžné úpravy pro tisk

Následující příklad ukazuje, jak se dají změnit nejběžnější parametry. Pro zápis hodnot true a false se používají sekvence #t a #f. Některé parametry mají jako svoji hodnotu seznam hodnot.

Příklad 5.1. Úprava DSSSL stylu pro tisk – tisk.dsl

<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [
<!ENTITY docbook.dsl SYSTEM "c:/docbook/dsssl/print/docbook.dsl" CDATA DSSSL>
]>

<style-specification id="my-docbook-print" use="docbook">

;; naše úpravy

;; definice velikosti papíru
(define %paper-type% "A4")

;; text dokumentu nebude odsazen
(define %body-start-indent% 0pi)

;; text výpisů bude používat menší písmo (95 %)
(define %verbatim-size-factor% 0.95)

;; definice vlastní velikosti písma v dokumentu
(define %visual-acuity% "eleven")
(define %bf-size%
  ;; Defines the body font size
  (case %visual-acuity%
    (("tiny") 8pt)
    (("normal") 10pt)
    (("eleven") 11pt)
    (("presbyopic") 12pt)
    (("large-type") 24pt)))

;; zarovnání do bloku a dělení slov
(define %default-quadding%  'justify)
(define %hyphenation% #t)

;; definice písma (funguje pouze pro RTF backend)
;;(define %body-font-family% "Palatino Linotype")
;;(define %title-font-family% "Arial Black")

;; definice vlastní velikosti okrajů písma
(define %left-margin%  2in)
(define %right-margin%  2in)
(define %top-margin%  2.5in)
(define %bottom-margin%  2.5in)
(define %header-margin%  1in)
(define %footer-margin%  1in)

;; oboustranný tisk
(define %two-side% #t)

;; počet sloupců v dokumentu
(define %page-n-columns% 1)

;; má se generovat obsah knihy
(define %generate-book-toc% #t)

;; seznamy čeho se mají automaticky generovat
(define ($generate-book-lot-list$)
  (list (normalize "table")
        (normalize "equation")))

;; mají se číslovat sekce (normálně se číslují jen kapitoly)
(define %section-autolabel% #t)

;; mají se kreslit horizontální čáry před a za obrázkem
(define %figure-rules% #t)

;; seznam elementů, jejichž obsah se objeví na titulní straně
(define (book-titlepage-recto-elements)
  (list (normalize "title") 
	(normalize "subtitle") 
	(normalize "graphic") 
	(normalize "corpauthor") 
	(normalize "authorgroup") 
	(normalize "author") 
	(normalize "editor")
	(normalize "corpname")
        (normalize "date")))

</style-specification>

<external-specification id="docbook" document="docbook.dsl">

5.1.2. Běžné úpravy pro generování HTML

Princip úprav je stejný jako u stylu pro tisk. Stačí změnit načítaný styl a podívat se do dokumentace, které parametry máme k dispozici.

Příklad 5.2. Úprava DSSSL stylu pro generování HTML – html.dsl

<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [
<!ENTITY docbook.dsl SYSTEM "c:/docbook/dsssl/html/docbook.dsl" CDATA DSSSL>
]>

<style-specification id="my-docbook-html" use="docbook">

;; naše úpravy

;; přípona pro HTML soubory
(define %html-ext% ".html")

;; adresář, kam se mají ukládat vygenerované HTML soubory
;; (define %output-dir% "html")

;; má se používat výše uvedený adresář
;; (define use-output-dir #t)

;; jméno hlavní stránky
(define %root-filename% "docbook")

;; mají se jména odvozovat z hodnoty atributu ID
(define %use-id-as-filename% #t)

;; má se generovat obsah knihy
(define %generate-book-toc% #t)

;; seznamy čeho se mají automaticky generovat
(define ($generate-book-lot-list$)
  (list (normalize "table")
        (normalize "equation")))

;; mají se číslovat sekce (normálně se číslují jen kapitoly)
(define %section-autolabel% #t)

;; mají se kreslit horizontální čáry před a za obrázkem
(define %figure-rules% #t)

;; seznam elementů, jejichž obsah se objeví na titulní straně
(define (book-titlepage-recto-elements)
  (list (normalize "title") 
	(normalize "subtitle") 
	(normalize "graphic") 
	(normalize "corpauthor") 
	(normalize "authorgroup") 
	(normalize "author") 
	(normalize "editor")
	(normalize "corpname")))

;; do hlavičky stránky přidáme informaci o použitém kódování
(define %html-header-tags% 
  '(("META" ("HTTP-EQUIV" "Content-Type") ("CONTENT" "text/html; charset=utf-8"))))

;; kde se mají geenrovat navigační odkazy
(define %header-navigation% #t)
(define %footer-navigation% #t)

;; má se zobrazovat obsah elementu comment/remark
(define %show-comments% #t)

</style-specification>

<external-specification id="docbook" document="docbook.dsl">

5.2. Předefinování pravidel pro zpracování elementů

Pří úpravách stylů se využívá toho, že naše deklarace mají přednost před těmi naimportovanými. Pokud se nám nelíbí, jak se zpracovává nějaký element, stačí si zkopírovat odpovídající kód z originálních DSSSL stylů a upravit ho. To používáme v následující úpravě, která je schopná text uzavřený mezi <phrase role="important"> a </phrase> zobrazit tučně.

Příklad 5.3. Úprava pravidla v DSSSL stylu – tiskml.dsl

<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [
<!ENTITY docbook.dsl SYSTEM "c:/docbook/dsssl/print/docbook.dsl" CDATA DSSSL>
]>

<style-specification id="my-docbook-print" use="docbook">

;; naše úpravy

;; pokud použijeme <![CDATA[<phrase role="important">...</phrase>]]>,
;; zobrazí se text tučně
(element phrase
  (if (equal? (normalize "important") (attribute-string (normalize "role")))
      ($bold-seq$)
      ($charseq$)))

</style-specification>

<external-specification id="docbook" document="docbook.dsl">

5.3. Úpravy automaticky generovaných textů

Při zařazování odkazů na různé objekty se text odkazu automaticky generuje. Pokud nám tvar automaticky generovaných odkazů nevyhovuje, můžeme jej upravit. Pro češtinu ovlivňují generování textů dva soubory dbl1cs.dsl a dbl1cs.ent uložené v adresáři common. Druhý soubor obsahuje definice českých překladů jednotlivých textů, v prvním je pak definován seznam cs-xref-strings, který definuje, z čeho se skládají automaticky generované texty odkazů.

Například prvek seznamu

(list (normalize "figure")      "&Figure; %n")

říká, že při generování odkazu na obrázek (element figure) se doplní obsah entity &Figure; (ta obsahuje text Obrázek) následovaný jeho číslem (%n). Pokud nechceme, aby se před číslo obrázku vkládal text, stačí tuto řádku nahradit za

(list (normalize "figure")      "%n")

Podobně můžeme postupovat pro další elementy. Kromě %n ještě můžeme použít další zástupné znaky uvedené v tabulce 5.1 – „Zástupné znaky pro definici vlastního textu křížových odkazů“.

Tabulka 5.1. Zástupné znaky pro definici vlastního textu křížových odkazů

ZnakPopis
%pČíslo stránky, na které se vyskytuje cíl odkazu.
%gLidsky srozumitelný název elementu, na který odkaz ukazuje (např. „Kapitola“ pro chapter).
%nČíslo objektu (obrázku, kapitoly apod.).
%tNázev elementu, na který odkazujeme (např. název kapitoly, obrázku apod.).

Poznámka

Současná verze stylů již pro češtinu nezahrnuje do automaticky generováného odkazu názvy v prvním pádu jako Obrázek nebo Tabulka. I přesto se občas hodí upravit tvar generovaného odkazu, například do něj zahrnout číslo strany.

Jednou z možností je naše úpravy provést přímo v DSSSL stylech. Pak se nám ale snadno stane, že si stáhneme novější verzi a jednou pracně provedené úpravy si přemažeme. Lepší je proto provést změny podobně jako v předchozích případech. Nakopírujeme si do našeho adresáře soubor dbl1cs.ent a v našem stylu s úpravami předefinujeme prvky seznamu cs-xref-strings.

Příklad 5.4. Úprava automaticky generovaných textů – tiskcs.dsl

<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [
<!ENTITY docbook.dsl SYSTEM "c:/docbook/dsssl/print/docbook.dsl" CDATA DSSSL>
<!ENTITY % cs.words
  PUBLIC "-//Norman Walsh//ENTITIES DocBook Stylesheet Localization//CS"
         "dbl1cs.ent">
%cs.words;
]>

<style-specification id="my-docbook-print" use="docbook">

;; upravený seznam se šablonami generovaných textů
(define (cs-xref-strings)
  (list (list (normalize "appendix")    (if %chapter-autolabel%
					    "%n"
					    "%n \U-2013; \U-201E;%t\U-201C;"))
	(list (normalize "article")     (string-append %gentext-cs-start-quote%
						       "%t"
						       %gentext-cs-end-quote%))
	(list (normalize "bibliography") "%t")
	(list (normalize "book")        "%t")
	(list (normalize "chapter")     (if %chapter-autolabel%
					    "%n"
					    "%n \U-2013; \U-201E;%t\U-201C;"))
	(list (normalize "equation")    "%n")
	(list (normalize "example")     "%n")
	(list (normalize "figure")      "%n na stran\U-011B; %p")
	(list (normalize "glossary")    "%t")
	(list (normalize "index")       "%t")
	(list (normalize "listitem")    "%n")
	(list (normalize "part")        "%n \U-2013; \U-201E;%t\U-201C;")
	(list (normalize "preface")     "%t")
	(list (normalize "procedure")   "%n \U-2013; \U-201E;%t\U-201C;")
	(list (normalize "reference")   "%t")
	(list (normalize "section")     (if %section-autolabel%
					    "%n"
					    "\U-201E;%t\U-201C;"))
	(list (normalize "sect1")       (if %section-autolabel%
					    "%n"
					    "\U-201E;%t\U-201C;"))
	(list (normalize "sect2")       (if %section-autolabel%
					    "%n"
					    "\U-201E;%t\U-201C;"))
	(list (normalize "sect3")       (if %section-autolabel%
					    "%n"
					    "\U-201E;%t\U-201C;"))
	(list (normalize "sect4")       (if %section-autolabel%
					    "%n"
					    "\U-201E;%t\U-201C;"))
	(list (normalize "sect5")       (if %section-autolabel%
					    "%n"
					    "\U-201E;%t\U-201C;"))
	(list (normalize "simplesect")  (if %section-autolabel%
					    "%n"
					    "\U-201E;%t\U-201C;"))
	(list (normalize "sidebar")     "%t")
	(list (normalize "step")        "%n")
	(list (normalize "table")       "%n")))

</style-specification>

<external-specification id="docbook" document="docbook.dsl">

© Jiří Kosek 2007
Tento dokument je určen výhradně pro osobní potřebu seznámení se systémem DocBook. Jakékoliv jiné použití, včetně dalšího šíření, pořizování kopií apod. je výslovně zakázáno a bude považováno za porušení autorských práv.