Class: Sass::Script::Value::String
- Defined in:
- lib/sass/script/value/string.rb
Overview
A SassScript object representing a CSS string or a CSS identifier.
Constant Summary collapse
- @@interpolation_deprecation =
Sass::Deprecation.new
Instance Attribute Summary collapse
-
#type ⇒ Symbol
readonly
Whether this is a CSS string or a CSS identifier.
-
#value ⇒ String
readonly
The Ruby value of the string.
Attributes inherited from Base
Class Method Summary collapse
-
.quote(contents, opts = {})
Returns the quoted string representation of
contents. - .value(contents)
Instance Method Summary collapse
-
#check_deprecated_interp
Prints a warning if this string was created using potentially-deprecated interpolation.
-
#initialize(value, type = :identifier, deprecated_interp_equivalent = nil) ⇒ String
constructor
Creates a new string.
- #inspect
- #plus(other)
- #separator
- #to_a
- #to_s(opts = {})
- #to_sass(opts = {})
Methods inherited from Base
#==, #_perform, #assert_int!, #bracketed, #div, #eq, #eql?, #hash, #minus, #neq, #null?, #single_eq, #to_bool, #to_h, #to_i, #unary_div, #unary_minus, #unary_not, #unary_plus, #with_contents
Constructor Details
#initialize(value, type = :identifier, deprecated_interp_equivalent = nil) ⇒ String
Creates a new string.
84 85 86 87 88 |
# File 'lib/sass/script/value/string.rb', line 84
def initialize(value, type = :identifier, deprecated_interp_equivalent = nil)
super(value)
@type = type
@deprecated_interp_equivalent = deprecated_interp_equivalent
end
|
Instance Attribute Details
#type ⇒ Symbol (readonly)
Whether this is a CSS string or a CSS identifier. The difference is that strings are written with double-quotes, while identifiers aren't.
17 18 19 |
# File 'lib/sass/script/value/string.rb', line 17
def type
@type
end
|
#value ⇒ String (readonly)
The Ruby value of the string.
10 11 12 |
# File 'lib/sass/script/value/string.rb', line 10
def value
@value
end
|
Class Method Details
.quote(contents, opts = {})
Returns the quoted string representation of contents.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/sass/script/value/string.rb', line 40
def self.quote(contents, opts = {})
quote = opts[:quote]
# Short-circuit if there are no characters that need quoting.
unless contents =~ /[\n\\"']|\#\{/
quote ||= '"'
return "#{quote}#{contents}#{quote}"
end
if quote.nil?
if contents.include?('"')
if contents.include?("'")
quote = '"'
else
quote = "'"
end
else
quote = '"'
end
end
# Replace single backslashes with multiples.
contents = contents.gsub("\\", "\\\\\\\\")
# Escape interpolation.
contents = contents.gsub('#{', "\\\#{") if opts[:sass]
if quote == '"'
contents = contents.gsub('"', "\\\"")
else
contents = contents.gsub("'", "\\'")
end
contents = contents.gsub(/\n(?![a-fA-F0-9\s])/, "\\a").gsub("\n", "\\a ")
"#{quote}#{contents}#{quote}"
end
|
.value(contents)
19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/sass/script/value/string.rb', line 19
def self.value(contents)
contents.gsub("\\\n", "").gsub(/\\(?:([0-9a-fA-F]{1,6})\s?|(.))/) do
next $2 if $2
# Handle unicode escapes as per CSS Syntax Level 3 section 4.3.8.
code_point = $1.to_i(16)
if code_point == 0 || code_point > 0x10FFFF ||
(code_point >= 0xD800 && code_point <= 0xDFFF)
'�'
else
[code_point].pack("U")
end
end
end
|
Instance Method Details
#check_deprecated_interp
Prints a warning if this string was created using potentially-deprecated interpolation.
123 124 125 126 127 128 129 130 131 132 |
# File 'lib/sass/script/value/string.rb', line 123
def check_deprecated_interp
return unless @deprecated_interp_equivalent
@@interpolation_deprecation.warn(source_range.file, source_range.start_pos.line, <<WARNING)
\#{} interpolation near operators will be simplified in a future version of Sass.
To preserve the current behavior, use quotes:
#{@deprecated_interp_equivalent}
WARNING
end
|
#inspect
134 135 136 |
# File 'lib/sass/script/value/string.rb', line 134
def inspect
String.quote(value)
end
|
#plus(other)
91 92 93 94 95 96 97 98 |
# File 'lib/sass/script/value/string.rb', line 91
def plus(other)
other_value = if other.is_a?(Sass::Script::Value::String)
other.value
else
other.to_s(:quote => :none)
end
Sass::Script::Value::String.new(value + other_value, type)
end
|
#separator
111 112 113 114 |
# File 'lib/sass/script/value/string.rb', line 111
def separator
check_deprecated_interp
super
end
|
#to_a
116 117 118 119 |
# File 'lib/sass/script/value/string.rb', line 116
def to_a
check_deprecated_interp
super
end
|
#to_s(opts = {})
101 102 103 104 |
# File 'lib/sass/script/value/string.rb', line 101
def to_s(opts = {})
return @value.gsub(/\n\s*/, ' ') if opts[:quote] == :none || @type == :identifier
String.quote(value, opts)
end
|
#to_sass(opts = {})
107 108 109 |
# File 'lib/sass/script/value/string.rb', line 107
def to_sass(opts = {})
to_s(opts.merge(:sass => true))
end
|