home *** CD-ROM | disk | FTP | other *** search
- package com.netscape.javascript;
-
- import java.io.IOException;
- import java.io.Reader;
-
- final class LineBuffer {
- static final int BUFLEN = 256;
- // $FF: renamed from: in java.io.Reader
- private Reader field_0;
- private char[] otherBuffer = null;
- private char[] buffer = null;
- private int offset = 0;
- private int end = 0;
- private int otherEnd;
- private int lineno;
- private int lineStart = 0;
- private int otherStart = 0;
- private int prevStart = 0;
- private boolean lastWasCR = false;
- private boolean hitEOF = false;
- private int stringStart = -1;
- private StringBuffer stringSoFar = null;
-
- String getLine() {
- StringBuffer var1 = new StringBuffer();
- int var2 = this.lineStart;
- if (var2 >= this.offset) {
- if (this.otherStart < this.otherEnd) {
- var1.append(this.otherBuffer, this.otherStart, this.otherEnd - this.otherStart);
- }
-
- var2 = 0;
- }
-
- var1.append(this.buffer, var2, this.offset - var2);
- int var3 = this.offset;
-
- while(true) {
- if (var3 == this.buffer.length) {
- char[] var4 = new char[this.buffer.length * 2];
- System.arraycopy(this.buffer, 0, var4, 0, this.buffer.length);
- this.buffer = var4;
- int var5 = 0;
-
- try {
- var5 = this.field_0.read(this.buffer, this.end, this.buffer.length - this.end);
- } catch (IOException var6) {
- }
-
- if (var5 < 0) {
- break;
- }
-
- this.end += var5;
- }
-
- if (this.buffer[var3] == '\r' || this.buffer[var3] == '\n') {
- break;
- }
-
- ++var3;
- }
-
- var1.append(this.buffer, this.offset, var3 - this.offset);
- return var1.toString();
- }
-
- void unread() {
- if (this.offset != 0) {
- this.offset += -1;
- if ((this.buffer[this.offset] & '\ufff0') == 0 && (this.buffer[this.offset] == '\r' || this.buffer[this.offset] == '\n')) {
- this.lineStart = this.prevStart;
- this.lineno += -1;
- }
-
- }
- }
-
- LineBuffer(Reader var1, int var2) {
- this.field_0 = var1;
- this.lineno = var2;
- }
-
- int read() throws IOException {
- if (this.end == this.offset && !this.fill()) {
- return -1;
- } else if ((this.buffer[this.offset] & '\ufff0') == 0) {
- if (this.buffer[this.offset] == '\r') {
- if (this.offset + 1 < this.end) {
- if (this.buffer[this.offset + 1] == '\n') {
- ++this.offset;
- }
- } else {
- this.lastWasCR = true;
- }
- } else if (this.buffer[this.offset] != '\n') {
- return this.buffer[this.offset++];
- }
-
- ++this.offset;
- this.prevStart = this.lineStart;
- this.lineStart = this.offset;
- ++this.lineno;
- return 10;
- } else {
- return this.buffer[this.offset++];
- }
- }
-
- int peek() throws IOException {
- if (this.end == this.offset && !this.fill()) {
- return -1;
- } else {
- return this.buffer[this.offset] == '\r' ? 10 : this.buffer[this.offset];
- }
- }
-
- void startString() {
- if (this.offset == 0) {
- if (this.buffer != null && this.otherBuffer != null) {
- this.stringSoFar = new StringBuffer();
- this.stringSoFar.append(this.otherBuffer, this.otherEnd - 1, 1);
- this.stringStart = -1;
- } else {
- throw new RuntimeException("startString called before any read");
- }
- } else {
- this.stringSoFar = null;
- this.stringStart = this.offset - 1;
- }
- }
-
- String getString() {
- if (this.buffer == null) {
- throw new RuntimeException("very confused");
- } else {
- int var2 = this.offset > 0 && this.buffer[this.offset] == '\n' && this.buffer[this.offset - 1] == '\r' ? 1 : 0;
- String var1;
- if (this.stringStart != -1) {
- if (this.stringSoFar != null) {
- throw new RuntimeException("getString called inconsistently");
- }
-
- var1 = new String(this.buffer, this.stringStart, this.offset - this.stringStart - var2);
- } else {
- if (this.stringSoFar == null) {
- throw new RuntimeException("getString called at a funny time");
- }
-
- var1 = this.stringSoFar.append(this.buffer, 0, this.offset - var2).toString();
- }
-
- this.stringStart = -1;
- this.stringSoFar = null;
- return var1;
- }
- }
-
- boolean fill() throws IOException {
- if (this.end - this.offset != 0) {
- throw new IOException("fill of non-empty buffer");
- } else {
- int var1 = this.offset > 0 && this.lastWasCR ? 1 : 0;
- if (this.stringStart != -1) {
- if (this.stringSoFar != null || this.buffer == null) {
- throw new RuntimeException("as usual, I'm confused");
- }
-
- this.stringSoFar = new StringBuffer();
- this.stringSoFar.append(this.buffer, this.stringStart, this.end - this.stringStart - var1);
- this.stringStart = -1;
- } else if (this.stringSoFar != null) {
- this.stringSoFar.append(this.buffer, 0, this.end - var1);
- }
-
- char[] var2 = this.buffer;
- this.buffer = this.otherBuffer;
- this.otherBuffer = var2;
- if (this.buffer == null) {
- this.buffer = new char[256];
- }
-
- this.otherStart = this.lineStart;
- this.otherEnd = this.end;
- this.prevStart = this.lineStart = this.otherBuffer == null ? 0 : this.buffer.length + 1;
- this.offset = 0;
- this.end = this.field_0.read(this.buffer, 0, this.buffer.length);
- if (this.end < 0) {
- this.end = 0;
- this.hitEOF = true;
- return false;
- } else {
- if (this.lastWasCR) {
- if (this.buffer[0] == '\n') {
- ++this.offset;
- if (this.end == 1) {
- return this.fill();
- }
- }
-
- this.lineStart = this.offset;
- this.lastWasCR = false;
- }
-
- return true;
- }
- }
- }
-
- boolean eof() {
- return this.hitEOF;
- }
-
- boolean match(char var1) throws IOException {
- if (this.end == this.offset && !this.fill()) {
- return false;
- } else if (this.buffer[this.offset] == var1) {
- ++this.offset;
- return true;
- } else {
- return false;
- }
- }
-
- int getLineno() {
- return this.lineno;
- }
-
- int getOffset() {
- return this.lineStart >= this.offset ? this.offset + (this.otherEnd - this.otherStart) : this.offset - this.lineStart;
- }
- }
-