home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2005 July / PCpro_2005_07.ISO / files / wintools / FullSync / FullSyncInstaller.exe / net / n3 / nanoxml / ContentReader.class (.txt) next >
Encoding:
Java Class File  |  2005-03-08  |  2.2 KB  |  114 lines

  1. package net.n3.nanoxml;
  2.  
  3. import java.io.IOException;
  4. import java.io.Reader;
  5.  
  6. class ContentReader extends Reader {
  7.    private IXMLReader reader;
  8.    private IXMLEntityResolver entityResolver;
  9.    private char escapeChar;
  10.    private char[] delimiter;
  11.    private String charsReadTooMuch;
  12.    private int charsToGo;
  13.    private boolean useLowLevelReader;
  14.    private boolean pastInitialPrefix;
  15.  
  16.    ContentReader(IXMLReader var1, IXMLEntityResolver var2, char var3, char[] var4, boolean var5, String var6) {
  17.       this.delimiter = var4;
  18.       this.charsToGo = this.delimiter.length;
  19.       this.charsReadTooMuch = var6;
  20.       this.useLowLevelReader = var5;
  21.       this.pastInitialPrefix = false;
  22.       this.reader = var1;
  23.       this.entityResolver = var2;
  24.       this.escapeChar = var3;
  25.    }
  26.  
  27.    protected void finalize() throws Throwable {
  28.       this.reader = null;
  29.       this.entityResolver = null;
  30.       this.delimiter = null;
  31.       this.charsReadTooMuch = null;
  32.       super.finalize();
  33.    }
  34.  
  35.    public int read(char[] var1, int var2, int var3) throws IOException {
  36.       int var4 = 0;
  37.       boolean[] var5 = new boolean[]{false};
  38.       if (var2 + var3 > var1.length) {
  39.          var3 = var1.length - var2;
  40.       }
  41.  
  42.       while(this.charsToGo > 0 && var4 < var3) {
  43.          char var6;
  44.          if (this.charsReadTooMuch.length() > 0) {
  45.             var6 = this.charsReadTooMuch.charAt(0);
  46.             this.charsReadTooMuch = this.charsReadTooMuch.substring(1);
  47.          } else {
  48.             this.pastInitialPrefix = true;
  49.  
  50.             try {
  51.                if (this.useLowLevelReader) {
  52.                   var6 = this.reader.read();
  53.                } else {
  54.                   var6 = XMLUtil.read(this.reader, var5, this.escapeChar, this.entityResolver);
  55.                   if (!var5[0] && var6 == '&') {
  56.                      this.reader.startNewStream(XMLUtil.scanEntity(var5, this.reader, this.escapeChar, this.entityResolver));
  57.                      var6 = this.reader.read();
  58.                   }
  59.                }
  60.             } catch (XMLParseException var8) {
  61.                throw new RuntimeException(var8.getMessage());
  62.             }
  63.          }
  64.  
  65.          if (var5[0]) {
  66.             var1[var2 + var4] = var6;
  67.             ++var4;
  68.          } else if (var6 == this.delimiter[this.charsToGo - 1] && this.pastInitialPrefix) {
  69.             --this.charsToGo;
  70.          } else if (this.charsToGo < this.delimiter.length) {
  71.             this.charsReadTooMuch = new String(this.delimiter, this.charsToGo + 1, this.delimiter.length - this.charsToGo) + var6;
  72.             this.charsToGo = this.delimiter.length;
  73.             var1[var2 + var4] = this.delimiter[this.charsToGo - 1];
  74.             ++var4;
  75.          } else {
  76.             var1[var2 + var4] = var6;
  77.             ++var4;
  78.          }
  79.       }
  80.  
  81.       if (var4 == 0) {
  82.          var4 = -1;
  83.       }
  84.  
  85.       return var4;
  86.    }
  87.  
  88.    public void close() throws IOException {
  89.       while(this.charsToGo > 0) {
  90.          char var1;
  91.          if (this.charsReadTooMuch.length() > 0) {
  92.             var1 = this.charsReadTooMuch.charAt(0);
  93.             this.charsReadTooMuch = this.charsReadTooMuch.substring(1);
  94.          } else if (this.useLowLevelReader) {
  95.             var1 = this.reader.read();
  96.          } else {
  97.             try {
  98.                var1 = XMLUtil.read(this.reader, (boolean[])null, this.escapeChar, this.entityResolver);
  99.             } catch (XMLParseException var3) {
  100.                throw new RuntimeException(var3.getMessage());
  101.             }
  102.          }
  103.  
  104.          if (var1 == this.delimiter[this.charsToGo - 1]) {
  105.             --this.charsToGo;
  106.          } else if (this.charsToGo < this.delimiter.length) {
  107.             this.charsReadTooMuch = new String(this.delimiter, this.charsToGo + 1, this.delimiter.length - this.charsToGo) + var1;
  108.             this.charsToGo = this.delimiter.length;
  109.          }
  110.       }
  111.  
  112.    }
  113. }
  114.