Class: Emoji::Character

Inherits:
Object
  • Object
show all
Defined in:
lib/emoji/character.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Character

Returns a new instance of Character.



80
81
82
83
84
85
# File 'lib/emoji/character.rb', line 80

def initialize(name)
  @aliases = Array(name)
  @unicode_aliases = []
  @tags = []
  @skin_tones = false
end

Instance Attribute Details

#aliasesObject (readonly)

A list of names uniquely referring to this emoji.



20
21
22
# File 'lib/emoji/character.rb', line 20

def aliases
  @aliases
end

#categoryObject

The category for this emoji as per Apple’s character palette



23
24
25
# File 'lib/emoji/character.rb', line 23

def category
  @category
end

#descriptionObject

The Unicode description text



26
27
28
# File 'lib/emoji/character.rb', line 26

def description
  @description
end

#image_filenameObject



98
99
100
101
102
103
104
# File 'lib/emoji/character.rb', line 98

def image_filename
  if defined? @image_filename
    @image_filename
  else
    default_image_filename
  end
end

#ios_versionObject

The iOS version where this emoji first debuted



32
33
34
# File 'lib/emoji/character.rb', line 32

def ios_version
  @ios_version
end

#skin_tones=(value) ⇒ Object (writeonly)

Sets the attribute skin_tones

Parameters:

  • value

    the value to set the attribute skin_tones to.



17
18
19
# File 'lib/emoji/character.rb', line 17

def skin_tones=(value)
  @skin_tones = value
end

#tagsObject (readonly)

A list of tags associated with an emoji. Multiple emojis can share the same tags.



74
75
76
# File 'lib/emoji/character.rb', line 74

def tags
  @tags
end

#unicode_aliasesObject (readonly)

A list of Unicode strings that uniquely refer to this emoji.



41
42
43
# File 'lib/emoji/character.rb', line 41

def unicode_aliases
  @unicode_aliases
end

#unicode_versionObject

The Unicode spec version where this emoji first debuted



29
30
31
# File 'lib/emoji/character.rb', line 29

def unicode_version
  @unicode_version
end

Class Method Details

.hex_inspect(str) ⇒ Object

Inspect individual Unicode characters in a string by dumping its codepoints in hexadecimal format.



7
8
9
# File 'lib/emoji/character.rb', line 7

def self.hex_inspect(str)
  str.codepoints.map { |c| c.to_s(16).rjust(4, '0') }.join('-')
end

Instance Method Details

#add_alias(name) ⇒ Object



36
37
38
# File 'lib/emoji/character.rb', line 36

def add_alias(name)
  aliases << name
end

#add_tag(tag) ⇒ Object



76
77
78
# File 'lib/emoji/character.rb', line 76

def add_tag(tag)
  tags << tag
end

#add_unicode_alias(str) ⇒ Object



68
69
70
# File 'lib/emoji/character.rb', line 68

def add_unicode_alias(str)
  unicode_aliases << str
end

#custom?Boolean

True if the emoji is not a standard Emoji character.

Returns:

  • (Boolean)


12
# File 'lib/emoji/character.rb', line 12

def custom?() !raw end

#hex_inspectObject



92
93
94
# File 'lib/emoji/character.rb', line 92

def hex_inspect
  self.class.hex_inspect(raw)
end

#inspectObject



87
88
89
90
# File 'lib/emoji/character.rb', line 87

def inspect
  hex = '(%s)' % hex_inspect unless custom?
  %(#<#{self.class.name}:#{name}#{hex}>)
end

#nameObject



34
# File 'lib/emoji/character.rb', line 34

def name() aliases.first end

#rawObject

Raw Unicode string for an emoji. Nil if emoji is non-standard.



44
# File 'lib/emoji/character.rb', line 44

def raw() unicode_aliases.first end

#raw_skin_tone_variantsObject

Raw Unicode strings for each skin tone variant of this emoji. The result is an empty array unless the emoji supports skin tones.

Note: for emojis that depict multiple people (e.g. couples or families), this will not produce every possible permutation of skin tone per person.



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/emoji/character.rb', line 51

def raw_skin_tone_variants
  return [] if custom? || !skin_tones?
  raw_normalized = raw.sub(VARIATION_SELECTOR_16, "")
  idx = raw_normalized.index(ZERO_WIDTH_JOINER)
  SKIN_TONES.map do |modifier|
    if raw_normalized == PEOPLE_HOLDING_HANDS
      # special case to apply the modifier to both persons
      raw_normalized[0...idx] + modifier + raw_normalized[idx..nil] + modifier
    elsif idx
      # insert modifier before zero-width joiner
      raw_normalized[0...idx] + modifier + raw_normalized[idx..nil]
    else
      raw_normalized + modifier
    end
  end
end

#skin_tones?Boolean

True if the emoji supports Fitzpatrick scale skin tone modifiers

Returns:

  • (Boolean)


15
# File 'lib/emoji/character.rb', line 15

def skin_tones?() @skin_tones end