tokens.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. # SPDX-License-Identifier: MIT
  2. class Token(object):
  3. def __init__(self, start_mark, end_mark):
  4. self.start_mark = start_mark
  5. self.end_mark = end_mark
  6. def __repr__(self):
  7. attributes = [key for key in self.__dict__
  8. if not key.endswith('_mark')]
  9. attributes.sort()
  10. arguments = ', '.join(['%s=%r' % (key, getattr(self, key))
  11. for key in attributes])
  12. return '%s(%s)' % (self.__class__.__name__, arguments)
  13. #class BOMToken(Token):
  14. # id = '<byte order mark>'
  15. class DirectiveToken(Token):
  16. id = '<directive>'
  17. def __init__(self, name, value, start_mark, end_mark):
  18. self.name = name
  19. self.value = value
  20. self.start_mark = start_mark
  21. self.end_mark = end_mark
  22. class DocumentStartToken(Token):
  23. id = '<document start>'
  24. class DocumentEndToken(Token):
  25. id = '<document end>'
  26. class StreamStartToken(Token):
  27. id = '<stream start>'
  28. def __init__(self, start_mark=None, end_mark=None,
  29. encoding=None):
  30. self.start_mark = start_mark
  31. self.end_mark = end_mark
  32. self.encoding = encoding
  33. class StreamEndToken(Token):
  34. id = '<stream end>'
  35. class BlockSequenceStartToken(Token):
  36. id = '<block sequence start>'
  37. class BlockMappingStartToken(Token):
  38. id = '<block mapping start>'
  39. class BlockEndToken(Token):
  40. id = '<block end>'
  41. class FlowSequenceStartToken(Token):
  42. id = '['
  43. class FlowMappingStartToken(Token):
  44. id = '{'
  45. class FlowSequenceEndToken(Token):
  46. id = ']'
  47. class FlowMappingEndToken(Token):
  48. id = '}'
  49. class KeyToken(Token):
  50. id = '?'
  51. class ValueToken(Token):
  52. id = ':'
  53. class BlockEntryToken(Token):
  54. id = '-'
  55. class FlowEntryToken(Token):
  56. id = ','
  57. class AliasToken(Token):
  58. id = '<alias>'
  59. def __init__(self, value, start_mark, end_mark):
  60. self.value = value
  61. self.start_mark = start_mark
  62. self.end_mark = end_mark
  63. class AnchorToken(Token):
  64. id = '<anchor>'
  65. def __init__(self, value, start_mark, end_mark):
  66. self.value = value
  67. self.start_mark = start_mark
  68. self.end_mark = end_mark
  69. class TagToken(Token):
  70. id = '<tag>'
  71. def __init__(self, value, start_mark, end_mark):
  72. self.value = value
  73. self.start_mark = start_mark
  74. self.end_mark = end_mark
  75. class ScalarToken(Token):
  76. id = '<scalar>'
  77. def __init__(self, value, plain, start_mark, end_mark, style=None):
  78. self.value = value
  79. self.plain = plain
  80. self.start_mark = start_mark
  81. self.end_mark = end_mark
  82. self.style = style