Author: jdcasey
Date: Thu Apr 19 19:08:52 2007
New Revision: 530611

URL: http://svn.apache.org/viewvc?view=rev&rev=530611
Log:
Adding escape sequence for pipe and equals sign using backslash character, so 
we can embed more advanced macro parameter values, like scripting lines.

Modified:
    
maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java

Modified: 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java?view=diff&rev=530611&r1=530610&r2=530611
==============================================================================
--- 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java
 (original)
+++ 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java
 Thu Apr 19 19:08:52 2007
@@ -2192,6 +2192,8 @@
             String s = text;
 
             s = s.substring( 2, s.length() - 1 );
+            
+            s = escapeForMacro( s );
 
             String[] params = StringUtils.split( s, "|" );
 
@@ -2203,7 +2205,10 @@
             {
                 String[] param = StringUtils.split( params[i], "=" );
 
-                parameters.put( param[0], param[1] );
+                String key = unescapeForMacro( param[0] );
+                String value = unescapeForMacro( param[1] );
+                
+                parameters.put( key, value );
             }
 
             parameters.put( "sourceContent", sourceContent );
@@ -2225,6 +2230,38 @@
             {
                 throw new AptParseException( "Unable to find macro used in the 
APT document", e );
             }
+        }
+
+        private String escapeForMacro( String s )
+        {
+            if ( s == null || s.length() < 1 )
+            {
+                return s;
+            }
+            
+            String result = s;
+            
+            // use some outrageously out-of-place chars for text 
+            // (these are device control one/two in unicode)
+            result = StringUtils.replace( result, "\\=", "\u0011" );
+            result = StringUtils.replace( result, "\\|", "\u0012" );
+            
+            return result;
+        }
+        
+        private String unescapeForMacro( String s )
+        {
+            if ( s == null || s.length() < 1 )
+            {
+                return s;
+            }
+            
+            String result = s;
+            
+            result = StringUtils.replace( result, "\u0011", "=" );
+            result = StringUtils.replace( result, "\u0012", "|" );
+            
+            return result;
         }
     }
 


Reply via email to