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-gram
ViewVC logotype

Annotation of /smlnj-lib/releases/release-110.63/HTML/html-gram

Parent Directory Parent Directory | Revision Log Revision Log


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

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