mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/RUBY@9 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
48 lines
978 B
Ruby
48 lines
978 B
Ruby
# shellwords.rb
|
|
# original is shellwords.pl
|
|
#
|
|
# Usage:
|
|
# require 'shellwords.rb'
|
|
# words = Shellwords.shellwords(line)
|
|
#
|
|
# or
|
|
#
|
|
# include Shellwords
|
|
# words = shellwords(line)
|
|
|
|
module Shellwords
|
|
def shellwords(line)
|
|
return '' unless line
|
|
line.sub! /^\s+/, ''
|
|
words = []
|
|
while line != ''
|
|
field = ''
|
|
while TRUE
|
|
if line.sub! /^"(([^"\\]|\\.)*)"/, '' then
|
|
snippet = $1
|
|
snippet.gsub! /\\(.)/, '\1'
|
|
elsif line =~ /^"/ then
|
|
STDOUT.print "Unmatched double quote: $_\n"
|
|
exit
|
|
elsif line.sub! /^'(([^'\\]|\\.)*)'/, '' then
|
|
snippet = $1
|
|
snippet.gsub! /\\(.)/, '\1'
|
|
elsif line =~ /^'/ then
|
|
STDOUT.print "Unmatched single quote: $_\n"
|
|
exit
|
|
elsif line.sub! /^\\(.)/, '' then
|
|
snippet = $1
|
|
elsif line.sub! /^([^\s\\'"]+)/, '' then
|
|
snippet = $1
|
|
else
|
|
line.sub! /^\s+/, ''
|
|
break
|
|
end
|
|
field += snippet
|
|
end
|
|
words += field
|
|
end
|
|
words
|
|
end
|
|
module_function :shellwords
|
|
end
|