aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkzc <zaxxon2011@gmail.com>2015-10-12 00:20:42 -0400
committerMihai Bazon <mihai.bazon@gmail.com>2015-10-12 10:19:17 +0300
commit9f1f21b810ba3b996236cc7ef6757657757a007a (patch)
tree1856b3e7246f2b796ca10696de9c39665904bfb4
parenta8e67d157e9caa59bbaf47cd6208eaa583853abb (diff)
downloadtracifyjs-9f1f21b810ba3b996236cc7ef6757657757a007a.tar.gz
tracifyjs-9f1f21b810ba3b996236cc7ef6757657757a007a.zip
Output `-- >` instead of `-->` in expressions. Escape `<!--` and `-->` within string literals.
-rw-r--r--lib/output.js13
-rw-r--r--test/compress/html_comments.js15
2 files changed, 26 insertions, 2 deletions
diff --git a/lib/output.js b/lib/output.js
index c15f3b20..8ca0dc06 100644
--- a/lib/output.js
+++ b/lib/output.js
@@ -127,6 +127,8 @@ function OutputStream(options) {
var ret = make_string(str, quote);
if (options.inline_script)
ret = ret.replace(/<\x2fscript([>\/\t\n\f\r ])/gi, "<\\/script$1");
+ ret = ret.replace(/\x3c!--/g, "\\x3c!--");
+ ret = ret.replace(/--\x3e/g, "--\\x3e");
return ret;
};
@@ -1046,7 +1048,15 @@ function OutputStream(options) {
});
DEFPRINT(AST_Binary, function(self, output){
self.left.print(output);
- output.space();
+ if (self.operator == ">"
+ && self.left instanceof AST_UnaryPostfix
+ && self.left.operator == "--") {
+ // space is mandatory to avoid outputting -->
+ output.print(" ");
+ } else {
+ // the space is optional depending on "beautify"
+ output.space();
+ }
output.print(self.operator);
if (self.operator == "<"
&& self.right instanceof AST_UnaryPrefix
@@ -1054,7 +1064,6 @@ function OutputStream(options) {
&& self.right.expression instanceof AST_UnaryPrefix
&& self.right.expression.operator == "--") {
// space is mandatory to avoid outputting <!--
- // http://javascript.spec.whatwg.org/#comment-syntax
output.print(" ");
} else {
// the space is optional depending on "beautify"
diff --git a/test/compress/html_comments.js b/test/compress/html_comments.js
new file mode 100644
index 00000000..6141980d
--- /dev/null
+++ b/test/compress/html_comments.js
@@ -0,0 +1,15 @@
+html_comment_in_expression: {
+ input: {
+ function f(a, b, x, y) { return a < !--b && x-- > y; }
+ }
+ expect_exact: "function f(a,b,x,y){return a< !--b&&x-- >y}";
+}
+
+html_comment_in_string_literal: {
+ input: {
+ function f() { return "<!--HTML-->comment in<!--string literal-->"; }
+ }
+ expect_exact: 'function f(){return"\\x3c!--HTML--\\x3ecomment in\\x3c!--string literal--\\x3e"}';
+}
+
+