Module: MMMD::EntityUtils

Defined in:
lib/mmmd/util.rb

Overview

Utils for working with entities in strings

Constant Summary collapse

ENTITY_DATA =
JSON.parse(File.read("#{__dir__}/entities.json"))

Class Method Summary collapse

Class Method Details

.decode_entities(string) ⇒ String

Decode html entities in string

Parameters:

  • string (String)

Returns:

  • (String)


13
14
15
16
17
18
19
20
21
22
23
# File 'lib/mmmd/util.rb', line 13

def self.decode_entities(string)
  string = string.gsub(/&#\d{1,7};/) do |match|
    match[1..-2].to_i.chr("UTF-8")
  end
  string = string.gsub(/&#[xX][\dA-Fa-f]{1,6};/) do |match|
    match[3..-2].to_i(16).chr("UTF-8")
  end
  string.gsub(/&\w+;/) do |match|
    ENTITY_DATA[match] ? ENTITY_DATA[match]["characters"] : match
  end
end

.encode_entities(string) ⇒ String

Encode unsafe html entities in string @sg-ignore

Parameters:

  • string (String)

Returns:

  • (String)


44
45
46
47
48
49
50
# File 'lib/mmmd/util.rb', line 44

def self.encode_entities(string)
  string.gsub("&", "&")
        .gsub("<", "&lt;")
        .gsub(">", "&gt;")
        .gsub('"', "&quot;")
        .gsub("'", "&#39;")
end

.encode_entities_ascii(string) ⇒ String

Encode unsafe html entities in string (ASCII-compatible) @sg-ignore

Parameters:

  • string (String)

Returns:

  • (String)


29
30
31
32
33
34
35
36
37
38
# File 'lib/mmmd/util.rb', line 29

def self.encode_entities_ascii(string)
  string.gsub("&", "&amp;")
        .gsub("<", "&lt;")
        .gsub(">", "&gt;")
        .gsub('"', "&quot;")
        .gsub("'", "&#39;")
        .gsub(/[^\x00-\x7F]/) do |match|
          "&#x#{match.codepoints[0]};"
        end
end

.encode_uri(string) ⇒ String

Encode uri components that may break HTML syntax

Parameters:

  • string (String)

Returns:

  • (String)


55
56
57
58
59
# File 'lib/mmmd/util.rb', line 55

def self.encode_uri(string)
  string.gsub('"', "%22")
        .gsub("'", "%27")
        .gsub(" ", "%20")
end