Created
December 7, 2011 15:23
-
-
Save Jared314/1443201 to your computer and use it in GitHub Desktop.
Parslet Transform Mod
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'parslet' | |
class Parslet::Transform | |
def transform_elt(elt, context) # :nodoc: | |
rules.each do |pattern, block| | |
if bindings=pattern.match(elt, context) | |
# Produces transformed value | |
return call_on_match({:node => elt}.merge(bindings), block) | |
end | |
end | |
# No rule matched - element is not transformed | |
return elt | |
end | |
end | |
class Parslet::Pattern | |
def element_match_hash(tree, exp, bindings) | |
# We iterate over expected pattern, since we demand that the keys that | |
# are there should be in tree as well. | |
exp.each do |expected_key, expected_value| | |
return false unless tree.has_key? expected_key | |
# Recurse into the value and stop early on failure | |
value = tree[expected_key] | |
return false unless element_match(value, expected_value, bindings) | |
end | |
return true | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment