- code improvement: add function 'getVariableValueAsBoolean' in JavaScript style
diff --git a/src/prettify/parser/Prettify.java b/src/prettify/parser/Prettify.java
index 622b2d8..e14ff14 100644
--- a/src/prettify/parser/Prettify.java
+++ b/src/prettify/parser/Prettify.java
@@ -611,13 +611,13 @@
protected CreateSimpleLexer sourceDecorator(Map<String, Object> options) throws Exception {
List<List<Object>> shortcutStylePatterns = new ArrayList<List<Object>>();
List<List<Object>> fallthroughStylePatterns = new ArrayList<List<Object>>();
- if (options.get("tripleQuotedStrings") != null) {
+ if (Util.getVariableValueAsBoolean(options.get("tripleQuotedStrings"))) {
// '''multi-line-string''', 'single-line-string', and double-quoted
shortcutStylePatterns.add(Arrays.asList(new Object[]{PR_STRING,
Pattern.compile("^(?:\\'\\'\\'(?:[^\\'\\\\]|\\\\[\\s\\S]|\\'{1,2}(?=[^\\']))*(?:\\'\\'\\'|$)|\\\"\\\"\\\"(?:[^\\\"\\\\]|\\\\[\\s\\S]|\\\"{1,2}(?=[^\\\"]))*(?:\\\"\\\"\\\"|$)|\\'(?:[^\\\\\\']|\\\\[\\s\\S])*(?:\\'|$)|\\\"(?:[^\\\\\\\"]|\\\\[\\s\\S])*(?:\\\"|$))"),
null,
"'\""}));
- } else if (options.get("multiLineStrings") != null) {
+ } else if (Util.getVariableValueAsBoolean(options.get("multiLineStrings"))) {
// 'multi-line-string', "multi-line-string"
shortcutStylePatterns.add(Arrays.asList(new Object[]{PR_STRING,
Pattern.compile("^(?:\\'(?:[^\\\\\\']|\\\\[\\s\\S])*(?:\\'|$)|\\\"(?:[^\\\\\\\"]|\\\\[\\s\\S])*(?:\\\"|$)|\\`(?:[^\\\\\\`]|\\\\[\\s\\S])*(?:\\`|$))"),
@@ -630,15 +630,15 @@
null,
"\"'"}));
}
- if (options.get("verbatimStrings") != null) {
+ if (Util.getVariableValueAsBoolean(options.get("verbatimStrings"))) {
// verbatim-string-literal production from the C# grammar. See issue 93.
fallthroughStylePatterns.add(Arrays.asList(new Object[]{PR_STRING,
Pattern.compile("^@\\\"(?:[^\\\"]|\\\"\\\")*(?:\\\"|$)"),
null}));
}
Object hc = options.get("hashComments");
- if (hc != null) {
- if (options.get("cStyleComments") != null) {
+ if (Util.getVariableValueAsBoolean(hc)) {
+ if (Util.getVariableValueAsBoolean(options.get("cStyleComments"))) {
if ((hc instanceof Integer) && (Integer) hc > 1) { // multiline hash comments
shortcutStylePatterns.add(Arrays.asList(new Object[]{PR_COMMENT,
Pattern.compile("^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)"),
@@ -662,7 +662,7 @@
"#"}));
}
}
- if (options.get("cStyleComments") != null) {
+ if (Util.getVariableValueAsBoolean(options.get("cStyleComments"))) {
fallthroughStylePatterns.add(Arrays.asList(new Object[]{PR_COMMENT,
Pattern.compile("^\\/\\/[^\r\n]*"),
null}));
@@ -672,7 +672,7 @@
null}));
}
Object regexLiterals = options.get("regexLiterals");
- if (regexLiterals != null) {
+ if (Util.getVariableValueAsBoolean(regexLiterals)) {
/**
* @const
*/
@@ -706,12 +706,13 @@
}
Pattern types = (Pattern) options.get("types");
- if (types != null) {
+ if (Util.getVariableValueAsBoolean(types)) {
fallthroughStylePatterns.add(Arrays.asList(new Object[]{PR_TYPE, types}));
}
- if (options.get("keywords") != null) {
- String keywords = ((String) options.get("keywords")).replaceAll("^ | $", "");
+ String keywords = (String) options.get("keywords");
+ if (keywords != null) {
+ keywords = keywords.replaceAll("^ | $", "");
if (keywords.length() != 0) {
fallthroughStylePatterns.add(Arrays.asList(new Object[]{PR_KEYWORD,
Pattern.compile("^(?:" + keywords.replaceAll("[\\s,]+", "|") + ")\\b"),
@@ -790,7 +791,7 @@
// when hc is truthy to include # in the run of punctuation characters
// only when not followint [|&;<>].
String punctuation = "^.[^\\s\\w.$@'\"`/\\\\]*";
- if (options.get("regexLiterals") != null) {
+ if (Util.getVariableValueAsBoolean(options.get("regexLiterals"))) {
punctuation += "(?!\\s*/)";
}
fallthroughStylePatterns.add(Arrays.asList(new Object[]{PR_PUNCTUATION,
diff --git a/src/prettify/parser/Util.java b/src/prettify/parser/Util.java
index 4613ef8..7147bd7 100644
--- a/src/prettify/parser/Util.java
+++ b/src/prettify/parser/Util.java
@@ -32,6 +32,32 @@
}
/**
+ * Treat a variable as an boolean in JavaScript style. Note this function can
+ * only handle string, integer and boolean currently. All other data type, if
+ * null, return false, not null return true.
+ *
+ * @param var the variable to get value from
+ * @return the boolean value
+ */
+ public static Boolean getVariableValueAsBoolean(Object var) {
+ Boolean returnResult = null;
+
+ if (var == null) {
+ returnResult = false;
+ } else if (var instanceof String) {
+ returnResult = !((String) var).isEmpty();
+ } else if (var instanceof Integer) {
+ returnResult = ((Integer) var) != 0;
+ } else if (var instanceof Boolean) {
+ returnResult = (Boolean) var;
+ } else {
+ returnResult = true;
+ }
+
+ return returnResult;
+ }
+
+ /**
* Treat a variable as an integer in JavaScript style. Note this function can
* only handle integer and boolean currently.
*