New escape.tcl file

Change-Id: Ifa107cd2e02b977b5de02eacf49673cfdd59d7fb
Signed-off-by: Michael Walsh <micwalsh@us.ibm.com>
diff --git a/lib/escape.tcl b/lib/escape.tcl
new file mode 100755
index 0000000..493d943
--- /dev/null
+++ b/lib/escape.tcl
@@ -0,0 +1,127 @@
+#!/usr/bin/wish
+
+# This file provides many valuable quote and metachar escape processing
+# procedures.
+
+
+proc escape_bash_quotes { buffer } {
+
+  # Do a bash-style escape of all single quotes in the buffer and return the
+  # result.
+
+  # In bash, if you wish to have a single quote (i.e. apostrophe) inside
+  # single quotes, you must escape it.
+
+  # For example, the following bash command:
+  # echo 'Mike'\''s dog'
+  # Will produce the following output.
+  # Mike's dog
+
+  # So, if you pass the following string to this procedure:
+  # Mike's dog
+  # This procedure will return the following:
+  # Mike'\''s dog
+
+  # Description of argument(s):
+  # buffer                          The string whose single quotes are to be
+  #                                 escaped.
+
+  regsub -all {'} $buffer {'\''} new_buffer
+  return $new_buffer
+
+}
+
+
+proc quotes_to_curly_braces { buffer } {
+
+  # Convert a single-quoted string to a curly brace-quoted string and return
+  # the result.
+
+  # This procedure can help in converting bash expressions, which are quoted
+  # with single quotes, to equivalent TCL expressions which are quoted with
+  # curly braces.  This procedure will recognize and preserve a bash single
+  # quote escape sequence: '\''
+
+  # Description of argument(s):
+  # buffer                          The string whose quotes are to be
+  #                                 converted to curly braces.
+
+  # For example, the following code...
+
+  # set buffer {'Mike'\''s dog'}
+  # print_var buffer
+  # set buffer [quotes_to_curly_braces $buffer]
+  # print_var buffer
+
+  # Would produce the following result:
+  # buffer:     'Mike'\''s dog'
+  # buffer:     {Mike's dog}
+
+  set quote {'}
+
+  set return_buffer {}
+
+  set inside_quotes 0
+
+  # In a bash string "'\''" is an escaped quote which we wish to convert to a
+  # single quote.
+  set place_holder {supercaliforniaplace_holder}
+  regsub -all {'\\''} $buffer ${place_holder} buffer
+
+  # Walk the string one character at a time.
+  for {set ix 0} {$ix < [string length $buffer]} {incr ix} {
+    set char [string index $buffer $ix]
+    if { $char == $quote } {
+      # Processing a quote.  inside_quotes will tell us whether we've come
+      # across a left quote or a right quote.
+      if { $inside_quotes == 0 } {
+        # Processing closing quote.  Add a left curly brace to return_buffer
+        # and discard the quote char.
+        set return_buffer "${return_buffer}\{"
+        # Set inside_quotes to indicate we are now waiting for a closing quote.
+        set inside_quotes 1
+      } else {
+        # Processing opening quote.  Add a right curly brace to return_buffer
+        # and discard the quote char.
+        set return_buffer "${return_buffer}\}"
+        # Clear inside_quotes to indicate we have found our closing quote.
+        set inside_quotes 0
+      }
+    } else {
+      # For non-quote character, simply add it to the return buffer/
+      set return_buffer "${return_buffer}${char}"
+    }
+  }
+
+  regsub -all ${place_holder} $return_buffer {'} return_buffer
+
+  return $return_buffer
+
+}
+
+
+proc curly_braces_to_quotes { buffer } {
+
+  # Convert a curly brace-quoted string to a single-quoted string and return
+  # the result.
+
+  # This procedure can help in converting TCL expressions, which are quoted
+  # with curly braces, to equivalent bash expressions which are quoted with
+  # single quotes.  This procedure will first convert single quotes to the
+  # bash escaped single quote sequence: '\''
+
+  # Description of argument(s):
+  # buffer                          The string whose curly braces are to be
+  #                                 converted to single quotes.
+
+  # For example, the following buffer value:
+  # echo {Mike's dog}
+  # Will be changed to this:
+  # echo 'Mike'\''s dog'
+
+  regsub -all {[\{\}]} [escape_bash_quotes $buffer] {'} new_buffer
+  return $new_buffer
+
+}
+
+