Sass extensions for emitting Sass text from a Sass::Tree
This commit is contained in:
parent
52e2a9cc63
commit
54424de793
@ -49,17 +49,7 @@ def mixins(item)
|
|||||||
end
|
end
|
||||||
|
|
||||||
def mixin_signature(mixin)
|
def mixin_signature(mixin)
|
||||||
signature = "+#{mixin.name}"
|
mixin.sass_signature(:include)
|
||||||
if mixin.args && mixin.args.any?
|
|
||||||
signature << "("
|
|
||||||
signature << mixin.args.map do |a|
|
|
||||||
var = a.first
|
|
||||||
default_value = a.last
|
|
||||||
"#{var.inspect}#{" = " + default_value.inspect if default_value}"
|
|
||||||
end.join(", ")
|
|
||||||
signature << ")"
|
|
||||||
end
|
|
||||||
signature
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def format_doc(docstring)
|
def format_doc(docstring)
|
||||||
|
@ -1,13 +1,96 @@
|
|||||||
require 'sass'
|
require 'sass'
|
||||||
module Sass
|
module Sass
|
||||||
module Tree
|
module Tree
|
||||||
|
class Node
|
||||||
|
private
|
||||||
|
def tab(s, indent_level = 1)
|
||||||
|
s.split("\n").join("\n" + " " * indent_level)
|
||||||
|
end
|
||||||
|
def children_to_sass
|
||||||
|
clean_children = children.inject([[],true]) do |m,c|
|
||||||
|
if c.respond_to?(:doc) && !c.doc.nil?
|
||||||
|
[m.first, c.doc]
|
||||||
|
else
|
||||||
|
if m.last
|
||||||
|
[m.first + [c], true]
|
||||||
|
else
|
||||||
|
m
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
raise clean_children.first.inspect if clean_children.first.detect{|c| TrueClass === c}
|
||||||
|
tab(clean_children.first.
|
||||||
|
map{|c| c.to_sass}.join("\n"))
|
||||||
|
end
|
||||||
|
end
|
||||||
class VariableNode < Node
|
class VariableNode < Node
|
||||||
attr_accessor :name unless method_defined? :name
|
attr_accessor :name unless method_defined? :name
|
||||||
end
|
end
|
||||||
|
class IfNode < Node
|
||||||
|
def to_sass
|
||||||
|
sass_str = %Q{@if #{@expr.inspect unless @expr.nil?}
|
||||||
|
- #{tab children_to_sass}
|
||||||
|
-}.gsub(/^\s+-/,'')
|
||||||
|
if @else
|
||||||
|
sass_str << %Q{@else
|
||||||
|
- #{tab @else.to_sass}
|
||||||
|
-}.gsub(/^\s+-/,'')
|
||||||
|
end
|
||||||
|
sass_str
|
||||||
|
end
|
||||||
|
end
|
||||||
|
class DebugNode < Node
|
||||||
|
def to_sass
|
||||||
|
""
|
||||||
|
end
|
||||||
|
end
|
||||||
|
class MixinNode < Node
|
||||||
|
attr_accessor :name unless method_defined? :name
|
||||||
|
attr_accessor :args unless method_defined? :args
|
||||||
|
def to_sass
|
||||||
|
sass_str = "+#{name}"
|
||||||
|
if args.any?
|
||||||
|
sass_str << "(#{args.map{|a| a.inspect}.join(", ")})"
|
||||||
|
end
|
||||||
|
sass_str
|
||||||
|
end
|
||||||
|
end
|
||||||
class MixinDefNode < Node
|
class MixinDefNode < Node
|
||||||
attr_accessor :name unless method_defined? :name
|
attr_accessor :name unless method_defined? :name
|
||||||
attr_accessor :args unless method_defined? :args
|
attr_accessor :args unless method_defined? :args
|
||||||
attr_accessor :comment unless method_defined? :comment
|
attr_accessor :comment unless method_defined? :comment
|
||||||
|
|
||||||
|
def to_sass
|
||||||
|
"#{sass_signature}\n #{children_to_sass}\n"
|
||||||
|
end
|
||||||
|
|
||||||
|
def sass_signature(mode = :definition)
|
||||||
|
prefix = case mode
|
||||||
|
when :definition
|
||||||
|
"="
|
||||||
|
when :include
|
||||||
|
"+"
|
||||||
|
end
|
||||||
|
"#{prefix}#{name}#{arglist_to_sass}"
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def arglist_to_sass
|
||||||
|
if args.any?
|
||||||
|
"(#{args.map{|a| arg_to_sass(a)}.join(", ")})"
|
||||||
|
else
|
||||||
|
""
|
||||||
|
end
|
||||||
|
end
|
||||||
|
def arg_to_sass(arg)
|
||||||
|
name, default_value = arg
|
||||||
|
sass_str = "#{name.inspect}"
|
||||||
|
if default_value
|
||||||
|
sass_str << " = "
|
||||||
|
sass_str << default_value.inspect
|
||||||
|
end
|
||||||
|
sass_str
|
||||||
|
end
|
||||||
end
|
end
|
||||||
class ImportNode < RootNode
|
class ImportNode < RootNode
|
||||||
attr_accessor :imported_filename unless method_defined? :imported_filename
|
attr_accessor :imported_filename unless method_defined? :imported_filename
|
||||||
@ -16,6 +99,13 @@ module Sass
|
|||||||
def docstring
|
def docstring
|
||||||
([value] + lines).join("\n")
|
([value] + lines).join("\n")
|
||||||
end
|
end
|
||||||
|
def doc
|
||||||
|
if value == "@doc off"
|
||||||
|
false
|
||||||
|
elsif value == "@doc on"
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
Loading…
Reference in New Issue
Block a user