module WLang class RuleSet # # Encoding RuleSet, commonly installed in any wlang dialect. Note that this # ruleset overrides ${...} implemented in WLang::RuleSet::Basic. # # For an overview of this ruleset, see the wlang {specification file}[link://files/specification.html]. # module Encoding # Default mapping between tag symbols and methods DEFAULT_RULESET = {'&' => :main_encoding, '&;' => :entities_encoding, "&'" => :single_quoting, '&"' => :double_quoting, "$" => :injection, "'" => :single_quoted, '"' => :double_quoted} # Main encoding as &{...} def self.main_encoding(parser, offset) parsed, reached = parser.parse(offset) result = parser.encode(parsed, "main-encoding") [result, reached] end # Entities-encoding as &;{...} def self.entities_encoding(parser, offset) parsed, reached = parser.parse(offset) result = parser.encode(parsed, "entities-encoding") [result, reached] end # Single-quoting as &'{...} def self.single_quoting(parser, offset) parsed, reached = parser.parse(offset) result = parser.encode(parsed, "single-quoting") [result, reached] end # Double-quoting as &"{...} def self.double_quoting(parser, offset) parsed, reached = parser.parse(offset) result = parser.encode(parsed, "double-quoting") [result, reached] end # Injection as ${wlang/ruby} def self.injection(parser, offset) expression, reached = parser.parse(offset, "wlang/ruby") result = parser.evaluate(expression) encoded = parser.encode(result.to_s, "main-encoding") [encoded, reached] end # Single-quoted as '{wlang/ruby} def self.single_quoted(parser, offset) expression, reached = parser.parse(offset, "wlang/ruby") result = parser.evaluate(expression) encoded = parser.encode(result.to_s, "single-quoting") ["'" << encoded, reached] end # Double-quoted as "{wlang/ruby} def self.double_quoted(parser, offset) expression, reached = parser.parse(offset, "wlang/ruby") result = parser.evaluate(expression) encoded = parser.encode(result.to_s, "double-quoting") ['"' << encoded, reached] end end # module Encoding end end