Merge pull request #337 from Chris00/meta
Escape double quotes for META field values
This commit is contained in:
commit
511801c0d7
|
@ -306,6 +306,30 @@ module String = struct
|
||||||
loop i (j + 1) ~last_is_cr:false
|
loop i (j + 1) ~last_is_cr:false
|
||||||
in
|
in
|
||||||
loop 0 0 ~last_is_cr:false
|
loop 0 0 ~last_is_cr:false
|
||||||
|
|
||||||
|
(* Escape ONLY double quotes. String.escape also escapes
|
||||||
|
'\n',... and transforms all chars above '~' into '\xxx' which is
|
||||||
|
not suitable for UTF-8 strings. *)
|
||||||
|
let escape_double_quote s =
|
||||||
|
let n = ref 0 in
|
||||||
|
let len = String.length s in
|
||||||
|
for i = 0 to len - 1 do
|
||||||
|
if String.unsafe_get s i = '"' then incr n;
|
||||||
|
done;
|
||||||
|
if !n = 0 then s
|
||||||
|
else (
|
||||||
|
let b = Bytes.create (len + !n) in
|
||||||
|
n := 0;
|
||||||
|
for i = 0 to len - 1 do
|
||||||
|
if String.unsafe_get s i = '"' then (
|
||||||
|
Bytes.unsafe_set b !n '\\';
|
||||||
|
incr n;
|
||||||
|
);
|
||||||
|
Bytes.unsafe_set b !n (String.unsafe_get s i);
|
||||||
|
incr n
|
||||||
|
done;
|
||||||
|
Bytes.unsafe_to_string b
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
module Sys = struct
|
module Sys = struct
|
||||||
|
|
24
src/meta.ml
24
src/meta.ml
|
@ -236,13 +236,23 @@ let pp_list f ppf l =
|
||||||
Format.pp_print_cut ppf ();
|
Format.pp_print_cut ppf ();
|
||||||
f ppf x)
|
f ppf x)
|
||||||
|
|
||||||
let pp_value var =
|
let pp_print_text ppf s =
|
||||||
|
Format.fprintf ppf "\"@[<hv>";
|
||||||
|
Format.pp_print_text ppf (String.escape_double_quote s);
|
||||||
|
Format.fprintf ppf "@]\""
|
||||||
|
|
||||||
|
let pp_print_string ppf s =
|
||||||
|
Format.fprintf ppf "\"@[<hv>";
|
||||||
|
Format.pp_print_string ppf (String.escape_double_quote s);
|
||||||
|
Format.fprintf ppf "@]\""
|
||||||
|
|
||||||
|
let pp_quoted_value var =
|
||||||
match var with
|
match var with
|
||||||
| "archive" | "plugin" | "requires"
|
| "archive" | "plugin" | "requires"
|
||||||
| "ppx_runtime_deps" | "linkopts" | "jsoo_runtime" ->
|
| "ppx_runtime_deps" | "linkopts" | "jsoo_runtime" ->
|
||||||
Format.pp_print_text
|
pp_print_text
|
||||||
| _ ->
|
| _ ->
|
||||||
Format.pp_print_string
|
pp_print_string
|
||||||
|
|
||||||
let rec pp ppf entries =
|
let rec pp ppf entries =
|
||||||
Format.fprintf ppf "@[<v>%a@]" (pp_list pp_entry) entries
|
Format.fprintf ppf "@[<v>%a@]" (pp_list pp_entry) entries
|
||||||
|
@ -253,12 +263,12 @@ and pp_entry ppf entry =
|
||||||
| Comment s ->
|
| Comment s ->
|
||||||
fprintf ppf "# %s" s
|
fprintf ppf "# %s" s
|
||||||
| Rule { var; predicates = []; action; value } ->
|
| Rule { var; predicates = []; action; value } ->
|
||||||
fprintf ppf "@[%s %s \"@[<hv>%a@]\"@]"
|
fprintf ppf "@[%s %s %a@]"
|
||||||
var (string_of_action action) (pp_value var) value
|
var (string_of_action action) (pp_quoted_value var) value
|
||||||
| Rule { var; predicates; action; value } ->
|
| Rule { var; predicates; action; value } ->
|
||||||
fprintf ppf "@[%s(%s) %s \"@[<hv>%a@]\"@]"
|
fprintf ppf "@[%s(%s) %s %a@]"
|
||||||
var (String.concat ~sep:"," (List.map predicates ~f:string_of_predicate))
|
var (String.concat ~sep:"," (List.map predicates ~f:string_of_predicate))
|
||||||
(string_of_action action) (pp_value var) value
|
(string_of_action action) (pp_quoted_value var) value
|
||||||
| Package { name; entries } ->
|
| Package { name; entries } ->
|
||||||
fprintf ppf "@[<v 2>package %S (@,%a@]@,)"
|
fprintf ppf "@[<v 2>package %S (@,%a@]@,)"
|
||||||
name pp entries
|
name pp entries
|
||||||
|
|
Loading…
Reference in New Issue