(* $Id: xstr_search.mli,v 1.1 1999/06/27 23:03:38 gerd Exp $ * ---------------------------------------------------------------------- * Search & Replace *) exception Replace_phrase of (int * string);; (* see 'replace_char' and 'replace_string' *) val index_of_substring_from : string -> int -> string -> int (* index_of_substring_from s k_left substr: * finds the leftmost index >= k_left where 'substr' occurs within s * or raises Not_found. *) val rindex_of_substring_from : string -> int -> string -> int (* eindex_of_substring_from s k_right substr: * finds the rightmost index <= k_right where 'substr' occurs within s * or raises Not_found. *) val index_of_substring : string -> string -> int (* index_of_substring s substr: * finds the leftmost index where 'substr' occurs within s * or raises Not_found. *) val rindex_of_substring : string -> string -> int (* eindex_of_substring s substr: * finds the rightmost index where 'substr' occurs within s * or raises Not_found. *) val contains_substring : string -> string -> bool (* contains_substring s substr: * true iff substr occurs in s *) val contains_substring_from : string -> int -> string -> bool (* contains_substring_from s k_left substr: * true iff substr occurs in s at index k_left or later *) val rcontains_substring_from : string -> int -> string -> bool (* rcontains_substring_from s k_right substr: * true iff substr occurs in s at index k_right or earlier *) val indexlist_of_substring : string -> string -> int list (* indexlist_of_substring s substr: * Returns a list of all indexes of substrings substr in s *) val rev_concat : string -> string list -> string (* rev_concat s l = String.concat s (List.rev l) *) val replace_char : string -> (char -> int -> string) -> string (* replace_char s rule: * replaces characters in s according to rule. * rule c k = s' means: replace character c where c = s.[k] by s' * The rule may raise Match_failure or Not_found in which case * the character is not replaced. * It may raise Replace_phrase (l,s') which means that the l * characters at k should be replaced by s'. * * EXAMPLE: * * - replace '<', '>', '&' in an HTML document by CDATA entities: * replace_char s (fun c k -> * match c with * '<' -> "<" * | '>' -> ">" * | '&' -> "&" * ) * - replace backslashes by double-backslashes and precede quotes with * backslashes: * replace_char s (fun c k -> * match c with * '\\' -> "\\\\" * '"' -> "\\\"") * - the reverse function (remove backslashes): * replace_char s (fun c k -> * match c with * '\\' -> begin * if k+1 < String.length s then * raise * (Replace_phrase * (2, String.make 1 (s.[k+1]))) * else * raise Not_found * end) *) val replace_substring : string -> string list -> (string -> int -> string) -> string (* replace_substring s substrlist rule: * replaces all occurences of substrings in 's' which are enumerated * in 'substrlist' by applying 'rule'. * rule t k = t': means that substring t at position k is replaced by t' * The rule may raise Match_failure or Not_found in which case * the character is not replaced. * It may raise Replace_phrase (l,s') which means that the l * characters at k should be replaced by s'. * * EXAMPLE: * * - Interpret CDATA entities of HTML: * replace_substring s * [ "<"; ">"; "&" ] * (fun s k -> match s with * "<" -> "<" * | ">" -> ">" * | "&" -> "&") *) (* ====================================================================== * History: * * $Log: xstr_search.mli,v $ * Revision 1.1 1999/06/27 23:03:38 gerd * Initial revision. * * *)