summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2019-02-20 17:36:34 +0100
committerLaurenz <laurmaedje@gmail.com>2019-02-20 17:36:34 +0100
commit29229c400257834d1d59b2cf53e7ce8f5c8a23dd (patch)
treed5a6045df80d2d8802cad73d11226080dfe6f2cd
parentcaf08ea5fac0a9afa25534f8333c0fef027b0f26 (diff)
Implement parsing trait for str ♻
-rw-r--r--src/doc.rs6
-rw-r--r--src/lib.rs8
-rw-r--r--src/parsing.rs25
-rw-r--r--src/pdf.rs6
4 files changed, 25 insertions, 20 deletions
diff --git a/src/doc.rs b/src/doc.rs
index a6d4b689..8ba26835 100644
--- a/src/doc.rs
+++ b/src/doc.rs
@@ -172,16 +172,16 @@ impl<'s> Generator<'s> {
#[cfg(test)]
mod generator_tests {
use super::*;
- use crate::parsing::{Tokenize, Parse};
+ use crate::parsing::ParseTree;
/// Test if the source gets generated into the document.
fn test(src: &str, doc: Document) {
- assert_eq!(src.tokenize().parse().unwrap().generate(), Ok(doc));
+ assert_eq!(src.parse_tree().unwrap().generate(), Ok(doc));
}
/// Test if generation gives this error for the source code.
fn test_err(src: &str, err: GenerationError) {
- assert_eq!(src.tokenize().parse().unwrap().generate(), Err(err));
+ assert_eq!(src.parse_tree().unwrap().generate(), Err(err));
}
#[test]
diff --git a/src/lib.rs b/src/lib.rs
index b09a6335..7e875d3e 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -5,17 +5,15 @@
//! # Example
//! This is an example of compiling a _really_ simple document into _PDF_.
//! ```
-//! use typeset::{parsing::{Tokenize, Parse}, doc::Generate, export::WritePdf};
+//! use typeset::{parsing::ParseTree, doc::Generate, export::WritePdf};
//!
//! let path = "hello-typeset.pdf";
//! # let path = "../target/hello-typeset.pdf";
//! let mut file = std::fs::File::create(path).unwrap();
//!
-//! // Tokenize, parse and then generate the document.
+//! // Parse the source and then generate the document.
//! let src = "Hello World from Typeset!";
-//! let doc = src.tokenize()
-//! .parse().unwrap()
-//! .generate().unwrap();
+//! let doc = src.parse_tree().unwrap().generate().unwrap();
//!
//! file.write_pdf(&doc).unwrap();
//! ```
diff --git a/src/parsing.rs b/src/parsing.rs
index 173a5ba6..270d8551 100644
--- a/src/parsing.rs
+++ b/src/parsing.rs
@@ -298,19 +298,28 @@ pub struct Function<'s> {
/// A type that is parsable into a syntax tree.
-pub trait Parse<'s> {
+pub trait ParseTree<'s> {
/// Parse self into a syntax tree.
- fn parse(self) -> ParseResult<SyntaxTree<'s>>;
+ fn parse_tree(self) -> ParseResult<SyntaxTree<'s>>;
}
-impl<'s> Parse<'s> for Tokens<'s> {
- fn parse(self) -> ParseResult<SyntaxTree<'s>> {
+impl<'s> ParseTree<'s> for &'s str {
+ #[inline]
+ fn parse_tree(self) -> ParseResult<SyntaxTree<'s>> {
+ self.tokenize().parse_tree()
+ }
+}
+
+impl<'s> ParseTree<'s> for Tokens<'s> {
+ #[inline]
+ fn parse_tree(self) -> ParseResult<SyntaxTree<'s>> {
Parser::new(self).parse()
}
}
-impl<'s> Parse<'s> for Vec<Token<'s>> {
- fn parse(self) -> ParseResult<SyntaxTree<'s>> {
+impl<'s> ParseTree<'s> for Vec<Token<'s>> {
+ #[inline]
+ fn parse_tree(self) -> ParseResult<SyntaxTree<'s>> {
Parser::new(self.into_iter()).parse()
}
}
@@ -594,12 +603,12 @@ mod parse_tests {
/// Test if the source code parses into the syntax tree.
fn test(src: &str, tree: SyntaxTree) {
- assert_eq!(src.tokenize().parse(), Ok(tree));
+ assert_eq!(src.parse_tree(), Ok(tree));
}
/// Test if the source parses into the error.
fn test_err(src: &str, err: ParseError) {
- assert_eq!(src.tokenize().parse(), Err(err));
+ assert_eq!(src.parse_tree(), Err(err));
}
/// Short cut macro to create a syntax tree.
diff --git a/src/pdf.rs b/src/pdf.rs
index e15cc33f..b4d0c41a 100644
--- a/src/pdf.rs
+++ b/src/pdf.rs
@@ -101,15 +101,13 @@ impl<W: Write> WritePdf<Document> for W {
#[cfg(test)]
mod pdf_tests {
use super::*;
- use crate::parsing::{Tokenize, Parse};
+ use crate::parsing::ParseTree;
use crate::doc::Generate;
/// Create a pdf with a name from the source code.
fn test(name: &str, src: &str) {
let mut file = std::fs::File::create(format!("../target/{}", name)).unwrap();
- let doc = src.tokenize()
- .parse().unwrap()
- .generate().unwrap();
+ let doc = src.parse_tree().unwrap().generate().unwrap();
file.write_pdf(&doc).unwrap();
}