RE: Changing the value of a variable

Subject: RE: Changing the value of a variable
From: Oisin McGuinness <oisin@xxxxxxxx>
Date: Thu, 29 Jul 99 10:47:20 -0400
"joseph, Gershon" <Gershon_joseph@xxxxxxxxxxxxx> asked:

"How do people generally generate numbering when
the numbering has to be reset when a particular element is encountered?"

in the context of a situation where <table> elements nested inside various <sectXX>
elements inside <chap> elements need to be numbered according to
their sequence inside the chapter.

Firstly, the code in the DocBook stylesheets (visit www.nwalsh.com)
can do this kind of thing; see the code in common/dbcommon.dsl; but there
is a lot of it; it is extremely flexible.

Secondly, what you want, from a table node where you are generating a label, is
to find its nearest chapter ancestor (use the ancestors function (from the DSSSL cookbook, then filter
the returned node-list using a filter that looks for gi chap only, then take node-list-first),
and get all the table descendants of your chap node which precede your table node, and
count this.  All these pieces can be written by hand; making them generic for other
situations takes some effort.

Here are a couple of functions you might use:
(define (chap-ancestors #!optional (nd (current-node)))
        (let ((precursors (ancestors nd)))
                (node-list-filter
                        (lambda (node)
                                (string=? (gi node) "CHAP"))
                        precursors)))

(define (chap-ancestor #!optional (nd (current-node)))
	(node-list-first (chap-ancestors nd)))

(define (table-number-in-chapter #!optional (nd (current-node)))
	(let* ((my-chap (chap-ancestor nd))
	          (chap-tables (select-elements (descendants my-chap) "TABLE")))
		(node-list-position nd chap-tables)))

where the function node-list-position returns the position (1 ... length-of-list) of nd in
the given node-list, an easy to write function which I find useful.

Hope this helps.

Oisin McGuinness

Sumitomo Bank Capital Markets
277 Park Avenue
New York NY 10172
USA

(212)-224-4913, email: oisin@xxxxxxxx




  


 DSSSList info and archive:  http://www.mulberrytech.com/dsssl/dssslist


Current Thread