Packages

Gleam library to decode Windows-1250 (cp1250) binary data into a native string.

Current section

Files

Jump to
cp1250 src cp1250.gleam
Raw

src/cp1250.gleam

//// This library decodes cp1250 binary data into a native string
//// Based on https://github.com/richard-viney/iso_8859
import gleam/bit_array
import gleam/list
import gleam/string
/// Convert cp1250 binary data to a native string
pub fn decode(bytes: BitArray) -> String {
bits_to_codepoints(bytes, cp1250, [])
|> list.reverse
|> string.from_utf_codepoints
}
fn bits_to_codepoints(
bytes: BitArray,
lut: BitArray,
acc: List(UtfCodepoint),
) -> List(UtfCodepoint) {
case bytes {
<<next_byte, rest:bytes>> -> {
let assert Ok(<<codepoint:16>>) = bit_array.slice(lut, next_byte * 2, 2)
let assert Ok(native_codepoint) = string.utf_codepoint(codepoint)
bits_to_codepoints(rest, lut, [native_codepoint, ..acc])
}
_ -> acc
}
}
const cp1250 = <<
0x0000:16, 0x0001:16, 0x0002:16, 0x0003:16, 0x0004:16, 0x0005:16, 0x0006:16,
0x0007:16, 0x0008:16, 0x0009:16, 0x000A:16, 0x000B:16, 0x000C:16, 0x000D:16,
0x000E:16, 0x000F:16, 0x0010:16, 0x0011:16, 0x0012:16, 0x0013:16, 0x0014:16,
0x0015:16, 0x0016:16, 0x0017:16, 0x0018:16, 0x0019:16, 0x001A:16, 0x001B:16,
0x001C:16, 0x001D:16, 0x001E:16, 0x001F:16, 0x0020:16, 0x0021:16, 0x0022:16,
0x0023:16, 0x0024:16, 0x0025:16, 0x0026:16, 0x0027:16, 0x0028:16, 0x0029:16,
0x002A:16, 0x002B:16, 0x002C:16, 0x002D:16, 0x002E:16, 0x002F:16, 0x0030:16,
0x0031:16, 0x0032:16, 0x0033:16, 0x0034:16, 0x0035:16, 0x0036:16, 0x0037:16,
0x0038:16, 0x0039:16, 0x003A:16, 0x003B:16, 0x003C:16, 0x003D:16, 0x003E:16,
0x003F:16, 0x0040:16, 0x0041:16, 0x0042:16, 0x0043:16, 0x0044:16, 0x0045:16,
0x0046:16, 0x0047:16, 0x0048:16, 0x0049:16, 0x004A:16, 0x004B:16, 0x004C:16,
0x004D:16, 0x004E:16, 0x004F:16, 0x0050:16, 0x0051:16, 0x0052:16, 0x0053:16,
0x0054:16, 0x0055:16, 0x0056:16, 0x0057:16, 0x0058:16, 0x0059:16, 0x005A:16,
0x005B:16, 0x005C:16, 0x005D:16, 0x005E:16, 0x005F:16, 0x0060:16, 0x0061:16,
0x0062:16, 0x0063:16, 0x0064:16, 0x0065:16, 0x0066:16, 0x0067:16, 0x0068:16,
0x0069:16, 0x006A:16, 0x006B:16, 0x006C:16, 0x006D:16, 0x006E:16, 0x006F:16,
0x0070:16, 0x0071:16, 0x0072:16, 0x0073:16, 0x0074:16, 0x0075:16, 0x0076:16,
0x0077:16, 0x0078:16, 0x0079:16, 0x007A:16, 0x007B:16, 0x007C:16, 0x007D:16,
0x007E:16, 0x007F:16, 0x20AC:16, 0x0081:16, 0x201A:16, 0x0083:16, 0x201E:16,
0x2026:16, 0x2020:16, 0x2021:16, 0x0088:16, 0x2030:16, 0x0160:16, 0x2039:16,
0x015A:16, 0x0164:16, 0x017D:16, 0x0179:16, 0x0090:16, 0x2018:16, 0x2019:16,
0x201C:16, 0x201D:16, 0x2022:16, 0x2013:16, 0x2014:16, 0x0098:16, 0x2122:16,
0x0161:16, 0x203A:16, 0x015B:16, 0x0165:16, 0x017E:16, 0x017A:16, 0x00A0:16,
0x02C7:16, 0x02D8:16, 0x0141:16, 0x00A4:16, 0x0104:16, 0x00A6:16, 0x00A7:16,
0x00A8:16, 0x00A9:16, 0x015E:16, 0x00AB:16, 0x00AC:16, 0x00AD:16, 0x00AE:16,
0x017B:16, 0x00B0:16, 0x00B1:16, 0x02DB:16, 0x0142:16, 0x00B4:16, 0x00B5:16,
0x00B6:16, 0x00B7:16, 0x00B8:16, 0x0105:16, 0x015F:16, 0x00BB:16, 0x013D:16,
0x02DD:16, 0x013E:16, 0x017C:16, 0x0154:16, 0x00C1:16, 0x00C2:16, 0x0102:16,
0x00C4:16, 0x0139:16, 0x0106:16, 0x00C7:16, 0x010C:16, 0x00C9:16, 0x0118:16,
0x00CB:16, 0x011A:16, 0x00CD:16, 0x00CE:16, 0x010E:16, 0x0110:16, 0x0143:16,
0x0147:16, 0x00D3:16, 0x00D4:16, 0x0150:16, 0x00D6:16, 0x00D7:16, 0x0158:16,
0x016E:16, 0x00DA:16, 0x0170:16, 0x00DC:16, 0x00DD:16, 0x0162:16, 0x00DF:16,
0x0155:16, 0x00E1:16, 0x00E2:16, 0x0103:16, 0x00E4:16, 0x013A:16, 0x0107:16,
0x00E7:16, 0x010D:16, 0x00E9:16, 0x0119:16, 0x00EB:16, 0x011B:16, 0x00ED:16,
0x00EE:16, 0x010F:16, 0x0111:16, 0x0144:16, 0x0148:16, 0x00F3:16, 0x00F4:16,
0x0151:16, 0x00F6:16, 0x00F7:16, 0x0159:16, 0x016F:16, 0x00FA:16, 0x0171:16,
0x00FC:16, 0x00FD:16, 0x0163:16, 0x02D9:16,
>>