(* 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 tree =
    let outtex = Util.mapjoin Texutil.render_tex tree in
    begin
    print_string ("+" ^ outtex);
    end

(* TODO: document
 * Arguments:
 * 1st : tex input string
 *
 * Output one character:
 *  E : Lexer exception raised
 *  F : TeX function not recognized
 *  - : Generic/Default failure code. Might be an invalid argument,
 *  S : Parsing error
 *      output file already exist, a problem with an external
 *      command ...
 *)
let _ =
    try render (
        Parser.tex_expr lexer_token_safe (
            Lexing.from_string Sys.argv.(1))
        )
    with Parsing.Parse_error -> print_string "S"
       | LexerException _ -> print_string "E"
       | Texutil.Illegal_tex_function s -> print_string ("F" ^ s)
       | Invalid_argument _ -> print_string "-"
       | Failure _ -> print_string "-"
       | _ -> print_string "-"