Class: Tinge::Parser
- Inherits:
-
Object
- Object
- Tinge::Parser
- Defined in:
- lib/tinge/parser.rb
Defined Under Namespace
Classes: Result
Class Method Summary collapse
Instance Method Summary collapse
- #colors(node) ⇒ Object
- #document ⇒ Object
- #extract(node, parent = nil) ⇒ Object
-
#initialize(text) ⇒ Parser
constructor
A new instance of Parser.
- #parse_document ⇒ Object
- #result ⇒ Object
- #run ⇒ Object
- #set_var(name, value) ⇒ Object
- #visit(node, parent = nil) ⇒ Object
Constructor Details
#initialize(text) ⇒ Parser
Returns a new instance of Parser.
19 20 21 |
# File 'lib/tinge/parser.rb', line 19 def initialize(text) @text = text end |
Class Method Details
.parse(text) ⇒ Object
13 14 15 16 17 |
# File 'lib/tinge/parser.rb', line 13 def self.parse(text) new(text).tap { |parser| parser.run }.result end |
Instance Method Details
#colors(node) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/tinge/parser.rb', line 63 def colors(node) case node when Sass::Tree::PropNode node.value.inspect.scan(/(#[0-9a-f]+|(?:hsl|rgb)a?\([^\)]+\))/).flatten when Sass::Tree::VariableNode if node.expr.is_a?(Sass::Script::Color) [node.expr.to_s] else [] end end end |
#document ⇒ Object
27 28 29 30 |
# File 'lib/tinge/parser.rb', line 27 def document parse_document unless @document @document end |
#extract(node, parent = nil) ⇒ Object
56 57 58 59 60 61 |
# File 'lib/tinge/parser.rb', line 56 def extract(node, parent = nil) colors(node).each do |color| result[color] ||= Color.new(color) result[color].add_sighting(node, parent) end end |
#parse_document ⇒ Object
32 33 34 35 36 37 |
# File 'lib/tinge/parser.rb', line 32 def parse_document Sass::Tree::Visitors::Perform.tinge_parser = self @engine = Sass::Engine.new(@text, syntax: :scss) @document = @engine.to_tree @engine.render end |
#result ⇒ Object
43 44 45 |
# File 'lib/tinge/parser.rb', line 43 def result @result ||= Result.new end |
#run ⇒ Object
39 40 41 |
# File 'lib/tinge/parser.rb', line 39 def run visit(document) end |
#set_var(name, value) ⇒ Object
23 24 25 |
# File 'lib/tinge/parser.rb', line 23 def set_var(name, value) result.vars[name] = value end |
#visit(node, parent = nil) ⇒ Object
47 48 49 50 51 52 53 54 |
# File 'lib/tinge/parser.rb', line 47 def visit(node, parent = nil) if node.is_a?(Sass::Tree::PropNode) || node.is_a?(Sass::Tree::VariableNode) extract(node, parent) end node.each do |child| visit(child, node) unless child == node end end |