craigmcc    01/09/07 12:43:47

  Modified:    jasper/src/share/org/apache/jasper/compiler
                        TagGeneratorBase.java
  Log:
  When custom tag names have invalid Java identifier characters ('-', '.',
  and ':'), replace them with strings that are legal.
  
  PR: Bugzilla #3019 [EMAIL PROTECTED]
  Submitted by: Kin-Man Chung <[EMAIL PROTECTED]>
  
  Revision  Changes    Path
  1.3       +34 -3     
jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagGeneratorBase.java
  
  Index: TagGeneratorBase.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagGeneratorBase.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TagGeneratorBase.java     2000/11/01 20:25:08     1.2
  +++ TagGeneratorBase.java     2001/09/07 19:43:46     1.3
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagGeneratorBase.java,v
 1.2 2000/11/01 20:25:08 pierred Exp $
  - * $Revision: 1.2 $
  - * $Date: 2000/11/01 20:25:08 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagGeneratorBase.java,v
 1.3 2001/09/07 19:43:46 craigmcc Exp $
  + * $Revision: 1.3 $
  + * $Date: 2001/09/07 19:43:46 $
    *
    * ====================================================================
    *
  @@ -119,7 +119,38 @@
        return (TagVariableData) tagHandlerStack.peek();
       }
   
  +
  +    private String substitute(String name, char from, String to) {
  +        StringBuffer s = new StringBuffer();
  +        int begin = 0;
  +        int last = name.length();
  +        int end;
  +        while (true) {
  +            end = name.indexOf(from, begin);
  +            if (end < 0)
  +                end = last;
  +            s.append(name.substring(begin, end));
  +            if (end == last)
  +                break;
  +            s.append(to);
  +            begin = end + 1;
  +        }
  +        return (s.toString());
  +    }
  +
  +    /**
  +     * Return a tag variable name from the given prefix and shortTagName.
  +     * Not all NMTOKEN's are legal Java identifiers, since they may contain
  +     * '-', '.', or ':'.  We use the following mapping: substitute '-' with
  +     * "#1", '.' with "$2", and ':' with "$3".
  +     */
       protected String getTagVarName(String prefix, String shortTagName) {
  +        if (shortTagName.indexOf('-') >= 0)
  +            shortTagName = substitute(shortTagName, '-', "$1");
  +        if (shortTagName.indexOf('.') >= 0)
  +            shortTagName = substitute(shortTagName, '.', "$2");
  +        if (shortTagName.indexOf(':') >= 0)
  +            shortTagName = substitute(shortTagName, ':', "$3");
        // Fix: Can probably remove the synchronization now when no vars or method is 
static
        synchronized (tagVarNumbers) {
            String tag = prefix+":"+shortTagName;
  
  
  

Reply via email to