1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#!/usr/bin/env python
from .compat import bytes, is_py2
def isstring(val):
if is_py2:
return isinstance(val, str) or isinstance(val, unicode)
else:
return isinstance(val, str)
def byte(ordinal):
if isstring(ordinal):
ordinal = ord(ordinal)
return bytes((ordinal,))
class flagproperty(object):
def __init__(self, flags, attr, boolean=False):
self.flags = flags
self.attr = attr
self.boolean = boolean
def __get__(self, obj, cls):
flags = getattr(obj, self.flags)
val = getattr(flags.bit, self.attr)
if self.boolean:
val = bool(val)
return val
def __set__(self, obj, val):
flags = getattr(obj, self.flags)
setattr(flags.bit, self.attr, int(val))
def lang_to_iso639(lang):
res = [0, 0, 0]
for i in reversed(range(3)):
res[i] = chr(0x60 + (lang & 0x1f))
lang = lang >> 5
return "".join(res)
def iso639_to_lang(iso639):
res = 0
for i in range(3):
c = ord(iso639[i]) - 0x60
res = res << 5
res = res | c
return res
__all__ = ["byte", "isstring", "flagproperty", "lang_to_iso639", "iso639_to_lang"]
|