363 lines
10 KiB
Python
363 lines
10 KiB
Python
|
import enum
|
|||
|
import string
|
|||
|
import warnings
|
|||
|
|
|||
|
|
|||
|
class DefaultEnum(enum.Enum):
|
|||
|
@staticmethod
|
|||
|
def default():
|
|||
|
raise NotImplementedError
|
|||
|
|
|||
|
|
|||
|
class FontType(DefaultEnum):
|
|||
|
Font5x6Short = "q"
|
|||
|
Font5x11ShortAndWide = "r"
|
|||
|
Font7x6Default = "s"
|
|||
|
Font7x11Wide = "t"
|
|||
|
Font7x9 = "u"
|
|||
|
Font7x17ExtraWide = "v"
|
|||
|
FontSmallFont = "w"
|
|||
|
|
|||
|
def __str__(self):
|
|||
|
return f"\\{self.value}"
|
|||
|
|
|||
|
@staticmethod
|
|||
|
def default():
|
|||
|
return FontType.Font7x6Default
|
|||
|
|
|||
|
|
|||
|
class Brightness(DefaultEnum):
|
|||
|
Normal = "a"
|
|||
|
Bright = "b"
|
|||
|
|
|||
|
def __str__(self):
|
|||
|
return f"\\{self.value}"
|
|||
|
|
|||
|
@staticmethod
|
|||
|
def default():
|
|||
|
return Brightness.Bright
|
|||
|
|
|||
|
|
|||
|
class Transition(DefaultEnum):
|
|||
|
Cyclic = "A"
|
|||
|
Immediate = "B"
|
|||
|
OpenFromRight = "C"
|
|||
|
OpenFromLeft = "D"
|
|||
|
OpenFromCenter = "E"
|
|||
|
OpenToCenter = "F"
|
|||
|
CoverFromCenter = "G"
|
|||
|
CoverFromRight = "H"
|
|||
|
CoverFromLeft = "I"
|
|||
|
CoverToCenter = "J"
|
|||
|
ScrollUp = "K"
|
|||
|
ScrollDown = "L"
|
|||
|
InterlaceToCenter = "M"
|
|||
|
InterlaceCover = "N"
|
|||
|
CoverUp = "O"
|
|||
|
CoverDown = "P"
|
|||
|
ScanLine = "Q"
|
|||
|
Explode = "R"
|
|||
|
PacMan = "S"
|
|||
|
FallAndStack = "T"
|
|||
|
Shoot = "U"
|
|||
|
Flash = "V"
|
|||
|
Random = "W"
|
|||
|
SlideIn = "X"
|
|||
|
|
|||
|
def __str__(self):
|
|||
|
return self.value
|
|||
|
|
|||
|
@staticmethod
|
|||
|
def default():
|
|||
|
return Transition.Cyclic
|
|||
|
|
|||
|
|
|||
|
# macros are literal characters prefixed by ^
|
|||
|
class Macro(enum.Enum):
|
|||
|
CurrentTime12hWithoutAmPm = "D"
|
|||
|
CurrentTime12hWithAmPm = "E"
|
|||
|
CurrentTime24h = "F"
|
|||
|
CurrentDateMmDdYyyy = "A"
|
|||
|
CurrentDateYyyy_Mm_Dd = "B"
|
|||
|
CurrentDateMm_Dd_Yyyy = "C"
|
|||
|
CurrentDateDd_Mm_Yyyy = "a"
|
|||
|
Beep1 = "q"
|
|||
|
Beep2 = "r"
|
|||
|
Beep3 = "s"
|
|||
|
Temperature = "H"
|
|||
|
|
|||
|
def __str__(self):
|
|||
|
return f"^{self.value}"
|
|||
|
|
|||
|
|
|||
|
# symbols should be inserted as string representations of their numeric value prefixed by ^
|
|||
|
class Symbol(enum.Enum):
|
|||
|
Sun = 66
|
|||
|
CloudOrWind = 67
|
|||
|
UmbrellaRaining = 68
|
|||
|
WallClock = 69
|
|||
|
Telephone = 70
|
|||
|
Glasses = 71
|
|||
|
Faucet = 72
|
|||
|
RocketOrSyringeOrSo = 73
|
|||
|
WhatTheHell = 74
|
|||
|
Key = 75
|
|||
|
Shirt = 76
|
|||
|
Helicopter = 77
|
|||
|
Car = 78
|
|||
|
Tank = 79
|
|||
|
House = 80
|
|||
|
Teapot = 81
|
|||
|
Trees = 82
|
|||
|
Duck = 83
|
|||
|
Scooter = 84
|
|||
|
Bicycle = 85
|
|||
|
Crown = 86
|
|||
|
AppleOrSo = 87
|
|||
|
ArrowRight = 88
|
|||
|
ArrowLeft = 89
|
|||
|
ArrowDownLeft = 90
|
|||
|
ArrowUpLeft = 91
|
|||
|
Cup = 92
|
|||
|
Chair = 93
|
|||
|
HighHeel = 94
|
|||
|
PrizeCup = 95
|
|||
|
|
|||
|
def __str__(self):
|
|||
|
return f"^{self.value}"
|
|||
|
|
|||
|
|
|||
|
# cartoons are represented as these characters prefixed by ^
|
|||
|
class Cartoon(enum.Enum):
|
|||
|
MerryXMas = "i"
|
|||
|
HappyNewYear = "j"
|
|||
|
FourthOfJuly = "k"
|
|||
|
HappyEaster = "l"
|
|||
|
HappyHalloween = "m"
|
|||
|
DontDrinkAndDrive = "n"
|
|||
|
NoSmoking = "o"
|
|||
|
Welcome = "p"
|
|||
|
|
|||
|
def __str__(self):
|
|||
|
return f"^{self.value}"
|
|||
|
|
|||
|
|
|||
|
# the descriptions originate from the UTF-16 specification, https://www.ssec.wisc.edu/~tomw/java/unicode.html
|
|||
|
# the extended charset starts where ASCII ends enum
|
|||
|
class ExtendedChar(enum.Enum):
|
|||
|
# Ç
|
|||
|
LatinCapitalLetterCWithCedilla = 0x80
|
|||
|
# ü
|
|||
|
LatinSmallLetterUWithDiaeresis = 0x81
|
|||
|
# é
|
|||
|
LatinSmallLetterEWithAcute = 0x82
|
|||
|
# â
|
|||
|
LatinSmallLetterAWithCircumflex = 0x83
|
|||
|
# ä
|
|||
|
LatinSmallLetterAWithDiaeresis = 0x84
|
|||
|
# á
|
|||
|
LatinSmallLetterAWithGrave = 0x85
|
|||
|
# å
|
|||
|
LatinSmallLetterAWithRingAbove = 0x86
|
|||
|
# ç
|
|||
|
LatinSmallLetterCWithCedilla = 0x87
|
|||
|
# ê
|
|||
|
LatinSmallLetterEWithCircumflex = 0x88
|
|||
|
# ë
|
|||
|
LatinSmallLetterEWithDiaeresis = 0x89
|
|||
|
# è
|
|||
|
LatinSmallLetterEWithGrave = 0x8A
|
|||
|
# Ï
|
|||
|
LatinCapitalLetterIWithDiaeresis = 0x8B
|
|||
|
# Î
|
|||
|
LatinCapitalLetterIWithCircumflex = 0x8C
|
|||
|
# Ì
|
|||
|
LatinCapitalLetterIWithGrave = 0x8D
|
|||
|
# Ä
|
|||
|
LatinCapitalLetterAWithDiaeresis = 0x8F
|
|||
|
# Å
|
|||
|
LatinCapitalLetterAWithRingAbove = 0x8F
|
|||
|
# É
|
|||
|
LatinCapitalLetterEWithAcute = 0x90
|
|||
|
# æ
|
|||
|
LatinSmallLetterAe = 0x91
|
|||
|
# Æ
|
|||
|
LatinCapitalLetterAe = 0x92
|
|||
|
# ô
|
|||
|
LatinSmallLetterOWithCircumflex = 0x93
|
|||
|
# ö
|
|||
|
LatinSmallLetterOWithDiaeresis = 0x94
|
|||
|
# ò
|
|||
|
LatinSmallLetterOWithGrave = 0x95
|
|||
|
# û
|
|||
|
LatinSmallLetterUWithCircumflex = 0x96
|
|||
|
# ù
|
|||
|
LatinSmallLetterUWithGrave = 0x97
|
|||
|
# ÿ
|
|||
|
LatinSmallLetterYWithDiaeresis = 0x98
|
|||
|
# Ö
|
|||
|
LatinCapitalLLetterOWithDiaeresis = 0x99
|
|||
|
# Ü
|
|||
|
LatinCapitalLetterUWithDiaeresis = 0x9A
|
|||
|
# ¢
|
|||
|
CentSign = 0x9B
|
|||
|
# £
|
|||
|
PoundSign = 0x9C
|
|||
|
# ¥
|
|||
|
YenSign = 0x9D
|
|||
|
# urm...
|
|||
|
UnknownPCurrencySign = 0x9E
|
|||
|
# ƒ
|
|||
|
LatinSmallLetterFWithHook = 0x9F
|
|||
|
# á
|
|||
|
LatinSmallLetterAWithAcute = 0xA0
|
|||
|
# Í
|
|||
|
LatinCapitalLetterIWithAcute = 0xA1
|
|||
|
# Ó
|
|||
|
LatinCapitalLetterOWithAcute = 0xA2
|
|||
|
# ú
|
|||
|
LatinSmallLetterUWithAcute = 0xA3
|
|||
|
# ñ
|
|||
|
LatinSmallLetterNWithTilde = 0xA4
|
|||
|
# Ñ
|
|||
|
LatinCapitalLetterNWithTilde = 0xA5
|
|||
|
# a̱
|
|||
|
LatinSmallLetterAWithMacronBelow = 0xA6
|
|||
|
# couldn't find that one in the UTF-16 table
|
|||
|
LatinSmallLetterOWithMacronBelow = 0xA7
|
|||
|
# ¿
|
|||
|
InvertedQuestionMark = 0xA8
|
|||
|
# you can probably imagine what it'll look like
|
|||
|
LatinCapitalLetterZWithRingAbove = 0xA9
|
|||
|
# Ź
|
|||
|
LatinCapitalLetterZWithAcute = 0xAA
|
|||
|
# ń
|
|||
|
LatinSmallLetterNWithAcute = 0xAB
|
|||
|
# some weird L with a diagonal line
|
|||
|
AnotherWeirdSign = 0xAC
|
|||
|
# Ś or ś can't tell for sure let's assume capital
|
|||
|
LatinCapitalLetterSWithAcute = 0xAB
|
|||
|
# Ć
|
|||
|
LatinCapitalLetterCWithAcute = 0xAC
|
|||
|
# ȩ
|
|||
|
LatinSmallLetterEWithCedilla = 0xAD
|
|||
|
# well you can imagine what it'll look like
|
|||
|
LatinSmallLetterAWithCedilla = 0xB0
|
|||
|
# €
|
|||
|
EuroSign = 0xB1
|
|||
|
# E with some vertical line below
|
|||
|
LatinCapitalLetterEWithSomeLineBelow = 0xB3
|
|||
|
# a with some vertical line below
|
|||
|
LatinSmallLetterAWithSomeWeirdLineBelow = 0xB4
|
|||
|
# α
|
|||
|
GreekSmallLetterAlpha = 0xE0
|
|||
|
# β
|
|||
|
GreekSmallLetterBeta = 0xE1
|
|||
|
# Γ
|
|||
|
GreekCapitalLetterGamma = 0xE2
|
|||
|
# π
|
|||
|
GreekSmallLetterPi = 0xE3
|
|||
|
# Σ
|
|||
|
GreekCapitalLetterSigma = 0xE4
|
|||
|
# σ
|
|||
|
GreekSmallLetterSigma = 0xE5
|
|||
|
# μ
|
|||
|
GreekSmallLetterMu = 0xE6
|
|||
|
# τ
|
|||
|
GreekSmallLetterTau = 0xE7
|
|||
|
# Φ
|
|||
|
GreekCapitalLetterPhi = 0xE8
|
|||
|
# θ
|
|||
|
GreekSmallLetterTheta = 0xE9
|
|||
|
# Ω
|
|||
|
GreekCapitalLetterOmega = 0xEA
|
|||
|
# δ
|
|||
|
GreekSmallLetterDelta = 0xEB
|
|||
|
# ∞
|
|||
|
Infinity = 0xEC
|
|||
|
# φ
|
|||
|
GreekSmallLetterPhi = 0xED
|
|||
|
|
|||
|
def __str__(self):
|
|||
|
return chr(self.value)
|
|||
|
|
|||
|
@staticmethod
|
|||
|
def translateUtf16(input):
|
|||
|
table = {
|
|||
|
"Ç": ExtendedChar.LatinCapitalLetterCWithCedilla,
|
|||
|
"ü": ExtendedChar.LatinSmallLetterUWithDiaeresis,
|
|||
|
"é": ExtendedChar.LatinSmallLetterEWithAcute,
|
|||
|
"â": ExtendedChar.LatinSmallLetterAWithCircumflex,
|
|||
|
"ä": ExtendedChar.LatinSmallLetterAWithDiaeresis,
|
|||
|
"à": ExtendedChar.LatinSmallLetterAWithGrave,
|
|||
|
"å": ExtendedChar.LatinSmallLetterAWithRingAbove,
|
|||
|
"ç": ExtendedChar.LatinSmallLetterCWithCedilla,
|
|||
|
"ê": ExtendedChar.LatinSmallLetterEWithCircumflex,
|
|||
|
"ë": ExtendedChar.LatinSmallLetterEWithDiaeresis,
|
|||
|
"è": ExtendedChar.LatinSmallLetterEWithGrave,
|
|||
|
"Ï": ExtendedChar.LatinCapitalLetterIWithDiaeresis,
|
|||
|
"Î": ExtendedChar.LatinCapitalLetterIWithCircumflex,
|
|||
|
"Ì": ExtendedChar.LatinCapitalLetterIWithGrave,
|
|||
|
"Ä": ExtendedChar.LatinCapitalLetterAWithDiaeresis,
|
|||
|
"Å": ExtendedChar.LatinCapitalLetterAWithRingAbove,
|
|||
|
"É": ExtendedChar.LatinCapitalLetterEWithAcute,
|
|||
|
"æ": ExtendedChar.LatinSmallLetterAe,
|
|||
|
"Æ": ExtendedChar.LatinCapitalLetterAe,
|
|||
|
"ô": ExtendedChar.LatinSmallLetterOWithCircumflex,
|
|||
|
"ö": ExtendedChar.LatinSmallLetterOWithDiaeresis,
|
|||
|
"ò": ExtendedChar.LatinSmallLetterOWithGrave,
|
|||
|
"û": ExtendedChar.LatinSmallLetterUWithCircumflex,
|
|||
|
"ù": ExtendedChar.LatinSmallLetterUWithGrave,
|
|||
|
"ÿ": ExtendedChar.LatinSmallLetterYWithDiaeresis,
|
|||
|
"Ö": ExtendedChar.LatinCapitalLLetterOWithDiaeresis,
|
|||
|
"Ü": ExtendedChar.LatinCapitalLetterUWithDiaeresis,
|
|||
|
"¢": ExtendedChar.CentSign,
|
|||
|
"£": ExtendedChar.PoundSign,
|
|||
|
"¥": ExtendedChar.YenSign,
|
|||
|
"ƒ": ExtendedChar.LatinSmallLetterFWithHook,
|
|||
|
"á": ExtendedChar.LatinSmallLetterAWithAcute,
|
|||
|
"Í": ExtendedChar.LatinCapitalLetterIWithAcute,
|
|||
|
"Ó": ExtendedChar.LatinCapitalLetterOWithAcute,
|
|||
|
"ú": ExtendedChar.LatinSmallLetterUWithAcute,
|
|||
|
"ñ": ExtendedChar.LatinSmallLetterNWithTilde,
|
|||
|
"Ñ": ExtendedChar.LatinCapitalLetterNWithTilde,
|
|||
|
"¿": ExtendedChar.InvertedQuestionMark,
|
|||
|
"Ź": ExtendedChar.LatinCapitalLetterZWithAcute,
|
|||
|
"ń": ExtendedChar.LatinSmallLetterNWithAcute,
|
|||
|
"Ś": ExtendedChar.LatinCapitalLetterSWithAcute,
|
|||
|
"Ć": ExtendedChar.LatinCapitalLetterCWithAcute,
|
|||
|
"ȩ": ExtendedChar.LatinSmallLetterEWithCedilla,
|
|||
|
"€": ExtendedChar.EuroSign,
|
|||
|
"α": ExtendedChar.GreekSmallLetterAlpha,
|
|||
|
"β": ExtendedChar.GreekSmallLetterBeta,
|
|||
|
"Γ": ExtendedChar.GreekCapitalLetterGamma,
|
|||
|
"π": ExtendedChar.GreekSmallLetterPi,
|
|||
|
"Σ": ExtendedChar.GreekCapitalLetterSigma,
|
|||
|
"σ": ExtendedChar.GreekSmallLetterSigma,
|
|||
|
"μ": ExtendedChar.GreekSmallLetterMu,
|
|||
|
"τ": ExtendedChar.GreekSmallLetterTau,
|
|||
|
"Φ": ExtendedChar.GreekCapitalLetterPhi,
|
|||
|
"θ": ExtendedChar.GreekSmallLetterTheta,
|
|||
|
"Ω": ExtendedChar.GreekCapitalLetterOmega,
|
|||
|
"δ": ExtendedChar.GreekSmallLetterDelta,
|
|||
|
"∞": ExtendedChar.Infinity,
|
|||
|
"φ": ExtendedChar.GreekSmallLetterPhi,
|
|||
|
}
|
|||
|
|
|||
|
output = []
|
|||
|
supported_ascii = set(
|
|||
|
string.ascii_letters + string.digits + "^°!\"§$%&/()=?\\+*#'-_.:,;<>|@ "
|
|||
|
)
|
|||
|
|
|||
|
for char in input:
|
|||
|
if char in supported_ascii:
|
|||
|
output.append(char)
|
|||
|
continue
|
|||
|
|
|||
|
try:
|
|||
|
output.append(table[char])
|
|||
|
except KeyError:
|
|||
|
warnings.warn(f"Could not translate unknown character {char}")
|
|||
|
|
|||
|
return "".join((str(i) for i in output))
|