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

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