gitea

Development moved to Codeberg

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 100
  101. 101
  102. 102
  103. 103
  104. 104
  105. 105
  106. 106
  107. 107
  108. 108
  109. 109
package m

import (
	. "github.com/alecthomas/chroma" // nolint
	"github.com/alecthomas/chroma/lexers/internal"
)

// mcfunction lexer.
var MCFunction = internal.Register(MustNewLazyLexer(
	&Config{
		Name:         "mcfunction",
		Aliases:      []string{"mcfunction"},
		Filenames:    []string{"*.mcfunction"},
		MimeTypes:    []string{},
		NotMultiline: true,
		DotAll:       true,
	},
	func() Rules {
		return Rules{
			"simplevalue": {
				{`(true|false)`, KeywordConstant, nil},
				{`[01]b`, LiteralNumber, nil},
				{`-?(0|[1-9]\d*)(\.\d+[eE](\+|-)?\d+|[eE](\+|-)?\d+|\.\d+)`, LiteralNumberFloat, nil},
				{`(-?\d+)(\.\.)(-?\d+)`, ByGroups(LiteralNumberInteger, Punctuation, LiteralNumberInteger), nil},
				{`-?(0|[1-9]\d*)`, LiteralNumberInteger, nil},
				{`"(\\\\|\\"|[^"])*"`, LiteralStringDouble, nil},
				{`'[^']+'`, LiteralStringSingle, nil},
				{`([!#]?)(\w+)`, ByGroups(Punctuation, Text), nil},
			},
			"nbtobjectattribute": {
				Include("nbtvalue"),
				{`:`, Punctuation, nil},
				{`,`, Punctuation, Pop(1)},
				{`\}`, Punctuation, Pop(2)},
			},
			"nbtobjectvalue": {
				{`("(\\\\|\\"|[^"])*"|[a-zA-Z0-9_]+)`, NameTag, Push("nbtobjectattribute")},
				{`\}`, Punctuation, Pop(1)},
			},
			"nbtarrayvalue": {
				Include("nbtvalue"),
				{`,`, Punctuation, nil},
				{`\]`, Punctuation, Pop(1)},
			},
			"nbtvalue": {
				Include("simplevalue"),
				{`\{`, Punctuation, Push("nbtobjectvalue")},
				{`\[`, Punctuation, Push("nbtarrayvalue")},
			},
			"argumentvalue": {
				Include("simplevalue"),
				{`,`, Punctuation, Pop(1)},
				{`[}\]]`, Punctuation, Pop(2)},
			},
			"argumentlist": {
				{`(nbt)(={)`, ByGroups(NameAttribute, Punctuation), Push("nbtobjectvalue")},
				{`([A-Za-z0-9/_!]+)(={)`, ByGroups(NameAttribute, Punctuation), Push("argumentlist")},
				{`([A-Za-z0-9/_!]+)(=)`, ByGroups(NameAttribute, Punctuation), Push("argumentvalue")},
				Include("simplevalue"),
				{`,`, Punctuation, nil},
				{`[}\]]`, Punctuation, Pop(1)},
			},
			"root": {
				{`#.*?\n`, CommentSingle, nil},
				{Words(`/?`, `\b`, `ability`, `attributes`, `advancement`,
					`ban`, `ban-ip`, `banlist`, `bossbar`,
					`camerashake`, `classroommode`, `clear`,
					`clearspawnpoint`, `clone`, `code`, `collect`,
					`createagent`, `data`, `datapack`, `debug`,
					`defaultgamemode`, `deop`, `destroy`, `detect`,
					`detectredstone`, `difficulty`, `dropall`,
					`effect`, `enchant`, `event`, `execute`,
					`experience`, `fill`, `flog`, `forceload`,
					`function`, `gamemode`, `gamerule`,
					`geteduclientinfo`, `give`, `help`, `item`,
					`immutableworld`, `kick`, `kill`, `list`,
					`locate`, `locatebiome`, `loot`, `me`, `mixer`,
					`mobevent`, `move`, `msg`, `music`, `op`,
					`pardon`, `particle`, `playanimation`,
					`playsound`, `position`, `publish`,
					`raytracefog`, `recipe`, `reload`, `remove`,
					`replaceitem`, `ride`, `save`, `save-all`,
					`save-off`, `save-on`, `say`, `schedule`,
					`scoreboard`, `seed`, `setblock`,
					`setidletimeout`, `setmaxplayers`,
					`setworldspawn`, `spawnpoint`, `spectate`,
					`spreadplayers`, `stop`, `stopsound`,
					`structure`, `summon`, `tag`, `team`, `teammsg`,
					`teleport`, `tell`, `tellraw`, `testfor`,
					`testforblock`, `testforblocks`, `tickingarea`,
					`time`, `title`, `toggledownfall`, `tp`,
					`tpagent`, `transfer`, `transferserver`,
					`trigger`, `turn`, `w`, `weather`, `whitelist`,
					`worldborder`, `worldbuilder`, `wsserver`, `xp`,
				), KeywordReserved, nil},
				{Words(``, ``, `@p`, `@r`, `@a`, `@e`, `@s`, `@c`, `@v`),
					KeywordConstant, nil},
				{`\[`, Punctuation, Push("argumentlist")},
				{`{`, Punctuation, Push("nbtobjectvalue")},
				{`~`, NameBuiltin, nil},
				{`([a-zA-Z_]+:)?[a-zA-Z_]+\b`, Text, nil},
				{`([a-z]+)(\.)([0-9]+)\b`, ByGroups(Text, Punctuation, LiteralNumber), nil},
				{`([<>=]|<=|>=)`, Punctuation, nil},
				Include("simplevalue"),
				{`\s+`, TextWhitespace, nil},
			},
		}
	},
))