mediawiki-extensions-Math/math/texvc.ml

59 lines
2 KiB
OCaml
Raw Normal View History

(* vim: set sw=8 ts=8 et: *)
exception LexerException of string
(* *)
let lexer_token_safe lexbuf =
try Lexer.token lexbuf
with Failure s -> raise (LexerException s)
(* *)
let render tmppath finalpath tree backcolor =
let outtex = Util.mapjoin Texutil.render_tex tree in
let md5 = Digest.to_hex (Digest.string outtex) in
begin
let mathml = Mathml.render tree
and html = Html.render tree
in print_string (match (html,!Html.conservativeness,mathml) with
None,_,None -> "+" ^ md5
| Some h,Html.CONSERVATIVE,None -> "c" ^ md5 ^ h
| Some h,Html.MODERATE,None -> "m" ^ md5 ^ h
| Some h,Html.LIBERAL,None -> "l" ^ md5 ^ h
| Some h,Html.CONSERVATIVE,Some m -> "C" ^ md5 ^ h ^ "\000" ^ m
| Some h,Html.MODERATE,Some m -> "M" ^ md5 ^ h ^ "\000" ^ m
| Some h,Html.LIBERAL,Some m -> "L" ^ md5 ^ h ^ "\000" ^ m
| None,_,Some m -> "X" ^ md5 ^ m
);
Render.render tmppath finalpath outtex md5 backcolor
end
(* TODO: document
* Arguments:
* 1st :
* 2nd :
* 3rd :
* 4th : encoding (Default: UTF-8)
* 5th : color (Default: rgb 1.0 1.0 1.0)
*
* Output one character:
* S : Parsing error
* E : Lexer exception raised
* F : TeX function not recognized
* - : Generic/Default failure code. Might be an invalid argument,
* output file already exist, a problem with an external
* command ...
* *)
let _ =
Texutil.set_encoding (try Sys.argv.(4) with _ -> "UTF-8");
try render Sys.argv.(1) Sys.argv.(2) (
Parser.tex_expr lexer_token_safe (
Lexing.from_string Sys.argv.(3))
) (try Sys.argv.(5) with _ -> "rgb 1.0 1.0 1.0")
with Parsing.Parse_error -> print_string "S"
| LexerException _ -> print_string "E"
| Texutil.Illegal_tex_function s -> print_string ("F" ^ s)
| Util.FileAlreadyExists -> print_string "-"
| Invalid_argument _ -> print_string "-"
| Failure _ -> print_string "-"
| Render.ExternalCommandFailure s -> ()
| _ -> print_string "-"