class Style(object): def __init__(self, name, env=False, link=False, group=None): self.name = name self.env = env self.link = link self.group = group def __repr__(self): return '[%s]' % self.name # Environments PARAGRAPH = Style('PARAGRAPH') ORDERED = Style('ORDERED', group='list') UNORDERED = Style('UNORDERED', group='list') BLOCKQUOTE = Style('BLOCKQUOTE', group='blockquote') TABLE = Style('TABLE') # Markup BOLD = Style('BOLD') ITALIC = Style('ITALIC') MONOSPACE = Style('MONOSPACE') SUPERSCRIPT = Style('SUPERSCRIPT') SUBSCRIPT = Style('SUBSCRIPT') UNDERLINE = Style('UNDERLINE') STRIKE = Style('STRIKE') CODEBLOCK = Style('CODEBLOCK', env=True) HEADING = Style('HEADING', env=True) # Non-Creole markup CENTER = Style('CENTER') FOOTNOTE = Style('FOOTNOTE') LINK = Style('LINK', link=True) IMAGE = Style('IMAGE', link=True) ORDERED_ITEM = Style('ORDERED_ITEM', env=ORDERED) UNORDERED_ITEM = Style('UNORDERED_ITEM', env=UNORDERED) BLOCKQUOTE_LINE = Style('BLOCKQUOTE_LINE', env=BLOCKQUOTE) # Rows transition to the TABLE environment; cells don't need to. TABLE_ROW = Style('TABLE_ROW', env=TABLE) TABLE_HEADING = Style('TABLE_HEADING', env=True) TABLE_CELL = Style('TABLE_CELL', env=True) HRULE = Style('HRULE') LINEBREAK = Style('LINEBREAK') ENV_BREAK = Style('ENV_BREAK', env=None) MACRO = Style('MACRO') class Op(object): def __init__(self, name): self.name = name def __repr__(self): return '<%s>' % self.name START = Op('Start') END = Op('End') ENTITY = Op('Entity') TEXT = Op('Text') ERROR = Op('Error') LITERAL = Op('Literal') class Token(object): def __init__(self, op, style=None, arg=None): assert style is None or isinstance(style, Style), style self.op = op self.style = style self.arg = arg def __repr__(self): return "" % (self.op, repr(self.style), repr(self.arg)) # For test assertions. def __eq__(self, other): try: return (self.op == other.op and self.style == other.style and self.arg == other.arg) except AttributeError: return False def __ne__(self, other): return not self.__eq__(other) def Start(style, arg=None): return Token(START, style, arg) def End(style, arg=None): return Token(END, style, arg) def Entity(entity, arg=None): return Token(ENTITY, entity, arg) def Text(text): return Token(TEXT, arg=text) def Error(text): return Token(ERROR, arg=text) def Literal(output): return Token(LITERAL, arg=output)