;;; -*- Mode: Lisp -*- (in-package #:lml2) (html-file-page ("readme") (html (:head (:title "LML2 README") ((:meta :http-equiv "Content-Type" :content "text/html; charset=iso-8859-1")) ((:meta :name "Copyright" :content "Kevin Rosenberg 2002 ")) ((:meta :name "description" :content "Lisp Markup Language Documentation")) ((:meta :name "author" :content "Kevin Rosenberg")) ((:meta :name "keywords" :content "Common Lisp, HTML, Markup Langauge"))) (:body (:h1 "LML2 Documentation") (:h2 "Overview") (:p ((:a :href "http://lml2.b9.com") "LML2") " is a Common Lisp package for generating HTML and XHTML documents." " LML2 is based on:") (:ul (:li ((:a :href "http://lml.b9.com") "LML") " by " ((:a :href "mailto:kevin@rosenberg.net") "Kevin Rosenberg")) (:li "htmlgen by " ((:a :href "http://www.franz.com") "Franz, Inc."))) (:p "The home page for LML2 is " ((:a :href "http://lml2.b9.com/") "http://lml2.b9.com/") ".") (:h2 "Prerequisites") (:ul (:li ((:a :href "http://cliki.net/asdf") "ASDF")) (:li ((:a :href "http://cliki.net/kmrcl") "KMRCL"))) (:h2 "Differences between LML2 and LML") (:p "The syntax and HTML generation for LML2 are based on Franz's htmlgen macro. Personally, I like the syntax of LML better than LML2, but there are advantages of Franz's approach:") (:ul (:li "Faster compilation and runtime HTML generation") (:li "Behavior of tags is extensible")) (:h2 "Differences between LML2 and htmlgen") (:ul (:li "LML2 is XHTML compatible with close tags so that (html :hr) now produces '<hr />'") (:li "Lowercase tag names so that (html ((:p class 'a))) now produces '<p class=\"a\"></p>") (:li "Addition of new tags such as :insert-file, :nbsp, :jscript") (:li "Removal of the if* macro from the htmlgen.lisp source code") (:li "Incorporation of LML's standard site macro and other helper functions.") (:li "Addition of special attribute tags (:if :when :optional :format :format") (:li "Automatic quoting of attribute values for non-string values") (:li "Post macroexpansion code walker to collape sequential write-string calls")) (:h2 "Installation") (:p "The easiest way to install LML is to use the " ((:a :href "http://www.debian.org/") "Debian") " GNU/Linux operating system. You can then use the command " (:tt "apt-get install cl-lml2") " to automatically download and install the LML2 package.") (:p "On a non-Debian system, you need to have " ((:a :href "http://cclan.sourceforge.net/") "ASDF") " installed to load the system definition file. You will need to change the source pathname in the system file to match the location where you have installed LML.") (:h2 "Usage") (:p "Currently, there is no documentation on the functions provided by LML2. However, the source code is instructive and there are example files included in the LML2 package.") (:h2 "Examples") ((:table :border 1 :cellpadding 3) (:tbody (:tr ((:td :colspan 2 :style "color:#000;background-color:#ccc;font-weight:bold;") "Iteration")) (:tr (:td (:pre "(html (:i \"The square of the first five integers are: \") (:b (loop as x from 1 to 5 doing (html " " (:princ (* x x))))))")) (:td (:i "The square of the first five integers are: ") (:b (loop as x from 1 to 5 doing (html " " (:princ (* x x))))))) )) :hr (:p "View this page's " ((:a :href "http://lml2.b9.com/") "LML2") " " ((:a :href "readme.lml") "source") ".") )))