Skip to content

fenwick67/neato-emoji-converter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Neato-emoji-converter

Convert to and from actual emoji (💖), short codes (:pizza:), and to arbitrary formats. Supports custom emoji for any unicode sequence and/or shortcode.

Documentation

This package exposes one class, Converter.

new EmojiConverter([sources = [ Converter.EMOJI_DEFAULT_SOURCE] ])

Returns a converter instance. The default constructor initializes it with the official Unicode emojis. You can specify different sources.

A source should be an array of objects, each object representing an emoji. Each should have at least a shortname (needs to be surrounded with colons), optionally a name, optionally a unicode (the actual unicode character), and optionally a shortname_alternates (an array of alternate shortnames, each surrouned with colons). You can also provide any other options you want to these objects and they will be available to a custom replacer. Sources are applied from left to right (rightmost source has most priority).

The Converter Instance

converterInstance.replaceUnicode(str)

Replace unicode emoji in a string with :shortcode:s.

converterInstance.replaceShortcodes(str)

replace :shortcode:s with unicode emojis in a string

converterInstance.replaceShortcodesWith(str, replacer)

Every :shortcode: emoji that you have defined in your sources will be replaced with the function you specify.

The function is called with (unicodeCharacter, shortcode, emojiName, emojiObject). emojiObject is the original emoji object from the source provided in the constructor.

converterInstance.replaceUnicodeWith(str, replacer)

Same as replaceShortcodesWith, but operates only on unicode emojis that are recognized..

converterInstance.replaceWith(str, replacer)

Same as replaceShortcodesWith, but operates on short code and unicode emojis that are recognized.

converterInstance.normalizeShortcodes(str)

Sometimes emojis have multiple names (such as :celtic_cross: vs :cross:). This will ensure the canonical one is used.

Converter Prototype

Converter.EMOJI_DEFAULT_SOURCE

This is the default source of emojis, it allows the converter to find all official unicode emoji.

Converter.unicodeToPointsString(unicodeStr)

converts, for example, '🙆🏿‍♂️' to '1f646-1f3ff-200d-2642-fe0f'

Examples

Shortcodes to Unicode

converter.replaceShortcodes('I:heart:NY')
// => 'I❤️NY'

Unicode to shortcodes

converter.replaceUnicode("❤️~~🐧~~❤️")
// => ":heart:~~:penguin:~~:heart:"

Custom HTML rendering of official Emoji

var str = ':heart: its me, 🦃!'

function renderEmojiHowIWant(unicodeChar, shortcode, name){
  var codepointString = Converter.unicodeToPointsString(unicodeChar)
  return `<img alt="${name}" src="emojis/folder/${codepointString}.png"></img>`
}

var htmlified = converter.replaceUnicodeWith(str,renderEmojiHowIWant)
// => '<img alt="red heart" src="emojis/folder/2764-fe0f.png"></img> its me, <img alt="turkey" src="emojis/folder/1f983.png"></img>!'

Advanced: add custom Emoji as <img> tags, convert other shortcodes to unicode

var emojiData = [
  { shortname: ':charizard:', url: "http://somewhere.com/charizard.png" }
]
var converter = new EmojiConverter([Converter.EMOJI_DEFAULT_SOURCE, emojiData])
var chatText = ':charizard: ❤️ :pancakes: :wow:'
var pokemanned = converter.replaceShortcodesWith(chatText, function(unicodeChar, shortcode, name, object){
   if (unicodeChar){return unicodeChar}
   else if (object.url){return `<img src="${object.url}" alt="${name}" title="${name}"/>`}
   else{ return shortcode }
})
// =>'<img src="http://somewhere.com/charizard.png" alt="charizard" title="charizard"/> ❤️ 🥞 :wow:'

Advanced: plain-text replacement

var replacements = [
    { shortname: ":heart:", unicode: '❤', terminalReplacement: '<3'},
    { shortname: ":heart:", unicode: '❤️', terminalReplacement: '<3'},
    { shortname: ":blush:", unicode: '😊', terminalReplacement: '^__^'},
    { shortname: ":simple_smile:", unicode: '🙂', terminalReplacement: ':)'},
    { shortname: ":smiley:", unicode: '😃', terminalReplacement: ':D'},
    {shortname: ':laughing:', unicode: '😆', terminalReplacement: 'XD'}
]
var converter = new Converter([Converter.EMOJI_DEFAULT_SOURCE, replacements])

var chatText = 'I ❤ ❤️ Unicode 🙂, but I also :heart: short codes 😊! (and 🍬 😆)'

converter.replaceWith(chatText, function(unicodeChar, shortcode, name, object){
    return object.terminalReplacement || shortcode || unicodeChar
})
// => 'I <3 <3 Unicode :), but I also <3 short codes ^__^! (and :candy: XD)'

About

Convert unicode emoji, shortcodes and custom emoji

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published