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.
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