refactor: remove regex crates
This commit is contained in:
parent
ad9f29bcb9
commit
390b7abb33
|
@ -5,5 +5,3 @@ authors = ["PoiScript <poiscript@gmail.com>"]
|
|||
|
||||
[dependencies]
|
||||
jetscii = "0.4.3"
|
||||
lazy_static = "1.2.0"
|
||||
regex = "1"
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
use regex::Regex;
|
||||
|
||||
#[cfg_attr(test, derive(PartialEq))]
|
||||
#[derive(Debug)]
|
||||
pub struct Block;
|
||||
|
@ -14,11 +12,18 @@ impl Block {
|
|||
let args = eol!(src);
|
||||
let name = until_while!(src, 8, |c| c == b' ' || c == b'\n', |c: u8| c
|
||||
.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],
|
||||
if name == args {
|
||||
None
|
||||
|
@ -26,14 +31,14 @@ impl Block {
|
|||
Some(&src[name..args])
|
||||
},
|
||||
args,
|
||||
content,
|
||||
// including the eol character
|
||||
if end < src.len() && src.as_bytes()[end] == b'\n' {
|
||||
end + 1
|
||||
} else {
|
||||
end
|
||||
},
|
||||
))
|
||||
pos,
|
||||
line_end,
|
||||
));
|
||||
}
|
||||
pos = line_end;
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -12,21 +12,32 @@ impl DynBlock {
|
|||
let args = eol!(src);
|
||||
let name = until_while!(src, 9, |c| c == b' ' || c == b'\n', |c: u8| c
|
||||
.is_ascii_alphabetic())?;
|
||||
// TODO: ignore case matching
|
||||
let content = src.find("\n#+END:")?;
|
||||
let end = eol!(src, content + 1);
|
||||
|
||||
Some((
|
||||
&src[9..name],
|
||||
let mut pos = 0;
|
||||
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 {
|
||||
None
|
||||
} else {
|
||||
Some(&src[name..args].trim())
|
||||
},
|
||||
args,
|
||||
content + 1,
|
||||
end + 1,
|
||||
))
|
||||
pos,
|
||||
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))]
|
||||
#[derive(Debug)]
|
||||
pub struct Rule;
|
||||
|
||||
impl Rule {
|
||||
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]
|
||||
extern crate lazy_static;
|
||||
#[macro_use]
|
||||
extern crate jetscii;
|
||||
extern crate regex;
|
||||
|
||||
#[macro_use]
|
||||
mod utils;
|
||||
|
|
Loading…
Reference in a new issue