Class: MODL::Parser::Substitutions

Inherits:
Object
  • Object
show all
Defined in:
lib/modl/parser/substitutions.rb

Overview

Escape-sequence replacements for MODL files.

Constant Summary collapse

@@subs =
[
    ['~\\', '\\'],
    ['\\\\', '\\'],
    ['~~', '~'],
    ['\\~', '~'],
    ['~(', '('],
    ['\\(', '('],
    ['~)', ')'],
    ['\\)', ')'],
    ['~[', '['],
    ['\\[', '['],
    ['~]', ']'],
    ['\\]', ']'],
    ['~{', '{'],
    ['\\{', '{'],
    ['~}', '}'],
    ['\\}', '}'],
    ['~;', ';'],
    ['\\;', ';'],
    ['~:', ':'],
    ['\\:', ':'],
    ['~`', '`'],
    ['\\`', '`'],
    ['~"', '"'],
    ['\\"', '"'],
    ['~=', '='],
    ['\\=', '='],
    ['~/', '/'],
    ['\\/', '/'],
    ['<', '<'],
    ['\\<', '<'],
    ['~>', '>'],
    ['\\>', '>'],
    ['~&', '&'],
    ['\\&', '&'],
    ['!', '!'],
    ['\\!', '!'],
    ['~|', '|'],
    ['\\|', '|'],
    ['\\t', "\t"],
    ['\\n', "\n"],
    ['\\b', "\b"],
    ['\\f', "\f"],
    ['\\r', "\r"]
]

Class Method Summary collapse

Class Method Details

.process(str) ⇒ Object

Replace all escape sequences in the supplied string and return the new value.



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/modl/parser/substitutions.rb', line 77

def self.process(str)
  return str unless str.is_a? String

  # Remove unescaped graves and double quotes
  new_str = Sutil.unquote(str)

  # Handle escape sequences
  @@subs.each do |s|
    loop do
      prev = new_str
      new_str = new_str.sub(s[0], s[1])
      break unless new_str && new_str != prev
    end
  end
  new_str
end