Sha256: a6355b4528abcfb0cb921472d2a3030a791534609f3709e8d8cac2f4077ae5a5

Contents?: true

Size: 1.52 KB

Versions: 106

Compression:

Stored size: 1.52 KB

Contents

class String
  # Splits text into tokens the way a shell would, handling quoted
  # text as a single token. Use '\"' and "\'" to escape quotes and
  # '\\' to escape a backslash.
  #
  # @return [Array] an array representing the tokens
  def shell_split
    out = [""]
    state = :none
    escape_next = false
    quote = ""
    strip.split(//).each do |char|
      case state
      when :none, :space
        case char
        when /\s/
          out << "" unless state == :space
          state = :space
          escape_next = false
        when "\\"
          if escape_next
            out.last << char
            escape_next = false
          else
            escape_next = true
          end
        when '"', "'"
          if escape_next
            out.last << char
            escape_next = false
          else
            state = char
            quote = ""
          end
        else
          state = :none
          out.last << char
          escape_next = false
        end
      when '"', "'"
        case char
        when '"', "'"
          if escape_next
            quote << char
            escape_next = false
          elsif char == state
            out.last << quote
            state = :none
          else
            quote << char
          end
        when '\\'
          if escape_next
            quote << char
            escape_next = false
          else
            escape_next = true
          end
        else
          quote << char
          escape_next = false
        end
      end
    end
    out
  end
end

Version data entries

106 entries across 86 versions & 10 rubygems

Version Path
abaci-0.3.0 vendor/bundle/gems/yard-0.9.2/lib/yard/core_ext/string.rb
abaci-0.3.0 vendor/bundle/gems/yard-0.9.1/lib/yard/core_ext/string.rb
yard-0.9.5 lib/yard/core_ext/string.rb
yard-0.9.4 lib/yard/core_ext/string.rb
yard-0.9.3 lib/yard/core_ext/string.rb
yard-0.9.2 lib/yard/core_ext/string.rb
yard-0.9.1 lib/yard/core_ext/string.rb
yard-0.9.0 lib/yard/core_ext/string.rb
yard-0.8.7.6 lib/yard/core_ext/string.rb
yard-0.8.7.5 lib/yard/core_ext/string.rb
climine-0.0.7 vendor/bundle/ruby/2.0.0/gems/yard-0.8.7.3/lib/yard/core_ext/string.rb
climine-0.0.7 vendor/bundle/ruby/2.1.0/gems/yard-0.8.7.3/lib/yard/core_ext/string.rb
climine-0.0.6 vendor/bundle/ruby/2.0.0/gems/yard-0.8.7.3/lib/yard/core_ext/string.rb
climine-0.0.5 vendor/bundle/ruby/2.0.0/gems/yard-0.8.7.3/lib/yard/core_ext/string.rb
yard-0.8.7.4 lib/yard/core_ext/string.rb
climine-0.0.4 vendor/bundle/ruby/2.0.0/gems/yard-0.8.7.3/lib/yard/core_ext/string.rb
climine-0.0.3 vendor/bundle/ruby/2.0.0/gems/yard-0.8.7.3/lib/yard/core_ext/string.rb
mango-0.8.0 vendor/bundler/ruby/2.1.0/gems/yard-0.8.7.3/lib/yard/core_ext/string.rb
mango-0.7.1 vendor/bundler/ruby/2.0.0/gems/yard-0.8.7.3/lib/yard/core_ext/string.rb
mango-0.7.0 vendor/bundler/ruby/2.0.0/gems/yard-0.8.7.3/lib/yard/core_ext/string.rb