diff options
Diffstat (limited to 'examples/scala-js/javalib/src/main/scala/java/nio/charset')
11 files changed, 0 insertions, 688 deletions
diff --git a/examples/scala-js/javalib/src/main/scala/java/nio/charset/CharacterCodingException.scala b/examples/scala-js/javalib/src/main/scala/java/nio/charset/CharacterCodingException.scala deleted file mode 100644 index 8017348..0000000 --- a/examples/scala-js/javalib/src/main/scala/java/nio/charset/CharacterCodingException.scala +++ /dev/null @@ -1,3 +0,0 @@ -package java.nio.charset - -class CharacterCodingException extends java.io.IOException diff --git a/examples/scala-js/javalib/src/main/scala/java/nio/charset/Charset.scala b/examples/scala-js/javalib/src/main/scala/java/nio/charset/Charset.scala deleted file mode 100644 index 6d1af47..0000000 --- a/examples/scala-js/javalib/src/main/scala/java/nio/charset/Charset.scala +++ /dev/null @@ -1,103 +0,0 @@ -package java.nio.charset - -import java.nio.{ByteBuffer, CharBuffer} - -import scala.scalajs.js - -abstract class Charset protected (canonicalName: String, - aliases: Array[String]) extends AnyRef with Comparable[Charset] { - final def name(): String = canonicalName - - override final def equals(that: Any): Boolean = that match { - case that: Charset => this.name == that.name - case _ => false - } - - override final def toString(): String = name() - - override final def hashCode(): Int = name.## - - override final def compareTo(that: Charset): Int = - name.compareToIgnoreCase(that.name) - - def contains(cs: Charset): Boolean - - def newDecoder(): CharsetDecoder - def newEncoder(): CharsetEncoder - - def canEncode(): Boolean = true - - private lazy val cachedDecoder = { - this.newDecoder() - .onMalformedInput(CodingErrorAction.REPLACE) - .onUnmappableCharacter(CodingErrorAction.REPLACE) - } - - private lazy val cachedEncoder = { - this.newEncoder() - .onMalformedInput(CodingErrorAction.REPLACE) - .onUnmappableCharacter(CodingErrorAction.REPLACE) - } - - final def decode(bb: ByteBuffer): CharBuffer = - cachedDecoder.decode(bb) - - final def encode(cb: CharBuffer): ByteBuffer = - cachedEncoder.encode(cb) - - final def encode(str: String): ByteBuffer = - encode(CharBuffer.wrap(str)) - - def displayName(): String = name -} - -object Charset { - import StandardCharsets._ - - def defaultCharset(): Charset = - UTF_8 - - def forName(charsetName: String): Charset = - CharsetMap.getOrElse(charsetName.toLowerCase, - throw new UnsupportedCharsetException(charsetName)) - - def isSupported(charsetName: String): Boolean = - CharsetMap.contains(charsetName.toLowerCase) - - private lazy val CharsetMap = { - val m = js.Dictionary.empty[Charset] - - // All these lists where obtained by experimentation on the JDK - - for (s <- Seq("iso-8859-1", "iso8859-1", "iso_8859_1", "iso8859_1", - "iso_8859-1", "8859_1", "iso_8859-1:1987", - "latin1", "csisolatin1", "l1", - "ibm-819", "ibm819", "cp819", "819", - "iso-ir-100")) - m(s) = ISO_8859_1 - - for (s <- Seq("us-ascii", "ascii7", "ascii", "csascii", - "default", - "cp367", "ibm367", - "iso646-us", "646", "iso_646.irv:1983", "iso_646.irv:1991", - "ansi_x3.4-1986", "ansi_x3.4-1968", - "iso-ir-6")) - m(s) = US_ASCII - - for (s <- Seq("utf-8", "utf_8", "utf8", "unicode-1-1-utf-8")) - m(s) = UTF_8 - - for (s <- Seq("utf-16be", "utf_16be", "x-utf-16be", - "iso-10646-ucs-2", "unicodebigunmarked")) - m(s) = UTF_16BE - - for (s <- Seq("utf-16le", "utf_16le", "x-utf-16le", - "unicodelittleunmarked")) - m(s) = UTF_16LE - - for (s <- Seq("utf-16", "utf_16", "unicode", "unicodebig")) - m(s) = UTF_16 - - m - } -} diff --git a/examples/scala-js/javalib/src/main/scala/java/nio/charset/CharsetDecoder.scala b/examples/scala-js/javalib/src/main/scala/java/nio/charset/CharsetDecoder.scala deleted file mode 100644 index a3532ba..0000000 --- a/examples/scala-js/javalib/src/main/scala/java/nio/charset/CharsetDecoder.scala +++ /dev/null @@ -1,217 +0,0 @@ -package java.nio.charset - -import scala.annotation.{switch, tailrec} - -import java.nio._ - -abstract class CharsetDecoder protected (cs: Charset, - _averageCharsPerByte: Float, _maxCharsPerByte: Float) { - - import CharsetDecoder._ - - // Config - - private[this] var _replacement: String = "\uFFFD" - private[this] var _malformedInputAction: CodingErrorAction = - CodingErrorAction.REPORT - private[this] var _unmappableCharacterAction: CodingErrorAction = - CodingErrorAction.REPORT - - // Status - - private[this] var status: Int = INIT - - // Methods - - final def charset(): Charset = cs - - final def replacement(): String = _replacement - - final def replaceWith(newReplacement: String): CharsetDecoder = { - if (newReplacement == null || newReplacement == "") - throw new IllegalArgumentException("Invalid replacement: "+newReplacement) - if (newReplacement.length > maxCharsPerByte) - throw new IllegalArgumentException( - "Replacement string cannot be longer than maxCharsPerByte") - _replacement = newReplacement - implReplaceWith(newReplacement) - this - } - - protected def implReplaceWith(newReplacement: String): Unit = () - - def malformedInputAction(): CodingErrorAction = _malformedInputAction - - final def onMalformedInput(newAction: CodingErrorAction): CharsetDecoder = { - if (newAction == null) - throw new IllegalArgumentException("null CodingErrorAction") - _malformedInputAction = newAction - implOnMalformedInput(newAction) - this - } - - protected def implOnMalformedInput(newAction: CodingErrorAction): Unit = () - - def unmappableCharacterAction(): CodingErrorAction = _unmappableCharacterAction - - final def onUnmappableCharacter(newAction: CodingErrorAction): CharsetDecoder = { - if (newAction == null) - throw new IllegalArgumentException("null CodingErrorAction") - _unmappableCharacterAction = newAction - implOnUnmappableCharacter(newAction) - this - } - - protected def implOnUnmappableCharacter(newAction: CodingErrorAction): Unit = () - - final def averageCharsPerByte(): Float = _averageCharsPerByte - final def maxCharsPerByte(): Float = _maxCharsPerByte - - final def decode(in: ByteBuffer, out: CharBuffer, - endOfInput: Boolean): CoderResult = { - - if (status == FLUSHED || (!endOfInput && status == END)) - throw new IllegalStateException - - status = if (endOfInput) END else ONGOING - - @inline - @tailrec - def loop(): CoderResult = { - val result1 = try { - decodeLoop(in, out) - } catch { - case ex: BufferOverflowException => - throw new CoderMalfunctionError(ex) - case ex: BufferUnderflowException => - throw new CoderMalfunctionError(ex) - } - - val result2 = if (result1.isUnderflow) { - val remaining = in.remaining - if (endOfInput && remaining > 0) - CoderResult.malformedForLength(remaining) - else - result1 - } else { - result1 - } - - if (result2.isUnderflow || result2.isOverflow) { - result2 - } else { - val action = - if (result2.isUnmappable) unmappableCharacterAction - else malformedInputAction - - action match { - case CodingErrorAction.REPLACE => - if (out.remaining < replacement.length) { - CoderResult.OVERFLOW - } else { - out.put(replacement) - in.position(in.position + result2.length) - loop() - } - case CodingErrorAction.REPORT => - result2 - case CodingErrorAction.IGNORE => - in.position(in.position + result2.length) - loop() - } - } - } - - loop() - } - - final def flush(out: CharBuffer): CoderResult = { - (status: @switch) match { - case END => - val result = implFlush(out) - if (result.isUnderflow) - status = FLUSHED - result - case FLUSHED => - CoderResult.UNDERFLOW - case _ => - throw new IllegalStateException - } - } - - protected def implFlush(out: CharBuffer): CoderResult = - CoderResult.UNDERFLOW - - final def reset(): CharsetDecoder = { - status = INIT - implReset() - this - } - - protected def implReset(): Unit = () - - protected def decodeLoop(in: ByteBuffer, out: CharBuffer): CoderResult - - final def decode(in: ByteBuffer): CharBuffer = { - def grow(out: CharBuffer): CharBuffer = { - if (out.capacity == 0) { - CharBuffer.allocate(1) - } else { - val result = CharBuffer.allocate(out.capacity*2) - out.flip() - result.put(out) - result - } - } - - @inline - @tailrec - def loopDecode(out: CharBuffer): CharBuffer = { - val result = decode(in, out, endOfInput = true) - if (result.isUnderflow) { - assert(!in.hasRemaining) - out - } else if (result.isOverflow) { - loopDecode(grow(out)) - } else { - result.throwException() - throw new AssertionError("should not get here") - } - } - - @inline - @tailrec - def loopFlush(out: CharBuffer): CharBuffer = { - val result = flush(out) - if (result.isUnderflow) { - out - } else if (result.isOverflow) { - loopFlush(grow(out)) - } else { - result.throwException() - throw new AssertionError("should not get here") - } - } - - reset() - val initLength = (in.remaining.toDouble * averageCharsPerByte).toInt - val out = loopFlush(loopDecode(CharBuffer.allocate(initLength))) - out.flip() - out - } - - def isAutoDetecting(): Boolean = false - - def isCharsetDetected(): Boolean = - throw new UnsupportedOperationException - - def detectedCharset(): Charset = - throw new UnsupportedOperationException -} - -object CharsetDecoder { - private final val INIT = 1 - private final val ONGOING = 2 - private final val END = 3 - private final val FLUSHED = 4 -} diff --git a/examples/scala-js/javalib/src/main/scala/java/nio/charset/CharsetEncoder.scala b/examples/scala-js/javalib/src/main/scala/java/nio/charset/CharsetEncoder.scala deleted file mode 100644 index 37d2296..0000000 --- a/examples/scala-js/javalib/src/main/scala/java/nio/charset/CharsetEncoder.scala +++ /dev/null @@ -1,235 +0,0 @@ -package java.nio.charset - -import scala.annotation.{switch, tailrec} - -import java.nio._ - -abstract class CharsetEncoder protected (cs: Charset, - _averageBytesPerChar: Float, _maxBytesPerChar: Float, - private[this] var _replacement: Array[Byte]) { - - import CharsetEncoder._ - - protected def this(cs: Charset, _averageBytesPerChar: Float, - _maxBytesPerChar: Float) = - this(cs, _averageBytesPerChar, _averageBytesPerChar, Array('?'.toByte)) - - // Config - - private[this] var _malformedInputAction: CodingErrorAction = - CodingErrorAction.REPORT - private[this] var _unmappableCharacterAction: CodingErrorAction = - CodingErrorAction.REPORT - - // Status - - private[this] var status: Int = INIT - - // Methods - - final def charset(): Charset = cs - - final def replacement(): Array[Byte] = _replacement - - final def replaceWith(newReplacement: Array[Byte]): CharsetEncoder = { - if (newReplacement == null || newReplacement.length == 0 || - newReplacement.length > maxBytesPerChar || - !isLegalReplacement(newReplacement)) - throw new IllegalArgumentException - - _replacement = newReplacement - implReplaceWith(newReplacement) - this - } - - protected def implReplaceWith(newReplacement: Array[Byte]): Unit = () - - def isLegalReplacement(repl: Array[Byte]): Boolean = { - val decoder = charset.newDecoder - val replBuf = ByteBuffer.wrap(repl) - - @inline - @tailrec - def loop(outBufSize: Int): Boolean = { - val result = decoder.decode(replBuf, CharBuffer.allocate(outBufSize), true) - if (result.isOverflow) { - loop(outBufSize * 2) - } else { - !replBuf.hasRemaining - } - } - - loop(2) - } - - def malformedInputAction(): CodingErrorAction = _malformedInputAction - - final def onMalformedInput(newAction: CodingErrorAction): CharsetEncoder = { - if (newAction == null) - throw new IllegalArgumentException("null CodingErrorAction") - _malformedInputAction = newAction - implOnMalformedInput(newAction) - this - } - - protected def implOnMalformedInput(newAction: CodingErrorAction): Unit = () - - def unmappableCharacterAction(): CodingErrorAction = _unmappableCharacterAction - - final def onUnmappableCharacter(newAction: CodingErrorAction): CharsetEncoder = { - if (newAction == null) - throw new IllegalArgumentException("null CodingErrorAction") - _unmappableCharacterAction = newAction - implOnUnmappableCharacter(newAction) - this - } - - protected def implOnUnmappableCharacter(newAction: CodingErrorAction): Unit = () - - final def averageBytesPerChar(): Float = _averageBytesPerChar - final def maxBytesPerChar(): Float = _maxBytesPerChar - - final def encode(in: CharBuffer, out: ByteBuffer, - endOfInput: Boolean): CoderResult = { - - if (status == FLUSHED || (!endOfInput && status == END)) - throw new IllegalStateException - - status = if (endOfInput) END else ONGOING - - @inline - @tailrec - def loop(): CoderResult = { - val result1 = try { - encodeLoop(in, out) - } catch { - case ex: BufferOverflowException => - throw new CoderMalfunctionError(ex) - case ex: BufferUnderflowException => - throw new CoderMalfunctionError(ex) - } - - val result2 = if (result1.isUnderflow) { - val remaining = in.remaining - if (endOfInput && remaining > 0) - CoderResult.malformedForLength(remaining) - else - result1 - } else { - result1 - } - - if (result2.isUnderflow || result2.isOverflow) { - result2 - } else { - val action = - if (result2.isUnmappable) unmappableCharacterAction - else malformedInputAction - - action match { - case CodingErrorAction.REPLACE => - if (out.remaining < replacement.length) { - CoderResult.OVERFLOW - } else { - out.put(replacement) - in.position(in.position + result2.length) - loop() - } - case CodingErrorAction.REPORT => - result2 - case CodingErrorAction.IGNORE => - in.position(in.position + result2.length) - loop() - } - } - } - - loop() - } - - final def flush(out: ByteBuffer): CoderResult = { - (status: @switch) match { - case END => - val result = implFlush(out) - if (result.isUnderflow) - status = FLUSHED - result - case FLUSHED => - CoderResult.UNDERFLOW - case _ => - throw new IllegalStateException - } - } - - protected def implFlush(out: ByteBuffer): CoderResult = - CoderResult.UNDERFLOW - - final def reset(): CharsetEncoder = { - status = INIT - implReset() - this - } - - protected def implReset(): Unit = () - - protected def encodeLoop(arg1: CharBuffer, arg2: ByteBuffer): CoderResult - - final def encode(in: CharBuffer): ByteBuffer = { - def grow(out: ByteBuffer): ByteBuffer = { - if (out.capacity == 0) { - ByteBuffer.allocate(1) - } else { - val result = ByteBuffer.allocate(out.capacity*2) - out.flip() - result.put(out) - result - } - } - - if (in.remaining == 0) { - ByteBuffer.allocate(0) - } else { - @inline - @tailrec - def loopEncode(out: ByteBuffer): ByteBuffer = { - val result = encode(in, out, endOfInput = true) - if (result.isUnderflow) { - assert(!in.hasRemaining) - out - } else if (result.isOverflow) { - loopEncode(grow(out)) - } else { - result.throwException() - throw new AssertionError("should not get here") - } - } - - @inline - @tailrec - def loopFlush(out: ByteBuffer): ByteBuffer = { - val result = flush(out) - if (result.isUnderflow) { - out - } else if (result.isOverflow) { - loopFlush(grow(out)) - } else { - result.throwException() - throw new AssertionError("should not get here") - } - } - - reset() - val initLength = (in.remaining * averageBytesPerChar).toInt - val out = loopFlush(loopEncode(ByteBuffer.allocate(initLength))) - out.flip() - out - } - } -} - -object CharsetEncoder { - private final val INIT = 0 - private final val ONGOING = 1 - private final val END = 2 - private final val FLUSHED = 3 -} diff --git a/examples/scala-js/javalib/src/main/scala/java/nio/charset/CoderMalfunctionError.scala b/examples/scala-js/javalib/src/main/scala/java/nio/charset/CoderMalfunctionError.scala deleted file mode 100644 index 33174f3..0000000 --- a/examples/scala-js/javalib/src/main/scala/java/nio/charset/CoderMalfunctionError.scala +++ /dev/null @@ -1,3 +0,0 @@ -package java.nio.charset - -class CoderMalfunctionError(cause: Exception) extends Error(cause) diff --git a/examples/scala-js/javalib/src/main/scala/java/nio/charset/CoderResult.scala b/examples/scala-js/javalib/src/main/scala/java/nio/charset/CoderResult.scala deleted file mode 100644 index fdc63cc..0000000 --- a/examples/scala-js/javalib/src/main/scala/java/nio/charset/CoderResult.scala +++ /dev/null @@ -1,78 +0,0 @@ -package java.nio.charset - -import scala.annotation.switch - -import scala.collection.mutable - -import java.nio._ - -class CoderResult private (kind: Int, _length: Int) { - import CoderResult._ - - @inline def isUnderflow(): Boolean = kind == Underflow - @inline def isOverflow(): Boolean = kind == Overflow - @inline def isMalformed(): Boolean = kind == Malformed - @inline def isUnmappable(): Boolean = kind == Unmappable - - @inline def isError(): Boolean = isMalformed || isUnmappable - - @inline def length(): Int = { - val l = _length - if (l < 0) - throw new UnsupportedOperationException - l - } - - def throwException(): Unit = (kind: @switch) match { - case Overflow => throw new BufferOverflowException - case Underflow => throw new BufferUnderflowException - case Malformed => throw new MalformedInputException(_length) - case Unmappable => throw new UnmappableCharacterException(_length) - } -} - -object CoderResult { - private final val Underflow = 0 - private final val Overflow = 1 - private final val Malformed = 2 - private final val Unmappable = 3 - - val OVERFLOW: CoderResult = new CoderResult(Overflow, -1) - val UNDERFLOW: CoderResult = new CoderResult(Underflow, -1) - - private val Malformed1 = new CoderResult(Malformed, 1) - private val Malformed2 = new CoderResult(Malformed, 2) - private val Malformed3 = new CoderResult(Malformed, 3) - private val Malformed4 = new CoderResult(Malformed, 4) - - private val uniqueMalformed = mutable.Map.empty[Int, CoderResult] - - private val Unmappable1 = new CoderResult(Unmappable, 1) - private val Unmappable2 = new CoderResult(Unmappable, 2) - private val Unmappable3 = new CoderResult(Unmappable, 3) - private val Unmappable4 = new CoderResult(Unmappable, 4) - - private val uniqueUnmappable = mutable.Map.empty[Int, CoderResult] - - @inline def malformedForLength(length: Int): CoderResult = (length: @switch) match { - case 1 => Malformed1 - case 2 => Malformed2 - case 3 => Malformed3 - case 4 => Malformed4 - case _ => malformedForLengthImpl(length) - } - - private def malformedForLengthImpl(length: Int): CoderResult = - uniqueMalformed.getOrElseUpdate(length, new CoderResult(Malformed, length)) - - @inline def unmappableForLength(length: Int): CoderResult = (length: @switch) match { - case 1 => Unmappable1 - case 2 => Unmappable2 - case 3 => Unmappable3 - case 4 => Unmappable4 - case _ => unmappableForLengthImpl(length) - } - - private def unmappableForLengthImpl(length: Int): CoderResult = - uniqueUnmappable.getOrElseUpdate(length, new CoderResult(Unmappable, length)) -} diff --git a/examples/scala-js/javalib/src/main/scala/java/nio/charset/CodingErrorAction.scala b/examples/scala-js/javalib/src/main/scala/java/nio/charset/CodingErrorAction.scala deleted file mode 100644 index 63b48bb..0000000 --- a/examples/scala-js/javalib/src/main/scala/java/nio/charset/CodingErrorAction.scala +++ /dev/null @@ -1,11 +0,0 @@ -package java.nio.charset - -class CodingErrorAction private (name: String) { - override def toString(): String = name -} - -object CodingErrorAction { - val IGNORE = new CodingErrorAction("IGNORE") - val REPLACE = new CodingErrorAction("REPLACE") - val REPORT = new CodingErrorAction("REPORT") -} diff --git a/examples/scala-js/javalib/src/main/scala/java/nio/charset/MalformedInputException.scala b/examples/scala-js/javalib/src/main/scala/java/nio/charset/MalformedInputException.scala deleted file mode 100644 index 4c91c1b..0000000 --- a/examples/scala-js/javalib/src/main/scala/java/nio/charset/MalformedInputException.scala +++ /dev/null @@ -1,9 +0,0 @@ -package java.nio.charset - -class MalformedInputException( - inputLength: Int) extends CharacterCodingException { - def getInputLength(): Int = inputLength - - override def getMessage(): String = - "Input length = " + inputLength -} diff --git a/examples/scala-js/javalib/src/main/scala/java/nio/charset/StandardCharsets.scala b/examples/scala-js/javalib/src/main/scala/java/nio/charset/StandardCharsets.scala deleted file mode 100644 index 38f3f98..0000000 --- a/examples/scala-js/javalib/src/main/scala/java/nio/charset/StandardCharsets.scala +++ /dev/null @@ -1,14 +0,0 @@ -package java.nio.charset - -final class StandardCharsets private {} - -object StandardCharsets { - import scala.scalajs.niocharset.{StandardCharsets => SC} - - def ISO_8859_1: Charset = SC.ISO_8859_1 - def US_ASCII: Charset = SC.US_ASCII - def UTF_8: Charset = SC.UTF_8 - def UTF_16BE: Charset = SC.UTF_16BE - def UTF_16LE: Charset = SC.UTF_16LE - def UTF_16: Charset = SC.UTF_16 -} diff --git a/examples/scala-js/javalib/src/main/scala/java/nio/charset/UnmappableCharacterException.scala b/examples/scala-js/javalib/src/main/scala/java/nio/charset/UnmappableCharacterException.scala deleted file mode 100644 index 5748f70..0000000 --- a/examples/scala-js/javalib/src/main/scala/java/nio/charset/UnmappableCharacterException.scala +++ /dev/null @@ -1,9 +0,0 @@ -package java.nio.charset - -class UnmappableCharacterException( - inputLength: Int) extends CharacterCodingException { - def getInputLength(): Int = inputLength - - override def getMessage(): String = - "Input length = " + inputLength -} diff --git a/examples/scala-js/javalib/src/main/scala/java/nio/charset/UnsupportedCharsetException.scala b/examples/scala-js/javalib/src/main/scala/java/nio/charset/UnsupportedCharsetException.scala deleted file mode 100644 index 97a7a4e..0000000 --- a/examples/scala-js/javalib/src/main/scala/java/nio/charset/UnsupportedCharsetException.scala +++ /dev/null @@ -1,6 +0,0 @@ -package java.nio.charset - -class UnsupportedCharsetException( - charsetName: String) extends IllegalArgumentException(charsetName) { - def getCharsetName(): String = charsetName -} |