You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by jo...@apache.org on 2023/04/06 19:46:29 UTC

[royale-compiler] 02/02: Allow [Embed] to specify charset for mimeType text/plain

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 6654842e26de390ab89710c2422dea753962bf66
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Thu Apr 6 12:46:14 2023 -0700

    Allow [Embed] to specify charset for mimeType text/plain
    
    Defaults to UTF-8
---
 .../java/org/apache/royale/compiler/embedding/EmbedAttribute.java  | 1 +
 .../compiler/internal/codegen/js/royale/JSRoyaleEmitter.java       | 7 ++++++-
 .../org/apache/royale/compiler/internal/embedding/EmbedData.java   | 4 ++++
 .../org/apache/royale/compiler/internal/tree/as/EmbedNode.java     | 7 ++++++-
 4 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/compiler-common/src/main/java/org/apache/royale/compiler/embedding/EmbedAttribute.java b/compiler-common/src/main/java/org/apache/royale/compiler/embedding/EmbedAttribute.java
index 87f623e1d..dcbc35541 100644
--- a/compiler-common/src/main/java/org/apache/royale/compiler/embedding/EmbedAttribute.java
+++ b/compiler-common/src/main/java/org/apache/royale/compiler/embedding/EmbedAttribute.java
@@ -39,6 +39,7 @@ public enum EmbedAttribute
     SKIN_CLASS("skinClass"),
     SMOOTHING("smoothing"),
     SYMBOL("symbol"),
+    CHARSET("charset"),
     // obsolete font related attributes, which are kept
     // here so we don't report problems on them, and instead
     // report one problem that font embeddeding is not supported.
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java
index 2f67e14f5..ae930927a 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java
@@ -1092,12 +1092,17 @@ public class JSRoyaleEmitter extends JSGoogEmitter implements IJSRoyaleEmitter
         }
     	String source = (String) data.getAttribute(EmbedAttribute.SOURCE);
     	EmbedMIMEType mimeType = (EmbedMIMEType) data.getAttribute(EmbedAttribute.MIME_TYPE);
+        String charset = (String) data.getAttribute(EmbedAttribute.CHARSET);
+        if (charset == null)
+        {
+            charset = "UTF-8";
+        }
         if (mimeType != null && mimeType.toString().equals(EmbedMIMEType.TEXT.toString()) && source != null)
         {
             File file = new File(FilenameNormalization.normalize(source));
     		try {
     	        String newlineReplacement = "\\\\n";
-				String s = FileUtils.readFileToString(file, "UTF-8");
+				String s = FileUtils.readFileToString(file, charset);
 	            s = s.replaceAll("\n", "__NEWLINE_PLACEHOLDER__");
 	            s = s.replaceAll("\r", "__CR_PLACEHOLDER__");
 	            s = s.replaceAll("\t", "__TAB_PLACEHOLDER__");
diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/embedding/EmbedData.java b/compiler/src/main/java/org/apache/royale/compiler/internal/embedding/EmbedData.java
index 544133ca1..9aa27e9c2 100644
--- a/compiler/src/main/java/org/apache/royale/compiler/internal/embedding/EmbedData.java
+++ b/compiler/src/main/java/org/apache/royale/compiler/internal/embedding/EmbedData.java
@@ -346,6 +346,10 @@ public class EmbedData implements IEmbedData
             {
                 attributes.put(EmbedAttribute.SYMBOL, value);
             }
+            else if (EmbedAttribute.CHARSET.equals(key))
+            {
+                attributes.put(EmbedAttribute.CHARSET, value);
+            }
             else if (EmbedAttribute.ADV_ANTI_ALIASING.equals(key) ||
                     EmbedAttribute.EMBED_AS_CFF.equals(key) ||
                     EmbedAttribute.UNICODE_RANGE.equals(key) ||
diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/as/EmbedNode.java b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/as/EmbedNode.java
index a57150186..5f834a8c2 100644
--- a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/as/EmbedNode.java
+++ b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/as/EmbedNode.java
@@ -156,11 +156,16 @@ public class EmbedNode extends ExpressionNodeBase implements IEmbedNode, IEmbedR
         	return new String();
     	String source = (String) data.getAttribute(EmbedAttribute.SOURCE);
     	EmbedMIMEType mimeType = (EmbedMIMEType) data.getAttribute(EmbedAttribute.MIME_TYPE);
+        String charset = (String) data.getAttribute(EmbedAttribute.CHARSET);
+        if (charset == null)
+        {
+            charset = "UTF-8";
+        }
         if (mimeType != null && mimeType.toString().equals(EmbedMIMEType.TEXT.toString()) && source != null)
         {
             File file = new File(FilenameNormalization.normalize(source));
     		try {
-				String string = FileUtils.readFileToString(file, "UTF-8");
+				String string = FileUtils.readFileToString(file, charset);
 				return string;
 			} catch (IOException e) {
 	            problems.add(new EmbedUnableToReadSourceProblem(e, file.getPath()));