teamcapybara--capybara/lib/capybara/selector/css.rb

28 lines
758 B
Ruby
Raw Normal View History

# frozen_string_literal: true
module Capybara
class Selector
class CSS
def self.escape(str)
value = str.dup
2018-05-10 20:20:23 +00:00
out = +""
out << value.slice!(0...1) if value =~ /^[-_]/
2018-01-09 22:05:50 +00:00
out << (value[0] =~ NMSTART ? value.slice!(0...1) : escape_char(value.slice!(0...1)))
out << value.gsub(/[^a-zA-Z0-9_-]/) { |c| escape_char c }
out
end
def self.escape_char(c)
c =~ %r{[ -/:-~]} ? "\\#{c}" : format("\\%06x", c.ord)
end
2018-05-10 20:20:23 +00:00
S = '\u{80}-\u{D7FF}\u{E000}-\u{FFFD}\u{10000}-\u{10FFFF}'
H = /[0-9a-fA-F]/
UNICODE = /\\#{H}{1,6}[ \t\r\n\f]?/
NONASCII = /[#{S}]/
ESCAPE = /#{UNICODE}|\\[ -~#{S}]/
NMSTART = /[_a-zA-Z]|#{NONASCII}|#{ESCAPE}/
end
end
2018-01-09 22:05:50 +00:00
end