-
Notifications
You must be signed in to change notification settings - Fork 0
/
segment-text.js
107 lines (105 loc) · 2.82 KB
/
segment-text.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import { indexFromText } from 'qqface'
// WeChat Emoji
// https://emojipedia.org/wechat
let latestEmojiMap = Object.create(null)
Object.assign(latestEmojiMap, {
'Lol': '😂',
'破涕为笑': '😂',
'Facepalm': '😅',
'捂脸': '😅',
'Terror': '😱',
'恐惧': '😱',
'Flushed': '😳',
'脸红': '😳',
'Emm': '😶',
'Awesome': '👍', // fallback
'666': '👍', // fallback
// 'LetMeSee': '🧐', // fallback
// '让我看看': '🧐', // fallback
'LetMeSee': '👀', // fallback
'让我看看': '👀', // fallback
'Boring': '[白眼]',
'翻白眼': '[白眼]',
'Wow': '😍',
'哇': '😍',
'MyBad': '🤕',
'打脸': '🤕',
'NoProb': '👌',
'好的': '👌',
'Respect': '👍', // fallback
'社会社会': '👍', // fallback
'Doge': '😉', // fallback
'旺柴': '😉', // fallback
'Sweats': '😓',
'汗': '😓',
'OMG': '😯',
'天啊': '😯',
'Sigh': '😞',
'叹气': '😞',
'Broken': '💔', // fallback
'裂开': '💔', // fallback
// '嘴唇': '👄',
'嘴唇': '[示爱]',
// 'BrokenHeart': '💔', // fallback
// '心碎': '💔', // fallback
'Hurt': '😭',
'苦涩': '😭',
'Packet': '🧧',
'红包': '🧧',
'GoForIt': '[奋斗]',
'加油': '[奋斗]',
'Onlooker': '👀',
'吃瓜': '👀',
'Concerned': '🥺',
'皱眉': '🥺',
'Yeah!': '🥳',
'耶': '🥳',
'Smirk': '😏',
'奸笑': '😏',
'Smart': '👏', // fallback
'机智': '👏', // fallback
'Hey': '👋', // fallback
'嘿哈': '👋', // fallback
'Duh': '😒',
'无语': '😒',
'LetDown': '😔',
'失望': '😔',
'Sick': '😷',
'生病': '😷',
'ThumbsUp': '[强]',
'ThumbsDown': '[弱]',
'Fireworks': '🎆',
'烟花': '🎆',
'爆竹': '🧨',
'Party': '🎉',
'庆祝': '🎉',
'Blessing': '🙏', // fallback
'福': '🙏', // fallback
'Worship': '🙏',
'合十': '🙏',
})
let latestEmojiKeys = Object.keys(latestEmojiMap)
let latestEmojiRegexG = new RegExp(`\\[(${latestEmojiKeys.join('|')})\\]`, 'g')
export let segmentText = (str = '') => {
str = str.replace(latestEmojiRegexG, ($0, $1) => latestEmojiMap[$1] || $0)
let segments = []
let reg = /\[(.{1,10}?)\]/
let mat = null
let mirror = str
while (mat = mirror.match(reg)) {
let [m0, m1] = mat
let index = indexFromText(m1)
if (index > -1) {
let prev = str.slice(0, mat.index)
if (prev) segments.push({ type: 'text', text: prev })
segments.push({ type: 'qqface', index: indexFromText(m1) })
str = str.slice(mat.index + m0.length)
mirror = mirror.slice(mat.index + m0.length)
} else {
let stub = mirror.slice(0, mat.index + m0.length).replace(/[\s\S]/g, 'x')
mirror = stub + mirror.slice(mat.index + m0.length)
}
}
if (str) segments.push({ type: 'text', text: str })
return segments
}