This is an automated email from the ASF dual-hosted git repository.

joshtynjala pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git

commit 70c41c39fe49a87f97f48779ee82968147b0037f
Author: Josh Tynjala <[email protected]>
AuthorDate: Thu Apr 17 15:29:26 2025 -0700

    JSRoyaleASDocEmitter: improve escaping of asdoc tag descriptions
    
    In particular, anything that should be escaped in a JSON string, but also a 
bit of normalization too
---
 .../codegen/js/royale/JSRoyaleASDocEmitter.java    | 27 +++++++++++++++++++---
 1 file changed, 24 insertions(+), 3 deletions(-)

diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleASDocEmitter.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleASDocEmitter.java
index 580121d84..f5c368904 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleASDocEmitter.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleASDocEmitter.java
@@ -626,10 +626,31 @@ public class JSRoyaleASDocEmitter extends JSRoyaleEmitter 
implements IJSRoyaleAS
                                        firstOne = false;
                                        write("\"");
                                        d = value.getDescription().trim();
-                                       d = d.replace("\t", " ");
-                                       d = d.replace("\\\"", "&quot;");
+
+                                               // escape all backslashes first 
because we might add
+                                               // more backslashes when we 
escape other stuff
+                                               // and we don't want to double 
escape those backslashes
                                        d = d.replace("\\", "\\\\");
-                                       write(d);
+
+                                               // we're wrapping the string 
with double quotes, so
+                                               // escape any double quotes 
that will appear inside them
+                                       d = d.replace("\"", "\\\"");
+                                       
+                                               // collapse tabs to spaces
+                                               d = d.replace("\t", " ");
+
+                                               // convert all other types of 
new lines to \n for consistency
+                                       d = d.replace("\r\n", "\n");
+                                       d = d.replace("\r", "\n");
+
+                                               // then escape all new lines
+                                       d = d.replace("\n", "\\n");
+
+                                               // these characters don't make 
sense, so remove them
+                                               d = d.replace("\b", "");
+                                       d = d.replace("\f", "");
+
+                                               write(d);
                                        write("\"");
                                }
                        }

Reply via email to