如何在 CL-WHO 中为 XML 属性生成双引号而不是单引号
How to produce double quotes instead of single quotes for XML attributes in CL-WHO
默认情况下,CL-WHO 使用单引号来引用 XML 属性值(例如 <h1 id='title'>Hello!</h1>
)。我正在尝试将 cl-who:*attribute-quote-char*
设置为 #\"
,以便属性值使用双引号代替(例如 <h1 id="title">Hello!</h1>
)。但是,当我在 ASDF 中使用它时,(setq cl-who:*attribute-quote-char #\")
似乎没有任何效果:
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* #\"))
但是,我不知道这是如何工作的,也不知道为什么会这样。
发生这种情况是因为 with-html-output
足够聪明,可以发现(有些,它不一定能发现所有)生成的 HTML 是常量字符串的情况。在那些情况下,它只是将整个事情变成一个 macroexpansion-time 常量。这发生在您分配给变量之前,这发生在加载时。这就是为什么用 (eval-when (... :compile-toplevel) ...)
包装它的原因。
默认情况下,CL-WHO 使用单引号来引用 XML 属性值(例如 <h1 id='title'>Hello!</h1>
)。我正在尝试将 cl-who:*attribute-quote-char*
设置为 #\"
,以便属性值使用双引号代替(例如 <h1 id="title">Hello!</h1>
)。但是,当我在 ASDF 中使用它时,(setq cl-who:*attribute-quote-char #\")
似乎没有任何效果:
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* #\"))
但是,我不知道这是如何工作的,也不知道为什么会这样。
发生这种情况是因为 with-html-output
足够聪明,可以发现(有些,它不一定能发现所有)生成的 HTML 是常量字符串的情况。在那些情况下,它只是将整个事情变成一个 macroexpansion-time 常量。这发生在您分配给变量之前,这发生在加载时。这就是为什么用 (eval-when (... :compile-toplevel) ...)
包装它的原因。