PR#5497: better handling of special characters in printed code
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@12177 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02master
parent
f824b6a46c
commit
fd515e3a16
|
@ -86,77 +86,87 @@ class text =
|
||||||
"\\"^sec^"{"^s^"}\n"
|
"\\"^sec^"{"^s^"}\n"
|
||||||
with Not_found -> s
|
with Not_found -> s
|
||||||
|
|
||||||
(** Associations of strings to subsitute in latex code. *)
|
(** Associations of strings to substitute in latex code. *)
|
||||||
val mutable subst_strings = [
|
val subst_strings = List.map (fun (x, y) -> (Str.regexp x, y))
|
||||||
("MAXENCE"^"ZZZ", "\\$");
|
|
||||||
("MAXENCE"^"YYY", "\\&");
|
|
||||||
("MAXENCE"^"XXX", "{\\textbackslash}") ;
|
|
||||||
("à", "\\`a") ;
|
|
||||||
("â", "\\^a") ;
|
|
||||||
("é", "\\'e") ;
|
|
||||||
("è", "\\`e") ;
|
|
||||||
("ê", "\\^e") ;
|
|
||||||
("ë", "\\\"e") ;
|
|
||||||
("ç", "\\c{c}") ;
|
|
||||||
("ô", "\\^o") ;
|
|
||||||
("ö", "\\\"o") ;
|
|
||||||
("î", "\\^i") ;
|
|
||||||
("ï", "\\\"i") ;
|
|
||||||
("ù", "\\`u") ;
|
|
||||||
("û", "\\^u") ;
|
|
||||||
("%", "\\%") ;
|
|
||||||
("_", "\\_");
|
|
||||||
("\\.\\.\\.", "$\\ldots$");
|
|
||||||
("~", "\\~{}");
|
|
||||||
("#", "\\verb`#`");
|
|
||||||
("}", "\\}");
|
|
||||||
("{", "\\{");
|
|
||||||
("&", "\\&");
|
|
||||||
(">", "$>$");
|
|
||||||
("<", "$<$");
|
|
||||||
("=", "$=$");
|
|
||||||
(">=", "$\\geq$");
|
|
||||||
("<=", "$\\leq$");
|
|
||||||
("->", "$\\rightarrow$") ;
|
|
||||||
("<-", "$\\leftarrow$");
|
|
||||||
("|", "\\textbar ");
|
|
||||||
("\\^", "\\textasciicircum ") ;
|
|
||||||
("\\.\\.\\.", "$\\ldots$");
|
|
||||||
("\\\\", "MAXENCE"^"XXX") ;
|
|
||||||
("&", "MAXENCE"^"YYY") ;
|
|
||||||
("\\$", "MAXENCE"^"ZZZ");
|
|
||||||
]
|
|
||||||
|
|
||||||
val mutable subst_strings_simple =
|
|
||||||
[
|
[
|
||||||
("MAXENCE"^"XXX", "{\\textbackslash}") ;
|
"\001", "\001\002";
|
||||||
"}", "\\}" ;
|
"\\\\", "\001b";
|
||||||
"{", "\\{" ;
|
|
||||||
("\\\\", "MAXENCE"^"XXX") ;
|
"{", "\\\\{";
|
||||||
|
"}", "\\\\}";
|
||||||
|
"\\$", "\\\\$";
|
||||||
|
"\\^", "{\\\\textasciicircum}";
|
||||||
|
"à", "\\\\`a";
|
||||||
|
"â", "\\\\^a";
|
||||||
|
"é", "\\\\'e";
|
||||||
|
"è", "\\\\`e";
|
||||||
|
"ê", "\\\\^e";
|
||||||
|
"ë", "\\\\\"e";
|
||||||
|
"ç", "\\\\c{c}";
|
||||||
|
"ô", "\\\\^o";
|
||||||
|
"ö", "\\\\\"o";
|
||||||
|
"î", "\\\\^i";
|
||||||
|
"ï", "\\\\\"i";
|
||||||
|
"ù", "\\\\`u";
|
||||||
|
"û", "\\\\^u";
|
||||||
|
"%", "\\\\%";
|
||||||
|
"_", "\\\\_";
|
||||||
|
"~", "\\\\~{}";
|
||||||
|
"#", "{\\char35}";
|
||||||
|
"->", "$\\\\rightarrow$";
|
||||||
|
"<-", "$\\\\leftarrow$";
|
||||||
|
">=", "$\\\\geq$";
|
||||||
|
"<=", "$\\\\leq$";
|
||||||
|
">", "$>$";
|
||||||
|
"<", "$<$";
|
||||||
|
"=", "$=$";
|
||||||
|
"|", "{\\\\textbar}";
|
||||||
|
"\\.\\.\\.", "$\\\\ldots$";
|
||||||
|
"&", "\\\\&";
|
||||||
|
|
||||||
|
"\001b", "{\\\\char92}";
|
||||||
|
"\001\002", "\001";
|
||||||
]
|
]
|
||||||
|
|
||||||
val mutable subst_strings_code = [
|
val subst_strings_simple = List.map (fun (x, y) -> (Str.regexp x, y))
|
||||||
("MAXENCE"^"ZZZ", "\\$");
|
[
|
||||||
("MAXENCE"^"YYY", "\\&");
|
"\001", "\001\002";
|
||||||
("MAXENCE"^"XXX", "{\\textbackslash}") ;
|
"\\\\", "\001b";
|
||||||
("%", "\\%") ;
|
"{", "\001l";
|
||||||
("_", "\\_");
|
|
||||||
("~", "\\~{}");
|
"}", "{\\\\char125}";
|
||||||
("#", "\\verb`#`");
|
"'", "{\\\\textquotesingle}";
|
||||||
("}", "\\}");
|
"`", "{\\\\textasciigrave}";
|
||||||
("{", "\\{");
|
|
||||||
("&", "\\&");
|
"\001b", "{\\\\char92}";
|
||||||
("\\^", "\\textasciicircum ") ;
|
"\001l", "{\\\\char123}";
|
||||||
("&", "MAXENCE"^"YYY") ;
|
"\001\002", "\001";
|
||||||
("\\$", "MAXENCE"^"ZZZ") ;
|
]
|
||||||
("\\\\", "MAXENCE"^"XXX") ;
|
|
||||||
]
|
val subst_strings_code = List.map (fun (x, y) -> (Str.regexp x, y))
|
||||||
|
[
|
||||||
|
"\001", "\001\002";
|
||||||
|
"\\\\", "\001b";
|
||||||
|
"{", "\001l";
|
||||||
|
|
||||||
|
"}", "{\\\\char125}";
|
||||||
|
"'", "{\\\\textquotesingle}";
|
||||||
|
"`", "{\\\\textasciigrave}";
|
||||||
|
"%", "\\\\%";
|
||||||
|
"_", "\\\\_";
|
||||||
|
"~", "{\\\\char126}";
|
||||||
|
"#", "{\\\\char35}";
|
||||||
|
"&", "\\\\&";
|
||||||
|
"\\$", "\\\\$";
|
||||||
|
"\\^", "{\\\\char94}";
|
||||||
|
|
||||||
|
"\001b", "{\\\\char92}";
|
||||||
|
"\001l", "{\\\\char123}";
|
||||||
|
"\001\002", "\001";
|
||||||
|
]
|
||||||
|
|
||||||
method subst l s =
|
method subst l s =
|
||||||
List.fold_right
|
List.fold_left (fun acc (re, st) -> Str.global_replace re st acc) s l
|
||||||
(fun (s, s2) -> fun acc -> Str.global_replace (Str.regexp s) s2 acc)
|
|
||||||
l
|
|
||||||
s
|
|
||||||
|
|
||||||
(** Escape the strings which would clash with LaTeX syntax. *)
|
(** Escape the strings which would clash with LaTeX syntax. *)
|
||||||
method escape s = self#subst subst_strings s
|
method escape s = self#subst subst_strings s
|
||||||
|
@ -1112,6 +1122,7 @@ class latex =
|
||||||
ps fmt "\\documentclass[11pt]{article} \n";
|
ps fmt "\\documentclass[11pt]{article} \n";
|
||||||
ps fmt "\\usepackage[latin1]{inputenc} \n";
|
ps fmt "\\usepackage[latin1]{inputenc} \n";
|
||||||
ps fmt "\\usepackage[T1]{fontenc} \n";
|
ps fmt "\\usepackage[T1]{fontenc} \n";
|
||||||
|
ps fmt "\\usepackage{textcomp}\n";
|
||||||
ps fmt "\\usepackage{fullpage} \n";
|
ps fmt "\\usepackage{fullpage} \n";
|
||||||
ps fmt "\\usepackage{url} \n";
|
ps fmt "\\usepackage{url} \n";
|
||||||
ps fmt "\\usepackage{ocamldoc}\n";
|
ps fmt "\\usepackage{ocamldoc}\n";
|
||||||
|
|
Loading…
Reference in New Issue