guile-user
[Top][All Lists]
Advanced

[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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]