ceml 0.7.13 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|