Class: Sass::Script::Value::String

Inherits:
Base
  • Object
show all
Defined in:
lib/sass/script/value/string.rb

Overview

A SassScript object representing a CSS string or a CSS identifier.

Instance Attribute Summary collapse

Attributes inherited from Base

#options, #source_range

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#==, #_perform, #assert_int!, #div, #eq, #eql?, #hash, #minus, #neq, #null?, #separator, #single_eq, #to_a, #to_bool, #to_h, #to_i, #unary_div, #unary_minus, #unary_not, #unary_plus

Constructor Details

#initialize(value, type = :identifier) ⇒ String

Creates a new string.

Parameters:

  • value (String)

    See #value

  • type (Symbol) (defaults to: :identifier)

    See #type



79
80
81
82
# File 'lib/sass/script/value/string.rb', line 79

def initialize(value, type = :identifier)
  super(value)
  @type = type
end

Instance Attribute Details

#typeSymbol (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.

Returns:

  • (Symbol)

    :string or :identifier



15
16
17
# File 'lib/sass/script/value/string.rb', line 15

def type
  @type
end

#valueString (readonly)

The Ruby value of the string.

Returns:



8
9
10
# File '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 '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 '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

#inspect



105
106
107
# File 'lib/sass/script/value/string.rb', line 105

def inspect
  String.quote(value)
end

#plus(other)

See Also:

  • Value#plus


85
86
87
88
89
90
91
92
# File 'lib/sass/script/value/string.rb', line 85

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

#to_s(opts = {})

See Also:

  • Value#to_s


95
96
97
98
# File 'lib/sass/script/value/string.rb', line 95

def to_s(opts = {})
  return @value.gsub(/\n\s*/, ' ') if opts[:quote] == :none || @type == :identifier
  String.quote(value, opts)
end

#to_sass(opts = {})

See Also:

  • Value#to_sass


101
102
103
# File 'lib/sass/script/value/string.rb', line 101

def to_sass(opts = {})
  to_s(opts.merge(:sass => true))
end