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;