CL-WHO всегда начинается с одинарной цитаты

Моя проблема в том, что CL-WHO начинает каждое выражение с одного рынка котировок, когда оно превращает S-выражения Lisp в вывод html. Это нормально в большинстве случаев, но это проблема, так как я связываю свой файл с внешним файлом javascript. Я пытаюсь сделать этот проект простым, и поскольку никто из разработчиков javascript в моей команде не знает Common Lisp, использование parenscript, вероятно, выходит за рамки уравнения. Вот пример моей проблемы и одной из ошибок в моей программе:

:onclick "alertUser('id')"

Когда конкретный элемент нажимается в html-документе, это должно вызывать функцию JavaScript с именем alertUser, а идентификатор тега должен передаваться в функцию JavaScript в качестве аргумента. Но независимо от того, что я делаю, CL-WHO преобразует эту строку в одинарные кавычки, поэтому я получаю недопустимое выражение. Вот что этот код преобразует в:

onclick='alertUser('id')'>

Все это одинарные кавычки, поэтому "alertUser(" передается как первая строка, которая явно недействительна, и я получаю область синтаксиса в моих инструментах разработчика. Я думал, что смогу решить эту проблему, используя функцию форматирования с escape-символами. приравнивать к:

CL-USER> (format t "\"alertUser('id')\"")
"alertUser('id')"
NIL
CL-USER> 

Но когда я попробую это с CL-WHO:

:onclick (format nil "\"alertUser('id')\"")

Это означает:

onclick='"alertUser('locos-tacos-order')"'>

Что также является недействительным HTML. Как видите, CL-WHO начнёт с одинарной цитаты, несмотря ни на что. Затем я попробовал функцию CL-WHO fmt:

:onclick (fmt "\"alertUser('locos-tacos-order')\"")

Когда я использую функцию fmt, она полностью избавляется от выражения my:onclick при преобразовании в html!:

id='id'"alertUser('id')">

Наконец, я попробовал функцию str и получил неправильный вывод, аналогичный моей первоначальной попытке:

onclick='"alertUser('id')"'

Очевидно, что если я напишу это в чистом HTML, это будет выглядеть так:

onclick="alertUser('id')">

Который действителен. Мой вопрос состоит в том, как просто разрешить CL-WHO использовать двойные кавычки в этих ситуациях вместо одинарных кавычек?

1 ответ

Решение

@jkiiski был правильным ответом в комментариях под моим вопросом, но я хотел опубликовать ответ, чтобы любой, кто сталкивался с подобной проблемой в будущем, мог решить эту проблему. Как сказал @jkiiski, в пакете cl-who есть переменная с именем ATTRIBUTE-QUOTE-CHAR, которая по умолчанию равна #\'. Вы можете просто установить эту переменную на #\"вместо того, чтобы кавычки по умолчанию были двойными кавычками:

(setf *attribute-quote-char* #\")

После добавления этой строки кода в верхней части файла мой HTML по умолчанию:

onclick="alertUser('id')"

и теперь Ja vaScript может выполняться правильно. Благодарим @jkiiski за правильный ответ.

Другие вопросы по тегам