Author: davsclaus
Date: Sun May 20 14:24:19 2012
New Revision: 1340734

URL: http://svn.apache.org/viewvc?rev=1340734&view=rev
Log:
CAMEL-5295: Added support for escaping values with the simple language.

Added:
    
camel/branches/camel-2.9.x/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleNewlineTest.java
      - copied unchanged from r1340733, 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleNewlineTest.java
    
camel/branches/camel-2.9.x/components/camel-spring/src/test/resources/org/apache/camel/language/springSimpleNewline.xml
      - copied unchanged from r1340733, 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/springSimpleNewline.xml
Modified:
    camel/branches/camel-2.9.x/   (props changed)
    
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
    
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java
    
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java
    
camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java

Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
  Merged /camel/trunk:r1340733

Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: 
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
URL: 
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java?rev=1340734&r1=1340733&r2=1340734&view=diff
==============================================================================
--- 
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
 (original)
+++ 
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
 Sun May 20 14:24:19 2012
@@ -42,6 +42,7 @@ public final class SimpleTokenizer {
         KNOWN_TOKENS.add(new SimpleTokenType(TokenType.booleanValue, "true"));
         KNOWN_TOKENS.add(new SimpleTokenType(TokenType.booleanValue, "false"));
         KNOWN_TOKENS.add(new SimpleTokenType(TokenType.nullValue, "null"));
+        KNOWN_TOKENS.add(new SimpleTokenType(TokenType.escape, "\\"));
 
         // binary operators
         KNOWN_TOKENS.add(new SimpleTokenType(TokenType.binaryOperator, "=="));
@@ -164,6 +165,30 @@ public final class SimpleTokenizer {
             }
         }
 
+        boolean escapeAllowed = acceptType(TokenType.escape, filters);
+        if (escapeAllowed) {
+            StringBuilder sb = new StringBuilder();
+            char ch = expression.charAt(index);
+            boolean escaped = '\\' == ch;
+            if (escaped && index < expression.length()) {
+                // grab next character to escape
+                char next = expression.charAt(++index);
+                // special for new line, tabs and carriage return
+                if ('n' == next) {
+                    sb.append("\n");
+                } else if ('t' == next) {
+                    sb.append("\t");
+                } else if ('r' == next) {
+                    sb.append("\r");
+                } else {
+                    // append the next
+                    sb.append(next);
+                }
+                // force 2 as length
+                return new SimpleToken(new 
SimpleTokenType(TokenType.character, sb.toString()), index, 2);
+            }
+        }
+
         // it could be any of the known tokens
         String text = expression.substring(index);
         for (SimpleTokenType token : KNOWN_TOKENS) {

Modified: 
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java
URL: 
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java?rev=1340734&r1=1340733&r2=1340734&view=diff
==============================================================================
--- 
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java
 (original)
+++ 
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java
 Sun May 20 14:24:19 2012
@@ -62,6 +62,13 @@ public class SimpleTokenType {
     }
 
     /**
+     * Whether the type is escape
+     */
+    public boolean isEscape() {
+        return type == TokenType.escape;
+    }
+
+    /**
      * Whether the type is single quote
      */
     public boolean isSingleQuote() {

Modified: 
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java
URL: 
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java?rev=1340734&r1=1340733&r2=1340734&view=diff
==============================================================================
--- 
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java
 (original)
+++ 
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java
 Sun May 20 14:24:19 2012
@@ -24,6 +24,7 @@ public enum TokenType {
     whiteSpace, character,
     booleanValue, numericValue, nullValue,
     singleQuote, doubleQuote,
+    escape,
     functionStart, functionEnd,
     binaryOperator, unaryOperator, logicalOperator,
     eol

Modified: 
camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
URL: 
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java?rev=1340734&r1=1340733&r2=1340734&view=diff
==============================================================================
--- 
camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
 (original)
+++ 
camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
 Sun May 20 14:24:19 2012
@@ -1064,7 +1064,7 @@ public class SimpleTest extends Language
     
     public void testSlashBeforeHeader() throws Exception {
         assertExpression("foo/${header.foo}", "foo/abc");
-        assertExpression("foo\\${header.foo}", "foo\\abc");
+        assertExpression("foo\\\\${header.foo}", "foo\\abc");
     }
 
     public void testJSonLike() throws Exception {
@@ -1084,6 +1084,26 @@ public class SimpleTest extends Language
         assertExpression("{{${body}-${body}}}", "{{Something-Something}}");
     }
 
+    public void testEscape() throws Exception {
+        exchange.getIn().setBody("Something");
+
+        // slash foo
+        assertExpression("\\\\foo", "\\foo");
+
+        assertExpression("\\n${body}", "\nSomething");
+        assertExpression("\\t${body}", "\tSomething");
+        assertExpression("\\r${body}", "\rSomething");
+        assertExpression("\\n\\r${body}", "\n\rSomething");
+        assertExpression("\\n${body}\\n", "\nSomething\n");
+        assertExpression("\\t${body}\\t", "\tSomething\t");
+        assertExpression("\\r${body}\\r", "\rSomething\r");
+        assertExpression("\\n\\r${body}\\n\\r", "\n\rSomething\n\r");
+
+        assertExpression("\\$${body}", "$Something");
+        assertExpression("\\$\\{${body}\\}", "${Something}");
+        assertExpression("\\$\\{body\\}", "${body}");
+    }
+
     protected String getLanguageName() {
         return "simple";
     }


Reply via email to