Method: Interscript::Node::Rule::Sub#reverse

Defined in:
lib/interscript/node/rule/sub.rb

#reverseObject



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/interscript/node/rule/sub.rb', line 67

def reverse
  if to == :upcase
    xfrom = from.downcase
    xto = :downcase
  elsif to == :downcase
    xfrom = from.upcase
    xto = :upcase
  else
    xto, xfrom = reverse_transfer(from, to)
  end

  # A special case: sub "a", "" shouldn't be present in a reverse map
  rrun = self.reverse_run.nil? ? nil : !self.reverse_run
  if rrun.nil? && !has_assertions? &&
    (xfrom == "" ||
      (Interscript::Node::Item::String === xfrom && xfrom.data == '') ||
      (Interscript::Node::Item::Alias === xfrom && xfrom.name == :none)
    )

    rrun = true
  end

  Interscript::Node::Rule::Sub.new(xfrom, xto,
    before: before, after: after,
    not_before: not_before, not_after: not_after,

    reverse_run: rrun,

    priority: priority ? -priority : nil
  )
end