! Copyright (C) 2005, 2006 Daniel Ehrenberg ! See http://factorcode.org/license.txt for BSD license. USING: namespaces kernel assocs sequences ; IN: xml.entities : entities-out H{ { CHAR: < "<" } { CHAR: > ">" } { CHAR: & "&" } } ; : quoted-entities-out H{ { CHAR: & "&" } { CHAR: ' "'" } { CHAR: " """ } } ; : escape-string-by ( str table -- escaped ) #! Convert <, >, &, ' and " to HTML entities. [ [ dupd at [ % ] [ , ] ?if ] curry each ] "" make ; : escape-string ( str -- newstr ) entities-out escape-string-by ; : escape-quoted-string ( str -- newstr ) quoted-entities-out escape-string-by ; : entities H{ { "lt" CHAR: < } { "gt" CHAR: > } { "amp" CHAR: & } { "apos" CHAR: ' } { "quot" CHAR: " } } ; : html-entities #! generated from: #! http://www.w3.org/TR/REC-html40/sgml/entities.html H{ { "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 } { "fnof" 402 } { "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 } { "bull" 8226 } { "hellip" 8230 } { "prime" 8242 } { "Prime" 8243 } { "oline" 8254 } { "frasl" 8260 } { "weierp" 8472 } { "image" 8465 } { "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 } { "lceil" 8968 } { "rceil" 8969 } { "lfloor" 8970 } { "rfloor" 8971 } { "lang" 9001 } { "rang" 9002 } { "loz" 9674 } { "spades" 9824 } { "clubs" 9827 } { "hearts" 9829 } { "diams" 9830 } { "OElig" 338 } { "oelig" 339 } { "Scaron" 352 } { "scaron" 353 } { "Yuml" 376 } { "circ" 710 } { "tilde" 732 } { "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 } { "permil" 8240 } { "lsaquo" 8249 } { "rsaquo" 8250 } { "euro" 8364 } } ; SYMBOL: extra-entities f extra-entities set-global : with-entities ( entities quot -- ) [ swap extra-entities set call ] with-scope ; inline : with-html-entities ( quot -- ) html-entities swap with-entities ; inline