Sha256: bc4f6a6309dc8225c14059c703caa91be758b79e7343595ff7d2afe991871a6e

Contents?: true

Size: 1.59 KB

Versions: 63

Compression:

Stored size: 1.59 KB

Contents

# frozen_string_literal: true
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 = [String.new("")]
    state = :none
    escape_next = false
    quote = String.new("")
    strip.split(//).each do |char|
      case state
      when :none, :space
        case char
        when /\s/
          out << String.new("") 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 = String.new("")
          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

63 entries across 62 versions & 9 rubygems

Version Path
kinetic_sdk-5.0.29 gems/yard-0.9.36/lib/yard/core_ext/string.rb
kinetic_sdk-5.0.28 gems/yard-0.9.36/lib/yard/core_ext/string.rb
direct7-0.0.18 vendor/bundle/ruby/2.7.0/gems/yard-0.9.34/lib/yard/core_ext/string.rb
direct7-0.0.17 vendor/bundle/ruby/2.7.0/gems/yard-0.9.34/lib/yard/core_ext/string.rb
direct7-0.0.16 vendor/bundle/ruby/2.7.0/gems/yard-0.9.34/lib/yard/core_ext/string.rb
yard-0.9.37 lib/yard/core_ext/string.rb
kinetic_sdk-5.0.27 gems/yard-0.9.36/lib/yard/core_ext/string.rb
kinetic_sdk-5.0.26 gems/yard-0.9.36/lib/yard/core_ext/string.rb
kinetic_sdk-5.0.25 gems/yard-0.9.25/lib/yard/core_ext/string.rb
kinetic_sdk-5.0.24 gems/yard-0.9.25/lib/yard/core_ext/string.rb
direct7-0.0.13 vendor/bundle/ruby/2.7.0/gems/yard-0.9.34/lib/yard/core_ext/string.rb
yard-0.9.36 lib/yard/core_ext/string.rb
yard-0.9.35 lib/yard/core_ext/string.rb
direct7-0.0.12 vendor/bundle/ruby/2.7.0/gems/yard-0.9.34/lib/yard/core_ext/string.rb
kinetic_sdk-5.0.23 gems/yard-0.9.25/lib/yard/core_ext/string.rb
getargv-0.3.3-universal-darwin vendor/bundle/ruby/3.3.0/gems/yard-0.9.34/lib/yard/core_ext/string.rb
direct7-0.0.11 vendor/bundle/ruby/2.7.0/gems/yard-0.9.34/lib/yard/core_ext/string.rb
kinetic_sdk-5.0.22 gems/yard-0.9.25/lib/yard/core_ext/string.rb
kinetic_sdk-5.0.21 gems/yard-0.9.25/lib/yard/core_ext/string.rb
yard-0.9.34 lib/yard/core_ext/string.rb