Skip to content

Commit

Permalink
feat(frontend): setup parser for enclosed blocks
Browse files Browse the repository at this point in the history
  • Loading branch information
nfejzic committed Jan 6, 2022
1 parent f274017 commit 9a7afe9
Showing 1 changed file with 27 additions and 4 deletions.
31 changes: 27 additions & 4 deletions src/frontend/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@ use pest::{iterators::Pair, iterators::Pairs, Parser, Span};
use pest_derive::Parser;
use std::{fs, path::Path};

use crate::{um_elements::HeadingBlock, um_elements::ParagraphBlock, um_error::UmError};
use crate::{
um_elements::HeadingBlock,
um_elements::{ParagraphBlock, VerbatimBlock},
um_error::UmError,
};

use super::UnimarkupBlocks;

Expand Down Expand Up @@ -65,9 +69,17 @@ pub fn parse_unimarkup(um_file: &Path) -> Result<UnimarkupBlocks, UmError> {

if let Some(unimarkup) = rule_pairs.next() {
for pair in unimarkup.into_inner() {
if pair.as_rule() == Rule::atomic_block {
let mut atomic_blocks = parse_atomic_block(pair)?;
blocks.append(&mut atomic_blocks);
match pair.as_rule() {
Rule::atomic_block => {
let mut atomic_blocks = parse_atomic_block(pair)?;
blocks.append(&mut atomic_blocks);
}
Rule::enclosed_block => {
let mut enclosed_blocks = parse_enclosed_block(pair)?;

blocks.append(&mut enclosed_blocks);
}
_ => unreachable!("Unimarkup consists only of atomic and enclosed blocks."),
}
}
}
Expand All @@ -84,3 +96,14 @@ fn parse_atomic_block(input: Pair<Rule>) -> Result<UnimarkupBlocks, UmError> {

Ok(vec![])
}

fn parse_enclosed_block(input: Pair<Rule>) -> Result<UnimarkupBlocks, UmError> {
if let Ok(ref mut pairs) = UnimarkupParser::parse(Rule::verbatim, input.as_str()) {
return VerbatimBlock::parse(pairs, input.as_span());
} else if let Ok(ref mut pairs) = UnimarkupParser::parse(Rule::paragraph, input.as_str()) {
// fallback to paragraph for now
return ParagraphBlock::parse(pairs, input.as_span());
}

Ok(vec![])
}

0 comments on commit 9a7afe9

Please sign in to comment.