This is an automated email from the git hooks/post-receive script. glondu pushed a commit to branch master in repository ocaml-re.
commit 3f30730d9572e6ff76dc1589f7f4a4f368a379e1 Author: Stephane Glondu <st...@glondu.net> Date: Fri Aug 5 12:50:06 2016 +0200 Imported Upstream version 1.6.0 --- .travis-ci.sh | 40 ------------ .travis.yml | 11 +++- CHANGES | 5 ++ _oasis | 7 ++- lib/META | 16 ++--- lib/re.ml | 90 +++++++++++++++----------- lib/re.mldylib | 3 +- lib/re.mli | 5 ++ lib/re.mllib | 3 +- lib/re_automata.ml | 62 +++++++++--------- lib/re_automata.mli | 6 +- lib/re_cset.ml | 15 ++--- lib/re_cset.mli | 2 +- lib/re_fmt.ml | 25 ++++++++ lib/re_glob.mli | 2 +- lib_test/META | 4 +- lib_test/re_match.ml | 2 +- myocamlbuild.ml | 174 ++++++++++++++++++++++++++++++++++++++++++++++++--- opam | 1 + setup.ml | 82 +++++++++++++++--------- 20 files changed, 382 insertions(+), 173 deletions(-) diff --git a/.travis-ci.sh b/.travis-ci.sh deleted file mode 100755 index 66cd0c6..0000000 --- a/.travis-ci.sh +++ /dev/null @@ -1,40 +0,0 @@ -set -e - -OPAM_DEPENDS="ounit" - -case "$OCAML_VERSION,$OPAM_VERSION" in -4.00.1,1.1.0) ppa=avsm/ocaml40+opam11 ;; -4.00.1,1.2.0) ppa=avsm/ocaml40+opam12 ;; -4.01.0,1.1.0) ppa=avsm/ocaml41+opam11 ;; -4.01.0,1.2.0) ppa=avsm/ocaml41+opam12 ;; -4.02.1,1.1.0) ppa=avsm/ocaml42+opam11 ;; -4.02.1,1.2.0) ppa=avsm/ocaml42+opam12 ;; -*) echo Unknown $OCAML_VERSION,$OPAM_VERSION; exit 1 ;; -esac - -echo "yes" | sudo add-apt-repository ppa:$ppa -sudo apt-get update -qq -sudo apt-get install -qq ocaml ocaml-native-compilers camlp4-extra opam time libssl-dev - -export OPAMYES=1 -echo OCaml version -ocaml -version -echo OPAM versions -opam --version -opam --git-version - -opam init -a -opam remote add mirage-dev git://github.com/mirage/mirage-dev -opam update -opam install ${OPAM_DEPENDS} - -eval `opam config env` - -# test opam installation -opam pin add re . -# run tests -./configure --enable-tests -make test - -# Check that there's no new diff -git status diff --git a/.travis.yml b/.travis.yml index 5518b3f..7e8a190 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,11 @@ language: c -script: bash -ex .travis-ci.sh sudo: required +install: wget https://raw.githubusercontent.com/ocaml/ocaml-ci-scripts/master/.travis-opam.sh +script: bash -ex .travis-opam.sh env: - - OCAML_VERSION=4.01.0 OPAM_VERSION=1.2.0 - - OCAML_VERSION=4.02.1 OPAM_VERSION=1.2.0 + - OCAML_VERSION=4.01 + - OCAML_VERSION=4.02 + - OCAML_VERSION=4.03 +os: + - linux + - osx diff --git a/CHANGES b/CHANGES index 880e70c..fb14350 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,8 @@ +1.6.0 (30-May-2016) + +* Add Re.pp and Re.pp_re (#55) +* Fix ocamldoc syntax (#87) + 1.5.0 (04-Jan-2016) * Add Re.exec_opt. Like exec but doesn't raise diff --git a/_oasis b/_oasis index cfedbb1..9a03b54 100644 --- a/_oasis +++ b/_oasis @@ -1,16 +1,17 @@ OASISFormat: 0.4 Name: re -Version: 1.5.0 +Version: 1.6.0 Synopsis: Pure OCaml regular expression library Authors: Jerome Vouillon, Thomas Gazagnaire, Anil Madhavapeddy License: LGPL-2.0 with OCaml linking exception Plugins: META (0.4), DevFiles (0.4) -AlphaFeatures: compiled_setup_ml +AlphaFeatures: compiled_setup_ml, ocamlbuild_more_args BuildTools: ocamlbuild +XOCamlbuildExtraArgs: "-cflags '-w +a-40-42-44-3-4-48 -warn-error +1..49'" Library re Path: lib - InternalModules: Re_cset, Re_automata + InternalModules: Re_fmt, Re_cset, Re_automata Modules: Re Findlibname: re BuildDepends: bytes diff --git a/lib/META b/lib/META index 8e7f180..a86354c 100644 --- a/lib/META +++ b/lib/META @@ -1,6 +1,6 @@ # OASIS_START -# DO NOT EDIT (digest: 0bb765a7710327dab365a6447f85236c) -version = "1.5.0" +# DO NOT EDIT (digest: f617609bf72ea371afe897fad8c64b8e) +version = "1.6.0" description = "Pure OCaml regular expression library" requires = "bytes" archive(byte) = "re.cma" @@ -9,7 +9,7 @@ archive(native) = "re.cmxa" archive(native, plugin) = "re.cmxs" exists_if = "re.cma" package "str" ( - version = "1.5.0" + version = "1.6.0" description = "Str-compatible regexps" requires = "re re.emacs" archive(byte) = "re_str.cma" @@ -20,7 +20,7 @@ package "str" ( ) package "posix" ( - version = "1.5.0" + version = "1.6.0" description = "POSIX-compatible regexps" requires = "re" archive(byte) = "re_posix.cma" @@ -31,7 +31,7 @@ package "posix" ( ) package "perl" ( - version = "1.5.0" + version = "1.6.0" description = "Perl-compatible regexps" requires = "re" archive(byte) = "re_perl.cma" @@ -42,7 +42,7 @@ package "perl" ( ) package "pcre" ( - version = "1.5.0" + version = "1.6.0" description = "subset of PCRE using the Re engine" requires = "re re.perl" archive(byte) = "re_pcre.cma" @@ -53,7 +53,7 @@ package "pcre" ( ) package "glob" ( - version = "1.5.0" + version = "1.6.0" description = "Shell glob regexps" requires = "re" archive(byte) = "re_glob.cma" @@ -64,7 +64,7 @@ package "glob" ( ) package "emacs" ( - version = "1.5.0" + version = "1.6.0" description = "Emacs-compatible regexps" requires = "re" archive(byte) = "re_emacs.cma" diff --git a/lib/re.ml b/lib/re.ml index bf5ea40..7c4fff7 100644 --- a/lib/re.ml +++ b/lib/re.ml @@ -24,13 +24,6 @@ module Cset = Re_cset module Automata = Re_automata module MarkSet = Automata.PmarkSet -let rec first f l = - match l with - [] -> None - | x :: r -> match f x with - None -> first f r - | Some _ as res -> res - let rec iter n f v = if n = 0 then v else iter (n - 1) f (f v) (****) @@ -95,7 +88,9 @@ type re = group_count : int (* Number of groups in the regular expression *) } -let print_re ch re = Automata.print_expr ch re.initial +let pp_re ch re = Automata.pp ch re.initial + +let print_re = pp_re (* Information used during matching *) type info = @@ -145,12 +140,12 @@ let unknown_state = next = dummy_next; final = []; desc = Automata.dummy_state } -let count = ref 0 let mk_state ncol ((idx, _, _, _, _) as desc) = let break_state = match Automata.status desc with - Automata.Running -> false - | _ -> true + | Automata.Running -> false + | Automata.Failed + | Automata.Match _ -> true in { idx = if break_state then break else idx; real_idx = idx; @@ -268,8 +263,6 @@ let find_initial_state re cat = re.initial_states <- (cat, st) :: re.initial_states; st -let dummy_substrings = `Match ("", [], [||], 0) - let get_color re (s:string) pos = if pos < 0 then -1 else let slen = String.length s in @@ -377,13 +370,10 @@ let cseq c c' = Cset.seq (Char.code c) (Char.code c') let cadd c s = Cset.add (Char.code c) s let csingle c = Cset.single (Char.code c) -let rec interval i j = if i > j then [] else i :: interval (i + 1) j - let rec cset_hash_rec l = match l with [] -> 0 | (i, j)::r -> i + 13 * j + 257 * cset_hash_rec r -let cset_hash l = (cset_hash_rec l) land 0x3FFFFFFF module CSetMap = Map.Make @@ -412,8 +402,6 @@ let trans_set cache cm s = (****) -type sem_status = Compulsory | Indicative - type regexp = Set of Cset.t | Sequence of regexp list @@ -432,6 +420,41 @@ type regexp = | Difference of regexp * regexp | Pmark of Automata.Pmark.t * regexp +let rec pp fmt t = + let open Re_fmt in + let var s re = sexp fmt s pp re in + let seq s rel = sexp fmt s (list pp) rel in + match t with + | Set s -> sexp fmt "Set" Cset.pp s + | Sequence sq -> seq "Sequence" sq + | Alternative alt -> seq "Alternative" alt + | Repeat (re, start, stop) -> + let pp' fmt () = fprintf fmt "%a@ %d%a" pp re start optint stop in + sexp fmt "Repeat" pp' () + | Beg_of_line -> str fmt "Beg_of_line" + | End_of_line -> str fmt "End_of_line" + | Beg_of_word -> str fmt "Beg_of_word" + | End_of_word -> str fmt "End_of_word" + | Not_bound -> str fmt "Not_bound" + | Beg_of_str -> str fmt "Beg_of_str" + | End_of_str -> str fmt "End_of_str" + | Last_end_of_line -> str fmt "Last_end_of_line" + | Start -> str fmt "Start" + | Stop -> str fmt "Stop" + | Sem (sem, re) -> + sexp fmt "Sem" (pair Automata.pp_sem pp) (sem, re) + | Sem_greedy (k, re) -> + sexp fmt "Sem_greedy" (pair Automata.pp_rep_kind pp) (k, re) + | Group c -> var "Group" c + | No_group c -> var "No_group" c + | Nest c -> var "Nest" c + | Case c -> var "Case" c + | No_case c -> var "No_case" c + | Intersection c -> seq "Intersection" c + | Complement c -> seq "Complement" c + | Difference (a, b) -> sexp fmt "Difference" (pair pp pp) (a, b) + | Pmark (m, r) -> sexp fmt "Pmark" (pair Automata.Pmark.pp pp) (m, r) + let rec is_charset r = match r with Set _ -> @@ -608,7 +631,7 @@ let rec translate ids kind ign_group ign_case greedy pos cache (c:Bytes.t) r = let (cr, kind') = translate ids kind ign_group ign_case greedy pos cache c r' in (enforce_kind ids kind kind' cr, kind) - | l' -> + | _ -> (A.alt ids (List.map (fun r' -> @@ -955,8 +978,8 @@ let exec_opt ?pos ?len re s = let execp ?pos ?len re s = match exec_internal "Re.execp" ?pos ?len re s with - Match substr -> true - | _ -> false + Match _substr -> true + | _ -> false let exec_partial ?pos ?len re s = match exec_internal "Re.exec_partial" ?pos ?len re s with @@ -964,18 +987,11 @@ let exec_partial ?pos ?len re s = | Running -> `Partial | Failed -> `Mismatch -let rec find_mark (i : int) l = - match l with - [] -> - raise Not_found - | (j, idx) :: r -> - if i = j then idx else find_mark i r - module Group = struct type t = groups - let get {s ; marks ; gpos} i = + let get {s ; marks ; gpos ; _} i = if 2 * i + 1 >= Array.length marks then raise Not_found; let m1 = marks.(2 * i) in if m1 = -1 then raise Not_found; @@ -983,7 +999,7 @@ module Group = struct let p2 = gpos.(marks.(2 * i + 1)) - 1 in String.sub s p1 (p2 - p1) - let offset {s ; marks ; gpos} i = + let offset {marks ; gpos ; _} i = if 2 * i + 1 >= Array.length marks then raise Not_found; let m1 = marks.(2 * i) in if m1 = -1 then raise Not_found; @@ -995,14 +1011,14 @@ module Group = struct let stop subs i = snd (offset subs i) - let test { s ; marks } i = + let test { marks ; _ } i = if 2 * i >= Array.length marks then false else let idx = marks.(2 * i) in idx <> -1 let dummy_offset = (-1, -1) - let all_offset {s ; marks ; gpos ; gcount } = + let all_offset {marks ; gpos ; gcount ; _} = let res = Array.make gcount dummy_offset in for i = 0 to Array.length marks / 2 - 1 do let m1 = marks.(2 * i) in @@ -1016,7 +1032,7 @@ module Group = struct let dummy_string = "" - let all {s ; marks ; gpos ; gcount } = + let all {s ; marks ; gpos ; gcount ; _ } = let res = Array.make gcount dummy_string in for i = 0 to Array.length marks / 2 - 1 do let m1 = marks.(2 * i) in @@ -1034,7 +1050,7 @@ module Mark = struct type t = Automata.Pmark.t - let test {pmarks} p = + let test {pmarks ; _} p = Automata.PmarkSet.mem p pmarks let all s = s.pmarks @@ -1097,8 +1113,8 @@ let matches ?pos ?len re s = in iter () type split_token = - [ `Text of string (** Text between delimiters *) - | `Delim of groups (** Delimiter *) + [ `Text of string + | `Delim of groups ] let split_full_gen ?(pos=0) ?len re s = @@ -1115,7 +1131,7 @@ let split_full_gen ?(pos=0) ?len re s = let pos0 = pos in let state = ref `Idle in let i = ref pos and pos = ref pos in - let rec next () = match !state with + let next () = match !state with | `Idle when !pos >= limit -> if !i < limit then ( let sub = String.sub s !i (limit - !i) in diff --git a/lib/re.mldylib b/lib/re.mldylib index 83f60ea..1b9d5c4 100644 --- a/lib/re.mldylib +++ b/lib/re.mldylib @@ -1,6 +1,7 @@ # OASIS_START -# DO NOT EDIT (digest: d5cab46013d91e556f48bca720b3595e) +# DO NOT EDIT (digest: de0cfc6fef391be3b2a03b93326d4594) Re +Re_fmt Re_cset Re_automata # OASIS_STOP diff --git a/lib/re.mli b/lib/re.mli index 00c8a44..04a2c27 100644 --- a/lib/re.mli +++ b/lib/re.mli @@ -359,6 +359,11 @@ val no_case : t -> t (** {2 Internal debugging} *) +val pp : Format.formatter -> t -> unit + +val pp_re : Format.formatter -> re -> unit + +(** Alias for {!pp_re}. Deprecated *) val print_re : Format.formatter -> re -> unit diff --git a/lib/re.mllib b/lib/re.mllib index 83f60ea..1b9d5c4 100644 --- a/lib/re.mllib +++ b/lib/re.mllib @@ -1,6 +1,7 @@ # OASIS_START -# DO NOT EDIT (digest: d5cab46013d91e556f48bca720b3595e) +# DO NOT EDIT (digest: de0cfc6fef391be3b2a03b93326d4594) Re +Re_fmt Re_cset Re_automata # OASIS_STOP diff --git a/lib/re_automata.ml b/lib/re_automata.ml index 9a808e6..fc8440f 100644 --- a/lib/re_automata.ml +++ b/lib/re_automata.ml @@ -35,6 +35,7 @@ module Pmark : sig val equal : t -> t -> bool val compare : t -> t -> int val gen : unit -> t + val pp : Format.formatter -> t -> unit end = struct type t = int @@ -42,6 +43,8 @@ end let compare (x : int) (y : int) = compare x y let r = ref 0 let gen () = incr r ; !r + + let pp = Format.pp_print_int end type expr = { id : int; def : def } @@ -74,38 +77,41 @@ type e = (****) -let print_kind ch k = - Format.fprintf ch "%s" +let pp_sem ch k = + Format.pp_print_string ch (match k with `Shortest -> "short" | `Longest -> "long" | `First -> "first") -let rec print_expr ch e = + +let pp_rep_kind fmt = function + | `Greedy -> Format.pp_print_string fmt "Greedy" + | `Non_greedy -> Format.pp_print_string fmt "Non_greedy" + +let rec pp ch e = + let open Re_fmt in match e.def with Cst l -> - Format.fprintf ch "@[<3>(cst@ %a)@]" Cset.print l; + sexp ch "cst" Cset.pp l; | Alt l -> - Format.fprintf ch "@[<3>(alt"; - List.iter (fun e -> Format.fprintf ch "@ %a" print_expr e) l; - Format.fprintf ch ")@]" + sexp ch "alt" (list pp) l | Seq (k, e, e') -> - Format.fprintf ch "@[<3>(seq %a@ %a@ %a)@]" - print_kind k print_expr e print_expr e' + sexp ch "seq" (triple pp_sem pp pp) (k, e, e') | Eps -> - Format.fprintf ch "eps" - | Rep (rk, k, e) -> - Format.fprintf ch "@[<3>(rep@ %a %a)@]" print_kind k print_expr e + str ch "eps" + | Rep (_rk, k, e) -> + sexp ch "rep" (pair pp_sem pp) (k, e) | Mark i -> - Format.fprintf ch "@[<3>(mark@ %d)@]" i + sexp ch "mark" int i | Pmark i -> - Format.fprintf ch "@[<3>(pmark@ %d)@]" (i :> int) + sexp ch "pmark" int (i :> int) | Erase (b, e) -> - Format.fprintf ch "@[<3>(erase@ %d %d)@]" b e + sexp ch "erase" (pair int int) (b, e) | Before c -> - Format.fprintf ch "@[<3>(before@ %d)@]" c + sexp ch "before" int c | After c -> - Format.fprintf ch "@[<3>(after@ %d)@]" c + sexp ch "after" int c let print_marks ch l = @@ -120,14 +126,14 @@ let rec print_state_rec ch e y = match e with TMatch marks -> Format.fprintf ch "@[<2>(Match@ %a)@]" print_marks marks - | TSeq (l', x, kind) -> + | TSeq (l', x, _kind) -> Format.fprintf ch "@[<2>(Seq@ "; print_state_lst ch l' x; - Format.fprintf ch " %a)@]" print_expr x + Format.fprintf ch " %a)@]" pp x | TExp (marks, {def = Eps; _}) -> Format.fprintf ch "(Exp %d (%a) (eps))" y.id print_marks marks | TExp (marks, x) -> - Format.fprintf ch "(Exp %d (%a) %a)" x.id print_marks marks print_expr x + Format.fprintf ch "(Exp %d (%a) %a)" x.id print_marks marks pp x and print_state_lst ch l y = match l with @@ -206,7 +212,7 @@ let texp marks x = TExp (marks, x) let tseq kind x y rem = match x with [] -> rem - | [TExp (marks, {def = Eps})] -> TExp (marks, y) :: rem + | [TExp (marks, {def = Eps ; _})] -> TExp (marks, y) :: rem | _ -> TSeq (x, y, kind) :: rem (****) @@ -277,7 +283,7 @@ let equal_state (idx1, cat1, desc1, _, h1) (idx2, cat2, desc2, _, h2) = (h1 : int) = h2 && (idx1 : int) = idx2 && (cat1 : int) = cat2 && equal_e desc1 desc2 -let compare_state (idx1, cat1, desc1, _, h1) (idx2, cat2, desc2, _, h2) = +let compare_state (_idx1, cat1, desc1, _, h1) (_idx2, cat2, desc2, _, h2) = let c = compare (h1 : int) h2 in if c <> 0 then c else let c = compare (cat1 : int) cat2 in @@ -343,19 +349,19 @@ let rec remove_duplicates prev l y = match l with [] -> ([], prev) - | TMatch _ as x :: r -> (* Truncate after first match *) + | TMatch _ as x :: _ -> (* Truncate after first match *) ([x], prev) | TSeq (l', x, kind) :: r -> let (l'', prev') = remove_duplicates prev l' x in let (r', prev'') = remove_duplicates prev' r y in (tseq kind l'' x r', prev'') - | TExp (marks, {def = Eps; _}) as e :: r -> + | TExp (_marks, {def = Eps; _}) as e :: r -> if List.memq y.id prev then remove_duplicates prev r y else let (r', prev') = remove_duplicates (y.id :: prev) r y in (e :: r', prev') - | TExp (marks, x) as e :: r -> + | TExp (_marks, x) as e :: r -> if List.memq x.id prev then remove_duplicates prev r y else @@ -490,9 +496,9 @@ let rec prepend s x l = match s, l with [], _ -> l - | _, [] -> + | _r, [] -> [] - | (c, c') :: r, ([d, d'], x') :: r' when c' < d -> + | (_c, c') :: r, ([d, _d'], _x') :: _r' when c' < d -> prepend r x l | (c, c') :: r, ([d, d'], x') :: r' -> if c <= d then begin @@ -604,7 +610,7 @@ and deriv_2 all_chars categories marks cat l rem = and deriv_seq all_chars categories cat kind y z rem = if List.exists - (fun (s, xl) -> + (fun (_s, xl) -> List.exists (fun x -> match x with TMatch _ -> true | _ -> false) xl) y then diff --git a/lib/re_automata.mli b/lib/re_automata.mli index 6be3100..ead5334 100644 --- a/lib/re_automata.mli +++ b/lib/re_automata.mli @@ -28,11 +28,15 @@ type mark = int type sem = [ `Longest | `Shortest | `First ] type rep_kind = [ `Greedy | `Non_greedy ] +val pp_sem : Format.formatter -> sem -> unit +val pp_rep_kind : Format.formatter -> rep_kind -> unit + module Pmark : sig type t = private int val equal : t -> t -> bool val compare : t -> t -> int val gen : unit -> t + val pp : Format.formatter -> t -> unit end type expr @@ -48,7 +52,7 @@ type def = | After of category | Pmark of Pmark.t val def : expr -> def -val print_expr : Format.formatter -> expr -> unit +val pp : Format.formatter -> expr -> unit type ids val create_ids : unit -> ids diff --git a/lib/re_cset.ml b/lib/re_cset.ml index 001477e..9c5e872 100644 --- a/lib/re_cset.ml +++ b/lib/re_cset.ml @@ -97,17 +97,10 @@ let hash l = (hash_rec l) land 0x3FFFFFFF (****) -let print_one ch c1 c2 = +let print_one ch (c1, c2) = if c1 = c2 then - Format.fprintf ch "@ %d" c1 + Format.fprintf ch "%d" c1 else - Format.fprintf ch "@ %d-%d" c1 c2 + Format.fprintf ch "%d-%d" c1 c2 -let print ch l = - match l with - [] -> - () - | (c1, c2) :: rem -> - print_one ch c1 c2; - List.iter - (fun (c1, c2) -> Format.fprintf ch "@ "; print_one ch c1 c2) rem +let pp = Re_fmt.list print_one diff --git a/lib/re_cset.mli b/lib/re_cset.mli index 45b5019..1fb018c 100644 --- a/lib/re_cset.mli +++ b/lib/re_cset.mli @@ -40,4 +40,4 @@ val mem : c -> t -> bool type hash val hash : t -> hash -val print : Format.formatter -> t -> unit +val pp : Format.formatter -> t -> unit diff --git a/lib/re_fmt.ml b/lib/re_fmt.ml new file mode 100644 index 0000000..2c7cf5e --- /dev/null +++ b/lib/re_fmt.ml @@ -0,0 +1,25 @@ +(** Very small tooling for format printers. *) + +include Format + +(* Only in the stdlib since 4.02, so we copy. *) +let rec list pp ppf = function + | [] -> () + | [v] -> pp ppf v + | v :: vs -> + pp ppf v; + pp_print_space ppf (); + list pp ppf vs + +let str = pp_print_string +let sexp fmt s pp x = fprintf fmt "@[<3>(%s@ %a@)]" s pp x +let pair pp1 pp2 fmt (v1,v2) = + pp1 fmt v1; pp_print_space fmt () ; pp2 fmt v2 +let triple pp1 pp2 pp3 fmt (v1, v2, v3) = + pp1 fmt v1; pp_print_space fmt () ; + pp2 fmt v2; pp_print_space fmt () ; + pp3 fmt v3 +let int = pp_print_int +let optint fmt = function + | None -> () + | Some i -> fprintf fmt "@ %d" i diff --git a/lib/re_glob.mli b/lib/re_glob.mli index 8f38db5..4559a70 100644 --- a/lib/re_glob.mli +++ b/lib/re_glob.mli @@ -54,7 +54,7 @@ val glob : slash. Defaults to true. If [expand_braces] is true, braced sets will expand into multiple globs, - e.g. a{x,y}b{1,2} matches axb1, axb2, ayb1, ayb2. As specified for bash, brace + e.g. a\{x,y\}b\{1,2\} matches axb1, axb2, ayb1, ayb2. As specified for bash, brace expansion is purely textual and can be nested. Defaults to false. *) val glob' : ?anchored:bool -> bool -> string -> Re.t diff --git a/lib_test/META b/lib_test/META index 58690ef..d5fae05 100644 --- a/lib_test/META +++ b/lib_test/META @@ -1,6 +1,6 @@ # OASIS_START -# DO NOT EDIT (digest: 16cf6121c8ebd6199b65b6f8ddd610a5) -version = "1.5.0" +# DO NOT EDIT (digest: 2f3aecdc681b02148ad0a4004aea972f) +version = "1.6.0" description = "Pure OCaml regular expression library" requires = "oUnit" archive(byte) = "fort_unit.cma" diff --git a/lib_test/re_match.ml b/lib_test/re_match.ml index 415b115..4858013 100644 --- a/lib_test/re_match.ml +++ b/lib_test/re_match.ml @@ -50,7 +50,7 @@ let check_phone cnt must_print line = with Not_found -> () let n = if Array.length Sys.argv > 1 then int_of_string Sys.argv.(1) else 1;; -for i = 2 to n do +for _i = 2 to n do List.iter (check_phone (ref 1) false) phones done; List.iter (check_phone (ref 1) true) phones diff --git a/myocamlbuild.ml b/myocamlbuild.ml index a4c86f9..0696d3a 100644 --- a/myocamlbuild.ml +++ b/myocamlbuild.ml @@ -1,5 +1,5 @@ (* OASIS_START *) -(* DO NOT EDIT (digest: f9c8a0ea318f44d9c8a85053927fb8c2) *) +(* DO NOT EDIT (digest: e21dda14fe9fbcc90604493f9f1acd1d) *) module OASISGettext = struct (* # 22 "src/oasis/OASISGettext.ml" *) @@ -29,6 +29,166 @@ module OASISGettext = struct end +module OASISString = struct +(* # 22 "src/oasis/OASISString.ml" *) + + + (** Various string utilities. + + Mostly inspired by extlib and batteries ExtString and BatString libraries. + + @author Sylvain Le Gall + *) + + + let nsplitf str f = + if str = "" then + [] + else + let buf = Buffer.create 13 in + let lst = ref [] in + let push () = + lst := Buffer.contents buf :: !lst; + Buffer.clear buf + in + let str_len = String.length str in + for i = 0 to str_len - 1 do + if f str.[i] then + push () + else + Buffer.add_char buf str.[i] + done; + push (); + List.rev !lst + + + (** [nsplit c s] Split the string [s] at char [c]. It doesn't include the + separator. + *) + let nsplit str c = + nsplitf str ((=) c) + + + let find ~what ?(offset=0) str = + let what_idx = ref 0 in + let str_idx = ref offset in + while !str_idx < String.length str && + !what_idx < String.length what do + if str.[!str_idx] = what.[!what_idx] then + incr what_idx + else + what_idx := 0; + incr str_idx + done; + if !what_idx <> String.length what then + raise Not_found + else + !str_idx - !what_idx + + + let sub_start str len = + let str_len = String.length str in + if len >= str_len then + "" + else + String.sub str len (str_len - len) + + + let sub_end ?(offset=0) str len = + let str_len = String.length str in + if len >= str_len then + "" + else + String.sub str 0 (str_len - len) + + + let starts_with ~what ?(offset=0) str = + let what_idx = ref 0 in + let str_idx = ref offset in + let ok = ref true in + while !ok && + !str_idx < String.length str && + !what_idx < String.length what do + if str.[!str_idx] = what.[!what_idx] then + incr what_idx + else + ok := false; + incr str_idx + done; + if !what_idx = String.length what then + true + else + false + + + let strip_starts_with ~what str = + if starts_with ~what str then + sub_start str (String.length what) + else + raise Not_found + + + let ends_with ~what ?(offset=0) str = + let what_idx = ref ((String.length what) - 1) in + let str_idx = ref ((String.length str) - 1) in + let ok = ref true in + while !ok && + offset <= !str_idx && + 0 <= !what_idx do + if str.[!str_idx] = what.[!what_idx] then + decr what_idx + else + ok := false; + decr str_idx + done; + if !what_idx = -1 then + true + else + false + + + let strip_ends_with ~what str = + if ends_with ~what str then + sub_end str (String.length what) + else + raise Not_found + + + let replace_chars f s = + let buf = Buffer.create (String.length s) in + String.iter (fun c -> Buffer.add_char buf (f c)) s; + Buffer.contents buf + + let lowercase_ascii = + replace_chars + (fun c -> + if (c >= 'A' && c <= 'Z') then + Char.chr (Char.code c + 32) + else + c) + + let uncapitalize_ascii s = + if s <> "" then + (lowercase_ascii (String.sub s 0 1)) ^ (String.sub s 1 ((String.length s) - 1)) + else + s + + let uppercase_ascii = + replace_chars + (fun c -> + if (c >= 'a' && c <= 'z') then + Char.chr (Char.code c - 32) + else + c) + + let capitalize_ascii s = + if s <> "" then + (uppercase_ascii (String.sub s 0 1)) ^ (String.sub s 1 ((String.length s) - 1)) + else + s + +end + module OASISExpr = struct (* # 22 "src/oasis/OASISExpr.ml" *) @@ -129,7 +289,7 @@ module OASISExpr = struct end -# 132 "myocamlbuild.ml" +# 292 "myocamlbuild.ml" module BaseEnvLight = struct (* # 22 "src/base/BaseEnvLight.ml" *) @@ -234,7 +394,7 @@ module BaseEnvLight = struct end -# 237 "myocamlbuild.ml" +# 397 "myocamlbuild.ml" module MyOCamlbuildFindlib = struct (* # 22 "src/plugins/ocamlbuild/MyOCamlbuildFindlib.ml" *) @@ -516,7 +676,7 @@ module MyOCamlbuildBase = struct | nm, [], intf_modules -> ocaml_lib nm; let cmis = - List.map (fun m -> (String.uncapitalize m) ^ ".cmi") + List.map (fun m -> (OASISString.uncapitalize_ascii m) ^ ".cmi") intf_modules in dep ["ocaml"; "link"; "library"; "file:"^nm^".cma"] cmis | nm, dir :: tl, intf_modules -> @@ -529,7 +689,7 @@ module MyOCamlbuildBase = struct ["compile"; "infer_interface"; "doc"]) tl; let cmis = - List.map (fun m -> dir^"/"^(String.uncapitalize m)^".cmi") + List.map (fun m -> dir^"/"^(OASISString.uncapitalize_ascii m)^".cmi") intf_modules in dep ["ocaml"; "link"; "library"; "file:"^dir^"/"^nm^".cma"] cmis) @@ -603,7 +763,7 @@ module MyOCamlbuildBase = struct end -# 606 "myocamlbuild.ml" +# 766 "myocamlbuild.ml" open Ocamlbuild_plugin;; let package_default = { @@ -628,6 +788,6 @@ let conf = {MyOCamlbuildFindlib.no_automatic_syntax = false} let dispatch_default = MyOCamlbuildBase.dispatch_default conf package_default;; -# 632 "myocamlbuild.ml" +# 792 "myocamlbuild.ml" (* OASIS_STOP *) Ocamlbuild_plugin.dispatch dispatch_default;; diff --git a/opam b/opam index 04eb114..b1c385a 100644 --- a/opam +++ b/opam @@ -25,6 +25,7 @@ build-test: [ remove: [["ocamlfind" "remove" "re"]] depends: [ "ocamlfind" {build} + "ocamlbuild" {build} "base-bytes" "ounit" {test} ] diff --git a/setup.ml b/setup.ml index 793fd2b..9c5bef9 100644 --- a/setup.ml +++ b/setup.ml @@ -1,9 +1,9 @@ (* setup.ml generated for the first time by OASIS v0.2.1~alpha1 *) (* OASIS_START *) -(* DO NOT EDIT (digest: 2de2d6327c0a784427ed0a0b709445e8) *) +(* DO NOT EDIT (digest: 9ca7744eb2d1e0439500041d071e4367) *) (* - Regenerated by OASIS v0.4.5 + Regenerated by OASIS v0.4.6 Visit http://oasis.forge.ocamlcore.org for more information and documentation about functions used in this file. *) @@ -246,6 +246,33 @@ module OASISString = struct String.iter (fun c -> Buffer.add_char buf (f c)) s; Buffer.contents buf + let lowercase_ascii = + replace_chars + (fun c -> + if (c >= 'A' && c <= 'Z') then + Char.chr (Char.code c + 32) + else + c) + + let uncapitalize_ascii s = + if s <> "" then + (lowercase_ascii (String.sub s 0 1)) ^ (String.sub s 1 ((String.length s) - 1)) + else + s + + let uppercase_ascii = + replace_chars + (fun c -> + if (c >= 'a' && c <= 'z') then + Char.chr (Char.code c - 32) + else + c) + + let capitalize_ascii s = + if s <> "" then + (uppercase_ascii (String.sub s 0 1)) ^ (String.sub s 1 ((String.length s) - 1)) + else + s end @@ -315,19 +342,15 @@ module OASISUtils = struct let compare_csl s1 s2 = - String.compare (String.lowercase s1) (String.lowercase s2) + String.compare (OASISString.lowercase_ascii s1) (OASISString.lowercase_ascii s2) module HashStringCsl = Hashtbl.Make (struct type t = string - - let equal s1 s2 = - (String.lowercase s1) = (String.lowercase s2) - - let hash s = - Hashtbl.hash (String.lowercase s) + let equal s1 s2 = (compare_csl s1 s2) = 0 + let hash s = Hashtbl.hash (OASISString.lowercase_ascii s) end) module SetStringCsl = @@ -365,7 +388,7 @@ module OASISUtils = struct else buf in - String.lowercase buf + OASISString.lowercase_ascii buf end @@ -471,7 +494,7 @@ module PropList = struct order = Queue.create (); name_norm = (if case_insensitive then - String.lowercase + OASISString.lowercase_ascii else fun s -> s); } @@ -1822,13 +1845,13 @@ module OASISUnixPath = struct let capitalize_file f = let dir = dirname f in let base = basename f in - concat dir (String.capitalize base) + concat dir (OASISString.capitalize_ascii base) let uncapitalize_file f = let dir = dirname f in let base = basename f in - concat dir (String.uncapitalize base) + concat dir (OASISString.uncapitalize_ascii base) end @@ -2890,7 +2913,7 @@ module OASISFileUtil = struct end -# 2893 "setup.ml" +# 2916 "setup.ml" module BaseEnvLight = struct (* # 22 "src/base/BaseEnvLight.ml" *) @@ -2995,7 +3018,7 @@ module BaseEnvLight = struct end -# 2998 "setup.ml" +# 3021 "setup.ml" module BaseContext = struct (* # 22 "src/base/BaseContext.ml" *) @@ -5406,7 +5429,7 @@ module BaseSetup = struct end -# 5409 "setup.ml" +# 5432 "setup.ml" module InternalConfigurePlugin = struct (* # 22 "src/plugins/internal/InternalConfigurePlugin.ml" *) @@ -5845,8 +5868,8 @@ module InternalInstallPlugin = struct let make_fnames modul sufx = List.fold_right begin fun sufx accu -> - (String.capitalize modul ^ sufx) :: - (String.uncapitalize modul ^ sufx) :: + (OASISString.capitalize_ascii modul ^ sufx) :: + (OASISString.uncapitalize_ascii modul ^ sufx) :: accu end sufx @@ -6270,7 +6293,7 @@ module InternalInstallPlugin = struct end -# 6273 "setup.ml" +# 6296 "setup.ml" module OCamlbuildCommon = struct (* # 22 "src/plugins/ocamlbuild/OCamlbuildCommon.ml" *) @@ -6648,7 +6671,7 @@ module OCamlbuildDocPlugin = struct end -# 6651 "setup.ml" +# 6674 "setup.ml" module CustomPlugin = struct (* # 22 "src/plugins/custom/CustomPlugin.ml" *) @@ -6796,13 +6819,15 @@ module CustomPlugin = struct end -# 6799 "setup.ml" +# 6822 "setup.ml" open OASISTypes;; let setup_t = { BaseSetup.configure = InternalConfigurePlugin.configure; - build = OCamlbuildPlugin.build []; + build = + OCamlbuildPlugin.build + ["-cflags '-w +a-40-42-44-3-4-48 -warn-error +1..49'"]; test = [ ("re_test_re", @@ -7002,10 +7027,10 @@ let setup_t = oasis_version = "0.4"; ocaml_version = None; findlib_version = None; - alpha_features = ["compiled_setup_ml"]; + alpha_features = ["compiled_setup_ml"; "ocamlbuild_more_args"]; beta_features = []; name = "re"; - version = "1.5.0"; + version = "1.6.0"; license = OASISLicense.DEP5License (OASISLicense.DEP5Unit @@ -7084,7 +7109,8 @@ let setup_t = { lib_modules = ["Re"]; lib_pack = false; - lib_internal_modules = ["Re_cset"; "Re_automata"]; + lib_internal_modules = + ["Re_fmt"; "Re_cset"; "Re_automata"]; lib_findlib_parent = None; lib_findlib_name = Some "re"; lib_findlib_containers = [] @@ -7759,8 +7785,8 @@ let setup_t = plugin_data = [] }; oasis_fn = Some "_oasis"; - oasis_version = "0.4.5"; - oasis_digest = Some "�\014\001��\146\155>�a\015�>3\012\031"; + oasis_version = "0.4.6"; + oasis_digest = Some "\211\024:\168\249\128Yt&\200\190[m\210\175\204"; oasis_exec = None; oasis_setup_args = []; setup_update = false @@ -7768,6 +7794,6 @@ let setup_t = let setup () = BaseSetup.setup setup_t;; -# 7772 "setup.ml" +# 7798 "setup.ml" (* OASIS_STOP *) let () = setup ();; -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ocaml-maint/packages/ocaml-re.git _______________________________________________ Pkg-ocaml-maint-commits mailing list Pkg-ocaml-maint-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-ocaml-maint-commits