You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ki...@apache.org on 2003/08/09 00:22:10 UTC

cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler JspDocumentParser.java PageInfo.java

kinman      2003/08/08 15:22:10

  Modified:    jasper2/src/share/org/apache/jasper/compiler
                        JspDocumentParser.java PageInfo.java
  Log:
  - Refactor some code in JspDocumentParser, since startPrefixMapping
    got called before startElement.
  - Turn on push/pop prefixes for taglibs in XML syntax, so that proper
    prefix can be located.
  - Fix a minor bug in PageInfo.
  
  Revision  Changes    Path
  1.62      +31 -30    jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspDocumentParser.java
  
  Index: JspDocumentParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspDocumentParser.java,v
  retrieving revision 1.61
  retrieving revision 1.62
  diff -u -r1.61 -r1.62
  --- JspDocumentParser.java	21 Jul 2003 21:52:51 -0000	1.61
  +++ JspDocumentParser.java	8 Aug 2003 22:22:09 -0000	1.62
  @@ -109,6 +109,7 @@
       private boolean isTagFile;
       private boolean directivesOnly;
       private boolean isTop;
  +    private Stack prefixMapStack;
   
       /*
        * Constructor
  @@ -127,6 +128,7 @@
   	this.isTagFile = isTagFile;
   	this.directivesOnly = directivesOnly;
   	this.isTop = true;
  +        this.prefixMapStack = new Stack();;
       }
   
       /*
  @@ -265,20 +267,9 @@
   			isTaglib = true;
   		    } else {
   			String attrUri = attrs.getValue(i);
  -			if (!pageInfo.hasTaglib(attrUri)) {
  -			    TagLibraryInfo tagLibInfo = null;
  -			    try {
  -				tagLibInfo = getTaglibInfo(attrQName, attrUri);
  -			    } catch (JasperException je) {
  -				throw new SAXParseException(
  -                                    Localizer.getMessage("jsp.error.could.not.add.taglibraries"),
  -				    locator, je);
  -			    }
  -			    if (tagLibInfo != null) {
  -				isTaglib = true;
  -			    }
  -			    pageInfo.addTaglib(attrUri, tagLibInfo);
  -			}
  +			// TaglibInfo for this uri already established in
  +			// startPrefixMapping
  +			isTaglib = pageInfo.hasTaglib(attrUri);
   		    }
   		    if (isTaglib) {
   			if (taglibAttrs == null) {
  @@ -555,16 +546,34 @@
       /*
        * Receives notification of the start of a Namespace mapping. 
        */
  -     public void startPrefixMapping(String prefix, String uri)
  +    public void startPrefixMapping(String prefix, String uri)
   	     throws SAXException {
  -         // XXX
  +        TagLibraryInfo taglibInfo;
  +        try {
  +            taglibInfo = getTaglibInfo(prefix, uri);
  +        } catch (JasperException je) {
  +            throw new SAXParseException(
  +                Localizer.getMessage("jsp.error.could.not.add.taglibraries"),
  +                locator, je);
  +        }
  +
  +        if (taglibInfo != null) {
  +            pageInfo.addTaglib(uri, taglibInfo);
  +            pageInfo.pushPrefixMapping(prefix, uri);
  +            prefixMapStack.push(new Boolean(true));
  +	}
  +        else {
  +            prefixMapStack.push(new Boolean(false));
  +        }
        }
   
        /*
         * Receives notification of the end of a Namespace mapping. 
         */
       public void endPrefixMapping(String prefix) throws SAXException {
  -	// XXX
  +        if (((Boolean)prefixMapStack.pop()).booleanValue()) {
  +            pageInfo.popPrefixMapping(prefix);
  +        }
       }
   
   
  @@ -792,23 +801,15 @@
        * Creates the tag library associated with the given uri namespace, and
        * returns it.
        *
  -     * @param qName The qualified name of the xmlns attribute
  -     * (of the form 'xmlns:<prefix>')
  +     * @param prefix The prefix of the xmlns attribute
        * @param uri The uri namespace (value of the xmlns attribute)
        *
        * @return The tag library associated with the given uri namespace
        */
  -    private TagLibraryInfo getTaglibInfo(String qName, String uri)
  +    private TagLibraryInfo getTaglibInfo(String prefix, String uri)
                   throws JasperException {
   
   	TagLibraryInfo result = null;
  -
  -	// Get the prefix
  -	String prefix = "";
  -	int colon = qName.indexOf(':');
  -	if (colon != -1) {
  -	    prefix = qName.substring(colon + 1);
  -	}
   
   	if (uri.startsWith(URN_JSPTAGDIR)) {
   	    // uri (of the form "urn:jsptagdir:path") references tag file dir
  
  
  
  1.38      +4 -3      jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/PageInfo.java
  
  Index: PageInfo.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/PageInfo.java,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- PageInfo.java	8 Aug 2003 19:06:41 -0000	1.37
  +++ PageInfo.java	8 Aug 2003 22:22:09 -0000	1.38
  @@ -320,6 +320,7 @@
   	LinkedList stack = (LinkedList) xmlPrefixMapper.get(prefix);
   	if (stack == null) {
   	    stack = new LinkedList();
  +	    xmlPrefixMapper.put(prefix, stack);
   	}
   	stack.addFirst(uri);
       }