diff options
| author | Laurenz <laurmaedje@gmail.com> | 2020-08-16 22:14:27 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2020-08-16 22:39:21 +0200 |
| commit | 30f16bbf6431ca0c174ca0a1abaa6a13ef50ab06 (patch) | |
| tree | f5a5c0adad15840ebe24b39e77ff467862067c91 /src/syntax/scope.rs | |
| parent | 9f6137d8a829fe8f34554623495fa620252a0184 (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.rs | 44 |
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() - } -} |
