wlang 0.10.2 → 2.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (269) hide show
  1. data/CHANGELOG.md +3 -121
  2. data/Gemfile +23 -1
  3. data/Gemfile.lock +32 -28
  4. data/LICENCE.md +18 -21
  5. data/Manifest.txt +4 -5
  6. data/README.md +100 -174
  7. data/Rakefile +1 -13
  8. data/bin/wlang +3 -29
  9. data/lib/wlang.rb +21 -394
  10. data/lib/wlang/command.rb +94 -0
  11. data/lib/wlang/compiler.rb +78 -0
  12. data/lib/wlang/compiler/autospacing.rb +60 -0
  13. data/lib/wlang/compiler/dialect_enforcer.rb +91 -0
  14. data/lib/wlang/compiler/filter.rb +32 -0
  15. data/lib/wlang/compiler/grammar.citrus +67 -0
  16. data/lib/wlang/compiler/parser.rb +26 -0
  17. data/lib/wlang/compiler/proc_call_removal.rb +15 -0
  18. data/lib/wlang/compiler/static_merger.rb +28 -0
  19. data/lib/wlang/compiler/strconcat_flattener.rb +25 -0
  20. data/lib/wlang/compiler/to_ruby_abstraction.rb +22 -0
  21. data/lib/wlang/compiler/to_ruby_code.rb +55 -0
  22. data/lib/wlang/dialect.rb +40 -237
  23. data/lib/wlang/dialect/dispatching.rb +51 -0
  24. data/lib/wlang/dialect/evaluation.rb +30 -0
  25. data/lib/wlang/dialect/tags.rb +50 -0
  26. data/lib/wlang/dummy.rb +32 -0
  27. data/lib/wlang/html.rb +106 -0
  28. data/lib/wlang/loader.rb +6 -0
  29. data/lib/wlang/mustang.rb +90 -0
  30. data/lib/wlang/scope.rb +57 -0
  31. data/lib/wlang/scope/binding_scope.rb +18 -0
  32. data/lib/wlang/scope/object_scope.rb +25 -0
  33. data/lib/wlang/scope/proxy_scope.rb +18 -0
  34. data/lib/wlang/scope/root_scope.rb +24 -0
  35. data/lib/wlang/template.rb +16 -86
  36. data/lib/wlang/version.rb +9 -8
  37. data/spec/fixtures/dialect/foobar.rb +31 -0
  38. data/spec/fixtures/dialect/upcasing.rb +13 -0
  39. data/spec/fixtures/templates/hello.tpl +1 -0
  40. data/spec/integration/examples/1-basics.txt +65 -0
  41. data/spec/integration/examples/2-imperative.txt +51 -0
  42. data/spec/integration/examples/3-partials.txt +76 -0
  43. data/spec/integration/examples/4-recursion.txt +16 -0
  44. data/spec/integration/html/test_ampersand.rb +15 -0
  45. data/spec/integration/html/test_bang.rb +38 -0
  46. data/spec/integration/html/test_caret.rb +33 -0
  47. data/spec/integration/html/test_dollar.rb +16 -0
  48. data/spec/integration/html/test_greater.rb +23 -0
  49. data/spec/integration/html/test_modulo.rb +16 -0
  50. data/spec/integration/html/test_plus.rb +48 -0
  51. data/spec/integration/html/test_question.rb +33 -0
  52. data/spec/integration/html/test_sharp.rb +21 -0
  53. data/spec/integration/html/test_slash.rb +16 -0
  54. data/spec/integration/html/test_star.rb +37 -0
  55. data/spec/integration/test_dummy.rb +51 -0
  56. data/spec/integration/test_examples.rb +29 -0
  57. data/spec/integration/test_mustang.rb +120 -0
  58. data/spec/integration/test_readme.rb +56 -0
  59. data/spec/integration/test_upcasing.rb +22 -0
  60. data/spec/spec_helper.rb +62 -1
  61. data/spec/test_wlang.rb +101 -0
  62. data/spec/unit/compiler/autospacing/test_right_strip.rb +30 -0
  63. data/spec/unit/compiler/autospacing/test_unindent.rb +30 -0
  64. data/spec/unit/compiler/test_dialect_enforcer.rb +168 -0
  65. data/spec/unit/compiler/test_grammar.rb +207 -0
  66. data/spec/unit/compiler/test_parser.rb +69 -0
  67. data/spec/unit/compiler/test_proc_call_removal.rb +24 -0
  68. data/spec/unit/compiler/test_static_merger.rb +29 -0
  69. data/spec/unit/compiler/test_strconcat_flattener.rb +30 -0
  70. data/spec/unit/compiler/test_to_ruby_abstraction.rb +59 -0
  71. data/spec/unit/compiler/test_to_ruby_code.rb +24 -0
  72. data/spec/unit/dialect/test_compile.rb +52 -0
  73. data/spec/unit/dialect/test_dispatching.rb +19 -0
  74. data/spec/unit/dialect/test_evaluate.rb +41 -0
  75. data/spec/unit/dialect/test_render.rb +33 -0
  76. data/spec/unit/dialect/test_tags.rb +32 -0
  77. data/spec/unit/dialect/test_with_scope.rb +18 -0
  78. data/spec/unit/scope/test_binding_scope.rb +27 -0
  79. data/spec/unit/scope/test_coerce.rb +22 -0
  80. data/spec/unit/scope/test_object_scope.rb +38 -0
  81. data/spec/unit/scope/test_proxy_scope.rb +22 -0
  82. data/spec/unit/scope/test_root_scope.rb +22 -0
  83. data/spec/unit/test_assumptions.rb +29 -0
  84. data/spec/unit/test_scope.rb +57 -0
  85. data/tasks/debug_mail.rake +42 -45
  86. data/tasks/gem.rake +22 -17
  87. data/tasks/spec_test.rake +9 -17
  88. data/tasks/unit_test.rake +11 -12
  89. data/tasks/yard.rake +13 -13
  90. data/wlang.gemspec +36 -32
  91. data/wlang.noespec +27 -35
  92. metadata +268 -451
  93. data/doc/specification/about.rdoc +0 -61
  94. data/doc/specification/analytics.wtpl +0 -13
  95. data/doc/specification/dialect.wtpl +0 -14
  96. data/doc/specification/dialects.wtpl +0 -3
  97. data/doc/specification/examples.rb +0 -3
  98. data/doc/specification/glossary.wtpl +0 -14
  99. data/doc/specification/hosting.rdoc +0 -0
  100. data/doc/specification/overview.rdoc +0 -116
  101. data/doc/specification/rulesets.wtpl +0 -87
  102. data/doc/specification/specification.css +0 -53
  103. data/doc/specification/specification.html +0 -1690
  104. data/doc/specification/specification.js +0 -8
  105. data/doc/specification/specification.wtpl +0 -42
  106. data/doc/specification/specification.yml +0 -432
  107. data/doc/specification/symbols.wtpl +0 -16
  108. data/lib/wlang/dialect_dsl.rb +0 -141
  109. data/lib/wlang/dialect_loader.rb +0 -74
  110. data/lib/wlang/dialects/bluecloth_dialect.rb +0 -16
  111. data/lib/wlang/dialects/coderay_dialect.rb +0 -45
  112. data/lib/wlang/dialects/hosted_dialect.rb +0 -50
  113. data/lib/wlang/dialects/plain_text_dialect.rb +0 -69
  114. data/lib/wlang/dialects/rdoc_dialect.rb +0 -33
  115. data/lib/wlang/dialects/redcloth_dialect.rb +0 -16
  116. data/lib/wlang/dialects/ruby_dialect.rb +0 -118
  117. data/lib/wlang/dialects/sql_dialect.rb +0 -38
  118. data/lib/wlang/dialects/standard_dialects.rb +0 -181
  119. data/lib/wlang/dialects/xhtml_dialect.rb +0 -63
  120. data/lib/wlang/dialects/yaml_dialect.rb +0 -30
  121. data/lib/wlang/encoder.rb +0 -62
  122. data/lib/wlang/encoder_set.rb +0 -122
  123. data/lib/wlang/errors.rb +0 -80
  124. data/lib/wlang/ext/hash_methodize.rb +0 -13
  125. data/lib/wlang/ext/string.rb +0 -44
  126. data/lib/wlang/hash_scope.rb +0 -89
  127. data/lib/wlang/hosted_language.rb +0 -146
  128. data/lib/wlang/intelligent_buffer.rb +0 -94
  129. data/lib/wlang/parser.rb +0 -332
  130. data/lib/wlang/parser_state.rb +0 -94
  131. data/lib/wlang/rule.rb +0 -66
  132. data/lib/wlang/rule_set.rb +0 -106
  133. data/lib/wlang/rulesets/basic_ruleset.rb +0 -83
  134. data/lib/wlang/rulesets/buffering_ruleset.rb +0 -115
  135. data/lib/wlang/rulesets/context_ruleset.rb +0 -111
  136. data/lib/wlang/rulesets/encoding_ruleset.rb +0 -73
  137. data/lib/wlang/rulesets/imperative_ruleset.rb +0 -132
  138. data/lib/wlang/rulesets/ruleset_utils.rb +0 -317
  139. data/lib/wlang/wlang_command.rb +0 -51
  140. data/lib/wlang/wlang_command_options.rb +0 -163
  141. data/spec/basic_object.spec +0 -40
  142. data/spec/coderay_dialect.spec +0 -8
  143. data/spec/dialect/apply_post_transform.spec +0 -16
  144. data/spec/global_extensions.rb +0 -2
  145. data/spec/hash_scope.spec +0 -76
  146. data/spec/redcloth_dialect.spec +0 -24
  147. data/spec/test_all.rb +0 -8
  148. data/spec/wlang.spec +0 -53
  149. data/spec/wlang_spec.rb +0 -8
  150. data/spec/xhtml_dialect.spec +0 -22
  151. data/tasks/genspec.rake +0 -5
  152. data/test/blackbox/basic/execution_1.exp +0 -1
  153. data/test/blackbox/basic/execution_1.tpl +0 -1
  154. data/test/blackbox/basic/execution_2.exp +0 -1
  155. data/test/blackbox/basic/execution_2.tpl +0 -1
  156. data/test/blackbox/basic/execution_3.exp +0 -1
  157. data/test/blackbox/basic/execution_3.tpl +0 -1
  158. data/test/blackbox/basic/execution_4.exp +0 -1
  159. data/test/blackbox/basic/execution_4.tpl +0 -1
  160. data/test/blackbox/basic/inclusion_1.exp +0 -1
  161. data/test/blackbox/basic/inclusion_1.tpl +0 -1
  162. data/test/blackbox/basic/inclusion_2.exp +0 -1
  163. data/test/blackbox/basic/inclusion_2.tpl +0 -1
  164. data/test/blackbox/basic/injection_1.exp +0 -1
  165. data/test/blackbox/basic/injection_1.tpl +0 -1
  166. data/test/blackbox/basic/injection_2.exp +0 -1
  167. data/test/blackbox/basic/injection_2.tpl +0 -1
  168. data/test/blackbox/basic/modulation_1.exp +0 -1
  169. data/test/blackbox/basic/modulation_1.tpl +0 -1
  170. data/test/blackbox/basic/modulation_2.exp +0 -1
  171. data/test/blackbox/basic/modulation_2.tpl +0 -1
  172. data/test/blackbox/basic/recursive_app_1.exp +0 -1
  173. data/test/blackbox/basic/recursive_app_1.tpl +0 -1
  174. data/test/blackbox/basic/recursive_app_2.exp +0 -1
  175. data/test/blackbox/basic/recursive_app_2.tpl +0 -1
  176. data/test/blackbox/buffering/data_1.rb +0 -1
  177. data/test/blackbox/buffering/data_assignment_1.exp +0 -1
  178. data/test/blackbox/buffering/data_assignment_1.tpl +0 -1
  179. data/test/blackbox/buffering/data_assignment_2.exp +0 -1
  180. data/test/blackbox/buffering/data_assignment_2.tpl +0 -1
  181. data/test/blackbox/buffering/data_assignment_3.exp +0 -1
  182. data/test/blackbox/buffering/data_assignment_3.tpl +0 -1
  183. data/test/blackbox/buffering/data_assignment_4.exp +0 -1
  184. data/test/blackbox/buffering/data_assignment_4.tpl +0 -1
  185. data/test/blackbox/buffering/input_1.exp +0 -1
  186. data/test/blackbox/buffering/input_1.tpl +0 -1
  187. data/test/blackbox/buffering/input_2.exp +0 -1
  188. data/test/blackbox/buffering/input_2.tpl +0 -1
  189. data/test/blackbox/buffering/input_3.exp +0 -1
  190. data/test/blackbox/buffering/input_3.tpl +0 -1
  191. data/test/blackbox/buffering/input_inclusion.exp +0 -1
  192. data/test/blackbox/buffering/input_inclusion.tpl +0 -1
  193. data/test/blackbox/buffering/input_inclusion_1.exp +0 -0
  194. data/test/blackbox/buffering/input_inclusion_1.tpl +0 -1
  195. data/test/blackbox/buffering/input_inclusion_2.exp +0 -1
  196. data/test/blackbox/buffering/input_inclusion_2.tpl +0 -1
  197. data/test/blackbox/buffering/input_inclusion_3.exp +0 -1
  198. data/test/blackbox/buffering/input_inclusion_3.tpl +0 -1
  199. data/test/blackbox/buffering/input_inclusion_4.exp +0 -0
  200. data/test/blackbox/buffering/input_inclusion_4.tpl +0 -1
  201. data/test/blackbox/buffering/input_inclusion_5.exp +0 -1
  202. data/test/blackbox/buffering/input_inclusion_5.tpl +0 -1
  203. data/test/blackbox/buffering/input_inclusion_6.exp +0 -1
  204. data/test/blackbox/buffering/input_inclusion_6.tpl +0 -1
  205. data/test/blackbox/buffering/input_inclusion_7.exp +0 -0
  206. data/test/blackbox/buffering/input_inclusion_7.tpl +0 -1
  207. data/test/blackbox/buffering/text_1.txt +0 -1
  208. data/test/blackbox/buffering/wlang.txt +0 -1
  209. data/test/blackbox/context/assignment_1.exp +0 -1
  210. data/test/blackbox/context/assignment_1.tpl +0 -1
  211. data/test/blackbox/context/assignment_2.exp +0 -1
  212. data/test/blackbox/context/assignment_2.tpl +0 -1
  213. data/test/blackbox/context/assignment_3.exp +0 -2
  214. data/test/blackbox/context/assignment_3.tpl +0 -2
  215. data/test/blackbox/context/assignment_4.exp +0 -1
  216. data/test/blackbox/context/assignment_4.tpl +0 -1
  217. data/test/blackbox/context/block_assignment_1.exp +0 -1
  218. data/test/blackbox/context/block_assignment_1.tpl +0 -1
  219. data/test/blackbox/context/block_assignment_2.exp +0 -1
  220. data/test/blackbox/context/block_assignment_2.tpl +0 -1
  221. data/test/blackbox/context/modulo_assignment_1.exp +0 -1
  222. data/test/blackbox/context/modulo_assignment_1.tpl +0 -1
  223. data/test/blackbox/context/modulo_assignment_2.exp +0 -1
  224. data/test/blackbox/context/modulo_assignment_2.tpl +0 -1
  225. data/test/blackbox/data_1.rb +0 -1
  226. data/test/blackbox/postblock/hello.exp +0 -1
  227. data/test/blackbox/postblock/hello.pre +0 -1
  228. data/test/blackbox/postblock/hello.tpl +0 -1
  229. data/test/blackbox/postblock/hello_input_inclusion.exp +0 -1
  230. data/test/blackbox/postblock/hello_input_inclusion.tpl +0 -1
  231. data/test/blackbox/postblock/hello_to_authors.exp +0 -1
  232. data/test/blackbox/postblock/hello_to_authors.tpl +0 -1
  233. data/test/blackbox/poststring/hello.exp +0 -1
  234. data/test/blackbox/poststring/hello.tpl +0 -1
  235. data/test/blackbox/test_all.rb +0 -70
  236. data/test/standard_dialects/ruby/data.rb +0 -7
  237. data/test/standard_dialects/ruby/inclusion.exp +0 -6
  238. data/test/standard_dialects/ruby/inclusion.tpl +0 -6
  239. data/test/standard_dialects/test_all.rb +0 -29
  240. data/test/standard_dialects/yaml/assumptions_test.rb +0 -13
  241. data/test/standard_dialects/yaml/data.rb +0 -3
  242. data/test/standard_dialects/yaml/inclusion_1.exp +0 -7
  243. data/test/standard_dialects/yaml/inclusion_1.tpl +0 -2
  244. data/test/standard_dialects/yaml/inclusion_2.exp +0 -5
  245. data/test/standard_dialects/yaml/inclusion_2.tpl +0 -3
  246. data/test/unit/test_all.rb +0 -9
  247. data/test/unit/wlang/anagram_bugs_test.rb +0 -111
  248. data/test/unit/wlang/basic_ruleset_test.rb +0 -52
  249. data/test/unit/wlang/buffering_ruleset_test.rb +0 -102
  250. data/test/unit/wlang/buffering_template1.wtpl +0 -1
  251. data/test/unit/wlang/buffering_template2.wtpl +0 -1
  252. data/test/unit/wlang/buffering_template3.wtpl +0 -1
  253. data/test/unit/wlang/buffering_template4.wtpl +0 -1
  254. data/test/unit/wlang/buffering_template5.wtpl +0 -1
  255. data/test/unit/wlang/context_ruleset_test.rb +0 -32
  256. data/test/unit/wlang/data.rb +0 -3
  257. data/test/unit/wlang/encoder_set_test.rb +0 -42
  258. data/test/unit/wlang/imperative_ruleset_test.rb +0 -107
  259. data/test/unit/wlang/intelligent_buffer_test.rb +0 -194
  260. data/test/unit/wlang/othersymbols_test.rb +0 -16
  261. data/test/unit/wlang/parser_test.rb +0 -88
  262. data/test/unit/wlang/plain_text_dialect_test.rb +0 -21
  263. data/test/unit/wlang/ruby_dialect_test.rb +0 -100
  264. data/test/unit/wlang/ruby_expected.rb +0 -3
  265. data/test/unit/wlang/ruby_template.wrb +0 -3
  266. data/test/unit/wlang/ruleset_utils_test.rb +0 -245
  267. data/test/unit/wlang/specification_examples_test.rb +0 -54
  268. data/test/unit/wlang/test_utils.rb +0 -25
  269. data/test/unit/wlang/wlang_test.rb +0 -80
