module Data.TI85.Encoding (
tiDecode
) where
import Data.Word
import Data.Array (Array, listArray, (!))
import Data.ByteString (ByteString)
import qualified Data.ByteString as BS
import Data.Text (Text)
import qualified Data.Text as T
tiCodePage :: Array Word8 Text
tiCodePage :: Array Word8 Text
tiCodePage = (Word8, Word8) -> [Text] -> Array Word8 Text
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Word8
0x00,Word8
0xff) [
Text
"■",Text
"b",Text
"o",Text
"d",Text
"h",Text
"▸",Text
"⬆",Text
"⬇",Text
"∫",Text
"⨉",Text
"A",Text
"B",Text
"C",Text
"D",Text
"E",Text
"F",
Text
"√",Text
"⁻¹",Text
"²",Text
"∠",Text
"°",Text
"ʳ",Text
"ᵀ",Text
"≤",Text
"≠",Text
"≥",Text
"⁻",Text
"ᴇ",Text
"→",Text
"₁₀",Text
"↑",Text
"↓",
Text
" ",Text
"!",Text
"\"",Text
"#",Text
"$",Text
"%",Text
"&",Text
"'",Text
"(",Text
")",Text
"*",Text
"+",Text
",",Text
"-",Text
".",Text
"/",
Text
"0",Text
"1",Text
"2",Text
"3",Text
"4",Text
"5",Text
"6",Text
"7",Text
"8",Text
"9",Text
":",Text
";",Text
"<",Text
"=",Text
">",Text
"?",
Text
"@",Text
"A",Text
"B",Text
"C",Text
"D",Text
"E",Text
"F",Text
"G",Text
"H",Text
"I",Text
"J",Text
"K",Text
"L",Text
"M",Text
"N",Text
"O",
Text
"P",Text
"Q",Text
"R",Text
"S",Text
"T",Text
"U",Text
"V",Text
"W",Text
"X",Text
"Y",Text
"Z",Text
"[",Text
"\\",Text
"]",Text
"^",Text
"_",
Text
"`",Text
"a",Text
"b",Text
"c",Text
"d",Text
"e",Text
"f",Text
"g",Text
"h",Text
"i",Text
"j",Text
"k",Text
"l",Text
"m",Text
"n",Text
"o",
Text
"p",Text
"q",Text
"r",Text
"s",Text
"t",Text
"u",Text
"v",Text
"w",Text
"x",Text
"y",Text
"z",Text
"{",Text
"|",Text
"}",Text
"~",Text
"=",
Text
"₀",Text
"₁",Text
"₂",Text
"₃",Text
"₄",Text
"₅",Text
"₆",Text
"₇",Text
"₈",Text
"₉",Text
"Á",Text
"À",Text
"Â",Text
"Ä",Text
"á",Text
"à",
Text
"â",Text
"ä",Text
"É",Text
"È",Text
"Ê",Text
"Ë",Text
"é",Text
"è",Text
"ê",Text
"ë",Text
"Í",Text
"Ì",Text
"Î",Text
"Ï",Text
"í",Text
"ì",
Text
"î",Text
"ï",Text
"Ó",Text
"Ò",Text
"Ô",Text
"Ö",Text
"ó",Text
"ò",Text
"ô",Text
"ö",Text
"Ú",Text
"Ù",Text
"Û",Text
"Ü",Text
"ú",Text
"ù",
Text
"û",Text
"ü",Text
"Ç",Text
"ç",Text
"Ñ",Text
"ñ",Text
"´",Text
"`",Text
"¨",Text
"¿",Text
"¡",Text
"α",Text
"β",Text
"γ",Text
"Δ",Text
"δ",
Text
"ε",Text
"θ",Text
"λ",Text
"μ",Text
"π",Text
"ρ",Text
"Σ",Text
"σ",Text
"τ",Text
"φ",Text
"Ω",Text
"x̅",Text
"y̅",Text
"ˣ",Text
"…",Text
"◂",
Text
"■",Text
"≀",Text
"-",Text
"²",Text
"°",Text
"³",Text
"\n",Text
"➡",Text
"╲",Text
"╲",Text
"◥",Text
"◣",Text
"⊸",Text
"∘",Text
"⋱",Text
"█",
Text
"⇧",Text
"A",Text
"a",Text
"_",Text
"↥",Text
"A̲",Text
"a̲",Text
"▩",Text
"▫",Text
"₊",Text
".",Text
"⁴",Text
"=",Text
"■",Text
"■",Text
"■",
Text
"■",Text
"■",Text
"■",Text
"■",Text
"■",Text
"■",Text
"■",Text
"■",Text
"■",Text
"■",Text
"■",Text
"■",Text
"■",Text
"■",Text
"■",Text
"■"]
tiDecode :: ByteString -> Text
tiDecode :: ByteString -> Text
tiDecode = [Text] -> Text
T.concat ([Text] -> Text) -> (ByteString -> [Text]) -> ByteString -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Word8 -> Text) -> [Word8] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map (Array Word8 Text
tiCodePageArray Word8 Text -> Word8 -> Text
forall i e. Ix i => Array i e -> i -> e
!) ([Word8] -> [Text])
-> (ByteString -> [Word8]) -> ByteString -> [Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> [Word8]
BS.unpack