Eli was kind enough to write up some comments on the Scribble hack I put together for generating HTML. Because of Blogger's limited comment form, he sent them to me via e-mail. I think they more than deserve their own post, so they are posted below.
Thanks Eli!
That's all very nice, but you could easily take this *much* further... One thing that I noticed is that you're using just plain scheme code that "expands" into some string but is not using any body argument. You could use it, for example, to make a self-link thing:
(define (url . body) @list{<a href="@body">@|body|</a>})
And now you can do:
Want to visit @url[project-url].
Note that I'm using square brackets to use a Scheme expression as an argument, it could also be done with
Want to visit @url{@project-url}.
This is semi-cute, but it's even better if you use this instead of spans, which would be even nicer with your class->style thing:
(define (span style . body) @list{<span @|style|>@|body|</span>})
and now:
We @span[loud]{rock}!
(This will require a minor change -- looks like you made your `define-style' thing use strings, and the above is easier to use if you make it just a plain definition. My guess is that this change will simplify things.)
Obviously, this can be taken further...:
(define (p . body) @list{<p>@|body|</p>}) ... @p{Some text here} ...
and this can end up doing the whole thing with Scheme code. And there's yet more: you can go further than just a Scheme function for each HTML tag -- you can have functions that generate the complete template. For example:
(define (letter name . body) @list{<html><body><p>Hello @|name|,</p>@|body|</body></html>}) @letter["John Doe"]{ @p{Blah blah blah} ...}
This kind of a smooth transition from a pure text to a simple template to something that looks like a DSL for HTML generation is something that I talked about in the scribble syntax paper (from the Scheme workshop in the summer). Going the whole way might not be appropriate -- for example, if your clients are using this, they might feel more comfortable with sticking with writing the HTML code.
No comments:
Post a Comment