;; translate s-expr to XML
;;
(define (expr2xml expr level)
(cond
((or (atom? expr) (quote? expr))
(print (dup " " level))
(println expr))
((list? (first expr))
(expr2xml (first expr) (+ level 1))
(dolist (s (rest expr)) (expr2xml s (+ level 1))))
((symbol? (first expr))
(print (dup " " level))
(println "<" (first expr) ">")
(dolist (s (rest expr)) (expr2xml s (+ level 1)))
(print (dup " " level))
(println "</" (first expr) ">"))
(true
(print (dup " " level)
(println "<error>" (string expr) "<error>")))
))
;; a lisp expression for a person
(set 'expr '(person
(name "John Doe")
(address (street "Main Street") (city "Anytown"))))
;; translate to XML
(expr2xml expr 0) =>
<person>
<name>
John Doe
</name>
<address>
<street>
Main Street
</street>
<city>
Anytown
</city>
</address>
</person>
syntax highlighting with newLISP and syntax.cgi