mirror of
https://github.com/ksherlock/prez.git
synced 2024-12-02 23:52:50 +00:00
improved text encoding
This commit is contained in:
parent
cac3129e56
commit
47c8e1c704
41
base.py
41
base.py
@ -157,7 +157,34 @@ class rList(rObject):
|
|||||||
rv += "\n\t}"
|
rv += "\n\t}"
|
||||||
return rv
|
return rv
|
||||||
|
|
||||||
|
|
||||||
|
def _generate_map():
|
||||||
|
map = { x: "\\${:02x}".format(x) for x in range(0, 256) if x < 32 or x > 126 }
|
||||||
|
map[0x0d] = "\\n" # intentionally backwards.
|
||||||
|
map[0x0a] = "\\r" # intentionally backwards.
|
||||||
|
map[0x09] = "\\t"
|
||||||
|
# \b \f \v \? also supported.
|
||||||
|
map[ord('"')] = '\\"'
|
||||||
|
map[ord("'")] = "\\'"
|
||||||
|
map[ord("\\")] = "\\\\"
|
||||||
|
# map[0x7f] = "\\?" # rubout
|
||||||
|
|
||||||
|
return map
|
||||||
|
|
||||||
class rTextObject(rObject):
|
class rTextObject(rObject):
|
||||||
|
# _map = { x: "\\${:02x}".format(x) for x in range(0, 256) if x < 32 or x > 126 }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_map = _generate_map()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _encode(bb):
|
||||||
|
map = rTextObject._map
|
||||||
|
return "".join([map[x] if x in map else chr(x) for x in bb])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, text, *, id=None, attr=None):
|
def __init__(self, text, *, id=None, attr=None):
|
||||||
super().__init__(id=id, attr=attr)
|
super().__init__(id=id, attr=attr)
|
||||||
# text is a string or bytes.
|
# text is a string or bytes.
|
||||||
@ -165,12 +192,22 @@ class rTextObject(rObject):
|
|||||||
self.text = text
|
self.text = text
|
||||||
self._text = str_to_bytes(text)
|
self._text = str_to_bytes(text)
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
return len(self._text)
|
||||||
|
|
||||||
def __bytes__(self):
|
def __bytes__(self):
|
||||||
return self._text
|
return self._text
|
||||||
|
|
||||||
def _rez_string(self):
|
def _rez_string(self):
|
||||||
# todo - should extended chars be macroman?
|
|
||||||
return '\t"' + self._text.decode("ascii") + '"'
|
if not self._text: return '\t""\n'
|
||||||
|
|
||||||
|
bb = self._text
|
||||||
|
data = [bb[x*32:x*32+32] for x in range(0, len(bb)+31>>5)]
|
||||||
|
|
||||||
|
rv = ""
|
||||||
|
rv = "\n".join(['\t"' + self._encode(x) + '"' for x in data])
|
||||||
|
return rv
|
||||||
|
|
||||||
|
|
||||||
class rText(rTextObject):
|
class rText(rTextObject):
|
||||||
|
Loading…
Reference in New Issue
Block a user