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
@@ -0,0 +1,86 @@
1
+ module CEML
2
+ grammar Instructions
3
+ include Lexer
4
+
5
+ rule basic_statement
6
+ (ask_stmt / tell_stmt / assign_stmt / record_stmt / set_stmt / pick_stmt / seed_stmt / sync_stmt /
7
+ replace_stmt / release_stmt)
8
+ end
9
+
10
+ rule instruction_stmt
11
+ later:later? basic_statement {
12
+ def delay
13
+ later.duration.seconds if respond_to? :later and not later.empty?
14
+ end
15
+
16
+ def bytecode
17
+ if delay
18
+ [[[role], :start_delay, delay], [[role], :complete_delay]] + elements[1].bytecode
19
+ else
20
+ elements[1].bytecode
21
+ end
22
+ end
23
+ }
24
+ end
25
+
26
+ rule later
27
+ duration ws 'later' ','? ws
28
+ end
29
+
30
+ rule seed_stmt
31
+ 'seed' ws varname:id ws 'with' ws rolemap <BasicInstruction> {
32
+ def roles
33
+ rolemap.value.map do |x| x[:from].to_sym end
34
+ end
35
+ def bytecode
36
+ [[roles, :seed, {:target => varname.text_value, :rolemap => rolemap.value}]]
37
+ end
38
+ }
39
+ end
40
+
41
+ rule record_stmt
42
+ 'record' ws id ws varname:id <BasicInstruction>
43
+ end
44
+
45
+ rule tell_stmt
46
+ 'tell' ws id ':' ws? text <BasicInstruction>
47
+ end
48
+
49
+ rule assign_stmt
50
+ 'assign' ws id ':' ws? text <BasicInstruction>
51
+ end
52
+
53
+ rule ask_stmt
54
+ 'ask' ws id about:(ws 're' ws varname:id)? ':' ws? text <BasicInstruction>
55
+ end
56
+
57
+ rule set_stmt
58
+ 'set' ws id ws varname:id ':' ws? text <BasicInstruction>
59
+ end
60
+
61
+ rule pick_stmt
62
+ 'pick' ws id ws varname:id ':' ws? text <BasicInstruction>
63
+ end
64
+
65
+ rule sync_stmt
66
+ 'sync' ws id <BasicInstruction>
67
+ end
68
+
69
+ rule release_stmt
70
+ 'release' ws id condition:condition? <BasicInstruction>
71
+ end
72
+
73
+ rule replace_stmt
74
+ 'replace' ws id condition:condition? <BasicInstruction>
75
+ end
76
+
77
+ rule condition
78
+ ws type:('if' / 'unless') ws thing:id {
79
+ def value
80
+ [type.text_value.to_sym, thing.text_value.to_sym]
81
+ end
82
+ }
83
+ end
84
+
85
+ end
86
+ end