refactor: remove regex crates
This commit is contained in:
parent
ad9f29bcb9
commit
390b7abb33
|
@ -5,5 +5,3 @@ authors = ["PoiScript <poiscript@gmail.com>"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
jetscii = "0.4.3"
|
jetscii = "0.4.3"
|
||||||
lazy_static = "1.2.0"
|
|
||||||
regex = "1"
|
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
use regex::Regex;
|
|
||||||
|
|
||||||
#[cfg_attr(test, derive(PartialEq))]
|
#[cfg_attr(test, derive(PartialEq))]
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Block;
|
pub struct Block;
|
||||||
|
@ -14,11 +12,18 @@ impl Block {
|
||||||
let args = eol!(src);
|
let args = eol!(src);
|
||||||
let name = until_while!(src, 8, |c| c == b' ' || c == b'\n', |c: u8| c
|
let name = until_while!(src, 8, |c| c == b' ' || c == b'\n', |c: u8| c
|
||||||
.is_ascii_alphabetic())?;
|
.is_ascii_alphabetic())?;
|
||||||
let end_re = format!(r"(?im)^[ \t]*#\+END_{}[ \t]*$", &src[8..name]);
|
|
||||||
let end_re = Regex::new(&end_re).unwrap();
|
|
||||||
let (content, end) = end_re.find(src).map(|m| (m.start(), m.end()))?;
|
|
||||||
|
|
||||||
Some((
|
let mut pos = 0;
|
||||||
|
let end = format!(r"#+END_{}", &src[8..name]);
|
||||||
|
while let Some(line_end) = src[pos..].find('\n').map(|i| i + pos + 1).or_else(|| {
|
||||||
|
if pos < src.len() {
|
||||||
|
Some(src.len())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}) {
|
||||||
|
if src[pos..line_end].trim().eq_ignore_ascii_case(&end) {
|
||||||
|
return Some((
|
||||||
&src[8..name],
|
&src[8..name],
|
||||||
if name == args {
|
if name == args {
|
||||||
None
|
None
|
||||||
|
@ -26,14 +31,14 @@ impl Block {
|
||||||
Some(&src[name..args])
|
Some(&src[name..args])
|
||||||
},
|
},
|
||||||
args,
|
args,
|
||||||
content,
|
pos,
|
||||||
// including the eol character
|
line_end,
|
||||||
if end < src.len() && src.as_bytes()[end] == b'\n' {
|
));
|
||||||
end + 1
|
}
|
||||||
} else {
|
pos = line_end;
|
||||||
end
|
}
|
||||||
},
|
|
||||||
))
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,21 +12,32 @@ impl DynBlock {
|
||||||
let args = eol!(src);
|
let args = eol!(src);
|
||||||
let name = until_while!(src, 9, |c| c == b' ' || c == b'\n', |c: u8| c
|
let name = until_while!(src, 9, |c| c == b' ' || c == b'\n', |c: u8| c
|
||||||
.is_ascii_alphabetic())?;
|
.is_ascii_alphabetic())?;
|
||||||
// TODO: ignore case matching
|
|
||||||
let content = src.find("\n#+END:")?;
|
|
||||||
let end = eol!(src, content + 1);
|
|
||||||
|
|
||||||
Some((
|
let mut pos = 0;
|
||||||
&src[9..name],
|
while let Some(line_end) = src[pos..].find('\n').map(|i| i + pos + 1).or_else(|| {
|
||||||
|
if pos < src.len() {
|
||||||
|
Some(src.len())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}) {
|
||||||
|
if src[pos..line_end].trim().eq_ignore_ascii_case("#+END:") {
|
||||||
|
return Some((
|
||||||
|
&src[8..name].trim(),
|
||||||
if name == args {
|
if name == args {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
Some(&src[name..args].trim())
|
Some(&src[name..args].trim())
|
||||||
},
|
},
|
||||||
args,
|
args,
|
||||||
content + 1,
|
pos,
|
||||||
end + 1,
|
line_end,
|
||||||
))
|
));
|
||||||
|
}
|
||||||
|
pos = line_end;
|
||||||
|
}
|
||||||
|
|
||||||
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
use regex::Regex;
|
|
||||||
|
|
||||||
lazy_static! {
|
|
||||||
static ref RULE_REGEX: Regex = Regex::new(r"^[ \t]*-{5,}[ \t]*\n?$").unwrap();
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg_attr(test, derive(PartialEq))]
|
#[cfg_attr(test, derive(PartialEq))]
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Rule;
|
pub struct Rule;
|
||||||
|
|
||||||
impl Rule {
|
impl Rule {
|
||||||
pub fn parse(src: &str) -> usize {
|
pub fn parse(src: &str) -> usize {
|
||||||
RULE_REGEX.find(src).map(|m| m.end()).unwrap_or(0)
|
let end = src.find('\n').map(|i| i + 1).unwrap_or_else(|| src.len());
|
||||||
|
let rules = &src[0..end].trim();
|
||||||
|
if rules.len() >= 5 && rules.chars().all(|c| c == '-') {
|
||||||
|
end
|
||||||
|
} else {
|
||||||
|
0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate lazy_static;
|
|
||||||
#[macro_use]
|
|
||||||
extern crate jetscii;
|
extern crate jetscii;
|
||||||
extern crate regex;
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
mod utils;
|
mod utils;
|
||||||
|
|
Loading…
Reference in a new issue