From antocuni at codespeak.net Tue Dec 28 08:53:02 2010 From: antocuni at codespeak.net (antocuni at codespeak.net) Date: Tue, 28 Dec 2010 08:53:02 +0100 (CET) Subject: [pyrepl-checkins] r80126 - pyrepl/trunk/pyrepl/pyrepl Message-ID: <20101228075302.DBA98282BE8@codespeak.net> Author: antocuni Date: Tue Dec 28 08:53:00 2010 New Revision: 80126 Added: pyrepl/trunk/pyrepl/pyrepl/unicodedata_.py (contents, props changed) Modified: pyrepl/trunk/pyrepl/pyrepl/input.py pyrepl/trunk/pyrepl/pyrepl/reader.py Log: make pyrepl working even if unicodedata is not importable. Useful with a pypy translated without it Modified: pyrepl/trunk/pyrepl/pyrepl/input.py ============================================================================== --- pyrepl/trunk/pyrepl/pyrepl/input.py (original) +++ pyrepl/trunk/pyrepl/pyrepl/input.py Tue Dec 28 08:53:00 2010 @@ -33,7 +33,7 @@ # [meta-key] is identified with [esc key]. We demand that any console # class does quite a lot towards emulating a unix terminal. -import unicodedata +from pyrepl import unicodedata_ class InputTranslator(object): def push(self, evt): @@ -74,7 +74,7 @@ if d is None: if self.verbose: print "invalid" - if self.stack or len(key) > 1 or unicodedata.category(key) == 'C': + if self.stack or len(key) > 1 or unicodedata_.category(key) == 'C': self.results.append( (self.invalid_cls, self.stack + [key])) else: Modified: pyrepl/trunk/pyrepl/pyrepl/reader.py ============================================================================== --- pyrepl/trunk/pyrepl/pyrepl/reader.py (original) +++ pyrepl/trunk/pyrepl/pyrepl/reader.py Tue Dec 28 08:53:00 2010 @@ -19,14 +19,15 @@ # CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -import types, unicodedata +import types +from pyrepl import unicodedata_ from pyrepl import commands from pyrepl import input def _make_unctrl_map(): uc_map = {} for c in map(unichr, range(256)): - if unicodedata.category(c)[0] <> 'C': + if unicodedata_.category(c)[0] <> 'C': uc_map[c] = c for i in range(32): c = unichr(i) @@ -51,11 +52,10 @@ del init_unctrl_map except ImportError: def _my_unctrl(c, u=_make_unctrl_map()): - import unicodedata if c in u: return u[c] else: - if unicodedata.category(c).startswith('C'): + if unicodedata_.category(c).startswith('C'): return '\u%04x'%(ord(c),) else: return c Added: pyrepl/trunk/pyrepl/pyrepl/unicodedata_.py ============================================================================== --- (empty file) +++ pyrepl/trunk/pyrepl/pyrepl/unicodedata_.py Tue Dec 28 08:53:00 2010 @@ -0,0 +1,59 @@ +try: + from unicodedata import * +except ImportError: + + def category(ch): + """ + ASCII only implementation + """ + if type(ch) is not unicode: + raise TypeError + if len(ch) != 1: + raise TypeError + return _categories.get(ord(ch), 'Co') # "Other, private use" + + _categories = { + 0: 'Cc', 1: 'Cc', 2: 'Cc', 3: 'Cc', 4: 'Cc', 5: 'Cc', + 6: 'Cc', 7: 'Cc', 8: 'Cc', 9: 'Cc', 10: 'Cc', 11: 'Cc', + 12: 'Cc', 13: 'Cc', 14: 'Cc', 15: 'Cc', 16: 'Cc', 17: 'Cc', + 18: 'Cc', 19: 'Cc', 20: 'Cc', 21: 'Cc', 22: 'Cc', 23: 'Cc', + 24: 'Cc', 25: 'Cc', 26: 'Cc', 27: 'Cc', 28: 'Cc', 29: 'Cc', + 30: 'Cc', 31: 'Cc', 32: 'Zs', 33: 'Po', 34: 'Po', 35: 'Po', + 36: 'Sc', 37: 'Po', 38: 'Po', 39: 'Po', 40: 'Ps', 41: 'Pe', + 42: 'Po', 43: 'Sm', 44: 'Po', 45: 'Pd', 46: 'Po', 47: 'Po', + 48: 'Nd', 49: 'Nd', 50: 'Nd', 51: 'Nd', 52: 'Nd', 53: 'Nd', + 54: 'Nd', 55: 'Nd', 56: 'Nd', 57: 'Nd', 58: 'Po', 59: 'Po', + 60: 'Sm', 61: 'Sm', 62: 'Sm', 63: 'Po', 64: 'Po', 65: 'Lu', + 66: 'Lu', 67: 'Lu', 68: 'Lu', 69: 'Lu', 70: 'Lu', 71: 'Lu', + 72: 'Lu', 73: 'Lu', 74: 'Lu', 75: 'Lu', 76: 'Lu', 77: 'Lu', + 78: 'Lu', 79: 'Lu', 80: 'Lu', 81: 'Lu', 82: 'Lu', 83: 'Lu', + 84: 'Lu', 85: 'Lu', 86: 'Lu', 87: 'Lu', 88: 'Lu', 89: 'Lu', + 90: 'Lu', 91: 'Ps', 92: 'Po', 93: 'Pe', 94: 'Sk', 95: 'Pc', + 96: 'Sk', 97: 'Ll', 98: 'Ll', 99: 'Ll', 100: 'Ll', 101: 'Ll', + 102: 'Ll', 103: 'Ll', 104: 'Ll', 105: 'Ll', 106: 'Ll', 107: 'Ll', + 108: 'Ll', 109: 'Ll', 110: 'Ll', 111: 'Ll', 112: 'Ll', 113: 'Ll', + 114: 'Ll', 115: 'Ll', 116: 'Ll', 117: 'Ll', 118: 'Ll', 119: 'Ll', + 120: 'Ll', 121: 'Ll', 122: 'Ll', 123: 'Ps', 124: 'Sm', 125: 'Pe', + 126: 'Sm', 127: 'Cc', 128: 'Cc', 129: 'Cc', 130: 'Cc', 131: 'Cc', + 132: 'Cc', 133: 'Cc', 134: 'Cc', 135: 'Cc', 136: 'Cc', 137: 'Cc', + 138: 'Cc', 139: 'Cc', 140: 'Cc', 141: 'Cc', 142: 'Cc', 143: 'Cc', + 144: 'Cc', 145: 'Cc', 146: 'Cc', 147: 'Cc', 148: 'Cc', 149: 'Cc', + 150: 'Cc', 151: 'Cc', 152: 'Cc', 153: 'Cc', 154: 'Cc', 155: 'Cc', + 156: 'Cc', 157: 'Cc', 158: 'Cc', 159: 'Cc', 160: 'Zs', 161: 'Po', + 162: 'Sc', 163: 'Sc', 164: 'Sc', 165: 'Sc', 166: 'So', 167: 'So', + 168: 'Sk', 169: 'So', 170: 'Ll', 171: 'Pi', 172: 'Sm', 173: 'Cf', + 174: 'So', 175: 'Sk', 176: 'So', 177: 'Sm', 178: 'No', 179: 'No', + 180: 'Sk', 181: 'Ll', 182: 'So', 183: 'Po', 184: 'Sk', 185: 'No', + 186: 'Ll', 187: 'Pf', 188: 'No', 189: 'No', 190: 'No', 191: 'Po', + 192: 'Lu', 193: 'Lu', 194: 'Lu', 195: 'Lu', 196: 'Lu', 197: 'Lu', + 198: 'Lu', 199: 'Lu', 200: 'Lu', 201: 'Lu', 202: 'Lu', 203: 'Lu', + 204: 'Lu', 205: 'Lu', 206: 'Lu', 207: 'Lu', 208: 'Lu', 209: 'Lu', + 210: 'Lu', 211: 'Lu', 212: 'Lu', 213: 'Lu', 214: 'Lu', 215: 'Sm', + 216: 'Lu', 217: 'Lu', 218: 'Lu', 219: 'Lu', 220: 'Lu', 221: 'Lu', + 222: 'Lu', 223: 'Ll', 224: 'Ll', 225: 'Ll', 226: 'Ll', 227: 'Ll', + 228: 'Ll', 229: 'Ll', 230: 'Ll', 231: 'Ll', 232: 'Ll', 233: 'Ll', + 234: 'Ll', 235: 'Ll', 236: 'Ll', 237: 'Ll', 238: 'Ll', 239: 'Ll', + 240: 'Ll', 241: 'Ll', 242: 'Ll', 243: 'Ll', 244: 'Ll', 245: 'Ll', + 246: 'Ll', 247: 'Sm', 248: 'Ll', 249: 'Ll', 250: 'Ll', 251: 'Ll', + 252: 'Ll', 253: 'Ll', 254: 'Ll' + }