mirror of https://github.com/irmen/prog8.git
45 lines
1.8 KiB
Kotlin
45 lines
1.8 KiB
Kotlin
package prog8.code.target
|
|
|
|
import com.github.michaelbull.result.fold
|
|
import prog8.code.core.Encoding
|
|
import prog8.code.core.IStringEncoding
|
|
import prog8.code.core.InternalCompilerException
|
|
import prog8.code.target.encodings.*
|
|
|
|
|
|
object Encoder: IStringEncoding {
|
|
override val defaultEncoding: Encoding = Encoding.ISO
|
|
|
|
override fun encodeString(str: String, encoding: Encoding): List<UByte> {
|
|
val coded = when(encoding) {
|
|
Encoding.PETSCII -> PetsciiEncoding.encodePetscii(str, true)
|
|
Encoding.SCREENCODES -> PetsciiEncoding.encodeScreencode(str, true)
|
|
Encoding.ISO -> IsoEncoding.encode(str)
|
|
Encoding.ATASCII -> AtasciiEncoding.encode(str)
|
|
Encoding.ISO5 -> IsoCyrillicEncoding.encode(str)
|
|
Encoding.ISO16 -> IsoEasternEncoding.encode(str)
|
|
Encoding.CP437 -> Cp437Encoding.encode(str)
|
|
else -> throw InternalCompilerException("unsupported encoding $encoding")
|
|
}
|
|
return coded.fold(
|
|
failure = { throw it },
|
|
success = { it }
|
|
)
|
|
}
|
|
override fun decodeString(bytes: Iterable<UByte>, encoding: Encoding): String {
|
|
val decoded = when(encoding) {
|
|
Encoding.PETSCII -> PetsciiEncoding.decodePetscii(bytes, true)
|
|
Encoding.SCREENCODES -> PetsciiEncoding.decodeScreencode(bytes, true)
|
|
Encoding.ISO -> IsoEncoding.decode(bytes)
|
|
Encoding.ATASCII -> AtasciiEncoding.decode(bytes)
|
|
Encoding.ISO5 -> IsoCyrillicEncoding.decode(bytes)
|
|
Encoding.ISO16 -> IsoEasternEncoding.decode(bytes)
|
|
Encoding.CP437 -> Cp437Encoding.decode(bytes)
|
|
else -> throw InternalCompilerException("unsupported encoding $encoding")
|
|
}
|
|
return decoded.fold(
|
|
failure = { throw it },
|
|
success = { it }
|
|
)
|
|
}
|
|
} |