home *** CD-ROM | disk | FTP | other *** search
- package net.n3.nanoxml;
-
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.LineNumberReader;
- import java.io.PushbackInputStream;
- import java.io.PushbackReader;
- import java.io.Reader;
- import java.io.StringReader;
- import java.io.UnsupportedEncodingException;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.Stack;
-
- public class StdXMLReader implements IXMLReader {
- private Stack pbreaders;
- private Stack linereaders;
- private Stack systemIds;
- private Stack publicIds;
- private PushbackReader currentPbReader;
- private LineNumberReader currentLineReader;
- private URL currentSystemID;
- private String currentPublicID;
-
- public static IXMLReader stringReader(String var0) {
- return new StdXMLReader(new StringReader(var0));
- }
-
- public static IXMLReader fileReader(String var0) throws FileNotFoundException, IOException {
- StdXMLReader var1 = new StdXMLReader(new FileInputStream(var0));
- var1.setSystemID(var0);
- return var1;
- }
-
- public StdXMLReader(String var1, String var2) throws MalformedURLException, FileNotFoundException, IOException {
- Object var3 = null;
-
- try {
- var9 = new URL(var2);
- } catch (MalformedURLException var7) {
- var2 = "file:" + var2;
-
- try {
- var9 = new URL(var2);
- } catch (MalformedURLException var6) {
- throw var7;
- }
- }
-
- Reader var4 = this.openStream(var1, var9.toString());
- this.currentLineReader = new LineNumberReader(var4);
- this.currentPbReader = new PushbackReader(this.currentLineReader, 2);
- this.pbreaders = new Stack();
- this.linereaders = new Stack();
- this.publicIds = new Stack();
- this.systemIds = new Stack();
- this.currentPublicID = var1;
- this.currentSystemID = var9;
- }
-
- public StdXMLReader(Reader var1) {
- this.currentLineReader = new LineNumberReader(var1);
- this.currentPbReader = new PushbackReader(this.currentLineReader, 2);
- this.pbreaders = new Stack();
- this.linereaders = new Stack();
- this.publicIds = new Stack();
- this.systemIds = new Stack();
- this.currentPublicID = "";
-
- try {
- this.currentSystemID = new URL("file:.");
- } catch (MalformedURLException var3) {
- }
-
- }
-
- protected void finalize() throws Throwable {
- this.currentLineReader = null;
- this.currentPbReader = null;
- this.pbreaders.clear();
- this.pbreaders = null;
- this.linereaders.clear();
- this.linereaders = null;
- this.publicIds.clear();
- this.publicIds = null;
- this.systemIds.clear();
- this.systemIds = null;
- this.currentPublicID = null;
- super.finalize();
- }
-
- protected String getEncoding(String var1) {
- if (!var1.startsWith("<?xml")) {
- return null;
- } else {
- int var5;
- for(int var2 = 5; var2 < var1.length(); var2 = var5 + 1) {
- StringBuffer var3;
- for(var3 = new StringBuffer(); var2 < var1.length() && var1.charAt(var2) <= ' '; ++var2) {
- }
-
- while(var2 < var1.length() && var1.charAt(var2) >= 'a' && var1.charAt(var2) <= 'z') {
- var3.append(var1.charAt(var2));
- ++var2;
- }
-
- while(var2 < var1.length() && var1.charAt(var2) <= ' ') {
- ++var2;
- }
-
- if (var2 >= var1.length() || var1.charAt(var2) != '=') {
- break;
- }
-
- while(var2 < var1.length() && var1.charAt(var2) != '\'' && var1.charAt(var2) != '"') {
- ++var2;
- }
-
- if (var2 >= var1.length()) {
- break;
- }
-
- char var4 = var1.charAt(var2);
- ++var2;
- var5 = var1.indexOf(var4, var2);
- if (var5 < 0) {
- break;
- }
-
- if (var3.toString().equals("encoding")) {
- return var1.substring(var2, var5);
- }
- }
-
- return null;
- }
- }
-
- protected Reader stream2reader(InputStream var1, StringBuffer var2) throws IOException {
- PushbackInputStream var3 = new PushbackInputStream(var1);
- int var4 = var3.read();
- switch (var4) {
- case 0:
- case 254:
- case 255:
- var3.unread(var4);
- return new InputStreamReader(var3, "UTF-16");
- case 60:
- var4 = var3.read();
- var2.append('<');
-
- while(var4 > 0 && var4 != 62) {
- var2.append((char)var4);
- var4 = var3.read();
- }
-
- if (var4 > 0) {
- var2.append((char)var4);
- }
-
- String var9 = this.getEncoding(var2.toString());
- if (var9 == null) {
- return new InputStreamReader(var3, "UTF-8");
- } else {
- var2.setLength(0);
-
- try {
- return new InputStreamReader(var3, var9);
- } catch (UnsupportedEncodingException var7) {
- return new InputStreamReader(var3, "UTF-8");
- }
- }
- case 239:
- for(int var5 = 0; var5 < 2; ++var5) {
- var3.read();
- }
-
- return new InputStreamReader(var3, "UTF-8");
- default:
- var2.append((char)var4);
- return new InputStreamReader(var3, "UTF-8");
- }
- }
-
- public StdXMLReader(InputStream var1) throws IOException {
- new PushbackInputStream(var1);
- StringBuffer var3 = new StringBuffer();
- Reader var4 = this.stream2reader(var1, var3);
- this.currentLineReader = new LineNumberReader(var4);
- this.currentPbReader = new PushbackReader(this.currentLineReader, 2);
- this.pbreaders = new Stack();
- this.linereaders = new Stack();
- this.publicIds = new Stack();
- this.systemIds = new Stack();
- this.currentPublicID = "";
-
- try {
- this.currentSystemID = new URL("file:.");
- } catch (MalformedURLException var6) {
- }
-
- this.startNewStream(new StringReader(var3.toString()));
- }
-
- public char read() throws IOException {
- int var1;
- for(var1 = this.currentPbReader.read(); var1 < 0; var1 = this.currentPbReader.read()) {
- if (this.pbreaders.empty()) {
- throw new IOException("Unexpected EOF");
- }
-
- this.currentPbReader.close();
- this.currentPbReader = (PushbackReader)this.pbreaders.pop();
- this.currentLineReader = (LineNumberReader)this.linereaders.pop();
- this.currentSystemID = (URL)this.systemIds.pop();
- this.currentPublicID = (String)this.publicIds.pop();
- }
-
- if (var1 == 13) {
- var1 = this.currentPbReader.read();
- if (var1 != 10 && var1 > 0) {
- this.currentPbReader.unread(var1);
- }
-
- return '\n';
- } else {
- return (char)var1;
- }
- }
-
- public boolean atEOFOfCurrentStream() throws IOException {
- int var1 = this.currentPbReader.read();
- if (var1 < 0) {
- return true;
- } else {
- this.currentPbReader.unread(var1);
- return false;
- }
- }
-
- public boolean atEOF() throws IOException {
- int var1;
- for(var1 = this.currentPbReader.read(); var1 < 0; var1 = this.currentPbReader.read()) {
- if (this.pbreaders.empty()) {
- return true;
- }
-
- this.currentPbReader.close();
- this.currentPbReader = (PushbackReader)this.pbreaders.pop();
- this.currentLineReader = (LineNumberReader)this.linereaders.pop();
- this.currentSystemID = (URL)this.systemIds.pop();
- this.currentPublicID = (String)this.publicIds.pop();
- }
-
- this.currentPbReader.unread(var1);
- return false;
- }
-
- public void unread(char var1) throws IOException {
- this.currentPbReader.unread(var1);
- }
-
- public Reader openStream(String var1, String var2) throws MalformedURLException, FileNotFoundException, IOException {
- URL var3 = new URL(this.currentSystemID, var2);
- StringBuffer var4 = new StringBuffer();
- Reader var5 = this.stream2reader(var3.openStream(), var4);
- if (var4.length() == 0) {
- return var5;
- } else {
- String var6 = var4.toString();
- PushbackReader var7 = new PushbackReader(var5, var6.length());
-
- for(int var8 = var6.length() - 1; var8 >= 0; --var8) {
- var7.unread(var6.charAt(var8));
- }
-
- return var7;
- }
- }
-
- public void startNewStream(Reader var1) {
- this.pbreaders.push(this.currentPbReader);
- this.linereaders.push(this.currentLineReader);
- this.systemIds.push(this.currentSystemID);
- this.publicIds.push(this.currentPublicID);
- this.currentLineReader = new LineNumberReader(var1);
- this.currentPbReader = new PushbackReader(this.currentLineReader, 2);
- }
-
- public int getLineNr() {
- return this.currentLineReader.getLineNumber() + 1;
- }
-
- public void setSystemID(String var1) throws MalformedURLException {
- this.currentSystemID = new URL(this.currentSystemID, var1);
- }
-
- public void setPublicID(String var1) {
- this.currentPublicID = var1;
- }
-
- public String getSystemID() {
- return this.currentSystemID.toString();
- }
-
- public String getPublicID() {
- return this.currentPublicID;
- }
- }
-