verdnatura-chat/app/utils/shortnameToUnicode/index.js

47 lines
1.1 KiB
JavaScript
Raw Permalink Normal View History

import emojis from './emojis';
import ascii, { asciiRegexp } from './ascii';
const shortnamePattern = new RegExp(/:[-+_a-z0-9]+:/, 'gi');
const replaceShortNameWithUnicode = shortname => emojis[shortname] || shortname;
const regAscii = new RegExp(`((\\s|^)${ asciiRegexp }(?=\\s|$|[!,.?]))`, 'gi');
const unescapeHTML = (string) => {
const unescaped = {
'&': '&',
'&': '&',
'&': '&',
'&lt;': '<',
'&#60;': '<',
'&#x3C;': '<',
'&gt;': '>',
'&#62;': '>',
'&#x3E;': '>',
'&quot;': '"',
'&#34;': '"',
'&#x22;': '"',
'&apos;': '\'',
'&#39;': '\'',
'&#x27;': '\''
};
return string.replace(/&(?:amp|#38|#x26|lt|#60|#x3C|gt|#62|#x3E|apos|#39|#x27|quot|#34|#x22);/ig, match => unescaped[match]);
};
const shortnameToUnicode = (str) => {
str = str.replace(shortnamePattern, replaceShortNameWithUnicode);
str = str.replace(regAscii, (entire, m1, m2, m3) => {
if (!m3 || (!(unescapeHTML(m3) in ascii))) {
// if the ascii doesnt exist just return the entire match
return entire;
}
m3 = unescapeHTML(m3);
return ascii[m3];
});
return str;
};
export default shortnameToUnicode;