ceml 0.7.13 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Makefile +1 -1
- data/VERSION +1 -1
- data/ceml.gemspec +62 -50
- data/guide/guide.html +69 -14
- data/guide/guide.md +74 -15
- data/guide/guide.pdf +0 -0
- data/lib/ceml/driver.rb +0 -181
- data/lib/ceml/lang/basic_instruction.rb +49 -0
- data/lib/ceml/{casting_statement.rb → lang/casting_statement.rb} +19 -9
- data/lib/ceml/{instruction_statements.rb → lang/instruction_statements.rb} +5 -16
- data/lib/ceml/{script.rb → lang/script.rb} +53 -43
- data/lib/ceml/lang/tt/casting.rb +432 -0
- data/lib/ceml/lang/tt/casting.treetop +29 -0
- data/lib/ceml/lang/tt/instructions.rb +1130 -0
- data/lib/ceml/lang/tt/instructions.treetop +86 -0
- data/lib/ceml/lang/tt/lexer.rb +1804 -0
- data/lib/ceml/{tt → lang/tt}/lexer.treetop +70 -7
- data/lib/ceml/lang/tt/scripts.rb +647 -0
- data/lib/ceml/{tt → lang/tt}/scripts.treetop +2 -2
- data/lib/ceml/lang.rb +10 -0
- data/lib/ceml/models/audition.rb +65 -0
- data/lib/ceml/models/bundle.rb +64 -0
- data/lib/ceml/models/cast.rb +108 -0
- data/lib/ceml/models/castable.rb +81 -0
- data/lib/ceml/{incident.rb → models/incident.rb} +63 -15
- data/lib/ceml/models/incident_model.rb +100 -0
- data/lib/ceml/models/incident_role_slot.rb +16 -0
- data/lib/ceml/models/player.rb +80 -0
- data/lib/ceml/models/queue.rb +12 -0
- data/lib/ceml/models/waiting_room.rb +40 -0
- data/lib/ceml/models.rb +16 -0
- data/lib/ceml/processor.rb +162 -0
- data/lib/ceml.rb +7 -14
- data/test/askchain.ceml +6 -0
- data/test/compliment.ceml +4 -0
- data/test/dialogues/accept.ceml +24 -0
- data/test/dialogues/basic_seed.ceml +26 -0
- data/test/dialogues/jordan.ceml +121 -0
- data/test/helper.rb +44 -39
- data/test/jane.ceml +48 -0
- data/test/{test_casting.rb → lang/test_casting.rb} +5 -0
- data/test/lang/test_instructions.rb +42 -0
- data/test/{test_scripts.rb → lang/test_scripts.rb} +3 -2
- data/test/sync.ceml +6 -0
- data/test/test_castable.rb +20 -0
- data/test/test_dialogues.rb +58 -0
- data/test/test_incident.rb +64 -127
- metadata +54 -30
- data/.gitignore +0 -23
- data/lib/ceml/confluence.rb +0 -63
- data/lib/ceml/role.rb +0 -61
- data/lib/ceml/tt/casting.treetop +0 -65
- data/lib/ceml/tt/instructions.treetop +0 -91
- data/test/test_instructions.rb +0 -27
- data/test/test_release.rb +0 -78
@@ -13,14 +13,21 @@ grammar Lexer
|
|
13
13
|
[ \t\f]+
|
14
14
|
end
|
15
15
|
|
16
|
-
rule
|
17
|
-
|
16
|
+
rule linebreak
|
17
|
+
("\r" "\n"?) / "\n"
|
18
18
|
end
|
19
19
|
|
20
20
|
rule eol
|
21
|
-
|
21
|
+
linebreak !ws
|
22
|
+
end
|
23
|
+
|
24
|
+
rule comment
|
25
|
+
'//' text
|
22
26
|
end
|
23
27
|
|
28
|
+
|
29
|
+
|
30
|
+
|
24
31
|
rule number
|
25
32
|
([1-9]+ [0-9]* / '0') {
|
26
33
|
def value
|
@@ -45,8 +52,7 @@ grammar Lexer
|
|
45
52
|
number ws? time_unit:('seconds' / 'second' / 's' / 'minutes' / 'minute' / 'min' / 'hours' / 'hour' / 'hr' / 'h')
|
46
53
|
{
|
47
54
|
def seconds
|
48
|
-
|
49
|
-
when /^h/; 60*60; when /^mi/; 60; else 1; end
|
55
|
+
CEML.dur(number.text_value.to_f, time_unit.text_value)
|
50
56
|
end
|
51
57
|
}
|
52
58
|
end
|
@@ -65,12 +71,12 @@ grammar Lexer
|
|
65
71
|
rule range
|
66
72
|
(
|
67
73
|
min:number '-' max:number / floor:number '+'? /
|
68
|
-
'an' / 'a' / 'one' / 'the' / 'some' / 'several' / 'many'
|
74
|
+
'an' / 'a' / 'one' / 'the' / 'some' / 'several' / 'many' / 'all'
|
69
75
|
) {
|
70
76
|
def value
|
71
77
|
case text_value
|
72
78
|
when 'an', 'a', 'one', 'the' then (1..1)
|
73
|
-
when 'some'
|
79
|
+
when 'some', 'all' then (1..10000)
|
74
80
|
when 'several' then (3..10000)
|
75
81
|
when 'many' then (5..10000)
|
76
82
|
when /^\d+\+$/ then (floor.value..10000)
|
@@ -82,5 +88,62 @@ grammar Lexer
|
|
82
88
|
}
|
83
89
|
end
|
84
90
|
|
91
|
+
rule rolemap
|
92
|
+
mapped_role more:(and mapped_role)* {
|
93
|
+
def all; [mapped_role] + more.elements.map(&:mapped_role); end
|
94
|
+
def value; all.map(&:value); end
|
95
|
+
}
|
96
|
+
end
|
97
|
+
|
98
|
+
rule mapped_role
|
99
|
+
(rolename ws 'as' ws target_role:rolename / rolename '') {
|
100
|
+
def value
|
101
|
+
{
|
102
|
+
:from => rolename.text_value,
|
103
|
+
:to => respond_to?(:target_role) && target_role.text_value || '*'
|
104
|
+
}
|
105
|
+
end
|
106
|
+
}
|
107
|
+
end
|
108
|
+
|
109
|
+
rule roles
|
110
|
+
role more:(and role)* {
|
111
|
+
def list
|
112
|
+
[role] + more.elements.map{ |e| e.role }
|
113
|
+
end
|
114
|
+
|
115
|
+
def names; list.map{ |r| r.name.to_sym }; end
|
116
|
+
def [](x); list.detect{ |r| r.name.to_sym == x }; end
|
117
|
+
def min; list.map(&:min).inject(0, &:+); end
|
118
|
+
def max; list.map(&:max).inject(0, &:+); end
|
119
|
+
}
|
120
|
+
end
|
121
|
+
|
122
|
+
rule qualifier
|
123
|
+
id
|
124
|
+
end
|
125
|
+
|
126
|
+
rule rolename
|
127
|
+
id
|
128
|
+
end
|
129
|
+
|
130
|
+
rule role
|
131
|
+
(rolename &and / range ws qualifier ws rolename / range ws rolename / qualifier ws rolename / rolename) {
|
132
|
+
def name; if respond_to? :rolename then rolename.text_value else text_value end; end
|
133
|
+
def min
|
134
|
+
return range.value.min if respond_to? :range
|
135
|
+
name =~ /s$/ ? 2 : 1
|
136
|
+
end
|
137
|
+
def max
|
138
|
+
return range.value.max if respond_to? :range
|
139
|
+
name =~ /s$/ ? 10000 : 1
|
140
|
+
end
|
141
|
+
def qualifiers
|
142
|
+
return [qualifier.text_value] if respond_to? :qualifier
|
143
|
+
return []
|
144
|
+
end
|
145
|
+
}
|
146
|
+
end
|
147
|
+
|
85
148
|
end
|
86
149
|
end
|