]> gitweb.factorcode.org Git - factor.git/blob - basis/xml/entities/entities.factor
Updating code for make and fry changes
[factor.git] / basis / xml / entities / entities.factor
1 ! Copyright (C) 2005, 2006 Daniel Ehrenberg
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: namespaces make kernel assocs sequences ;
4 IN: xml.entities
5
6 : entities-out
7     H{
8         { CHAR: < "&lt;"   }
9         { CHAR: > "&gt;"   }
10         { CHAR: & "&amp;"  }
11     } ;
12
13 : quoted-entities-out
14     H{
15         { CHAR: & "&amp;"  }
16         { CHAR: ' "&apos;" }
17         { CHAR: " "&quot;" }
18     } ;
19
20 : escape-string-by ( str table -- escaped )
21     #! Convert <, >, &, ' and " to HTML entities.
22     [ [ dupd at [ % ] [ , ] ?if ] curry each ] "" make ;
23
24 : escape-string ( str -- newstr )
25     entities-out escape-string-by ;
26
27 : escape-quoted-string ( str -- newstr )
28     quoted-entities-out escape-string-by ;
29
30 : entities
31     H{
32         { "lt"    CHAR: <  }
33         { "gt"    CHAR: >  }
34         { "amp"   CHAR: &  }
35         { "apos"  CHAR: '  }
36         { "quot"  CHAR: "  }
37     } ;
38
39 : html-entities
40     #! generated from:
41     #! http://www.w3.org/TR/REC-html40/sgml/entities.html
42     H{
43         { "nbsp"   160 }
44         { "iexcl"  161 }
45         { "cent"   162 }
46         { "pound"  163 }
47         { "curren" 164 }
48         { "yen"    165 }
49         { "brvbar" 166 }
50         { "sect"   167 }
51         { "uml"    168 }
52         { "copy"   169 }
53         { "ordf"   170 }
54         { "laquo"  171 }
55         { "not"    172 }
56         { "shy"    173 }
57         { "reg"    174 }
58         { "macr"   175 }
59         { "deg"    176 }
60         { "plusmn" 177 }
61         { "sup2"   178 }
62         { "sup3"   179 }
63         { "acute"  180 }
64         { "micro"  181 }
65         { "para"   182 }
66         { "middot" 183 }
67         { "cedil"  184 }
68         { "sup1"   185 }
69         { "ordm"   186 }
70         { "raquo"  187 }
71         { "frac14" 188 }
72         { "frac12" 189 }
73         { "frac34" 190 }
74         { "iquest" 191 }
75         { "Agrave" 192 }
76         { "Aacute" 193 }
77         { "Acirc"  194 }
78         { "Atilde" 195 }
79         { "Auml"   196 }
80         { "Aring"  197 }
81         { "AElig"  198 }
82         { "Ccedil" 199 }
83         { "Egrave" 200 }
84         { "Eacute" 201 }
85         { "Ecirc"  202 }
86         { "Euml"   203 }
87         { "Igrave" 204 }
88         { "Iacute" 205 }
89         { "Icirc"  206 }
90         { "Iuml"   207 }
91         { "ETH"    208 }
92         { "Ntilde" 209 }
93         { "Ograve" 210 }
94         { "Oacute" 211 }
95         { "Ocirc"  212 }
96         { "Otilde" 213 }
97         { "Ouml"   214 }
98         { "times"  215 }
99         { "Oslash" 216 }
100         { "Ugrave" 217 }
101         { "Uacute" 218 }
102         { "Ucirc"  219 }
103         { "Uuml"   220 }
104         { "Yacute" 221 }
105         { "THORN"  222 }
106         { "szlig"  223 }
107         { "agrave" 224 }
108         { "aacute" 225 }
109         { "acirc"  226 }
110         { "atilde" 227 }
111         { "auml"   228 }
112         { "aring"  229 }
113         { "aelig"  230 }
114         { "ccedil" 231 }
115         { "egrave" 232 }
116         { "eacute" 233 }
117         { "ecirc"  234 }
118         { "euml"   235 }
119         { "igrave" 236 }
120         { "iacute" 237 }
121         { "icirc"  238 }
122         { "iuml"   239 }
123         { "eth"    240 }
124         { "ntilde" 241 }
125         { "ograve" 242 }
126         { "oacute" 243 }
127         { "ocirc"  244 }
128         { "otilde" 245 }
129         { "ouml"   246 }
130         { "divide" 247 }
131         { "oslash" 248 }
132         { "ugrave" 249 }
133         { "uacute" 250 }
134         { "ucirc"  251 }
135         { "uuml"   252 }
136         { "yacute" 253 }
137         { "thorn"  254 }
138         { "yuml"   255 }
139         { "fnof"     402 }
140         { "Alpha"    913 }
141         { "Beta"     914 }
142         { "Gamma"    915 }
143         { "Delta"    916 }
144         { "Epsilon"  917 }
145         { "Zeta"     918 }
146         { "Eta"      919 }
147         { "Theta"    920 }
148         { "Iota"     921 }
149         { "Kappa"    922 }
150         { "Lambda"   923 }
151         { "Mu"       924 }
152         { "Nu"       925 }
153         { "Xi"       926 }
154         { "Omicron"  927 }
155         { "Pi"       928 }
156         { "Rho"      929 }
157         { "Sigma"    931 }
158         { "Tau"      932 }
159         { "Upsilon"  933 }
160         { "Phi"      934 }
161         { "Chi"      935 }
162         { "Psi"      936 }
163         { "Omega"    937 }
164         { "alpha"    945 }
165         { "beta"     946 }
166         { "gamma"    947 }
167         { "delta"    948 }
168         { "epsilon"  949 }
169         { "zeta"     950 }
170         { "eta"      951 }
171         { "theta"    952 }
172         { "iota"     953 }
173         { "kappa"    954 }
174         { "lambda"   955 }
175         { "mu"       956 }
176         { "nu"       957 }
177         { "xi"       958 }
178         { "omicron"  959 }
179         { "pi"       960 }
180         { "rho"      961 }
181         { "sigmaf"   962 }
182         { "sigma"    963 }
183         { "tau"      964 }
184         { "upsilon"  965 }
185         { "phi"      966 }
186         { "chi"      967 }
187         { "psi"      968 }
188         { "omega"    969 }
189         { "thetasym" 977 }
190         { "upsih"    978 }
191         { "piv"      982 }
192         { "bull"     8226 }
193         { "hellip"   8230 }
194         { "prime"    8242 }
195         { "Prime"    8243 }
196         { "oline"    8254 }
197         { "frasl"    8260 }
198         { "weierp"   8472 }
199         { "image"    8465 }
200         { "real"     8476 }
201         { "trade"    8482 }
202         { "alefsym"  8501 }
203         { "larr"     8592 }
204         { "uarr"     8593 }
205         { "rarr"     8594 }
206         { "darr"     8595 }
207         { "harr"     8596 }
208         { "crarr"    8629 }
209         { "lArr"     8656 }
210         { "uArr"     8657 }
211         { "rArr"     8658 }
212         { "dArr"     8659 }
213         { "hArr"     8660 }
214         { "forall"   8704 }
215         { "part"     8706 }
216         { "exist"    8707 }
217         { "empty"    8709 }
218         { "nabla"    8711 }
219         { "isin"     8712 }
220         { "notin"    8713 }
221         { "ni"       8715 }
222         { "prod"     8719 }
223         { "sum"      8721 }
224         { "minus"    8722 }
225         { "lowast"   8727 }
226         { "radic"    8730 }
227         { "prop"     8733 }
228         { "infin"    8734 }
229         { "ang"      8736 }
230         { "and"      8743 }
231         { "or"       8744 }
232         { "cap"      8745 }
233         { "cup"      8746 }
234         { "int"      8747 }
235         { "there4"   8756 }
236         { "sim"      8764 }
237         { "cong"     8773 }
238         { "asymp"    8776 }
239         { "ne"       8800 }
240         { "equiv"    8801 }
241         { "le"       8804 }
242         { "ge"       8805 }
243         { "sub"      8834 }
244         { "sup"      8835 }
245         { "nsub"     8836 }
246         { "sube"     8838 }
247         { "supe"     8839 }
248         { "oplus"    8853 }
249         { "otimes"   8855 }
250         { "perp"     8869 }
251         { "sdot"     8901 }
252         { "lceil"    8968 }
253         { "rceil"    8969 }
254         { "lfloor"   8970 }
255         { "rfloor"   8971 }
256         { "lang"     9001 }
257         { "rang"     9002 }
258         { "loz"      9674 }
259         { "spades"   9824 }
260         { "clubs"    9827 }
261         { "hearts"   9829 }
262         { "diams"    9830 }
263         { "OElig"   338 }
264         { "oelig"   339 }
265         { "Scaron"  352 }
266         { "scaron"  353 }
267         { "Yuml"    376 }
268         { "circ"    710 }
269         { "tilde"   732 }
270         { "ensp"    8194 }
271         { "emsp"    8195 }
272         { "thinsp"  8201 }
273         { "zwnj"    8204 }
274         { "zwj"     8205 }
275         { "lrm"     8206 }
276         { "rlm"     8207 }
277         { "ndash"   8211 }
278         { "mdash"   8212 }
279         { "lsquo"   8216 }
280         { "rsquo"   8217 }
281         { "sbquo"   8218 }
282         { "ldquo"   8220 }
283         { "rdquo"   8221 }
284         { "bdquo"   8222 }
285         { "dagger"  8224 }
286         { "Dagger"  8225 }
287         { "permil"  8240 }
288         { "lsaquo"  8249 }
289         { "rsaquo"  8250 }
290         { "euro"   8364 }
291     } ;
292
293 SYMBOL: extra-entities
294 f extra-entities set-global
295
296 : with-entities ( entities quot -- )
297     [ swap extra-entities set call ] with-scope ; inline
298
299 : with-html-entities ( quot -- )
300     html-entities swap with-entities ; inline