diff options
author | david_williams | 2005-07-09 05:21:44 +0000 |
---|---|---|
committer | david_williams | 2005-07-09 05:21:44 +0000 |
commit | 89b4527534f220c552e9200bc64a1f1bbf1951f3 (patch) | |
tree | f5ff13359bcc94a9fd7da0585ce0db5d2e6b7ffc /bundles/org.eclipse.wst.dtd.core/src/org | |
parent | 6c322b9eaf905f7dd5d15a2a184edbf2749fde87 (diff) | |
download | webtools.sourceediting-89b4527534f220c552e9200bc64a1f1bbf1951f3.tar.gz webtools.sourceediting-89b4527534f220c552e9200bc64a1f1bbf1951f3.tar.xz webtools.sourceediting-89b4527534f220c552e9200bc64a1f1bbf1951f3.zip |
[102915] Need manifest directive for our content Describers
Diffstat (limited to 'bundles/org.eclipse.wst.dtd.core/src/org')
2 files changed, 109 insertions, 1 deletions
diff --git a/bundles/org.eclipse.wst.dtd.core/src/org/eclipse/wst/dtd/core/internal/encoding/AbstractResourceEncodingDetector.java b/bundles/org.eclipse.wst.dtd.core/src/org/eclipse/wst/dtd/core/internal/encoding/AbstractResourceEncodingDetector.java index e9c89afb0c..07937e3ff2 100644 --- a/bundles/org.eclipse.wst.dtd.core/src/org/eclipse/wst/dtd/core/internal/encoding/AbstractResourceEncodingDetector.java +++ b/bundles/org.eclipse.wst.dtd.core/src/org/eclipse/wst/dtd/core/internal/encoding/AbstractResourceEncodingDetector.java @@ -26,7 +26,6 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.wst.sse.core.internal.encoding.CodedIO; import org.eclipse.wst.sse.core.internal.encoding.EncodingMemento; import org.eclipse.wst.sse.core.internal.encoding.IResourceCharsetDetector; -import org.eclipse.wst.sse.core.internal.encoding.util.ByteReader; public abstract class AbstractResourceEncodingDetector implements IResourceCharsetDetector { diff --git a/bundles/org.eclipse.wst.dtd.core/src/org/eclipse/wst/dtd/core/internal/encoding/ByteReader.java b/bundles/org.eclipse.wst.dtd.core/src/org/eclipse/wst/dtd/core/internal/encoding/ByteReader.java new file mode 100644 index 0000000000..1550a62340 --- /dev/null +++ b/bundles/org.eclipse.wst.dtd.core/src/org/eclipse/wst/dtd/core/internal/encoding/ByteReader.java @@ -0,0 +1,109 @@ +/******************************************************************************* + * Copyright (c) 2001, 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Jens Lukowski/Innoopract - initial renaming/restructuring + * + *******************************************************************************/ +package org.eclipse.wst.dtd.core.internal.encoding; + +import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; + +import org.eclipse.wst.sse.core.internal.encoding.CodedIO; + +/** + * This is an "adapter" class, simply to get in input stream to act like a + * reader. We could not use InputStreamReader directly because its internal + * buffers are not controllable, and it sometimes pulls too much out of input + * stream (even when it wasn't needed for our purposes). + * + * The use of this class is highly specialized and by not means meant to be + * general purpose. Its use is restricted to those cases where the input + * stream can be regarded as ascii just long enough to determine what the real + * encoding should be. + */ + +public class ByteReader extends Reader { + + + public static final int DEFAULT_BUFFER_SIZE = CodedIO.MAX_BUF_SIZE; + + protected byte[] fBuffer; + + protected InputStream fInputStream; + + protected ByteReader() { + super(); + } + + public ByteReader(InputStream inputStream) { + this(inputStream, DEFAULT_BUFFER_SIZE); + if (!inputStream.markSupported()) { + throw new IllegalArgumentException("ByteReader is required to have a resettable stream"); //$NON-NLS-1$ + } + } + + public ByteReader(InputStream inputStream, int size) { + this.fInputStream = inputStream; + if (!inputStream.markSupported()) { + throw new IllegalArgumentException("ByteReader is required to have a resettable stream"); //$NON-NLS-1$ + } + this.fBuffer = new byte[size]; + + } + + public void close() throws IOException { + this.fInputStream.close(); + } + + public void mark(int readAheadLimit) { + this.fInputStream.mark(readAheadLimit); + } + + public boolean markSupported() { + return true; + } + + public int read() throws IOException { + int b0 = this.fInputStream.read(); + return (b0 & 0x00FF); + } + + public int read(char ch[], int offset, int length) throws IOException { + if (length > this.fBuffer.length) { + length = this.fBuffer.length; + } + + int count = this.fInputStream.read(this.fBuffer, 0, length); + + for (int i = 0; i < count; i++) { + int b0 = this.fBuffer[i]; + // the 0x00FF is to "lose" the negative bits filled in the byte to + // int conversion + // (and which would be there if cast directly from byte to char). + char c0 = (char) (b0 & 0x00FF); + ch[offset + i] = c0; + } + return count; + } + + public boolean ready() throws IOException { + return this.fInputStream.available() > 0; + } + + public void reset() throws IOException { + this.fInputStream.reset(); + } + + public long skip(long n) throws IOException { + return this.fInputStream.skip(n); + } + +} |