wlang 0.8.4

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 (73) hide show
  1. data/LICENCE.rdoc +25 -0
  2. data/README.rdoc +111 -0
  3. data/bin/wlang +24 -0
  4. data/doc/specification/about.rdoc +61 -0
  5. data/doc/specification/dialects.wtpl +0 -0
  6. data/doc/specification/examples.rb +3 -0
  7. data/doc/specification/glossary.wtpl +14 -0
  8. data/doc/specification/hosting.rdoc +0 -0
  9. data/doc/specification/overview.rdoc +116 -0
  10. data/doc/specification/rulesets.wtpl +87 -0
  11. data/doc/specification/specification.css +52 -0
  12. data/doc/specification/specification.html +1361 -0
  13. data/doc/specification/specification.js +8 -0
  14. data/doc/specification/specification.wtpl +41 -0
  15. data/doc/specification/specification.yml +430 -0
  16. data/doc/specification/symbols.wtpl +16 -0
  17. data/lib/wlang.rb +186 -0
  18. data/lib/wlang/basic_object.rb +19 -0
  19. data/lib/wlang/dialect.rb +230 -0
  20. data/lib/wlang/dialect_dsl.rb +136 -0
  21. data/lib/wlang/dialect_loader.rb +69 -0
  22. data/lib/wlang/dialects/coderay_dialect.rb +35 -0
  23. data/lib/wlang/dialects/plain_text_dialect.rb +75 -0
  24. data/lib/wlang/dialects/rdoc_dialect.rb +33 -0
  25. data/lib/wlang/dialects/ruby_dialect.rb +35 -0
  26. data/lib/wlang/dialects/sql_dialect.rb +38 -0
  27. data/lib/wlang/dialects/standard_dialects.rb +113 -0
  28. data/lib/wlang/dialects/xhtml_dialect.rb +40 -0
  29. data/lib/wlang/encoder.rb +66 -0
  30. data/lib/wlang/encoder_set.rb +117 -0
  31. data/lib/wlang/errors.rb +37 -0
  32. data/lib/wlang/intelligent_buffer.rb +94 -0
  33. data/lib/wlang/parser.rb +251 -0
  34. data/lib/wlang/parser_context.rb +146 -0
  35. data/lib/wlang/ruby_extensions.rb +21 -0
  36. data/lib/wlang/rule.rb +66 -0
  37. data/lib/wlang/rule_set.rb +93 -0
  38. data/lib/wlang/rulesets/basic_ruleset.rb +75 -0
  39. data/lib/wlang/rulesets/buffering_ruleset.rb +103 -0
  40. data/lib/wlang/rulesets/context_ruleset.rb +115 -0
  41. data/lib/wlang/rulesets/encoding_ruleset.rb +73 -0
  42. data/lib/wlang/rulesets/imperative_ruleset.rb +132 -0
  43. data/lib/wlang/rulesets/ruleset_utils.rb +296 -0
  44. data/lib/wlang/template.rb +79 -0
  45. data/lib/wlang/wlang_command.rb +54 -0
  46. data/lib/wlang/wlang_command_options.rb +158 -0
  47. data/test/sandbox.rb +1 -0
  48. data/test/test_all.rb +8 -0
  49. data/test/wlang/anagram_bugs_test.rb +111 -0
  50. data/test/wlang/basic_ruleset_test.rb +52 -0
  51. data/test/wlang/buffering_ruleset_test.rb +102 -0
  52. data/test/wlang/buffering_template1.wtpl +1 -0
  53. data/test/wlang/buffering_template2.wtpl +1 -0
  54. data/test/wlang/buffering_template3.wtpl +1 -0
  55. data/test/wlang/buffering_template4.wtpl +1 -0
  56. data/test/wlang/buffering_template5.wtpl +1 -0
  57. data/test/wlang/context_ruleset_test.rb +32 -0
  58. data/test/wlang/data.rb +3 -0
  59. data/test/wlang/encoder_set_test.rb +42 -0
  60. data/test/wlang/imperative_ruleset_test.rb +107 -0
  61. data/test/wlang/intelligent_buffer_test.rb +194 -0
  62. data/test/wlang/othersymbols_test.rb +16 -0
  63. data/test/wlang/parser_context_test.rb +29 -0
  64. data/test/wlang/parser_test.rb +89 -0
  65. data/test/wlang/plain_text_dialect_test.rb +21 -0
  66. data/test/wlang/ruby_dialect_test.rb +100 -0
  67. data/test/wlang/ruby_expected.rb +3 -0
  68. data/test/wlang/ruby_template.wrb +3 -0
  69. data/test/wlang/ruleset_utils_test.rb +245 -0
  70. data/test/wlang/specification_examples_test.rb +52 -0
  71. data/test/wlang/test_utils.rb +25 -0
  72. data/test/wlang/wlang_test.rb +80 -0
  73. metadata +136 -0
