summaryrefslogtreecommitdiff
path: root/src/parse
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse')
-rw-r--r--src/parse/mod.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/parse/mod.rs b/src/parse/mod.rs
index 10aaad23..1ab2fb15 100644
--- a/src/parse/mod.rs
+++ b/src/parse/mod.rs
@@ -25,6 +25,20 @@ pub fn parse(src: &str) -> Rc<GreenNode> {
}
}
+/// Parse a block. Returns `Some` if there was only one block.
+pub fn parse_block(source: &str) -> Option<Rc<GreenNode>> {
+ let mut p = Parser::new(source);
+ block(&mut p);
+ if p.eof() {
+ match p.finish().into_iter().next() {
+ Some(Green::Node(node)) => Some(node),
+ _ => unreachable!(),
+ }
+ } else {
+ None
+ }
+}
+
/// Parse markup.
fn markup(p: &mut Parser) {
markup_while(p, true, &mut |_| true)