Sha256: 0e28933704765d3a3ed533b202c2fbcda5a8d25ddb4bb7d2a108237802e84a9c

Contents?: true

Size: 934 Bytes

Versions: 13

Compression:

Stored size: 934 Bytes

Contents

class HTMLEntities
  class Decoder #:nodoc:
    def initialize(flavor)
      @flavor = flavor
      @map = HTMLEntities::MAPPINGS[@flavor]
      @entity_regexp = entity_regexp
    end

    def decode(source)
      prepare(source).gsub(@entity_regexp){
        if $1 && codepoint = @map[$1]
          [codepoint].pack('U')
        elsif $2
          [$2.to_i(10)].pack('U')
        elsif $3
          [$3.to_i(16)].pack('U')
        else
          $&
        end
      }
    end

  private
    def prepare(string) #:nodoc:
      string.to_s.encode(Encoding::UTF_8)
    end

    def entity_regexp
      key_lengths = @map.keys.map{ |k| k.length }
      if @flavor == 'expanded'
        entity_name_pattern = '(?:b\.)?[a-z][a-z0-9]'
      else
        entity_name_pattern = '[a-z][a-z0-9]'
      end
      /&(?:(#{entity_name_pattern}{#{key_lengths.min - 1},#{key_lengths.max - 1}})|#([0-9]{1,7})|#x([0-9a-f]{1,6}));/i
    end
  end
end

Version data entries

13 entries across 13 versions & 6 rubygems

Version Path
cm-admin-1.5.22 vendor/bundle/ruby/3.3.0/gems/htmlentities-4.3.4/lib/htmlentities/decoder.rb
cm-admin-1.5.21 vendor/bundle/ruby/3.3.0/gems/htmlentities-4.3.4/lib/htmlentities/decoder.rb
cm-admin-1.5.20 vendor/bundle/ruby/3.3.0/gems/htmlentities-4.3.4/lib/htmlentities/decoder.rb
metanorma-cli-1.3.4 gems/ruby/2.6.0/gems/htmlentities-4.3.4/lib/htmlentities/decoder.rb
metanorma-cli-1.3.3.1 gems/ruby/2.6.0/gems/htmlentities-4.3.4/lib/htmlentities/decoder.rb
logstash-filter-htmlentities-0.1.0 vendor/bundle/jruby/1.9/gems/htmlentities-4.3.4/lib/htmlentities/decoder.rb
ish_lib_manager-0.0.1 test/dummy/vendor/bundle/ruby/2.3.0/gems/htmlentities-4.3.4/lib/htmlentities/decoder.rb
solidus_backend-1.0.0.pre3 vendor/bundle/gems/htmlentities-4.3.4/lib/htmlentities/decoder.rb
solidus_backend-1.0.0.pre2 vendor/bundle/gems/htmlentities-4.3.4/lib/htmlentities/decoder.rb
htmlentities-4.3.4 lib/htmlentities/decoder.rb
solidus_backend-1.0.0.pre vendor/bundle/gems/htmlentities-4.3.3/lib/htmlentities/decoder.rb
htmlentities-4.3.3 lib/htmlentities/decoder.rb
htmlentities-4.3.2 lib/htmlentities/decoder.rb