Skip to content

Commit e3cbaf8

Browse files
authored
Relaxing the criteria for escaping single quotes when using JAVAMSGXXX format (#155)
relaxed criteria for escaping quotes
1 parent 5b6b8d4 commit e3cbaf8

3 files changed

Lines changed: 23 additions & 5 deletions

File tree

gp-res-filter/src/main/java/com/ibm/g11n/pipeline/resfilter/impl/JavaPropertiesResource.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -893,17 +893,21 @@ public static String ConvertSingleQuote(String inputStr, MessagePatternEscape ms
893893
}
894894
finalOutput.append(output.substring(prevStart, output.length())); // append any remaining substring in output
895895

896+
boolean icuCompatible = isICUMessagePatternCompatible(finalOutput.toString());
897+
boolean javaMsgCompatible = isJavaMessageFormatCompatible(finalOutput.toString());
898+
if (msgPatEsc == MessagePatternEscape.ALL && (icuCompatible || javaMsgCompatible)) {
899+
return finalOutput.toString();
900+
}
896901
// Falling back to input string, if the operations yield a non message compatible string
897-
if (!isMessagePatternCompatible(finalOutput.toString())) {
902+
if (!icuCompatible || !javaMsgCompatible) {
898903
System.out.println(finalOutput + " is not message pattern/java message format compatible");
899904
return inputStr;
900905
}
901906

902907
return finalOutput.toString();
903908
}
904-
905909

906-
public static boolean isMessagePatternCompatible(String inputStr) {
910+
public static boolean isICUMessagePatternCompatible(String inputStr) {
907911
MessagePattern msgPat = null;
908912
try {
909913
msgPat = new MessagePattern(inputStr);
@@ -917,13 +921,23 @@ public static boolean isMessagePatternCompatible(String inputStr) {
917921
// just returns the input string.
918922
return false;
919923
}
924+
return true;
925+
}
926+
927+
public static boolean isJavaMessageFormatCompatible(String inputStr) {
920928
try {
921929
java.text.MessageFormat.format(inputStr, (Object[]) null);
922930
} catch (Exception e) {
923931
return false;
924932
}
925933
return true;
926934
}
935+
936+
public static boolean isMessagePatternCompatible(String inputStr) {
937+
boolean icuMsgCompatible = isICUMessagePatternCompatible(inputStr);
938+
boolean javaMsgCompatible = isJavaMessageFormatCompatible(inputStr);
939+
return icuMsgCompatible && javaMsgCompatible;
940+
}
927941

928942
public static int findSingleQuote(String inputStr, int start){
929943
return -1;

gp-res-filter/src/test/java/com/ibm/g11n/pipeline/resfilter/impl/JavaPropertiesResourceTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,8 @@ public class JavaPropertiesResourceTest {
177177
bundleBuilder.addResourceString("T","'test'",20);
178178
bundleBuilder.addResourceString("U","'value' should not contain '",21);
179179
bundleBuilder.addResourceString("V","Don't use symbols like +-?.'",22);
180+
bundleBuilder.addResourceString("W","length shouldn't exceed {max} characters",22);
181+
bundleBuilder.addResourceString("X","length shouldn't exceed {0} characters",22);
180182
WRITE_BUNDLE_ALL = bundleBuilder.build();
181183
}
182184

gp-res-filter/src/test/resource/resfilter/properties/write-output-all.properties

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@ M = The name ''{0}'' is already in use.
1515
N = length must be between '{min} and '{max}
1616
O = Password should not contain\:\#.-_''().
1717
P = [\\p'{'L'}'\\uFF65]
18-
Q = value must be '{min}
18+
Q = value must be ''{min}
1919
R = ''
2020
S =
2121
T = ''test''
2222
U = ''value'' should not contain ''
23-
V = Don''t use symbols like +-?.''
23+
V = Don''t use symbols like +-?.''
24+
W = length shouldn''t exceed {max} characters
25+
X = length shouldn''t exceed {0} characters

0 commit comments

Comments
 (0)