;;; -*- 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")
".")
)))