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