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); beforeAfterEvent = new GeneratorEvent(node, this);
} }
var isWhitespacePreserved = node.isPreserveWhitespace();
if (beforeAfterEvent) { if (beforeAfterEvent) {
beforeAfterEvent.isBefore = true; beforeAfterEvent.isBefore = true;
beforeAfterEvent.node.emit('beforeGenerateCode', beforeAfterEvent); beforeAfterEvent.node.emit('beforeGenerateCode', beforeAfterEvent);
if (isWhitespacePreserved) {
this.context.beginPreserveWhitespace();
}
} }
if (node.getCodeGenerator) { if (node.getCodeGenerator) {
@ -268,6 +274,10 @@ class Generator {
if (beforeAfterEvent) { if (beforeAfterEvent) {
beforeAfterEvent.isBefore = false; beforeAfterEvent.isBefore = false;
beforeAfterEvent.node.emit('afterGenerateCode', beforeAfterEvent); beforeAfterEvent.node.emit('afterGenerateCode', beforeAfterEvent);
if (isWhitespacePreserved) {
this.context.endPreserveWhitespace();
}
} }
this._currentNode = oldCurrentNode; this._currentNode = oldCurrentNode;

View File

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