aboutsummaryrefslogtreecommitdiff
path: root/parsing
diff options
context:
space:
mode:
Diffstat (limited to 'parsing')
-rw-r--r--parsing/extend.ml6
-rw-r--r--parsing/tok.ml18
-rw-r--r--parsing/tok.mli4
3 files changed, 21 insertions, 7 deletions
diff --git a/parsing/extend.ml b/parsing/extend.ml
index 050ed49622..9b5537d7f6 100644
--- a/parsing/extend.ml
+++ b/parsing/extend.ml
@@ -106,11 +106,11 @@ type 'a production_rule =
type 'a single_extend_statement =
string option *
- (** Level *)
+ (* Level *)
Gramlib.Gramext.g_assoc option *
- (** Associativity *)
+ (* Associativity *)
'a production_rule list
- (** Symbol list with the interpretation function *)
+ (* Symbol list with the interpretation function *)
type 'a extend_statement =
Gramlib.Gramext.position option *
diff --git a/parsing/tok.ml b/parsing/tok.ml
index 91b4f25ba3..c0d5b6742d 100644
--- a/parsing/tok.ml
+++ b/parsing/tok.ml
@@ -36,12 +36,24 @@ let equal t1 t2 = match t1, t2 with
| EOI, EOI -> true
| _ -> false
-let extract_string = function
+let extract_string diff_mode = function
| KEYWORD s -> s
| IDENT s -> s
- | STRING s -> s
+ | STRING s ->
+ if diff_mode then
+ let escape_quotes s =
+ let len = String.length s in
+ let buf = Buffer.create len in
+ for i = 0 to len-1 do
+ let ch = String.get s i in
+ Buffer.add_char buf ch;
+ if ch = '"' then Buffer.add_char buf '"' else ()
+ done;
+ Buffer.contents buf
+ in
+ "\"" ^ (escape_quotes s) ^ "\"" else s
| PATTERNIDENT s -> s
- | FIELD s -> s
+ | FIELD s -> if diff_mode then "." ^ s else s
| INT s -> s
| LEFTQMARK -> "?"
| BULLET s -> s
diff --git a/parsing/tok.mli b/parsing/tok.mli
index 9b8c008555..5750096a28 100644
--- a/parsing/tok.mli
+++ b/parsing/tok.mli
@@ -22,11 +22,13 @@ type t =
| EOI
val equal : t -> t -> bool
-val extract_string : t -> string
+(* pass true for diff_mode *)
+val extract_string : bool -> t -> string
val to_string : t -> string
(* Needed to fit Camlp5 signature *)
val print : Format.formatter -> t -> unit
val match_keyword : string -> t -> bool
+
(** for camlp5 *)
val of_pattern : string*string -> t
val to_pattern : t -> string*string