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/12/22 11:59:31 UTC

cvs commit: xml-xerces/java/samples/sax/helpers Makefile AttributeListImpl.java

andyc       00/12/22 02:59:30

  Modified:    java/samples/sax Tag: xerces_j_2 DelayedInput.java
                        DocumentTracer.java Makefile
               java/samples/sax/helpers Tag: xerces_j_2 Makefile
  Added:       java/samples/sax Tag: xerces_j_2 Counter.java Writer.java
  Removed:     java/samples/sax Tag: xerces_j_2 SAX2Count.java
                        SAX2Writer.java SAXCount.java SAXWriter.java
               java/samples/sax/helpers Tag: xerces_j_2
                        AttributeListImpl.java
  Log:
  Updated samples.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.2   +262 -41   xml-xerces/java/samples/sax/Attic/DelayedInput.java
  
  Index: DelayedInput.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/samples/sax/Attic/DelayedInput.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- DelayedInput.java	2000/11/03 21:15:19	1.1.2.1
  +++ DelayedInput.java	2000/12/22 10:59:27	1.1.2.2
  @@ -61,18 +61,22 @@
   import java.io.FilterInputStream;
   import java.io.InputStream;
   import java.io.IOException;
  -import java.io.OutputStream;
  -import java.io.PipedInputStream;
  -import java.io.PipedOutputStream;
  +import java.io.PrintWriter;
   import java.util.Random;
   
  -import org.apache.xerces.parsers.SAXParser;
  -
  -import org.xml.sax.AttributeList;
  -import org.xml.sax.DocumentHandler;
  -import org.xml.sax.HandlerBase;
  +import org.xml.sax.Attributes;
  +import org.xml.sax.ContentHandler;
   import org.xml.sax.InputSource;
   import org.xml.sax.Parser;
  +import org.xml.sax.SAXException;
  +import org.xml.sax.SAXNotRecognizedException;
  +import org.xml.sax.SAXNotSupportedException;
  +import org.xml.sax.SAXParseException;
  +import org.xml.sax.XMLReader;
  +import org.xml.sax.helpers.DefaultHandler;
  +import org.xml.sax.helpers.ParserAdapter;
  +import org.xml.sax.helpers.ParserFactory;
  +import org.xml.sax.helpers.XMLReaderFactory;
   
   /**
    * This sample delays the input to the SAX parser to simulate reading data
  @@ -82,62 +86,125 @@
    *
    * @author Andy Clark, IBM
    *
  - * @version $Id: DelayedInput.java,v 1.1.2.1 2000/11/03 21:15:19 andyc Exp $
  + * @version $Id: DelayedInput.java,v 1.1.2.2 2000/12/22 10:59:27 andyc Exp $
    */
   public class DelayedInput
  -    extends HandlerBase {
  +    extends DefaultHandler {
   
       //
  -    // MAIN
  +    // Constants
       //
   
  -    /** Main program entry. */
  -    public static void main(String[] argv) throws Exception {
  +    // feature ids
   
  -        // print usage
  -        if (argv.length == 0) {
  -            System.out.println("usage: java DelayedInput file ...");
  -            System.exit(1);
  -        }
  +    /** Namespaces feature id (http://xml.org/sax/features/namespaces). */
  +    protected static final String NAMESPACES_FEATURE_ID = "http://xml.org/sax/features/namespaces";
  +    
  +    /** Validation feature id (http://xml.org/sax/features/validation). */
  +    protected static final String VALIDATION_FEATURE_ID = "http://xml.org/sax/features/validation";
  +
  +    /** Schema validation feature id (http://apache.org/xml/features/validation/schema). */
  +    protected static final String SCHEMA_VALIDATION_FEATURE_ID = "http://apache.org/xml/features/validation/schema";
  +
  +    // default settings
  +
  +    /** Default parser name. */
  +    protected static final String DEFAULT_PARSER_NAME = "org.apache.xerces.parsers.SAXParser";
  +
  +    /** Default namespaces support (true). */
  +    protected static final boolean DEFAULT_NAMESPACES = true;
  +
  +    /** Default validation support (false). */
  +    protected static final boolean DEFAULT_VALIDATION = false;
  +    
  +    /** Default Schema validation support (true). */
  +    protected static final boolean DEFAULT_SCHEMA_VALIDATION = true;
   
  -        // create handler and setup parser
  -        HandlerBase handler = new DelayedInput();
  -        Parser parser = new SAXParser();
  -        parser.setDocumentHandler(handler);
  +    //
  +    // Data
  +    //
   
  -        // read files
  -        for (int i = 0; i < argv.length; i++) {
  -            String arg = argv[i];
  -            System.out.println("argv["+i+"]: "+arg);
  -            InputStream stream = new DelayedInputStream(new FileInputStream(arg));
  -            InputSource source = new InputSource(stream);
  -            source.setSystemId(arg);
  -            parser.parse(source);
  -            stream.close();
  -        }
  +    /** Print writer. */
  +    protected PrintWriter fOut;
   
  -    } // main(String[])
  +    //
  +    // Constructors
  +    //
   
  +    /** Default constructor. */
  +    public DelayedInput() {
  +    } // <init>()
  +
       //
  -    // DocumentHandler methods
  +    // ContentHandler methods
       //
   
       /** Start element. */
  -    public void startElement(String name, AttributeList attrs) {
  +    public void startElement(String uri, String localpart, String rawname,
  +                             Attributes attrs) throws SAXException {
   
  -        System.out.println("("+name);
  +        System.out.println("("+rawname);
           int length = attrs != null ? attrs.getLength() : 0;
           for (int i = 0; i < length; i++) {
  -            System.out.println("A"+attrs.getName(i)+' '+attrs.getValue(i));
  +            System.out.println("A"+attrs.getQName(i)+' '+attrs.getValue(i));
           }
   
  -    } // startElement(String,AttributeList)
  +    } // startElement(String,String,String,Attributes)
   
       /** End element. */
  -    public void endElement(String name) {
  -        System.out.println(")"+name);
  -    } // endElement(String)
  +    public void endElement(String uri, String localpart, String rawname) 
  +        throws SAXException {
  +        System.out.println(")"+rawname);
  +    } // endElement(String,String,String)
  +
  +    //
  +    // ErrorHandler methods
  +    //
  +
  +    /** Warning. */
  +    public void warning(SAXParseException ex) throws SAXException {
  +        printError("Warning", ex);
  +    } // warning(SAXParseException)
  +
  +    /** Error. */
  +    public void error(SAXParseException ex) throws SAXException {
  +        printError("Error", ex);
  +    } // error(SAXParseException)
  +
  +    /** Fatal error. */
  +    public void fatalError(SAXParseException ex) throws SAXException {
  +        printError("Fatal Error", ex);
  +        throw ex;
  +    } // fatalError(SAXParseException)
  +
  +    //
  +    // Protected methods
  +    //
  +
  +    /** Prints the error message. */
  +    protected void printError(String type, SAXParseException ex) {
  +
  +        System.err.print("[");
  +        System.err.print(type);
  +        System.err.print("] ");
  +        String systemId = ex.getSystemId();
  +        if (systemId != null) {
  +            int index = systemId.lastIndexOf('/');
  +            if (index != -1)
  +                systemId = systemId.substring(index + 1);
  +            System.err.print(systemId);
  +        }
  +        System.err.print(':');
  +        System.err.print(ex.getLineNumber());
  +        System.err.print(':');
  +        System.err.print(ex.getColumnNumber());
  +        System.err.print(": ");
  +        System.err.print(ex.getMessage());
  +        System.err.println();
  +        System.err.flush();
   
  +    } // printError(String,SAXParseException)
  +
       //
       // Classes
       //
  @@ -239,5 +306,159 @@
           } // printBuffer(byte[],int,int)
   
       } // class DelayedInputStream
  +
  +    //
  +    // MAIN
  +    //
  +
  +    /** Main program entry point. */
  +    public static void main(String argv[]) {
  +        
  +        // is there anything to do?
  +        if (argv.length == 0) {
  +            printUsage();
  +            System.exit(1);
  +        }
  +
  +        // variables
  +        DefaultHandler handler = new DelayedInput();
  +        PrintWriter out = new PrintWriter(System.out);
  +        XMLReader parser = null;
  +        boolean namespaces = DEFAULT_NAMESPACES;
  +        boolean validation = DEFAULT_VALIDATION;
  +        boolean schemaValidation = DEFAULT_SCHEMA_VALIDATION;
  +        
  +        // process arguments
  +        for (int i = 0; i < argv.length; i++) {
  +            String arg = argv[i];
  +            if (arg.startsWith("-")) {
  +                String option = arg.substring(1);
  +                if (option.equals("p")) {
  +                    // get parser name
  +                    if (++i == argv.length) {
  +                        System.err.println("error: Missing argument to -p option.");
  +                    }
  +                    String parserName = argv[i];
  +
  +                    // create parser
  +                    try {
  +                        parser = XMLReaderFactory.createXMLReader(parserName);
  +                    }
  +                    catch (Exception e) {
  +                        try {
  +                            Parser sax1Parser = ParserFactory.makeParser(parserName);
  +                            parser = new ParserAdapter(sax1Parser);
  +                            System.err.println("warning: Features and properties not supported on SAX1 parsers.");
  +                        }
  +                        catch (Exception ex) {
  +                            parser = null;
  +                            System.err.println("error: Unable to instantiate parser ("+DEFAULT_PARSER_NAME+")");
  +                        }
  +                    }
  +                    continue;
  +                }
  +                if (option.equalsIgnoreCase("n")) {
  +                    namespaces = option.equals("n");
  +                    continue;
  +                }
  +                if (option.equalsIgnoreCase("v")) {
  +                    validation = option.equals("v");
  +                    continue;
  +                }
  +                if (option.equalsIgnoreCase("s")) {
  +                    schemaValidation = option.equals("s");
  +                    continue;
  +                }
  +                if (option.equals("h")) {
  +                    printUsage();
  +                    continue;
  +                }
  +            }
  +
  +            // use default parser?
  +            if (parser == null) {
  +
  +                // create parser
  +                try {
  +                    parser = XMLReaderFactory.createXMLReader(DEFAULT_PARSER_NAME);
  +                }
  +                catch (Exception e) {
  +                    System.err.println("error: Unable to instantiate parser ("+DEFAULT_PARSER_NAME+")");
  +                    continue;
  +                }
  +            }
  +        
  +            // set parser features
  +            try {
  +                parser.setFeature(NAMESPACES_FEATURE_ID, namespaces);
  +            }
  +            catch (SAXException e) {
  +                System.err.println("warning: Parser does not support feature ("+NAMESPACES_FEATURE_ID+")");
  +            }
  +            try {
  +                parser.setFeature(VALIDATION_FEATURE_ID, validation);
  +            }
  +            catch (SAXException e) {
  +                System.err.println("warning: Parser does not support feature ("+VALIDATION_FEATURE_ID+")");
  +            }
  +            try {
  +                parser.setFeature(SCHEMA_VALIDATION_FEATURE_ID, schemaValidation);
  +            }
  +            catch (SAXNotRecognizedException e) {
  +                // ignore
  +            }
  +            catch (SAXNotSupportedException e) {
  +                System.err.println("warning: Parser does not support feature ("+SCHEMA_VALIDATION_FEATURE_ID+")");
  +            }
  +
  +            // parse file
  +            parser.setContentHandler(handler);
  +            parser.setErrorHandler(handler);
  +            try {
  +                System.out.println("# filename: "+arg);
  +                InputStream stream = new DelayedInputStream(new FileInputStream(arg));
  +                InputSource source = new InputSource(stream);
  +                source.setSystemId(arg);
  +                parser.parse(source);
  +            }
  +            catch (SAXParseException e) {
  +                // ignore
  +            }
  +            catch (Exception e) {
  +                System.err.println("error: Parse error occurred - "+e.getMessage());
  +            }
  +        }
  +
  +    } // main(String[])
  +
  +    //
  +    // Private static methods
  +    //
  +
  +    /** Prints the usage. */
  +    private static void printUsage() {
  +
  +        System.err.println("usage: java sax.DelayedInput (options) filename ...");
  +        System.err.println();
  +        
  +        System.err.println("options:");
  +        System.err.println("  -p name  Select parser by name.");
  +        System.err.println("  -n | -N  Turn on/off namespace processing.");
  +        System.err.println("  -v | -V  Turn on/off validation.");
  +        System.err.println("  -s | -S  Turn on/off Schema validation support.");
  +        System.err.println("           NOTE: Not supported by all parsers.");
  +        System.err.println("  -h       This help screen.");
  +        System.err.println();
  +
  +        System.err.println("defaults:");
  +        System.err.println("  Parser:     "+DEFAULT_PARSER_NAME);
  +        System.out.print("  Namespaces: ");
  +        System.err.println(DEFAULT_NAMESPACES ? "on" : "off");
  +        System.out.print("  Validation: ");
  +        System.err.println(DEFAULT_VALIDATION ? "on" : "off");
  +        System.out.print("  Schema:     ");
  +        System.err.println(DEFAULT_SCHEMA_VALIDATION ? "on" : "off");
  +
  +    } // printUsage()
   
   } // class DelayedInput
  
  
  
  1.1.2.2   +546 -227  xml-xerces/java/samples/sax/DocumentTracer.java
  
  Index: DocumentTracer.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/samples/sax/DocumentTracer.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- DocumentTracer.java	2000/11/29 05:26:10	1.1.2.1
  +++ DocumentTracer.java	2000/12/22 10:59:27	1.1.2.2
  @@ -57,44 +57,94 @@
   
   package sax;
   
  -import java.io.FileInputStream;
  -import java.io.InputStream;
  -import java.io.IOException;
  +import java.io.OutputStream;
  +import java.io.OutputStreamWriter;
  +import java.io.PrintWriter;
  +import java.io.UnsupportedEncodingException;
  +import java.io.Writer;
   
   import org.apache.xerces.parsers.SAXParser;
   
  +import org.xml.sax.AttributeList;
   import org.xml.sax.Attributes;
   import org.xml.sax.ContentHandler;
  +import org.xml.sax.DocumentHandler;
   import org.xml.sax.DTDHandler;
   import org.xml.sax.ErrorHandler;
   import org.xml.sax.Locator;
  +import org.xml.sax.Parser;
   import org.xml.sax.SAXException;
  +import org.xml.sax.SAXNotRecognizedException;
  +import org.xml.sax.SAXNotSupportedException;
   import org.xml.sax.SAXParseException;
   import org.xml.sax.XMLReader;
   import org.xml.sax.helpers.DefaultHandler;
  +import org.xml.sax.helpers.ParserAdapter;
  +import org.xml.sax.helpers.ParserFactory;
  +import org.xml.sax.helpers.XMLReaderFactory;
   import org.xml.sax.ext.DeclHandler;
   import org.xml.sax.ext.LexicalHandler;
   
   /**
  - * Provides a complete trace of SAX2 events for files parsed.
  + * Provides a complete trace of SAX2 events for files parsed. This is
  + * useful for making sure that a SAX parser implementation faithfully
  + * communicates all information in the document to the SAX handlers.
    *
    * @author Andy Clark, IBM
    * @author Arnaud Le Hors, IBM
    *
  - * @version $Id: DocumentTracer.java,v 1.1.2.1 2000/11/29 05:26:10 andyc Exp $
  + * @version $Id: DocumentTracer.java,v 1.1.2.2 2000/12/22 10:59:27 andyc Exp $
    */
   public class DocumentTracer 
       extends DefaultHandler
  -    implements ContentHandler, DTDHandler, ErrorHandler, // standard
  -               DeclHandler, LexicalHandler // extensions (beta)
  +    implements ContentHandler, DTDHandler, ErrorHandler, // SAX2
  +               DeclHandler, LexicalHandler, // SAX2 extensions
  +               DocumentHandler // deprecated in SAX2
       {
   
       //
  +    // Constants
  +    //
  +
  +    // feature ids
  +
  +    /** Namespaces feature id (http://xml.org/sax/features/namespaces). */
  +    protected static final String NAMESPACES_FEATURE_ID = "http://xml.org/sax/features/namespaces";
  +    
  +    /** Validation feature id (http://xml.org/sax/features/validation). */
  +    protected static final String VALIDATION_FEATURE_ID = "http://xml.org/sax/features/validation";
  +
  +    /** Schema validation feature id (http://apache.org/xml/features/validation/schema). */
  +    protected static final String SCHEMA_VALIDATION_FEATURE_ID = "http://apache.org/xml/features/validation/schema";
  +
  +    // property ids
  +
  +    /** Lexical handler property id (http://xml.org/sax/properties/lexical-handler). */
  +    protected static final String LEXICAL_HANDLER_PROPERTY_ID = "http://xml.org/sax/properties/lexical-handler";
  +
  +    // default settings
  +
  +    /** Default parser name. */
  +    protected static final String DEFAULT_PARSER_NAME = "org.apache.xerces.parsers.SAXParser";
  +
  +    /** Default namespaces support (true). */
  +    protected static final boolean DEFAULT_NAMESPACES = true;
  +
  +    /** Default validation support (false). */
  +    protected static final boolean DEFAULT_VALIDATION = false;
  +    
  +    /** Default Schema validation support (true). */
  +    protected static final boolean DEFAULT_SCHEMA_VALIDATION = true;
  +
  +    /** Default canonical output (false). */
  +    protected static final boolean DEFAULT_CANONICAL = false;
  +
  +    //
       // Data
       //
   
  -    /** SAX parser. */
  -    protected SAXParser fSAXParser;
  +    /** Print writer. */
  +    protected PrintWriter fOut;
   
       /** Indent level. */
       protected int fIndent;
  @@ -105,58 +155,155 @@
   
       /** Default constructor. */
       public DocumentTracer() {
  -
  +        setOutput(new PrintWriter(System.out));
       } // <init>()
   
       //
  -    // ContentHandler methods
  +    // Public methods
       //
   
  +    /** Sets the output stream for printing. */
  +    public void setOutput(OutputStream stream, String encoding)
  +        throws UnsupportedEncodingException {
  +
  +        if (encoding == null) {
  +            encoding = "UTF8";
  +        }
  +
  +        Writer writer = new OutputStreamWriter(stream, encoding);
  +        fOut = new PrintWriter(writer);
  +
  +    } // setOutput(OutputStream,String)
  +
  +    /** Sets the output writer. */
  +    public void setOutput(Writer writer) {
  +            
  +        fOut = writer instanceof PrintWriter
  +             ? (PrintWriter)writer : new PrintWriter(writer);
  +
  +    } // setOutput(Writer)
  +
  +    //
  +    // ContentHandler and DocumentHandler methods
  +    //
  +
  +    /** Set document locator. */
       public void setDocumentLocator(Locator locator) {
  +        
           printIndent();
  -        System.out.println("setDocumentLocator("+locator+')');
  -    }
  +        fOut.print("setDocumentLocator(");
  +        fOut.print("locator=");
  +        fOut.print(locator);
  +        fOut.println(')');
  +        fOut.flush();
   
  +    } // setDocumentLocator(Locator)
  +
  +    /** Start document. */
       public void startDocument() throws SAXException {
  +        
           fIndent = 0;
           printIndent();
  -        System.out.println("startDocument()");
  +        fOut.println("startDocument()");
  +        fOut.flush();
           fIndent++;
  -    }
   
  +    } // startDocument()
  +
  +    /** Processing instruction. */
       public void processingInstruction(String target, String data)
           throws SAXException {
  +        
           printIndent();
  -        System.out.print("processingInstruction(");
  -        System.out.print("target="+quoteString(target));
  -        System.out.print(',');
  -        System.out.print("data="+quoteString(data));
  -        System.out.println(')');
  -    }
  +        fOut.print("processingInstruction(");
  +        fOut.print("target=");
  +        printQuotedString(target);
  +        fOut.print(',');
  +        fOut.print("data=");
  +        printQuotedString(data);
  +        fOut.println(')');
  +        fOut.flush();
   
  -    public void startPrefixMapping(String prefix, String uri)
  +    } // processingInstruction(String,String)
  +
  +    /** Characters. */
  +    public void characters(char[] ch, int offset, int length) 
           throws SAXException {
  +
           printIndent();
  -        System.out.print("startPrefixMapping(");
  -        System.out.print("prefix="+quoteString(prefix));
  -        System.out.print(',');
  -        System.out.print("uri="+quoteString(uri));
  -        System.out.println(')');
  -        fIndent++;
  -    }
  +        fOut.print("characters(");
  +        fOut.print("text=");
  +        printQuotedString(ch, offset, length);
  +        fOut.println(')');
  +        fOut.flush();
  +
  +    } // characters(char[],int,int)
  +
  +    /** Ignorable whitespace. */
  +    public void ignorableWhitespace(char[] ch, int offset, int length) 
  +        throws SAXException {
  +
  +        printIndent();
  +        fOut.print("ignorableWhitespace(");
  +        fOut.print("text=");
  +        printQuotedString(ch, offset, length);
  +        fOut.println(')');
  +        fOut.flush();
  +
  +    } // ignorableWhitespace(char[],int,int)
  +
  +    /** End document. */
  +    public void endDocument() throws SAXException {
  +
  +        fIndent--;
  +        printIndent();
  +        fOut.println("endDocument()");
  +        fOut.flush();
  +
  +    } // endDocument()
  +
  +    //
  +    // ContentHandler methods
  +    //
   
  -    public void startElement(String uri, String localpart, String rawname, Attributes attributes)
  +    /** Start prefix mapping. */
  +    public void startPrefixMapping(String prefix, String uri)
           throws SAXException {
  +
           printIndent();
  -        System.out.print("startElement(");
  -        System.out.print("element={"+uri+','+localpart+','+rawname+'}');
  -        System.out.print(',');
  -        System.out.print("attributes=");
  +        fOut.print("startPrefixMapping(");
  +        fOut.print("prefix=");
  +        printQuotedString(prefix);
  +        fOut.print(',');
  +        fOut.print("uri=");
  +        printQuotedString(uri);
  +        fOut.println(')');
  +        fOut.flush();
  +        fIndent++;
  +
  +    } // startPrefixMapping(String,String)
  +
  +    /** Start element. */
  +    public void startElement(String uri, String localpart, String rawname, 
  +                             Attributes attributes) throws SAXException {
  +
  +        printIndent();
  +        fOut.print("startElement(");
  +        fOut.print("uri=");
  +        printQuotedString(uri);
  +        fOut.print(',');
  +        fOut.print("localpart=");
  +        printQuotedString(localpart);
  +        fOut.print(',');
  +        fOut.print("rawname=");
  +        printQuotedString(rawname);
  +        fOut.print(',');
  +        fOut.print("attributes=");
           if (attributes == null) {
  -            System.out.println("null");
  +            fOut.println("null");
           }
           else {
  -            System.out.print('{');
  +            fOut.print('{');
               int length = attributes.getLength();
               for (int i = 0; i < length; i++) {
                   if (i > 0) {
  @@ -165,267 +312,446 @@
                   String attrURI = attributes.getURI(i);
                   String attrLocalpart = attributes.getLocalName(i);
                   String attrRawname = attributes.getQName(i);
  -                System.out.print('{'+attrURI+','+attrLocalpart+','+attrRawname+"}=");
  -                System.out.print(quoteString(attributes.getValue(i)));
  +                fOut.print('{');
  +                fOut.print("uri=");
  +                printQuotedString(attrURI);
  +                fOut.print(',');
  +                fOut.print("localpart=");
  +                printQuotedString(attrLocalpart);
  +                fOut.print(',');
  +                fOut.print("rawname=");
  +                printQuotedString(attrRawname);
  +                fOut.print("}=");
  +                printQuotedString(attributes.getValue(i));
               }
  -            System.out.print('}');
  +            fOut.print('}');
           }
  -        System.out.println(')');
  +        fOut.println(')');
  +        fOut.flush();
           fIndent++;
  -    }
   
  -    public void characters(char[] ch, int offset, int length) throws SAXException {
  -        printIndent();
  -        System.out.print("characters(");
  -        System.out.print("text="+quoteString(new String(ch, offset, length)));
  -        System.out.println(')');
  -    }
  +    } // startElement(String,String,String,Attributes)
   
  -    public void ignorableWhitespace(char[] ch, int offset, int length) throws SAXException {
  -        printIndent();
  -        System.out.print("ignorableWhitespace(");
  -        System.out.print("text="+quoteString(new String(ch, offset, length)));
  -        System.out.println(')');
  -    }
  +    /** End element. */
  +    public void endElement(String uri, String localpart, String rawname) 
  +        throws SAXException {
   
  -    public void endElement(String uri, String localpart, String rawname) throws SAXException {
           fIndent--;
           printIndent();
  -        System.out.print("endElement(");
  -        System.out.print("element={"+uri+','+localpart+','+rawname+'}');
  -        System.out.println("})");
  -    }
  +        fOut.print("endElement(");
  +        fOut.print("uri=");
  +        printQuotedString(uri);
  +        fOut.print(',');
  +        fOut.print("localpart=");
  +        printQuotedString(localpart);
  +        fOut.print(',');
  +        fOut.print("rawname=");
  +        printQuotedString(rawname);
  +        fOut.println(')');
  +        fOut.flush();
  +
  +    } // endElement(String,String,String)
   
  +    /** End prefix mapping. */
       public void endPrefixMapping(String prefix) throws SAXException {
  +
           fIndent--;
           printIndent();
  -        System.out.print("endPrefixMapping(");
  -        System.out.print("prefix="+quoteString(prefix));
  -        System.out.println(')');
  -    }
  +        fOut.print("endPrefixMapping(");
  +        fOut.print("prefix=");
  +        printQuotedString(prefix);
  +        fOut.println(')');
  +        fOut.flush();
  +
  +    } // endPrefixMapping(String)
   
  +    /** Skipped entity. */
       public void skippedEntity(String name) throws SAXException {
  +
           printIndent();
  -        System.out.print("skippedEntity(");
  -        System.out.print("name="+quoteString(name));
  -        System.out.println(')');
  -    }
  +        fOut.print("skippedEntity(");
  +        fOut.print("name=");
  +        printQuotedString(name);
  +        fOut.println(')');
  +        fOut.flush();
   
  -    public void endDocument() throws SAXException {
  +    } // skippedEntity(String)
  +
  +    //
  +    // DocumentHandler methods
  +    //
  +
  +    /** Start element. */
  +    public void startElement(String name, AttributeList attributes) 
  +        throws SAXException {
  +
  +        printIndent();
  +        fOut.print("startElement(");
  +        fOut.print("name=");
  +        printQuotedString(name);
  +        fOut.print(',');
  +        fOut.print("attributes=");
  +        if (attributes == null) {
  +            fOut.println("null");
  +        }
  +        else {
  +            fOut.print('{');
  +            int length = attributes.getLength();
  +            for (int i = 0; i < length; i++) {
  +                if (i > 0) {
  +                    System.out.print(',');
  +                }
  +                printQuotedString(attributes.getName(i));
  +                fOut.print('=');
  +                printQuotedString(attributes.getValue(i));
  +            }
  +            fOut.print('}');
  +        }
  +        fOut.println(')');
  +        fOut.flush();
  +        fIndent++;
  +
  +    } // startElement(String,AttributeList)
  +
  +    /** End element. */
  +    public void endElement(String name) throws SAXException {
  +
           fIndent--;
           printIndent();
  -        System.out.println("endDocument()");
  -    }
  +        fOut.print("endElement(");
  +        fOut.print("name=");
  +        printQuotedString(name);
  +        fOut.println(')');
  +        fOut.flush();
  +
  +    } // endElement(String)
   
       //
       // DTDHandler methods
       //
   
  +    /** Notation declaration. */
       public void notationDecl(String name, String publicId, String systemId) 
           throws SAXException {
  -        printIndent();
  -        System.out.print("notationDecl(");
  -        System.out.print("name="+quoteString(name));
  -        System.out.print(',');
  -        System.out.print("publicId="+quoteString(publicId));
  -        System.out.print(',');
  -        System.out.print("systemId="+quoteString(systemId));
  -        System.out.println(')');
  -    }
   
  -    public void unparsedEntityDecl(String name, String publicId, String systemId, 
  +        printIndent();
  +        fOut.print("notationDecl(");
  +        fOut.print("name=");
  +        printQuotedString(name);
  +        fOut.print(',');
  +        fOut.print("publicId=");
  +        printQuotedString(publicId);
  +        fOut.print(',');
  +        fOut.print("systemId=");
  +        printQuotedString(systemId);
  +        fOut.println(')');
  +        fOut.flush();
  +
  +    } // notationDecl(String,String,String)
  +
  +    /** Unparsed entity declaration. */
  +    public void unparsedEntityDecl(String name, 
  +                                   String publicId, String systemId, 
                                      String notationName) throws SAXException {
           printIndent();
  -        System.out.print("unparsedEntityDecl(");
  -        System.out.print("name="+quoteString(name));
  -        System.out.print(',');
  -        System.out.print("publicId="+quoteString(publicId));
  -        System.out.print(',');
  -        System.out.print("systemId="+quoteString(systemId));
  -        System.out.print(',');
  -        System.out.print("notationName="+quoteString(notationName));
  -        System.out.println(')');
  -    }
  +        fOut.print("unparsedEntityDecl(");
  +        fOut.print("name=");
  +        printQuotedString(name);
  +        fOut.print(',');
  +        fOut.print("publicId=");
  +        printQuotedString(publicId);
  +        fOut.print(',');
  +        fOut.print("systemId=");
  +        printQuotedString(systemId);
  +        fOut.print(',');
  +        fOut.print("notationName=");
  +        printQuotedString(notationName);
  +        fOut.println(')');
  +        fOut.flush();
   
  +    } // unparsedEntityDecl(String,String,String,String)
  +
       //
       // LexicalHandler methods
       //
   
  +    /** Start DTD. */
       public void startDTD(String name, String publicId, String systemId)
           throws SAXException {
  +
           printIndent();
  -        System.out.print("startDTD(");
  -        System.out.print("name="+quoteString(name));
  -        System.out.print(',');
  -        System.out.print("publicId="+quoteString(publicId));
  -        System.out.print(',');
  -        System.out.print("systemId="+quoteString(systemId));
  -        System.out.println(')');
  +        fOut.print("startDTD(");
  +        fOut.print("name=");
  +        printQuotedString(name);
  +        fOut.print(',');
  +        fOut.print("publicId=");
  +        printQuotedString(publicId);
  +        fOut.print(',');
  +        fOut.print("systemId=");
  +        printQuotedString(systemId);
  +        fOut.println(')');
  +        fOut.flush();
           fIndent++;
  -    }
   
  +    } // startDTD(String,String,String)
  +
  +    /** Start entity. */
       public void startEntity(String name) throws SAXException {
  +
           printIndent();
  -        System.out.print("startEntity(");
  -        System.out.print("name="+quoteString(name));
  -        System.out.println(')');
  +        fOut.print("startEntity(");
  +        fOut.print("name=");
  +        printQuotedString(name);
  +        fOut.println(')');
  +        fOut.flush();
           fIndent++;
  -    }
   
  +    } // startEntity(String)
  +
  +    /** Start CDATA section. */
       public void startCDATA() throws SAXException {
  +
           printIndent();
  -        System.out.println("startCDATA()");
  +        fOut.println("startCDATA()");
  +        fOut.flush();
           fIndent++;
  -    }
   
  +    } // startCDATA()
  +
  +    /** End CDATA section. */
       public void endCDATA() throws SAXException {
  +
           fIndent--;
           printIndent();
  -        System.out.println("endCDATA()");
  -    }
  +        fOut.println("endCDATA()");
  +        fOut.flush();
   
  -    public void comment(char[] ch, int offset, int length) throws SAXException {
  +    } // endCDATA()
  +
  +    /** Comment. */
  +    public void comment(char[] ch, int offset, int length) 
  +        throws SAXException {
  +
           printIndent();
  -        System.out.print("comment(");
  -        System.out.print("text="+quoteString(new String(ch, offset, length)));
  -        System.out.println(')');
  -    }
  +        fOut.print("comment(");
  +        fOut.print("text=");
  +        printQuotedString(ch, offset, length);
  +        fOut.println(')');
  +        fOut.flush();
  +
  +    } // comment(char[],int,int)
   
  +    /** End entity. */
       public void endEntity(String name) throws SAXException {
  +
           fIndent--;
           printIndent();
  -        System.out.print("endEntity(");
  -        System.out.print("name="+quoteString(name));
  -        System.out.println(')');
  -    }
  +        fOut.print("endEntity(");
  +        fOut.print("name=");
  +        printQuotedString(name);
  +        fOut.println(')');
  +
  +    } // endEntity(String)
   
  +    /** End DTD. */
       public void endDTD() throws SAXException {
  +
           fIndent--;
           printIndent();
  -        System.out.println("endDTD()");
  -    } // endDTD
  +        fOut.println("endDTD()");
  +        fOut.flush();
   
  +    } // endDTD()
  +
       //
       // DeclHandler methods
       //
   
  +    /** Element declaration. */
       public void elementDecl(String name, String contentModel)
           throws SAXException {
  +
           printIndent();
  -        System.out.print("elementDecl(");
  -        System.out.print("name="+quoteString(name));
  -        System.out.print(',');
  -        System.out.print("contentModel="+quoteString(contentModel));
  -        System.out.println(')');
  -    } // elementDecl
  +        fOut.print("elementDecl(");
  +        fOut.print("name=");
  +        printQuotedString(name);
  +        fOut.print(',');
  +        fOut.print("contentModel=");
  +        printQuotedString(contentModel);
  +        fOut.println(')');
  +        fOut.flush();
  +
  +    } // elementDecl(String,String)
   
  +    /** Attribute declaration. */
       public void attributeDecl(String elementName, String attributeName, 
  -                              String type, String defaultValue, String defaultType)
  -        throws SAXException {
  +                              String type, String defaultValue, 
  +                              String defaultType) throws SAXException {
  +
           printIndent();
  -        System.out.print("attributeDecl(");
  -        System.out.print("elementName="+quoteString(elementName));
  -        System.out.print(',');
  -        System.out.print("attributeName="+quoteString(attributeName));
  -        System.out.print(',');
  -        System.out.print("type="+quoteString(type));
  -        System.out.print(',');
  -        System.out.print("defaultValue="+quoteString(defaultValue));
  -        System.out.print(',');
  -        System.out.print("defaultType="+quoteString(defaultType));
  -        System.out.println(')');
  -    } // attributeDecl
  +        fOut.print("attributeDecl(");
  +        fOut.print("elementName=");
  +        printQuotedString(elementName);
  +        fOut.print(',');
  +        fOut.print("attributeName=");
  +        printQuotedString(attributeName);
  +        fOut.print(',');
  +        fOut.print("type=");
  +        printQuotedString(type);
  +        fOut.print(',');
  +        fOut.print("defaultValue=");
  +        printQuotedString(defaultValue);
  +        fOut.print(',');
  +        fOut.print("defaultType=");
  +        printQuotedString(defaultType);
  +        fOut.println(')');
  +        fOut.flush();
  +
  +    } // attributeDecl(String,String,String,String,String)
   
  +    /** Internal entity declaration. */
       public void internalEntityDecl(String name, String text)
           throws SAXException {
  +
           printIndent();
  -        System.out.print("internalEntityDecl(");
  -        System.out.print("name="+quoteString(name));
  -        System.out.print(',');
  -        System.out.print("text="+quoteString(text));
  -        System.out.println(')');
  -    } // internalEntityDecl
  -
  -    public void externalEntityDecl(String name, String publicId, String systemId)
  -        throws SAXException {
  -        printIndent();
  -        System.out.print("externalEntityDecl(");
  -        System.out.print("name="+quoteString(name));
  -        System.out.print(',');
  -        System.out.print("publicId="+quoteString(publicId));
  -        System.out.print(',');
  -        System.out.print("systemId="+quoteString(systemId));
  -        System.out.println(')');
  -    } // externalEntityDecl
  +        fOut.print("internalEntityDecl(");
  +        fOut.print("name=");
  +        printQuotedString(name);
  +        fOut.print(',');
  +        fOut.print("text=");
  +        printQuotedString(text);
  +        fOut.println(')');
  +        fOut.flush();
  +
  +    } // internalEntityDecl(String,String)
  +
  +    /** External entity declaration. */
  +    public void externalEntityDecl(String name, 
  +                                   String publicId, String systemId)
  +        throws SAXException {
   
  +        printIndent();
  +        fOut.print("externalEntityDecl(");
  +        fOut.print("name=");
  +        printQuotedString(name);
  +        fOut.print(',');
  +        fOut.print("publicId=");
  +        printQuotedString(publicId);
  +        fOut.print(',');
  +        fOut.print("systemId=");
  +        printQuotedString(systemId);
  +        fOut.println(')');
  +        fOut.flush();
  +
  +    } // externalEntityDecl(String,String,String)
  +
       //
       // ErrorHandler methods
       //
   
       /** Warning. */
  -    public void warning(SAXParseException ex) {
  -        System.err.println("[Warning] "+
  -                           getLocationString(ex)+": "+
  -                           ex.getMessage());
  -    }
  +    public void warning(SAXParseException ex) throws SAXException {
  +        printError("Warning", ex);
  +    } // warning(SAXParseException)
   
       /** Error. */
  -    public void error(SAXParseException ex) {
  -        System.err.println("[Error] "+
  -                           getLocationString(ex)+": "+
  -                           ex.getMessage());
  -    }
  +    public void error(SAXParseException ex) throws SAXException {
  +        printError("Error", ex);
  +    } // error(SAXParseException)
   
       /** Fatal error. */
       public void fatalError(SAXParseException ex) throws SAXException {
  -        System.err.println("[Fatal Error] "+
  -                           getLocationString(ex)+": "+
  -                           ex.getMessage());
  +        printError("Fatal Error", ex);
           throw ex;
  -    }
  +    } // fatalError(SAXParseException)
   
       //
  -    // Static methods
  +    // Protected methods
       //
  +
  +    /** Print quoted string. */
  +    protected void printQuotedString(String s) {
   
  -    public static String quoteString(String s) {
           if (s == null) {
  -            return "null";
  +            fOut.print("null");
  +            return;
           }
  -        StringBuffer str = new StringBuffer();
  -        str.append('"');
  +
  +        fOut.print('"');
           int length = s.length();
           for (int i = 0; i < length; i++) {
               char c = s.charAt(i);
  -            switch (c) {
  -                case '\n': {
  -                    str.append("\\n");
  -                    break;
  -                }
  -                case '\r': {
  -                    str.append("\\r");
  -                    break;
  -                }
  -                case '\t': {
  -                    str.append("\\t");
  -                    break;
  -                }
  -                case '\\': {
  -                    str.append("\\\\");
  -                    break;
  -                }
  -                case '"': {
  -                    str.append("\\\"");
  -                    break;
  -                }
  -                default: {
  -                    str.append(c);
  -                }
  +            normalizeAndPrint(c);
  +        }
  +        fOut.print('"');
  +
  +    } // printQuotedString(String)
  +
  +    /** Print quoted string. */
  +    protected void printQuotedString(char[] ch, int offset, int length) {
  +
  +        fOut.print('"');
  +        for (int i = 0; i < length; i++) {
  +            normalizeAndPrint(ch[offset + i]);
  +        }
  +        fOut.print('"');
  +
  +    } // printQuotedString(char[],int,int)
  +
  +    /** Normalize and print. */
  +    protected void normalizeAndPrint(char c) {
  +
  +        switch (c) {
  +            case '\n': {
  +                fOut.print("\\n");
  +                break;
               }
  +            case '\r': {
  +                fOut.print("\\r");
  +                break;
  +            }
  +            case '\t': {
  +                fOut.print("\\t");
  +                break;
  +            }
  +            case '\\': {
  +                fOut.print("\\\\");
  +                break;
  +            }
  +            case '"': {
  +                fOut.print("\\\"");
  +                break;
  +            }
  +            default: {
  +                fOut.print(c);
  +            }
           }
  -        str.append('"');
  -        return str.toString();
  -    }
  +
  +    } // normalizeAndPrint(char)
  +
  +    /** Prints the error message. */
  +    protected void printError(String type, SAXParseException ex) {
  +
  +        System.err.print("[");
  +        System.err.print(type);
  +        System.err.print("] ");
  +        String systemId = ex.getSystemId();
  +        if (systemId != null) {
  +            int index = systemId.lastIndexOf('/');
  +            if (index != -1)
  +                systemId = systemId.substring(index + 1);
  +            System.err.print(systemId);
  +        }
  +        System.err.print(':');
  +        System.err.print(ex.getLineNumber());
  +        System.err.print(':');
  +        System.err.print(ex.getColumnNumber());
  +        System.err.print(": ");
  +        System.err.print(ex.getMessage());
  +        System.err.println();
  +        System.err.flush();
  +
  +    } // printError(String,SAXParseException)
   
       //
       // Private methods
  @@ -434,7 +760,7 @@
       /** Prints the indent. */
       private void printIndent() {
           for (int i = 0; i < fIndent; i++) {
  -            System.out.print(' ');
  +            fOut.print(' ');
           }
       }
   
  @@ -466,7 +792,7 @@
       public static void main(String[] argv) throws Exception {
           
           // construct handler
  -        DefaultHandler handler = new DocumentTracer();
  +        DocumentTracer tracer = new DocumentTracer();
   
           // construct parser; set features
           XMLReader parser = new SAXParser();
  @@ -484,27 +810,31 @@
           }
   
           // set handlers
  -        parser.setContentHandler(handler);
  -        parser.setDTDHandler(handler);
  -        parser.setErrorHandler(handler);
  -        try {
  -            parser.setProperty("http://xml.org/sax/properties/declaration-handler", handler);
  +        parser.setDTDHandler(tracer);
  +        parser.setErrorHandler(tracer);
  +        if (parser instanceof Parser) {
  +            ((Parser)parser).setDocumentHandler(tracer);
           }
  -        catch (SAXException e) {
  -            e.printStackTrace(System.err);
  -        }
  -        try {
  -            parser.setProperty("http://xml.org/sax/properties/lexical-handler", handler);
  -        }
  -        catch (SAXException e) {
  -            e.printStackTrace(System.err);
  +        else {
  +            parser.setContentHandler(tracer);
  +            try {
  +                parser.setProperty("http://xml.org/sax/properties/declaration-handler", tracer);
  +            }
  +            catch (SAXException e) {
  +                e.printStackTrace(System.err);
  +            }
  +            try {
  +                parser.setProperty("http://xml.org/sax/properties/lexical-handler", tracer);
  +            }
  +            catch (SAXException e) {
  +                e.printStackTrace(System.err);
  +            }
           }
   
           // parser files
           for (int i = 0; i < argv.length; i++) {
               String arg = argv[i];
               System.err.println("# argv["+i+"]: "+arg);
  -            //print(arg);
               try {
                   parser.parse(arg);
               }
  @@ -514,16 +844,5 @@
               }
           }
       } // main(String[])
  -
  -    /** Prints the file. */
  -    private static void print(String filename) throws IOException {
  -        InputStream in = new FileInputStream(filename);
  -        int c = -1;
  -        while ((c = in.read()) != -1) {
  -            System.out.print((char)c);
  -        }
  -        System.out.println();
  -        in.close();
  -    } // print(String)
   
   } // class DocumentTracer
  
  
  
  1.5.4.5   +2 -4      xml-xerces/java/samples/sax/Makefile
  
  Index: Makefile
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/samples/sax/Makefile,v
  retrieving revision 1.5.4.4
  retrieving revision 1.5.4.5
  diff -u -r1.5.4.4 -r1.5.4.5
  --- Makefile	2000/11/29 17:08:23	1.5.4.4
  +++ Makefile	2000/12/22 10:59:27	1.5.4.5
  @@ -1,12 +1,10 @@
   # Makefile for directory ./sax
   
   TARGETS=\
  +	Counter.class\
   	DelayedInput.class\
   	DocumentTracer.class\
  -	SAXCount.class\
  -	SAX2Count.class\
  -	SAXWriter.class\
  -	SAX2Writer.class
  +	Writer.class
   
   DIRS = helpers
   
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.1   +418 -0    xml-xerces/java/samples/sax/Attic/Counter.java
  
  
  
  
  1.1.2.1   +602 -0    xml-xerces/java/samples/sax/Attic/Writer.java
  
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.4.4.1   +1 -2      xml-xerces/java/samples/sax/helpers/Makefile
  
  Index: Makefile
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/samples/sax/helpers/Makefile,v
  retrieving revision 1.4
  retrieving revision 1.4.4.1
  diff -u -r1.4 -r1.4.4.1
  --- Makefile	2000/02/29 02:02:11	1.4
  +++ Makefile	2000/12/22 10:59:30	1.4.4.1
  @@ -1,8 +1,7 @@
   # Makefile for directory ./sax/helpers
   
   TARGETS=\
  -	AttributesImpl.class\
  -	AttributeListImpl.class
  +	AttributesImpl.class
   
   DIRS =