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 /sml/trunk/src/smlnj-lib/HTML/html-gram
ViewVC logotype

Annotation of /sml/trunk/src/smlnj-lib/HTML/html-gram

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (view) (download)

1 : monnier 2 (* html-gram
2 :     *
3 :     * COPYRIGHT (c) 1996 AT&T Research.
4 :     *
5 :     * This grammar parses HTML 3.2. Note that it does not enforce exclusions
6 :     * (for the content of FORM, PRE, etc). Exclusions should be enforced as
7 :     * a second pass over the parse tree.
8 :     *)
9 :    
10 :     fun textList [text] = text
11 :     | textList l = HTML.TextList l
12 :    
13 :     fun blockList [blk] = blk
14 :     | blockList l = HTML.BlockList l
15 :    
16 :     fun textBlock l = HTML.TextBlock(textList l)
17 :    
18 :     (* The elements of a definition list (<DL>) are tags (<DT>) and items (<DD>).
19 :     * To avoid shift/reduce problems, we parse them and then group them.
20 :     *)
21 :     datatype deflist_item
22 :     = DL_tag of HTML.text
23 :     | DL_item of HTML.block
24 :    
25 :     fun groupDefListContents [] = []
26 :     | groupDefListContents [DL_tag tag] = [{dt=[tag], dd=HTML.BlockList[]}]
27 :     | groupDefListContents (DL_item blk :: r) =
28 :     {dt=[], dd=blk} :: (groupDefListContents r)
29 :     | groupDefListContents (DL_tag tag :: r) = let
30 :     val {dt, dd} :: r' = groupDefListContents r
31 :     in
32 :     {dt=tag::dt, dd=dd} :: r'
33 :     end
34 :    
35 :     (* A list of Text, paragraphs and blocks requires grouping the Text items and
36 :     * making an implicit paragraph. We cannot directly use TextList because of
37 :     * conflicts.
38 :     *)
39 :     datatype blklist_item
40 :     = BL_text of HTML.text list
41 :     | BL_block of HTML.block list
42 :    
43 :     fun consText (txt, BL_text tl :: r) = BL_text(txt::tl) :: r
44 :     | consText (txt, l) = BL_text[txt] :: l
45 :    
46 :     fun consBlock (blk, BL_block bl :: r) = BL_block(blk::bl) :: r
47 :     | consBlock (blk, l) = BL_block[blk] :: l
48 :    
49 :     fun mkBlock blks = let
50 :     fun f (BL_text tl) = textBlock tl
51 :     | f (BL_block bl) = blockList bl
52 :     in
53 :     blockList(List.map f blks)
54 :     end
55 :    
56 :     %%
57 :    
58 :     (* %pure *)
59 :     %verbose
60 :    
61 :     %nonterm Document of HTML.html
62 :     | StartHTML of HTML.cdata option
63 :     | EndHTML
64 :     | Head of HTML.head_content list
65 :     | StartHEAD
66 :     | EndHEAD
67 :     | HeadContents of HTML.head_content list
68 :     | HeadElements of HTML.head_content list
69 :     | Body of HTML.block
70 :     | StartBODY
71 :     | EndBODY
72 :     | BodyContent of HTML.block
73 :     | BodyContent0 of HTML.block
74 :     | BodyContent1 of blklist_item list
75 :     | BodyContent2 of blklist_item list
76 :     | BodyElement of HTML.block
77 :     | AddressContent1 of blklist_item list
78 :     | AddressContent2 of blklist_item list
79 :     | BlockWOIndex of HTML.block
80 :     | Block of HTML.block
81 :     | Paragraph of HTML.block
82 :     | List of HTML.block
83 :     | ListItemList of HTML.list_item list
84 :     | ListItem of HTML.list_item
85 :     | DLItemList of deflist_item list
86 :     | DLItem of deflist_item
87 :     | Flow1 of blklist_item list
88 :     | Flow2 of blklist_item list
89 :     | EndLI
90 :     | EndDT
91 :     | EndDD
92 :     | Preformatted of HTML.block
93 :     | optCaption of HTML.caption option
94 :     | TableRowList of HTML.tr list
95 :     | TableRow of HTML.tr
96 :     | TableCellList of HTML.table_cell list
97 :     | TableCell of HTML.table_cell
98 :     | TextList of HTML.text
99 :     | TextList' of HTML.text list
100 :     | TextWOScript of HTML.text
101 :     | Text of HTML.text
102 :     | Font of HTML.text
103 :     | Phrase of HTML.text
104 :     | Special of HTML.text
105 :     | AreaList of HTML.area list
106 :     | Form of HTML.text
107 :     | OptionList of HTML.select_option list
108 :     | EndOPTION
109 :     | PCData of HTML.pcdata
110 :     | PCDataList of HTML.pcdata list
111 :     | PCDataElem of HTML.pcdata
112 :    
113 :     %term EOF
114 :     (* tags in alphabetical order *)
115 :     | START_A of HTMLAttrVals.attrs | END_A
116 :     | START_ADDRESS | END_ADDRESS
117 :     | START_APPLET of HTMLAttrVals.attrs | END_APPLET
118 :     | TAG_AREA of HTMLAttrVals.attrs
119 :     | START_B | END_B
120 :     | TAG_BASE of HTMLAttrVals.attrs
121 :     | START_BIG | END_BIG
122 :     | START_BLOCKQUOTE | END_BLOCKQUOTE
123 :     | START_BODY of HTMLAttrVals.attrs | END_BODY
124 :     | TAG_BR of HTMLAttrVals.attrs
125 :     | START_CAPTION of HTMLAttrVals.attrs | END_CAPTION
126 :     | START_CENTER | END_CENTER
127 :     | START_CITE | END_CITE
128 :     | START_CODE | END_CODE
129 :     | START_DD | END_DD
130 :     | START_DFN | END_DFN
131 :     | START_DIR of HTMLAttrVals.attrs | END_DIR
132 :     | START_DIV of HTMLAttrVals.attrs | END_DIV
133 :     | START_DL of HTMLAttrVals.attrs | END_DL
134 :     | START_DT | END_DT
135 :     | START_EM | END_EM
136 :     | START_FONT of HTMLAttrVals.attrs | END_FONT
137 :     | START_BASEFONT of HTMLAttrVals.attrs | END_BASEFONT
138 :     | START_FORM of HTMLAttrVals.attrs | END_FORM
139 :     | START_H1 of HTMLAttrVals.attrs | END_H1
140 :     | START_H2 of HTMLAttrVals.attrs | END_H2
141 :     | START_H3 of HTMLAttrVals.attrs | END_H3
142 :     | START_H4 of HTMLAttrVals.attrs | END_H4
143 :     | START_H5 of HTMLAttrVals.attrs | END_H5
144 :     | START_H6 of HTMLAttrVals.attrs | END_H6
145 :     | START_HEAD | END_HEAD
146 :     | TAG_HR of HTMLAttrVals.attrs
147 :     | START_HTML | END_HTML
148 :     | START_I | END_I
149 :     | TAG_IMG of HTMLAttrVals.attrs
150 :     | TAG_INPUT of HTMLAttrVals.attrs
151 :     | TAG_ISINDEX of HTMLAttrVals.attrs
152 :     | START_KBD | END_KBD
153 :     | START_LI of HTMLAttrVals.attrs | END_LI
154 :     | TAG_LINK of HTMLAttrVals.attrs
155 :     | START_MAP of HTMLAttrVals.attrs | END_MAP
156 :     | START_MENU of HTMLAttrVals.attrs | END_MENU
157 :     | TAG_META of HTMLAttrVals.attrs
158 :     | START_OL of HTMLAttrVals.attrs | END_OL
159 :     | START_OPTION of HTMLAttrVals.attrs | END_OPTION
160 :     | START_P of HTMLAttrVals.attrs | END_P
161 :     | TAG_PARAM of HTMLAttrVals.attrs
162 :     | START_PRE of HTMLAttrVals.attrs | END_PRE
163 :     | START_SAMP | END_SAMP
164 :     | START_SCRIPT | END_SCRIPT
165 :     | START_SELECT of HTMLAttrVals.attrs | END_SELECT
166 :     | START_SMALL | END_SMALL
167 :     | START_STRIKE | END_STRIKE
168 :     | START_STRONG | END_STRONG
169 :     | START_STYLE | END_STYLE
170 :     | START_SUB | END_SUB
171 :     | START_SUP | END_SUP
172 :     | START_TABLE of HTMLAttrVals.attrs | END_TABLE
173 :     | START_TD of HTMLAttrVals.attrs | END_TD
174 :     | START_TEXTAREA of HTMLAttrVals.attrs | END_TEXTAREA
175 :     | START_TH of HTMLAttrVals.attrs | END_TH
176 :     | START_TITLE | END_TITLE
177 :     | START_TR of HTMLAttrVals.attrs | END_TR
178 :     | START_TT | END_TT
179 :     | START_U | END_U
180 :     | START_UL of HTMLAttrVals.attrs | END_UL
181 :     | START_VAR | END_VAR
182 :     (* raw text data *)
183 :     | PCDATA of string
184 :     | CHAR_REF of string (* &#dd; *)
185 :     | ENTITY_REF of string (* &#name; *)
186 :    
187 :     %pure
188 :     %pos int
189 :     %name HTML
190 :     %start Document
191 :    
192 :     %header (
193 :     functor HTMLLrValsFn (
194 :     structure Token : TOKEN
195 :     structure HTMLAttrs : HTML_ATTRS))
196 :    
197 :     %arg (ctx) : int -> HTMLAttrs.context
198 :    
199 :     %eop EOF
200 :    
201 :     (** Some error-correction support **)
202 :     %value START_A ([])
203 :     %value START_APPLET ([
204 :     ("CODE", HTMLAttrs.NAME ""),
205 :     ("WIDTH", HTMLAttrs.NAME ""),
206 :     ("HEIGHT", HTMLAttrs.NAME "")
207 :     ])
208 :     %value TAG_AREA ([("ALT", HTMLAttrs.NAME "")])
209 :     %value TAG_BASE ([("URL", HTMLAttrs.NAME "")])
210 :     %value START_BODY ([])
211 :     %value TAG_BR ([])
212 :     %value START_CAPTION ([])
213 :     %value START_DIR ([])
214 :     %value START_DIV ([])
215 :     %value START_DL ([])
216 :     %value START_FONT ([])
217 :     %value START_BASEFONT ([])
218 :     %value START_FORM ([])
219 :     %value START_H1 ([])
220 :     %value START_H2 ([])
221 :     %value START_H3 ([])
222 :     %value START_H4 ([])
223 :     %value START_H5 ([])
224 :     %value START_H6 ([])
225 :     %value TAG_HR ([])
226 :     %value TAG_IMG ([("SRC", HTMLAttrs.NAME "")])
227 :     %value TAG_INPUT ([])
228 :     %value TAG_ISINDEX ([])
229 :     %value TAG_LINK ([])
230 :     %value START_MAP ([])
231 :     %value START_MENU ([])
232 :     %value TAG_META ([("CONTENT", HTMLAttrs.NAME "")])
233 :     %value START_OL ([])
234 :     %value START_OPTION ([])
235 :     %value START_P ([])
236 :     %value TAG_PARAM ([("NAME", HTMLAttrs.NAME "")])
237 :     %value START_PRE ([])
238 :     %value START_SELECT ([("NAME", HTMLAttrs.NAME "")])
239 :     %value START_TABLE ([])
240 :     %value START_TD ([])
241 :     %value START_TEXTAREA ([
242 :     ("NAME", HTMLAttrs.NAME ""),
243 :     ("ROWS", HTMLAttrs.NAME "0"),
244 :     ("COLS", HTMLAttrs.NAME "0")
245 :     ])
246 :     %value START_TH ([])
247 :     %value START_TR ([])
248 :     %value START_UL ([])
249 :    
250 :     %%
251 :    
252 :     Document
253 :     : StartHTML Head Body EndHTML
254 :     (HTML.HTML{version=StartHTML, head=Head, body=Body})
255 :    
256 :     StartHTML
257 :     : (* empty *) (NONE)
258 :     | START_HTML (NONE)
259 :     EndHTML
260 :     : (* empty *) ()
261 :     | END_HTML ()
262 :    
263 :    
264 :     (*** Head markup ***)
265 :    
266 :     Head
267 :     : StartHEAD HeadContents EndHEAD
268 :     (HeadContents)
269 :    
270 :     StartHEAD
271 :     : (* empty *) ()
272 :     | START_HEAD ()
273 :     EndHEAD
274 :     : (* empty *) ()
275 :     | END_HEAD ()
276 :    
277 :     HeadContents
278 :     : HeadElements START_TITLE PCData END_TITLE HeadElements
279 :     (HeadElements1 @ (HTML.Head_TITLE PCData :: HeadElements2))
280 :    
281 :     HeadElements
282 :     : (* empty *)
283 :     ([])
284 :     | TAG_META HeadElements
285 :     (HTMLAttrs.mkMETA(ctx TAG_METAleft, TAG_META) :: HeadElements)
286 :     | TAG_LINK HeadElements
287 :     (HTMLAttrs.mkLINK(ctx TAG_LINKleft, TAG_LINK) :: HeadElements)
288 :     | TAG_ISINDEX HeadElements
289 :     (let val stuff =
290 :     HTMLAttrs.mkISINDEX (ctx TAG_ISINDEXleft, TAG_ISINDEX)
291 :     in HTML.Head_ISINDEX stuff :: HeadElements end
292 :     )
293 :     | TAG_BASE HeadElements
294 :     (HTMLAttrs.mkBASE(ctx TAG_BASEleft, TAG_BASE) :: HeadElements)
295 :     | START_STYLE PCData END_STYLE HeadElements
296 :     (HTML.Head_STYLE(PCData) :: HeadElements)
297 :     | START_SCRIPT PCData END_SCRIPT HeadElements
298 :     (HTML.Head_SCRIPT(PCData) :: HeadElements)
299 :    
300 :    
301 :     (*** Body content ***)
302 :    
303 :     Body
304 :     : BodyContent0 EndBODY
305 :     (BodyContent0)
306 :    
307 :     EndBODY
308 :     : (* empty *) ()
309 :     | END_BODY ()
310 :    
311 :     BodyContent
312 :     : BodyContent1
313 :     (mkBlock BodyContent1)
314 :    
315 :     BodyContent0
316 :     : START_BODY BodyContent
317 :     (BodyContent)
318 :     | TextWOScript BodyContent1
319 :     (mkBlock(consText(TextWOScript, BodyContent1)))
320 :     | BodyElement BodyContent1
321 :     (mkBlock(consBlock(BodyElement, BodyContent1)))
322 :     | BlockWOIndex BodyContent1
323 :     (mkBlock(consBlock(BlockWOIndex, BodyContent1)))
324 :     | Paragraph END_P BodyContent1
325 :     (mkBlock(consBlock(Paragraph, BodyContent1)))
326 :     | Paragraph BodyContent2
327 :     (mkBlock(consBlock(Paragraph, BodyContent2)))
328 :    
329 :     BodyContent1
330 :     : (* empty *)
331 :     ([])
332 :     | Text BodyContent1
333 :     (consText(Text, BodyContent1))
334 :     | BodyElement BodyContent1
335 :     (consBlock(BodyElement, BodyContent1))
336 :     | Block BodyContent1
337 :     (consBlock(Block, BodyContent1))
338 :     | Paragraph END_P BodyContent1
339 :     (consBlock(Paragraph, BodyContent1))
340 :     | Paragraph BodyContent2
341 :     (consBlock(Paragraph, BodyContent2))
342 :    
343 :     BodyContent2
344 :     : (* empty *)
345 :     ([])
346 :     | BodyElement BodyContent1
347 :     (consBlock(BodyElement, BodyContent1))
348 :     | Block BodyContent1
349 :     (consBlock(Block, BodyContent1))
350 :     | Paragraph END_P BodyContent1
351 :     (consBlock(Paragraph, BodyContent1))
352 :     | Paragraph BodyContent2
353 :     (consBlock(Paragraph, BodyContent2))
354 :    
355 :     BodyElement
356 :     : START_H1 TextList END_H1
357 :     (HTMLAttrs.mkHn(1, ctx START_H1left, START_H1, TextList))
358 :     | START_H2 TextList END_H2
359 :     (HTMLAttrs.mkHn(2, ctx START_H2left, START_H2, TextList))
360 :     | START_H3 TextList END_H3
361 :     (HTMLAttrs.mkHn(3, ctx START_H3left, START_H3, TextList))
362 :     | START_H4 TextList END_H4
363 :     (HTMLAttrs.mkHn(4, ctx START_H4left, START_H4, TextList))
364 :     | START_H5 TextList END_H5
365 :     (HTMLAttrs.mkHn(5, ctx START_H5left, START_H5, TextList))
366 :     | START_H6 TextList END_H6
367 :     (HTMLAttrs.mkHn(6, ctx START_H6left, START_H6, TextList))
368 :     | START_ADDRESS AddressContent1 END_ADDRESS
369 :     (HTML.ADDRESS(mkBlock AddressContent1))
370 :    
371 :     AddressContent1
372 :     : (* empty *)
373 :     ([])
374 :     | Text AddressContent1
375 :     (consText(Text, AddressContent1))
376 :     | Paragraph END_P AddressContent1
377 :     (consBlock(Paragraph, AddressContent1))
378 :     | Paragraph AddressContent2
379 :     (consBlock(Paragraph, AddressContent2))
380 :    
381 :     AddressContent2
382 :     : (* empty *)
383 :     ([])
384 :     | Paragraph END_P AddressContent1
385 :     (consBlock(Paragraph, AddressContent1))
386 :     | Paragraph AddressContent2
387 :     (consBlock(Paragraph, AddressContent2))
388 :    
389 :     (*** Block ***)
390 :    
391 :     BlockWOIndex
392 :     : List
393 :     (List)
394 :     | Preformatted
395 :     (Preformatted)
396 :     | START_DIV BodyContent END_DIV
397 :     (HTMLAttrs.mkDIV(ctx START_DIVleft, START_DIV, BodyContent))
398 :     | START_CENTER BodyContent END_CENTER
399 :     (HTML.CENTER BodyContent)
400 :     | START_BLOCKQUOTE BodyContent END_BLOCKQUOTE
401 :     (HTML.BLOCKQUOTE BodyContent)
402 :     | START_FORM BodyContent END_FORM
403 :     (HTMLAttrs.mkFORM(ctx START_FORMleft, START_FORM, BodyContent))
404 :     | TAG_HR
405 :     (HTMLAttrs.mkHR(ctx TAG_HRleft, TAG_HR))
406 :     | START_TABLE optCaption TableRowList END_TABLE
407 :     (HTMLAttrs.mkTABLE(
408 :     ctx START_TABLEleft, START_TABLE,
409 :     {caption = optCaption, body = TableRowList})
410 :     )
411 :    
412 :     Block
413 :     : BlockWOIndex
414 :     (BlockWOIndex)
415 :     | TAG_ISINDEX
416 :     (let val stuff =
417 :     HTMLAttrs.mkISINDEX (ctx TAG_ISINDEXleft, TAG_ISINDEX)
418 :     in HTML.ISINDEX stuff end
419 :     )
420 :    
421 :     Paragraph
422 :     : START_P TextList
423 :     (HTMLAttrs.mkP(ctx START_Pleft, START_P, TextList))
424 :    
425 :     List
426 :     : START_UL ListItemList END_UL
427 :     (HTMLAttrs.mkUL(ctx START_ULleft, START_UL, ListItemList))
428 :     | START_OL ListItemList END_OL
429 :     (HTMLAttrs.mkOL(ctx START_OLleft, START_OL, ListItemList))
430 :     | START_DIR ListItemList END_DIR
431 :     (HTMLAttrs.mkDIR(ctx START_DIRleft, START_DIR, ListItemList))
432 :     | START_MENU ListItemList END_MENU
433 :     (HTMLAttrs.mkMENU(ctx START_MENUleft, START_MENU, ListItemList))
434 :     | START_DL DLItemList END_DL
435 :     (HTMLAttrs.mkDL(
436 :     ctx START_DLleft, START_DL,
437 :     groupDefListContents DLItemList)
438 :     )
439 :    
440 :     ListItemList
441 :     : (* empty *)
442 :     ([])
443 :     | ListItem ListItemList
444 :     (ListItem :: ListItemList)
445 :    
446 :     ListItem
447 :     : START_LI Flow1 EndLI
448 :     (HTMLAttrs.mkLI(ctx START_LIleft, START_LI, mkBlock Flow1))
449 :    
450 :     DLItemList
451 :     : (* empty *)
452 :     ([])
453 :     | DLItem DLItemList
454 :     (DLItem :: DLItemList)
455 :    
456 :     DLItem
457 :     : START_DT TextList EndDT
458 :     (DL_tag TextList)
459 :     | START_DD Flow1 EndDD
460 :     (DL_item(mkBlock Flow1))
461 :    
462 :     Flow1
463 :     : (* empty *)
464 :     ([])
465 :     | Text Flow1
466 :     (consText(Text, Flow1))
467 :     | Block Flow1
468 :     (consBlock(Block, Flow1))
469 :     | Paragraph END_P Flow1
470 :     (consBlock(Paragraph, Flow1))
471 :     | Paragraph Flow2
472 :     (consBlock(Paragraph, Flow2))
473 :    
474 :     Flow2
475 :     : (* empty *)
476 :     ([])
477 :     | Block Flow1
478 :     (consBlock(Block, Flow1))
479 :     | Paragraph END_P Flow1
480 :     (consBlock(Paragraph, Flow1))
481 :     | Paragraph Flow2
482 :     (consBlock(Paragraph, Flow2))
483 :    
484 :     EndLI
485 :     : (* empty *) ()
486 :     | END_LI ()
487 :     EndDT
488 :     : (* empty *) ()
489 :     | END_DT ()
490 :     EndDD
491 :     : (* empty *) ()
492 :     | END_DD ()
493 :    
494 :     Preformatted
495 :     : START_PRE TextList END_PRE
496 :     (HTMLAttrs.mkPRE(ctx START_PREleft, START_PRE, TextList))
497 :    
498 :     (*** Tables ***)
499 :    
500 :     optCaption
501 :     : (* empty *)
502 :     (NONE)
503 :     | START_CAPTION TextList END_CAPTION
504 :     (SOME(HTMLAttrs.mkCAPTION(
505 :     ctx START_CAPTIONleft, START_CAPTION, TextList)))
506 :    
507 :     TableRowList
508 :     : TableRow
509 :     ([TableRow])
510 :     | TableRow TableRowList
511 :     (TableRow :: TableRowList)
512 :    
513 :     TableRow
514 :     : START_TR TableCellList
515 :     (HTMLAttrs.mkTR(ctx START_TRleft, START_TR, TableCellList))
516 :     | START_TR TableCellList END_TR
517 :     (HTMLAttrs.mkTR(ctx START_TRleft, START_TR, TableCellList))
518 :    
519 :     TableCellList
520 :     : TableCell
521 :     ([TableCell])
522 :     | TableCell TableCellList
523 :     (TableCell :: TableCellList)
524 :    
525 :     TableCell
526 :     : START_TH BodyContent END_TH
527 :     (HTMLAttrs.mkTH(ctx START_THleft, START_TH, BodyContent))
528 :     | START_TH BodyContent
529 :     (HTMLAttrs.mkTH(ctx START_THleft, START_TH, BodyContent))
530 :     | START_TD BodyContent END_TD
531 :     (HTMLAttrs.mkTD(ctx START_TDleft, START_TD, BodyContent))
532 :     | START_TD BodyContent
533 :     (HTMLAttrs.mkTD(ctx START_TDleft, START_TD, BodyContent))
534 :    
535 :     (*** Text ***)
536 :    
537 :     TextList
538 :     : TextList'
539 :     (textList TextList')
540 :    
541 :     TextList'
542 :     : (* empty *)
543 :     ([])
544 :     | Text TextList'
545 :     (Text :: TextList')
546 :    
547 :     TextWOScript
548 :     : PCDataElem
549 :     (HTML.PCDATA PCDataElem)
550 :     | Font
551 :     (Font)
552 :     | Phrase
553 :     (Phrase)
554 :     | Special
555 :     (Special)
556 :     | Form
557 :     (Form)
558 :    
559 :     Text
560 :     : TextWOScript
561 :     (TextWOScript)
562 :     | START_SCRIPT PCData END_SCRIPT
563 :     (HTML.SCRIPT PCData)
564 :    
565 :     Font
566 :     : START_TT TextList END_TT
567 :     (HTML.TT(TextList))
568 :     | START_I TextList END_I
569 :     (HTML.I(TextList))
570 :     | START_B TextList END_B
571 :     (HTML.B(TextList))
572 :     | START_U TextList END_U
573 :     (HTML.U(TextList))
574 :     | START_STRIKE TextList END_STRIKE
575 :     (HTML.STRIKE(TextList))
576 :     | START_BIG TextList END_BIG
577 :     (HTML.BIG(TextList))
578 :     | START_SMALL TextList END_SMALL
579 :     (HTML.SMALL(TextList))
580 :     | START_SUB TextList END_SUB
581 :     (HTML.SUB(TextList))
582 :     | START_SUP TextList END_SUP
583 :     (HTML.SUP(TextList))
584 :     Phrase
585 :     : START_EM TextList END_EM
586 :     (HTML.EM(TextList))
587 :     | START_STRONG TextList END_STRONG
588 :     (HTML.STRONG(TextList))
589 :     | START_CODE TextList END_CODE
590 :     (HTML.CODE(TextList))
591 :     | START_DFN TextList END_DFN
592 :     (HTML.DFN(TextList))
593 :     | START_SAMP TextList END_SAMP
594 :     (HTML.SAMP(TextList))
595 :     | START_KBD TextList END_KBD
596 :     (HTML.KBD(TextList))
597 :     | START_VAR TextList END_VAR
598 :     (HTML.VAR(TextList))
599 :     | START_CITE TextList END_CITE
600 :     (HTML.CITE(TextList))
601 :    
602 :     Special
603 :     : START_A TextList END_A
604 :     (HTMLAttrs.mkA(ctx START_Aleft, START_A, TextList))
605 :     | TAG_IMG
606 :     (HTMLAttrs.mkIMG(ctx TAG_IMGleft, TAG_IMG))
607 :     | START_APPLET TextList END_APPLET
608 :     (HTMLAttrs.mkAPPLET(ctx START_APPLETleft, START_APPLET, TextList))
609 :     | START_FONT TextList END_FONT
610 :     (HTMLAttrs.mkFONT(ctx START_FONTleft, START_FONT, TextList))
611 :     | START_BASEFONT TextList END_BASEFONT
612 :     (HTMLAttrs.mkBASEFONT(
613 :     ctx START_BASEFONTleft, START_BASEFONT, TextList)
614 :     )
615 :     | TAG_BR
616 :     (HTMLAttrs.mkBR(ctx TAG_BRleft, TAG_BR))
617 :     | START_MAP AreaList END_MAP
618 :     (HTMLAttrs.mkMAP(ctx START_MAPleft, START_MAP, AreaList))
619 :     | TAG_PARAM
620 :     (HTMLAttrs.mkPARAM(ctx TAG_PARAMleft, TAG_PARAM))
621 :    
622 :     AreaList
623 :     : (* empty *)
624 :     ([])
625 :     | TAG_AREA AreaList
626 :     (HTMLAttrs.mkAREA(ctx TAG_AREAleft, TAG_AREA) :: AreaList)
627 :    
628 :     Form
629 :     : TAG_INPUT
630 :     (HTMLAttrs.mkINPUT(ctx TAG_INPUTleft, TAG_INPUT))
631 :     | START_SELECT OptionList END_SELECT
632 :     (HTMLAttrs.mkSELECT(ctx START_SELECTleft, START_SELECT, OptionList))
633 :     | START_TEXTAREA PCData END_TEXTAREA
634 :     (HTMLAttrs.mkTEXTAREA(
635 :     ctx START_TEXTAREAleft, START_TEXTAREA,
636 :     PCData)
637 :     )
638 :    
639 :     OptionList
640 :     : (* empty *)
641 :     ([])
642 :     | START_OPTION PCData EndOPTION OptionList
643 :     (HTMLAttrs.mkOPTION(ctx START_OPTIONleft, START_OPTION, PCData)
644 :     :: OptionList
645 :     )
646 :    
647 :     EndOPTION
648 :     : (* empty *)
649 :     ()
650 :     | END_OPTION
651 :     ()
652 :    
653 :    
654 :     (*** PCDATA list ***)
655 :    
656 :     PCData
657 :     : PCDataList
658 :     (concat PCDataList)
659 :    
660 :     PCDataList
661 :     : (* empty *)
662 :     ([])
663 :     | PCDataElem PCDataList
664 :     (PCDataElem :: PCDataList)
665 :    
666 :     PCDataElem
667 :     : PCDATA
668 :     (PCDATA)
669 :     | CHAR_REF
670 :     (CHAR_REF)
671 :     | ENTITY_REF
672 :     (ENTITY_REF)

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