diff -ruN math.orig/html.ml math/html.ml --- math.orig/html.ml 2003-02-13 18:43:37.000000000 +0100 +++ math/html.ml 2003-03-07 17:03:46.000000000 +0100 @@ -56,6 +56,8 @@ | TEX_INFIX _::_ -> raise Too_difficult_for_html | TEX_INFIXh _::_ -> raise Too_difficult_for_html | TEX_MATRIX _::_ -> raise Too_difficult_for_html + | TEX_LR _::_ -> raise Too_difficult_for_html + | TEX_BIG _::_ -> raise Too_difficult_for_html | [] -> "" and html_render_size ctx = function TEX_LITERAL (HTMLABLE_BIG (_,sh)) -> true,sh @@ -91,6 +93,8 @@ | TEX_FUN2sq _::_ -> raise Too_difficult_for_html | TEX_INFIX _::_ -> raise Too_difficult_for_html | TEX_MATRIX _::_ -> raise Too_difficult_for_html + | TEX_LR _::_ -> raise Too_difficult_for_html + | TEX_BIG _::_ -> raise Too_difficult_for_html | [] -> [] let rec html_render_table = function diff -ruN math.orig/lexer.mll math/lexer.mll --- math.orig/lexer.mll 2003-02-02 04:16:07.000000000 +0100 +++ math/lexer.mll 2003-03-07 15:59:38.000000000 +0100 @@ -7,8 +7,10 @@ let alpha = ['a'-'z' 'A'-'Z'] let literal_id = ['a'-'z' 'A'-'Z'] let literal_mn = ['0'-'9'] -let literal_uf_lt = [',' '(' ')' ':' ';' '?' '.' '!' '\''] -let literal_uf_op = ['+' '-' '*' '=' '/' '|'] +let literal_uf_lt = [',' ':' ';' '?' '!' '\''] +let delimiter_uf_lt = ['(' ')' '.'] +let literal_uf_op = ['+' '-' '*' '=' '|'] +let delimiter_uf_op = ['/'] let boxchars = ['0'-'9' 'a'-'z' 'A'-'Z' '+' '-' '*' ',' '=' '(' ')' ':' '/' ';' '?' '.' '!' ' ' '\128'-'\255'] let aboxchars = ['0'-'9' 'a'-'z' 'A'-'Z' '+' '-' '*' ',' '=' '(' ')' ':' '/' ';' '?' '.' '!' ' '] @@ -44,6 +46,7 @@ | literal_id { let str = Lexing.lexeme lexbuf in LITERAL (MHTMLABLEC (FONT_IT, str,str,MI,str)) } | literal_mn { let str = Lexing.lexeme lexbuf in LITERAL (MHTMLABLEC (FONT_RM, str,str,MN,str)) } | literal_uf_lt { let str = Lexing.lexeme lexbuf in LITERAL (HTMLABLEC (FONT_UFH, str,str)) } + | delimiter_uf_lt { let str = Lexing.lexeme lexbuf in DELIMITER (HTMLABLEC (FONT_UFH, str,str)) } | literal_uf_op { let str = Lexing.lexeme lexbuf in LITERAL (MHTMLABLEC (FONT_UFH, str," "^str^" ",MO,str)) } | "\\" alpha + { Texutil.find (Lexing.lexeme lexbuf) } | "\\sqrt" space * "[" { FUN_AR1opt "\\sqrt" } @@ -51,9 +54,9 @@ | "\\ " { LITERAL (HTMLABLE (FONT_UF, "\\ "," ")) } | "\\;" { LITERAL (HTMLABLE (FONT_UF, "\\;"," ")) } | "\\!" { LITERAL (TEX_ONLY "\\!") } - | "\\{" { LITERAL (HTMLABLEC(FONT_UFH,"\\{","{")) } - | "\\}" { LITERAL (HTMLABLEC(FONT_UFH,"\\}","}")) } - | "\\|" { LITERAL (HTMLABLE (FONT_UFH,"\\|","||")) } + | "\\{" { DELIMITER (HTMLABLEC(FONT_UFH,"\\{","{")) } + | "\\}" { DELIMITER (HTMLABLEC(FONT_UFH,"\\}","}")) } + | "\\|" { DELIMITER (HTMLABLE (FONT_UFH,"\\|","||")) } | "\\_" { LITERAL (HTMLABLEC(FONT_UFH,"\\_","_")) } | "\\#" { LITERAL (HTMLABLE (FONT_UFH,"\\#","#")) } | "\\%" { LITERAL (HTMLABLE (FONT_UFH,"\\%","%")) } @@ -71,11 +74,13 @@ | "\\end{vmatrix}" { END_VMATRIX } | "\\begin{Vmatrix}" { Texutil.tex_use_ams(); BEGIN_VVMATRIX } | "\\end{Vmatrix}" { END_VVMATRIX } + | "\\begin{cases}" { Texutil.tex_use_ams(); BEGIN_CASES } + | "\\end{cases}" { END_CASES } | '>' { LITERAL (HTMLABLEC(FONT_UFH,">"," > ")) } | '<' { LITERAL (HTMLABLEC(FONT_UFH,"<"," < ")) } | '%' { LITERAL (HTMLABLEC(FONT_UFH,"\\%","%")) } | '~' { LITERAL (HTMLABLE (FONT_UF, "~"," ")) } - | '[' { LITERAL (HTMLABLEC(FONT_UFH,"[","[")) } + | '[' { DELIMITER (HTMLABLEC(FONT_UFH,"[","[")) } | ']' { SQ_CLOSE } | '{' { CURLY_OPEN } | '}' { CURLY_CLOSE } diff -ruN math.orig/parser.mly math/parser.mly --- math.orig/parser.mly 2003-01-06 02:07:17.000000000 +0100 +++ math/parser.mly 2003-03-07 17:02:00.000000000 +0100 @@ -1,17 +1,20 @@ %{ open Tex open Render_info + + let sq_close_ri = HTMLABLEC(FONT_UFH,"]", "]") %} -%token LITERAL -%token FUN_AR2 FUN_INFIX FUN_AR1 DECL FUN_AR1opt +%token LITERAL DELIMITER +%token FUN_AR2 FUN_INFIX FUN_AR1 DECL FUN_AR1opt BIG %token BOX %token FUN_AR1hl %token FUN_AR1hf DECLh %token Tex.t->string*string*string)> FUN_AR2h %token Tex.t list->string*string*string)> FUN_INFIXh %token EOF CURLY_OPEN CURLY_CLOSE SUB SUP SQ_CLOSE NEXT_CELL NEXT_ROW -%token BEGIN__MATRIX BEGIN_PMATRIX BEGIN_BMATRIX BEGIN_BBMATRIX BEGIN_VMATRIX BEGIN_VVMATRIX -%token END__MATRIX END_PMATRIX END_BMATRIX END_BBMATRIX END_VMATRIX END_VVMATRIX +%token BEGIN__MATRIX BEGIN_PMATRIX BEGIN_BMATRIX BEGIN_BBMATRIX BEGIN_VMATRIX BEGIN_VVMATRIX BEGIN_CASES +%token END__MATRIX END_PMATRIX END_BMATRIX END_BBMATRIX END_VMATRIX END_VVMATRIX END_CASES +%token LEFT RIGHT %type tex_expr %start tex_expr @@ -43,7 +46,7 @@ litsq_dq: litsq_zq SUB lit { $1,$3 } litsq_zq: - | SQ_CLOSE { TEX_LITERAL (HTMLABLEC(FONT_UFH,"]", "]")) } + | SQ_CLOSE { TEX_LITERAL sq_close_ri } expr_nosqc: /* */ { [] } | lit_aq expr_nosqc { $1 :: $2 } @@ -59,8 +62,17 @@ lit SUP lit { $1,$3 } lit_dq: lit SUB lit { $1,$3 } +left: + LEFT DELIMITER { $2 } + | LEFT SQ_CLOSE { sq_close_ri } +right: + RIGHT DELIMITER { $2 } + | RIGHT SQ_CLOSE { sq_close_ri } lit: LITERAL { TEX_LITERAL $1 } + | DELIMITER { TEX_LITERAL $1 } + | BIG DELIMITER { TEX_BIG ($1,$2) } + | left expr right { TEX_LR ($1,$3,$2) } | FUN_AR1 lit { TEX_FUN1($1,$2) } | FUN_AR1hl lit { let t,h=$1 in TEX_FUN1hl(t,h,$2) } | FUN_AR1hf lit { let t,h=$1 in TEX_FUN1hf(t,h,$2) } @@ -80,6 +92,7 @@ | BEGIN_BBMATRIX matrix END_BBMATRIX { TEX_MATRIX ("Bmatrix", $2) } | BEGIN_VMATRIX matrix END_VMATRIX { TEX_MATRIX ("vmatrix", $2) } | BEGIN_VVMATRIX matrix END_VVMATRIX { TEX_MATRIX ("Vmatrix", $2) } + | BEGIN_CASES matrix END_CASES { TEX_MATRIX ("cases", $2) } matrix: line { [$1] } | line NEXT_ROW matrix { $1::$3 } diff -ruN math.orig/tex.mli math/tex.mli --- math.orig/tex.mli 2002-12-26 22:33:02.000000000 +0100 +++ math/tex.mli 2003-03-07 17:02:35.000000000 +0100 @@ -4,7 +4,9 @@ | TEX_FQ of t * t * t | TEX_DQ of t * t | TEX_UQ of t * t + | TEX_LR of Render_info.t * Render_info.t * t list | TEX_BOX of string * string + | TEX_BIG of string * Render_info.t | TEX_FUN1 of string * t | TEX_FUN2 of string * t * t | TEX_INFIX of string * t list * t list diff -ruN math.orig/texutil.ml math/texutil.ml --- math.orig/texutil.ml 2003-02-02 04:16:07.000000000 +0100 +++ math/texutil.ml 2003-03-07 17:04:08.000000000 +0100 @@ -26,7 +26,9 @@ | TEX_INFIX (s,ll,rl) -> "{" ^ (mapjoin render_tex ll) ^ " " ^ s ^ "" ^ (mapjoin render_tex rl) ^ "}" | TEX_INFIXh (s,_,ll,rl) -> "{" ^ (mapjoin render_tex ll) ^ " " ^ s ^ "" ^ (mapjoin render_tex rl) ^ "}" | TEX_BOX (bt,s) -> "{"^bt^"{" ^ s ^ "}}" + | TEX_BIG (bt,d) -> "{"^bt^(tex_part d)^"}" | TEX_MATRIX (t,rows) -> "{\\begin{"^t^"}"^(mapjoine "\\\\" (mapjoine "&" (mapjoin render_tex)) rows)^"\\end{"^t^"}}" + | TEX_LR (l,r,tl) -> "\\left "^(tex_part l)^(mapjoin render_tex tl)^"\\right "^(tex_part r) (* Dynamic loading*) type encoding_t = LATIN1 | LATIN2 | UTF8 @@ -134,18 +136,18 @@ | "\\longmapsto" -> LITERAL (HTMLABLE (FONT_UF, "\\longmapsto ", "→")) | "\\Longleftarrow" -> LITERAL (HTMLABLE (FONT_UF, "\\Longleftarrow ", "⇐")) | "\\Longrightarrow" -> LITERAL (HTMLABLE (FONT_UF, "\\Longrightarrow ", "⇒")) - | "\\uarr" -> LITERAL (HTMLABLEM (FONT_UF, "\\uparrow ", "↑")) - | "\\uparrow" -> LITERAL (HTMLABLEM (FONT_UF, "\\uparrow ", "↑")) - | "\\uArr" -> LITERAL (HTMLABLE (FONT_UF, "\\Uparrow ", "⇑")) - | "\\Uarr" -> LITERAL (HTMLABLE (FONT_UF, "\\Uparrow ", "⇑")) - | "\\Uparrow" -> LITERAL (HTMLABLE (FONT_UF, "\\Uparrow ", "⇑")) - | "\\darr" -> LITERAL (HTMLABLEM (FONT_UF, "\\downarrow ", "↓")) - | "\\downarrow" -> LITERAL (HTMLABLEM (FONT_UF, "\\downarrow ", "↓")) - | "\\dArr" -> LITERAL (HTMLABLE (FONT_UF, "\\Downarrow ", "⇓")) - | "\\Darr" -> LITERAL (HTMLABLE (FONT_UF, "\\Downarrow ", "⇓")) - | "\\Downarrow" -> LITERAL (HTMLABLE (FONT_UF, "\\Downarrow ", "⇓")) - | "\\updownarrow" -> LITERAL (TEX_ONLY "\\updownarrow ") - | "\\Updownarrow" -> LITERAL (TEX_ONLY "\\Updownarrow ") + | "\\uarr" -> DELIMITER (HTMLABLEM (FONT_UF, "\\uparrow ", "↑")) + | "\\uparrow" -> DELIMITER (HTMLABLEM (FONT_UF, "\\uparrow ", "↑")) + | "\\uArr" -> DELIMITER (HTMLABLE (FONT_UF, "\\Uparrow ", "⇑")) + | "\\Uarr" -> DELIMITER (HTMLABLE (FONT_UF, "\\Uparrow ", "⇑")) + | "\\Uparrow" -> DELIMITER (HTMLABLE (FONT_UF, "\\Uparrow ", "⇑")) + | "\\darr" -> DELIMITER (HTMLABLEM (FONT_UF, "\\downarrow ", "↓")) + | "\\downarrow" -> DELIMITER (HTMLABLEM (FONT_UF, "\\downarrow ", "↓")) + | "\\dArr" -> DELIMITER (HTMLABLE (FONT_UF, "\\Downarrow ", "⇓")) + | "\\Darr" -> DELIMITER (HTMLABLE (FONT_UF, "\\Downarrow ", "⇓")) + | "\\Downarrow" -> DELIMITER (HTMLABLE (FONT_UF, "\\Downarrow ", "⇓")) + | "\\updownarrow" -> DELIMITER (TEX_ONLY "\\updownarrow ") + | "\\Updownarrow" -> DELIMITER (TEX_ONLY "\\Updownarrow ") | "\\leftrightarrow" -> LITERAL (HTMLABLE (FONT_UF, "\\leftrightarrow ", "↔")) | "\\lrarr" -> LITERAL (HTMLABLE (FONT_UF, "\\leftrightarrow ", "↔")) | "\\harr" -> LITERAL (HTMLABLE (FONT_UF, "\\leftrightarrow ", "↔")) @@ -219,8 +221,13 @@ | "\\tanh" -> LITERAL (HTMLABLEC(FONT_UFH,"\\tanh ","tanh")) | "\\sec" -> LITERAL (HTMLABLEC(FONT_UFH,"\\sec ","sec")) | "\\csc" -> LITERAL (HTMLABLEC(FONT_UFH,"\\csc ","csc")) - | "\\arcsin" -> LITERAL (HTMLABLEC(FONT_UFH,"\\arcsin ", "arcsin")) + | "\\arcsin" -> LITERAL (HTMLABLEC(FONT_UFH,"\\arcsin ","arcsin")) | "\\arctan" -> LITERAL (HTMLABLEC(FONT_UFH,"\\arctan ","arctan")) + | "\\arccos" -> (tex_use_ams (); LITERAL (HTMLABLEC(FONT_UFH,"\\mathop{\\mathrm{arccos}}","arccos"))) + | "\\arccot" -> (tex_use_ams (); LITERAL (HTMLABLEC(FONT_UFH,"\\mathop{\\mathrm{arccot}}","arccot"))) + | "\\arcsec" -> (tex_use_ams (); LITERAL (HTMLABLEC(FONT_UFH,"\\mathop{\\mathrm{arcsec}}","arcsec"))) + | "\\arccsc" -> (tex_use_ams (); LITERAL (HTMLABLEC(FONT_UFH,"\\mathop{\\mathrm{arccsc}}","arccsc"))) + | "\\sgn" -> (tex_use_ams (); LITERAL (HTMLABLEC(FONT_UFH,"\\mathop{\\mathrm{sgn}}","sgn"))) | "\\cot" -> LITERAL (HTMLABLEC(FONT_UFH,"\\cot ","cot")) | "\\coth" -> LITERAL (HTMLABLEC(FONT_UFH,"\\coth ","coth")) | "\\log" -> LITERAL (HTMLABLEC(FONT_UFH,"\\log ", "log")) @@ -258,12 +265,12 @@ | "\\subseteq" -> LITERAL (HTMLABLE (FONT_UF, "\\subseteq ", "⊆")) | "\\perp" -> LITERAL (HTMLABLE (FONT_UF, "\\perp ", "⊥")) | "\\bot" -> LITERAL (HTMLABLE (FONT_UF, "\\bot ", "⊥")) - | "\\lfloor" -> LITERAL (HTMLABLE (FONT_UF, "\\lfloor ", "⌊")) - | "\\rfloor" -> LITERAL (HTMLABLE (FONT_UF, "\\rfloor ", "⌋")) - | "\\lceil" -> LITERAL (HTMLABLE (FONT_UF, "\\lceil ", "⌈")) - | "\\rceil" -> LITERAL (HTMLABLE (FONT_UF, "\\rceil ", "⌉")) - | "\\lbrace" -> LITERAL (HTMLABLEC(FONT_UFH, "\\lbrace ", "{")) - | "\\rbrace" -> LITERAL (HTMLABLEC(FONT_UFH, "\\rbrace ", "}")) + | "\\lfloor" -> DELIMITER (HTMLABLE (FONT_UF, "\\lfloor ", "⌊")) + | "\\rfloor" -> DELIMITER (HTMLABLE (FONT_UF, "\\rfloor ", "⌋")) + | "\\lceil" -> DELIMITER (HTMLABLE (FONT_UF, "\\lceil ", "⌈")) + | "\\rceil" -> DELIMITER (HTMLABLE (FONT_UF, "\\rceil ", "⌉")) + | "\\lbrace" -> DELIMITER (HTMLABLEC(FONT_UFH, "\\lbrace ", "{")) + | "\\rbrace" -> DELIMITER (HTMLABLEC(FONT_UFH, "\\rbrace ", "}")) | "\\infty" -> LITERAL (HTMLABLEM(FONT_UF, "\\infty ", "∞")) | "\\infin" -> LITERAL (HTMLABLEM(FONT_UF, "\\infty ", "∞")) | "\\isin" -> LITERAL (HTMLABLE (FONT_UF, "\\in ", "∈")) @@ -283,7 +290,7 @@ | "\\Im" -> LITERAL (HTMLABLE (FONT_UF, "\\Im ", "ℑ")) | "\\image" -> LITERAL (HTMLABLE (FONT_UF, "\\Im ", "ℑ")) | "\\prime" -> LITERAL (HTMLABLE (FONT_UFH,"\\prime ", "′")) - | "\\backslash" -> LITERAL (HTMLABLEM(FONT_UFH,"\\backslash ", "\\")) + | "\\backslash" -> DELIMITER (HTMLABLEM(FONT_UFH,"\\backslash ", "\\")) | "\\setminus" -> LITERAL (HTMLABLEM(FONT_UFH,"\\setminus ", "\\")) | "\\times" -> LITERAL (HTMLABLEM(FONT_UFH,"\\times ", "×")) | "\\pm" -> LITERAL (HTMLABLEM(FONT_UFH,"\\pm ", "±")) @@ -313,12 +320,13 @@ | "\\dots" -> LITERAL (HTMLABLEM(FONT_UFH,"\\dots ", "...")) | "\\quad" -> LITERAL (HTMLABLE (FONT_UF, "\\quad ","  ")) | "\\qquad" -> LITERAL (HTMLABLE (FONT_UF, "\\qquad ","    ")) - | "\\mid" -> LITERAL (HTMLABLEM(FONT_UFH,"\\mid ", " | ")) + | "\\mid" -> DELIMITER (HTMLABLEM(FONT_UFH,"\\mid ", " | ")) | "\\neg" -> LITERAL (HTMLABLEM(FONT_UFH,"\\neg ", "¬")) - | "\\langle" -> LITERAL (HTMLABLE (FONT_UFH,"\\langle ","⟨")) - | "\\rangle" -> LITERAL (HTMLABLE (FONT_UFH,"\\rangle ","⟩")) - | "\\lang" -> LITERAL (HTMLABLE (FONT_UFH,"\\langle ","⟨")) - | "\\rang" -> LITERAL (HTMLABLE (FONT_UFH,"\\rangle ","⟩")) + | "\\langle" -> DELIMITER (HTMLABLE (FONT_UFH,"\\langle ","⟨")) + | "\\rangle" -> DELIMITER (HTMLABLE (FONT_UFH,"\\rangle ","⟩")) + | "\\lang" -> DELIMITER (HTMLABLE (FONT_UFH,"\\langle ","⟨")) + | "\\rang" -> DELIMITER (HTMLABLE (FONT_UFH,"\\rangle ","⟩")) + | "\\ddots" -> LITERAL (TEX_ONLY "\\ddots ") | "\\clubs" -> LITERAL (TEX_ONLY "\\clubsuit ") | "\\clubsuit" -> LITERAL (TEX_ONLY "\\clubsuit ") | "\\spades" -> LITERAL (TEX_ONLY "\\spadesuit ") @@ -341,8 +349,6 @@ | "\\N" -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{N}", "N"))) | "\\lVert" -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\lVert ", "||"))) | "\\rVert" -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\rVert ", "||"))) - | "\\left" -> LITERAL (HTMLABLE (FONT_UF, "\\left ", "")) - | "\\right" -> LITERAL (HTMLABLE (FONT_UF, "\\right ", "")) | "\\nmid" -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nmid ")) | "\\lesssim" -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lesssim ")) | "\\ngeq" -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ngeq ")) @@ -385,6 +391,8 @@ | "\\iiint" -> (tex_use_ams (); LITERAL (TEX_ONLY "\\iiint ")) | "\\iiiint" -> (tex_use_ams (); LITERAL (TEX_ONLY "\\iiiint ")) | "\\varnothing" -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varnothing ")) + | "\\left" -> LEFT + | "\\right" -> RIGHT | "\\hat" -> FUN_AR1 "\\hat " | "\\widehat" -> FUN_AR1 "\\widehat " | "\\overline" -> FUN_AR1 "\\overline " @@ -409,7 +417,6 @@ | "\\binom" -> FUN_AR2 "\\binom " | "\\frac" -> FUN_AR2h ("\\frac ", fun num den -> Html.html_render [num], "
", Html.html_render [den]) | "\\over" -> FUN_INFIXh ("\\over ", fun num den -> Html.html_render num, "
", Html.html_render den) -(* ? *) | "\\sqrt" -> FUN_AR1 "\\sqrt " | "\\pmod" -> FUN_AR1hl ("\\pmod ", ("(mod ", ")")) | "\\bmod" -> FUN_AR1hl ("\\bmod ", ("mod ", "")) @@ -422,8 +429,13 @@ | "\\it" -> DECLh ("\\it ", FONTFORCE_IT) | "\\cal" -> DECL "\\cal " | "\\bf" -> DECL "\\bf " + | "\\big" -> BIG "\\big " + | "\\Big" -> BIG "\\Big " + | "\\bigg" -> BIG "\\bigg " + | "\\Bigg" -> BIG "\\Bigg " | "\\mathit" -> (tex_use_ams (); FUN_AR1hf ("\\mathit ", FONTFORCE_IT)) | "\\mathrm" -> (tex_use_ams (); FUN_AR1hf ("\\mathrm ", FONTFORCE_RM)) + | "\\mathop" -> (tex_use_ams (); FUN_AR1 "\\mathop ") | "\\boldsymbol" -> (tex_use_ams (); FUN_AR1 "\\boldsymbol ") | "\\bold" -> (tex_use_ams (); FUN_AR1 "\\mathbf ") | "\\Bbb" -> (tex_use_ams (); FUN_AR1 "\\mathbb ") @@ -433,7 +445,6 @@ | "\\mathbb" -> (tex_use_ams (); FUN_AR1 "\\mathbb ") | "\\mathfrak" -> (tex_use_ams (); FUN_AR1 "\\mathfrak ") | "\\operatorname" -> (tex_use_ams (); FUN_AR1 "\\operatorname ") -(* + *) | "\\mbox" -> raise (Failure "malformatted \\mbox") | "\\vbox" -> raise (Failure "malformatted \\vbox") | "\\hbox" -> raise (Failure "malformatted \\hbox")