@@ -1,16 +0,0 @@
1
- <table class="symbols">
2
- <tr>
3
- <th class="name">name</th>
4
- <th class="symbol">symbol</th>
5
- <th class="meaning">meaning</th>
6
- <th class="remark">remark</th>
7
- </tr>
8
- *{spec.symbols as s}{
9
- <tr>
10
- <td><em>${s.name}</em></td>
11
- <td>${s.symbol}</td>
12
- <td>${s.meaning}</td>
13
- <td>${s.remark}</td>
14
- </tr>
15
- }
16
- </table>
@@ -1,141 +0,0 @@
1
- module WLang
2
- class Dialect
3
-
4
- #
5
- # Installs the Domain Specific Language allowing to create new dialects easily.
6
- # Below is a self-explaining example on how to use it.
7
- #
8
- # #
9
- # # Starts a new _wlang_ dialect that will have children.
10
- # #
11
- # WLang::dialect("wlang") do
12
- #
13
- # #
14
- # # Starts a _wlang/xhtml_ dialect that will be attached to .wtpl and .whtml
15
- # # file extensions.
16
- # #
17
- # dialect("xhtml", ".wtpl", ".whtm") do
18
- #
19
- # # If your dialect needs external gems or files, use ruby_require instead
20
- # # of built-in require: it will allow avoiding all users to have required
21
- # # dependencies for dialects they don't use.
22
- # ruby_require "somegem", "wlang/rulesets/basic_ruleset", "wlang/dialects/coderay_dialect" do
23
- #
24
- # # RuleSet defined as Ruby modules can be installed using _rules_.
25
- # # Here: we automatically add the standard Basic ruleset to our dialect.
26
- # rules WLang::RuleSet::Basic
27
- #
28
- # # You can also install inline rules if they are not designed to be
29
- # # reusable by others.
30
- # # Here, we add a #{...} rule that replaces all spaces by '#' symbols
31
- # # For rule implementation, see Rule class.
32
- # rule "#" do |parser, offset|
33
- # text, reached = parser.parse(offset)
34
- # text = text.gsub(/\s/, '#')
35
- # [text, reached]
36
- # end
37
- #
38
- # # Encoders can be installed the same way(s)
39
- # # Here: we install all coderay encoders defined in a module
40
- # encoders WLang::EncoderSet::CodeRay
41
- #
42
- # # And inline encoders can be installed as well
43
- # # Encoder below will be allowed as ^{wlang/xhtml/upcase}{...} for example
44
- # encoder 'upcase' do |src, options|
45
- # src.upcase
46
- # end
47
- #
48
- # end # ruby_require
49
- #
50
- # end # wlang/xhtml dialect
51
- #
52
- # end # wlang dialect
53
- #
54
- class DSL
55
-
56
- # Initializes dsl with a real dialect instance
57
- def initialize(dialect)
58
- raise(ArgumentError, "Dialect expected") unless WLang::Dialect===dialect
59
- @dialect = dialect
60
- end
61
-
62
- #
63
- # Handles dialect dependencies: all _src_ dependencies will be correctly loaded
64
- # at dialect building time (dialect are lazy loaded to avoid having all users
65
- # to have all dependencies of standard dialects).
66
- #
67
- # This method should always be used instead of _require_. It takes a block that
68
- # will be executed at building-time. Any code with dependency usage should be
69
- # part of the block !
70
- #
71
- def ruby_require(*src) end
72
-
73
- #
74
- # Starts definition of a sub-dialect of the current one. _name_ is not allowed
75
- # to be a qualified name. _extensions_ allows wlang to automatically infer
76
- # dialects used by template files. A block is expected and should contain
77
- # sub-dialect installation.
78
- #
79
- def dialect(name, *extensions, &block)
80
- child = WLang::Dialect.new(name, @dialect, &block)
81
- extensions.each do |ext|
82
- ext = ('.' << ext) unless ext[0,1]=='.'
83
- WLang::FILE_EXTENSIONS[ext] = child.qualified_name
84
- end
85
- @dialect.add_child_dialect(name, child)
86
- end
87
-
88
- #
89
- # Sets a transformer to use at end of generation time.
90
- #
91
- def post_transform(transformer = nil, &block) end
92
-
93
- #
94
- # Adds a dialect encoder under _name_. Encoder's code is provided by the block.
95
- # This block should always take <tt>|src, options|</tt> arguments: _src_ is
96
- # the string to encode, _options_ is a Hash instance containing additional
97
- # encoding options.
98
- #
99
- def encoder(name, &block) end
100
-
101
- #
102
- # Adds reusable encoders defined in a Ruby module. _mod_ must be a Module instance.
103
- # If _pairs_ is ommitted (nil), all encoders of the module are added, under their
104
- # standard names (see DEFAULT_ENCODERS under WLang::EncoderSet::XHtml for example).
105
- # Otherwise, _pairs_ is expected to be a Hash providing a mapping between encoder
106
- # names and _mod_ methods (whose names are given by ruby symbols).
107
- #
108
- def encoders(mod, pairs=nil) end
109
-
110
- #
111
- # Maps an inline rule with some tag symbols. _symbol_ must be ASCII symbols
112
- # allowed by the wlang specification. The rule implementation is provided by
113
- # the block. see Rule class about rule implementation.
114
- #
115
- def rule(symbol, &block) end
116
-
117
- #
118
- # Adds reusable rules defined in a Ruby module. _mod_ must be a Module instance.
119
- # If _pairs_ is ommitted (nil), all rules of the module are added, under their
120
- # standard tag symbols (see DEFAULT_RULESET under WLang::RuleSet::Basic for example).
121
- # Otherwise, _pairs_ is expected to be a Hash providing a mapping between tag
122
- # symbols and _mod_ methods (whose names are given by ruby symbols).
123
- #
124
- def rules(mod, pairs=nil) end
125
-
126
- #
127
- # Request wlang to associate _args_ files extensions with this dialect. File
128
- # extensions may also be installed at construction (see dialect).
129
- #
130
- def extensions(*args)
131
- args.each do |ext|
132
- ext = ('.' << ext) unless ext[0,1]=='.'
133
- WLang::FILE_EXTENSIONS[ext] = @dialect.qualified_name
134
- end
135
- end
136
- alias :extension :extensions
137
-
138
- end # class DSL
139
-
140
- end
141
- end
@@ -1,74 +0,0 @@
1
- module WLang
2
- class Dialect
3
-
4
- #
5
- # Implements the same API as WLang::Dialect::DSL but used for effective loading.
6
- # This class exists because of the lazy loading design pattern implemented by
7
- # wlang on dialects. It does not convey any user-centric information.
8
- #
9
- class Loader
10
-
11
- # Initializes dsl with a real dialect instance
12
- def initialize(dialect)
13
- @dialect = dialect
14
- end
15
-
16
- # See WLang::Dialect::DSL#ruby_require
17
- def ruby_require(*src)
18
- src.each do |s|
19
- begin
20
- require "rubygems" unless "wlang"==s[0,5]
21
- rescue LoadError => ex
22
- STDERR.puts "= Error, wlang depends on 'rubygems'\n"\
23
- "= Please install it (methods differs from system, in debian : 'apt-get install rubygems')\n"\
24
- "= Exception raised : '#{ex.message}'"
25
- exit -1
26
- end
27
- begin
28
- require s
29
- rescue LoadError => ex
30
- STDERR.puts "= Error in dialect '#{@dialect}'\n"\
31
- "= This dialect depends on gem or file '#{s}' (try: 'gem install #{s}')\n"\
32
- "= Exception raised : '#{ex.message}'"
33
- exit -1
34
- end
35
- end
36
- yield if block_given?
37
- end
38
-
39
- # See WLang::Dialect::DSL#dialect
40
- def dialect(name, *extensions, &block) end
41
-
42
- # See WLang::Dialect::DSL::post_transformer
43
- def post_transform(transformer = nil, &block)
44
- @dialect.post_transformer = (transformer || block)
45
- end
46
-
47
- # See WLang::Dialect::DSL#encoder
48
- def encoder(name, &block)
49
- @dialect.add_encoder(name, &block)
50
- end
51
-
52
- # See WLang::Dialect::DSL#encoders
53
- def encoders(mod, pairs=nil)
54
- @dialect.add_encoders(mod, pairs)
55
- end
56
-
57
- # See WLang::Dialect::DSL#rule
58
- def rule(symbol, &block)
59
- @dialect.add_rule(symbol, &block)
60
- end
61
-
62
- # See WLang::Dialect::DSL#rules
63
- def rules(mod, pairs=nil)
64
- @dialect.add_rules(mod, pairs)
65
- end
66
-
67
- # See WLang::Dialect::DSL#extensions
68
- def extensions(*args) end
69
- alias :extension :extensions
70
-
71
- end # class Loader
72
-
73
- end
74
- end
@@ -1,16 +0,0 @@
1
- require 'rubygems'
2
- module WLang
3
- class EncoderSet
4
- module BlueClothEncoders
5
-
6
- # Default encoders
7
- DEFAULT_ENCODERS = {"xhtml" => :xhtml_encoding}
8
-
9
- # RDoc encoding
10
- def self.xhtml_encoding(src, options)
11
- BlueCloth.new(src).to_html
12
- end
13
-
14
- end # BlueClothEncoders
15
- end # module EncoderSet
16
- end # module WLang
@@ -1,45 +0,0 @@
1
- require 'rubygems'
2
- require 'coderay'
3
- module WLang
4
- class EncoderSet
5
-
6
- #
7
- # Allows coderay highlighter to be used as encoder. When using standard dialects,
8
- # these encoders are installed under <tt>xhtml/coderay/ruby</tt>,
9
- # <tt>xhtml/coderay/html</tt>, etc. qualified names.
10
- #
11
- # Available languages are: java, ruby, html, yaml.
12
- #
13
- module CodeRayEncoderSet
14
-
15
- # Coderay recognized formats
16
- RECOGNIZED = ["java", "ruby", "html", "yaml", "sql", "css", "javascript", "json", "php", "xml"]
17
-
18
- # Default encoders
19
- DEFAULT_ENCODERS = {}
20
- RECOGNIZED.each{|f| DEFAULT_ENCODERS[f] = f.to_sym}
21
-
22
- # Upcase encoding
23
- def self.coderay(src, options)
24
- /([a-z]+)$/ =~ options['_encoder_']
25
- encoder = $1.to_sym
26
- tokens = CodeRay.scan src, encoder
27
- highlighted = tokens.html({
28
- :wrap => :div,
29
- :css => :class}
30
- )
31
- return highlighted
32
- end
33
-
34
- RECOGNIZED.each{|f|
35
- module_eval <<-EOF
36
- def self.#{f}(src, options)
37
- WLang::EncoderSet::CodeRayEncoderSet.coderay(src, options.merge('_encoder_' => #{f.inspect}))
38
- end
39
- EOF
40
- }
41
-
42
- end # module CodeRay
43
-
44
- end
45
- end
@@ -1,50 +0,0 @@
1
- module WLang
2
- class EncoderSet
3
-
4
- # Encoders for ruby
5
- module Hosted
6
-
7
- # Default encoders
8
- DEFAULT_ENCODERS = {"main-encoding" => :main_encoding,
9
- "single-quoting" => :single_quoting,
10
- "double-quoting" => :double_quoting,
11
- "regex-escaping" => :regex_escaping,
12
- "method-case" => :method_case}
13
-
14
- # No-op encoding here
15
- def self.main_encoding(src, options); src; end
16
-
17
- # Single-quoting encoding
18
- def self.single_quoting(src, options); src.gsub(/([^\\])'/,%q{\1\\\'}); end
19
-
20
- # Double-quoting encoding
21
- def self.double_quoting(src, options); src.gsub('"','\"'); end
22
-
23
- # Regexp-escaping encoding
24
- def self.regex_escaping(src, options); Regexp.escape(src); end
25
-
26
- # Converts any source to a typical ruby method name
27
- def self.method_case(src, options)
28
- src.strip.gsub(/[^a-zA-Z0-9\s]/," ").
29
- gsub(/([A-Z])/){ " " + $1.downcase}.
30
- strip.
31
- gsub(/^([^a-z])/){ "_" + $1 }.
32
- gsub(/\s+/){"_"}
33
- end
34
-
35
-
36
- end # module Hosted
37
-
38
- end
39
- class RuleSet
40
-
41
- # Defines rulset of the wlang/ruby dialect
42
- module Hosted
43
-
44
- # Default mapping between tag symbols and methods
45
- DEFAULT_RULESET = {}
46
-
47
- end # module Hosted
48
-
49
- end # class RuleSet
50
- end # module WLang
@@ -1,69 +0,0 @@
1
- module WLang
2
- class EncoderSet
3
-
4
- # Defines encoders of the plain-text dialect
5
- module PlainText
6
-
7
- # Default encoders
8
- DEFAULT_ENCODERS = {"upcase" => :upcase,
9
- "downcase" => :downcase,
10
- "capitalize" => :capitalize,
11
- "camel" => :camel_case,
12
- "camel-case" => :camel_case,
13
- "upper-camel" => :camel_case,
14
- "lower-camel" => :lower_camel_case}
15
-
16
- # Upcase encoding
17
- def self.upcase(src, options); src.upcase; end
18
-
19
- # Downcase encoding
20
- def self.downcase(src, options); src.downcase; end
21
-
22
- # Capitalize encoding
23
- def self.capitalize(src, options); src.capitalize; end
24
-
25
- # Converts a string as CamelCase
26
- def self.camel_case(src, options)
27
- src.gsub!(/[^a-zA-Z\s]/," ")
28
- src = " " + src.split.join(" ")
29
- src.gsub!(/ (.)/) { $1.upcase }
30
- end
31
-
32
- # Converts a string to lower camelCase
33
- def self.lower_camel_case(src, options)
34
- camel_case(src, options).gsub(/^([A-Z])/){ $1.downcase }
35
- end
36
-
37
- end # module PlainText
38
-
39
- end
40
- class RuleSet
41
-
42
- # Defines rulset of the plain-text dialect
43
- module PlainText
44
-
45
- # Default mapping between tag symbols and methods
46
- DEFAULT_RULESET = {'+' => :upcase, '-' => :downcase}
47
-
48
- # Upcase rule as <tt>+{wlang/hosted}</tt>
49
- def self.upcase(parser, offset)
50
- expression, reached = parser.parse(offset, "wlang/hosted")
51
- value = parser.evaluate(expression)
52
- value = value.nil? ? "" : value.to_s
53
- result = WLang::EncoderSet::PlainText.upcase(value)
54
- [result, reached]
55
- end
56
-
57
- # Downcase rule as <tt>-{wlang/hosted}</tt>
58
- def self.downcase(parser, offset)
59
- expression, reached = parser.parse(offset, "wlang/hosted")
60
- value = parser.evaluate(expression)
61
- value = value.nil? ? "" : value.to_s
62
- result = EncoderSet::PlainText.downcase(value)
63
- [result, reached]
64
- end
65
-
66
- end # module PlainText
67
-
68
- end
69
- end
@@ -1,33 +0,0 @@
1
- require 'rubygems'
2
- require 'rdoc/markup/to_html'
3
- module WLang
4
- class EncoderSet
5
-
6
- # Provides the rdoc encoder
7
- module RDocEncoders
8
-
9
- # Default encoders
10
- DEFAULT_ENCODERS = {"html" => :rdoc_encoding, "div" => :rdoc_encoding, "nop" => :nop_encoding}
11
-
12
- # RDoc encoding
13
- def self.rdoc_encoding(src, options);
14
- encoder = RDoc::Markup::ToHtml.new
15
- if options['_template_'] and options['_template_'].source_file
16
- encoder.instance_eval do
17
- @from_path = File.dirname(options['_template_'].source_file)
18
- end
19
- end
20
- encoder.convert(src)
21
- end
22
-
23
- # RDoc encoding, removing enclosing <tt><p>...</p></tt>
24
- def self.nop_encoding(src, options);
25
- rdoc = RDoc::Markup::ToHtml.new.convert(src)
26
- rdoc = $1 if /^\s*<p>\s*(.*?)\s+<\/p>\s*$/m =~ rdoc
27
- rdoc
28
- end
29
-
30
- end # RDoc
31
-
32
- end
33
- end