def get(self): s = self.s pos = self.pos if self.ignore_space: while True: if pos >= len(s): return u"" elif is_space(ord(s[pos])): pos += 1 elif s[pos] == u"#": pos = s.find(u"\n", pos) if pos < 0: pos = len(s) else: break try: ch = s[pos] self.pos = pos + 1 return ch except IndexError: self.pos = pos return u"" except ValueError: self.pos = len(s) return u""
def match(self, substr): s = self.s pos = self.pos if self.ignore_space: for c in substr: while True: if pos >= len(s): return False elif is_space(ord(s[pos])): pos += 1 elif s[pos] == u"#": pos = s.find(u"\n", pos) if pos < 0: pos = len(s) else: break if s[pos] != c: return False pos += 1 self.pos = pos return True else: if pos + len(substr) <= len(s): matches = True for i in xrange(len(substr)): if s[pos + i] != substr[i]: matches = False else: matches = False if not matches: return False self.pos = pos + len(substr) return True
def at_end(self): s = self.s pos = self.pos if self.ignore_space: while True: if pos >= len(s): break elif is_space(ord(s[pos])): pos += 1 elif s[pos] == u"#": pos = s.find(u"\n", pos) if pos < 0: pos = len(s) else: break return pos >= len(s)