[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
tagged string builder
From: |
Keisuke Nishida |
Subject: |
tagged string builder |
Date: |
Sat, 24 Mar 2001 13:49:28 -0500 |
User-agent: |
Wanderlust/2.4.0 (Rio) SEMI/1.13.7 (Awazu) FLIM/1.13.2 (Kasanui) Emacs/21.0.99 (i686-pc-linux-gnu) MULE/5.0 (SAKAKI) |
This is a simple tagged string builder:
guile> (define title "Guile Home Page")
guile> (define url "http://www.gnu.org/software/guile/")
guile> (display #[html #[head #[title title ] ]
#[body #[a #:href url title ] ] ] )
<html><head><title>Guile Home Page<\title>
<\head>
<body><a href="http://www.gnu.org/software/guile/">Guile Home Page<\a>
<\body>
<\html>
How should I name this?
Kei
------------------------------------------------------------------------
(define *end-of-tag* '])
(define (read-tagged-entry ch port)
(define (get)
(let ((x (read port)))
(if (eq? x *end-of-tag*) #f x)))
(let ((tag (let ((x (get)))
(cond ((symbol? x) (symbol->string x))
(else (error "Invlaid tag:" x))))))
(let loop ((ks '()) (ls '()))
(cond ((get) =>
(lambda (x)
(if (keyword? x)
(let ((k (format #f " ~A=" (keyword->symbol x))))
(loop (cons* "\"" (get) "\"" k ks) ls))
(loop ks (cons x ls)))))
(else
`(string-append ,(format #f "<~A" tag)
,@(reverse! ks)
">"
,@(reverse! ls)
,(format #f "<\\~A>\n" tag)))))))
(read-hash-extend #\[ read-tagged-entry)
- tagged string builder,
Keisuke Nishida <=