xass 0.1.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.
- checksums.yaml +7 -0
- data/.yardopts +11 -0
- data/CONTRIBUTING +3 -0
- data/MIT-LICENSE +20 -0
- data/README.md +201 -0
- data/Rakefile +349 -0
- data/VERSION +1 -0
- data/VERSION_NAME +1 -0
- data/bin/push +13 -0
- data/bin/sass +13 -0
- data/bin/sass-convert +12 -0
- data/bin/scss +13 -0
- data/extra/update_watch.rb +13 -0
- data/init.rb +18 -0
- data/lib/sass/cache_stores/base.rb +88 -0
- data/lib/sass/cache_stores/chain.rb +33 -0
- data/lib/sass/cache_stores/filesystem.rb +64 -0
- data/lib/sass/cache_stores/memory.rb +47 -0
- data/lib/sass/cache_stores/null.rb +25 -0
- data/lib/sass/cache_stores.rb +15 -0
- data/lib/sass/callbacks.rb +66 -0
- data/lib/sass/css.rb +409 -0
- data/lib/sass/engine.rb +930 -0
- data/lib/sass/environment.rb +101 -0
- data/lib/sass/error.rb +201 -0
- data/lib/sass/exec.rb +707 -0
- data/lib/sass/importers/base.rb +139 -0
- data/lib/sass/importers/filesystem.rb +186 -0
- data/lib/sass/importers.rb +22 -0
- data/lib/sass/logger/base.rb +32 -0
- data/lib/sass/logger/log_level.rb +49 -0
- data/lib/sass/logger.rb +15 -0
- data/lib/sass/media.rb +213 -0
- data/lib/sass/plugin/compiler.rb +406 -0
- data/lib/sass/plugin/configuration.rb +123 -0
- data/lib/sass/plugin/generic.rb +15 -0
- data/lib/sass/plugin/merb.rb +48 -0
- data/lib/sass/plugin/rack.rb +60 -0
- data/lib/sass/plugin/rails.rb +47 -0
- data/lib/sass/plugin/staleness_checker.rb +199 -0
- data/lib/sass/plugin.rb +133 -0
- data/lib/sass/railtie.rb +10 -0
- data/lib/sass/repl.rb +57 -0
- data/lib/sass/root.rb +7 -0
- data/lib/sass/script/arg_list.rb +52 -0
- data/lib/sass/script/bool.rb +18 -0
- data/lib/sass/script/color.rb +606 -0
- data/lib/sass/script/css_lexer.rb +29 -0
- data/lib/sass/script/css_parser.rb +31 -0
- data/lib/sass/script/funcall.rb +245 -0
- data/lib/sass/script/functions.rb +1543 -0
- data/lib/sass/script/interpolation.rb +79 -0
- data/lib/sass/script/lexer.rb +345 -0
- data/lib/sass/script/list.rb +85 -0
- data/lib/sass/script/literal.rb +221 -0
- data/lib/sass/script/node.rb +99 -0
- data/lib/sass/script/null.rb +37 -0
- data/lib/sass/script/number.rb +453 -0
- data/lib/sass/script/operation.rb +110 -0
- data/lib/sass/script/parser.rb +502 -0
- data/lib/sass/script/string.rb +51 -0
- data/lib/sass/script/string_interpolation.rb +103 -0
- data/lib/sass/script/unary_operation.rb +69 -0
- data/lib/sass/script/variable.rb +58 -0
- data/lib/sass/script.rb +39 -0
- data/lib/sass/scss/css_parser.rb +36 -0
- data/lib/sass/scss/parser.rb +1180 -0
- data/lib/sass/scss/rx.rb +133 -0
- data/lib/sass/scss/script_lexer.rb +15 -0
- data/lib/sass/scss/script_parser.rb +25 -0
- data/lib/sass/scss/static_parser.rb +54 -0
- data/lib/sass/scss.rb +16 -0
- data/lib/sass/selector/abstract_sequence.rb +94 -0
- data/lib/sass/selector/comma_sequence.rb +92 -0
- data/lib/sass/selector/sequence.rb +507 -0
- data/lib/sass/selector/simple.rb +119 -0
- data/lib/sass/selector/simple_sequence.rb +215 -0
- data/lib/sass/selector.rb +452 -0
- data/lib/sass/shared.rb +76 -0
- data/lib/sass/supports.rb +229 -0
- data/lib/sass/tree/charset_node.rb +22 -0
- data/lib/sass/tree/comment_node.rb +82 -0
- data/lib/sass/tree/content_node.rb +9 -0
- data/lib/sass/tree/css_import_node.rb +60 -0
- data/lib/sass/tree/debug_node.rb +18 -0
- data/lib/sass/tree/directive_node.rb +42 -0
- data/lib/sass/tree/each_node.rb +24 -0
- data/lib/sass/tree/extend_node.rb +36 -0
- data/lib/sass/tree/for_node.rb +36 -0
- data/lib/sass/tree/function_node.rb +34 -0
- data/lib/sass/tree/if_node.rb +52 -0
- data/lib/sass/tree/import_node.rb +75 -0
- data/lib/sass/tree/media_node.rb +58 -0
- data/lib/sass/tree/mixin_def_node.rb +38 -0
- data/lib/sass/tree/mixin_node.rb +39 -0
- data/lib/sass/tree/node.rb +196 -0
- data/lib/sass/tree/prop_node.rb +152 -0
- data/lib/sass/tree/return_node.rb +18 -0
- data/lib/sass/tree/root_node.rb +78 -0
- data/lib/sass/tree/rule_node.rb +132 -0
- data/lib/sass/tree/supports_node.rb +51 -0
- data/lib/sass/tree/trace_node.rb +32 -0
- data/lib/sass/tree/variable_node.rb +30 -0
- data/lib/sass/tree/visitors/base.rb +75 -0
- data/lib/sass/tree/visitors/check_nesting.rb +147 -0
- data/lib/sass/tree/visitors/convert.rb +316 -0
- data/lib/sass/tree/visitors/cssize.rb +241 -0
- data/lib/sass/tree/visitors/deep_copy.rb +102 -0
- data/lib/sass/tree/visitors/extend.rb +68 -0
- data/lib/sass/tree/visitors/perform.rb +446 -0
- data/lib/sass/tree/visitors/set_options.rb +125 -0
- data/lib/sass/tree/visitors/to_css.rb +228 -0
- data/lib/sass/tree/warn_node.rb +18 -0
- data/lib/sass/tree/while_node.rb +18 -0
- data/lib/sass/util/multibyte_string_scanner.rb +155 -0
- data/lib/sass/util/subset_map.rb +109 -0
- data/lib/sass/util/test.rb +10 -0
- data/lib/sass/util.rb +948 -0
- data/lib/sass/version.rb +126 -0
- data/lib/sass.rb +95 -0
- data/rails/init.rb +1 -0
- data/test/Gemfile +3 -0
- data/test/Gemfile.lock +10 -0
- data/test/sass/cache_test.rb +89 -0
- data/test/sass/callbacks_test.rb +61 -0
- data/test/sass/conversion_test.rb +1760 -0
- data/test/sass/css2sass_test.rb +458 -0
- data/test/sass/data/hsl-rgb.txt +319 -0
- data/test/sass/engine_test.rb +3244 -0
- data/test/sass/exec_test.rb +86 -0
- data/test/sass/extend_test.rb +1482 -0
- data/test/sass/fixtures/test_staleness_check_across_importers.css +1 -0
- data/test/sass/fixtures/test_staleness_check_across_importers.scss +1 -0
- data/test/sass/functions_test.rb +1139 -0
- data/test/sass/importer_test.rb +192 -0
- data/test/sass/logger_test.rb +58 -0
- data/test/sass/mock_importer.rb +49 -0
- data/test/sass/more_results/more1.css +9 -0
- data/test/sass/more_results/more1_with_line_comments.css +26 -0
- data/test/sass/more_results/more_import.css +29 -0
- data/test/sass/more_templates/_more_partial.sass +2 -0
- data/test/sass/more_templates/more1.sass +23 -0
- data/test/sass/more_templates/more_import.sass +11 -0
- data/test/sass/plugin_test.rb +564 -0
- data/test/sass/results/alt.css +4 -0
- data/test/sass/results/basic.css +9 -0
- data/test/sass/results/cached_import_option.css +3 -0
- data/test/sass/results/compact.css +5 -0
- data/test/sass/results/complex.css +86 -0
- data/test/sass/results/compressed.css +1 -0
- data/test/sass/results/expanded.css +19 -0
- data/test/sass/results/filename_fn.css +3 -0
- data/test/sass/results/if.css +3 -0
- data/test/sass/results/import.css +31 -0
- data/test/sass/results/import_charset.css +5 -0
- data/test/sass/results/import_charset_1_8.css +5 -0
- data/test/sass/results/import_charset_ibm866.css +5 -0
- data/test/sass/results/import_content.css +1 -0
- data/test/sass/results/line_numbers.css +49 -0
- data/test/sass/results/mixins.css +95 -0
- data/test/sass/results/multiline.css +24 -0
- data/test/sass/results/nested.css +22 -0
- data/test/sass/results/options.css +1 -0
- data/test/sass/results/parent_ref.css +13 -0
- data/test/sass/results/script.css +16 -0
- data/test/sass/results/scss_import.css +31 -0
- data/test/sass/results/scss_importee.css +2 -0
- data/test/sass/results/subdir/nested_subdir/nested_subdir.css +1 -0
- data/test/sass/results/subdir/subdir.css +3 -0
- data/test/sass/results/units.css +11 -0
- data/test/sass/results/warn.css +0 -0
- data/test/sass/results/warn_imported.css +0 -0
- data/test/sass/script_conversion_test.rb +299 -0
- data/test/sass/script_test.rb +622 -0
- data/test/sass/scss/css_test.rb +1100 -0
- data/test/sass/scss/rx_test.rb +156 -0
- data/test/sass/scss/scss_test.rb +2106 -0
- data/test/sass/scss/test_helper.rb +37 -0
- data/test/sass/templates/_cached_import_option_partial.scss +1 -0
- data/test/sass/templates/_double_import_loop2.sass +1 -0
- data/test/sass/templates/_filename_fn_import.scss +11 -0
- data/test/sass/templates/_imported_charset_ibm866.sass +4 -0
- data/test/sass/templates/_imported_charset_utf8.sass +4 -0
- data/test/sass/templates/_imported_content.sass +3 -0
- data/test/sass/templates/_partial.sass +2 -0
- data/test/sass/templates/_same_name_different_partiality.scss +1 -0
- data/test/sass/templates/alt.sass +16 -0
- data/test/sass/templates/basic.sass +23 -0
- data/test/sass/templates/bork1.sass +2 -0
- data/test/sass/templates/bork2.sass +2 -0
- data/test/sass/templates/bork3.sass +2 -0
- data/test/sass/templates/bork4.sass +2 -0
- data/test/sass/templates/bork5.sass +3 -0
- data/test/sass/templates/cached_import_option.scss +3 -0
- data/test/sass/templates/compact.sass +17 -0
- data/test/sass/templates/complex.sass +305 -0
- data/test/sass/templates/compressed.sass +15 -0
- data/test/sass/templates/double_import_loop1.sass +1 -0
- data/test/sass/templates/expanded.sass +17 -0
- data/test/sass/templates/filename_fn.scss +18 -0
- data/test/sass/templates/if.sass +11 -0
- data/test/sass/templates/import.sass +12 -0
- data/test/sass/templates/import_charset.sass +9 -0
- data/test/sass/templates/import_charset_1_8.sass +6 -0
- data/test/sass/templates/import_charset_ibm866.sass +11 -0
- data/test/sass/templates/import_content.sass +4 -0
- data/test/sass/templates/importee.less +2 -0
- data/test/sass/templates/importee.sass +19 -0
- data/test/sass/templates/line_numbers.sass +13 -0
- data/test/sass/templates/mixin_bork.sass +5 -0
- data/test/sass/templates/mixins.sass +76 -0
- data/test/sass/templates/multiline.sass +20 -0
- data/test/sass/templates/nested.sass +25 -0
- data/test/sass/templates/nested_bork1.sass +2 -0
- data/test/sass/templates/nested_bork2.sass +2 -0
- data/test/sass/templates/nested_bork3.sass +2 -0
- data/test/sass/templates/nested_bork4.sass +2 -0
- data/test/sass/templates/nested_import.sass +2 -0
- data/test/sass/templates/nested_mixin_bork.sass +6 -0
- data/test/sass/templates/options.sass +2 -0
- data/test/sass/templates/parent_ref.sass +25 -0
- data/test/sass/templates/same_name_different_ext.sass +2 -0
- data/test/sass/templates/same_name_different_ext.scss +1 -0
- data/test/sass/templates/same_name_different_partiality.scss +1 -0
- data/test/sass/templates/script.sass +101 -0
- data/test/sass/templates/scss_import.scss +11 -0
- data/test/sass/templates/scss_importee.scss +1 -0
- data/test/sass/templates/single_import_loop.sass +1 -0
- data/test/sass/templates/subdir/import_up1.scss +1 -0
- data/test/sass/templates/subdir/import_up2.scss +1 -0
- data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +2 -0
- data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +3 -0
- data/test/sass/templates/subdir/subdir.sass +6 -0
- data/test/sass/templates/units.sass +11 -0
- data/test/sass/templates/warn.sass +3 -0
- data/test/sass/templates/warn_imported.sass +4 -0
- data/test/sass/test_helper.rb +8 -0
- data/test/sass/util/multibyte_string_scanner_test.rb +147 -0
- data/test/sass/util/subset_map_test.rb +91 -0
- data/test/sass/util_test.rb +382 -0
- data/test/test_helper.rb +80 -0
- metadata +354 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
module Sass::Script
|
|
2
|
+
# A SassScript parse node representing a unary operation,
|
|
3
|
+
# such as `-$b` or `not true`.
|
|
4
|
+
#
|
|
5
|
+
# Currently only `-`, `/`, and `not` are unary operators.
|
|
6
|
+
class UnaryOperation < Node
|
|
7
|
+
# @return [Symbol] The operation to perform
|
|
8
|
+
attr_reader :operator
|
|
9
|
+
|
|
10
|
+
# @return [Script::Node] The parse-tree node for the object of the operator
|
|
11
|
+
attr_reader :operand
|
|
12
|
+
|
|
13
|
+
# @param operand [Script::Node] See \{#operand}
|
|
14
|
+
# @param operator [Symbol] See \{#operator}
|
|
15
|
+
def initialize(operand, operator)
|
|
16
|
+
@operand = operand
|
|
17
|
+
@operator = operator
|
|
18
|
+
super()
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# @return [String] A human-readable s-expression representation of the operation
|
|
22
|
+
def inspect
|
|
23
|
+
"(#{@operator.inspect} #{@operand.inspect})"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# @see Node#to_sass
|
|
27
|
+
def to_sass(opts = {})
|
|
28
|
+
operand = @operand.to_sass(opts)
|
|
29
|
+
if @operand.is_a?(Operation) ||
|
|
30
|
+
(@operator == :minus &&
|
|
31
|
+
(operand =~ Sass::SCSS::RX::IDENT) == 0)
|
|
32
|
+
operand = "(#{@operand.to_sass(opts)})"
|
|
33
|
+
end
|
|
34
|
+
op = Lexer::OPERATORS_REVERSE[@operator]
|
|
35
|
+
op + (op =~ /[a-z]/ ? " " : "") + operand
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Returns the operand of the operation.
|
|
39
|
+
#
|
|
40
|
+
# @return [Array<Node>]
|
|
41
|
+
# @see Node#children
|
|
42
|
+
def children
|
|
43
|
+
[@operand]
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @see Node#deep_copy
|
|
47
|
+
def deep_copy
|
|
48
|
+
node = dup
|
|
49
|
+
node.instance_variable_set('@operand', @operand.deep_copy)
|
|
50
|
+
node
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
protected
|
|
54
|
+
|
|
55
|
+
# Evaluates the operation.
|
|
56
|
+
#
|
|
57
|
+
# @param environment [Sass::Environment] The environment in which to evaluate the SassScript
|
|
58
|
+
# @return [Literal] The SassScript object that is the value of the operation
|
|
59
|
+
# @raise [Sass::SyntaxError] if the operation is undefined for the operand
|
|
60
|
+
def _perform(environment)
|
|
61
|
+
operator = "unary_#{@operator}"
|
|
62
|
+
literal = @operand.perform(environment)
|
|
63
|
+
literal.send(operator)
|
|
64
|
+
rescue NoMethodError => e
|
|
65
|
+
raise e unless e.name.to_s == operator.to_s
|
|
66
|
+
raise Sass::SyntaxError.new("Undefined unary operation: \"#{@operator} #{literal}\".")
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
module Sass
|
|
2
|
+
module Script
|
|
3
|
+
# A SassScript parse node representing a variable.
|
|
4
|
+
class Variable < Node
|
|
5
|
+
# The name of the variable.
|
|
6
|
+
#
|
|
7
|
+
# @return [String]
|
|
8
|
+
attr_reader :name
|
|
9
|
+
|
|
10
|
+
# The underscored name of the variable.
|
|
11
|
+
#
|
|
12
|
+
# @return [String]
|
|
13
|
+
attr_reader :underscored_name
|
|
14
|
+
|
|
15
|
+
# @param name [String] See \{#name}
|
|
16
|
+
def initialize(name)
|
|
17
|
+
@name = name
|
|
18
|
+
@underscored_name = name.gsub(/-/,"_")
|
|
19
|
+
super()
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# @return [String] A string representation of the variable
|
|
23
|
+
def inspect(opts = {})
|
|
24
|
+
"$#{dasherize(name, opts)}"
|
|
25
|
+
end
|
|
26
|
+
alias_method :to_sass, :inspect
|
|
27
|
+
|
|
28
|
+
# Returns an empty array.
|
|
29
|
+
#
|
|
30
|
+
# @return [Array<Node>] empty
|
|
31
|
+
# @see Node#children
|
|
32
|
+
def children
|
|
33
|
+
[]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# @see Node#deep_copy
|
|
37
|
+
def deep_copy
|
|
38
|
+
dup
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
protected
|
|
42
|
+
|
|
43
|
+
# Evaluates the variable.
|
|
44
|
+
#
|
|
45
|
+
# @param environment [Sass::Environment] The environment in which to evaluate the SassScript
|
|
46
|
+
# @return [Literal] The SassScript object that is the value of the variable
|
|
47
|
+
# @raise [Sass::SyntaxError] if the variable is undefined
|
|
48
|
+
def _perform(environment)
|
|
49
|
+
raise SyntaxError.new("Undefined variable: \"$#{name}\".") unless val = environment.var(name)
|
|
50
|
+
if val.is_a?(Number)
|
|
51
|
+
val = val.dup
|
|
52
|
+
val.original = nil
|
|
53
|
+
end
|
|
54
|
+
return val
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
data/lib/sass/script.rb
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'sass/script/node'
|
|
2
|
+
require 'sass/script/variable'
|
|
3
|
+
require 'sass/script/funcall'
|
|
4
|
+
require 'sass/script/operation'
|
|
5
|
+
require 'sass/script/literal'
|
|
6
|
+
require 'sass/script/parser'
|
|
7
|
+
|
|
8
|
+
module Sass
|
|
9
|
+
# SassScript is code that's embedded in Sass documents
|
|
10
|
+
# to allow for property values to be computed from variables.
|
|
11
|
+
#
|
|
12
|
+
# This module contains code that handles the parsing and evaluation of SassScript.
|
|
13
|
+
module Script
|
|
14
|
+
# The regular expression used to parse variables.
|
|
15
|
+
MATCH = /^\$(#{Sass::SCSS::RX::IDENT})\s*:\s*(.+?)(!(?i:default))?$/
|
|
16
|
+
|
|
17
|
+
# The regular expression used to validate variables without matching.
|
|
18
|
+
VALIDATE = /^\$#{Sass::SCSS::RX::IDENT}$/
|
|
19
|
+
|
|
20
|
+
# Parses a string of SassScript
|
|
21
|
+
#
|
|
22
|
+
# @param value [String] The SassScript
|
|
23
|
+
# @param line [Fixnum] The number of the line on which the SassScript appeared.
|
|
24
|
+
# Used for error reporting
|
|
25
|
+
# @param offset [Fixnum] The number of characters in on `line` that the SassScript started.
|
|
26
|
+
# Used for error reporting
|
|
27
|
+
# @param options [{Symbol => Object}] An options hash;
|
|
28
|
+
# see {file:SASS_REFERENCE.md#sass_options the Sass options documentation}
|
|
29
|
+
# @return [Script::Node] The root node of the parse tree
|
|
30
|
+
def self.parse(value, line, offset, options = {})
|
|
31
|
+
Parser.parse(value, line, offset, options)
|
|
32
|
+
rescue Sass::SyntaxError => e
|
|
33
|
+
e.message << ": #{value.inspect}." if e.message == "SassScript error"
|
|
34
|
+
e.modify_backtrace(:line => line, :filename => options[:filename])
|
|
35
|
+
raise e
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'sass/script/css_parser'
|
|
2
|
+
|
|
3
|
+
module Sass
|
|
4
|
+
module SCSS
|
|
5
|
+
# This is a subclass of {Parser} which only parses plain CSS.
|
|
6
|
+
# It doesn't support any Sass extensions, such as interpolation,
|
|
7
|
+
# parent references, nested selectors, and so forth.
|
|
8
|
+
# It does support all the same CSS hacks as the SCSS parser, though.
|
|
9
|
+
class CssParser < StaticParser
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
def placeholder_selector; nil; end
|
|
13
|
+
def parent_selector; nil; end
|
|
14
|
+
def interpolation; nil; end
|
|
15
|
+
def use_css_import?; true; end
|
|
16
|
+
|
|
17
|
+
def block_child(context)
|
|
18
|
+
case context
|
|
19
|
+
when :ruleset
|
|
20
|
+
declaration
|
|
21
|
+
when :stylesheet
|
|
22
|
+
directive || ruleset
|
|
23
|
+
when :directive
|
|
24
|
+
directive || declaration_or_ruleset
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def nested_properties!(node, space)
|
|
29
|
+
expected('expression (e.g. 1px, bold)');
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
@sass_script_parser = Class.new(Sass::Script::CssParser)
|
|
33
|
+
@sass_script_parser.send(:include, ScriptParser)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|