fix: fix some edge case errors
This commit is contained in:
parent
4d56633c43
commit
c5a6d82aa8
|
@ -6,7 +6,7 @@ use memchr::memchr2;
|
||||||
pub fn parse(src: &str) -> Option<(&str, Option<&str>, usize, usize, usize)> {
|
pub fn parse(src: &str) -> Option<(&str, Option<&str>, usize, usize, usize)> {
|
||||||
debug_assert!(src.starts_with("#+"));
|
debug_assert!(src.starts_with("#+"));
|
||||||
|
|
||||||
if src[2..8].to_uppercase() != "BEGIN_" {
|
if src.len() <= 8 || src[2..8].to_uppercase() != "BEGIN_" {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ use memchr::memchr2;
|
||||||
pub fn parse(src: &str) -> Option<(&str, Option<&str>, usize, usize, usize)> {
|
pub fn parse(src: &str) -> Option<(&str, Option<&str>, usize, usize, usize)> {
|
||||||
debug_assert!(src.starts_with("#+"));
|
debug_assert!(src.starts_with("#+"));
|
||||||
|
|
||||||
if !src[2..9].eq_ignore_ascii_case("BEGIN: ") {
|
if src.len() <= 9 || !src[2..9].eq_ignore_ascii_case("BEGIN: ") {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -96,8 +96,8 @@ pub fn parse<'a>(src: &'a str) -> (Option<Element<'a>>, usize, Option<(Element<'
|
||||||
|
|
||||||
macro_rules! brk {
|
macro_rules! brk {
|
||||||
($ele:expr, $off:expr) => {
|
($ele:expr, $off:expr) => {
|
||||||
break if line_beg == 0 || pos == start {
|
break if line_beg == start || pos == start {
|
||||||
(Some($ele), start + $off, None)
|
(Some($ele), pos + $off, None)
|
||||||
} else {
|
} else {
|
||||||
(
|
(
|
||||||
Some(Element::Paragraph {
|
Some(Element::Paragraph {
|
||||||
|
@ -272,8 +272,7 @@ pub fn parse<'a>(src: &'a str) -> (Option<Element<'a>>, usize, Option<(Element<'
|
||||||
mod tests {
|
mod tests {
|
||||||
#[test]
|
#[test]
|
||||||
fn parse() {
|
fn parse() {
|
||||||
use super::parse;
|
use super::{Element::*, *};
|
||||||
use super::Element::*;
|
|
||||||
|
|
||||||
assert_eq!(parse("\n\n\n"), (None, 3, None));
|
assert_eq!(parse("\n\n\n"), (None, 3, None));
|
||||||
|
|
||||||
|
@ -388,6 +387,17 @@ mod tests {
|
||||||
))
|
))
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
assert_eq!(
|
||||||
|
parse("\n #+ATTR_HTML: :width 200px"),
|
||||||
|
(
|
||||||
|
Some(Keyword {
|
||||||
|
key: keyword::Key::Attr { backend: "HTML" },
|
||||||
|
value: ":width 200px"
|
||||||
|
}),
|
||||||
|
"\n #+ATTR_HTML: :width 200px".len(),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
);
|
||||||
// TODO: more tests
|
// TODO: more tests
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -144,7 +144,7 @@ pub fn parse<'a>(src: &'a str) -> (Object<'a>, usize, Option<(Object<'a>, usize)
|
||||||
if let Some(off) = bs
|
if let Some(off) = bs
|
||||||
.find(&bytes[pos + 1..])
|
.find(&bytes[pos + 1..])
|
||||||
.map(|i| i + pos + 1)
|
.map(|i| i + pos + 1)
|
||||||
.filter(|&i| i < src.len() - 2)
|
.filter(|&i| i < src.len() - 3)
|
||||||
{
|
{
|
||||||
pos = off;
|
pos = off;
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue