summaryrefslogtreecommitdiff
path: root/src/syntax/scope.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2020-08-16 22:14:27 +0200
committerLaurenz <laurmaedje@gmail.com>2020-08-16 22:39:21 +0200
commit30f16bbf6431ca0c174ca0a1abaa6a13ef50ab06 (patch)
treef5a5c0adad15840ebe24b39e77ff467862067c91 /src/syntax/scope.rs
parent9f6137d8a829fe8f34554623495fa620252a0184 (diff)
Add Value type and replace dyn-nodes with call-exprs 🏗
- In addition to syntax trees there are now `Value`s, which syntax trees can be evaluated into (e.g. the tree is `5+5` and the value is `10`) - Parsing is completely pure, function calls are not parsed into nodes, but into simple call expressions, which are resolved later - Functions aren't dynamic nodes anymore, but simply functions which receive their arguments as a table and the layouting context - Functions may return any `Value` - Layouting is powered by functions which return the new `Commands` value, which informs the layouting engine what to do - When a function returns a non-`Commands` value, the layouter simply dumps the value into the document in monospace
Diffstat (limited to 'src/syntax/scope.rs')
-rw-r--r--src/syntax/scope.rs44
1 files changed, 0 insertions, 44 deletions
diff --git a/src/syntax/scope.rs b/src/syntax/scope.rs
deleted file mode 100644
index c17ff64d..00000000
--- a/src/syntax/scope.rs
+++ /dev/null
@@ -1,44 +0,0 @@
-//! Mapping of function names to function parsers.
-
-use std::collections::HashMap;
-use std::fmt::{self, Debug, Formatter};
-
-use super::parsing::CallParser;
-
-/// A map from identifiers to function parsers.
-pub struct Scope {
- parsers: HashMap<String, Box<CallParser>>,
- fallback: Box<CallParser>,
-}
-
-impl Scope {
- /// Create a new empty scope with a fallback parser that is invoked when no
- /// match is found.
- pub fn new(fallback: Box<CallParser>) -> Self {
- Self {
- parsers: HashMap::new(),
- fallback,
- }
- }
-
- /// Associate the given function name with a dynamic node type.
- pub fn insert(&mut self, name: impl Into<String>, parser: Box<CallParser>) {
- self.parsers.insert(name.into(), parser);
- }
-
- /// Return the parser with the given name if there is one.
- pub fn get_parser(&self, name: &str) -> Option<&CallParser> {
- self.parsers.get(name).map(AsRef::as_ref)
- }
-
- /// Return the fallback parser.
- pub fn get_fallback_parser(&self) -> &CallParser {
- &*self.fallback
- }
-}
-
-impl Debug for Scope {
- fn fmt(&self, f: &mut Formatter) -> fmt::Result {
- f.debug_set().entries(self.parsers.keys()).finish()
- }
-}