Return non-zero when LocalSettings.php is missing.
[mediawiki.git] / math / lexer.mll
blobe5bb1ddfba555ac905570478f49eeba2b6eb2dc3
2     open Parser
3     open Render_info
4     open Tex
6 let space = [' ' '\t' '\n' '\r']
7 let alpha = ['a'-'z' 'A'-'Z']
8 let literal_id = ['a'-'z' 'A'-'Z']
9 let literal_mn = ['0'-'9']
10 let literal_uf_lt = [',' ':' ';' '?' '!' '\'']
11 let delimiter_uf_lt = ['(' ')' '.']
12 let literal_uf_op = ['+' '-' '*' '=']
13 let delimiter_uf_op = ['/' '|']
14 let boxchars  = ['0'-'9' 'a'-'z' 'A'-'Z' '+' '-' '*' ',' '=' '(' ')' ':' '/' ';' '?' '.' '!' ' ' '\128'-'\255']
15 let aboxchars = ['0'-'9' 'a'-'z' 'A'-'Z' '+' '-' '*' ',' '=' '(' ')' ':' '/' ';' '?' '.' '!' ' ']
17 rule token = parse
18     space +                     { token lexbuf }
19   | "\\mbox" space * '{' aboxchars + '}'
20                                 { let str = Lexing.lexeme lexbuf in
21                                   let n = String.index str '{' + 1 in
22                                   BOX ("\\mbox", String.sub str n (String.length str - n - 1)) }
23   | "\\hbox" space * '{' aboxchars + '}'
24                                 { let str = Lexing.lexeme lexbuf in
25                                   let n = String.index str '{' + 1 in
26                                   BOX ("\\hbox", String.sub str n (String.length str - n - 1)) }
27   | "\\vbox" space * '{' aboxchars + '}'
28                                 { let str = Lexing.lexeme lexbuf in
29                                   let n = String.index str '{' + 1 in
30                                   BOX ("\\vbox", String.sub str n (String.length str - n - 1)) }
31   | "\\mbox" space * '{' boxchars + '}'
32                                 { let str = Lexing.lexeme lexbuf in
33                                   let n = String.index str '{' + 1 in
34                                   Texutil.tex_use_nonascii();
35                                   BOX ("\\mbox", String.sub str n (String.length str - n - 1)) }
36   | "\\hbox" space * '{' boxchars + '}'
37                                 { let str = Lexing.lexeme lexbuf in
38                                   let n = String.index str '{' + 1 in
39                                   Texutil.tex_use_nonascii();
40                                   BOX ("\\hbox", String.sub str n (String.length str - n - 1)) }
41   | "\\vbox" space * '{' boxchars + '}'
42                                 { let str = Lexing.lexeme lexbuf in
43                                   let n = String.index str '{' + 1 in
44                                   Texutil.tex_use_nonascii();
45                                   BOX ("\\vbox", String.sub str n (String.length str - n - 1)) }
46   | literal_id                  { let str = Lexing.lexeme lexbuf in LITERAL (MHTMLABLEC (FONT_IT, str,str,MI,str)) }
47   | literal_mn                  { let str = Lexing.lexeme lexbuf in LITERAL (MHTMLABLEC (FONT_RM, str,str,MN,str)) }
48   | literal_uf_lt               { let str = Lexing.lexeme lexbuf in LITERAL (HTMLABLEC (FONT_UFH, str,str)) }
49   | delimiter_uf_lt             { let str = Lexing.lexeme lexbuf in DELIMITER (HTMLABLEC (FONT_UFH, str,str)) }
50   | "-"                         { let str = Lexing.lexeme lexbuf in LITERAL (MHTMLABLEC (FONT_UFH,"-"," − ",MO,str))}
51   | literal_uf_op               { let str = Lexing.lexeme lexbuf in LITERAL (MHTMLABLEC (FONT_UFH, str," "^str^" ",MO,str)) }
52   | delimiter_uf_op             { let str = Lexing.lexeme lexbuf in DELIMITER (MHTMLABLEC (FONT_UFH, str," "^str^" ",MO,str)) }
53   | "\\" alpha +                { Texutil.find (Lexing.lexeme lexbuf) }
54   | "\\sqrt" space * "["        { FUN_AR1opt "\\sqrt" }
55   | "\\,"                       { LITERAL (HTMLABLE (FONT_UF, "\\,"," ")) }
56   | "\\ "                       { LITERAL (HTMLABLE (FONT_UF, "\\ "," ")) }
57   | "\\;"                       { LITERAL (HTMLABLE (FONT_UF, "\\;"," ")) }
58   | "\\!"                       { LITERAL (TEX_ONLY "\\!") }
59   | "\\{"                       { DELIMITER (HTMLABLEC(FONT_UFH,"\\{","{")) }
60   | "\\}"                       { DELIMITER (HTMLABLEC(FONT_UFH,"\\}","}")) }
61   | "\\|"                       { DELIMITER (HTMLABLE (FONT_UFH,"\\|","||")) }
62   | "\\_"                       { LITERAL (HTMLABLEC(FONT_UFH,"\\_","_")) }
63   | "\\#"                       { LITERAL (HTMLABLE (FONT_UFH,"\\#","#")) }
64   | "\\%"                       { LITERAL (HTMLABLE (FONT_UFH,"\\%","%")) }
65   | "\\$"                       { LITERAL (HTMLABLE (FONT_UFH,"\\$","$")) }
66   | "&"                         { NEXT_CELL }
67   | "\\\\"                      { NEXT_ROW }
68   | "\\begin{matrix}"           { Texutil.tex_use_ams(); BEGIN__MATRIX }
69   | "\\end{matrix}"             { END__MATRIX }
70   | "\\begin{pmatrix}"          { Texutil.tex_use_ams(); BEGIN_PMATRIX }
71   | "\\end{pmatrix}"            { END_PMATRIX }
72   | "\\begin{bmatrix}"          { Texutil.tex_use_ams(); BEGIN_BMATRIX }
73   | "\\end{bmatrix}"            { END_BMATRIX }
74   | "\\begin{Bmatrix}"          { Texutil.tex_use_ams(); BEGIN_BBMATRIX }
75   | "\\end{Bmatrix}"            { END_BBMATRIX }
76   | "\\begin{vmatrix}"          { Texutil.tex_use_ams(); BEGIN_VMATRIX }
77   | "\\end{vmatrix}"            { END_VMATRIX }
78   | "\\begin{Vmatrix}"          { Texutil.tex_use_ams(); BEGIN_VVMATRIX }
79   | "\\end{Vmatrix}"            { END_VVMATRIX }
80   | "\\begin{cases}"            { Texutil.tex_use_ams(); BEGIN_CASES }
81   | "\\end{cases}"              { END_CASES }
82   | '>'                         { LITERAL (HTMLABLEC(FONT_UFH,">"," > ")) }
83   | '<'                         { LITERAL (HTMLABLEC(FONT_UFH,"<"," &lt; ")) }
84   | '%'                         { LITERAL (HTMLABLEC(FONT_UFH,"\\%","%")) }
85   | '$'                         { LITERAL (HTMLABLEC(FONT_UFH,"\\$","$")) }
86   | '~'                         { LITERAL (HTMLABLE (FONT_UF, "~","&nbsp;")) }
87   | '['                         { DELIMITER (HTMLABLEC(FONT_UFH,"[","[")) }
88   | ']'                         { SQ_CLOSE }
89   | '{'                         { CURLY_OPEN }
90   | '}'                         { CURLY_CLOSE }
91   | '^'                         { SUP }
92   | '_'                         { SUB }
93   | eof                         { EOF }