Merge pull request #216 from armchair-philosophy/emoji

support emoji
This commit is contained in:
syuilo⭐️ 2017-03-01 13:26:19 +09:00 committed by GitHub
commit 96f75842de
5 changed files with 30 additions and 2 deletions

View File

@ -82,6 +82,7 @@
"deepcopy": "0.6.3", "deepcopy": "0.6.3",
"download": "5.0.3", "download": "5.0.3",
"elasticsearch": "12.1.3", "elasticsearch": "12.1.3",
"emojinize": "1.0.0",
"escape-html": "1.0.3", "escape-html": "1.0.3",
"escape-regexp": "0.0.1", "escape-regexp": "0.0.1",
"event-stream": "3.3.4", "event-stream": "3.3.4",

View File

@ -0,0 +1,14 @@
/**
* Emoji
*/
module.exports = text => {
const match = text.match(/^:[a-zA-Z0-9+-_]+:/);
if (!match) return null;
const emoji = match[0];
return {
type: 'emoji',
content: emoji,
emoji: emoji.substr(1, emoji.length - 2)
};
};

View File

@ -8,7 +8,8 @@ const elements = [
require('./elements/mention'), require('./elements/mention'),
require('./elements/hashtag'), require('./elements/hashtag'),
require('./elements/code'), require('./elements/code'),
require('./elements/inline-code') require('./elements/inline-code'),
require('./elements/emoji')
]; ];
function analyze(source) { function analyze(source) {

View File

@ -1,5 +1,6 @@
const riot = require('riot'); const riot = require('riot');
const nyaize = require('nyaize').default; const nyaize = require('nyaize').default;
const emojinize = require('emojinize');
const CONFIG = require('./config'); const CONFIG = require('./config');
const escape = function(text) { const escape = function(text) {
@ -35,6 +36,8 @@ module.exports = function(tokens, shouldBreak, shouldEscape) {
return '<pre><code>' + token.html + '</code></pre>'; return '<pre><code>' + token.html + '</code></pre>';
case 'inline-code': case 'inline-code':
return '<code>' + token.html + '</code>'; return '<code>' + token.html + '</code>';
case 'emoji':
return emojinize.encode(token.content)
} }
}).join(''); }).join('');

View File

@ -9,10 +9,12 @@ const syntaxhighlighter = require('../src/common/text/core/syntax-highlighter');
describe('Text', () => { describe('Text', () => {
it('is correctly analyzed', () => { it('is correctly analyzed', () => {
const tokens = analyze('@himawari お腹ペコい #yryr'); const tokens = analyze('@himawari お腹ペコい :cat: #yryr');
assert.deepEqual([ assert.deepEqual([
{ type: 'mention', content: '@himawari', username: 'himawari' }, { type: 'mention', content: '@himawari', username: 'himawari' },
{ type: 'text', content: ' お腹ペコい ' }, { type: 'text', content: ' お腹ペコい ' },
{ type: 'emoji', content: ':cat:', emoji: 'cat'},
{ type: 'text', content: ' '},
{ type: 'hashtag', content: '#yryr', hashtag: 'yryr' } { type: 'hashtag', content: '#yryr', hashtag: 'yryr' }
], tokens); ], tokens);
}); });
@ -48,6 +50,13 @@ describe('Text', () => {
], tokens); ], tokens);
}); });
it('emoji', () => {
const tokens = analyze(':cat:');
assert.deepEqual([
{ type: 'emoji', content: ':cat:', emoji: 'cat'}
], tokens);
});
it('block code', () => { it('block code', () => {
const tokens = analyze('```\nvar x = "Strawberry Pasta";\n```'); const tokens = analyze('```\nvar x = "Strawberry Pasta";\n```');
assert.equal(tokens[0].type, 'code'); assert.equal(tokens[0].type, 'code');