pub struct LuaPatternBuilder { /* private fields */ }Expand description
Build a byte Lua pattern, optionally escaping ‘magic’ characters
Implementations§
Source§impl LuaPatternBuilder
impl LuaPatternBuilder
Sourcepub fn new() -> LuaPatternBuilder
pub fn new() -> LuaPatternBuilder
Create a new Lua pattern builder
Examples found in repository?
examples/range.rs (line 20)
4fn main() {
5 let mut m = LuaPattern::new("(%a+) one");
6 let text = " hello one two";
7 assert!(m.matches(text));
8 assert_eq!(m.capture(1), 1..6);
9 assert_eq!(m.capture(0), 1..10);
10
11 let v = m.captures(text);
12 assert_eq!(v, &["hello one", "hello"]);
13
14 let mut v = Vec::new();
15 assert!(m.capture_into(text, &mut v));
16 assert_eq!(v, &["hello one", "hello"]);
17
18 let bytes = &[0xFF, 0xEE, 0x0, 0xDE, 0x24, 0x24, 0xBE, 0x0, 0x0];
19
20 let patt = LuaPatternBuilder::new()
21 .bytes_as_hex("DE24")
22 .text("+")
23 .bytes(&[0xBE])
24 .build();
25
26 let mut m = LuaPattern::from_bytes(&patt);
27 assert!(m.matches_bytes(bytes));
28 assert_eq!(&bytes[m.capture(0)], &[0xDE, 0x24, 0x24, 0xBE]);
29
30 let mut m = LuaPattern::new("(%S+)%s*=%s*(%S+);%s*");
31 let res = m.gsub("a=2; b=3; c = 4;", "'%2':%1 ");
32 println!("{}", res);
33
34 let mut m = LuaPattern::new("%s+");
35 let res = m.gsub("hello dolly you're so fine", "");
36 println!("{}", res);
37}Sourcepub fn text(&mut self, s: &str) -> &mut Self
pub fn text(&mut self, s: &str) -> &mut Self
Add unescaped characters from a string
let patt = lua_patterns::LuaPatternBuilder::new()
.text("(boo)")
.build();
assert_eq!(std::str::from_utf8(&patt).unwrap(), "(boo)");Examples found in repository?
examples/range.rs (line 22)
4fn main() {
5 let mut m = LuaPattern::new("(%a+) one");
6 let text = " hello one two";
7 assert!(m.matches(text));
8 assert_eq!(m.capture(1), 1..6);
9 assert_eq!(m.capture(0), 1..10);
10
11 let v = m.captures(text);
12 assert_eq!(v, &["hello one", "hello"]);
13
14 let mut v = Vec::new();
15 assert!(m.capture_into(text, &mut v));
16 assert_eq!(v, &["hello one", "hello"]);
17
18 let bytes = &[0xFF, 0xEE, 0x0, 0xDE, 0x24, 0x24, 0xBE, 0x0, 0x0];
19
20 let patt = LuaPatternBuilder::new()
21 .bytes_as_hex("DE24")
22 .text("+")
23 .bytes(&[0xBE])
24 .build();
25
26 let mut m = LuaPattern::from_bytes(&patt);
27 assert!(m.matches_bytes(bytes));
28 assert_eq!(&bytes[m.capture(0)], &[0xDE, 0x24, 0x24, 0xBE]);
29
30 let mut m = LuaPattern::new("(%S+)%s*=%s*(%S+);%s*");
31 let res = m.gsub("a=2; b=3; c = 4;", "'%2':%1 ");
32 println!("{}", res);
33
34 let mut m = LuaPattern::new("%s+");
35 let res = m.gsub("hello dolly you're so fine", "");
36 println!("{}", res);
37}Sourcepub fn text_lines(&mut self, lines: &str) -> &mut Self
pub fn text_lines(&mut self, lines: &str) -> &mut Self
Add unescaped characters from lines
This looks for first non-whitespace run in each line, useful for spreading patterns out and commmenting them. Works with patterns that use ‘%s’ religiously!
let patt = lua_patterns::LuaPatternBuilder::new()
.text_lines("
hello-dolly
you-are-fine # comment
cool
")
.build();
assert_eq!(std::str::from_utf8(&patt).unwrap(),
"hello-dollyyou-are-finecool");Sourcepub fn bytes(&mut self, b: &[u8]) -> &mut Self
pub fn bytes(&mut self, b: &[u8]) -> &mut Self
Add escaped bytes from a slice
let patt = lua_patterns::LuaPatternBuilder::new()
.text("^")
.bytes(b"^") // magic character!
.build();
assert_eq!(std::str::from_utf8(&patt).unwrap(), "^%^");Examples found in repository?
examples/range.rs (line 23)
4fn main() {
5 let mut m = LuaPattern::new("(%a+) one");
6 let text = " hello one two";
7 assert!(m.matches(text));
8 assert_eq!(m.capture(1), 1..6);
9 assert_eq!(m.capture(0), 1..10);
10
11 let v = m.captures(text);
12 assert_eq!(v, &["hello one", "hello"]);
13
14 let mut v = Vec::new();
15 assert!(m.capture_into(text, &mut v));
16 assert_eq!(v, &["hello one", "hello"]);
17
18 let bytes = &[0xFF, 0xEE, 0x0, 0xDE, 0x24, 0x24, 0xBE, 0x0, 0x0];
19
20 let patt = LuaPatternBuilder::new()
21 .bytes_as_hex("DE24")
22 .text("+")
23 .bytes(&[0xBE])
24 .build();
25
26 let mut m = LuaPattern::from_bytes(&patt);
27 assert!(m.matches_bytes(bytes));
28 assert_eq!(&bytes[m.capture(0)], &[0xDE, 0x24, 0x24, 0xBE]);
29
30 let mut m = LuaPattern::new("(%S+)%s*=%s*(%S+);%s*");
31 let res = m.gsub("a=2; b=3; c = 4;", "'%2':%1 ");
32 println!("{}", res);
33
34 let mut m = LuaPattern::new("%s+");
35 let res = m.gsub("hello dolly you're so fine", "");
36 println!("{}", res);
37}Sourcepub fn bytes_as_hex(&mut self, bs: &str) -> &mut Self
pub fn bytes_as_hex(&mut self, bs: &str) -> &mut Self
Add escaped bytes from hex string
This consists of adjacent pairs of hex digits.
let patt = lua_patterns::LuaPatternBuilder::new()
.text("^")
.bytes_as_hex("5E") // which is ASCII '^'
.build();
assert_eq!(std::str::from_utf8(&patt).unwrap(), "^%^");Examples found in repository?
examples/range.rs (line 21)
4fn main() {
5 let mut m = LuaPattern::new("(%a+) one");
6 let text = " hello one two";
7 assert!(m.matches(text));
8 assert_eq!(m.capture(1), 1..6);
9 assert_eq!(m.capture(0), 1..10);
10
11 let v = m.captures(text);
12 assert_eq!(v, &["hello one", "hello"]);
13
14 let mut v = Vec::new();
15 assert!(m.capture_into(text, &mut v));
16 assert_eq!(v, &["hello one", "hello"]);
17
18 let bytes = &[0xFF, 0xEE, 0x0, 0xDE, 0x24, 0x24, 0xBE, 0x0, 0x0];
19
20 let patt = LuaPatternBuilder::new()
21 .bytes_as_hex("DE24")
22 .text("+")
23 .bytes(&[0xBE])
24 .build();
25
26 let mut m = LuaPattern::from_bytes(&patt);
27 assert!(m.matches_bytes(bytes));
28 assert_eq!(&bytes[m.capture(0)], &[0xDE, 0x24, 0x24, 0xBE]);
29
30 let mut m = LuaPattern::new("(%S+)%s*=%s*(%S+);%s*");
31 let res = m.gsub("a=2; b=3; c = 4;", "'%2':%1 ");
32 println!("{}", res);
33
34 let mut m = LuaPattern::new("%s+");
35 let res = m.gsub("hello dolly you're so fine", "");
36 println!("{}", res);
37}Sourcepub fn build(&mut self) -> Vec<u8> ⓘ
pub fn build(&mut self) -> Vec<u8> ⓘ
Create the pattern
Examples found in repository?
examples/range.rs (line 24)
4fn main() {
5 let mut m = LuaPattern::new("(%a+) one");
6 let text = " hello one two";
7 assert!(m.matches(text));
8 assert_eq!(m.capture(1), 1..6);
9 assert_eq!(m.capture(0), 1..10);
10
11 let v = m.captures(text);
12 assert_eq!(v, &["hello one", "hello"]);
13
14 let mut v = Vec::new();
15 assert!(m.capture_into(text, &mut v));
16 assert_eq!(v, &["hello one", "hello"]);
17
18 let bytes = &[0xFF, 0xEE, 0x0, 0xDE, 0x24, 0x24, 0xBE, 0x0, 0x0];
19
20 let patt = LuaPatternBuilder::new()
21 .bytes_as_hex("DE24")
22 .text("+")
23 .bytes(&[0xBE])
24 .build();
25
26 let mut m = LuaPattern::from_bytes(&patt);
27 assert!(m.matches_bytes(bytes));
28 assert_eq!(&bytes[m.capture(0)], &[0xDE, 0x24, 0x24, 0xBE]);
29
30 let mut m = LuaPattern::new("(%S+)%s*=%s*(%S+);%s*");
31 let res = m.gsub("a=2; b=3; c = 4;", "'%2':%1 ");
32 println!("{}", res);
33
34 let mut m = LuaPattern::new("%s+");
35 let res = m.gsub("hello dolly you're so fine", "");
36 println!("{}", res);
37}Sourcepub fn hex_to_bytes(s: &str) -> Vec<u8> ⓘ
pub fn hex_to_bytes(s: &str) -> Vec<u8> ⓘ
Utility to create a vector of bytes from a hex string
let bb = lua_patterns::LuaPatternBuilder::hex_to_bytes("AEFE00FE");
assert_eq!(bb, &[0xAE,0xFE,0x00,0xFE]);Sourcepub fn bytes_to_hex(s: &[u8]) -> String
pub fn bytes_to_hex(s: &[u8]) -> String
Utility to create a hex string from a slice of bytes
let hex = lua_patterns::LuaPatternBuilder::bytes_to_hex(&[0xAE,0xFE,0x00,0xFE]);
assert_eq!(hex,"AEFE00FE");
Auto Trait Implementations§
impl Freeze for LuaPatternBuilder
impl RefUnwindSafe for LuaPatternBuilder
impl Send for LuaPatternBuilder
impl Sync for LuaPatternBuilder
impl Unpin for LuaPatternBuilder
impl UnsafeUnpin for LuaPatternBuilder
impl UnwindSafe for LuaPatternBuilder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more