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/trunk/HTML4/html4.g
ViewVC logotype

Annotation of /smlnj-lib/trunk/HTML4/html4.g

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3531 - (view) (download)

1 : jriehl 3528 (* ______________________________________________________________________
2 :     html4.g
3 :     ______________________________________________________________________ *)
4 :    
5 :     %name HTML4;
6 :    
7 : jriehl 3529 %defs(
8 :    
9 : jriehl 3530 open HTML4Utils
10 : jriehl 3529
11 :     fun optToList NONE = []
12 :     | optToList (SOME thing) = [thing]
13 :    
14 :     fun optListToList NONE = []
15 :     | optListToList (SOME thing) = thing
16 :    
17 :     );
18 :    
19 : jriehl 3531 %tokens : OPENTAG of Atom.atom * HTML4Utils.tag_payload
20 : jriehl 3528 | CLOSETAG of Atom.atom
21 :     | COMMENT of string
22 :     | PCDATA of string
23 :     | DOCTYPE of string
24 :     | CHAR_REF of Atom.atom
25 :     | ENTITY_REF of Atom.atom
26 :     | XML_PROCESSING of string
27 :     (* HTML 4 element tokens. *)
28 : jriehl 3531 | STARTA of HTML4Utils.tag_payload
29 : jriehl 3528 | ENDA
30 : jriehl 3531 | STARTABBR of HTML4Utils.tag_payload
31 : jriehl 3528 | ENDABBR
32 : jriehl 3531 | STARTACRONYM of HTML4Utils.tag_payload
33 : jriehl 3528 | ENDACRONYM
34 : jriehl 3531 | STARTADDRESS of HTML4Utils.tag_payload
35 : jriehl 3528 | ENDADDRESS
36 : jriehl 3531 | STARTAPPLET of HTML4Utils.tag_payload
37 : jriehl 3528 | ENDAPPLET
38 : jriehl 3531 | STARTAREA of HTML4Utils.tag_payload
39 : jriehl 3528 (* No END tag for AREA element. *)
40 : jriehl 3531 | STARTB of HTML4Utils.tag_payload
41 : jriehl 3528 | ENDB
42 : jriehl 3531 | STARTBASE of HTML4Utils.tag_payload
43 : jriehl 3528 (* No END tag for BASE element. *)
44 : jriehl 3531 | STARTBASEFONT of HTML4Utils.tag_payload
45 : jriehl 3528 (* No END tag for BASEFONT element. *)
46 : jriehl 3531 | STARTBDO of HTML4Utils.tag_payload
47 : jriehl 3528 | ENDBDO
48 : jriehl 3531 | STARTBIG of HTML4Utils.tag_payload
49 : jriehl 3528 | ENDBIG
50 : jriehl 3531 | STARTBLOCKQUOTE of HTML4Utils.tag_payload
51 : jriehl 3528 | ENDBLOCKQUOTE
52 : jriehl 3531 | STARTBODY of HTML4Utils.tag_payload
53 : jriehl 3528 | ENDBODY
54 : jriehl 3531 | STARTBR of HTML4Utils.tag_payload
55 : jriehl 3528 (* No END tag for BR element. *)
56 : jriehl 3531 | STARTBUTTON of HTML4Utils.tag_payload
57 : jriehl 3528 | ENDBUTTON
58 : jriehl 3531 | STARTCAPTION of HTML4Utils.tag_payload
59 : jriehl 3528 | ENDCAPTION
60 : jriehl 3531 | STARTCENTER of HTML4Utils.tag_payload
61 : jriehl 3528 | ENDCENTER
62 : jriehl 3531 | STARTCITE of HTML4Utils.tag_payload
63 : jriehl 3528 | ENDCITE
64 : jriehl 3531 | STARTCODE of HTML4Utils.tag_payload
65 : jriehl 3528 | ENDCODE
66 : jriehl 3531 | STARTCOL of HTML4Utils.tag_payload
67 : jriehl 3528 (* No END tag for COL element. *)
68 : jriehl 3531 | STARTCOLGROUP of HTML4Utils.tag_payload
69 : jriehl 3528 | ENDCOLGROUP
70 : jriehl 3531 | STARTDD of HTML4Utils.tag_payload
71 : jriehl 3528 | ENDDD
72 : jriehl 3531 | STARTDEL of HTML4Utils.tag_payload
73 : jriehl 3528 | ENDDEL
74 : jriehl 3531 | STARTDFN of HTML4Utils.tag_payload
75 : jriehl 3528 | ENDDFN
76 : jriehl 3531 | STARTDIR of HTML4Utils.tag_payload
77 : jriehl 3528 | ENDDIR
78 : jriehl 3531 | STARTDIV of HTML4Utils.tag_payload
79 : jriehl 3528 | ENDDIV
80 : jriehl 3531 | STARTDL of HTML4Utils.tag_payload
81 : jriehl 3528 | ENDDL
82 : jriehl 3531 | STARTDT of HTML4Utils.tag_payload
83 : jriehl 3528 | ENDDT
84 : jriehl 3531 | STARTEM of HTML4Utils.tag_payload
85 : jriehl 3528 | ENDEM
86 : jriehl 3531 | STARTFIELDSET of HTML4Utils.tag_payload
87 : jriehl 3528 | ENDFIELDSET
88 : jriehl 3531 | STARTFONT of HTML4Utils.tag_payload
89 : jriehl 3528 | ENDFONT
90 : jriehl 3531 | STARTFORM of HTML4Utils.tag_payload
91 : jriehl 3528 | ENDFORM
92 : jriehl 3531 | STARTFRAME of HTML4Utils.tag_payload
93 : jriehl 3528 (* No END tag for FRAME element. *)
94 : jriehl 3531 | STARTFRAMESET of HTML4Utils.tag_payload
95 : jriehl 3528 | ENDFRAMESET
96 : jriehl 3531 | STARTH1 of HTML4Utils.tag_payload
97 : jriehl 3528 | ENDH1
98 : jriehl 3531 | STARTH2 of HTML4Utils.tag_payload
99 : jriehl 3528 | ENDH2
100 : jriehl 3531 | STARTH3 of HTML4Utils.tag_payload
101 : jriehl 3528 | ENDH3
102 : jriehl 3531 | STARTH4 of HTML4Utils.tag_payload
103 : jriehl 3528 | ENDH4
104 : jriehl 3531 | STARTH5 of HTML4Utils.tag_payload
105 : jriehl 3528 | ENDH5
106 : jriehl 3531 | STARTH6 of HTML4Utils.tag_payload
107 : jriehl 3528 | ENDH6
108 : jriehl 3531 | STARTHEAD of HTML4Utils.tag_payload
109 : jriehl 3528 | ENDHEAD
110 : jriehl 3531 | STARTHR of HTML4Utils.tag_payload
111 : jriehl 3528 (* No END tag for HR element. *)
112 : jriehl 3531 | STARTHTML of HTML4Utils.tag_payload
113 : jriehl 3528 | ENDHTML
114 : jriehl 3531 | STARTI of HTML4Utils.tag_payload
115 : jriehl 3528 | ENDI
116 : jriehl 3531 | STARTIFRAME of HTML4Utils.tag_payload
117 : jriehl 3528 | ENDIFRAME
118 : jriehl 3531 | STARTIMG of HTML4Utils.tag_payload
119 : jriehl 3528 (* No END tag for IMG element. *)
120 : jriehl 3531 | STARTINPUT of HTML4Utils.tag_payload
121 : jriehl 3528 (* No END tag for INPUT element. *)
122 : jriehl 3531 | STARTINS of HTML4Utils.tag_payload
123 : jriehl 3528 | ENDINS
124 : jriehl 3531 | STARTISINDEX of HTML4Utils.tag_payload
125 : jriehl 3528 (* No END tag for ISINDEX element. *)
126 : jriehl 3531 | STARTKBD of HTML4Utils.tag_payload
127 : jriehl 3528 | ENDKBD
128 : jriehl 3531 | STARTLABEL of HTML4Utils.tag_payload
129 : jriehl 3528 | ENDLABEL
130 : jriehl 3531 | STARTLEGEND of HTML4Utils.tag_payload
131 : jriehl 3528 | ENDLEGEND
132 : jriehl 3531 | STARTLI of HTML4Utils.tag_payload
133 : jriehl 3528 | ENDLI
134 : jriehl 3531 | STARTLINK of HTML4Utils.tag_payload
135 : jriehl 3528 (* No END tag for LINK element. *)
136 : jriehl 3531 | STARTMAP of HTML4Utils.tag_payload
137 : jriehl 3528 | ENDMAP
138 : jriehl 3531 | STARTMENU of HTML4Utils.tag_payload
139 : jriehl 3528 | ENDMENU
140 : jriehl 3531 | STARTMETA of HTML4Utils.tag_payload
141 : jriehl 3528 (* No END tag for META element. *)
142 : jriehl 3531 | STARTNOFRAMES of HTML4Utils.tag_payload
143 : jriehl 3528 | ENDNOFRAMES
144 : jriehl 3531 | STARTNOSCRIPT of HTML4Utils.tag_payload
145 : jriehl 3528 | ENDNOSCRIPT
146 : jriehl 3531 | STARTOBJECT of HTML4Utils.tag_payload
147 : jriehl 3528 | ENDOBJECT
148 : jriehl 3531 | STARTOL of HTML4Utils.tag_payload
149 : jriehl 3528 | ENDOL
150 : jriehl 3531 | STARTOPTGROUP of HTML4Utils.tag_payload
151 : jriehl 3528 | ENDOPTGROUP
152 : jriehl 3531 | STARTOPTION of HTML4Utils.tag_payload
153 : jriehl 3528 | ENDOPTION
154 : jriehl 3531 | STARTP of HTML4Utils.tag_payload
155 : jriehl 3528 | ENDP
156 : jriehl 3531 | STARTPARAM of HTML4Utils.tag_payload
157 : jriehl 3528 (* No END tag for PARAM element. *)
158 : jriehl 3531 | STARTPRE of HTML4Utils.tag_payload
159 : jriehl 3528 | ENDPRE
160 : jriehl 3531 | STARTQ of HTML4Utils.tag_payload
161 : jriehl 3528 | ENDQ
162 : jriehl 3531 | STARTS of HTML4Utils.tag_payload
163 : jriehl 3528 | ENDS
164 : jriehl 3531 | STARTSAMP of HTML4Utils.tag_payload
165 : jriehl 3528 | ENDSAMP
166 : jriehl 3531 | STARTSCRIPT of HTML4Utils.tag_payload
167 : jriehl 3528 | ENDSCRIPT
168 : jriehl 3531 | STARTSELECT of HTML4Utils.tag_payload
169 : jriehl 3528 | ENDSELECT
170 : jriehl 3531 | STARTSMALL of HTML4Utils.tag_payload
171 : jriehl 3528 | ENDSMALL
172 : jriehl 3531 | STARTSPAN of HTML4Utils.tag_payload
173 : jriehl 3528 | ENDSPAN
174 : jriehl 3531 | STARTSTRIKE of HTML4Utils.tag_payload
175 : jriehl 3528 | ENDSTRIKE
176 : jriehl 3531 | STARTSTRONG of HTML4Utils.tag_payload
177 : jriehl 3528 | ENDSTRONG
178 : jriehl 3531 | STARTSTYLE of HTML4Utils.tag_payload
179 : jriehl 3528 | ENDSTYLE
180 : jriehl 3531 | STARTSUB of HTML4Utils.tag_payload
181 : jriehl 3528 | ENDSUB
182 : jriehl 3531 | STARTSUP of HTML4Utils.tag_payload
183 : jriehl 3528 | ENDSUP
184 : jriehl 3531 | STARTTABLE of HTML4Utils.tag_payload
185 : jriehl 3528 | ENDTABLE
186 : jriehl 3531 | STARTTBODY of HTML4Utils.tag_payload
187 : jriehl 3528 | ENDTBODY
188 : jriehl 3531 | STARTTD of HTML4Utils.tag_payload
189 : jriehl 3528 | ENDTD
190 : jriehl 3531 | STARTTEXTAREA of HTML4Utils.tag_payload
191 : jriehl 3528 | ENDTEXTAREA
192 : jriehl 3531 | STARTTFOOT of HTML4Utils.tag_payload
193 : jriehl 3528 | ENDTFOOT
194 : jriehl 3531 | STARTTH of HTML4Utils.tag_payload
195 : jriehl 3528 | ENDTH
196 : jriehl 3531 | STARTTHEAD of HTML4Utils.tag_payload
197 : jriehl 3528 | ENDTHEAD
198 : jriehl 3531 | STARTTITLE of HTML4Utils.tag_payload
199 : jriehl 3528 | ENDTITLE
200 : jriehl 3531 | STARTTR of HTML4Utils.tag_payload
201 : jriehl 3528 | ENDTR
202 : jriehl 3531 | STARTTT of HTML4Utils.tag_payload
203 : jriehl 3528 | ENDTT
204 : jriehl 3531 | STARTU of HTML4Utils.tag_payload
205 : jriehl 3528 | ENDU
206 : jriehl 3531 | STARTUL of HTML4Utils.tag_payload
207 : jriehl 3528 | ENDUL
208 : jriehl 3531 | STARTVAR of HTML4Utils.tag_payload
209 : jriehl 3528 | ENDVAR
210 :     ;
211 :    
212 :     %start document;
213 :    
214 :     (*
215 :     %entry document, body, flow, block, inline;
216 :     *)
217 :    
218 : jriehl 3529 document : cdata_opt
219 : jriehl 3530 (DOCTYPE cdata_opt => ((Lf (Tok.DOCTYPE DOCTYPE)) :: cdata_opt))?
220 :     (STARTHTML cdata_opt
221 :     => ((Lf (Tok.STARTHTML STARTHTML)) :: cdata_opt))?
222 : jriehl 3529 head
223 : jriehl 3528 (body | frameset)
224 : jriehl 3530 (ENDHTML cdata_opt => ((Lf (Tok.ENDHTML)) :: cdata_opt))?
225 : jriehl 3529 => (Nd (cdata_opt @ (optListToList SR1) @ (optListToList SR2) @
226 :     (head :: SR3 :: (optListToList SR4))))
227 : jriehl 3528 ;
228 :    
229 :     (* ______________________________________________________________________
230 :     HEAD and related elements
231 :     ______________________________________________________________________ *)
232 :    
233 : jriehl 3530 head : (STARTHEAD cdata_opt => ((Lf (Tok.STARTHEAD STARTHEAD)) :: cdata_opt))?
234 : jriehl 3529 (head_content cdata_opt => (head_content :: cdata_opt))*
235 : jriehl 3530 (ENDHEAD cdata_opt => ((Lf (Tok.ENDHEAD)) :: cdata_opt))?
236 : jriehl 3529 => (Nd ((optListToList SR1) @ (foldr op@ [] SR2) @ (optListToList SR3)))
237 : jriehl 3528 ;
238 :    
239 :     head_content : title | base | script | style | meta | link | object
240 :     ;
241 :    
242 :     title : STARTTITLE cdata_opt ENDTITLE
243 : jriehl 3530 => (Nd ((Lf (Tok.STARTTITLE STARTTITLE)) ::
244 :     (cdata_opt @ [Lf (Tok.ENDTITLE)])))
245 : jriehl 3528 ;
246 :    
247 :     base : STARTBASE
248 : jriehl 3530 => (Lf (Tok.STARTBASE STARTBASE))
249 : jriehl 3528 ;
250 :    
251 :     script : STARTSCRIPT cdata_opt ENDSCRIPT
252 : jriehl 3530 => (Nd ((Lf (Tok.STARTSCRIPT STARTSCRIPT)) ::
253 :     (cdata_opt @ [Lf (Tok.ENDSCRIPT)])))
254 : jriehl 3528 ;
255 :    
256 :     style : STARTSTYLE cdata_opt ENDSTYLE
257 : jriehl 3530 => (Nd ((Lf (Tok.STARTSTYLE STARTSTYLE)) ::
258 :     (cdata_opt @ [Lf (Tok.ENDSTYLE)])))
259 : jriehl 3528 ;
260 :    
261 :     meta : STARTMETA
262 : jriehl 3530 => (Lf (Tok.STARTMETA STARTMETA))
263 : jriehl 3528 ;
264 :    
265 :     link : STARTLINK
266 : jriehl 3530 => (Lf (Tok.STARTLINK STARTLINK))
267 : jriehl 3528 ;
268 :    
269 :     object : STARTOBJECT (param | flow)* ENDOBJECT
270 : jriehl 3530 => (Nd ((Lf (Tok.STARTOBJECT STARTOBJECT)) ::
271 :     (SR @ [Lf (Tok.ENDOBJECT)])))
272 : jriehl 3528 ;
273 :    
274 :     param : STARTPARAM
275 : jriehl 3530 => (Lf (Tok.STARTPARAM STARTPARAM))
276 : jriehl 3528 ;
277 :    
278 :     (* ______________________________________________________________________
279 :     BODY and related elements
280 :     ______________________________________________________________________ *)
281 :    
282 :     body : STARTBODY body_rest
283 : jriehl 3530 => (Nd ((Lf (Tok.STARTBODY STARTBODY)) :: body_rest))
284 : jriehl 3528 | (block | ins | del) body_rest
285 : jriehl 3529 => (Nd (SR :: body_rest))
286 : jriehl 3528 ;
287 :    
288 : jriehl 3529 body_rest : (block | script | ins | del | cdata)*
289 : jriehl 3530 (ENDBODY cdata_opt => ((Lf (Tok.ENDBODY)) :: cdata_opt))?
290 :     => (SR1 @ (optListToList SR2))
291 : jriehl 3528 ;
292 :    
293 :     flow : block
294 :     | inline
295 :     ;
296 :    
297 :     block : p
298 :     | heading
299 :     | list
300 :     | preformatted
301 :     | dl
302 :     | div
303 :     | noscript
304 :     | blockquote
305 :     | form
306 :     | hr
307 :     | table
308 :     | fieldset
309 :     | address
310 :     | block_loose
311 :     ;
312 :    
313 :     block_loose : center
314 :     | isindex
315 :     ;
316 :    
317 :     heading : h1
318 :     | h2
319 :     | h3
320 :     | h4
321 :     | h5
322 :     | h6
323 :     ;
324 :    
325 :     list : ul
326 :     | ol
327 :     | list_loose
328 :     ;
329 :    
330 :     list_loose : dir
331 :     | menu
332 :     ;
333 :    
334 :     preformatted : pre
335 :     ;
336 :    
337 :     inline : fontstyle
338 :     | phrase
339 :     | special
340 :     | formctrl
341 :     | cdata
342 :     ;
343 :    
344 :     fontstyle : tt
345 :     | i
346 :     | b
347 :     | big
348 :     | small
349 :     | fontstyle_loose
350 :     ;
351 :    
352 :     fontstyle_loose : u
353 :     | s
354 :     | strike
355 :     ;
356 :    
357 :     phrase : em
358 :     | strong
359 :     | dfn
360 :     | code
361 :     | samp
362 :     | kbd
363 :     | var
364 :     | cite
365 :     | abbr
366 :     | acronym
367 :     ;
368 :    
369 :     special : a
370 :     | img
371 :     | object
372 :     | br
373 :     | script
374 :     | map
375 :     | q
376 :     | sub
377 :     | sup
378 :     | span
379 :     | bdo
380 :     | special_loose
381 :     ;
382 :    
383 :     special_loose : applet
384 :     | basefont
385 :     | font
386 :     | iframe
387 :     ;
388 :    
389 :     formctrl : input
390 :     | select
391 :     | textarea
392 :     | label
393 :     | button
394 :     ;
395 :    
396 :     (* Actual elements *)
397 :    
398 : jriehl 3529 a : STARTA inline* ENDA
399 : jriehl 3530 => (Nd ((Lf (Tok.STARTA STARTA)) :: (inline @ [Lf (Tok.ENDA)])))
400 : jriehl 3529 ;
401 : jriehl 3528
402 : jriehl 3529 abbr : STARTABBR inline* ENDABBR
403 : jriehl 3530 => (Nd ((Lf (Tok.STARTABBR STARTABBR)) ::
404 :     (inline @ [Lf (Tok.ENDABBR)])))
405 : jriehl 3529 ;
406 : jriehl 3528
407 : jriehl 3529 acronym : STARTACRONYM inline* ENDACRONYM
408 : jriehl 3530 => (Nd ((Lf (Tok.STARTACRONYM STARTACRONYM)) ::
409 :     (inline @ [Lf (Tok.ENDACRONYM)])))
410 : jriehl 3529 ;
411 : jriehl 3528
412 : jriehl 3529 address : STARTADDRESS inline* ENDADDRESS
413 : jriehl 3530 => (Nd ((Lf (Tok.STARTADDRESS STARTADDRESS)) ::
414 :     (inline @ [Lf (Tok.ENDADDRESS)])))
415 : jriehl 3529 ;
416 : jriehl 3528
417 : jriehl 3529 applet : STARTAPPLET (param | flow)* ENDAPPLET
418 : jriehl 3530 => (Nd ((Lf (Tok.STARTAPPLET STARTAPPLET)) ::
419 :     (SR @ [Lf (Tok.ENDAPPLET)])))
420 : jriehl 3529 ;
421 : jriehl 3528
422 : jriehl 3529 area : STARTAREA
423 : jriehl 3530 => (Lf (Tok.STARTAREA STARTAREA))
424 : jriehl 3529 ;
425 : jriehl 3528
426 : jriehl 3529 b : STARTB inline* ENDB
427 : jriehl 3530 => (Nd ((Lf (Tok.STARTB STARTB)) :: (inline @ [Lf (Tok.ENDB)])))
428 : jriehl 3529 ;
429 : jriehl 3528
430 : jriehl 3529 basefont : STARTBASEFONT
431 : jriehl 3530 => (Lf (Tok.STARTBASEFONT STARTBASEFONT))
432 : jriehl 3529 ;
433 : jriehl 3528
434 : jriehl 3529 bdo : STARTBDO inline* ENDBDO
435 : jriehl 3530 => (Nd ((Lf (Tok.STARTBDO STARTBDO)) ::
436 :     (inline @ [Lf (Tok.ENDBDO)])))
437 : jriehl 3529 ;
438 : jriehl 3528
439 : jriehl 3529 big : STARTBIG inline* ENDBIG
440 : jriehl 3530 => (Nd ((Lf (Tok.STARTBIG STARTBIG)) ::
441 :     (inline @ [Lf (Tok.ENDBIG)])))
442 : jriehl 3529 ;
443 : jriehl 3528
444 : jriehl 3529 blockquote : STARTBLOCKQUOTE (block | script | cdata)+ ENDBLOCKQUOTE
445 : jriehl 3530 => (Nd ((Lf (Tok.STARTBLOCKQUOTE STARTBLOCKQUOTE)) ::
446 :     (SR @ [Lf (Tok.ENDBLOCKQUOTE)])))
447 : jriehl 3529 ;
448 : jriehl 3528
449 : jriehl 3529 br : STARTBR
450 : jriehl 3530 => (Lf (Tok.STARTBR STARTBR))
451 : jriehl 3529 ;
452 : jriehl 3528
453 : jriehl 3529 button : STARTBUTTON flow* ENDBUTTON
454 : jriehl 3530 => (Nd ((Lf (Tok.STARTBUTTON STARTBUTTON)) ::
455 :     (flow @ [Lf (Tok.ENDBUTTON)])))
456 : jriehl 3529 ;
457 : jriehl 3528
458 : jriehl 3529 caption : STARTCAPTION inline* ENDCAPTION
459 : jriehl 3530 => (Nd ((Lf (Tok.STARTCAPTION STARTCAPTION)) ::
460 :     (inline @ [Lf (Tok.ENDCAPTION)])))
461 : jriehl 3529 ;
462 : jriehl 3528
463 : jriehl 3529 center : STARTCENTER flow* ENDCENTER
464 : jriehl 3530 => (Nd ((Lf (Tok.STARTCENTER STARTCENTER)) ::
465 :     (flow @ [Lf (Tok.ENDCENTER)])))
466 : jriehl 3529 ;
467 : jriehl 3528
468 : jriehl 3529 cite : STARTCITE inline* ENDCITE
469 : jriehl 3530 => (Nd ((Lf (Tok.STARTCITE STARTCITE)) ::
470 :     (inline @ [Lf (Tok.ENDCITE)])))
471 : jriehl 3529 ;
472 : jriehl 3528
473 : jriehl 3529 code : STARTCODE inline* ENDCODE
474 : jriehl 3530 => (Nd ((Lf (Tok.STARTCODE STARTCODE)) ::
475 :     (inline @ [Lf (Tok.ENDCODE)])))
476 : jriehl 3529 ;
477 : jriehl 3528
478 : jriehl 3529 col : STARTCOL
479 : jriehl 3530 => (Lf (Tok.STARTCOL STARTCOL))
480 : jriehl 3529 ;
481 : jriehl 3528
482 : jriehl 3529 colgroup : STARTCOLGROUP cdata_opt
483 : jriehl 3530 (col cdata_opt => (col :: cdata_opt))*
484 :     (ENDCOLGROUP => (Lf (Tok.ENDCOLGROUP)))?
485 :     => (Nd ((Lf (Tok.STARTCOLGROUP STARTCOLGROUP)) ::
486 :     (cdata_opt @ (foldr op@ [] SR1) @ (optToList SR2))))
487 : jriehl 3529 ;
488 : jriehl 3528
489 : jriehl 3530 dd : STARTDD flow* (ENDDD => (Lf (Tok.ENDDD)))?
490 :     => (Nd ((Lf (Tok.STARTDD STARTDD)) :: (flow @ (optToList SR))))
491 : jriehl 3529 ;
492 : jriehl 3528
493 : jriehl 3529 del : STARTDEL flow* ENDDEL
494 : jriehl 3530 => (Nd ((Lf (Tok.STARTDEL STARTDEL)) ::
495 :     (flow @ [Lf (Tok.ENDDEL)])))
496 : jriehl 3529 ;
497 : jriehl 3528
498 : jriehl 3529 dfn : STARTDFN inline* ENDDFN
499 : jriehl 3530 => (Nd ((Lf (Tok.STARTDFN STARTDFN)) ::
500 :     (inline @ [Lf (Tok.ENDDFN)])))
501 : jriehl 3529 ;
502 : jriehl 3528
503 : jriehl 3529 dir : STARTDIR cdata_opt li+ ENDDIR
504 : jriehl 3530 => (Nd ((Lf (Tok.STARTDIR STARTDIR)) ::
505 :     (cdata_opt @ li @ [Lf (Tok.ENDDIR)])))
506 : jriehl 3529 ;
507 : jriehl 3528
508 : jriehl 3529 div : STARTDIV flow* ENDDIV
509 : jriehl 3530 => (Nd ((Lf (Tok.STARTDIV STARTDIV)) ::
510 :     (flow @ [Lf (Tok.ENDDIV)])))
511 : jriehl 3529 ;
512 : jriehl 3528
513 : jriehl 3529 dl : STARTDL cdata_opt (dt | dd)+ ENDDL
514 : jriehl 3530 => (Nd ((Lf (Tok.STARTDL STARTDL)) ::
515 :     (cdata_opt @ SR @ [Lf (Tok.ENDDL)])))
516 : jriehl 3529 ;
517 : jriehl 3528
518 : jriehl 3530 dt : STARTDT inline* (ENDDT => (Lf (Tok.ENDDT)))?
519 :     => (Nd ((Lf (Tok.STARTDT STARTDT)) :: (inline @ (optToList SR))))
520 : jriehl 3529 ;
521 : jriehl 3528
522 : jriehl 3529 em : STARTEM inline* ENDEM
523 : jriehl 3530 => (Nd ((Lf (Tok.STARTEM STARTEM)) :: (inline @ [Lf (Tok.ENDEM)])))
524 : jriehl 3529 ;
525 : jriehl 3528
526 : jriehl 3529 fieldset : STARTFIELDSET cdata_opt legend flow* ENDFIELDSET
527 : jriehl 3530 => (Nd ((Lf (Tok.STARTFIELDSET STARTFIELDSET)) ::
528 :     (cdata_opt @ [legend] @ flow @
529 :     [Lf (Tok.ENDFIELDSET)])))
530 : jriehl 3529 ;
531 : jriehl 3528
532 : jriehl 3529 font : STARTFONT inline* ENDFONT
533 : jriehl 3530 => (Nd ((Lf (Tok.STARTFONT STARTFONT)) ::
534 :     (inline @ [Lf (Tok.ENDFONT)])))
535 : jriehl 3529 ;
536 : jriehl 3528
537 : jriehl 3529 form : STARTFORM (cdata | block | script)+ ENDFORM
538 : jriehl 3530 => (Nd ((Lf (Tok.STARTFORM STARTFORM)) ::
539 :     (SR @ [Lf (Tok.ENDFORM)])))
540 : jriehl 3529 ;
541 : jriehl 3528
542 : jriehl 3529 frame : STARTFRAME
543 : jriehl 3530 => (Lf (Tok.STARTFRAME STARTFRAME))
544 : jriehl 3529 ;
545 : jriehl 3528
546 : jriehl 3529 frameset : STARTFRAMESET (frameset | frame | noframes | cdata)+ ENDFRAMESET
547 : jriehl 3530 => (Nd ((Lf (Tok.STARTFRAMESET STARTFRAMESET)) ::
548 :     (SR @ [Lf (Tok.ENDFRAMESET)])))
549 : jriehl 3529 ;
550 : jriehl 3528
551 : jriehl 3529 h1 : STARTH1 inline* ENDH1
552 : jriehl 3530 => (Nd ((Lf (Tok.STARTH1 STARTH1)) :: (inline @ [Lf (Tok.ENDH1)])))
553 : jriehl 3529 ;
554 : jriehl 3528
555 : jriehl 3529 h2 : STARTH2 inline* ENDH2
556 : jriehl 3530 => (Nd ((Lf (Tok.STARTH2 STARTH2)) :: (inline @ [Lf (Tok.ENDH2)])))
557 : jriehl 3529 ;
558 : jriehl 3528
559 : jriehl 3529 h3 : STARTH3 inline* ENDH3
560 : jriehl 3530 => (Nd ((Lf (Tok.STARTH3 STARTH3)) :: (inline @ [Lf (Tok.ENDH3)])))
561 : jriehl 3529 ;
562 : jriehl 3528
563 : jriehl 3529 h4 : STARTH4 inline* ENDH4
564 : jriehl 3530 => (Nd ((Lf (Tok.STARTH4 STARTH4)) :: (inline @ [Lf (Tok.ENDH4)])))
565 : jriehl 3529 ;
566 : jriehl 3528
567 : jriehl 3529 h5 : STARTH5 inline* ENDH5
568 : jriehl 3530 => (Nd ((Lf (Tok.STARTH5 STARTH5)) :: (inline @ [Lf (Tok.ENDH5)])))
569 : jriehl 3529 ;
570 : jriehl 3528
571 : jriehl 3529 h6 : STARTH6 inline* ENDH6
572 : jriehl 3530 => (Nd ((Lf (Tok.STARTH6 STARTH6)) :: (inline @ [Lf (Tok.ENDH6)])))
573 : jriehl 3529 ;
574 : jriehl 3528
575 : jriehl 3529 hr : STARTHR
576 : jriehl 3530 => (Lf (Tok.STARTHR STARTHR))
577 : jriehl 3529 ;
578 : jriehl 3528
579 : jriehl 3529 i : STARTI inline* ENDI
580 : jriehl 3530 => (Nd ((Lf (Tok.STARTI STARTI)) ::
581 :     (inline @ [Lf (Tok.ENDI)])))
582 : jriehl 3529 ;
583 : jriehl 3528
584 : jriehl 3529 iframe : STARTIFRAME flow* ENDIFRAME
585 : jriehl 3530 => (Nd ((Lf (Tok.STARTIFRAME STARTIFRAME)) ::
586 :     (flow @ [Lf (Tok.ENDIFRAME)])))
587 : jriehl 3529 ;
588 : jriehl 3528
589 : jriehl 3529 img : STARTIMG
590 : jriehl 3530 => (Lf (Tok.STARTIMG STARTIMG))
591 : jriehl 3529 ;
592 : jriehl 3528
593 : jriehl 3529 input : STARTINPUT
594 : jriehl 3530 => (Lf (Tok.STARTINPUT STARTINPUT))
595 : jriehl 3529 ;
596 : jriehl 3528
597 : jriehl 3529 ins : STARTINS flow* ENDINS
598 : jriehl 3530 => (Nd ((Lf (Tok.STARTINS STARTINS)) ::
599 :     (flow @ [Lf (Tok.ENDINS)])))
600 : jriehl 3529 ;
601 : jriehl 3528
602 : jriehl 3529 isindex : STARTISINDEX
603 : jriehl 3530 => (Lf (Tok.STARTISINDEX STARTISINDEX))
604 : jriehl 3529 ;
605 : jriehl 3528
606 : jriehl 3529 kbd : STARTKBD inline* ENDKBD
607 : jriehl 3530 => (Nd ((Lf (Tok.STARTKBD STARTKBD)) ::
608 :     (inline @ [Lf (Tok.ENDKBD)])))
609 : jriehl 3529 ;
610 : jriehl 3528
611 : jriehl 3529 label : STARTLABEL inline* ENDLABEL
612 : jriehl 3530 => (Nd ((Lf (Tok.STARTLABEL STARTLABEL)) ::
613 :     (inline @ [Lf (Tok.ENDLABEL)])))
614 : jriehl 3529 ;
615 : jriehl 3528
616 : jriehl 3529 legend : STARTLEGEND inline* ENDLEGEND
617 : jriehl 3530 => (Nd ((Lf (Tok.STARTLEGEND STARTLEGEND)) ::
618 :     (inline @ [Lf (Tok.ENDLEGEND)])))
619 : jriehl 3529 ;
620 : jriehl 3528
621 : jriehl 3530 li : STARTLI flow* (ENDLI => (Lf (Tok.ENDLI)))?
622 :     => (Nd ((Lf (Tok.STARTLI STARTLI)) :: (flow @ (optToList SR))))
623 : jriehl 3529 ;
624 : jriehl 3528
625 : jriehl 3529 map : STARTMAP (cdata | block | area)+ ENDMAP
626 : jriehl 3530 => (Nd ((Lf (Tok.STARTMAP STARTMAP)) :: (SR @ [Lf (Tok.ENDMAP)])))
627 : jriehl 3529 ;
628 : jriehl 3528
629 : jriehl 3529 menu : STARTMENU cdata_opt li+ ENDMENU
630 : jriehl 3530 => (Nd ((Lf (Tok.STARTMENU STARTMENU)) ::
631 :     (cdata_opt @ li @ [Lf (Tok.ENDMENU)])))
632 : jriehl 3529 ;
633 : jriehl 3528
634 : jriehl 3529 noframes : STARTNOFRAMES body ENDNOFRAMES
635 : jriehl 3530 => (Nd [Lf (Tok.STARTNOFRAMES STARTNOFRAMES), body,
636 :     Lf (Tok.ENDNOFRAMES)])
637 : jriehl 3529 ;
638 : jriehl 3528
639 : jriehl 3529 noscript : STARTNOSCRIPT (cdata | block)+ ENDNOSCRIPT
640 : jriehl 3530 => (Nd ((Lf (Tok.STARTNOSCRIPT STARTNOSCRIPT)) ::
641 :     (SR @ [Lf (Tok.ENDNOSCRIPT)])))
642 : jriehl 3529 ;
643 : jriehl 3528
644 : jriehl 3529 ol : STARTOL cdata_opt li+ ENDOL
645 : jriehl 3530 => (Nd ((Lf (Tok.STARTOL STARTOL)) ::
646 :     (cdata_opt @ li @ [Lf (Tok.ENDOL)])))
647 : jriehl 3529 ;
648 : jriehl 3528
649 : jriehl 3529 optgroup : STARTOPTGROUP cdata_opt option+ ENDOPTGROUP cdata_opt
650 : jriehl 3530 => (Nd ((Lf (Tok.STARTOPTGROUP STARTOPTGROUP)) ::
651 :     (cdata_opt1 @ option @ ((Lf (Tok.ENDOPTGROUP))
652 :     :: cdata_opt2))))
653 : jriehl 3529 ;
654 : jriehl 3528
655 : jriehl 3529 option : STARTOPTION cdata_opt
656 : jriehl 3530 (ENDOPTION cdata_opt => ((Lf (Tok.ENDOPTION)) ::
657 :     cdata_opt))?
658 :     => (Nd ((Lf (Tok.STARTOPTION STARTOPTION)) ::
659 :     (cdata_opt @ (optListToList SR))))
660 : jriehl 3529 ;
661 : jriehl 3528
662 : jriehl 3529 (* TODO: Making the ENDP optional, which is valid, causes
663 :     left-recursion for the inline* part. This can be fixed by having a
664 :     two state flow nonterminal, which the older HTML library does. *)
665 : jriehl 3528
666 : jriehl 3529 p : STARTP inline* ENDP
667 : jriehl 3530 => (Nd ((Lf (Tok.STARTP STARTP)) :: (inline @ [Lf (Tok.ENDP)])))
668 : jriehl 3529 ;
669 : jriehl 3528
670 : jriehl 3529 pre : STARTPRE inline* ENDPRE
671 : jriehl 3530 => (Nd ((Lf (Tok.STARTPRE STARTPRE)) ::
672 :     (inline @ [Lf (Tok.ENDPRE)])))
673 : jriehl 3529 ;
674 : jriehl 3528
675 : jriehl 3529 q : STARTQ inline* ENDQ
676 : jriehl 3530 => (Nd ((Lf (Tok.STARTQ STARTQ)) :: (inline @ [Lf (Tok.ENDQ)])))
677 : jriehl 3529 ;
678 : jriehl 3528
679 : jriehl 3529 s : STARTS inline* ENDS
680 : jriehl 3530 => (Nd ((Lf (Tok.STARTS STARTS)) :: (inline @ [Lf (Tok.ENDS)])))
681 : jriehl 3529 ;
682 : jriehl 3528
683 : jriehl 3529 samp : STARTSAMP inline* ENDSAMP
684 : jriehl 3530 => (Nd ((Lf (Tok.STARTSAMP STARTSAMP)) ::
685 :     (inline @ [Lf (Tok.ENDSAMP)])))
686 : jriehl 3529 ;
687 : jriehl 3528
688 : jriehl 3529 select : STARTSELECT cdata_opt (optgroup | option)+ ENDSELECT
689 : jriehl 3530 => (Nd ((Lf (Tok.STARTSELECT STARTSELECT)) ::
690 :     (cdata_opt @ SR @ [Lf (Tok.ENDSELECT)])))
691 : jriehl 3529 ;
692 : jriehl 3528
693 : jriehl 3529 small : STARTSMALL inline* ENDSMALL
694 : jriehl 3530 => (Nd ((Lf (Tok.STARTSMALL STARTSMALL)) ::
695 :     (inline @ [Lf (Tok.ENDSMALL)])))
696 : jriehl 3529 ;
697 : jriehl 3528
698 : jriehl 3529 span : STARTSPAN inline* ENDSPAN
699 : jriehl 3530 => (Nd ((Lf (Tok.STARTSPAN STARTSPAN)) ::
700 :     (inline @ [Lf (Tok.ENDSPAN)])))
701 : jriehl 3529 ;
702 : jriehl 3528
703 : jriehl 3529 strike : STARTSTRIKE inline* ENDSTRIKE
704 : jriehl 3530 => (Nd ((Lf (Tok.STARTSTRIKE STARTSTRIKE)) ::
705 :     (inline @ [Lf (Tok.ENDSTRIKE)])))
706 : jriehl 3529 ;
707 : jriehl 3528
708 : jriehl 3529 strong : STARTSTRONG inline* ENDSTRONG
709 : jriehl 3530 => (Nd ((Lf (Tok.STARTSTRONG STARTSTRONG)) ::
710 :     (inline @ [Lf (Tok.ENDSTRONG)])))
711 : jriehl 3529 ;
712 : jriehl 3528
713 : jriehl 3529 sub : STARTSUB inline* ENDSUB
714 : jriehl 3530 => (Nd ((Lf (Tok.STARTSUB STARTSUB)) ::
715 :     (inline @ [Lf (Tok.ENDSUB)])))
716 : jriehl 3529 ;
717 : jriehl 3528
718 : jriehl 3529 sup : STARTSUP inline* ENDSUP
719 : jriehl 3530 => (Nd ((Lf (Tok.STARTSUP STARTSUP)) ::
720 :     (inline @ [Lf (Tok.ENDSUP)])))
721 : jriehl 3529 ;
722 :    
723 : jriehl 3528 (* My reading of the HTML DTD indicates the following order of
724 :     elements is enforceable: *)
725 :    
726 : jriehl 3529 table : STARTTABLE cdata_opt
727 :     (caption cdata_opt => (caption :: cdata_opt))?
728 :     col_or_colgroups table_content ENDTABLE
729 : jriehl 3530 => (Nd ((Lf (Tok.STARTTABLE STARTTABLE)) ::
730 : jriehl 3529 (cdata_opt @ (optListToList SR) @ col_or_colgroups @
731 : jriehl 3530 table_content @ [Lf (Tok.ENDTABLE)])))
732 : jriehl 3528 ;
733 :    
734 :     (* The whole tr+ thing makes the original table production ambiguous:
735 :     STARTTABLE ... thead? tfoot? tbody+ ENDTABLE *)
736 :    
737 : jriehl 3529 table_content
738 : jriehl 3528 : thead tfoot? tbodies
739 : jriehl 3529 => (thead :: ((optToList tfoot)) @ tbodies)
740 : jriehl 3528 | tfoot tbodies
741 : jriehl 3529 => (tfoot :: tbodies)
742 : jriehl 3528 | tbodies_nostart
743 :     ;
744 :    
745 :     col_or_colgroups : (* empty *)
746 : jriehl 3529 => ([])
747 :     | (col cdata_opt => (col :: cdata_opt))+
748 :     => (foldr op@ [] SR)
749 : jriehl 3528 | colgroup+
750 :     ;
751 :    
752 :    
753 : jriehl 3530 tbodies_nostart : (STARTTBODY cdata_opt =>
754 :     ((Lf (Tok.STARTTBODY STARTTBODY)) :: cdata_opt))?
755 : jriehl 3529 tr+ tbodies_rest?
756 :     => (let val (tbody_rest, tbody_peers) =
757 :     case tbodies_rest of
758 :     NONE => ([], [])
759 :     | SOME tbodies_tup => tbodies_tup
760 :     in (Nd ((optListToList SR) @ tr @ tbody_rest)) ::
761 :     tbody_peers end)
762 : jriehl 3528 ;
763 :    
764 :     tbodies : STARTTBODY cdata_opt tr+ tbodies_rest
765 : jriehl 3529 => (let val (tbody_rest, tbody_peers) = tbodies_rest
766 : jriehl 3530 in (Nd ((Lf (Tok.STARTTBODY STARTTBODY)) ::
767 :     (cdata_opt @ tr @ tbody_rest))) ::
768 : jriehl 3529 tbody_peers end)
769 : jriehl 3528 ;
770 :    
771 :     tbodies_rest : ENDTBODY cdata_opt tbodies?
772 : jriehl 3530 => ((Lf (Tok.ENDTBODY)) :: cdata_opt,
773 :     optListToList tbodies)
774 : jriehl 3529 | STARTTBODY cdata_opt tr+ tbodies_rest?
775 : jriehl 3530 => (let val (tbody_rest, tbody_peers) =
776 :     case tbodies_rest of NONE => ([], [])
777 :     | SOME tbodies_tup => tbodies_tup
778 :     in ([], (Nd ((Lf (Tok.STARTTBODY STARTTBODY)) ::
779 : jriehl 3529 (cdata_opt @ tr @ tbody_rest))) :: tbody_peers)
780 :     end)
781 : jriehl 3528 ;
782 :    
783 : jriehl 3530 td : STARTTD flow* (ENDTD cdata_opt => ((Lf (Tok.ENDTD)) :: cdata_opt))?
784 :     => (Nd ((Lf (Tok.STARTTD STARTTD)) :: (flow @ (optListToList SR))))
785 : jriehl 3529 ;
786 : jriehl 3528
787 : jriehl 3529 textarea : STARTTEXTAREA cdata_opt ENDTEXTAREA
788 : jriehl 3530 => (Nd ((Lf (Tok.STARTTEXTAREA STARTTEXTAREA)) ::
789 :     (cdata_opt @ [Lf (Tok.ENDTEXTAREA)])))
790 : jriehl 3529 ;
791 : jriehl 3528
792 : jriehl 3529 tfoot : STARTTFOOT cdata_opt tr+
793 : jriehl 3530 (ENDTFOOT cdata_opt => ((Lf (Tok.ENDTFOOT)) :: cdata_opt))?
794 :     => (Nd ((Lf (Tok.STARTTFOOT STARTTFOOT)) :: (cdata_opt @ tr @
795 :     (optListToList SR))))
796 : jriehl 3529 ;
797 : jriehl 3528
798 : jriehl 3530 th : STARTTH flow* (ENDTH cdata_opt => ((Lf (Tok.ENDTH)) :: cdata_opt))?
799 :     => (Nd ((Lf (Tok.STARTTH STARTTH)) :: (flow @ (optListToList SR))))
800 : jriehl 3529 ;
801 : jriehl 3528
802 : jriehl 3529 thead : STARTTHEAD cdata_opt tr+
803 : jriehl 3530 (ENDTHEAD cdata_opt => ((Lf (Tok.ENDTHEAD)) :: cdata_opt))?
804 :     => (Nd ((Lf (Tok.STARTTHEAD STARTTHEAD)) :: (cdata_opt @ tr @
805 :     (optListToList SR))))
806 : jriehl 3529 ;
807 : jriehl 3528
808 : jriehl 3529 tr : STARTTR cdata_opt (th | td)+
809 : jriehl 3530 (ENDTR cdata_opt => ((Lf (Tok.ENDTR)) :: cdata_opt))?
810 :     => (Nd ((Lf (Tok.STARTTR STARTTR)) :: (cdata_opt @ SR1 @
811 :     (optListToList SR2))))
812 : jriehl 3529 ;
813 : jriehl 3528
814 : jriehl 3529 tt : STARTTT inline* ENDTT
815 : jriehl 3530 => (Nd ((Lf (Tok.STARTTT STARTTT)) :: (inline @ [Lf (Tok.ENDTT)])))
816 : jriehl 3529 ;
817 : jriehl 3528
818 : jriehl 3529 u : STARTU inline* ENDU
819 : jriehl 3530 => (Nd ((Lf (Tok.STARTU STARTU)) :: (inline @ [Lf (Tok.ENDU)])))
820 : jriehl 3529 ;
821 : jriehl 3528
822 : jriehl 3529 ul : STARTUL cdata_opt li+ ENDUL
823 : jriehl 3530 => (Nd (((Lf (Tok.STARTUL STARTUL)) :: (cdata_opt @ li @
824 :     [Lf (Tok.ENDUL)]))))
825 : jriehl 3529 ;
826 : jriehl 3528
827 : jriehl 3529 var : STARTVAR inline* ENDVAR
828 : jriehl 3530 => (Nd ((Lf (Tok.STARTVAR STARTVAR)) :: (inline @
829 :     [Lf (Tok.ENDVAR)])))
830 : jriehl 3529 ;
831 : jriehl 3528
832 :     (* ______________________________________________________________________
833 :     Miscellaneous data nonterminals
834 :     ______________________________________________________________________ *)
835 :    
836 : jriehl 3530 cdata : (PCDATA => (Tok.PCDATA PCDATA)
837 :     | CHAR_REF => (Tok.CHAR_REF CHAR_REF)
838 :     | ENTITY_REF => (Tok.ENTITY_REF ENTITY_REF)
839 :     | COMMENT => (Tok.COMMENT COMMENT))
840 : jriehl 3529 => ((Lf SR) : HTML4Tokens.token tree)
841 : jriehl 3528 ;
842 :    
843 : jriehl 3529 cdata_opt : cdata* => (cdata : HTML4Tokens.token tree list)
844 : jriehl 3528 ;
845 :    
846 :     (* ______________________________________________________________________
847 :     End of html4.g
848 :     ______________________________________________________________________ *)

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