Как создавать двойные кавычки вместо одинарных для атрибутов XML в CL-WHO
По умолчанию CL-WHO использует одинарные кавычки для заключения в кавычки значений атрибутов XML (например,
<h1 id='title'>Hello!</h1>
). я пытаюсь установить
cl-who:*attribute-quote-char*
к
#\"
чтобы вместо значений атрибутов использовались двойные кавычки (например,
<h1 id="title">Hello!</h1>
). Однако, похоже, это не имеет никакого эффекта, когда я использую его в ASDF следующим образом:
myprog.asd
:
(defpackage myprog-asd
(:use :cl :asdf))
(in-package :myprog-asd)
(defsystem "myprog"
:depends-on (:cl-who)
:components ((:file "mypackage")))
mypackage.lisp
:
(defpackage :mypackage
(:use :cl)
(:export :f))
(in-package :mypackage)
(setq cl-who:*attribute-quote-char* #\") ;; <- HERE.
(defun f ()
(cl-who:with-html-output (*standard-output*)
(:h1 :id "title" "Hello!")))
Я получаю одинарные кавычки вместо двойных кавычек:
$ sbcl
* (require "asdf")
* (asdf:load-asd (merge-pathnames "myprog.asd" (uiop:getcwd)))
* (asdf:load-system :myprog)
* (mypackage:f)
<h1 id='title'>Hello!</h1>
Почему
(setq cl-who:*attribute-quote-char #\")
не имеет никакого эффекта? Как заставить CL-WHO печатать двойные кавычки вместо одинарных?
(версия SBCL: 2.2.2, версия CL-WHO: 1.1.4 [коммит: 0d382647])
Кстати, я обнаружил, что могу получить двойные кавычки, заключив
setq
в
eval-when
:
(eval-when (:compile-toplevel :execute)
(setq cl-who:*attribute-quote-char* #\"))
Однако я понятия не имею, как и почему это работает.
1 ответ
Это происходит потому, что