ceml 0.7.13 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/Makefile +1 -1
  2. data/VERSION +1 -1
  3. data/ceml.gemspec +62 -50
  4. data/guide/guide.html +69 -14
  5. data/guide/guide.md +74 -15
  6. data/guide/guide.pdf +0 -0
  7. data/lib/ceml/driver.rb +0 -181
  8. data/lib/ceml/lang/basic_instruction.rb +49 -0
  9. data/lib/ceml/{casting_statement.rb → lang/casting_statement.rb} +19 -9
  10. data/lib/ceml/{instruction_statements.rb → lang/instruction_statements.rb} +5 -16
  11. data/lib/ceml/{script.rb → lang/script.rb} +53 -43
  12. data/lib/ceml/lang/tt/casting.rb +432 -0
  13. data/lib/ceml/lang/tt/casting.treetop +29 -0
  14. data/lib/ceml/lang/tt/instructions.rb +1130 -0
  15. data/lib/ceml/lang/tt/instructions.treetop +86 -0
  16. data/lib/ceml/lang/tt/lexer.rb +1804 -0
  17. data/lib/ceml/{tt → lang/tt}/lexer.treetop +70 -7
  18. data/lib/ceml/lang/tt/scripts.rb +647 -0
  19. data/lib/ceml/{tt → lang/tt}/scripts.treetop +2 -2
  20. data/lib/ceml/lang.rb +10 -0
  21. data/lib/ceml/models/audition.rb +65 -0
  22. data/lib/ceml/models/bundle.rb +64 -0
  23. data/lib/ceml/models/cast.rb +108 -0
  24. data/lib/ceml/models/castable.rb +81 -0
  25. data/lib/ceml/{incident.rb → models/incident.rb} +63 -15
  26. data/lib/ceml/models/incident_model.rb +100 -0
  27. data/lib/ceml/models/incident_role_slot.rb +16 -0
  28. data/lib/ceml/models/player.rb +80 -0
  29. data/lib/ceml/models/queue.rb +12 -0
  30. data/lib/ceml/models/waiting_room.rb +40 -0
  31. data/lib/ceml/models.rb +16 -0
  32. data/lib/ceml/processor.rb +162 -0
  33. data/lib/ceml.rb +7 -14
  34. data/test/askchain.ceml +6 -0
  35. data/test/compliment.ceml +4 -0
  36. data/test/dialogues/accept.ceml +24 -0
  37. data/test/dialogues/basic_seed.ceml +26 -0
  38. data/test/dialogues/jordan.ceml +121 -0
  39. data/test/helper.rb +44 -39
  40. data/test/jane.ceml +48 -0
  41. data/test/{test_casting.rb → lang/test_casting.rb} +5 -0
  42. data/test/lang/test_instructions.rb +42 -0
  43. data/test/{test_scripts.rb → lang/test_scripts.rb} +3 -2
  44. data/test/sync.ceml +6 -0
  45. data/test/test_castable.rb +20 -0
  46. data/test/test_dialogues.rb +58 -0
  47. data/test/test_incident.rb +64 -127
  48. metadata +54 -30
  49. data/.gitignore +0 -23
  50. data/lib/ceml/confluence.rb +0 -63
  51. data/lib/ceml/role.rb +0 -61
  52. data/lib/ceml/tt/casting.treetop +0 -65
  53. data/lib/ceml/tt/instructions.treetop +0 -91
  54. data/test/test_instructions.rb +0 -27
  55. data/test/test_release.rb +0 -78
@@ -13,14 +13,21 @@ grammar Lexer
13
13
  [ \t\f]+
14
14
  end
15
15
 
16
- rule comment
17
- '//' text
16
+ rule linebreak
17
+ ("\r" "\n"?) / "\n"
18
18
  end
19
19
 
20
20
  rule eol
21
- ("\r" "\n"?) / "\n"
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
- number.text_value.to_f * case time_unit.text_value
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' then (1..10000)
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