Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /smlnj-lib/releases/release-110.63/HTML/html.sml
ViewVC logotype

Annotation of /smlnj-lib/releases/release-110.63/HTML/html.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2371 - (view) (download)

1 : monnier 2 (* html.sml
2 :     *
3 :     * COPYRIGHT (c) 1995 AT&T Bell Laboratories.
4 :     * COPYRIGHT (c) 1996 AT&T Research.
5 :     *
6 :     * This file defines the abstract syntax of HTML documents. The
7 :     * AST follows the HTML 3.2 Proposed Standard.
8 :     *)
9 :    
10 :     structure HTML : HTML =
11 :     struct
12 :    
13 : monnier 8 val htmlVersion = "3.2 Final"
14 : monnier 2
15 :     type pcdata = string
16 :     type cdata = string
17 :     type url = string
18 :     type pixels = cdata
19 :     type name = string
20 :     type id = string
21 :    
22 :     fun match sl s = let
23 :     val cmp = String.collate
24 :     (fn (c1, c2) => Char.compare(Char.toUpper c1, c2))
25 :     fun eq (ref s') = (cmp(s, s') = General.EQUAL)
26 :     in
27 :     List.find eq sl
28 :     end
29 :    
30 :     (* the different types of HTTP methods *)
31 :     structure HttpMethod =
32 :     struct
33 :     type method = string ref
34 :     val get = ref "GET"
35 :     val put = ref "PUT"
36 :     fun toString (ref s) = s
37 :     val fromString = match [get, put]
38 :     end
39 :    
40 :     (* the different types of INPUT elements *)
41 :     structure InputType =
42 :     struct
43 :     type ty = string ref
44 :     val text = ref "TEXT"
45 :     val password = ref "PASSWORD"
46 :     val checkbox = ref "CHECKBOX"
47 :     val radio = ref "RADIO"
48 :     val submit = ref "SUBMIT"
49 :     val reset = ref "RESET"
50 :     val file = ref "FILE"
51 :     val hidden = ref "HIDDEN"
52 :     val image = ref "IMAGE"
53 :     fun toString (ref s) = s
54 :     val fromString = match [
55 :     text, password, checkbox,
56 :     radio, submit, reset,
57 :     file, hidden, image
58 :     ]
59 :     end
60 :    
61 :     (* alignment attributes for IMG, APPLET and INPUT elements *)
62 :     structure IAlign =
63 :     struct
64 :     type align = string ref
65 :     val top = ref "TOP"
66 :     val middle = ref "MIDDLE"
67 :     val bottom = ref "BOTTOM"
68 :     val left = ref "LEFT"
69 :     val right = ref "RIGHT"
70 :     fun toString (ref s) = s
71 :     val fromString = match [top, middle, bottom, left, right]
72 :     end
73 :    
74 :     structure HAlign =
75 :     struct
76 :     type align = string ref
77 :     val left = ref "LEFT"
78 :     val center = ref "CENTER"
79 :     val right = ref "RIGHT"
80 :     fun toString (ref s) = s
81 :     val fromString = match [left, center, right]
82 :     end
83 :    
84 :     structure CellVAlign =
85 :     struct
86 :     type align = string ref
87 :     val top = ref "TOP"
88 :     val middle = ref "MIDDLE"
89 :     val bottom = ref "BOTTOM"
90 :     val baseline = ref "BASELINE"
91 :     fun toString (ref s) = s
92 :     val fromString = match [top, middle, bottom, baseline]
93 :     end
94 :    
95 :     structure CaptionAlign =
96 :     struct
97 :     type align = string ref
98 :     val top = ref "TOP"
99 :     val bottom = ref "BOTTOM"
100 :     val left = ref "LEFT"
101 :     val right = ref "RIGHT"
102 :     fun toString (ref s) = s
103 :     val fromString = match [top, bottom, left, right]
104 :     end
105 :    
106 :     structure ULStyle =
107 :     struct
108 :     type style = string ref
109 :     val disc = ref "DISC"
110 :     val square = ref "SQUARE"
111 :     val circle = ref "CIRCLE"
112 :     fun toString (ref s) = s
113 :     val fromString = match [disc, square, circle]
114 :     end
115 :    
116 :     structure Shape =
117 :     struct
118 :     type shape = string ref
119 :     val rect = ref "RECT"
120 :     val circle = ref "CIRCLE"
121 :     val poly = ref "POLY"
122 :     val default = ref "DEFAULT"
123 :     fun toString (ref s) = s
124 :     val fromString = match [rect, circle, poly, default]
125 :     end
126 :    
127 :     structure TextFlowCtl =
128 :     struct
129 :     type control = string ref
130 :     val left = ref "LEFT"
131 :     val right = ref "RIGHT"
132 :     val all = ref "ALL"
133 :     val none = ref "NONE"
134 :     fun toString (ref s) = s
135 :     val fromString = match [left, right, all, none]
136 :     end
137 :    
138 :     datatype html = HTML of {
139 :     version : cdata option,
140 :     head : head_content list,
141 : monnier 8 body : body
142 : monnier 2 }
143 :    
144 :     and head_content
145 :     = Head_TITLE of pcdata
146 :     | Head_ISINDEX of {prompt : cdata option}
147 :     | Head_BASE of {href : url}
148 :     | Head_META of {
149 :     httpEquiv : name option,
150 :     name : name option,
151 :     content : cdata
152 :     }
153 :     | Head_LINK of {
154 :     id : id option,
155 :     href : url option,
156 :     rel : cdata option,
157 :     rev : cdata option,
158 :     title : cdata option
159 :     }
160 :     (* SCRIPT/STYLE elements are placeholders for the next version of HTML *)
161 :     | Head_SCRIPT of pcdata
162 :     | Head_STYLE of pcdata
163 :    
164 : monnier 8 and body = BODY of {
165 :     background : url option,
166 :     bgcolor : cdata option,
167 :     text : cdata option,
168 :     link : cdata option,
169 :     vlink : cdata option,
170 :     alink : cdata option,
171 :     content : block
172 :     }
173 :    
174 : monnier 2 and block
175 :     = BlockList of block list
176 :     | TextBlock of text
177 :     | Hn of {
178 :     n : int,
179 :     align : HAlign.align option,
180 :     content : text
181 :     }
182 :     | ADDRESS of block
183 :     | P of {
184 :     align : HAlign.align option,
185 :     content : text
186 :     }
187 :     | UL of {
188 :     ty : ULStyle.style option,
189 :     compact : bool,
190 :     content : list_item list
191 :     }
192 :     | OL of {
193 :     ty : cdata option,
194 :     start : int option,
195 :     compact : bool,
196 :     content : list_item list
197 :     }
198 :     | DIR of {
199 :     compact : bool,
200 :     content : list_item list
201 :     }
202 :     | MENU of {
203 :     compact : bool,
204 :     content : list_item list
205 :     }
206 :     | DL of {
207 :     compact : bool,
208 :     content : {dt : text list, dd : block} list
209 :     }
210 :     | PRE of {
211 :     width : int option,
212 :     content : text
213 :     }
214 :     | DIV of {
215 :     align : HAlign.align,
216 :     content : block
217 :     }
218 :     | CENTER of block
219 :     | BLOCKQUOTE of block
220 :     | FORM of {
221 :     action : url option,
222 :     method : HttpMethod.method,
223 :     enctype : cdata option,
224 :     content : block (* -(FORM) *)
225 :     }
226 :     | ISINDEX of {prompt : cdata option}
227 :     | HR of {
228 :     align : HAlign.align option,
229 :     noshade : bool,
230 :     size : pixels option,
231 :     width : cdata option
232 :     }
233 :     | TABLE of {
234 :     align : HAlign.align option,
235 :     width : cdata option,
236 :     border : pixels option,
237 :     cellspacing : pixels option,
238 :     cellpadding : pixels option,
239 :     caption : caption option,
240 :     content : tr list
241 :     }
242 :    
243 :     and list_item = LI of {
244 :     ty : cdata option,
245 :     value : int option,
246 :     content : block
247 :     }
248 :    
249 :     (** table content **)
250 :     and caption = CAPTION of {
251 :     align : CaptionAlign.align option,
252 :     content : text
253 :     }
254 :     and tr = TR of {
255 :     align : HAlign.align option,
256 :     valign : CellVAlign.align option,
257 :     content : table_cell list
258 :     }
259 :     and table_cell
260 :     = TH of {
261 :     nowrap : bool,
262 :     rowspan : int option,
263 :     colspan : int option,
264 :     align : HAlign.align option,
265 :     valign : CellVAlign.align option,
266 :     width : pixels option,
267 :     height : pixels option,
268 :     content : block
269 :     }
270 :     | TD of {
271 :     nowrap : bool,
272 :     rowspan : int option,
273 :     colspan : int option,
274 :     align : HAlign.align option,
275 :     valign : CellVAlign.align option,
276 :     width : pixels option,
277 :     height : pixels option,
278 :     content : block
279 :     }
280 :    
281 :     (** Text **)
282 :     and text
283 :     = TextList of text list
284 :     | PCDATA of pcdata
285 :     | TT of text
286 :     | I of text
287 :     | B of text
288 :     | U of text
289 :     | STRIKE of text
290 :     | BIG of text
291 :     | SMALL of text
292 :     | SUB of text
293 :     | SUP of text
294 :     | EM of text
295 :     | STRONG of text
296 :     | DFN of text
297 :     | CODE of text
298 :     | SAMP of text
299 :     | KBD of text
300 :     | VAR of text
301 :     | CITE of text
302 :     | A of {
303 :     name : cdata option,
304 :     href : url option,
305 :     rel : cdata option,
306 :     rev : cdata option,
307 :     title : cdata option,
308 :     content : text (* -(A) *)
309 :     }
310 :     | IMG of {
311 :     src : url,
312 :     alt : cdata option,
313 :     align : IAlign.align option,
314 :     height : pixels option,
315 :     width : pixels option,
316 :     border : pixels option,
317 :     hspace : pixels option,
318 :     vspace : pixels option,
319 :     usemap : url option,
320 :     ismap : bool
321 :     }
322 :     | APPLET of {
323 :     codebase : url option,
324 :     code : cdata,
325 :     name : cdata option,
326 :     alt : cdata option,
327 :     align : IAlign.align option,
328 :     height : pixels option,
329 :     width : pixels option,
330 :     hspace : pixels option,
331 :     vspace : pixels option,
332 :     content : text
333 :     }
334 :     | PARAM of { (* applet parameter *)
335 :     name : name,
336 :     value : cdata option
337 :     }
338 :     | FONT of {
339 :     size : cdata option,
340 :     color : cdata option,
341 :     content : text
342 :     }
343 :     | BASEFONT of {
344 :     size : cdata option,
345 :     content : text
346 :     }
347 :     | BR of {
348 :     clear : TextFlowCtl.control option
349 :     }
350 :     | MAP of {
351 :     name : cdata option,
352 :     content : area list
353 :     }
354 :     | INPUT of {
355 :     ty : InputType.ty option,
356 :     name : cdata option,
357 :     value : cdata option,
358 :     checked : bool,
359 :     size : cdata option,
360 :     maxlength : int option,
361 :     src : url option,
362 :     align : IAlign.align option
363 :     }
364 :     | SELECT of {
365 :     name : cdata,
366 :     size : int option,
367 :     content : select_option list
368 :     }
369 :     | TEXTAREA of {
370 :     name : cdata,
371 :     rows : int,
372 :     cols : int,
373 :     content : pcdata
374 :     }
375 :     (* SCRIPT elements are placeholders for the next version of HTML *)
376 :     | SCRIPT of pcdata
377 :    
378 :     (* map areas *)
379 :     and area = AREA of {
380 :     shape : Shape.shape option,
381 :     coords : cdata option,
382 :     href : url option,
383 :     nohref : bool,
384 :     alt : cdata
385 :     }
386 :    
387 :     (* SELECT options *)
388 :     and select_option = OPTION of {
389 :     selected : bool,
390 :     value : cdata option,
391 :     content : pcdata
392 :     }
393 :    
394 :     end (* signature HTML *)
395 :    

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0