Re: Filtering nodes

Subject: Re: Filtering nodes
From: ptyso@xxxxxxxxxxxxx
Date: Thu, 9 Nov 2000 19:31:07 -0600
David,

I'd use the more general (node-list-reduce) procedure, because it can
return any type of object, not just node-lists.  You want a pair of
node-lists returned.

Something like this works for the structures you have presented:

========================================================================
<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN">

(declare-flow-object-class 
 element "UNREGISTERED::James Clark//Flow Object Class::element")

(element C
  (let ((nl-pair (nl-filter (select-elements 
		               (children (current-node))
			       '("N")))))
    (sosofo-append
     (make element gi: "DIV"
	   (process-node-list (car nl-pair)))
     (make element gi: "DIV"
	   (process-node-list (cdr nl-pair))))))

(default
  (make element gi: "P"))

(define (nl-filter nl)
  (node-list-reduce nl
		    (lambda (obj snl)
		      (if (node-list-empty?
			   (select-elements
			    (follow snl)
			    '("S")))
			  (cons (car obj) (node-list (cdr obj) snl))
			  (cons (node-list (car obj) snl) (cdr obj))))
		    (cons (empty-node-list) (empty-node-list))))
=========================================================================

Later,
Paul Tyson		    
	      
    
On Thu, Nov 09, 2000 at 03:13:57PM -0500, Maltby, David G wrote:
> I would like to write a two node-list-filters, (first-ns nl) and (last-ns
> nl), 
> such that given the following node-list nl =  (T N N S S S N),
> (first-ns nl) would return (N N) which would be the two nodes following T
> and before S,
> and (last-ns nl) would return (N) which would be the last node in the
> node-list.
> 
> The content model for the container of these elements would be
> <!element C (T?, N*, S+, N*)>
> 
> It seems some clever use of (node-list-filter) should be able to sort this
> out but I am struggling with the appropriate lambda expression.  Maybe there
> is a better way.  I have looked through section 10.2.3 but perhaps I am not
> seeing the grove for the all the nodes.  Any thoughts?
> 
> Regards, David
> 
> 
>  DSSSList info and archive:  http://www.mulberrytech.com/dsssl/dssslist


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


Current Thread