Clean up handling of delimiters and indenting
diff --git a/lib/src/node.dart b/lib/src/node.dart
index ebd3824..1366fd0 100644
--- a/lib/src/node.dart
+++ b/lib/src/node.dart
@@ -30,22 +30,20 @@
renderer._write(text);
} else if (lastNode && text.runes.last == _NEWLINE) {
var s = text.substring(0, text.length - 1);
- renderer._write(s.replaceAll('\n', '\n$renderer._indent'));
+ renderer._write(s.replaceAll('\n', '\n${renderer._indent}'));
renderer._write('\n');
} else {
- renderer._write(text.replaceAll('\n', '\n$renderer._indent'));
+ renderer._write(text.replaceAll('\n', '\n${renderer._indent}'));
}
}
}
class _VariableNode extends _Node {
- _VariableNode(this.name, int start, int end, this.delimiters,
- {this.escape: false})
+ _VariableNode(this.name, int start, int end, {this.escape: false})
: super(start, end);
final String name;
- final String delimiters;
final bool escape;
render(_Renderer renderer) {
@@ -86,9 +84,11 @@
final List<_Node> children = <_Node>[];
//TODO can probably combine Inv and Normal to shorten.
- void render(_Renderer renderer) => inverse
- ? renderInv(renderer)
- : renderNormal(renderer);
+ void render(_Renderer renderer) {
+ // Keep track of delimiters for use in LambdaContext.renderSource().
+ renderer._delimiters = delimiters;
+ return inverse ? renderInv(renderer) : renderNormal(renderer);
+ }
void renderNormal(_Renderer renderer) {
var value = renderer._resolveValue(name);
@@ -97,7 +97,7 @@
// Do nothing.
} else if (value is Iterable) {
- value.forEach((v) => renderer._renderSectionWithValue(this, v));
+ value.forEach((v) => renderer._renderSectionWithValue(this, v)); //FIXME probably pull this code into the node?
} else if (value is Map) {
renderer._renderSectionWithValue(this, value);
@@ -159,11 +159,10 @@
class _PartialNode extends _Node {
- _PartialNode(this.name, int start, int end, this.delimiters, this.indent)
+ _PartialNode(this.name, int start, int end, this.indent)
: super(start, end);
final String name;
- final String delimiters; //FIXME
// Used to store the preceding whitespace before a partial tag, so that
// it's content can be correctly indented.
@@ -176,7 +175,7 @@
: renderer._partialResolver(partialName);
if (template != null) {
var r = new _Renderer.partial(renderer, template, this.indent);
- r.render(); //FIXME Hmm change this.
+ r.render();
} else if (renderer._lenient) {
// do nothing
} else {
diff --git a/lib/src/parse.dart b/lib/src/parse.dart
index 63695c6..cbaec3e 100644
--- a/lib/src/parse.dart
+++ b/lib/src/parse.dart
@@ -27,12 +27,12 @@
case _VARIABLE:
case _UNESC_VARIABLE:
var n = new _VariableNode(
- t.value, t.start, t.end, delim, escape: t.type != _UNESC_VARIABLE);
+ t.value, t.start, t.end, escape: t.type != _UNESC_VARIABLE);
stack.last.children.add(n);
break;
case _PARTIAL:
- var n = new _PartialNode(t.value, t.start, t.end, delim, t.indent);
+ var n = new _PartialNode(t.value, t.start, t.end, t.indent);
stack.last.children.add(n);
break;
@@ -60,7 +60,7 @@
break;
case _CHANGE_DELIMITER:
- delimiters = t.value;
+ delim = t.value;
break;
case _COMMENT:
diff --git a/lib/src/renderer.dart b/lib/src/renderer.dart
index a6ca9f1..f429bf7 100644
--- a/lib/src/renderer.dart
+++ b/lib/src/renderer.dart
@@ -75,7 +75,9 @@
final String _templateName;
final String _indent;
final String _source;
-
+
+ // Need to keep track of the current delimiters during rendering.
+ // These are used in LambdaContext.renderSource().
String _delimiters;
void render() {
@@ -94,7 +96,9 @@
_write(_indent);
- nodes.take(nodes.length - 1).map((n) => n.render(this));
+ for (var n in nodes.take(nodes.length - 1)) {
+ n.render(this);
+ }
var node = _root.children.last;
if (node is _TextNode) {