third_party_rust_regex/tests/test_backtrack_bytes.rs
Andrew Gallant 97d374b680 Add rure, a C API.
This commit contains a new sub-crate called `regex-capi` which provides
a C library called `rure`.

A new `RegexBuilder` type was also added to the Rust API proper, which
permits both users of C and Rust to tweak various knobs on a `Regex`.
This fixes issue #166.

Since it's likely that this API will be used to provide bindings to
other languages, I've created bindings to Go as a proof of concept:
https://github.com/BurntSushi/rure-go --- to my knowledge, the wrapper
has as little overhead as it can. It was in particular important for the
C library to not store any pointers provided by the caller, as this can
be problematic in languages with managed runtimes and a moving GC.

The C API doesn't expose `RegexSet` and a few other convenience functions
such as splitting or replacing. That can be future work.

Note that the regex-capi crate requires Rust 1.9, since it uses
`panic::catch_unwind`.

This also includes tests of basic API functionality and a commented
example. Both should now run as part of CI.
2016-04-29 10:42:11 -04:00

68 lines
1.5 KiB
Rust

// Copyright 2014-2015 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
extern crate rand;
extern crate regex;
macro_rules! regex_new {
($re:expr) => {{
use regex::internal::ExecBuilder;
ExecBuilder::new($re)
.bounded_backtracking()
.unicode(false)
.only_utf8(false)
.build()
.map(|e| e.into_byte_regex())
}}
}
macro_rules! regex {
($re:expr) => {
regex_new!($re).unwrap()
}
}
macro_rules! regex_set_new {
($re:expr) => {{
use regex::internal::ExecBuilder;
ExecBuilder::new_many($re)
.bounded_backtracking()
.unicode(false)
.only_utf8(false)
.build()
.map(|e| e.into_byte_regex_set())
}}
}
macro_rules! regex_set {
($res:expr) => {
regex_set_new!($res).unwrap()
}
}
// Must come before other module definitions.
include!("macros_bytes.rs");
include!("macros.rs");
mod api;
mod bytes;
mod crazy;
mod flags;
mod fowler;
mod multiline;
mod noparse;
mod regression;
mod replace;
mod set;
mod suffix_reverse;
mod unicode;
mod word_boundary;
mod word_boundary_ascii;