Subject: algorithmics and dsssl From: Jany Quintard <quintard.j@xxxxxx> Date: Wed, 9 Aug 2000 17:08:22 +0200 (CEST) |
Hi all. This is not really a question but... As an old C C++ SmallTalk (and things even worse) programmer, I am often puzzled by (sometimes very simple) problems I meet using dsssl and impressed by the solutions given by some membrs of the group. I let you imagine how much I can be puzzled by the thread "Preceding list function". So, I am desperately trying to improve my "skills" in this domain. Here is a (somewhat lengthy) example : We want to build an RTF table from such an sgml file : ********************* <!DOCTYPE Species [ <!ELEMENT Species - - (SpeciesOrder, SpeciesFamily, SpeciesGenus, SpeciesSpecies)+ > <!ELEMENT SpeciesOrder - - (#PCDATA)> <!ELEMENT SpeciesFamily - - (#PCDATA)> <!ELEMENT SpeciesGenus - - (#PCDATA)> <!ELEMENT SpeciesSpecies - - (#PCDATA)> ] > <Species> <SpeciesOrder>Order 1</SpeciesOrder> <SpeciesFamily>Family 1</SpeciesFamily> <SpeciesGenus>Genus 1</SpeciesGenus> <SpeciesSpecies>Species 1</SpeciesSpecies> <SpeciesOrder>Order 2</SpeciesOrder> <SpeciesFamily>Family 2</SpeciesFamily> <SpeciesGenus>Genus 2</SpeciesGenus> <SpeciesSpecies>Species 2</SpeciesSpecies> <SpeciesOrder>Order 3</SpeciesOrder> <SpeciesFamily>Family 3</SpeciesFamily> <SpeciesGenus>Genus 3</SpeciesGenus> <SpeciesSpecies>Species 3</SpeciesSpecies> </Species> ********************* The output should look like -------------------------------------------- | Order | Family | Genus | Species | -------------------------------------------- | order 1 | Family 1 | Genus 1 | Species 1 | -------------------------------------------- | order 2 | Family 2 | Genus 2 | Species 2 | -------------------------------------------- | order 3 | Family 3 | Genus 3 | Species 3 | -------------------------------------------- And here is my solution : ********************* <!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" > <style-specification> ;; make a table with four columns (element Species (make table table-border: #t (make table-part content-map: '((head header) (body #f)) (make sequence label: 'body (make table-column column-number: 1 width: 1in) (make table-column column-number: 2 width: 1in) (make table-column column-number: 3 width: 1in) (make table-column column-number: 4 width: 1in)) (make sequence label: 'head (make table-row (makeHeaderCell 1 "Order") (makeHeaderCell 2 "Family") (makeHeaderCell 3 "Genus") (makeHeaderCell 4 "Species"))) ; process the children of SpeciesSpecies (make sequence label: 'body (processSpecies (children (current-node))))))) (default (empty-sosofo)) ; Function processing the first four elements ; and looping for the remains (let us hope the file is valid) (define (processSpecies nl) (let loop ((noeuds nl) (result (empty-sosofo))) (if (node-list-empty? noeuds) result (loop (node-list-tail noeuds 4) (sosofo-append result (make table-row (makeCell (node-list-ref noeuds 0) 1) (makeCell (node-list-ref noeuds 1) 2) (makeCell (node-list-ref noeuds 2) 3) (makeCell (node-list-ref noeuds 3) 4))))))) (define (makeCell snl column-number) (make table-cell column-number: column-number cell-before-column-border: (make table-border line-thickness: 1pt) cell-after-column-border: (make table-border line-thickness: 1pt) cell-before-row-border: (make table-border line-thickness: 1pt) cell-after-row-border: (make table-border line-thickness: 1pt) (make paragraph quadding: 'start (literal (data snl))))) (define (makeHeaderCell column-number text) (make table-cell column-number: column-number cell-before-column-border: (make table-border line-thickness: 1pt) cell-after-column-border: (make table-border line-thickness: 1pt) cell-before-row-border: (make table-border line-thickness: 1pt) cell-after-row-border: (make table-border line-thickness: 1pt) (make paragraph font-weight: 'bold quadding: 'center (literal text)))) </style-specification> ********************* So my questions are : - Do you see many other (better) solutions ? - Would it be better to use a mode to process the children of SpeciesSpecies, instead of a function ? - I could have grouped the two makeCell functions in one and use a test to output header or body. but this are mere variations. - More generally, is there a set of rules, examples, tutorials, exercises to learn building stylesheets "the right way" ? I do not believe there is any dsssl book. There are examples in the cookbook, Norman Walsh's stylesheets and the procedures, but I would like something more "school oriented" - Or is the best solution to train with scheme tutorials ? (and read and try to understand posts on this list) TIA. Jany. DSSSList info and archive: http://www.mulberrytech.com/dsssl/dssslist
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: jadetex/tex: capacity exceeded , Deborah Greenberg Li | Thread | Re: algorithmics and dsssl, Lars Marius Garshol |
Re: Preceding list function, Jany Quintard | Date | Bibliography appears on DocBook art, Lorand Bruhacs |
Month |