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
+
+}
+
+