Fixes #345 - Whitespace preservation should apply to all nested nodes

This commit is contained in:
Patrick Steele-Idem 2016-08-03 12:13:55 -06:00
parent d433ac25aa
commit 7ff286d5d5
6 changed files with 35 additions and 2 deletions

View File

@ -189,9 +189,15 @@ class Generator {
beforeAfterEvent = new GeneratorEvent(node, this);
}
var isWhitespacePreserved = node.isPreserveWhitespace();
if (beforeAfterEvent) {
beforeAfterEvent.isBefore = true;
beforeAfterEvent.node.emit('beforeGenerateCode', beforeAfterEvent);
if (isWhitespacePreserved) {
this.context.beginPreserveWhitespace();
}
}
if (node.getCodeGenerator) {
@ -268,6 +274,10 @@ class Generator {
if (beforeAfterEvent) {
beforeAfterEvent.isBefore = false;
beforeAfterEvent.node.emit('afterGenerateCode', beforeAfterEvent);
if (isWhitespacePreserved) {
this.context.endPreserveWhitespace();
}
}
this._currentNode = oldCurrentNode;

View File

@ -14,6 +14,8 @@ var macros = require('./util/macros');
var extend = require('raptor-util/extend');
var Walker = require('./Walker');
const FLAG_PRESERVE_WHITESPACE = 'PRESERVE_WHITESPACE';
const deresolveOptions = {
shouldRemoveExt(ext) {
return ext === '.js' || ext === '.json' || ext === '.es6';
@ -392,8 +394,18 @@ class CompileContext {
this._preserveWhitespace = preserveWhitespace;
}
beginPreserveWhitespace() {
this.pushFlag(FLAG_PRESERVE_WHITESPACE);
}
endPreserveWhitespace() {
this.popFlag(FLAG_PRESERVE_WHITESPACE);
}
isPreserveWhitespace() {
return this._preserveWhitespace === true;
if (this.isFlagSet(FLAG_PRESERVE_WHITESPACE) || this._preserveWhitespace === true) {
return true;
}
}
setPreserveComments(preserveComments) {

View File

@ -1 +1,3 @@
<script><DIV>FOO</DIV></script>
<script>
<DIV>FOO</DIV>
</script>

View File

@ -0,0 +1,3 @@
<pre><code>// Hello World
console.log('Hello World!');</code></pre>

View File

@ -0,0 +1,3 @@
<pre><code>// Hello World
console.log('Hello World!');</code></pre>

View File

@ -0,0 +1,3 @@
exports.templateData = {
"name": "World"
};