Class: Sass::Script::Tree::Interpolation

Inherits:
Node
  • Object
show all
Defined in:
/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/tree/interpolation.rb

Overview

A SassScript object representing #{} interpolation outside a string.

See Also:

Instance Attribute Summary (collapse)

Attributes inherited from Node

#css_variable_warning, #filename, #line, #options, #source_range

Instance Method Summary (collapse)

Methods inherited from Node

#dasherize, #force_division!, #opts, #perform

Constructor Details

- (Interpolation) initialize(before, mid, after, wb, wa, opts = {})

Interpolation in a property is of the form before #{mid} after.

Parameters:



52
53
54
55
56
57
58
59
60
61
62
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/tree/interpolation.rb', line 52

def initialize(before, mid, after, wb, wa, opts = {})
  # rubocop:enable ParameterLists
  @before = before
  @mid = mid
  @after = after
  @whitespace_before = wb
  @whitespace_after = wa
  @originally_text = opts[:originally_text] || false
  @warn_for_color = opts[:warn_for_color] || false
  @deprecation = opts[:deprecation] || :none
end

Instance Attribute Details

- (Node) after (readonly)

Returns The SassScript after the interpolation

Returns:

  • (Node)

    The SassScript after the interpolation



13
14
15
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/tree/interpolation.rb', line 13

def after
  @after
end

- (Node) before (readonly)

Returns The SassScript before the interpolation

Returns:

  • (Node)

    The SassScript before the interpolation



7
8
9
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/tree/interpolation.rb', line 7

def before
  @before
end

- (Symbol) deprecation (readonly)

The type of interpolation deprecation for this node.

This can be :none, indicating that the node doesn’t use deprecated interpolation; :immediate, indicating that a deprecation warning should be emitted as soon as possible; or :potential, indicating that a deprecation warning should be emitted if the resulting string is used in a way that would distinguish it from a list.

Returns:

  • (Symbol)


39
40
41
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/tree/interpolation.rb', line 39

def deprecation
  @deprecation
end

- (Node) mid (readonly)

Returns The SassScript within the interpolation

Returns:

  • (Node)

    The SassScript within the interpolation



10
11
12
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/tree/interpolation.rb', line 10

def mid
  @mid
end

- (Boolean) originally_text (readonly)

Returns Whether the original format of the interpolation was plain text, not an interpolation. This is used when converting back to SassScript.

Returns:

  • (Boolean)

    Whether the original format of the interpolation was plain text, not an interpolation. This is used when converting back to SassScript.



24
25
26
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/tree/interpolation.rb', line 24

def originally_text
  @originally_text
end

- (Boolean) warn_for_color (readonly)

Returns Whether a color value passed to the interpolation should generate a warning.

Returns:

  • (Boolean)

    Whether a color value passed to the interpolation should generate a warning.



28
29
30
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/tree/interpolation.rb', line 28

def warn_for_color
  @warn_for_color
end

- (Boolean) whitespace_after (readonly)

Returns Whether there was whitespace between } and after

Returns:

  • (Boolean)

    Whether there was whitespace between } and after



19
20
21
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/tree/interpolation.rb', line 19

def whitespace_after
  @whitespace_after
end

- (Boolean) whitespace_before (readonly)

Returns Whether there was whitespace between before and #{

Returns:

  • (Boolean)

    Whether there was whitespace between before and #{



16
17
18
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/tree/interpolation.rb', line 16

def whitespace_before
  @whitespace_before
end

Instance Method Details

- (Array<Node>) children

Returns the three components of the interpolation, before, mid, and after.

Returns:

See Also:



102
103
104
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/tree/interpolation.rb', line 102

def children
  [@before, @mid, @after].compact
end

- deep_copy

See Also:



107
108
109
110
111
112
113
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/tree/interpolation.rb', line 107

def deep_copy
  node = dup
  node.instance_variable_set('@before', @before.deep_copy) if @before
  node.instance_variable_set('@mid', @mid.deep_copy)
  node.instance_variable_set('@after', @after.deep_copy) if @after
  node
end

- (String) inspect

Returns A human-readable s-expression representation of the interpolation

Returns:

  • (String)

    A human-readable s-expression representation of the interpolation



65
66
67
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/tree/interpolation.rb', line 65

def inspect
  "(interpolation #{@before.inspect} #{@mid.inspect} #{@after.inspect})"
end

- (Sass::Script::Tree::Node) to_quoted_equivalent

Returns an unquote() expression that will evaluate to the same value as this interpolation.



88
89
90
91
92
93
94
95
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/tree/interpolation.rb', line 88

def to_quoted_equivalent
  Funcall.new(
    "unquote",
    [to_string_interpolation(self)],
    Sass::Util::NormalizedMap.new,
    nil,
    nil)
end

- to_sass(opts = {})

See Also:



70
71
72
73
74
75
76
77
78
79
80
81
82
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/tree/interpolation.rb', line 70

def to_sass(opts = {})
  return to_quoted_equivalent.to_sass if deprecation == :immediate

  res = ""
  res << @before.to_sass(opts) if @before
  res << ' ' if @before && @whitespace_before
  res << '#{' unless @originally_text
  res << @mid.to_sass(opts)
  res << '}' unless @originally_text
  res << ' ' if @after && @whitespace_after
  res << @after.to_sass(opts) if @after
  res
end

- (Sass::Script::Tree::StringInterpolation) to_string_interpolation(node_or_interp) (protected)

Converts a script node into a corresponding string interpolation expression.

Parameters:

Returns:



122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/script/tree/interpolation.rb', line 122

def to_string_interpolation(node_or_interp)
  unless node_or_interp.is_a?(Interpolation)
    node = node_or_interp
    return string_literal(node.value.to_s) if node.is_a?(Literal)
    if node.is_a?(StringInterpolation)
      return concat(string_literal(node.quote), concat(node, string_literal(node.quote)))
    end
    return StringInterpolation.new(string_literal(""), node, string_literal(""))
  end

  interp = node_or_interp
  after_string_or_interp =
    if interp.after
      to_string_interpolation(interp.after)
    else
      string_literal("")
    end
  if interp.after && interp.whitespace_after
    after_string_or_interp = concat(string_literal(' '), after_string_or_interp)
  end

  mid_string_or_interp = to_string_interpolation(interp.mid)

  before_string_or_interp =
    if interp.before
      to_string_interpolation(interp.before)
    else
      string_literal("")
    end
  if interp.before && interp.whitespace_before
    before_string_or_interp = concat(before_string_or_interp, string_literal(' '))
  end

  concat(before_string_or_interp, concat(mid_string_or_interp, after_string_or_interp))
end