Отличия между YstokHTML и HTMLGen

  1. Макрос html переименован в htm (одноименный макрос есть в CL-WHO).
  2. YstokHTML может генерировать XHTML с соответствующими закрывающими тегами для пустых элементов в зависимости от значения переменной *html-mode*; поэтому (htm :hr) генерирует или '<hr>', или '<hr />'. Эта же переменная *html-mode* задает завершение тегов '/>' в семействе функций print-html-...
  3. Имена тегов переводятся в нижний регистр, когда *html-mode* есть :xml.
  4. Имена атрибутов переводятся в нижний регистр, когда *html-mode* есть :xml или *attribute-case* есть :downcase. В это режиме (htm ((:p class 'a))) генерирует '<p class="a"></p>'.
  5. Дополнительные псевдотеги :include, :nbsp, :jscript, :format, :format-safe, :!doctype, :?xml.
  6. Дополнительный псевдотег :escape производит escape-кодирование содержимого путем вызова функции html-template:escape-string.
  7. Дополнительный (помимо :if*) признак :optional, указывающий способ вычисления значения атрибута.
  8. Автоматическое заключение значений атрибутов в двойные кавычки (quoting).
  9. Вхождения вспомогательного макроса if* удалены из исходного файла htmlgen.lisp.
  10. Структурный тип html-process переименован в descriptor:
  11. Функция prin1-safe-http-string заменена обобщённой фукнцией prin1-attribute-value сигнатуры:
     (val &optional stream).
  12. Сигнатура функций html-print-list и html-print изменена на:
     (form &optional stream).
  13. К макросу def-std-html добавлен необязательный параметр macro-name:
  14. Вспомогательные функции attribute-name-string и prin1-attribute-value однообразно генерируют HTML и при вызове функции html-standard-print, и с помощью макроса htm.