wlang 0.9.2 → 0.10.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.
- data/CHANGELOG.md +96 -0
- data/{LICENCE.rdoc → LICENCE.md} +2 -2
- data/README.md +176 -0
- data/bin/wlang +1 -0
- data/doc/specification/dialects.wtpl +1 -1
- data/doc/specification/specification.html +1237 -1001
- data/doc/specification/specification.yml +12 -10
- data/lib/wlang.rb +2 -2
- data/lib/wlang/dialects/coderay_dialect.rb +1 -0
- data/lib/wlang/dialects/hosted_dialect.rb +50 -0
- data/lib/wlang/dialects/plain_text_dialect.rb +2 -2
- data/lib/wlang/dialects/ruby_dialect.rb +74 -5
- data/lib/wlang/dialects/standard_dialects.rb +41 -0
- data/lib/wlang/dialects/yaml_dialect.rb +30 -0
- data/lib/wlang/encoder.rb +0 -4
- data/lib/wlang/ext/string.rb +7 -2
- data/lib/wlang/parser.rb +1 -1
- data/lib/wlang/rulesets/basic_ruleset.rb +1 -1
- data/lib/wlang/rulesets/context_ruleset.rb +3 -3
- data/lib/wlang/rulesets/encoding_ruleset.rb +3 -3
- data/lib/wlang/rulesets/imperative_ruleset.rb +2 -2
- data/test/spec/test_all.rb +1 -1
- data/test/standard_dialects/ruby/data.rb +7 -0
- data/test/standard_dialects/ruby/inclusion.exp +6 -0
- data/test/standard_dialects/ruby/inclusion.tpl +6 -0
- data/test/standard_dialects/test_all.rb +29 -0
- data/test/standard_dialects/yaml/assumptions_test.rb +13 -0
- data/test/standard_dialects/yaml/data.rb +3 -0
- data/test/standard_dialects/yaml/inclusion_1.exp +7 -0
- data/test/standard_dialects/yaml/inclusion_1.tpl +2 -0
- data/test/standard_dialects/yaml/inclusion_2.exp +5 -0
- data/test/standard_dialects/yaml/inclusion_2.tpl +3 -0
- data/test/unit/wlang/ruby_dialect_test.rb +1 -1
- metadata +23 -11
- data/CHANGELOG.rdoc +0 -73
- data/README.rdoc +0 -165
@@ -1,6 +1,6 @@
|
|
1
1
|
---
|
2
2
|
title: WLang
|
3
|
-
version: 0.
|
3
|
+
version: 0.10.0
|
4
4
|
sections:
|
5
5
|
- identifier: about
|
6
6
|
name: About
|
@@ -105,6 +105,8 @@ rulesets:
|
|
105
105
|
- ["wlang/active-string", "Hello %{wlang/dummy}{!{name}}", "Hello !{name}"]
|
106
106
|
- ["wlang/dummy", "Hello %{wlang/dummy}{!{name}}", "Hello %{wlang/dummy}{!{name}}"]
|
107
107
|
- ["wlang/active-string", "Hello ^{plain-text/upcase}{${name}}", "Hello O'NEIL"]
|
108
|
+
- ["wlang/ruby", "puts +{name}", "puts \"O'Neil\""]
|
109
|
+
- ["wlang/ruby", "puts +{authors}", "puts [\"blambeau\", \"llambeau\", \"ancailliau\"]"]
|
108
110
|
rules:
|
109
111
|
# !{wlang/hosted}
|
110
112
|
- name: "execution"
|
@@ -254,15 +256,15 @@ rulesets:
|
|
254
256
|
scope is provided by the Context ruleset. All are variants of 'saving previous instantiations' in
|
255
257
|
scope variables...
|
256
258
|
examples:
|
257
|
-
- ["wlang/*", '={name as n}{Hello
|
258
|
-
- ["wlang/*", '={name as n}Hello
|
259
|
-
- ["wlang/*", '#={name}{blambeau}{Hello
|
260
|
-
- ["wlang/*", '#={name}{blambeau}Hello
|
261
|
-
- ["wlang/*", '={author as name}{Hello
|
262
|
-
- ["wlang/*", '={author as name}Hello
|
263
|
-
- ["wlang/*", '%={wlang/dummy as hello}{Hello
|
264
|
-
- ["wlang/*", '^={plain-text/upcase as name}{
|
265
|
-
- ["wlang/*", '^={plain-text/upcase as name}{
|
259
|
+
- ["wlang/*", '={name as n}{Hello !{n}}', "Hello O'Neil"]
|
260
|
+
- ["wlang/*", '={name as n}Hello !{n}', "Hello O'Neil"]
|
261
|
+
- ["wlang/*", '#={name}{blambeau}{Hello !{name}} and !{name}', "Hello blambeau and O'Neil"]
|
262
|
+
- ["wlang/*", '#={name}{blambeau}Hello !{name} and !{name}', "Hello blambeau and blambeau"]
|
263
|
+
- ["wlang/*", '={author as name}{Hello !{name}} and !{name}', "Hello blambeau and O'Neil"]
|
264
|
+
- ["wlang/*", '={author as name}Hello !{name} and !{name}', "Hello blambeau and blambeau"]
|
265
|
+
- ["wlang/*", '%={wlang/dummy as hello}{Hello !{name}}{!{hello}}', "Hello !{name}"]
|
266
|
+
- ["wlang/*", '^={plain-text/upcase as name}{!{author}}{Hello !{name}} and !{name}', "Hello BLAMBEAU and O'Neil"]
|
267
|
+
- ["wlang/*", '^={plain-text/upcase as name}{!{author}}Hello !{name} and !{name}', "Hello BLAMBEAU and BLAMBEAU"]
|
266
268
|
|
267
269
|
rules:
|
268
270
|
# ={wlang/hosted as x}{...}
|
data/lib/wlang.rb
CHANGED
@@ -20,7 +20,7 @@ require 'wlang/intelligent_buffer'
|
|
20
20
|
module WLang
|
21
21
|
|
22
22
|
# Current version of WLang
|
23
|
-
VERSION = "0.
|
23
|
+
VERSION = "0.10.0".freeze
|
24
24
|
|
25
25
|
######################################################################## About files and extensions
|
26
26
|
|
@@ -58,7 +58,7 @@ module WLang
|
|
58
58
|
|
59
59
|
# Checks that _name_ is a valid qualified dialect name or raises an ArgumentError
|
60
60
|
def self.check_qualified_dialect_name(name)
|
61
|
-
raise ArgumentError, "Invalid dialect qualified name #{name} (/^[-a-z]+([\/][-a-z]+)*$/ expected)", caller\
|
61
|
+
raise ArgumentError, "Invalid dialect qualified name '#{name}' (/^[-a-z]+([\/][-a-z]+)*$/ expected)", caller\
|
62
62
|
unless QUALIFIED_DIALECT_NAME_REGEXP =~ name
|
63
63
|
end
|
64
64
|
|
@@ -0,0 +1,50 @@
|
|
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
|
@@ -47,7 +47,7 @@ module WLang
|
|
47
47
|
|
48
48
|
# Upcase rule as <tt>+{wlang/hosted}</tt>
|
49
49
|
def self.upcase(parser, offset)
|
50
|
-
expression, reached = parser.parse(offset, "wlang/
|
50
|
+
expression, reached = parser.parse(offset, "wlang/hosted")
|
51
51
|
value = parser.evaluate(expression)
|
52
52
|
value = value.nil? ? "" : value.to_s
|
53
53
|
result = WLang::EncoderSet::PlainText.upcase(value)
|
@@ -56,7 +56,7 @@ module WLang
|
|
56
56
|
|
57
57
|
# Downcase rule as <tt>-{wlang/hosted}</tt>
|
58
58
|
def self.downcase(parser, offset)
|
59
|
-
expression, reached = parser.parse(offset, "wlang/
|
59
|
+
expression, reached = parser.parse(offset, "wlang/hosted")
|
60
60
|
value = parser.evaluate(expression)
|
61
61
|
value = value.nil? ? "" : value.to_s
|
62
62
|
result = EncoderSet::PlainText.downcase(value)
|
@@ -5,11 +5,12 @@ module WLang
|
|
5
5
|
module Ruby
|
6
6
|
|
7
7
|
# Default encoders
|
8
|
-
DEFAULT_ENCODERS = {"main-encoding" =>
|
8
|
+
DEFAULT_ENCODERS = {"main-encoding" => :main_encoding,
|
9
9
|
"single-quoting" => :single_quoting,
|
10
10
|
"double-quoting" => :double_quoting,
|
11
11
|
"regex-escaping" => :regex_escaping,
|
12
|
-
"method-case" => :method_case
|
12
|
+
"method-case" => :method_case,
|
13
|
+
"literal" => :to_literal}
|
13
14
|
|
14
15
|
# No-op encoding here
|
15
16
|
def self.main_encoding(src, options); src; end
|
@@ -31,6 +32,66 @@ module WLang
|
|
31
32
|
gsub(/^([^a-z])/){ "_" + $1 }.
|
32
33
|
gsub(/\s+/){"_"}
|
33
34
|
end
|
35
|
+
|
36
|
+
# Ruby classes for which value.inspect will work for returning
|
37
|
+
# a valid literal
|
38
|
+
SAFE_LITERAL_CLASSES = {}
|
39
|
+
[NilClass, TrueClass, FalseClass,
|
40
|
+
Fixnum, Bignum,
|
41
|
+
Float,
|
42
|
+
String,
|
43
|
+
Symbol,
|
44
|
+
Class,
|
45
|
+
Module,
|
46
|
+
Regexp].each{|c| SAFE_LITERAL_CLASSES[c] = true}
|
47
|
+
|
48
|
+
#
|
49
|
+
# Converts _value_ to a ruby literal and returns it.
|
50
|
+
#
|
51
|
+
# Behavior of the algorithm when th value cannot be recognized depends
|
52
|
+
# on the :fallback option:
|
53
|
+
# * when set to :fail, it raises a NoSuchLiteralError
|
54
|
+
# * when set to :inspect, it returns <code>value.inspect</code>
|
55
|
+
# * when set to :marshal it uses <code>Marshal::dump(value)</code>
|
56
|
+
# * when set to :json it uses <code>JSON::generate(value)</code>
|
57
|
+
#
|
58
|
+
def self.to_literal(value, options = {:fallback => :fail})
|
59
|
+
if value.respond_to?(:to_ruby_literal)
|
60
|
+
value.to_ruby_literal
|
61
|
+
elsif value.respond_to?(:to_ruby)
|
62
|
+
value.to_ruby
|
63
|
+
elsif value == (1.0/0)
|
64
|
+
return '(1.0/0)'
|
65
|
+
elsif value == -(1.0/0)
|
66
|
+
return '(-1.0/0)'
|
67
|
+
elsif SAFE_LITERAL_CLASSES.key?(value.class)
|
68
|
+
value.inspect
|
69
|
+
elsif value.kind_of?(Array)
|
70
|
+
"[" + value.collect{|v| to_literal(v, options)}.join(', ') + "]"
|
71
|
+
elsif value.kind_of?(Hash)
|
72
|
+
"{" + value.collect{|pair| "#{to_literal(pair[0], options)} => #{to_literal(pair[1], options)}"}.join(', ') + "}"
|
73
|
+
elsif value.kind_of?(Date)
|
74
|
+
"Date::parse(#{value.to_s.inspect})"
|
75
|
+
elsif value.kind_of?(Time)
|
76
|
+
"Time::parse(#{value.inspect.inspect})"
|
77
|
+
else
|
78
|
+
case options[:fallback]
|
79
|
+
when :to_s
|
80
|
+
value.to_s
|
81
|
+
when :inspect
|
82
|
+
value.inspect
|
83
|
+
when :marshal
|
84
|
+
"Marshal::load(#{Marshal::dump(value).inspect})"
|
85
|
+
when :json
|
86
|
+
require 'json'
|
87
|
+
JSON::generate(value)
|
88
|
+
when :fail, nil
|
89
|
+
raise WLang::Error, "Unable to convert #{value.inspect} to a ruby literal"
|
90
|
+
else
|
91
|
+
raise ArgumentError, "Invalid fallback option #{options[:fallback]}"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
34
95
|
|
35
96
|
end # module Ruby
|
36
97
|
|
@@ -41,9 +102,17 @@ module WLang
|
|
41
102
|
module Ruby
|
42
103
|
|
43
104
|
# Default mapping between tag symbols and methods
|
44
|
-
DEFAULT_RULESET = {}
|
105
|
+
DEFAULT_RULESET = {'+' => :inclusion}
|
45
106
|
|
107
|
+
# Rule implementation of <tt>+{wlang/ruby}</tt>.
|
108
|
+
def self.inclusion(parser, offset)
|
109
|
+
expression, reached = parser.parse(offset, "wlang/hosted")
|
110
|
+
value = parser.evaluate(expression)
|
111
|
+
result = WLang::EncoderSet::Ruby.to_literal(value)
|
112
|
+
[result, reached]
|
113
|
+
end
|
114
|
+
|
46
115
|
end # module Ruby
|
47
116
|
|
48
|
-
end
|
49
|
-
end
|
117
|
+
end # class RuleSet
|
118
|
+
end # module WLang
|
@@ -27,6 +27,13 @@ WLang::dialect("ruby", ".rb", ".ruby") do
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
# yaml dialect
|
31
|
+
WLang::dialect("yaml", ".yaml", ".yml") do
|
32
|
+
ruby_require "wlang/dialects/yaml_dialect" do
|
33
|
+
encoders WLang::EncoderSet::YAML
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
30
37
|
# sql dialect
|
31
38
|
WLang::dialect("sql", ".sql") do
|
32
39
|
ruby_require "wlang/dialects/sql_dialect" do
|
@@ -72,12 +79,32 @@ WLang::dialect("wlang") do
|
|
72
79
|
dialect("dummy") do
|
73
80
|
end
|
74
81
|
|
82
|
+
# wlang/ruby dialect
|
83
|
+
dialect("hosted") do
|
84
|
+
ruby_require "wlang/dialects/hosted_dialect" do
|
85
|
+
encoders WLang::EncoderSet::Hosted
|
86
|
+
rules WLang::RuleSet::Basic
|
87
|
+
rules WLang::RuleSet::Encoding
|
88
|
+
rules WLang::RuleSet::Imperative
|
89
|
+
rules WLang::RuleSet::Context
|
90
|
+
rules WLang::RuleSet::Hosted
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
75
94
|
# wlang/active-string dialect
|
76
95
|
dialect("active-string") do
|
77
96
|
rules WLang::RuleSet::Basic
|
78
97
|
rules WLang::RuleSet::Imperative
|
79
98
|
end
|
80
99
|
|
100
|
+
# wlang/active-text dialect
|
101
|
+
dialect("active-text") do
|
102
|
+
rules WLang::RuleSet::Basic
|
103
|
+
rules WLang::RuleSet::Imperative
|
104
|
+
rules WLang::RuleSet::Buffering
|
105
|
+
rules WLang::RuleSet::Context
|
106
|
+
end
|
107
|
+
|
81
108
|
# wlang/uri dialect
|
82
109
|
dialect("uri") do
|
83
110
|
rules WLang::RuleSet::Basic
|
@@ -90,11 +117,25 @@ WLang::dialect("wlang") do
|
|
90
117
|
rules WLang::RuleSet::Basic
|
91
118
|
rules WLang::RuleSet::Encoding
|
92
119
|
rules WLang::RuleSet::Imperative
|
120
|
+
rules WLang::RuleSet::Buffering
|
93
121
|
rules WLang::RuleSet::Context
|
94
122
|
rules WLang::RuleSet::Ruby
|
95
123
|
end
|
96
124
|
end
|
97
125
|
|
126
|
+
# wlang/ruby dialect
|
127
|
+
dialect("yaml", ".wyaml", ".wyml") do
|
128
|
+
ruby_require "wlang/dialects/yaml_dialect" do
|
129
|
+
encoders WLang::EncoderSet::YAML
|
130
|
+
rules WLang::RuleSet::Basic
|
131
|
+
rules WLang::RuleSet::Encoding
|
132
|
+
rules WLang::RuleSet::Imperative
|
133
|
+
rules WLang::RuleSet::Buffering
|
134
|
+
rules WLang::RuleSet::Context
|
135
|
+
rules WLang::RuleSet::YAML
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
98
139
|
# wlang/ruby dialect
|
99
140
|
dialect("xhtml", ".wtpl", ".whtml") do
|
100
141
|
ruby_require "cgi", "wlang/dialects/xhtml_dialect" do
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "yaml"
|
2
|
+
module WLang
|
3
|
+
class EncoderSet
|
4
|
+
module YAML
|
5
|
+
|
6
|
+
# Default encoders
|
7
|
+
DEFAULT_ENCODERS = {}
|
8
|
+
|
9
|
+
end # module YAML
|
10
|
+
end
|
11
|
+
class RuleSet
|
12
|
+
module YAML
|
13
|
+
|
14
|
+
# Default mapping between tag symbols and methods
|
15
|
+
DEFAULT_RULESET = {'+' => :inclusion}
|
16
|
+
|
17
|
+
# Rule implementation of <tt>+{wlang/ruby}</tt>.
|
18
|
+
def self.inclusion(parser, offset)
|
19
|
+
expression, reached = parser.parse(offset, "wlang/hosted")
|
20
|
+
value = parser.evaluate(expression)
|
21
|
+
col = parser.buffer.__wlang_column_of(parser.buffer.length)
|
22
|
+
result = value.to_yaml.
|
23
|
+
gsub(/^\s*---\s*|\n$/,"").
|
24
|
+
__wlang_realign(col-1, true)
|
25
|
+
[result, reached]
|
26
|
+
end
|
27
|
+
|
28
|
+
end # module YAML
|
29
|
+
end # class RuleSet
|
30
|
+
end # module WLang
|
data/lib/wlang/encoder.rb
CHANGED
data/lib/wlang/ext/string.rb
CHANGED
data/lib/wlang/parser.rb
CHANGED
@@ -19,7 +19,7 @@ module WLang
|
|
19
19
|
|
20
20
|
# Rule implementation of <tt>!{wlang/ruby}</tt>.
|
21
21
|
def self.execution(parser, offset)
|
22
|
-
expression, reached = parser.parse(offset, "wlang/
|
22
|
+
expression, reached = parser.parse(offset, "wlang/hosted")
|
23
23
|
value = parser.evaluate(expression)
|
24
24
|
result = value.nil? ? "" : value.to_s
|
25
25
|
[result, reached]
|
@@ -18,7 +18,7 @@ module WLang
|
|
18
18
|
|
19
19
|
# Rule implementation of <tt>={wlang/hosted as x}{...}</tt>
|
20
20
|
def self.assignment(parser, offset)
|
21
|
-
expr, reached = parser.parse(offset, "wlang/
|
21
|
+
expr, reached = parser.parse(offset, "wlang/hosted")
|
22
22
|
|
23
23
|
# decode expression
|
24
24
|
decoded = U.decode_expr_as(expr)
|
@@ -62,7 +62,7 @@ module WLang
|
|
62
62
|
|
63
63
|
# Rule implementation of <tt>%={wlang/active-string as x}{...}{...}</tt>
|
64
64
|
def self.modulo_assignment(parser, offset)
|
65
|
-
dialect_as, reached = parser.parse(offset, "wlang/
|
65
|
+
dialect_as, reached = parser.parse(offset, "wlang/hosted")
|
66
66
|
|
67
67
|
# decode expression
|
68
68
|
decoded = U.decode_qdialect_as(dialect_as)
|
@@ -84,7 +84,7 @@ module WLang
|
|
84
84
|
|
85
85
|
# Rule implementation of <tt>^={wlang/active-string as x}{...}{...}</tt>
|
86
86
|
def self.encoding_assignment(parser, offset)
|
87
|
-
encoding_as, reached = parser.parse(offset, "wlang/
|
87
|
+
encoding_as, reached = parser.parse(offset, "wlang/hosted")
|
88
88
|
|
89
89
|
# decode expression
|
90
90
|
decoded = U.decode_qencoder_as(encoding_as)
|
@@ -45,7 +45,7 @@ module WLang
|
|
45
45
|
|
46
46
|
# Injection as <tt>${wlang/ruby}</tt>
|
47
47
|
def self.injection(parser, offset)
|
48
|
-
expression, reached = parser.parse(offset, "wlang/
|
48
|
+
expression, reached = parser.parse(offset, "wlang/hosted")
|
49
49
|
result = parser.evaluate(expression)
|
50
50
|
encoded = parser.encode(result.to_s, "main-encoding")
|
51
51
|
[encoded, reached]
|
@@ -53,7 +53,7 @@ module WLang
|
|
53
53
|
|
54
54
|
# Single-quoted as <tt>'{wlang/ruby}</tt>
|
55
55
|
def self.single_quoted(parser, offset)
|
56
|
-
expression, reached = parser.parse(offset, "wlang/
|
56
|
+
expression, reached = parser.parse(offset, "wlang/hosted")
|
57
57
|
result = parser.evaluate(expression)
|
58
58
|
encoded = parser.encode(result.to_s, "single-quoting")
|
59
59
|
["'" << encoded, reached]
|
@@ -61,7 +61,7 @@ module WLang
|
|
61
61
|
|
62
62
|
# Double-quoted as <tt>"{wlang/ruby}</tt>
|
63
63
|
def self.double_quoted(parser, offset)
|
64
|
-
expression, reached = parser.parse(offset, "wlang/
|
64
|
+
expression, reached = parser.parse(offset, "wlang/hosted")
|
65
65
|
result = parser.evaluate(expression)
|
66
66
|
encoded = parser.encode(result.to_s, "double-quoting")
|
67
67
|
['"' << encoded, reached]
|
@@ -27,7 +27,7 @@ module WLang
|
|
27
27
|
# otherwise instantiates #3 if present.
|
28
28
|
#
|
29
29
|
def self.conditional(parser, offset)
|
30
|
-
expression, reached = parser.parse(offset, "wlang/
|
30
|
+
expression, reached = parser.parse(offset, "wlang/hosted")
|
31
31
|
value = parser.evaluate(expression)
|
32
32
|
if value
|
33
33
|
then_block, reached = parser.parse_block(reached)
|
@@ -64,7 +64,7 @@ module WLang
|
|
64
64
|
# name x in the scope). If #3 is present, it is instantiated between elements.
|
65
65
|
#
|
66
66
|
def self.enumeration(parser, offset)
|
67
|
-
expression, reached = parser.parse(offset, "wlang/
|
67
|
+
expression, reached = parser.parse(offset, "wlang/hosted")
|
68
68
|
|
69
69
|
# decode 'wlang/hosted using each as x' expression
|
70
70
|
hash = U.expr(:expr,
|