Sys.Signals module for a Variant type of signals (and a set_signal function that...
[ocaml.git] / ocamldoc / odoc_text_parser.mly
blob41bebea6f23cad43d54caa0403fa643f9938b62a
1 %{
2 (***********************************************************************)
3 (*                             OCamldoc                                *)
4 (*                                                                     *)
5 (*            Maxence Guesdon, projet Cristal, INRIA Rocquencourt      *)
6 (*                                                                     *)
7 (*  Copyright 2001 Institut National de Recherche en Informatique et   *)
8 (*  en Automatique.  All rights reserved.  This file is distributed    *)
9 (*  under the terms of the Q Public License version 1.0.               *)
10 (*                                                                     *)
11 (***********************************************************************)
13 (* $Id$ *)
15 open Odoc_types
17 let identchar =
18   "[A-Z a-z_\192-\214\216-\246\248-\255'0-9]"
19 let blank = "[ \010\013\009\012]"
21 let remove_beginning_blanks s =
22   Str.global_replace (Str.regexp ("^"^blank^"+")) "" s
24 let remove_trailing_blanks s =
25   Str.global_replace (Str.regexp (blank^"+$")) "" s
27 let print_DEBUG s = print_string s; print_newline ()
30 %token ERROR
31 %token END
32 %token <int * string option> Title
33 %token BOLD
34 %token EMP
35 %token CENTER
36 %token LEFT
37 %token RIGHT
38 %token ITALIC
39 %token <string> CUSTOM
40 %token LIST
41 %token ENUM
42 %token ITEM
43 %token LINK
44 %token CODE
45 %token END_CODE
46 %token CODE_PRE
47 %token END_CODE_PRE
48 %token VERB
49 %token END_VERB
50 %token LATEX
51 %token END_LATEX
53 %token ELE_REF
54 %token VAL_REF
55 %token TYP_REF
56 %token EXC_REF
57 %token MOD_REF
58 %token MODT_REF
59 %token CLA_REF
60 %token CLT_REF
61 %token ATT_REF
62 %token MET_REF
63 %token SEC_REF
64 %token MOD_LIST_REF
65 %token INDEX_LIST
67 %token SUPERSCRIPT
68 %token SUBSCRIPT
70 %token BEGIN_SHORTCUT_LIST_ITEM
71 %token BEGIN_SHORTCUT_ENUM_ITEM
72 %token SHORTCUT_LIST_ITEM
73 %token SHORTCUT_ENUM_ITEM
74 %token END_SHORTCUT_LIST
76 %token BLANK_LINE
78 %token EOF
79 %token <string> Char
81 /* Start Symbols */
82 %start main
83 %type <Odoc_types.text> main
86 main:
87   text EOF { $1 }
88 | EOF { [Raw ""] }
91 text:
92   text_element_list { $1 }
95 text_element_list:
96   text_element { [ $1 ] }
97 | text_element text_element_list { $1 :: $2 }
100 text_element:
101   Title text END { let n, l_opt = $1 in Title (n, l_opt, $2) }
102 | BOLD text END { Bold $2 }
103 | ITALIC text END { Italic $2 }
104 | CUSTOM text END { Custom ($1, $2) }
105 | EMP text END { Emphasize $2 }
106 | SUPERSCRIPT text END { Superscript $2 }
107 | SUBSCRIPT text END { Subscript $2 }
108 | CENTER text END { Center $2 }
109 | LEFT text END { Left $2 }
110 | RIGHT text END { Right $2 }
111 | LIST list END { List $2 }
112 | ENUM list END { Enum $2 }
113 | CODE string END_CODE { Code $2 }
114 | CODE_PRE string END_CODE_PRE { CodePre $2 }
115 | ELE_REF string END {
116       let s2 = remove_beginning_blanks $2 in
117       let s3 = remove_trailing_blanks s2 in
118       Ref (s3, None)
119      }
120 | VAL_REF string END {
121       let s2 = remove_beginning_blanks $2 in
122       let s3 = remove_trailing_blanks s2 in
123       Ref (s3, Some RK_value)
124      }
125 | TYP_REF string END {
126       let s2 = remove_beginning_blanks $2 in
127       let s3 = remove_trailing_blanks s2 in
128       Ref (s3, Some RK_type)
129      }
130 | EXC_REF string END {
131       let s2 = remove_beginning_blanks $2 in
132       let s3 = remove_trailing_blanks s2 in
133       Ref (s3, Some RK_exception)
134      }
135 | MOD_REF string END {
136       let s2 = remove_beginning_blanks $2 in
137       let s3 = remove_trailing_blanks s2 in
138       Ref (s3, Some RK_module)
139      }
140 | MODT_REF string END {
141       let s2 = remove_beginning_blanks $2 in
142       let s3 = remove_trailing_blanks s2 in
143       Ref (s3, Some RK_module_type)
144      }
145 | CLA_REF string END {
146       let s2 = remove_beginning_blanks $2 in
147       let s3 = remove_trailing_blanks s2 in
148       Ref (s3, Some RK_class)
149      }
150 | CLT_REF string END {
151       let s2 = remove_beginning_blanks $2 in
152       let s3 = remove_trailing_blanks s2 in
153       Ref (s3, Some RK_class_type)
154      }
155 | ATT_REF string END {
156       let s2 = remove_beginning_blanks $2 in
157       let s3 = remove_trailing_blanks s2 in
158       Ref (s3, Some RK_attribute)
159      }
160 | MET_REF string END {
161       let s2 = remove_beginning_blanks $2 in
162       let s3 = remove_trailing_blanks s2 in
163       Ref (s3, Some RK_method)
164      }
165 | SEC_REF string END {
166       let s2 = remove_beginning_blanks $2 in
167       let s3 = remove_trailing_blanks s2 in
168       Ref (s3, Some (RK_section []))
169      }
170 | MOD_LIST_REF string END {
171       let s2 = remove_beginning_blanks $2 in
172       let s3 = remove_trailing_blanks s2 in
173       let l = Odoc_misc.split_with_blanks s3 in
174       Module_list l
175      }
176 | INDEX_LIST { Index_list }
177 | VERB string END_VERB { Verbatim $2 }
178 | LATEX string END_LATEX { Latex $2 }
179 | LINK string END text END { Link ($2, $4) }
180 | BLANK_LINE { Newline }
181 | BEGIN_SHORTCUT_LIST_ITEM shortcut_list END_SHORTCUT_LIST { List $2 }
182 | BEGIN_SHORTCUT_LIST_ITEM shortcut_list EOF { List $2 }
183 | BEGIN_SHORTCUT_ENUM_ITEM shortcut_enum END_SHORTCUT_LIST { Enum $2 }
184 | BEGIN_SHORTCUT_ENUM_ITEM shortcut_enum EOF { Enum $2 }
185 | string { Raw $1 }
188 list:
189 | string { [] (* A VOIR : un test pour voir qu'il n'y a que des blancs *) }
190 | string list { $2 }
191 | list string  { $1 }
192 | item { [ $1 ] }
193 | item list { $1 :: $2 }
197 item:
198     ITEM text END { $2 }
201 shortcut_list:
202     text shortcut_list2  { $1 :: $2 }
203 | text { [ $1 ] }
206 shortcut_list2:
207 | SHORTCUT_LIST_ITEM shortcut_list { $2 }
210 shortcut_enum:
211     text shortcut_enum2  { $1 :: $2 }
212 | text { [ $1 ] }
215 shortcut_enum2:
216 | SHORTCUT_ENUM_ITEM shortcut_enum { $2 }
220 string:
221     Char { $1 }
222 | Char string { $1^$2 }