def appendCodePoint(self, ch): """ :type string: int :rtype pyjline.javautils.StringBuilder """ if Character.isBmpCodePoint(ch): self.string += unichr(ch) elif Character.isValidCodePoint(ch): self.string += unichr(Character.highSurrogate(ch)) self.string += unichr(Character.lowSurrogate(ch)) else: # TODO: EXCEPTION pass return self
def readBinding(self, keys, local=None, block=True): """ :type keys: pyjline.keymap.KeyMap :type local: pyjline.keymap.KeyMap :type block: bool """ self.lastBinding = None o = None remaining = [0] while True: c = self.readCharacter() if c == -1: return None self.opBuffer.appendCodePoint(c) if (not (local is None)): o = local.getBound(self.opBuffer, remaining) if ((o is None) and ((local is None) or (remaining[0] >= 0))): o = keys.getBound(self.opBuffer, remaining) if (not (o is None)): if (remaining[0] >= 0): opblen = self.opBuffer.length() - remaining[0] self.runMacro(self.opBuffer.substring(opblen)) self.opBuffer.setLength(opblen) else: ambiguousTimeout = keys.getAmbigousTimeout() if (ambiguousTimeout > 0 and self.peekCharacter(ambiguousTimeout) != NonBlockingReader.READ_EXPIRED): o = None if (not (o is None)): self.lastBinding = self.opBuffer.toString() self.opBuffer.setLength(0) return o elif (remaining[0] > 0): cp = self.opBuffer.codePointAt(0) rem = self.opBuffer.substring(Character.charCount(cp)) self.lastBinding = self.opBuffer.substring(0, Character.charCount(cp)) o = keys.getUnicode() if (cp >= KeyMap.KEYMAP_LENGTH) else keys.getNomatch() self.opBuffer.setLength(0) self.opBuffer.append(rem) if (not (o is None)): return o if block: break
def readCharacter(self): """ :rtype int """ if (not self.pushBackChar.is_empty()): return self.pushBackChar.pop() try: c = NonBlockingReader.READ_EXPIRED; s = 0; while (c == NonBlockingReader.READ_EXPIRED): c = self.reader.read() if (c >= 0 and Character.isHighSurrogate(c)): s = c c = NonBlockingReader.READ_EXPIRED return Character.toCodePoint(s, c) if s != 0 else c except: # TODO: Exception pass