You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by an...@locus.apache.org on 2000/10/13 19:54:46 UTC

cvs commit: xml-xerces/java/src/org/apache/xerces/impl XMLDTDScanner.java XMLDocumentScanner.java XMLEntityManager.java

andyc       00/10/13 10:54:45

  Modified:    java/src/org/apache/xerces/impl Tag: xerces_j_2
                        XMLDTDScanner.java XMLDocumentScanner.java
                        XMLEntityManager.java
  Log:
  1) Updated EntityManager to have a separate addUnparsedEntity
     method for unparsed entities. Updated DTDScanner to call it.
  2) Updated DocumentScanner to not start an unparsed entity when
     it sees an entity reference.
  3) Fixed a bug in entity scanner that was swallowing the last
     character if the entity ended in content. Now scanAttContent
     and scanContent signal end of buffer by return -1 as the
     next character. Changed DocumentScanner to not signal a
     fatal error if it sees the -1 when scanning content.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.25  +10 -7     xml-xerces/java/src/org/apache/xerces/impl/Attic/XMLDTDScanner.java
  
  Index: XMLDTDScanner.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/Attic/XMLDTDScanner.java,v
  retrieving revision 1.1.2.24
  retrieving revision 1.1.2.25
  diff -u -r1.1.2.24 -r1.1.2.25
  --- XMLDTDScanner.java	2000/10/13 00:08:14	1.1.2.24
  +++ XMLDTDScanner.java	2000/10/13 17:54:36	1.1.2.25
  @@ -85,7 +85,7 @@
    * @author Arnaud  Le Hors, IBM
    * @author Andy Clark, IBM
    *
  - * @version $Id: XMLDTDScanner.java,v 1.1.2.24 2000/10/13 00:08:14 andyc Exp $
  + * @version $Id: XMLDTDScanner.java,v 1.1.2.25 2000/10/13 17:54:36 andyc Exp $
    */
   public class XMLDTDScanner
       extends XMLScanner
  @@ -1237,15 +1237,18 @@
           // register entity and make callback
           if (systemId != null) {
               if (!fEntityManager.isEntityDeclared(name)) {
  -                fEntityManager.addExternalEntity(name, publicId, systemId, null, notation);
  +                if (notation != null) {
  +                    fEntityManager.addUnparsedEntity(name, publicId, systemId, notation);
  +                }
  +                else {
  +                    fEntityManager.addExternalEntity(name, publicId, systemId, null);
  +                }
               }
  -            if (notation != null) {
  -                if (fDTDHandler != null) {
  +            if (fDTDHandler != null) {
  +                if (notation != null) {
                       fDTDHandler.unparsedEntityDecl(name, publicId, systemId, notation);
                   }
  -            }
  -            else {
  -                if (fDTDHandler != null) {
  +                else {
                       fDTDHandler.externalEntityDecl(name, publicId, systemId);
                   }
               }
  
  
  
  1.1.2.27  +10 -2     xml-xerces/java/src/org/apache/xerces/impl/Attic/XMLDocumentScanner.java
  
  Index: XMLDocumentScanner.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/Attic/XMLDocumentScanner.java,v
  retrieving revision 1.1.2.26
  retrieving revision 1.1.2.27
  diff -u -r1.1.2.26 -r1.1.2.27
  --- XMLDocumentScanner.java	2000/10/12 17:16:16	1.1.2.26
  +++ XMLDocumentScanner.java	2000/10/13 17:54:39	1.1.2.27
  @@ -101,7 +101,7 @@
    * @author Stubs generated by DesignDoc on Mon Sep 11 11:10:57 PDT 2000
    * @author Andy Clark, IBM
    *
  - * @version $Id: XMLDocumentScanner.java,v 1.1.2.26 2000/10/12 17:16:16 andyc Exp $
  + * @version $Id: XMLDocumentScanner.java,v 1.1.2.27 2000/10/13 17:54:39 andyc Exp $
    */
   public class XMLDocumentScanner
       extends XMLScanner
  @@ -1140,7 +1140,13 @@
                           return;
                       }
                   }
  -                if (fExternalGeneralEntities || !fEntityManager.isEntityExternal(name)) {
  +                boolean external = fEntityManager.isEntityExternal(name);
  +                boolean unparsed = false;
  +                if (external) {
  +                    fEntityManager.getExternalEntity(name, fExternalEntity);
  +                    unparsed = fExternalEntity.notation != null;
  +                }
  +                if ((fExternalGeneralEntities && !unparsed) || !external) {
                       fEntityManager.startEntity(name);
                   }
                   else {
  @@ -1830,6 +1836,7 @@
                                       break;
                                   }
                                   else if (c == -1) {
  +                                    /***
                                       
                                       fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN, "ETagRequired",
                                                                  new Object[] {fCurrentElement.rawname},
  @@ -1837,6 +1844,7 @@
   
                                       setScannerState(SCANNER_STATE_TERMINATED);
                                       return false;
  +                                    /***/
                                   }
                                   else if (XMLChar.isInvalid(c)) {
                                       fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN, "InvalidCharInContent",
  
  
  
  1.1.2.16  +103 -65   xml-xerces/java/src/org/apache/xerces/impl/Attic/XMLEntityManager.java
  
  Index: XMLEntityManager.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/Attic/XMLEntityManager.java,v
  retrieving revision 1.1.2.15
  retrieving revision 1.1.2.16
  diff -u -r1.1.2.15 -r1.1.2.16
  --- XMLEntityManager.java	2000/10/13 00:08:15	1.1.2.15
  +++ XMLEntityManager.java	2000/10/13 17:54:40	1.1.2.16
  @@ -105,7 +105,7 @@
    * @author Stubs generated by DesignDoc on Mon Sep 18 18:23:16 PDT 2000
    * @author Andy Clark, IBM
    *
  - * @version $Id: XMLEntityManager.java,v 1.1.2.15 2000/10/13 00:08:15 andyc Exp $
  + * @version $Id: XMLEntityManager.java,v 1.1.2.16 2000/10/13 17:54:40 andyc Exp $
    */
   public class XMLEntityManager
       implements XMLComponent {
  @@ -202,6 +202,17 @@
       } // setEntityHandler(XMLEntityHandler)
   
       /**
  +     * addInternalEntity
  +     * 
  +     * @param name 
  +     * @param text 
  +     */
  +    public void addInternalEntity(String name, String text) {
  +        Entity entity = new InternalEntity(name, text);
  +        fEntities.put(name, entity);
  +    } // addInternalEntity(String,String)
  +
  +    /**
        * addExternalEntity
        * 
        * @param name 
  @@ -211,22 +222,27 @@
        * @param notation
        */
       public void addExternalEntity(String name, 
  -                                  String publicId, String systemId, String baseSystemId,
  -                                  String notation) {
  -        Entity entity = new ExternalEntity(name, publicId, systemId, baseSystemId, notation);
  +                                  String publicId, String systemId, 
  +                                  String baseSystemId) {
  +        Entity entity = new ExternalEntity(name, publicId, systemId, baseSystemId, null);
           fEntities.put(name, entity);
       } // addExternalEntity(String,String,String,String)
   
       /**
  -     * addInternalEntity
  +     * addUnparsedEntity
        * 
        * @param name 
  -     * @param text 
  +     * @param publicId 
  +     * @param systemId 
  +     * @param baseSystemId 
  +     * @param notation
        */
  -    public void addInternalEntity(String name, String text) {
  -        Entity entity = new InternalEntity(name, text);
  +    public void addUnparsedEntity(String name, 
  +                                  String publicId, String systemId,
  +                                  String notation) {
  +        Entity entity = new ExternalEntity(name, publicId, systemId, null, notation);
           fEntities.put(name, entity);
  -    } // addInternalEntity(String,String)
  +    } // addUnparsedEntity(String,String,String,String)
   
       /** Returns the values for an external entity. */
       public boolean getExternalEntity(String name, ExternalEntity externalEntity) {
  @@ -398,10 +414,10 @@
               addInternalEntity("recursive-entity2", "<bar>&recursive-entity3;</bar>");
               addInternalEntity("recursive-entity3", "<baz>&recursive-entity;</baz>");
   
  -            addExternalEntity("external-text", null, "external-text.ent", "test/external-text.xml", null);
  -            addExternalEntity("external-balanced-element", null, "external-balanced-element.ent", "test/external-balanced-element.xml", null);
  -            addExternalEntity("one", null, "ent/one.ent", "test/external-entity.xml", null);
  -            addExternalEntity("two", null, "ent/two.ent", "test/ent/one.xml", null);
  +            addExternalEntity("external-text", null, "external-text.ent", "test/external-text.xml");
  +            addExternalEntity("external-balanced-element", null, "external-balanced-element.ent", "test/external-balanced-element.xml");
  +            addExternalEntity("one", null, "ent/one.ent", "test/external-entity.xml");
  +            addExternalEntity("two", null, "ent/two.ent", "test/ent/one.xml");
           }
   
       } // reset(XMLComponentManager)
  @@ -520,6 +536,11 @@
       protected void endEntity() throws SAXException {
   
           // call handler
  +        if (DEBUG_PRINT) {
  +            System.out.println("(endEntity: ");
  +            print();
  +            System.out.println();
  +        }
           if (fEntityHandler != null) {
               fEntityHandler.endEntity(fCurrentEntity.name);
           }
  @@ -527,6 +548,11 @@
           // pop stack
           fCurrentEntity = fEntityStack.size() > 0
                          ? (ScannedEntity)fEntityStack.pop() : null;
  +        if (DEBUG_PRINT) {
  +            System.out.println(")endEntity: ");
  +            print();
  +            System.out.println();
  +        }
   
       } // endEntity()
   
  @@ -736,6 +762,49 @@
   
       } // fixURI(String):String
   
  +    /** Prints the contents of the buffer. */
  +    final void print() {
  +        if (DEBUG_PRINT) {
  +            System.out.print('[');
  +            System.out.print(fCurrentEntity.count);
  +            if (fCurrentEntity.count > 0) {
  +                System.out.print(" \"");
  +                for (int i = 0; i < fCurrentEntity.count; i++) {
  +                    if (i == fCurrentEntity.position) {
  +                        System.out.print('^');
  +                    }
  +                    char c = fCurrentEntity.ch[i];
  +                    switch (c) {
  +                        case '\n': {
  +                            System.out.print("\\n");
  +                            break;
  +                        }
  +                        case '\r': {
  +                            System.out.print("\\r");
  +                            break;
  +                        }
  +                        case '\t': {
  +                            System.out.print("\\t");
  +                            break;
  +                        }
  +                        case '\\': {
  +                            System.out.print("\\\\");
  +                            break;
  +                        }
  +                        default: {
  +                            System.out.print(c);
  +                        }
  +                    }
  +                }
  +                if (fCurrentEntity.position == fCurrentEntity.count) {
  +                    System.out.print('^');
  +                }
  +                System.out.print('"');
  +            }
  +            System.out.print(']');
  +        }
  +    } // print()
  +
       //
       // Classes
       //
  @@ -1244,6 +1313,11 @@
                   fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
                   load(1);
               }
  +            if (DEBUG_PRINT) {
  +                System.out.print("(scanContent: ");
  +                print();
  +                System.out.println();
  +            }
   
               // REVISIT: Use AndyH trick for grabbing longest runs of
               //          content characters. -Ac
  @@ -1258,11 +1332,17 @@
               int length = fCurrentEntity.position - offset;
               content.setValues(fCurrentEntity.ch, offset, length);
       
  -            if (fCurrentEntity.position == fCurrentEntity.count) {
  -                fCurrentEntity.position--;
  -                content.length--;
  +            // return next character
  +            int c = -1;
  +            if (fCurrentEntity.position != fCurrentEntity.count) {
  +                c = fCurrentEntity.ch[fCurrentEntity.position];
               }
  -            return fCurrentEntity.ch[fCurrentEntity.position];
  +            if (DEBUG_PRINT) {
  +                System.out.print(")scanContent: ");
  +                print();
  +                System.out.println(" -> '"+(char)c+"'");
  +            }
  +            return c;
       
           } // scanContent(XMLString):int
       
  @@ -1300,16 +1380,17 @@
               int length = fCurrentEntity.position - offset;
               content.setValues(fCurrentEntity.ch, offset, length);
       
  -            if (fCurrentEntity.position == fCurrentEntity.count) {
  -                fCurrentEntity.position--;
  -                content.length--;
  +            // return next character
  +            int c = -1;
  +            if (fCurrentEntity.position != fCurrentEntity.count) {
  +                c = fCurrentEntity.ch[fCurrentEntity.position];
               }
               if (DEBUG_PRINT) {
                   System.out.print(")scanAttContent, '"+(char)quote+"': ");
                   print();
  -                System.out.println(" -> '"+fCurrentEntity.ch[fCurrentEntity.position]+"'");
  +                System.out.println(" -> '"+(char)c+"'");
               }
  -            return fCurrentEntity.ch[fCurrentEntity.position];
  +            return c;
       
           } // scanAttContent(int,XMLString):int
       
  @@ -1580,49 +1661,6 @@
               }
           } // load(int)
       
  -        /** Prints the contents of the buffer. */
  -        private final void print() {
  -            if (DEBUG_PRINT) {
  -                System.out.print('[');
  -                System.out.print(fCurrentEntity.count);
  -                if (fCurrentEntity.count > 0) {
  -                    System.out.print(" \"");
  -                    for (int i = 0; i < fCurrentEntity.count; i++) {
  -                        if (i == fCurrentEntity.position) {
  -                            System.out.print('^');
  -                        }
  -                        char c = fCurrentEntity.ch[i];
  -                        switch (c) {
  -                            case '\n': {
  -                                System.out.print("\\n");
  -                                break;
  -                            }
  -                            case '\r': {
  -                                System.out.print("\\r");
  -                                break;
  -                            }
  -                            case '\t': {
  -                                System.out.print("\\t");
  -                                break;
  -                            }
  -                            case '\\': {
  -                                System.out.print("\\\\");
  -                                break;
  -                            }
  -                            default: {
  -                                System.out.print(c);
  -                            }
  -                        }
  -                    }
  -                    if (fCurrentEntity.position == fCurrentEntity.count) {
  -                        System.out.print('^');
  -                    }
  -                    System.out.print('"');
  -                }
  -                System.out.print(']');
  -            }
  -        } // print()
  -
       } // class EntityScanner
   
       /**