Sha256: d44ac7964d11c2df7aa406fcb00930c3409c0af221a27266465c34a1e6ce738c

Contents?: true

Size: 1.17 KB

Versions: 21

Compression:

Stored size: 1.17 KB

Contents

# encoding: UTF-8

module Sterile

  class << self

    # Turn Unicode characters into their HTML equivilents.
    # If a valid HTML entity is not possible, it will create a numeric entity.
    #
    #   q{“Economy Hits Bottom,” ran the headline}.encode_entities # => &ldquo;Economy Hits Bottom,&rdquo; ran the headline
    #
    def encode_entities(string)
      transmogrify(string) do |mapping, codepoint|
        if (32..126).include?(codepoint)
          mapping[0]
        else
          "&" + (mapping[2] || "#" + codepoint.to_s) + ";"
        end
      end
    end


    # The reverse of +encode_entities+. Turns HTML or numeric entities into
    # their Unicode counterparts.
    #
    def decode_entities(string)
      string.gsub!(/&#(\d{1,4});/) { [$1.to_i].pack("U") }
      string.gsub(/&([a-zA-Z0-9]+);/) do
        codepoint = html_entities_data[$1]
        codepoint ? [codepoint].pack("U") : $&
      end
    end


    private

    # Lazy load html entities
    #
    def html_entities_data
      @html_entities_data ||= begin
        require "sterile/data/html_entities_data"
        Data.html_entities_data
      end
    end

  end # class << self

end # module Sterile

Version data entries

21 entries across 21 versions & 2 rubygems

Version Path
sterile-1.0.22 lib/sterile/entities.rb
sterile-1.0.21 lib/sterile/entities.rb
sterile-1.0.20 lib/sterile/entities.rb
sterile-1.0.19 lib/sterile/entities.rb
metanorma-cli-1.3.4 gems/ruby/2.6.0/gems/sterile-1.0.17/lib/sterile/entities.rb
metanorma-cli-1.3.3.1 gems/ruby/2.6.0/gems/sterile-1.0.17/lib/sterile/entities.rb
sterile-1.0.17 lib/sterile/entities.rb
sterile-1.0.16 lib/sterile/entities.rb
sterile-1.0.14 lib/sterile/entities.rb
sterile-1.0.13 lib/sterile/entities.rb
sterile-1.0.12 lib/sterile/entities.rb
sterile-1.0.11 lib/sterile/entities.rb
sterile-1.0.10 lib/sterile/entities.rb
sterile-1.0.9 lib/sterile/entities.rb
sterile-1.0.8 lib/sterile/entities.rb
sterile-1.0.7 lib/sterile/entities.rb
sterile-1.0.6 lib/sterile/entities.rb
sterile-1.0.5 lib/sterile/entities.rb
sterile-1.0.4 lib/sterile/entities.rb
sterile-1.0.3 lib/sterile/entities.rb