Obsah
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].
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.xmlNá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">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">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">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ů
| Znak | Popis |
|---|---|
%p | Číslo stránky, na které se vyskytuje cíl odkazu. |
%g | Lidsky srozumitelný název elementu, na který odkaz ukazuje
(např. „Kapitola“ pro chapter). |
%n | Číslo objektu (obrázku, kapitoly apod.). |
%t | Název elementu, na který odkazujeme (např. název kapitoly, obrázku apod.). |
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">