-
Notifications
You must be signed in to change notification settings - Fork 8
/
categoriser.go
113 lines (89 loc) · 2.35 KB
/
categoriser.go
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
package parser
import "strings"
// Categorises the line and does some cleaning
func categoriser(line string) categorisedLine {
lineType := getLineType(line)
isForced := false
switch lineType {
case emptyLine:
line = ""
case beginAct:
line = normaliseLine(line)
case forcedBeginAct:
line = normaliseLine(line)
line = strings.TrimPrefix(line, "%")
line = strings.TrimSpace(line)
isForced = true
lineType = beginAct
case centeredText:
line = normaliseLine(line)
line = strings.TrimPrefix(line, ">")
line = strings.TrimSuffix(line, "<")
line = strings.TrimSpace(line)
case character:
line = normaliseLine(line)
case forcedCharacter:
line = normaliseLine(line)
line = strings.TrimPrefix(line, "@")
line = strings.TrimSpace(line)
isForced = true
lineType = character
case characterTwo:
line = normaliseLine(line)
case forcedCharacterTwo:
line = normaliseLine(line)
line = strings.TrimPrefix(line, "@")
line = strings.TrimSuffix(line, "^")
line = strings.TrimSpace(line)
isForced = true
lineType = characterTwo
case endAct:
line = normaliseLine(line)
case forcedEndAct:
line = normaliseLine(line)
line = strings.TrimPrefix(line, "%!")
line = strings.TrimSpace(line)
isForced = true
lineType = endAct
case forcedAction:
line = normaliseLine(line)
line = strings.TrimPrefix(line, "!")
isForced = true
lineType = action
case lyrics:
line = normaliseLine(line)
line = strings.TrimPrefix(line, "~")
line = strings.TrimSpace(line)
case pageBreak:
// No need for content
line = ""
case parenthetical:
line = normaliseLine(line)
// A parenthetical is detected by the dialogue grouper.
lineType = other
case sceneTag:
line = normaliseLine(line)
case forcedSceneTag:
line = normaliseLine(line)
line = strings.TrimPrefix(line, ".")
line = strings.TrimSpace(line)
isForced = true
lineType = sceneTag
case transitionTag:
line = normaliseLine(line)
case forcedTransitionTag:
line = normaliseLine(line)
line = strings.TrimPrefix(line, ">")
line = strings.TrimSpace(line)
isForced = true
lineType = transitionTag
case section:
line = normaliseLine(line)
case synopsis:
line = normaliseLine(line)
line = strings.TrimPrefix(line, "=")
line = strings.TrimSpace(line)
// Else do nothing, the line needs no cleaning.
}
return categorisedLine{lineType, isForced, line}
}