YstokHTML — коллекция Коммон Лисп библиотек для генерации и разбора (синтаксического и семантического анализа) документов в форматах HTML и XHTML. Прототипами и источниками идей для YstokHTML послужили:
Все библиотеки реализованы с применением эффективных алгоритмов и не используют функции работы с регулярными выражениями.
И генератор, и анализатор YstokHTML поддерживают внутреннее представление HTML-документа на основе Lisp HTML (LHTML) — языка S-выражений, предложенного компанией Franz в реализации HTMLGen. Позже П.Сейбель (Peter Seibel) в своей книге Practical Common Lisp описал аналогичный генератор с тем же исходным синтаксисом, названный им FOO HTML.
Lisp Hyper-Text Template (LHTT) является расширением LHTML.
В кратце, S-выражение LHTT может содержать псевдоэлементы
:include, :eval, :if, :loop, :repeat
и т.п.
вдобавок к стандартным элементам HTML, теги которых представлены одноимёнными
ключами. Цель создания LHTT — обеспечить внутреннее представление, которое
Исходные файлы YstokHTML общедоступены в любом из дистрибутивов:
Они включают исходные тексты программ, определение системы как для ASDlite и ASDF (файл ystok-html.asd), так и для LispWorks (файл defsys.lisp).
История разработки: change.log.
Русский перевод книги Practical Common Lisp может послужить в качестве введения в YstokHTML. В качестве описания подойдёт также оригинальная документация Franz на английском языке. Исходный код хорошо комментирован. Вдобавок, в дистрибутиве находится файл с демонстрационными примерами html-examples.lisp и файл с тестовыми примерами для анализатора phtml-test.lisp.
Если упомянутые файлы недоступны на сайте Franz, можно воспользоваться нашими локальными копиями HTMLGen и PHTML.
(html:with-html-stream (*standard-output*) ((:table :border 2) (:tr ((:th :colspan 2) (:i "The square of four integers"))) (dotimes (i 4) (html:htm (:tr (:td (:princ i)) (:td (:b (:princ (* i i)))))))) |
|
Исходный код YstokHTML и необходимых библиотек, теоретически, переносимый. Фактически, тестирование проходило только под Lispworks 4.4 и 5.0 для Windows. Если Вам удалось запустить на другой платформе или реализации языка Лисп, пожалуйста, дайте нам знать.