KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > gnu > kawa > xml > XMLParser


1 // Copyright (c) 2002 Per M.A. Bothner.
2
// This is free software; for terms and warranty disclaimer see ./COPYING.
3

4 package gnu.kawa.xml;
5 import gnu.lists.*;
6 import gnu.xml.*;
7 import gnu.text.*;
8 import java.net.*;
9
10 public class XMLParser extends XMLParserChar
11                        implements gnu.text.SourceLocator
12 {
13   XMLFilter filter;
14
15   public XMLParser(LineBufferedReader reader, SourceMessages messages, Consumer out)
16   {
17     this(reader, new XMLFilter(out), messages);
18     
19   }
20
21   public XMLParser(Object JavaDoc uri, SourceMessages messages, Consumer out)
22     throws java.io.IOException JavaDoc
23   {
24     this(uri, messages, new XMLFilter(out),
25      new LineBufferedReader(new java.io.BufferedInputStream JavaDoc(URI_utils.getInputStream(uri))));
26   }
27
28   private XMLParser(LineBufferedReader reader, XMLFilter resolver,
29             SourceMessages messages)
30   {
31     super(null, 0, 0, resolver);
32     this.filter = resolver;
33     in = reader;
34     resolver.setMessages(messages);
35     resolver.setSourceLocator(this);
36   }
37
38   private XMLParser(Object JavaDoc uri, SourceMessages messages,
39             XMLFilter resolver,
40             LineBufferedReader lreader)
41     throws java.io.IOException JavaDoc
42   {
43     this(lreader, resolver, messages);
44     lreader.setName(uri);
45   }
46
47   public int fill(char[] buffer, int start, int pos)
48   {
49     LineBufferedReader reader = (LineBufferedReader) in;
50     int saved = pos - start;
51     try
52       {
53     if (saved > 0)
54       {
55         int skipped = reader.skip(start - reader.pos);
56         reader.mark(saved + 1);
57         skipped = reader.skip(saved);
58       }
59     else
60       {
61         reader.skip(pos - reader.pos);
62       }
63     int x = reader.read();
64     if (x <= 0)
65       return -1;
66     if (saved > 0)
67       {
68         reader.reset();
69         reader.skip(saved);
70       }
71     else
72       reader.unread_quick();
73       }
74     catch (java.io.IOException JavaDoc ex)
75       {
76     throw new RuntimeException JavaDoc(ex.getMessage());
77       }
78     this.pos = reader.pos;
79     this.buffer = reader.buffer;
80     return reader.limit - reader.pos;
81   }
82
83   public void error(char severity, String JavaDoc message)
84   {
85     LineBufferedReader reader = (LineBufferedReader) in;
86     try
87       {
88     reader.skip(pos - reader.pos);
89       }
90     catch (Exception JavaDoc ex)
91       {
92       }
93     filter.error(severity, message);
94   }
95
96   public String JavaDoc getPublicId ()
97   {
98     return null;
99   }
100
101   public String JavaDoc getSystemId ()
102   {
103     return ((LineBufferedReader) in).getName();
104   }
105
106   public String JavaDoc getFileName ()
107   {
108     return ((LineBufferedReader) in).getName();
109   }
110
111   public int getLineNumber()
112   {
113     int line = ((LineBufferedReader) in).getLineNumber();
114     return line < 0 ? -1 : line + 1;
115   }
116
117   public int getColumnNumber()
118   {
119     int col = ((LineBufferedReader) in).getColumnNumber();
120     return col < 0 ? -1 : col;
121   }
122
123   public boolean isStableSourceLocation()
124   {
125     return false;
126   }
127
128   public void close ()
129     throws java.io.IOException JavaDoc
130   {
131     in.close();
132   }
133 }
134
Popular Tags