# # # patch "monotone.ml" # from [06f5cd408dee52b1cc3e4b7b3c7dd72b6836bd83] # to [09285df497298120461dcdc7612d50e70b24ce14] # # patch "query.ml" # from [0fd315d4d46d9b3b34878d07f9e50f0d74a91850] # to [dbbb0fd4e0706565765269e29ca73954048f99c8] # ============================================================ --- monotone.ml 06f5cd408dee52b1cc3e4b7b3c7dd72b6836bd83 +++ monotone.ml 09285df497298120461dcdc7612d50e70b24ce14 @@ -5,6 +5,30 @@ let exit = Automate.exit let make = Automate.make let exit = Automate.exit +let escape_selector s = + let len = String.length s in + let nb_escp = ref 0 in + for i = 0 to len - 1 do + let c = s.[i] in + if c = '\\' || c = '/' + then incr nb_escp + done ; + if !nb_escp = 0 + then s + else begin + let o = String.create (len + !nb_escp) in + let j = ref 0 in + for i = 0 to len - 1 do + let c = s.[i] in + if c = '\\' || c = '/' + then (o.[!j] <- '\\' ; incr j) ; + o.[!j] <- c ; + incr j + done ; + assert (!j = len + !nb_escp) ; + o + end + let ( +> ) x f = f x let decode_branches msg = @@ -90,17 +114,17 @@ let selectors_of_query q = let selectors_of_query q = match q.lim with | QUERY_NO_LIMIT -> - List.map (fun b -> b, "b:" ^ b) q.dom + List.map (fun b -> b, "b:" ^ escape_selector b) q.dom | QUERY_BETWEEN (d1, d2) -> let s_d = - match d1, d2 with + match escape_selector d1, escape_selector d2 with | "", "" -> [] - | d1, "" -> [ Printf.sprintf "l:%s" d1 ] - | "", d2 -> [ Printf.sprintf "e:%s" d2 ] - | d1, d2 -> [ Printf.sprintf "l:%s" d1 ; Printf.sprintf "e:%s" d2 ] in + | d1, "" -> [ "l:" ^ d1 ] + | "", d2 -> [ "e:" ^ d2 ] + | d1, d2 -> [ "l:" ^ d1 ; "e:" ^ d2 ] in List.map (fun b -> - let s_b = Printf.sprintf "b:%s" b in + let s_b = "b:" ^ escape_selector b in let s_t = String.concat "/" (s_b :: s_d) in b, s_t) q.dom ============================================================ --- query.ml 0fd315d4d46d9b3b34878d07f9e50f0d74a91850 +++ query.ml dbbb0fd4e0706565765269e29ca73954048f99c8 @@ -1,36 +1,12 @@ module Selector = struct open Viz_misc open Viz_types module Selector = struct - let escape_selector s = - let len = String.length s in - let nb_escp = ref 0 in - for i = 0 to len - 1 do - let c = s.[i] in - if c = '\\' || c = '/' - then incr nb_escp - done ; - if !nb_escp = 0 - then s - else begin - let o = String.create (len + !nb_escp) in - let j = ref 0 in - for i = 0 to len - 1 do - let c = s.[i] in - if c = '\\' || c = '/' - then (o.[!j] <- '\\' ; incr j) ; - o.[!j] <- c ; - incr j - done ; - assert (!j = len + !nb_escp) ; - o - end - let make_selectors g sel = let br = (Agraph.get_query g).dom in List.map - (fun b -> Printf.sprintf "b:%s/%s" (escape_selector b) sel) + (fun b -> Printf.sprintf "b:%s/%s" (Monotone.escape_selector b) sel) br let running_select = ref None