Skip to content
This repository has been archived by the owner on Sep 17, 2022. It is now read-only.

Inserting html comment with pollen command #126

Open
jaybonthius opened this issue Feb 20, 2022 · 4 comments
Open

Inserting html comment with pollen command #126

jaybonthius opened this issue Feb 20, 2022 · 4 comments

Comments

@jaybonthius
Copy link

jaybonthius commented Feb 20, 2022

I want to insert an html comment <!-- like this --> with a pollen command, but I'm not sure how I would define a tag function, since a comment doesn't take the same form as other tags.

EDIT: I'm realizing that a tag is probably not the way to accomplish this. But how would I insert a < or > without getting turned into &lt; or &gt;?

(define html-comment `(!-- "this is a comment"))

From this pollen markup:

this is a paragraph ◊html-comment

I want to get this:

<p>
  this is a paragraph
  <!-- this is a comment -->
</p>

but I'm getting this:

<p>
  this is a paragraph
  <!-->this is a comment</!-->
</p>

which the browser isn't sure how to interpret, and turns into this:

<p>
  this is a paragraph
  <!---->
  this is a comment
  <!--!---->
</p>
@sorawee
Copy link

sorawee commented Feb 20, 2022

The documentation of ->html suggests that it consumes an arbitrary xexpr?. The grammar shows that a misc, particularly a comment? from the xml module is considered an xexpr?. So ideally this should work:

#lang pollen

◊(require xml)

◊(comment "abc")

Unfortunately, it's not, and I personally consider this a Pollen bug.

That being said, I'm curious why do you want to generate HTML comments? They won't be displayed to users anyway. And if you want to write a comment in the source, wouldn't it be better to do so in the Pollen source rather than HTML source? Pollen does support a comment syntax already:

#lang pollen

◊;abc

def

@mbutterick
Copy link
Owner

mbutterick commented Feb 20, 2022

I just pushed an update to the underlying txexpr library that should fix your case:

#lang pollen/mode racket
(require pollen/tag pollen/template/html rackunit)

(define html-comment '(@ "<!-- this is a comment -->"))
(define root (default-tag-function 'root))
(define doc ◊root{this is a paragraph ◊html-comment})
(check-equal? (->html doc) "<root>this is a paragraph <!-- this is a comment --></root>")

Keep in mind that the comment string, like a CDATA string, has to be separated from adjacent string elements. (Ordinarily, adjacent strings will be concatenated in the output.) In this case I’ve used the splicing tag @ to do this without adding an extra tag to the generated HTML.

@jaybonthius
Copy link
Author

jaybonthius commented Feb 20, 2022

Whoops, didn't mean to close the issue.

@sorawee I am using an HTML presentation framework (reveal.js) to make a web-based slideshow. Weirdly enough, some attributes can be controlled through HTML comments. (https://revealjs.com/markdown/#element-attributes).

@mbutterick Amazing! Thank you!

@mbutterick
Copy link
Owner

mbutterick commented Feb 20, 2022

See also https://github.com/applied-science/talks/tree/master/mxnet

(example of using Pollen to orchestrate reveal.js)

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants