From 66b7f736b54d11ac50a1a31178caff2169b8274e Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Mon, 31 Mar 2014 10:24:06 -0700 Subject: [PATCH] remove dependencies on css-tools and hyphenate --- convert.rkt | 2 +- decode.rkt | 2 +- html.rkt | 291 +++++++++++++++++++++++++++++++++++++++ render.rkt | 6 +- scribblings/decode.scrbl | 2 +- 5 files changed, 296 insertions(+), 7 deletions(-) create mode 100644 html.rkt diff --git a/convert.rkt b/convert.rkt index ae5bf68..5ecb038 100644 --- a/convert.rkt +++ b/convert.rkt @@ -1,5 +1,5 @@ #lang racket/base -(require sugar txexpr racket/list racket/string pollen/world xml html racket/file racket/match css-tools/html) +(require sugar txexpr racket/list racket/string pollen/world xml html racket/file racket/match pollen/html) (define (attrs->pollen attrs) (string-join (flatten (map (λ(pair) (list (format "'~a:" (car pair)) (format "\"~a\"" (cadr pair)))) attrs)) " ")) diff --git a/decode.rkt b/decode.rkt index f6c54da..dc42182 100644 --- a/decode.rkt +++ b/decode.rkt @@ -1,5 +1,5 @@ #lang racket/base -(require xml txexpr sugar racket/match racket/list (prefix-in html: css-tools/html)) +(require xml txexpr sugar racket/match racket/list (prefix-in html: pollen/html)) (require "debug.rkt" "world.rkt") diff --git a/html.rkt b/html.rkt new file mode 100644 index 0000000..1badd39 --- /dev/null +++ b/html.rkt @@ -0,0 +1,291 @@ +#lang racket/base +(require racket/contract xml) +(provide (all-defined-out)) + +;; for now, body is deemed a block, not inline +;; todo: is this legit? Why is body inline? +(define block-tags + '(address article aside audio blockquote body canvas dd div dl fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 header hgroup noscript ol output p pre section table tfoot ul video)) + + +;; for now, map is omitted because it's a Racket keyword +;; for now, style, script, and link are omitted because they shouldn't be wrapped +;; todo: figure out how to resolve this. should be able to use html version of map. +;; possibly prefixed? Probably a good idea so it doesn't collide with user namespace +(define inline-tags + '(a abbr acronym applet area b base basefont bdo big br button caption center cite code col colgroup del dir dfn dt em embed font frame framesethead hr html i iframe img input ins isindex kbd label legend li menu meta noframes object optgroup option param q s samp select small span strike strong sub sup tbody td textarea th thead title tr tt u var xmp)) + +(define tags (append block-tags inline-tags)) + +(define/contract (entity->string e) + (symbol? . -> . string?) + (format "~a" (integer->char (entity->integer e)))) + +(define/contract (string->entity str) + (string? . -> . symbol?) + (integer->entity (char->integer (car (string->list str))))) + +(define/contract (entity->integer e) + (symbol? . -> . integer?) + (hash-ref entities e)) + +(define/contract (integer->entity int) + (integer? . -> . symbol?) + (hash-ref chars int)) + +(define entities '#hash((quot . 34) + (amp . 38) + (apos . 39) + (lt . 60) + (gt . 62) + (nbsp . 160) + (iexcl . 161) + (cent . 162) + (pound . 163) + (curren . 164) + (yen . 165) + (brvbar . 166) + (sect . 167) + (uml . 168) + (copy . 169) + (ordf . 170) + (laquo . 171) + (not . 172) + (shy . 173) + (reg . 174) + (macr . 175) + (deg . 176) + (plusmn . 177) + (sup2 . 178) + (sup3 . 179) + (acute . 180) + (micro . 181) + (para . 182) + (middot . 183) + (cedil . 184) + (sup1 . 185) + (ordm . 186) + (raquo . 187) + (frac14 . 188) + (frac12 . 189) + (frac34 . 190) + (iquest . 191) + (Agrave . 192) + (Aacute . 193) + (Acirc . 194) + (Atilde . 195) + (Auml . 196) + (Aring . 197) + (AElig . 198) + (Ccedil . 199) + (Egrave . 200) + (Eacute . 201) + (Ecirc . 202) + (Euml . 203) + (Igrave . 204) + (Iacute . 205) + (Icirc . 206) + (Iuml . 207) + (ETH . 208) + (Ntilde . 209) + (Ograve . 210) + (Oacute . 211) + (Ocirc . 212) + (Otilde . 213) + (Ouml . 214) + (times . 215) + (Oslash . 216) + (Ugrave . 217) + (Uacute . 218) + (Ucirc . 219) + (Uuml . 220) + (Yacute . 221) + (THORN . 222) + (szlig . 223) + (agrave . 224) + (aacute . 225) + (acirc . 226) + (atilde . 227) + (auml . 228) + (aring . 229) + (aelig . 230) + (ccedil . 231) + (egrave . 232) + (eacute . 233) + (ecirc . 234) + (euml . 235) + (igrave . 236) + (iacute . 237) + (icirc . 238) + (iuml . 239) + (eth . 240) + (ntilde . 241) + (ograve . 242) + (oacute . 243) + (ocirc . 244) + (otilde . 245) + (ouml . 246) + (divide . 247) + (oslash . 248) + (ugrave . 249) + (uacute . 250) + (ucirc . 251) + (uuml . 252) + (yacute . 253) + (thorn . 254) + (yuml . 255) + (OElig . 338) + (oelig . 339) + (Scaron . 352) + (scaron . 353) + (Yuml . 376) + (fnof . 402) + (circ . 710) + (tilde . 732) + (Alpha . 913) + (Beta . 914) + (Gamma . 915) + (Delta . 916) + (Epsilon . 917) + (Zeta . 918) + (Eta . 919) + (Theta . 920) + (Iota . 921) + (Kappa . 922) + (Lambda . 923) + (Mu . 924) + (Nu . 925) + (Xi . 926) + (Omicron . 927) + (Pi . 928) + (Rho . 929) + (Sigma . 931) + (Tau . 932) + (Upsilon . 933) + (Phi . 934) + (Chi . 935) + (Psi . 936) + (Omega . 937) + (alpha . 945) + (beta . 946) + (gamma . 947) + (delta . 948) + (epsilon . 949) + (zeta . 950) + (eta . 951) + (theta . 952) + (iota . 953) + (kappa . 954) + (lambda . 955) + (mu . 956) + (nu . 957) + (xi . 958) + (omicron . 959) + (pi . 960) + (rho . 961) + (sigmaf . 962) + (sigma . 963) + (tau . 964) + (upsilon . 965) + (phi . 966) + (chi . 967) + (psi . 968) + (omega . 969) + (thetasym . 977) + (upsih . 978) + (piv . 982) + (ensp . 8194) + (emsp . 8195) + (thinsp . 8201) + (zwnj . 8204) + (zwj . 8205) + (lrm . 8206) + (rlm . 8207) + (ndash . 8211) + (mdash . 8212) + (lsquo . 8216) + (rsquo . 8217) + (sbquo . 8218) + (ldquo . 8220) + (rdquo . 8221) + (bdquo . 8222) + (dagger . 8224) + (Dagger . 8225) + (bull . 8226) + (hellip . 8230) + (permil . 8240) + (prime . 8242) + (Prime . 8243) + (lsaquo . 8249) + (rsaquo . 8250) + (oline . 8254) + (frasl . 8260) + (euro . 8364) + (image . 8465) + (weierp . 8472) + (real . 8476) + (trade . 8482) + (alefsym . 8501) + (larr . 8592) + (uarr . 8593) + (rarr . 8594) + (darr . 8595) + (harr . 8596) + (crarr . 8629) + (lArr . 8656) + (uArr . 8657) + (rArr . 8658) + (dArr . 8659) + (hArr . 8660) + (forall . 8704) + (part . 8706) + (exist . 8707) + (empty . 8709) + (nabla . 8711) + (isin . 8712) + (notin . 8713) + (ni . 8715) + (prod . 8719) + (sum . 8721) + (minus . 8722) + (lowast . 8727) + (radic . 8730) + (prop . 8733) + (infin . 8734) + (ang . 8736) + (and . 8743) + (or . 8744) + (cap . 8745) + (cup . 8746) + (int . 8747) + (there4 . 8756) + (sim . 8764) + (cong . 8773) + (asymp . 8776) + (ne . 8800) + (equiv . 8801) + (le . 8804) + (ge . 8805) + (sub . 8834) + (sup . 8835) + (nsub . 8836) + (sube . 8838) + (supe . 8839) + (oplus . 8853) + (otimes . 8855) + (perp . 8869) + (sdot . 8901) + (vellip . 8942) + (lceil . 8968) + (rceil . 8969) + (lfloor . 8970) + (rfloor . 8971) + (lang . 9001) + (rang . 9002) + (loz . 9674) + (spades . 9824) + (clubs . 9827) + (hearts . 9829) + (diams . 9830))) + +(define chars (make-hash (hash-map entities (λ(k v) (cons v k))))) ; flip the hash diff --git a/render.rkt b/render.rkt index f5d14cd..fd2fe9f 100644 --- a/render.rkt +++ b/render.rkt @@ -236,8 +236,7 @@ pollen/world pollen/project sugar - txexpr - hyphenate) + txexpr) (define-namespace-anchor my-module-cache-ns-anchor) (provide my-module-cache-ns-anchor)) @@ -273,6 +272,5 @@ pollen/template pollen/world sugar - txexpr - hyphenate)) + txexpr)) (string->bytes/utf-8 (eval expr-to-eval (current-namespace))))) \ No newline at end of file diff --git a/scribblings/decode.scrbl b/scribblings/decode.scrbl index fc18d32..3583d92 100644 --- a/scribblings/decode.scrbl +++ b/scribblings/decode.scrbl @@ -172,7 +172,7 @@ Because it's convenient, Pollen categorizes tagged X-expressions into two catego #:value html-block-tags]{ A parameter that defines the set of tags that @racket[decode] will treat as blocks. This parameter is initialized with the HTML block tags, namely: -@code[(format "~a" (dynamic-require 'css-tools/html 'block-tags))]} +@code[(format "~a" (dynamic-require 'pollen/html 'block-tags))]} @defproc[