class Sass::Selector::Sequence

def subweave(seq1, seq2, cache = {})

Returns:
  • (Array>) -

Parameters:
  • seq2 (Array) --
  • seq1 (Array) --

Overloads:
  • def subweave(seq1, seq2)
def subweave(seq1, seq2, cache = {})
  return [seq2] if seq1.empty?
  return [seq1] if seq2.empty?
  seq1 = group_selectors(seq1)
  seq2 = group_selectors(seq2)
  lcs = Haml::Util.lcs(seq2, seq1) do |s1, s2|
    next s1 if s1 == s2
    next unless s1.first.is_a?(SimpleSequence) && s2.first.is_a?(SimpleSequence)
    next s2 if subweave_superselector?(s1, s2)
    next s1 if subweave_superselector?(s2, s1)
  end
  diff = []
  until lcs.empty?
    diff << chunks(seq1, seq2) {|s| subweave_superselector?(s.first, lcs.first)} << [lcs.shift]
    seq1.shift
    seq2.shift
  end
  diff << chunks(seq1, seq2) {|s| s.empty?}
  diff.reject! {|c| c.empty?}
  Haml::Util.paths(diff).map {|p| p.flatten}
end