Class: Sass::Script::Value::String
- Inherits:
- Base
- Object
- Base
- Sass::Script::Value::String
- Defined in:
- /Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/value/string.rb
Overview
A SassScript object representing a CSS string or a CSS identifier.
Instance Attribute Summary (collapse)
- - (Symbol) type readonly
Whether this is a CSS string or a CSS identifier.
- - (String) value 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.
- - (String) initialize(value, type = :identifier, deprecated_interp_equivalent = nil) constructor
Creates a new string.
- - inspect
- - plus(other)
- - separator
- - to_a
- - to_s(opts = {})
- - to_sass(opts = {})
Methods inherited from Base
#==, #_perform, #assert_int!, #div, #eq, #eql?, #hash, #minus, #neq, #null?, #single_eq, #to_bool, #to_h, #to_i, #unary_div, #unary_minus, #unary_not, #unary_plus
Constructor Details
- (String) initialize(value, type = :identifier, deprecated_interp_equivalent = nil)
Creates a new string.
82 83 84 85 86 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/value/string.rb', line 82
def initialize(value, type = :identifier, deprecated_interp_equivalent = nil)
super(value)
@type = type
@deprecated_interp_equivalent = deprecated_interp_equivalent
end |
Instance Attribute Details
- (Symbol) type (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.
15 16 17 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/value/string.rb', line 15
def type
@type
end |
- (String) value (readonly)
The Ruby value of the string.
8 9 10 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/value/string.rb', line 8
def value
@value
end |
Class Method Details
+ quote(contents, opts = {})
Returns the quoted string representation of contents.
38 39 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 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/value/string.rb', line 38
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)
17 18 19 20 21 22 23 24 25 26 27 28 29 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/value/string.rb', line 17
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.
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/value/string.rb', line 121
def check_deprecated_interp
return unless @deprecated_interp_equivalent
# rubocop:disable GlobalVars
$_sass_deprecated_interp_warnings ||= Set.new
key = [source_range.start_pos.line, source_range.file, @deprecated_interp_equivalent]
return if $_sass_deprecated_interp_warnings.include?(key)
$_sass_deprecated_interp_warnings << key
# rubocop:enable GlobalVars
location = "on line #{source_range.start_pos.line}"
location << " of #{source_range.file}" if source_range.file
Sass::Util.sass_warn <<WARNING
DEPRECATION WARNING #{location}: \#{} 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
141 142 143 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/value/string.rb', line 141
def inspect
String.quote(value)
end |
- plus(other)
89 90 91 92 93 94 95 96 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/value/string.rb', line 89
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
109 110 111 112 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/value/string.rb', line 109
def separator
check_deprecated_interp
super
end |
- to_a
114 115 116 117 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/value/string.rb', line 114
def to_a
check_deprecated_interp
super
end |
- to_s(opts = {})
99 100 101 102 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/value/string.rb', line 99
def to_s(opts = {})
return @value.gsub(/\n\s*/, ' ') if opts[:quote] == :none || @type == :identifier
String.quote(value, opts)
end |
- to_sass(opts = {})
105 106 107 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/value/string.rb', line 105
def to_sass(opts = {})
to_s(opts.merge(:sass => true))
end |