История изменений
Исправление Jini, (текущая версия) :
Два варианта на Common Lisp:
HTML в виде скобок:
`(:html
(:head
(:title "Hello Kitty")
(:meta :name ,(author *metadata*)
:content "Not Sanrio Co., Ltd"))
(:body
(:h1 "Hello Kitty")
(:p :class "official"
"She is not a cat. She is a human girl."))
,(iter
(repeat 3)
(collect `(:p :class "emphasis"
"Her name is Kitty White.")))
(:p :class "citation-needed"
"We still don't know how she eats."))
и типа как в JSP, только круче:
#<%"
<html>
<head>
<title>Hello Kitty</title>
<meta name="<% (author *metadata*) %>" content="Not Sanrio Co., Ltd"/>
</head>
<body>
<h1>Hello Kitty</h1>
<p class="official">She is not a cat. She is a human girl.</p>
<% (iter
(repeat 3)
; an ordinary string would work here too
(collect #<%"<p class="emphasis">Her name is Kitty White.</p>"%>)) %>
<p class="citation-needed">We still don't know how she eats.</p>
</body>
</html>
"%>
Реализация первого (конвертация списков такого формата в html) занимает 100 строк. Второй — 120 строк основного кода + 100 строк на вспомогательный класс, которым оборачивается входной поток, чтобы в него можно было обратно символы пихать (неограниченный unread-char). В обоих случаях в HTML можно вставлять какой угодно код с произвольной степенью рекурсии. Код пока можно посмотреть тут: http://jini-zh.org/tmp/lor/html.lisp
Исходная версия Jini, :
Два варианта на Common Lisp:
HTML в виде скобок:
`(:html
(:head
(:title "Hello Kitty")
(:meta :name ,(author *metadata*)
:content "Not Sanrio Co., Ltd"))
(:body
(:h1 "Hello Kitty")
(:p :class "official"
"She is not a cat. She is a human girl."))
,(iter
(repeat 3)
(collect `(:p :class "emphasis"
"Her name is Kitty White.")))
(:p :class "citation-needed"
"We still don't know how she eats."))
и типа как в JSP, только круче:
#<%"
<html>
<head>
<title>Hello Kitty</title>
<meta name=<% (author *metadata*) %> content="Not Sanrio Co., Ltd"/>
</head>
<body>
<h1>Hello Kitty</h1>
<p class="official">She is not a cat. She is a human girl.</p>
<% (iter
(repeat 3)
; an ordinary string would work here too
(collect #<%"<p class="emphasis">Her name is Kitty White.</p>"%>)) %>
<p class="citation-needed">We still don't know how she eats.</p>
</body>
</html>
"%>
Реализация первого (конвертация списков такого формата в html) занимает 100 строк. Второй — 120 строк основного кода + 100 строк на вспомогательный класс, которым оборачивается входной поток, чтобы в него можно было обратно символы пихать (неограниченный unread-char). В обоих случаях в HTML можно вставлять какой угодно код с произвольной степенью рекурсии. Код пока можно посмотреть тут: http://jini-zh.org/tmp/lor/html.lisp