forked from charmbracelet/vhs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtoken.go
More file actions
124 lines (118 loc) · 2.97 KB
/
Copy pathtoken.go
File metadata and controls
124 lines (118 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package main
// Type represents a token's type.
type TokenType string
// Token represents a lexer token.
type Token struct {
Type TokenType
Literal string
Line int
Column int
}
//nolint:revive
const (
AT = "@"
EQUAL = "="
PLUS = "+"
PERCENT = "%"
SLASH = "/"
DOT = "."
DASH = "-"
PX = "PX"
EM = "EM"
EOF = "EOF"
ILLEGAL = "ILLEGAL"
SPACE = "SPACE"
BACKSPACE = "BACKSPACE"
CTRL = "CTRL"
ENTER = "ENTER"
NUMBER = "NUMBER"
SET = "SET"
SLEEP = "SLEEP"
STRING = "STRING"
JSON = "JSON"
TYPE = "TYPE"
DOWN = "DOWN"
LEFT = "LEFT"
RIGHT = "RIGHT"
UP = "UP"
TAB = "TAB"
ESCAPE = "ESCAPE"
BEGIN = "BEGIN"
END = "END"
HIDE = "HIDE"
REQUIRE = "REQUIRE"
SHOW = "SHOW"
OUTPUT = "OUTPUT"
MILLISECONDS = "MILLISECONDS"
SECONDS = "SECONDS"
MINUTES = "MINUTES"
COMMENT = "COMMENT"
FONT_FAMILY = "FONT_FAMILY"
FONT_SIZE = "FONT_SIZE"
FRAMERATE = "FRAMERATE"
PLAYBACK_SPEED = "PLAYBACK_SPEED"
HEIGHT = "HEIGHT"
WIDTH = "WIDTH"
LETTER_SPACING = "LETTER_SPACING"
LINE_HEIGHT = "LINE_HEIGHT"
TYPING_SPEED = "TYPING_SPEED"
PADDING = "PADDING"
THEME = "THEME"
)
var keywords = map[string]TokenType{
"em": EM,
"px": PX,
"ms": MILLISECONDS,
"s": SECONDS,
"m": MINUTES,
"Set": SET,
"Sleep": SLEEP,
"Type": TYPE,
"Enter": ENTER,
"Space": SPACE,
"Backspace": BACKSPACE,
"Ctrl": CTRL,
"Down": DOWN,
"Left": LEFT,
"Right": RIGHT,
"Up": UP,
"Tab": TAB,
"Escape": ESCAPE,
"Begin": BEGIN,
"End": END,
"Hide": HIDE,
"Require": REQUIRE,
"Show": SHOW,
"Output": OUTPUT,
"FontFamily": FONT_FAMILY,
"FontSize": FONT_SIZE,
"Framerate": FRAMERATE,
"Height": HEIGHT,
"LetterSpacing": LETTER_SPACING,
"LineHeight": LINE_HEIGHT,
"PlaybackSpeed": PLAYBACK_SPEED,
"TypingSpeed": TYPING_SPEED,
"Padding": PADDING,
"Theme": THEME,
"Width": WIDTH,
}
// IsSetting returns whether a token is a setting.
func IsSetting(t TokenType) bool {
switch t {
case FONT_FAMILY, FONT_SIZE, LETTER_SPACING, LINE_HEIGHT,
FRAMERATE, TYPING_SPEED, THEME, PLAYBACK_SPEED,
HEIGHT, WIDTH, PADDING:
return true
default:
return false
}
}
// LookupIdentifier returns whether the identifier is a keyword.
// In `vhs`, there are no _actual_ identifiers, i.e. there are no variables.
// Instead, identifiers are simply strings (i.e. bare words).
func LookupIdentifier(ident string) TokenType {
if t, ok := keywords[ident]; ok {
return t
}
return STRING
}