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.xml
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">
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">