2012-02-12 15 views
6

¿Cuál sería la forma recomendada de generar HTML a partir de X-expressions en Racket? Parece que response/xexpr lo haría, pero parece estar diseñado para servir respuestas http. Lo único que necesito es generar una cadena HTML a partir de listas de Racket (o expresiones X), sin necesidad de tener un servidor web involucrado.Generar HTML en Raqueta

Respuesta

6

La función xexpr->string en la biblioteca xml debe hacer lo que está solicitando, si no me equivoco. Para ver un ejemplo donde se usa, puede echar un vistazo a here, donde el ejemplo lo usa para generar respuestas HTML para una aplicación de servidor web simplificada.

> (xexpr->string '(html (head (title "Hello")) (body "Hi!"))) 
"<html><head><title>Hello</title></head><body>Hi!</body></html>" 
+0

Funciona como un encanto, gracias! – GiantSquid

5

Si usted está dispuesto a volcar xexprs para una instalación potencialmente más conveniente, entonces no es un nuevo lenguaje que se utiliza para generar las páginas web de raqueta. Todavía no está documentado (por lo tanto, todavía es nuevo y no es públicamente correcto), pero puede ver cómo se usa en these sources. Como un ejemplo rápido que demuestra que, ejecute lo siguiente:

#lang scribble/html 
@(define name "foo") 
@html{@head{@title{@name}} 
     @body{@h1{@name}}} 

Otro ejemplo lo utiliza como una biblioteca:

#lang at-exp racket/base 
(require scribble/html) 
(define (page name) 
    (output-xml 
    @html{@head{@title{@name}} 
     @body{@h1{@name}}})) 
@page{foo} 

El at-exp no es necesaria, sólo hace que sea fácil de escribir un montón de texto en código. (Y también sería igual de útil con xexprs.)

La principal diferencia es que en este lenguaje las etiquetas HTML son en realidad enlaces, lo que hace que sea conveniente mantener el código. También es muy flexible en lo que puede tomar como texto; por ejemplo, no hay necesidad de mantenerlo en una lista estricta de cadenas y etiquetas secundarias, por lo que nunca se enfrentará a preguntas sobre dónde usar append-map etc.

Cuestiones relacionadas