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 <[email protected]> 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()));
