print.dsl
branchstyles
changeset 0 08de8d15f932
equal deleted inserted replaced
-1:000000000000 0:08de8d15f932
       
     1 <!doctype dsssl-specification [
       
     2 <!entity % decls "(features? & char-repertoire?)">
       
     3 <!element dsssl-specification O O (%decls;, style-specification+)>
       
     4 <!attlist dsssl-specification
       
     5   dsssl name #fixed dsssl-specification
       
     6 >
       
     7 <!element style-specification - O (%decls;, style*)>
       
     8 <!attlist style-specification
       
     9   dsssl name #fixed style-specification
       
    10   id id #required
       
    11   partial (partial | complete) complete
       
    12   use idrefs #implied
       
    13 >
       
    14 <!element char-repertoire - o empty>
       
    15 <!attlist char-repertoire
       
    16   dsssl name #fixed character-repertoire
       
    17   name cdata #required
       
    18 >
       
    19 <!element features - o (#pcdata)>
       
    20 <!element style - - rcdata>
       
    21 <!attlist style
       
    22   dsssl name #fixed style-specification-body
       
    23 >
       
    24 ]>
       
    25 <dsssl-specification>
       
    26 <style-specification id=common partial>
       
    27 <char-repertoire name="UNREGISTERED::SGML Open//Character Repertoire::ISO/IEC 10646">
       
    28 <features>table</features>
       
    29 <style>
       
    30 (element quote
       
    31   (sosofo-append
       
    32    (make character
       
    33      char: #\left-double-quotation-mark)
       
    34    (process-children)
       
    35    (make character
       
    36      char: #\right-double-quotation-mark)))
       
    37 
       
    38 (element emph
       
    39   (make sequence
       
    40     font-weight: 'bold))
       
    41 
       
    42 (define monospace-font-family "iso-monospace")
       
    43 
       
    44 (element code
       
    45   (make sequence
       
    46     font-family: monospace-font-family))
       
    47 
       
    48 (declare-initial-value writing-mode 'left-to-right)
       
    49 (declare-initial-value font-size 12pt)
       
    50 (declare-initial-value line-spacing 14pt)
       
    51 (declare-initial-value font-family "iso-serif")
       
    52 
       
    53 (define-unit mm .001m)
       
    54 (define-unit in 25.4mm)
       
    55 (define-unit pt (/ 1in 72))
       
    56 (define-unit pi (/ 1in 6))
       
    57 
       
    58 (define paragraph-indent 20pt)
       
    59 
       
    60 (element p
       
    61   (make paragraph
       
    62     first-line-start-indent: (if (first-sibling?)
       
    63                                  0pt
       
    64                                  paragraph-indent)))
       
    65 
       
    66 (define chapter-title-style
       
    67   (style
       
    68     font-size: 18pt
       
    69     line-spacing: 24pt
       
    70     quadding: 'center))
       
    71 
       
    72 (element (chapter title)
       
    73   (sosofo-append
       
    74     (make paragraph
       
    75       use: chapter-title-style
       
    76       span: 2
       
    77       (literal "Chapter "
       
    78                (format-number (child-number) "1")))
       
    79     (make paragraph
       
    80       use: chapter-title-style
       
    81       span: 2)))
       
    82 
       
    83 (element (section title)
       
    84   (make paragraph
       
    85     quadding: 'start
       
    86     (format-number-list (hierarchical-number '("CHAPTER" "SECTION"))
       
    87                         "1"
       
    88                         ".")
       
    89     (literal ". ")
       
    90     (process-children)))
       
    91 
       
    92 (define indent-step 60pt)
       
    93 
       
    94 (element ol
       
    95   (make sequence
       
    96     start-indent: (+ (inherited-start-indent)
       
    97                      indent-step)))
       
    98 
       
    99 (element li
       
   100   (make paragraph
       
   101     first-line-start-indent: (- indent-step)
       
   102     (make line-field
       
   103       field-width: indent-step
       
   104       field-align: 'start
       
   105       (literal (format-number (child-number)
       
   106                               (if (have-ancestor? '("OL" "OL"))
       
   107                                   "a"
       
   108                                   "1"))))
       
   109     (process-children)))
       
   110 
       
   111 (element dl
       
   112   (make table
       
   113     table-width: (- (display-size)
       
   114                     (inherited-start-indent)
       
   115                     (inherited-end-indent))
       
   116     (make sequence
       
   117       start-indent: 0pt
       
   118       end-indent: 0pt
       
   119       (make table-column
       
   120         column-number: 2
       
   121         width: (table-unit 1))
       
   122       (process-children))))
       
   123 
       
   124 (element dt
       
   125   (make table-cell
       
   126     starts-row?: #t))
       
   127 
       
   128 (element dd
       
   129   (make table-cell
       
   130     start-indent: 10pt
       
   131     ends-row?: #t))
       
   132 
       
   133 (element caption
       
   134   (make paragraph))
       
   135 
       
   136 (element artwork
       
   137   (make external-graphic
       
   138     display?: #t
       
   139     scale: 'to-fit
       
   140     notation-system-id: (notation-generated-system-id
       
   141                          (entity-notation
       
   142                           (attribute-string "CONTENT")))
       
   143     system-id: (entity-generated-system-id
       
   144                 (attribute-string "CONTENT"))))
       
   145 
       
   146 (element xref
       
   147   (with-mode xref
       
   148     (process-node-list (element-with-id (attribute-string "REFID")))))
       
   149 
       
   150 </style>
       
   151 </style-specification>
       
   152 <style-specification id=softcopy use=common>
       
   153 <style>
       
   154 
       
   155 (mode xref
       
   156   (element chapter
       
   157     (make link
       
   158       destination: (current-node-address)
       
   159       color: blue-color
       
   160       (process-first-descendant 'title)))
       
   161   (element figure
       
   162     (make multi-mode
       
   163       multi-modes: '(#f popup)
       
   164       principal-mode-simultaneous?: #t
       
   165       (process-first-descendant 'caption)
       
   166       (make vertical-scroll
       
   167         label: 'popup
       
   168         (with-mode #f
       
   169           (process-node-list (current-node)))))))
       
   170 
       
   171 (define rgb
       
   172   (color-space "ISO/IEC 10179:1995//Color Space Family::Device RGB"))
       
   173 
       
   174 (define blue-color (rgb 0 0 1))
       
   175 
       
   176 (element doc
       
   177   (make vertical-scroll
       
   178     left-margin: 20pt))
       
   179 
       
   180 (element (doc title)
       
   181   (make paragraph
       
   182     font-size: 28pt
       
   183     line-spacing: 32pt
       
   184     quadding: 'center))
       
   185 
       
   186 (element note
       
   187   (make multi-mode
       
   188     multi-modes: '(#f expand)
       
   189     (make marginalia
       
   190       marginalia-side: 'start
       
   191       (make character
       
   192 	font-name: "UNREGISTERED::SGML Open//Font::Icons"
       
   193         glyph-id: "UNREGISTERED::SGML Open//Glyph::Light bulb icon"))
       
   194     (make vertical-scroll
       
   195       label: 'expand
       
   196       (make paragraph))))
       
   197 
       
   198 </style>
       
   199 </style-specification>
       
   200 <style-specification id=hardcopy use=common>
       
   201 <features>page multi-column query expression</features>
       
   202 <style>
       
   203 
       
   204 (define chapter-opening-sink 12pi)
       
   205 (define column-measure 20pi)
       
   206 (define column-separation 2pi)
       
   207 (define page-width 210mm)
       
   208 (define page-height 297mm)
       
   209 (define inner-margin 6pi)
       
   210 (define column-depth 54pi)
       
   211 (define top-margin 9pi)                 ; top of page to top of column
       
   212 (define header-margin 5pi)              ; top of page to top of header
       
   213 (define header-line-spacing 12pt)
       
   214 (define footer-line-spacing 12pt)
       
   215 (define folio-margin 5pi) ; from bottom of folio to bottom of page
       
   216 
       
   217 (define page-region-width
       
   218   (+ column-measure column-separation column-measure))
       
   219 (define footer-height
       
   220   (- page-height top-margin column-depth folio-margin))
       
   221 (define header-height
       
   222   (- top-margin header-margin))
       
   223 (define normal-page-region-height
       
   224   (- page-height header-margin folio-margin))
       
   225 
       
   226 (element (doc title)
       
   227   (sosofo-append
       
   228    (make page-sequence
       
   229      initial-page-models: (list chapter-first-page)
       
   230      (make paragraph
       
   231        font-size: 28pt
       
   232        line-spacing: 32pt
       
   233        quadding: 'center))
       
   234    (table-of-contents)))
       
   235 
       
   236 (declare-reference-value-type chapter-title)
       
   237 (declare-reference-value-type section-title)
       
   238 
       
   239 (element (chapter title)
       
   240   (sosofo-append
       
   241     (make paragraph
       
   242       use: chapter-title-style
       
   243       span: 2
       
   244       (literal "Chapter "
       
   245                (format-number (child-number) "1")))
       
   246     (make paragraph
       
   247       use: chapter-title-style
       
   248       span: 2
       
   249       chapter-title: (process-children))))
       
   250 
       
   251 (element (section title)
       
   252   (make paragraph
       
   253     quadding: 'start
       
   254     section-title: (process-children)
       
   255     (format-number-list (hierarchical-number '("CHAPTER" "SECTION"))
       
   256                         "1"
       
   257                         ".")
       
   258     (literal ". ")
       
   259     (process-children)))
       
   260 
       
   261 (define-page-model chapter-first-page
       
   262   (region
       
   263    (x-origin inner-margin)
       
   264    (y-origin folio-margin)
       
   265    (width page-region-width)
       
   266    (height (- page-height top-margin chapter-opening-sink folio-margin))
       
   267    (flow #f)
       
   268    (footer
       
   269     (contents-alignment 'end)
       
   270     (height footer-height)
       
   271     (generate (make-page-footer)))
       
   272    (filling-direction 'top-to-bottom)))
       
   273 
       
   274 (define-page-model chapter-recto-page
       
   275   (region
       
   276    (x-origin inner-margin)
       
   277    (y-origin folio-margin)
       
   278    (width page-region-width)
       
   279    (height normal-page-region-height)
       
   280    (header
       
   281     (generate (make paragraph
       
   282                 line-spacing: header-line-spacing
       
   283                 quadding: 'end
       
   284                 font-posture: 'italic
       
   285                 (asis-indirect-sosofo
       
   286                  (find-reference-value 'section-title))))
       
   287     (contents-alignment 'start)
       
   288     (height header-height))
       
   289    (footer
       
   290     (contents-alignment 'end)
       
   291     (height footer-height)
       
   292     (generate (make-page-footer)))
       
   293    (flow #f))
       
   294   (filling-direction 'top-to-bottom))
       
   295 
       
   296 (define-page-model chapter-verso-page
       
   297   (region
       
   298    (x-origin (- page-width inner-margin page-region-width))
       
   299    (y-origin folio-margin)
       
   300    (width page-region-width)
       
   301    (height normal-page-region-height)
       
   302    (header
       
   303     (generate (make paragraph
       
   304                 line-spacing: header-line-spacing
       
   305                 quadding: 'start
       
   306                 font-posture: 'italic
       
   307                 (asis-indirect-sosofo
       
   308                  (find-reference-value 'chapter-title))))
       
   309     (contents-alignment start)
       
   310     (height header-height))
       
   311    (footer
       
   312     (contents-alignment 'end)
       
   313     (height footer-height)
       
   314     (generate (make-page-footer)))
       
   315    (flow #f))
       
   316   (filling-direction 'top-to-bottom))
       
   317 
       
   318 (define (find-reference-value type)
       
   319   (first-area-reference-value type
       
   320                               default: (last-preceding-area-reference-value
       
   321                                         type)))
       
   322 
       
   323 (define (make-page-footer)
       
   324   (make paragraph
       
   325     quadding: 'center
       
   326     line-spacing: footer-line-spacing
       
   327     (number-indirect-sosofo (page-number))))
       
   328 
       
   329 (element chapter
       
   330   (make page-sequence
       
   331     force-first-page: 'front
       
   332     initial-page-models: (list chapter-first-page)
       
   333     repeat-page-models: (list chapter-verso-page
       
   334                               chapter-recto-page)
       
   335     blank-back-page-model: chapter-verso-page
       
   336     (make column-set-sequence
       
   337       column-set-model: double-columns)))
       
   338 
       
   339 (define-column-set-model double-columns
       
   340   (column-subset
       
   341    (column
       
   342     (x-origin 0pt)
       
   343     (width column-measure))
       
   344    (column
       
   345     (x-origin (+ column-measure column-separation))
       
   346     (width column-measure))
       
   347    (flow
       
   348     (main body-text)
       
   349     (figure top-float bottom-float)
       
   350     (footnote footnote))))
       
   351 
       
   352 (element figure
       
   353   (sync (make anchor
       
   354           display?: #t)
       
   355         (make sequence
       
   356           keep: #t
       
   357           label: 'figure
       
   358           span: (if (equal? (attribute-string "SPAN")
       
   359                             "SPAN")
       
   360                     2
       
   361                     1))
       
   362         type: 'page
       
   363         max: 1))
       
   364 
       
   365 (define footnote-font-size 8pt)
       
   366 (define superscript-shift-ems .4) ; ems to shift up superscript for footnote
       
   367 ;; factor by which to multiply font size for superscripts
       
   368 (define superscript-size-factor .6)
       
   369 
       
   370 (element note
       
   371   (let ((footnote-label
       
   372          (literal (format-number (note-number) "1"))))
       
   373     (sync (make sequence
       
   374             font-size: (* (inherited-font-size)
       
   375                           superscript-size-factor)
       
   376             placement-offset: (- (* (inherited-font-size)
       
   377                                     superscript-shift-ems))
       
   378             footnote-label)
       
   379           (make paragraph
       
   380             label: 'footnote
       
   381             font-size: footnote-font-size
       
   382             footnote-label
       
   383             (literal ". ")
       
   384             (process-children))
       
   385           type: 'page)))
       
   386 
       
   387 ;; Footnotes are numbered per chapter.
       
   388 
       
   389 (define (note-number)
       
   390   (list-ref (element-number-list '("CHAPTER" "NOTE"))
       
   391             1))
       
   392 
       
   393 (mode xref
       
   394   (element figure
       
   395     (sosofo-append
       
   396      (literal "Figure "
       
   397               (format-number (element-number) "1"))
       
   398      (literal ", page")
       
   399      (number-indirect-sosofo (page-number))))
       
   400   (element chapter
       
   401     (sosofo-append
       
   402      (literal "Chapter "
       
   403               (format-number (child-number) "1")
       
   404               ", ")
       
   405      (make sequence
       
   406        font-posture: 'italic
       
   407        (process-first-descendant 'title))
       
   408      (literal ", page")
       
   409      (number-indirect-sosofo (page-number)))))
       
   410 
       
   411 (define (table-of-contents)
       
   412   (make page-sequence
       
   413     force-first-page: 'front
       
   414     repeat-page-models: (list chapter-first-page)
       
   415     (make sequence
       
   416       (make paragraph
       
   417         use: chapter-title-style
       
   418         (literal "Table of Contents"))
       
   419       (with-mode toc
       
   420         (process-node-list (q-element 'title (tree-root (current-node))))))))
       
   421 
       
   422 (mode toc
       
   423   (element title
       
   424     (make paragraph
       
   425       (literal (format-number (ancestor-child-number "CHAPTER") "1"))
       
   426       (if (have-ancestor? "SECTION")
       
   427           (literal "."
       
   428                    (format-number (ancestor-child-number "SECTION") "1"))
       
   429           (empty-sosofo))
       
   430       (literal ". "))
       
   431       (process-children)
       
   432       (make leader (literal "."))
       
   433       (number-indirect-sosofo (page-number))))
       
   434 
       
   435 </style>
       
   436 </style-specification>
       
   437 <style-specification id=hardcopy2 use=hardcopy>
       
   438 <style>
       
   439 (element xref
       
   440   (map-constructor (let ((x (current-node)))
       
   441                      (lambda()
       
   442                        (process-xref x)))
       
   443                    (element-with-id (attribute-string "REFID"))))
       
   444 
       
   445 (define (process-xref xref-node)
       
   446   (if (match-element? 'chapter (current-node))
       
   447       (with-mode xref
       
   448         (process-node-list (current-node)))
       
   449       (sosofo-append
       
   450        (literal "Figure "
       
   451                 (format-number (element-number) "1"))
       
   452        (general-indirect-sosofo page-ref-if-different
       
   453                                 (page-number first-area-of-node: (current-node))
       
   454                                 (page-number first-area-of-node: xref-node)))))
       
   455 
       
   456 (define (page-ref-if-different figure-page current-page)
       
   457   (if (equal? figure-page current-page)
       
   458       (empty-sosofo)
       
   459       (literal ", page "
       
   460                (format-number figure-page "1"))))
       
   461 
       
   462 </style>
       
   463 </style-specification>
       
   464 </dsssl-specification>
       
   465 <!-- Keep this comment at the end of the file
       
   466 Local variables:
       
   467 mode: dsssl
       
   468 sgml-indent-step:0
       
   469 sgml-indent-data:nil
       
   470 End:
       
   471 -->