<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.kram.nz/index.php?action=history&amp;feed=atom&amp;title=SE701%3AApril_2</id>
	<title>SE701:April 2 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.kram.nz/index.php?action=history&amp;feed=atom&amp;title=SE701%3AApril_2"/>
	<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE701:April_2&amp;action=history"/>
	<updated>2026-04-29T07:21:35Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.kram.nz/index.php?title=SE701:April_2&amp;diff=12293&amp;oldid=prev</id>
		<title>Mark: 2 revision(s)</title>
		<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE701:April_2&amp;diff=12293&amp;oldid=prev"/>
		<updated>2008-11-03T05:27:41Z</updated>

		<summary type="html">&lt;p&gt;2 revision(s)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt; ;; HTML generation&lt;br /&gt;
 &lt;br /&gt;
 ;; &amp;lt;nowiki&amp;gt;&amp;lt;p&amp;gt;This is a paragraph &amp;lt;i&amp;gt;with &amp;lt;b&amp;gt;italics&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt; &amp;lt;b&amp;gt;with bold&amp;lt;/b&amp;gt; &amp;lt;/p&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ;;    p entity&lt;br /&gt;
 ;;      text &amp;quot;This is a paragraph &amp;quot;&lt;br /&gt;
 ;;      i entity&lt;br /&gt;
 ;;        text &amp;quot;with &amp;quot;&lt;br /&gt;
 ;;        b entity&lt;br /&gt;
 &lt;br /&gt;
 ;; (write-html (:p &amp;quot;This is &amp;lt; &amp;gt; &amp;amp; a paragraph &amp;quot; (:i with (:b italics))))&lt;br /&gt;
 &lt;br /&gt;
 ;; (write-html &amp;quot;simple string&amp;quot;)&lt;br /&gt;
 ;; (write-html &amp;#039;symbol)&lt;br /&gt;
 &lt;br /&gt;
 ;; also: attributes, &amp;lt;nowiki&amp;gt;&amp;lt;p class=&amp;quot;main&amp;quot; style=&amp;quot;...&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ;; (:p :class &amp;quot;main&amp;quot; :style &amp;quot;...&amp;quot; stuff ...)&lt;br /&gt;
 &lt;br /&gt;
 (defvar *html-output* *standard-output*)&lt;br /&gt;
 &lt;br /&gt;
 (defvar *html-escapes* &amp;#039;((#\&amp;gt; . &amp;quot;&amp;amp;gt;&amp;quot;)&lt;br /&gt;
 			 (#\&amp;lt; . &amp;quot;&amp;amp;lt;&amp;quot;)&lt;br /&gt;
 			 (#\&amp;amp; . &amp;quot;&amp;amp;amp;&amp;quot;)))&lt;br /&gt;
 &lt;br /&gt;
 (defvar *attr-escapes* &amp;#039;((#\&amp;gt; . &amp;quot;&amp;amp;gt;&amp;quot;)&lt;br /&gt;
 			 (#\&amp;lt; . &amp;quot;&amp;amp;lt;&amp;quot;)&lt;br /&gt;
 			 (#\&amp;amp; . &amp;quot;&amp;amp;amp;&amp;quot;)&lt;br /&gt;
 			 (#\&amp;quot; . &amp;quot;&amp;amp;quot;&amp;quot;)&lt;br /&gt;
 			 (#\&amp;#039; . &amp;quot;&amp;amp;apos;&amp;quot;)))&lt;br /&gt;
 (defvar *escapes* *html-escapes*)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 (defun write-html-char (c)&lt;br /&gt;
   (let ((esc (cdr (find c *escapes* :key #&amp;#039;car))))&lt;br /&gt;
     (cond&lt;br /&gt;
       (esc&lt;br /&gt;
        (format *html-output* &amp;quot;~a&amp;quot; esc))&lt;br /&gt;
       ((standard-char-p c)&lt;br /&gt;
        (format *html-output* &amp;quot;~a&amp;quot; c))&lt;br /&gt;
       (t&lt;br /&gt;
        (format *html-output* &amp;quot;&amp;amp;#~d;&amp;quot; (char-code c))))))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 (defun write-html-literal (literal)&lt;br /&gt;
   (map nil #&amp;#039;write-html-char (format nil &amp;quot;~a&amp;quot; literal)))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 (defun html-write-attr (attr)&lt;br /&gt;
   (if (cdr attr)&lt;br /&gt;
       (progn&lt;br /&gt;
 	(format *html-output* &amp;quot; ~a=\&amp;quot;&amp;quot; (car attr))&lt;br /&gt;
 	(write-html-literal (cdr attr))&lt;br /&gt;
 	(format *html-output* &amp;quot;\&amp;quot;&amp;quot;))&lt;br /&gt;
       (format *html-output* &amp;quot; ~a&amp;quot; (car attr))))&lt;br /&gt;
 &lt;br /&gt;
     &lt;br /&gt;
 (defun html-extract (html)&lt;br /&gt;
   (labels ((html-extract-attrs (attrs elts)&lt;br /&gt;
 	     (if (and (keywordp (car elts)) (keywordp (cadr elts)))&lt;br /&gt;
 		 ;; (:selected :class &amp;quot;foo&amp;quot; ...)&lt;br /&gt;
 		 ;; --&amp;gt; interpret :selected as a flag (attribute with no value)&lt;br /&gt;
 		 (html-extract-attrs (cons (cons (car elts) nil) attrs)&lt;br /&gt;
 				     (cdr elts)))&lt;br /&gt;
 	     (if (keywordp (car elts))&lt;br /&gt;
 		 ;; normal :keyword value pair&lt;br /&gt;
 		 (html-extract-attrs (cons (cons (car elts) (cadr elts)) attrs)&lt;br /&gt;
 				     (cddr elts))&lt;br /&gt;
 		 ;; end of attributes&lt;br /&gt;
 		 (values (car html) (nreverse attrs) elts))))&lt;br /&gt;
     (html-extract-attrs &amp;#039;() (cdr html))))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 (defun write-html (html)&lt;br /&gt;
   (if (consp html)&lt;br /&gt;
       (multiple-value-bind (tag attrs elts) (html-extract html)&lt;br /&gt;
 	(format *html-output* &amp;quot;&amp;lt;~a&amp;quot; tag)&lt;br /&gt;
 	(let ((*escapes* *attr-escapes*)) (mapcar #&amp;#039;html-write-attr attrs))&lt;br /&gt;
 	(format *html-output* &amp;quot;&amp;gt;&amp;quot;)&lt;br /&gt;
 	(mapcar #&amp;#039;write-html elts)&lt;br /&gt;
 	(format *html-output* &amp;quot;&amp;lt;/~a&amp;gt;&amp;quot; tag))&lt;br /&gt;
       (progn&lt;br /&gt;
 	(write-html-literal html)&lt;br /&gt;
 	(format *html-output* &amp;quot; &amp;quot;))))&lt;/div&gt;</summary>
		<author><name>Mark</name></author>
	</entry>
</feed>