ovidiu 01/12/13 01:25:42
Added: scratchpad/schecoon/scheme sitemap.scm
Log:
Created.
Revision Changes Path
1.1 xml-cocoon2/scratchpad/schecoon/scheme/sitemap.scm
Index: sitemap.scm
===================================================================
;; Sitemap definitions
;;
;; Author: Ovidiu Predescu <[EMAIL PROTECTED]>
;; Date: December 12, 2001
;;
;; Pipeline definition.
;;
;; A pipeline describes a list of operations to be performed usually
;; on a resource, usually an XML document. A pipeline starts with a
;; generator, followed by zero or more transformers, and a
;; serializer. Such a pipeline is used to process XML documents and
;; generate some other representation of the original document
;; (usually HTML, WML, PDF, SVG etc.).
;;
;; For resources which just need to be passed through without any
;; modification, the pipeline could have a single step, composed of a
;; reader.
;;
;; To facilitate reuse, pipelines can have names. Pipeline names have
;; to be unique, or an error is signaled.
;;
;; Pipelines are simply functions that accept arguments. These
;; arguments are usually passed from the sitemap, where they are
;; computed usually from the HTTP request.
;;
;; Below is an example of how pipelines definition look in
;; Scheme. Another Scheme module is responsible to mapping the
;; external XML representation of the pipelines definition into this
;; internal one.
;;
;;(define pipelines
;; (define-pipelines
;; (define-pipeline docbook-xhtml
;; (lambda (file)
;; (generate file)
;; (transform '((type xslt)
;; (name "docbook2xhtml.xsl")
;; (parameter "view-source" (concat "docs/samples/" file))))
;; (serialize (type xml))))
;;
;; (define-pipeline gif-image
;; (lambda (file)
;; (read (concat "src/" file ".gif") "image/gif")))
;; ))
;;
;; In the above example, we have two pipelines, `docbook-xhtml' and
;; `gif-image'. They both take as arguments a file name component,
;; which is used to generate the initial resource file. Of course, you
;; can define as many arguments as you want for a pipeline definition
;; function.
;;
;; The `define-pipelines' definition takes such a structure and
;; returns an associative list whose key is a pipeline name and the
;; value is the procedure that defines the pipeline.
(define-syntax define-pipelines
; FIXME: tail recursive
(lambda (x)
(syntax-case x ()
((_ e) (syntax (list e)))
((_ e1 e2 ...)
(syntax (let ((pipedef e1))
(cons pipedef (define-pipelines e2 ...)))))
)))
(define-syntax define-pipeline
(lambda (x)
(syntax-case x ()
((_) '())
((_ name body)
(syntax (cons (quote name) body))))))
;; Sitemap definition
;;
;; The sitemap specifies how to map URLs to pipelines, or to Scheme
;; functions to control the page flow in an application.
;;
;;(define the-sitemap
;; (define-sitemap
;; (match "sql/.*"
;; (call-pipeline docbook-xhtml "\\1"))
;;
;; (match "slides/.*\.gif"
;; (call-pipeline gif-image "\\1"))
;;
;; (match "view-source/*"
;; (generate "\\1"))
;; (transform '((type xslt) (name "xsp"))))
;; (serialize (type xml))))
;;
;; (match "shopping-cart"
;; (shopping-cart))
;; ))
(define-syntax define-sitemap
(lambda (x)
(syntax-case x ()
((_ e ...)
(syntax (lambda (url)
(or (e url) ...))))
)))
(define-syntax match
(lambda (x)
(syntax-case x ()
((_ pattern expression ...)
(syntax (let ((regexp (pregexp pattern)))
(lambda (url)
(let ((result (pregexp-match regexp url)))
(if result
(begin expression ...)
#f))))))
)))
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]