Subject: Re: Sibling rivalry From: James Clark <jjc@xxxxxxxxxx> Date: Sun Mar 30 22:47:00 1997 EST |
At 18:10 30/03/97 -0800, Jon Bosak wrote: >I'm formatting the latest version of the XML spec and have hit a wall >in handling the productions. I don't think you can do this in the core query language, but Jade provides enough of the full query language that you can handle it. For PROD, instead of just calling process-children, loop over the children explicitly and group together adjacent elements that need to go in a single table-cell. This relies on node-list-first, node-list-rest and process-node-list. (element PROD (make table (make table-column width: 2pi) (make table-column width: 7pi) (make table-column width: 1.5pi) (make table-column width: 16.5pi) (make table-column width: 9pi) (process-prod (children (current-node))))) (define (process-prod nl) (if (node-list-empty? nl) (empty-sosofo) (let ((nd (node-list-first nl))) (case (gi nd) (("LHS" "RHS") (sosofo-append (process-node-list nd) (process-prod (node-list-rest nl)))) ((#f) (process-prod (node-list-rest nl))) (else (let loop ((info '()) (nl nl)) (if (node-list-empty? nl) (pinfo (reverse info)) (let ((nd (node-list-first nl))) (if (equal? (gi nd) "RHS") (sosofo-append (pinfo (reverse info)) (process-prod nl)) (loop (cons nd info) (node-list-rest nl))))))))))) (define (pinfo lst) (make table-cell column-number: 5 (let loop ((lst lst)) (if (null? lst) (empty-sosofo) (sosofo-append (process-node-list (car lst)) (loop (cdr lst))))))) (element LHS (sosofo-append (make table-cell column-number: 1 font-weight: 'bold (make paragraph use: para-style start-indent: 0pt font-weight: 'bold (literal (string-append "[" (number->string (element-number (ancestor "PROD"))) "]")))) (make table-cell column-number: 2 (make paragraph use: monopara-style font-weight: 'bold (process-children-trim))) (make table-cell column-number: 3 (make paragraph start-indent: 0pt (literal ":="))))) (element RHS (make table-cell starts-row?: (not (first-sibling?)) column-number: 4 n-columns-spanned: (if (absolute-last-sibling?) 2 1) (make paragraph use: monopara-style (process-children-trim)))) (element COM (make paragraph use: para-style font-posture: 'italic start-indent: 0pt (sosofo-append (literal "/* ") (process-children-trim) (literal " */")))) (element VC ($vc-wfc$ "VC")) (element WFC ($vc-wfc$ "WFC")) (define ($vc-wfc$ vc-or-wfc) (make paragraph font-family-name: %title-font-family% font-size: 9pt start-indent: 1pi first-line-start-indent: -1pi (sosofo-append (literal (string-append "[" vc-or-wfc ": ")) (process-children-trim) (literal "]")))) James
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Sibling rivalry, William D . Lindsey | Thread | Re: Sibling rivalry, Paul Prescod |
Sibling rivalry, William D . Lindsey | Date | Sibling rivalry, William D . Lindsey |
Month |