You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by ov...@apache.org on 2002/03/04 09:14:01 UTC

cvs commit: xml-cocoon2/src/scratchpad/schecoon/scheme sitemap.scm

ovidiu      02/03/04 00:14:01

  Modified:    src/scratchpad/schecoon/scheme sitemap.scm
  Log:
  Added support for aggregation.
  
  Revision  Changes    Path
  1.11      +47 -10    xml-cocoon2/src/scratchpad/schecoon/scheme/sitemap.scm
  
  Index: sitemap.scm
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/schecoon/scheme/sitemap.scm,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- sitemap.scm	13 Feb 2002 01:51:20 -0000	1.10
  +++ sitemap.scm	4 Mar 2002 08:14:01 -0000	1.11
  @@ -340,16 +340,52 @@
       (define (match-generate pipeline args-are-numbers?)
         (let* ((nodelist ((node-pos 1) pipeline))
                (node (if (null? nodelist) '() (car nodelist))))
  -        (if (not (eq? (sxml:element-name node) 'generate))
  -            #f
  -            (begin
  -              (let ((args (get-attributes node '(src) '(type) #t
  -					  args-are-numbers?)))
  -                (match-transform
  -                 (rest-of-nodes pipeline)
  -                 `(sitemap:generate sitemap env ,@args)
  -		 args-are-numbers?)
  -                )))))
  +        (cond
  +	 ((eq? (sxml:element-name node) 'generate)
  +	  (let ((args (get-attributes node '(src) '(type) #t
  +				      args-are-numbers?)))
  +	    (match-transform
  +	     (rest-of-nodes pipeline)
  +	     `(sitemap:generate sitemap env ,@args)
  +	     args-are-numbers?)))
  +	 (else #f))))
  +
  +    ;; Translate a <aggregate> element.
  +    (define (match-aggregate pipeline args-are-numbers?)
  +      (let* ((nodelist ((node-pos 1) pipeline))
  +             (node (if (null? nodelist) '() (car nodelist))))
  +        (cond
  +	 ((eq? (sxml:element-name node) 'aggregate)
  +	  (let ((args (get-attributes node '(element) '(ns prefix) #f
  +				      args-are-numbers?)))
  +	    (match-parts (rest-of-nodes pipeline)
  +			 (sxml:content node)
  +			 `(sitemap:aggregate sitemap env ,@args)
  +			 args-are-numbers?)))
  +	 (else #f))))
  +
  +    (define (match-parts pipeline elements compfunc args-are-numbers?)
  +      (let ((setup-part-fns     ;; Generate the code for the <part>
  +				;; elements. Applies take-until on
  +				;; `elements' with function to setup
  +				;; parts.
  +	     (map
  +	      (lambda (node)
  +		(cond
  +		 ((null? node) #f)
  +		 ((not (eq? (sxml:element-name node) 'part))
  +		  (xml-error "Only <part> elements allowed inside <aggregate>"))
  +		 (else
  +		  (let ((args (get-attributes node '(src)
  +					      '(element ns strip-root prefix)
  +					      #f args-are-numbers?)))
  +		    `(sitemap:part sitemap env ,@args pipeline)))))
  +	      elements)))
  +	(match-transform pipeline
  +			 `(let ((pipeline ,compfunc))
  +			    ,@setup-part-fns
  +			    pipeline)
  +			 args-are-numbers?)))
   
       ;; Translate zero or more <transform> elements
       (define (match-transform pipeline compfunc args-are-numbers?)
  @@ -489,6 +525,7 @@
   	      ,(or
   		(match-generate pipeline args-are-numbers?)
   		(match-reader pipeline args-are-numbers?)
  +		(match-aggregate pipeline args-are-numbers?)
   		(let* ((nodelist ((node-pos 1) pipeline))
   		       (node (if (null? nodelist) '() (car nodelist))))
   		  (xml-error node "Invalid pipeline definition")))))))
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     webmaster@xml.apache.org
To unsubscribe, e-mail:          cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org