summaryrefslogtreecommitdiff
path: root/src/syntax
diff options
context:
space:
mode:
Diffstat (limited to 'src/syntax')
-rw-r--r--src/syntax/expr.rs5
-rw-r--r--src/syntax/markup.rs (renamed from src/syntax/node.rs)16
-rw-r--r--src/syntax/mod.rs11
-rw-r--r--src/syntax/pretty.rs6
-rw-r--r--src/syntax/visit.rs32
5 files changed, 34 insertions, 36 deletions
diff --git a/src/syntax/expr.rs b/src/syntax/expr.rs
index aac23a6f..11a85404 100644
--- a/src/syntax/expr.rs
+++ b/src/syntax/expr.rs
@@ -1,7 +1,8 @@
use std::rc::Rc;
-use super::*;
+use super::{Ident, Markup, Span, Token};
use crate::geom::{AngularUnit, LengthUnit};
+use crate::util::EcoString;
/// An expression.
#[derive(Debug, Clone, PartialEq)]
@@ -170,7 +171,7 @@ pub struct TemplateExpr {
/// The source code location.
pub span: Span,
/// The contents of the template.
- pub tree: SyntaxTree,
+ pub body: Markup,
}
/// A grouped expression: `(1 + 2)`.
diff --git a/src/syntax/node.rs b/src/syntax/markup.rs
index 875d32f5..09a37116 100644
--- a/src/syntax/node.rs
+++ b/src/syntax/markup.rs
@@ -1,8 +1,12 @@
-use super::*;
+use super::{Expr, Ident, Span};
+use crate::util::EcoString;
-/// A syntax node, encompassing a single logical entity of parsed source code.
+/// The syntactical root capable of representing a full parsed document.
+pub type Markup = Vec<MarkupNode>;
+
+/// A single piece of markup.
#[derive(Debug, Clone, PartialEq)]
-pub enum SyntaxNode {
+pub enum MarkupNode {
/// Whitespace containing less than two newlines.
Space,
/// A forced line break: `\`.
@@ -50,7 +54,7 @@ pub struct HeadingNode {
/// The section depth (numer of equals signs).
pub level: usize,
/// The contents of the heading.
- pub body: SyntaxTree,
+ pub body: Markup,
}
/// An item in an unordered list: `- ...`.
@@ -59,7 +63,7 @@ pub struct ListNode {
/// The source code location.
pub span: Span,
/// The contents of the list item.
- pub body: SyntaxTree,
+ pub body: Markup,
}
/// An item in an enumeration (ordered list): `1. ...`.
@@ -70,5 +74,5 @@ pub struct EnumNode {
/// The number, if any.
pub number: Option<usize>,
/// The contents of the list item.
- pub body: SyntaxTree,
+ pub body: Markup,
}
diff --git a/src/syntax/mod.rs b/src/syntax/mod.rs
index f07e3554..8dbb108d 100644
--- a/src/syntax/mod.rs
+++ b/src/syntax/mod.rs
@@ -2,7 +2,7 @@
mod expr;
mod ident;
-mod node;
+mod markup;
mod pretty;
mod span;
mod token;
@@ -10,14 +10,7 @@ pub mod visit;
pub use expr::*;
pub use ident::*;
-pub use node::*;
+pub use markup::*;
pub use pretty::*;
pub use span::*;
pub use token::*;
-
-use crate::util::EcoString;
-
-/// The abstract syntax tree.
-///
-/// This type can represent a full parsed document.
-pub type SyntaxTree = Vec<SyntaxNode>;
diff --git a/src/syntax/pretty.rs b/src/syntax/pretty.rs
index 39f0676b..5e4d3ad2 100644
--- a/src/syntax/pretty.rs
+++ b/src/syntax/pretty.rs
@@ -75,7 +75,7 @@ impl Write for Printer {
}
}
-impl Pretty for SyntaxTree {
+impl Pretty for Markup {
fn pretty(&self, p: &mut Printer) {
for node in self {
node.pretty(p);
@@ -83,7 +83,7 @@ impl Pretty for SyntaxTree {
}
}
-impl Pretty for SyntaxNode {
+impl Pretty for MarkupNode {
fn pretty(&self, p: &mut Printer) {
match self {
// TODO: Handle escaping.
@@ -266,7 +266,7 @@ impl Pretty for Named {
impl Pretty for TemplateExpr {
fn pretty(&self, p: &mut Printer) {
p.push('[');
- self.tree.pretty(p);
+ self.body.pretty(p);
p.push(']');
}
}
diff --git a/src/syntax/visit.rs b/src/syntax/visit.rs
index fe270ac5..d689209b 100644
--- a/src/syntax/visit.rs
+++ b/src/syntax/visit.rs
@@ -1,6 +1,6 @@
//! Mutable and immutable syntax tree traversal.
-use crate::syntax::*;
+use super::*;
/// Implement the immutable and the mutable visitor version.
macro_rules! impl_visitors {
@@ -78,25 +78,25 @@ macro_rules! impl_visitor {
}
impl_visitors! {
- visit_tree(v, tree: SyntaxTree) {
- for node in tree {
+ visit_tree(v, markup: Markup) {
+ for node in markup {
v.visit_node(node);
}
}
- visit_node(v, node: SyntaxNode) {
+ visit_node(v, node: MarkupNode) {
match node {
- SyntaxNode::Space => {}
- SyntaxNode::Linebreak(_) => {}
- SyntaxNode::Parbreak(_) => {}
- SyntaxNode::Strong(_) => {}
- SyntaxNode::Emph(_) => {}
- SyntaxNode::Text(_) => {}
- SyntaxNode::Raw(_) => {}
- SyntaxNode::Heading(n) => v.visit_heading(n),
- SyntaxNode::List(n) => v.visit_list(n),
- SyntaxNode::Enum(n) => v.visit_enum(n),
- SyntaxNode::Expr(n) => v.visit_expr(n),
+ MarkupNode::Space => {}
+ MarkupNode::Linebreak(_) => {}
+ MarkupNode::Parbreak(_) => {}
+ MarkupNode::Strong(_) => {}
+ MarkupNode::Emph(_) => {}
+ MarkupNode::Text(_) => {}
+ MarkupNode::Raw(_) => {}
+ MarkupNode::Heading(n) => v.visit_heading(n),
+ MarkupNode::List(n) => v.visit_list(n),
+ MarkupNode::Enum(n) => v.visit_enum(n),
+ MarkupNode::Expr(n) => v.visit_expr(n),
}
}
@@ -149,7 +149,7 @@ impl_visitors! {
visit_template(v, template: TemplateExpr) {
v.visit_enter();
- v.visit_tree(r!(template.tree));
+ v.visit_tree(r!(template.body));
v.visit_exit();
}