For PR #88 forceAutoEscape: Postpone failing due to non-escaping output format until we are past the #ftl header
diff --git a/src/main/javacc/FTL.jj b/src/main/javacc/FTL.jj
index 55955c5..bad64ca 100644
--- a/src/main/javacc/FTL.jj
+++ b/src/main/javacc/FTL.jj
@@ -237,9 +237,6 @@
outputFormat = outputFormatFromExt;
}
}
- if (!(outputFormat instanceof MarkupOutputFormat) && autoEscapingPolicy == Configuration.FORCE_AUTO_ESCAPING_POLICY) {
- throw new IllegalArgumentException(forcedAutoEscapingPolicyExceptionMessage(outputFormat));
- }
recalculateAutoEscapingField();
token_source.setParser(this);
@@ -4754,6 +4751,11 @@
LOOKAHEAD([<STATIC_TEXT_WS>](<TRIVIAL_FTL_HEADER>|<FTL_HEADER>))
HeaderElement()
]
+ {
+ if (!(outputFormat instanceof MarkupOutputFormat) && autoEscapingPolicy == Configuration.FORCE_AUTO_ESCAPING_POLICY) {
+ throw new IllegalArgumentException(forcedAutoEscapingPolicyExceptionMessage(outputFormat));
+ }
+ }
children = MixedContentElements()
<EOF>
{
diff --git a/src/test/java/freemarker/core/OutputFormatTest.java b/src/test/java/freemarker/core/OutputFormatTest.java
index 03672c7..a9de869 100644
--- a/src/test/java/freemarker/core/OutputFormatTest.java
+++ b/src/test/java/freemarker/core/OutputFormatTest.java
@@ -868,9 +868,8 @@
cfg.setOutputFormat(DummyOutputFormat.INSTANCE);
assertOutput(commonFTL, esced);
- // TODO Should work:
- // cfg.setOutputFormat(PlainTextOutputFormat.INSTANCE);
- // assertOutput("<#ftl outputFormat='seldomEscaped'>" + commonFTL, esced);
+ cfg.setOutputFormat(PlainTextOutputFormat.INSTANCE);
+ assertOutput("<#ftl outputFormat='seldomEscaped'>" + commonFTL, esced);
cfg.setOutputFormat(HTMLOutputFormat.INSTANCE);
assertOutput("<#outputFormat 'seldomEscaped'>" + commonFTL + "</#outputFormat>", esced);