summaryrefslogtreecommitdiffstats
path: root/fontpackages/compat.rb
diff options
context:
space:
mode:
authorAkira TAGOH <akira@tagoh.org>2010-12-20 20:04:43 +0900
committerAkira TAGOH <akira@tagoh.org>2010-12-20 20:04:43 +0900
commit32a3713d07f8df7429a55a29150e3008d825c816 (patch)
tree75edfeb8b0391954ad3aa5b661b509ed4cff8411 /fontpackages/compat.rb
parentc3d51036009e68d97fcbf9069a4fa956a29c5b28 (diff)
downloadfonts-sig-32a3713d07f8df7429a55a29150e3008d825c816.tar.gz
fonts-sig-32a3713d07f8df7429a55a29150e3008d825c816.tar.xz
fonts-sig-32a3713d07f8df7429a55a29150e3008d825c816.zip
some utilities written in Ruby to parse comps, package handling through yum etc.
Diffstat (limited to 'fontpackages/compat.rb')
-rw-r--r--fontpackages/compat.rb79
1 files changed, 79 insertions, 0 deletions
diff --git a/fontpackages/compat.rb b/fontpackages/compat.rb
new file mode 100644
index 0000000..421310c
--- /dev/null
+++ b/fontpackages/compat.rb
@@ -0,0 +1,79 @@
+# compat.rb
+# Copyright (C) 2010 Red Hat, Inc.
+
+# Authors:
+# Akira TAGOH <tagoh@redhat.com>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+begin
+ Shellwords.escape("foo")
+rescue NoMethodError
+ module Shellwords
+ #
+ # Escapes a string so that it can be safely used in a Bourne shell
+ # command line.
+ #
+ # Note that a resulted string should be used unquoted and is not
+ # intended for use in double quotes nor in single quotes.
+ #
+ # open("| grep #{Shellwords.escape(pattern)} file") { |pipe|
+ # # ...
+ # }
+ #
+ # +String#shellescape+ is a shorthand for this function.
+ #
+ # open("| grep #{pattern.shellescape} file") { |pipe|
+ # # ...
+ # }
+ #
+ def shellescape(str)
+ # An empty argument will be skipped, so return empty quotes.
+ return "''" if str.empty?
+
+ str = str.dup
+
+ # Process as a single byte sequence because not all shell
+ # implementations are multibyte aware.
+ str.gsub!(/([^A-Za-z0-9_\-.,:\/@\n])/n, "\\\\\\1")
+
+ # A LF cannot be escaped with a backslash because a backslash + LF
+ # combo is regarded as line continuation and simply ignored.
+ str.gsub!(/\n/, "'\n'")
+
+ return str
+ end
+
+ module_function :shellescape
+
+ class << self
+ alias escape shellescape
+ end
+ end # module Shellwords
+
+ class String
+ #
+ # call-seq:
+ # str.shellescape => string
+ #
+ # Escapes +str+ so that it can be safely used in a Bourne shell
+ # command line. See +Shellwords::shellescape+ for details.
+ #
+ def shellescape
+ Shellwords.escape(self)
+ end
+ end
+end