class Token(object):
    def __init__(self, start_mark, end_mark):
        self.start_mark = start_mark
        self.end_mark = end_mark

    def __repr__(self):
        attributes = [key for key in self.__dict__ if not key.endswith("_mark")]
        attributes.sort()
        arguments = ", ".join(
            ["%s=%r" % (key, getattr(self, key)) for key in attributes]
        )
        return "%s(%s)" % (self.__class__.__name__, arguments)


# class BOMToken(Token):
#    id = '<byte order mark>'


class DirectiveToken(Token):
    id = "<directive>"

    def __init__(self, name, value, start_mark, end_mark):
        self.name = name
        self.value = value
        self.start_mark = start_mark
        self.end_mark = end_mark


class DocumentStartToken(Token):
    id = "<document start>"


class DocumentEndToken(Token):
    id = "<document end>"


class StreamStartToken(Token):
    id = "<stream start>"

    def __init__(self, start_mark=None, end_mark=None, encoding=None):
        self.start_mark = start_mark
        self.end_mark = end_mark
        self.encoding = encoding


class StreamEndToken(Token):
    id = "<stream end>"


class BlockSequenceStartToken(Token):
    id = "<block sequence start>"


class BlockMappingStartToken(Token):
    id = "<block mapping start>"


class BlockEndToken(Token):
    id = "<block end>"


class FlowSequenceStartToken(Token):
    id = "["


class FlowMappingStartToken(Token):
    id = "{"


class FlowSequenceEndToken(Token):
    id = "]"


class FlowMappingEndToken(Token):
    id = "}"


class KeyToken(Token):
    id = "?"


class ValueToken(Token):
    id = ":"


class BlockEntryToken(Token):
    id = "-"


class FlowEntryToken(Token):
    id = ","


class AliasToken(Token):
    id = "<alias>"

    def __init__(self, value, start_mark, end_mark):
        self.value = value
        self.start_mark = start_mark
        self.end_mark = end_mark


class AnchorToken(Token):
    id = "<anchor>"

    def __init__(self, value, start_mark, end_mark):
        self.value = value
        self.start_mark = start_mark
        self.end_mark = end_mark


class TagToken(Token):
    id = "<tag>"

    def __init__(self, value, start_mark, end_mark):
        self.value = value
        self.start_mark = start_mark
        self.end_mark = end_mark


class ScalarToken(Token):
    id = "<scalar>"

    def __init__(self, value, plain, start_mark, end_mark, style=None):
        self.value = value
        self.plain = plain
        self.start_mark = start_mark
        self.end_mark = end_mark
        self.style = style
