feat: provide a static ParseConfig
This commit is contained in:
parent
54163520d6
commit
098433b5db
|
@ -3,9 +3,9 @@
|
||||||
/// Parse configuration
|
/// Parse configuration
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct ParseConfig {
|
pub struct ParseConfig {
|
||||||
/// Headline's TODO keywords, todo type
|
/// Headline's todo keywords, todo type
|
||||||
pub todo_keywords: Vec<String>,
|
pub todo_keywords: Vec<String>,
|
||||||
/// Headline's TODO keywords, done type
|
/// Headline's todo keywords, done type
|
||||||
pub done_keywords: Vec<String>,
|
pub done_keywords: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,3 +17,7 @@ impl Default for ParseConfig {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lazy_static::lazy_static! {
|
||||||
|
pub static ref DEFAULT_CONFIG: ParseConfig = ParseConfig::default();
|
||||||
|
}
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
|
|
||||||
use crate::parsers::{eol, line, take_lines_while};
|
|
||||||
|
|
||||||
use nom::{
|
use nom::{
|
||||||
bytes::complete::{tag, take_while1},
|
bytes::complete::{tag, take_while1},
|
||||||
sequence::delimited,
|
sequence::delimited,
|
||||||
IResult,
|
IResult,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use crate::parsers::{eol, line, take_lines_while};
|
||||||
|
|
||||||
#[cfg_attr(test, derive(PartialEq))]
|
#[cfg_attr(test, derive(PartialEq))]
|
||||||
#[cfg_attr(feature = "ser", derive(serde::Serialize))]
|
#[cfg_attr(feature = "ser", derive(serde::Serialize))]
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
|
|
||||||
use crate::parsers::{line, take_lines_while};
|
|
||||||
|
|
||||||
use nom::{
|
use nom::{
|
||||||
bytes::complete::tag_no_case,
|
bytes::complete::tag_no_case,
|
||||||
character::complete::{alpha1, space1},
|
character::complete::{alpha1, space1},
|
||||||
IResult,
|
IResult,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use crate::parsers::{line, take_lines_while};
|
||||||
|
|
||||||
#[cfg_attr(test, derive(PartialEq))]
|
#[cfg_attr(test, derive(PartialEq))]
|
||||||
#[cfg_attr(feature = "ser", derive(serde::Serialize))]
|
#[cfg_attr(feature = "ser", derive(serde::Serialize))]
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
|
use std::iter::once;
|
||||||
|
|
||||||
use memchr::memchr_iter;
|
use memchr::memchr_iter;
|
||||||
use std::iter::once;
|
|
||||||
|
|
||||||
#[cfg_attr(test, derive(PartialEq))]
|
#[cfg_attr(test, derive(PartialEq))]
|
||||||
#[cfg_attr(feature = "ser", derive(serde::Serialize))]
|
#[cfg_attr(feature = "ser", derive(serde::Serialize))]
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
use nom::{bytes::complete::take_while_m_n, IResult};
|
|
||||||
use std::usize;
|
use std::usize;
|
||||||
|
|
||||||
|
use nom::{bytes::complete::take_while_m_n, IResult};
|
||||||
|
|
||||||
use crate::parsers::eol;
|
use crate::parsers::eol;
|
||||||
|
|
||||||
pub(crate) fn parse_rule(input: &str) -> IResult<&str, ()> {
|
pub(crate) fn parse_rule(input: &str) -> IResult<&str, ()> {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
//! Headline Title
|
//! Headline Title
|
||||||
|
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use memchr::memrchr;
|
use memchr::memrchr;
|
||||||
use nom::{
|
use nom::{
|
||||||
|
@ -13,9 +14,8 @@ use nom::{
|
||||||
sequence::{delimited, preceded},
|
sequence::{delimited, preceded},
|
||||||
Err, IResult,
|
Err, IResult,
|
||||||
};
|
};
|
||||||
use std::collections::HashMap;
|
|
||||||
|
|
||||||
use crate::config::ParseConfig;
|
use crate::config::{ParseConfig, DEFAULT_CONFIG};
|
||||||
use crate::elements::{Drawer, Planning};
|
use crate::elements::{Drawer, Planning};
|
||||||
use crate::parsers::{line, skip_empty_lines, take_one_word};
|
use crate::parsers::{line, skip_empty_lines, take_one_word};
|
||||||
|
|
||||||
|
@ -196,15 +196,10 @@ impl Title<'_> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
lazy_static::lazy_static! {
|
|
||||||
static ref CONFIG: ParseConfig = ParseConfig::default();
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_headline_() {
|
fn parse_headline_() {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse_headline("**** DONE [#A] COMMENT Title :tag:a2%:", &CONFIG),
|
parse_headline("**** DONE [#A] COMMENT Title :tag:a2%:", &DEFAULT_CONFIG),
|
||||||
Ok((
|
Ok((
|
||||||
"",
|
"",
|
||||||
(
|
(
|
||||||
|
@ -217,27 +212,27 @@ fn parse_headline_() {
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse_headline("**** ToDO [#A] COMMENT Title", &CONFIG),
|
parse_headline("**** ToDO [#A] COMMENT Title", &DEFAULT_CONFIG),
|
||||||
Ok(("", (4, None, None, "ToDO [#A] COMMENT Title", vec![])))
|
Ok(("", (4, None, None, "ToDO [#A] COMMENT Title", vec![])))
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse_headline("**** T0DO [#A] COMMENT Title", &CONFIG),
|
parse_headline("**** T0DO [#A] COMMENT Title", &DEFAULT_CONFIG),
|
||||||
Ok(("", (4, None, None, "T0DO [#A] COMMENT Title", vec![])))
|
Ok(("", (4, None, None, "T0DO [#A] COMMENT Title", vec![])))
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse_headline("**** DONE [#1] COMMENT Title", &CONFIG),
|
parse_headline("**** DONE [#1] COMMENT Title", &DEFAULT_CONFIG),
|
||||||
Ok(("", (4, Some("DONE"), None, "[#1] COMMENT Title", vec![],)))
|
Ok(("", (4, Some("DONE"), None, "[#1] COMMENT Title", vec![],)))
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse_headline("**** DONE [#a] COMMENT Title", &CONFIG),
|
parse_headline("**** DONE [#a] COMMENT Title", &DEFAULT_CONFIG),
|
||||||
Ok(("", (4, Some("DONE"), None, "[#a] COMMENT Title", vec![],)))
|
Ok(("", (4, Some("DONE"), None, "[#a] COMMENT Title", vec![],)))
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse_headline("**** Title :tag:a2%", &CONFIG),
|
parse_headline("**** Title :tag:a2%", &DEFAULT_CONFIG),
|
||||||
Ok(("", (4, None, None, "Title :tag:a2%", vec![],)))
|
Ok(("", (4, None, None, "Title :tag:a2%", vec![],)))
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse_headline("**** Title tag:a2%:", &CONFIG),
|
parse_headline("**** Title tag:a2%:", &DEFAULT_CONFIG),
|
||||||
Ok(("", (4, None, None, "Title tag:a2%:", vec![],)))
|
Ok(("", (4, None, None, "Title tag:a2%:", vec![],)))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -278,14 +273,14 @@ fn parse_properties_drawer_() {
|
||||||
|
|
||||||
// #[test]
|
// #[test]
|
||||||
// fn is_commented() {
|
// fn is_commented() {
|
||||||
// assert!(Title::parse("* COMMENT Title", &CONFIG)
|
// assert!(Title::parse("* COMMENT Title", &DEFAULT_CONFIG)
|
||||||
// .1
|
// .1
|
||||||
// .is_commented());
|
// .is_commented());
|
||||||
// assert!(!Title::parse("* Title", &CONFIG).1.is_commented());
|
// assert!(!Title::parse("* Title", &DEFAULT_CONFIG).1.is_commented());
|
||||||
// assert!(!Title::parse("* C0MMENT Title", &CONFIG)
|
// assert!(!Title::parse("* C0MMENT Title", &DEFAULT_CONFIG)
|
||||||
// .1
|
// .1
|
||||||
// .is_commented());
|
// .is_commented());
|
||||||
// assert!(!Title::parse("* comment Title", &CONFIG)
|
// assert!(!Title::parse("* comment Title", &DEFAULT_CONFIG)
|
||||||
// .1
|
// .1
|
||||||
// .is_commented());
|
// .is_commented());
|
||||||
// }
|
// }
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
use super::write_datetime;
|
|
||||||
use crate::elements::Element;
|
|
||||||
use jetscii::{bytes, BytesConst};
|
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::io::{Error, Write};
|
use std::io::{Error, Write};
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
|
|
||||||
|
use jetscii::{bytes, BytesConst};
|
||||||
|
|
||||||
|
use crate::elements::Element;
|
||||||
|
use crate::export::write_datetime;
|
||||||
|
|
||||||
pub struct Escape<S: AsRef<str>>(pub S);
|
pub struct Escape<S: AsRef<str>>(pub S);
|
||||||
|
|
||||||
impl<S: AsRef<str>> fmt::Display for Escape<S> {
|
impl<S: AsRef<str>> fmt::Display for Escape<S> {
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
use super::write_datetime;
|
|
||||||
use crate::elements::{Element, Timestamp};
|
|
||||||
use std::io::{Error, Write};
|
use std::io::{Error, Write};
|
||||||
|
|
||||||
|
use crate::elements::{Element, Timestamp};
|
||||||
|
use crate::export::write_datetime;
|
||||||
|
|
||||||
pub trait OrgHandler<E: From<Error>> {
|
pub trait OrgHandler<E: From<Error>> {
|
||||||
fn start<W: Write>(&mut self, mut w: W, element: &Element) -> Result<(), E> {
|
fn start<W: Write>(&mut self, mut w: W, element: &Element) -> Result<(), E> {
|
||||||
use Element::*;
|
use Element::*;
|
||||||
|
|
|
@ -4,8 +4,7 @@ use std::borrow::Cow;
|
||||||
use crate::config::ParseConfig;
|
use crate::config::ParseConfig;
|
||||||
use crate::elements::{Element, Title};
|
use crate::elements::{Element, Title};
|
||||||
use crate::parsers::{parse_container, Container, OwnedArena};
|
use crate::parsers::{parse_container, Container, OwnedArena};
|
||||||
use crate::Org;
|
use crate::{Org, OrgizeError};
|
||||||
use crate::OrgizeError;
|
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug)]
|
||||||
pub struct HeadlineNode {
|
pub struct HeadlineNode {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use indextree::{Arena, NodeEdge, NodeId};
|
use indextree::{Arena, NodeEdge, NodeId};
|
||||||
use std::io::{Error, Write};
|
use std::io::{Error, Write};
|
||||||
|
|
||||||
use crate::config::ParseConfig;
|
use crate::config::{ParseConfig, DEFAULT_CONFIG};
|
||||||
use crate::elements::{Element, Title};
|
use crate::elements::{Element, Title};
|
||||||
use crate::export::*;
|
use crate::export::*;
|
||||||
use crate::node::{DocumentNode, HeadlineNode};
|
use crate::node::{DocumentNode, HeadlineNode};
|
||||||
|
@ -29,7 +29,7 @@ impl<'a> Org<'a> {
|
||||||
|
|
||||||
/// Create a new Org struct from parsing `text`, using the default ParseConfig
|
/// Create a new Org struct from parsing `text`, using the default ParseConfig
|
||||||
pub fn parse(text: &'a str) -> Org<'a> {
|
pub fn parse(text: &'a str) -> Org<'a> {
|
||||||
Org::parse_with_config(text, &ParseConfig::default())
|
Org::parse_with_config(text, &DEFAULT_CONFIG)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create a new Org struct from parsing `text`, using a custom ParseConfig
|
/// Create a new Org struct from parsing `text`, using a custom ParseConfig
|
||||||
|
|
Loading…
Reference in a new issue