+++ /dev/null
-%{
-
-module S = Str
-module L = List
-module T = Table
-
-let split s =
- S.split (S.regexp "[ \r\n\t]+") s
-
-let mk_css_atom s rs =
- let cs = split s in
- let map (b, (x1, x2)) = cs, b, x1, x2 in
- L.map map rs
-
-let mk_string_atom s rs =
- let map (b, (x1, x2)) = s, b, x1, x2 in
- L.map map rs
-
-%}
-
-%token <int> NUM
-%token <string> TEXT
-%token SPACE NAME TABLE CSS URI EXT SR OC CC OB CB PS CF OP CP AT EOF
-
-%start script
-%type <(string * string) list * (string * Table.table * Table.css Attr.atoms * Table.uri Attr.atoms * Table.ext Attr.atoms) list> script
-
-%%
-
-space:
- | SPACE TEXT TEXT { $2, $3 }
-;
-
-spaces:
- | { [] }
- | space spaces { $1 :: $2 }
-;
-
-text:
- | TEXT { T.Plain $1 }
- | AT OP TEXT TEXT CP { T.Link (true, $3, $4) }
- | AT AT OP TEXT TEXT CP { T.Link (false, $4, $5) }
- | AT TEXT { T.Link (true, $2, $2) }
- | AT AT TEXT { T.Link (false, $3, $3) }
-;
-
-texts:
- | text { [$1] }
- | text PS texts { $1 :: T.Plain " " :: $3 }
- | text CF texts { $1 :: $3 }
-;
-
-key:
- | texts { T.Text $1 }
- | SR { T.Glue None }
- | NUM { T.Glue (Some $1) }
-;
-
-css:
- | { [] }
- | CSS TEXT { split $2 }
-;
-
-uri:
- | { "" }
- | URI TEXT { $2 }
-;
-
-ext:
- | { "" }
- | EXT TEXT { $2 }
-;
-
-table:
- | css uri ext name key { T.mk_key $5 $1 $2 $3 $4 }
- | css uri ext OC tables CC { T.mk_line false $5 $1 $2 $3 "" }
- | css uri ext OB tables CB { T.mk_line true $5 $1 $2 $3 "" }
-;
-
-tables:
- | { [] }
- | table tables { $1 :: $2 }
-;
-
-name:
- | { "" }
- | NAME TEXT { $2 }
-;
-
-interval:
- | NUM { Some $1, Some $1 }
- | SR { None, None }
- | NUM NUM { Some $1, Some $2 }
- | NUM SR { Some $1, None }
- | SR NUM { None, Some $2 }
- | SR SR { None, None }
-;
-
-range:
- | OB interval CB { true, $2 }
- | OC interval CC { false, $2 }
-;
-
-ranges:
- | { [] }
- | range ranges { $1 :: $2 }
-;
-
-catom:
- | CSS TEXT ranges { mk_css_atom $2 $3 }
-;
-
-catoms:
- | { [] }
- | catom catoms { $1 @ $2 }
-;
-
-uatom:
- | URI TEXT ranges { mk_string_atom $2 $3 }
-;
-
-uatoms:
- | { [] }
- | uatom uatoms { $1 @ $2 }
-;
-
-xatom:
- | EXT TEXT ranges { mk_string_atom $2 $3 }
-;
-
-xatoms:
- | { [] }
- | xatom xatoms { $1 @ $2 }
-;
-
-directive:
- | name TABLE table catoms uatoms xatoms { $1, $3, $4, $5, $6 }
-;
-
-directives:
- | { [] }
- | directive directives { $1 :: $2 }
-;
-
-script:
- | spaces directives EOF { $1, $2 }
-;