1 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 uri, SourceMessages messages, Consumer out) 22 throws java.io.IOException 23 { 24 this(uri, messages, new XMLFilter(out), 25 new LineBufferedReader(new java.io.BufferedInputStream (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 uri, SourceMessages messages, 39 XMLFilter resolver, 40 LineBufferedReader lreader) 41 throws java.io.IOException 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 ex) 75 { 76 throw new RuntimeException (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 message) 84 { 85 LineBufferedReader reader = (LineBufferedReader) in; 86 try 87 { 88 reader.skip(pos - reader.pos); 89 } 90 catch (Exception ex) 91 { 92 } 93 filter.error(severity, message); 94 } 95 96 public String getPublicId () 97 { 98 return null; 99 } 100 101 public String getSystemId () 102 { 103 return ((LineBufferedReader) in).getName(); 104 } 105 106 public String 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 130 { 131 in.close(); 132 } 133 } 134 | Popular Tags |