@@ -0,0 +1,136 @@
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
+ # Adds a dialect encoder under _name_. Encoder's code is provided by the block.
90
+ # This block should always take <tt>|src, options|</tt> arguments: _src_ is
91
+ # the string to encode, _options_ is a Hash instance containing additional
92
+ # encoding options.
93
+ #
94
+ def encoder(name, &block) end
95
+
96
+ #
97
+ # Adds reusable encoders defined in a Ruby module. _mod_ must be a Module instance.
98
+ # If _pairs_ is ommitted (nil), all encoders of the module are added, under their
99
+ # standard names (see DEFAULT_ENCODERS under WLang::EncoderSet::XHtml for example).
100
+ # Otherwise, _pairs_ is expected to be a Hash providing a mapping between encoder
101
+ # names and _mod_ methods (whose names are given by ruby symbols).
102
+ #
103
+ def encoders(mod, pairs=nil) end
104
+
105
+ #
106
+ # Maps an inline rule with some tag symbols. _symbol_ must be ASCII symbols
107
+ # allowed by the wlang specification. The rule implementation is provided by
108
+ # the block. see Rule class about rule implementation.
109
+ #
110
+ def rule(symbol, &block) end
111
+
112
+ #
113
+ # Adds reusable rules defined in a Ruby module. _mod_ must be a Module instance.
114
+ # If _pairs_ is ommitted (nil), all rules of the module are added, under their
115
+ # standard tag symbols (see DEFAULT_RULESET under WLang::RuleSet::Basic for example).
116
+ # Otherwise, _pairs_ is expected to be a Hash providing a mapping between tag
117
+ # symbols and _mod_ methods (whose names are given by ruby symbols).
118
+ #
119
+ def rules(mod, pairs=nil) end
120
+
121
+ #
122
+ # Request wlang to associate _args_ files extensions with this dialect. File
123
+ # extensions may also be installed at construction (see dialect).
124
+ #
125
+ def extensions(*args)
126
+ args.each do |ext|
127
+ ext = ('.' << ext) unless ext[0,1]=='.'
128
+ WLang::FILE_EXTENSIONS[ext] = @dialect.qualified_name
129
+ end
130
+ end
131
+ alias :extension :extensions
132
+
133
+ end # class DSL
134
+
135
+ end
136
+ end
@@ -0,0 +1,69 @@
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#encoder
43
+ def encoder(name, &block)
44
+ @dialect.add_encoder(name, &block)
45
+ end
46
+
47
+ # See WLang::Dialect::DSL#encoders
48
+ def encoders(mod, pairs=nil)
49
+ @dialect.add_encoders(mod, pairs)
50
+ end
51
+
52
+ # See WLang::Dialect::DSL#rule
53
+ def rule(symbol, &block)
54
+ @dialect.add_rule(symbol, &block)
55
+ end
56
+
57
+ # See WLang::Dialect::DSL#rules
58
+ def rules(mod, pairs=nil)
59
+ @dialect.add_rules(mod, pairs)
60
+ end
61
+
62
+ # See WLang::Dialect::DSL#extensions
63
+ def extensions(*args) end
64
+ alias :extension :extensions
65
+
66
+ end # class Loader
67
+
68
+ end
69
+ end
@@ -0,0 +1,35 @@
1
+ require 'coderay'
2
+ module WLang
3
+ class EncoderSet
4
+
5
+ #
6
+ # Allows coderay highlighter to be used as encoder. When using standard dialects,
7
+ # these encoders are installed under <tt>xhtml/coderay/ruby</tt>,
8
+ # <tt>xhtml/coderay/html</tt>, etc. qualified names.
9
+ #
10
+ # Available languages are: java, ruby, html, yaml.
11
+ #
12
+ module CodeRayEncoderSet
13
+
14
+ # Default encoders
15
+ DEFAULT_ENCODERS = {"java" => :coderay, "ruby" => :coderay, "html" => :coderay,
16
+ "yaml" => :coderay}
17
+
18
+ # Upcase encoding
19
+ def self.coderay(src, options);
20
+ /([a-z]+)$/ =~ options['_encoder_']
21
+ encoder = $1.to_sym
22
+ tokens = CodeRay.scan src, encoder
23
+ highlighted = tokens.html({
24
+ :line_numbers => :inline,
25
+ :wrap => :div,
26
+ :css => :style,
27
+ :style => :cygnus}
28
+ )
29
+ return highlighted
30
+ end
31
+
32
+ end # module CodeRay
33
+
34
+ end
35
+ end
@@ -0,0 +1,75 @@
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-case" => :camel_case}
12
+
13
+ # Accents to replace when camel-casing
14
+ # ACCENTS = { ['á','à','â','ä','ã','Ã','Ä','Â','À'] => 'a',
15
+ # ['é','è','ê','ë','Ë','É','È','Ê'] => 'e',
16
+ # ['í','ì','î','ï','I','Î','Ì'] => 'i',
17
+ # ['ó','ò','ô','ö','õ','Õ','Ö','Ô','Ò'] => 'o',
18
+ # ['œ'] => 'oe',
19
+ # ['ß'] => 'ss',
20
+ # ['ú','ù','û','ü','U','Û','Ù'] => 'u'}
21
+
22
+ # Upcase encoding
23
+ def self.upcase(src, options); src.upcase; end
24
+
25
+ # Downcase encoding
26
+ def self.downcase(src, options); src.downcase; end
27
+
28
+ # Capitalize encoding
29
+ def self.capitalize(src, options); src.capitalize; end
30
+
31
+ # Converts a string as CamelCase
32
+ def self.camel_case(src, options)
33
+ # ACCENTS.each do |ac,rep|
34
+ # ac.each do |s|
35
+ # src.gsub!(s, rep)
36
+ # end
37
+ # end
38
+ src.gsub!(/[^a-zA-Z ]/," ")
39
+ src = " " + src.split.join(" ")
40
+ src.gsub!(/ (.)/) { $1.upcase }
41
+ end
42
+
43
+ end # module PlainText
44
+
45
+ end
46
+ class RuleSet
47
+
48
+ # Defines rulset of the plain-text dialect
49
+ module PlainText
50
+
51
+ # Default mapping between tag symbols and methods
52
+ DEFAULT_RULESET = {'+' => :upcase, '-' => :downcase}
53
+
54
+ # Upcase rule as <tt>+{wlang/hosted}</tt>
55
+ def self.upcase(parser, offset)
56
+ expression, reached = parser.parse(offset, "wlang/ruby")
57
+ value = parser.evaluate(expression)
58
+ value = value.nil? ? "" : value.to_s
59
+ result = WLang::EncoderSet::PlainText.upcase(value)
60
+ [result, reached]
61
+ end
62
+
63
+ # Downcase rule as <tt>-{wlang/hosted}</tt>
64
+ def self.downcase(parser, offset)
65
+ expression, reached = parser.parse(offset, "wlang/ruby")
66
+ value = parser.evaluate(expression)
67
+ value = value.nil? ? "" : value.to_s
68
+ result = EncoderSet::PlainText.downcase(value)
69
+ [result, reached]
70
+ end
71
+
72
+ end # module PlainText
73
+
74
+ end
75
+ end
@@ -0,0 +1,33 @@
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
@@ -0,0 +1,35 @@
1
+ module WLang
2
+ class EncoderSet
3
+
4
+ # Encoders for ruby
5
+ module Ruby
6
+
7
+ # Default encoders
8
+ DEFAULT_ENCODERS = {"single-quoting" => :single_quoting,
9
+ "double-quoting" => :double_quoting,
10
+ "regex-escaping" => :regex_escaping}
11
+
12
+ # Single-quoting encoding
13
+ def self.single_quoting(src, options); src.gsub(/([^\\])'/,%q{\1\\\'}); end
14
+
15
+ # Double-quoting encoding
16
+ def self.double_quoting(src, options); src.gsub('"','\"'); end
17
+
18
+ # Regexp-escaping encoding
19
+ def self.regex_escaping(src, options); Regexp.escape(src); end
20
+
21
+ end # module Ruby
22
+
23
+ end
24
+ class RuleSet
25
+
26
+ # Defines rulset of the wlang/ruby dialect
27
+ module Ruby
28
+
29
+ # Default mapping between tag symbols and methods
30
+ DEFAULT_RULESET = {}
31
+
32
+ end # module Ruby
33
+
34
+ end
35
+ end
@@ -0,0 +1,38 @@
1
+ module WLang
2
+ class EncoderSet
3
+
4
+ # Encoders for ruby
5
+ module SQL
6
+
7
+ # Default encoders
8
+ DEFAULT_ENCODERS = {"single-quoting" => :single_quoting}
9
+
10
+ # Upcase encoding
11
+ def self.single_quoting(src, options); src.gsub("'","\\\\'"); end
12
+
13
+ end # module SQL
14
+
15
+ # Encoders for ruby
16
+ module SQL::Sybase
17
+
18
+ # Default encoders
19
+ DEFAULT_ENCODERS = {"single-quoting" => :single_quoting}
20
+
21
+ # Upcase encoding
22
+ def self.single_quoting(src, options); src.gsub("'","''"); end
23
+
24
+ end # module SQL::Sybase
25
+
26
+ end
27
+ class RuleSet
28
+
29
+ # Defines rulset of the wlang/ruby dialect
30
+ module SQL
31
+
32
+ # Default mapping between tag symbols and methods
33
+ DEFAULT_RULESET = {}
34
+
35
+ end # module SQL
36
+
37
+ end
38
+ end
@@ -0,0 +1,113 @@
1
+ require "wlang/rulesets/basic_ruleset"
2
+ require "wlang/rulesets/encoding_ruleset"
3
+ require "wlang/rulesets/imperative_ruleset"
4
+ require "wlang/rulesets/buffering_ruleset"
5
+ require "wlang/rulesets/context_ruleset"
6
+
7
+ WLang::data_loader(".yml", ".yaml") do |file|
8
+ require "yaml"
9
+ YAML.load(File.open(file))
10
+ end
11
+
12
+ WLang::data_loader(".rb", ".ruby", ".dsl") do |file|
13
+ Kernel.eval(File.read(file))
14
+ end
15
+
16
+ # plain-text dialect
17
+ WLang::dialect("plain-text") do
18
+ ruby_require("wlang/dialects/plain_text_dialect") do
19
+ encoders WLang::EncoderSet::PlainText
20
+ end
21
+ end
22
+
23
+ # ruby dialect
24
+ WLang::dialect("ruby", ".rb", ".ruby") do
25
+ ruby_require "wlang/dialects/ruby_dialect" do
26
+ encoders WLang::EncoderSet::Ruby
27
+ end
28
+ end
29
+
30
+ # ruby dialect
31
+ WLang::dialect("xhtml", ".html", ".xhtml", ".htm") do
32
+ ruby_require "cgi", "wlang/dialects/xhtml_dialect" do
33
+ encoders WLang::EncoderSet::XHtml
34
+ end
35
+ dialect("coderay") do
36
+ ruby_require("coderay", "wlang/dialects/coderay_dialect") do
37
+ encoders WLang::EncoderSet::CodeRayEncoderSet
38
+ end
39
+ end
40
+ end
41
+
42
+ # rdoc dialect
43
+ WLang::dialect("rdoc") do
44
+ ruby_require "rdoc", "wlang/dialects/rdoc_dialect" do
45
+ encoders WLang::EncoderSet::RDocEncoders
46
+ end
47
+ end
48
+
49
+ # wlang dialects
50
+ WLang::dialect("wlang") do
51
+
52
+ # Dummy dialect, no tag at all
53
+ dialect("dummy") do
54
+ end
55
+
56
+ # wlang/active-string dialect
57
+ dialect("active-string") do
58
+ rules WLang::RuleSet::Basic
59
+ end
60
+
61
+ # wlang/uri dialect
62
+ dialect("uri") do
63
+ rules WLang::RuleSet::Basic
64
+ end
65
+
66
+ # wlang/ruby dialect
67
+ dialect("ruby", ".wrb", ".wruby") do
68
+ ruby_require "wlang/dialects/ruby_dialect" do
69
+ encoders WLang::EncoderSet::Ruby
70
+ rules WLang::RuleSet::Basic
71
+ rules WLang::RuleSet::Encoding
72
+ rules WLang::RuleSet::Imperative
73
+ rules WLang::RuleSet::Context
74
+ rules WLang::RuleSet::Ruby
75
+ end
76
+ end
77
+
78
+ # wlang/ruby dialect
79
+ dialect("xhtml", ".wtpl", ".whtml") do
80
+ ruby_require "cgi", "wlang/dialects/xhtml_dialect" do
81
+ encoders WLang::EncoderSet::XHtml
82
+ rules WLang::RuleSet::Basic
83
+ rules WLang::RuleSet::Encoding
84
+ rules WLang::RuleSet::Imperative
85
+ rules WLang::RuleSet::Buffering
86
+ rules WLang::RuleSet::Context
87
+ rules WLang::RuleSet::XHtml
88
+ end
89
+ end
90
+
91
+ # wlang/ruby dialect
92
+ dialect("sql", ".wsql") do
93
+ ruby_require "wlang/dialects/sql_dialect" do
94
+ encoders WLang::EncoderSet::SQL
95
+ rules WLang::RuleSet::Basic
96
+ rules WLang::RuleSet::Encoding
97
+ rules WLang::RuleSet::Imperative
98
+ rules WLang::RuleSet::SQL
99
+ end
100
+
101
+ dialect("sybase") do
102
+ ruby_require "wlang/dialects/sql_dialect" do
103
+ encoders WLang::EncoderSet::SQL
104
+ encoders WLang::EncoderSet::SQL::Sybase
105
+ rules WLang::RuleSet::Basic
106
+ rules WLang::RuleSet::Encoding
107
+ rules WLang::RuleSet::Imperative
108
+ rules WLang::RuleSet::SQL
109
+ end
110
+ end
111
+ end
112
+
113
+ end