Uprava DSSSL stylu
Jirka Kosek
jirka na kosek.cz
Úterý Leden 7 15:08:55 CET 2003
Radek Budař wrote:
> mam nekolikm otazek tykajiich se uprav DSSSL stylu. Jsem nyni postaven pred
> problem, aby vysledny vystup do RTF odpovidal sablone, ktera se u nas ve
> firme bezne pouziva pro psani dokumëntace. Potrebuji nekde rici, ze <sect1>
> se ma formatovat napriklad Arialem 16pt. tucne zarovnani doleva a ze
> klasicky text <para> ma byt Arialem 10pt. do bloku s prvnim radkem odsazenym
> zleva o 3pt. a ze titulek tabulky ma byt vycentrovany a tucnym Timesem 8pt.
> a tak podobne?
>
> - Mam na to jit upravou DSSSL stylu?
Ano.
> - Jak definuju styl pro jednotlivy tag?
V DSSSL se na to používá konstrukce:
(element para
... obsluha elementu para...
)
> - Pripadne, kde najdu nejakou vhodnou dokumentaci popisujici vsechny prvky,
> ktere mohu pri tomto vyuzit
Informací o DSSSL zase tak moc není, ale pokud se nechcete kupovat přímo
ISO standard, je pár možností:
[1] Information technology Processing languages Document Style
Semantics and Specification Language (DSSSL). ISO/IEC 10179:1996(E).
URL: ftp://ftp.ornl.gov/pub/sgml/WG8/DSSSL/dsssl96b.pdf. URL:
ftp://ftp.ornl.gov/pub/sgml/WG8/DSSSL/readme.htm.
[2] Stránky věnované jazyku DSSSL. URL: http://www.netfolder.com/DSSSL/.
Jinak postup úprav je asi následující:
1. Zjistit, zda věc nejde upravit jen změnou parametru (což například u
změny základního písma jde)
;; definice vlastní velikosti písma v dokumentu na 11pt
(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)))
;; Písmo odstavce bude Arial
(define %body-font-family% "Arial")
Všechny parametry jsou popsány v dokumentaci k DSSSL stylům pro DocBook.
2. Pokud to nejde parametrem, najděte si odpovídající kód ve stylech,
překopírujte jej do stylu s vašimi úpravami a tam opravte. Například
nadpisy všech sekcí se řeší poněkud obecným kódem v souboru dbsect.dsl:
(define ($section-title$)
(let* ((sect (current-node))
(info (info-element))
(exp-children (if (node-list-empty? info)
(empty-node-list)
(expand-children (children info)
(list (normalize "bookbiblio")
(normalize "bibliomisc")
(normalize "biblioset")))))
(parent-titles (select-elements (children sect) (normalize "title")))
(info-titles (select-elements exp-children (normalize "title")))
(titles (if (node-list-empty? parent-titles)
info-titles
parent-titles))
(subtitles (select-elements exp-children (normalize "subtitle")))
(renderas (inherited-attribute-string (normalize "renderas") sect))
;; the apparent section level
(hlevel
;; if not real section level, then get the apparent level
;; from "renderas"
(if renderas
(section-level-by-gi #f (normalize renderas))
;; else use the real level
(SECTLEVEL)))
(hs (HSIZE (- 4 hlevel))))
(make sequence
(make paragraph
;;; ________ NASLEDUJICI PARAMETRY OVLIVNUJI VZHLED NADPISU
___________
font-family-name: %title-font-family%
font-weight: (if (< hlevel 5) 'bold 'medium)
font-posture: (if (< hlevel 5) 'upright 'italic)
font-size: hs
line-spacing: (* hs %line-spacing-factor%)
space-before: (* hs %head-before-factor%)
space-after: (if (node-list-empty? subtitles)
(* hs %head-after-factor%)
0pt)
start-indent: (if (or (>= hlevel 3)
(member (gi) (list (normalize "refsynopsisdiv")
(normalize "refsect1")
(normalize "refsect2")
(normalize "refsect3"))))
%body-start-indent%
0pt)
first-line-start-indent: 0pt
quadding: %section-title-quadding%
keep-with-next?: #t
heading-level: (if %generate-heading-level% hlevel 0)
;; SimpleSects are never AUTO numbered...they aren't hierarchical
(if (string=? (element-label (current-node)) "")
(empty-sosofo)
(literal (element-label (current-node))
(gentext-label-title-sep (gi sect))))
(element-title-sosofo (current-node)))
(with-mode section-title-mode
(process-node-list subtitles))
($proc-section-info$ info))))
--
-----------------------------------------------------------------
Jirka Kosek
e-mail: jirka na kosek.cz
http://www.kosek.cz
Další informace o konferenci Docbook