refactor md parser, TODO: parse_str
Some checks failed
Test the running changes / Test (push) Failing after 44s
Some checks failed
Test the running changes / Test (push) Failing after 44s
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
#![deny(dead_code, unused_imports)]
|
||||
#![deny(unused_imports)]
|
||||
|
||||
use fstools::crawl_fs;
|
||||
use parser::parse;
|
||||
@@ -11,9 +11,91 @@ use std::{
|
||||
use to_html::ToHtml;
|
||||
|
||||
pub mod ast;
|
||||
mod parse_trait;
|
||||
pub mod parser;
|
||||
pub mod to_html;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct MdParseError {
|
||||
file: Option<PathBuf>,
|
||||
line: Option<usize>,
|
||||
//col: Option<usize>,
|
||||
expected: String,
|
||||
got: String,
|
||||
}
|
||||
|
||||
impl MdParseError {
|
||||
pub fn new(expected: impl ToString, got: impl ToString) -> Self {
|
||||
Self {
|
||||
file: None,
|
||||
line: None,
|
||||
//col: None,
|
||||
expected: expected.to_string(),
|
||||
got: got.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn from_line(line: usize, expected: impl ToString, got: impl ToString) -> Self {
|
||||
Self {
|
||||
file: None,
|
||||
line: Some(line),
|
||||
//col: None,
|
||||
expected: expected.to_string(),
|
||||
got: got.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
pub fn from_col(col: usize, expected: impl ToString, got: impl ToString) -> Self {
|
||||
Self {
|
||||
file: None,
|
||||
line: None,
|
||||
col: Some(col),
|
||||
expected: expected.to_string(),
|
||||
got: got.to_string(),
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
pub fn set_line(self, line: usize) -> Self {
|
||||
Self {
|
||||
file: self.file,
|
||||
line: Some(line),
|
||||
//col: self.col,
|
||||
expected: self.expected,
|
||||
got: self.got,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_file(self, file: PathBuf) -> Self {
|
||||
Self {
|
||||
file: Some(file),
|
||||
line: self.line,
|
||||
//col: self.col,
|
||||
expected: self.expected,
|
||||
got: self.got,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for MdParseError {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
// no error message :/
|
||||
let file = self.file.clone().unwrap_or("<unknown>".into());
|
||||
write!(
|
||||
f,
|
||||
"Parse error in '{}' on line {}: expected '{}', got '{}'",
|
||||
file.display(),
|
||||
self.line.unwrap_or(0),
|
||||
//self.col.unwrap_or(0),
|
||||
self.expected,
|
||||
self.got
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl std::error::Error for MdParseError {}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum Error {
|
||||
OutDirIsNotEmpty,
|
||||
@@ -24,6 +106,7 @@ pub enum Error {
|
||||
FileWrite,
|
||||
FileCreate,
|
||||
DirCreate,
|
||||
Parse(MdParseError),
|
||||
}
|
||||
|
||||
impl Display for Error {
|
||||
@@ -32,6 +115,12 @@ impl Display for Error {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<MdParseError> for Error {
|
||||
fn from(value: MdParseError) -> Self {
|
||||
Error::Parse(value)
|
||||
}
|
||||
}
|
||||
|
||||
impl std::error::Error for Error {}
|
||||
|
||||
type Result<T> = std::result::Result<T, crate::Error>;
|
||||
@@ -44,7 +133,7 @@ pub fn generate(indir: &PathBuf, outdir: &PathBuf, force: bool) -> Result<()> {
|
||||
|
||||
// read and parse md file
|
||||
let content = fs::read_to_string(&fullpath).map_err(|_e| Error::FileRead)?;
|
||||
let html = parse(&content).to_html();
|
||||
let html = parse(&content)?.to_html();
|
||||
|
||||
// write html data to file
|
||||
let mut newpath = outdir.to_owned();
|
||||
|
||||
Reference in New Issue
Block a user