let start, stop = HExtlib.loc_of_floc floc in
let start_bytes = Glib.Utf8.offset_to_pos s ~pos:0 ~off:start in
let stop_bytes = Glib.Utf8.offset_to_pos s ~pos:0 ~off:stop in
- assert(stop_bytes >= start_bytes);
+ if (stop_bytes < start_bytes) then
+ Printf.sprintf "ERROR (%d > %d)" start_bytes stop_bytes, 0
+ else
let bytes = stop_bytes - start_bytes in
try
String.sub s start_bytes bytes, bytes
with Invalid_argument _ ->
- Printf.eprintf "%s/%d/%d\n" s start_bytes bytes;
- assert false
-
+ Printf.sprintf "ERROR (%s/%d/%d)" s start_bytes bytes, 0
let utf8_string_length s =
if BuildTimeConf.debug then
assert(Glib.Utf8.validate s);
Glib.Utf8.length s
-
-let new_search_win title text =
- let w = new MatitaGeneratedGui.searchWin () in
- let t =
- GSourceView.source_view ~auto_indent:false ~editable:false ()
- in
- let callback () =
- let text = w#entrySearch#text in
- let highlight start end_ =
- t#source_buffer#move_mark `INSERT ~where:start;
- t#source_buffer#move_mark `SEL_BOUND ~where:end_;
- t#scroll_mark_onscreen `INSERT
- in
- let iter = t#source_buffer#get_iter `SEL_BOUND in
- match iter#forward_search text with
- | None ->
- (match t#source_buffer#start_iter#forward_search text with
- | None -> ()
- | Some (start,end_) -> highlight start end_)
- | Some (start,end_) -> highlight start end_
- in
- t#source_buffer#insert text;
- w#toplevel#set_title title;
- w#scrolledwinContent#add (t :> GObj.widget);
- ignore(w#entrySearch#connect#activate ~callback);
- ignore(w#buttonSearch#connect#clicked ~callback);
- ignore(w#buttonClose#connect#clicked ~callback:(fun () ->
- w#toplevel#misc#hide (); w#toplevel#destroy ()));
- w
+
+let escape_pango_markup text =
+ let text = Pcre.replace ~pat:"&" ~templ:"&" text in
+ let text = Pcre.replace ~pat:"<" ~templ:"<" text in
+ let text = Pcre.replace ~pat:"'" ~templ:"'" text in
+ let text = Pcre.replace ~pat:"\"" ~templ:""" text in
+ text
;;
+
+