@jayfong/x-text-render 2.62.3 → 2.64.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/_cjs/code_render.css +2 -2
- package/lib/_cjs/code_render.js +1 -1
- package/lib/_cjs/douyin_emoji_render.css +19 -19
- package/lib/_cjs/douyin_emoji_render.js +1 -1
- package/lib/_cjs/text_parser.js +73 -5
- package/lib/_cjs/unified_emoji_render.css +2 -2
- package/lib/_cjs/unified_emoji_render.js +1 -1
- package/lib/_cjs/weixin_emoji_render.css +2 -2
- package/lib/_cjs/weixin_emoji_render.js +1 -1
- package/lib/code_render.css +2 -2
- package/lib/code_render.js +1 -1
- package/lib/douyin_emoji_render.css +19 -19
- package/lib/douyin_emoji_render.js +1 -1
- package/lib/text_parser.d.ts +36 -2
- package/lib/text_parser.js +72 -5
- package/lib/unified_emoji_render.css +2 -2
- package/lib/unified_emoji_render.js +1 -1
- package/lib/weixin_emoji_render.css +2 -2
- package/lib/weixin_emoji_render.js +1 -1
- package/package.json +2 -2
package/lib/_cjs/code_render.css
CHANGED
package/lib/_cjs/code_render.js
CHANGED
|
@@ -6,7 +6,7 @@ require("./code_render.css");
|
|
|
6
6
|
var _vtils = require("vtils");
|
|
7
7
|
var _html_render = require("./html_render");
|
|
8
8
|
// @ts-ignore
|
|
9
|
-
var _ = {"code":"
|
|
9
|
+
var _ = {"code":"xtr_8967","content":"xtr_1630"};
|
|
10
10
|
var codeRegExp = /```[^\r\n]*[\r\n]([\s\S]+?)```/g;
|
|
11
11
|
var CodeRender = exports.CodeRender = /*#__PURE__*/function () {
|
|
12
12
|
function CodeRender() {}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.
|
|
1
|
+
.xtr_1045 {
|
|
2
2
|
display: inline-block;
|
|
3
3
|
font-size: 1.2em;
|
|
4
4
|
width: 1em;
|
|
@@ -6,76 +6,76 @@
|
|
|
6
6
|
vertical-align: -0.2em;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
.
|
|
9
|
+
.xtr_7154 {
|
|
10
10
|
background-size: 100% 100%;
|
|
11
11
|
background-repeat: no-repeat;
|
|
12
12
|
background-position: center;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
.
|
|
15
|
+
.xtr_3674 {
|
|
16
16
|
width: 1.0781em;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
.
|
|
19
|
+
.xtr_11615 {
|
|
20
20
|
width: 1.0313em;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
.
|
|
23
|
+
.xtr_11456 {
|
|
24
24
|
width: 1.0625em;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
.
|
|
27
|
+
.xtr_17243 {
|
|
28
28
|
width: 1.1563em;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
.
|
|
31
|
+
.xtr_19257 {
|
|
32
32
|
width: 1.0469em;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
.
|
|
35
|
+
.xtr_3254 {
|
|
36
36
|
width: 1.1406em;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
.
|
|
39
|
+
.xtr_13218 {
|
|
40
40
|
width: 1.0781em;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
.
|
|
43
|
+
.xtr_17458 {
|
|
44
44
|
width: 1.1406em;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
.
|
|
47
|
+
.xtr_19104 {
|
|
48
48
|
width: 1.0781em;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
.
|
|
51
|
+
.xtr_7593 {
|
|
52
52
|
width: 1.1406em;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
.
|
|
55
|
+
.xtr_12634 {
|
|
56
56
|
width: 1.375em;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
.
|
|
59
|
+
.xtr_9977 {
|
|
60
60
|
width: 1.0625em;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
.
|
|
63
|
+
.xtr_7513 {
|
|
64
64
|
width: 1.1406em;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
.
|
|
67
|
+
.xtr_18959 {
|
|
68
68
|
width: 1.1406em;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
.
|
|
71
|
+
.xtr_18075 {
|
|
72
72
|
width: 1.0625em;
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
.
|
|
75
|
+
.xtr_6857 {
|
|
76
76
|
width: 1.125em;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
.
|
|
79
|
+
.xtr_19561 {
|
|
80
80
|
width: 1.0469em;
|
|
81
81
|
}
|
|
@@ -5,7 +5,7 @@ exports.DouyinEmojiRender = void 0;
|
|
|
5
5
|
require("./douyin_emoji_render.css");
|
|
6
6
|
var _html_render = require("./html_render");
|
|
7
7
|
// @ts-ignore
|
|
8
|
-
var _ = {"emoji":"
|
|
8
|
+
var _ = {"emoji":"xtr_1045","background":"xtr_7154","_互粉":"xtr_3674","_再见":"xtr_11615","_吐血":"xtr_11456","_听歌":"xtr_17243","_嘿哈":"xtr_19257","_大哭":"xtr_3254","_强":"xtr_13218","_我想静静":"xtr_17458","_擦汗":"xtr_19104","_机智":"xtr_7593","_求抱抱":"xtr_12634","_灵机一动":"xtr_9977","_熊吉":"xtr_7513","_笑哭":"xtr_18959","_紫薇别走":"xtr_18075","_耶":"xtr_6857","_飞吻":"xtr_19561"};
|
|
9
9
|
// douyinEmojiAllList
|
|
10
10
|
// biome-ignore format:
|
|
11
11
|
var douyinEmojiAllList = ["6", "666", "18禁", "OK", "V5", "candy", "emo", "iloveyou", "okk", "yyds", "一起加油", "不失礼貌的微笑", "不看", "二哈", "互粉", "做鬼脸", "偷笑", "元宝", "再见", "冷漠", "凋谢", "减一", "凝视", "击掌", "加一", "加好友", "加鸡腿", "勾引", "去污粉", "发", "发呆", "发怒", "可怜", "右边", "吃瓜群众", "吐", "吐彩虹", "吐舌", "吐血", "听歌", "呆无辜", "呲牙", "咒骂", "咖啡", "哈欠", "啤酒", "嘘", "嘴唇", "嘿哈", "囧", "困", "圣诞帽", "圣诞树", "坏笑", "大哭", "大笑", "大金牙", "太阳", "奋斗", "奸笑", "如花", "委屈", "害羞", "小黄鸭", "小鼓掌", "尬笑", "屎", "左上", "左边", "巧克力", "干杯", "干饭人", "平安果", "年兽兔", "开心兔", "弱", "强", "强壮", "得意", "微笑", "微笑袋鼠", "心碎", "必胜", "快哭了", "思考", "恐惧", "悠闲", "情书", "惊喜", "惊恐", "惊讶", "愉快", "感谢", "憨笑", "我太难了", "我想静静", "我酸了", "戒指", "手套", "扎心", "打call", "打脸", "抓狂", "抠鼻", "抱抱", "抱抱你", "抱拳", "招财兔", "拥抱", "拳头", "捂脸", "握手", "握爪", "摸头", "撇嘴", "撒花", "擦汗", "敲打", "斜眼", "无语", "晕", "暗中观察", "月亮", "机智", "来看我", "栓Q", "棒棒糖", "比心", "气球", "求抱抱", "汤圆", "泣不成声", "泪奔", "流泪", "灯笼", "灵机一动", "炸弹", "烟花", "熊吉", "爱心", "猪头", "玫瑰", "球鞋", "疑问", "白眼", "皱眉", "看", "石化", "碰拳", "礼物", "福", "笑哭", "粽子", "糖葫芦", "紫薇别走", "红包", "红脸", "纸飞机", "给力", "给跪了", "绝", "绝望的凝视", "绿帽子", "翻白眼", "耶", "胜利", "胡瓜", "舔屏", "色", "菜狗", "蕉绿", "虎头", "蛋糕", "衰", "裂开", "西瓜", "调皮", "赞", "足球", "送心", "鄙视", "酷拽", "钱", "锦鲤", "闭嘴", "阴险", "难过", "雪人", "雪花", "震惊", "鞭炮", "飞吻", "饺子", "黑脸", "鼓掌", "不是吧", "动动脑子", "叹气", "好开心", "展开说说", "投降", "敢怒不敢言", "求求了", "真的会谢", "眼含热泪", "蜜蜂狗", "表面呲牙", "表面微笑", "躺平", "达咩", "鞠躬", "kisskiss", "一头乱麻", "不你不想", "九转大肠", "亚运鼓掌", "他急了", "你不大行", "噢买尬", "宕机", "手花", "敲木鱼", "脸疼", "苦涩", "还得是我", "逞强落泪", "金牌"];
|
package/lib/_cjs/text_parser.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
3
4
|
exports.__esModule = true;
|
|
4
5
|
exports.TextParserNodeType = exports.TextParser = void 0;
|
|
6
|
+
var _createForOfIteratorHelperLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelperLoose"));
|
|
5
7
|
var _simpleTextParser = require("simple-text-parser");
|
|
6
8
|
var _douyin_emoji_render = require("./douyin_emoji_render");
|
|
7
9
|
var _unified_emoji_render = require("./unified_emoji_render");
|
|
8
10
|
var _weixin_emoji_render = require("./weixin_emoji_render");
|
|
9
|
-
var TextParserNodeType = exports.TextParserNodeType =
|
|
11
|
+
var TextParserNodeType = exports.TextParserNodeType = function (TextParserNodeType) {
|
|
10
12
|
TextParserNodeType[TextParserNodeType["PARAGRAPH"] = 1] = "PARAGRAPH";
|
|
11
13
|
TextParserNodeType[TextParserNodeType["PLAIN_TEXT"] = 2] = "PLAIN_TEXT";
|
|
12
14
|
TextParserNodeType[TextParserNodeType["WEB_LINK"] = 4] = "WEB_LINK";
|
|
@@ -15,16 +17,45 @@ var TextParserNodeType = exports.TextParserNodeType = /*#__PURE__*/function (Tex
|
|
|
15
17
|
TextParserNodeType[TextParserNodeType["UNIFIED_EMOJI"] = 32] = "UNIFIED_EMOJI";
|
|
16
18
|
TextParserNodeType[TextParserNodeType["DOUYIN_EMOJI"] = 64] = "DOUYIN_EMOJI";
|
|
17
19
|
TextParserNodeType[TextParserNodeType["MINI_PROGRAM_SHORT_LINK"] = 128] = "MINI_PROGRAM_SHORT_LINK";
|
|
20
|
+
TextParserNodeType[TextParserNodeType["BOLD"] = 256] = "BOLD";
|
|
21
|
+
TextParserNodeType[TextParserNodeType["ELLIPSIS"] = 512] = "ELLIPSIS";
|
|
22
|
+
TextParserNodeType[TextParserNodeType["ANY_EMOJI"] = TextParserNodeType.UNIFIED_EMOJI | TextParserNodeType.WEIXIN_EMOJI | TextParserNodeType.DOUYIN_EMOJI] = "ANY_EMOJI";
|
|
23
|
+
TextParserNodeType[TextParserNodeType["ANY_LINK"] = TextParserNodeType.WEB_LINK | TextParserNodeType.MINI_PROGRAM_SHORT_LINK] = "ANY_LINK";
|
|
18
24
|
return TextParserNodeType;
|
|
19
25
|
}({});
|
|
20
26
|
var TextParser = exports.TextParser = function TextParser(options) {
|
|
21
27
|
var _this = this;
|
|
22
28
|
this.options = options;
|
|
23
29
|
this.parser = void 0;
|
|
24
|
-
this.parse = function (
|
|
30
|
+
this.parse = function (options) {
|
|
31
|
+
if (!options.store) {
|
|
32
|
+
var _store = {
|
|
33
|
+
maxLength: options.maxLength || 0,
|
|
34
|
+
currentLength: 0,
|
|
35
|
+
get remainingLength() {
|
|
36
|
+
return _store.maxLength - _store.currentLength;
|
|
37
|
+
},
|
|
38
|
+
get isReachMaxLength() {
|
|
39
|
+
return _store.maxLength > 0 && _store.currentLength >= _store.maxLength;
|
|
40
|
+
},
|
|
41
|
+
get isOverMaxLength() {
|
|
42
|
+
return _store.maxLength > 0 && _store.currentLength > _store.maxLength;
|
|
43
|
+
},
|
|
44
|
+
hasEllipsis: false
|
|
45
|
+
};
|
|
46
|
+
options.store = _store;
|
|
47
|
+
}
|
|
48
|
+
var text = options.text;
|
|
49
|
+
var asFragment = options.asFragment;
|
|
50
|
+
var store = options.store;
|
|
25
51
|
var paragraphs = [];
|
|
26
52
|
var paragraph = [];
|
|
27
|
-
_this.parser.toTree(text)
|
|
53
|
+
for (var _iterator = (0, _createForOfIteratorHelperLoose2.default)(_this.parser.toTree(text)), _step; !(_step = _iterator()).done;) {
|
|
54
|
+
var item = _step.value;
|
|
55
|
+
if (store.isReachMaxLength) {
|
|
56
|
+
store.hasEllipsis = true;
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
28
59
|
var nodeType = item.type === 'text' ? TextParserNodeType.PLAIN_TEXT : item.type === 'url' ? TextParserNodeType.WEB_LINK : item.type;
|
|
29
60
|
if (nodeType & TextParserNodeType.LINE_BREAK) {
|
|
30
61
|
if (paragraph.length > 0) {
|
|
@@ -35,15 +66,43 @@ var TextParser = exports.TextParser = function TextParser(options) {
|
|
|
35
66
|
paragraph = [];
|
|
36
67
|
}
|
|
37
68
|
} else {
|
|
38
|
-
var node = {
|
|
69
|
+
var node = item.continue ? {
|
|
70
|
+
type: nodeType,
|
|
71
|
+
nodes: _this.parse({
|
|
72
|
+
text: item.text,
|
|
73
|
+
asFragment: true,
|
|
74
|
+
store: store
|
|
75
|
+
}),
|
|
76
|
+
info: item.info
|
|
77
|
+
} : {
|
|
39
78
|
type: nodeType,
|
|
40
79
|
content: item.text,
|
|
41
80
|
info: item.info
|
|
42
81
|
};
|
|
43
82
|
paragraph.push(node);
|
|
83
|
+
if (!item.continue) {
|
|
84
|
+
var isEmoji = nodeType & TextParserNodeType.ANY_EMOJI;
|
|
85
|
+
var isPlainText = nodeType & TextParserNodeType.PLAIN_TEXT;
|
|
86
|
+
var chars = isEmoji ? [item.text] : Array.from(item.text);
|
|
87
|
+
store.currentLength += chars.length;
|
|
88
|
+
if (store.isReachMaxLength) {
|
|
89
|
+
if (isPlainText && store.isOverMaxLength) {
|
|
90
|
+
node.content = chars.slice(0, store.remainingLength).join('');
|
|
91
|
+
store.hasEllipsis = true;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
44
95
|
}
|
|
45
|
-
}
|
|
96
|
+
}
|
|
97
|
+
if (asFragment) {
|
|
98
|
+
return paragraph;
|
|
99
|
+
}
|
|
46
100
|
if (paragraph.length > 0) {
|
|
101
|
+
if (store.hasEllipsis) {
|
|
102
|
+
paragraph.push({
|
|
103
|
+
type: TextParserNodeType.ELLIPSIS
|
|
104
|
+
});
|
|
105
|
+
}
|
|
47
106
|
paragraphs.push({
|
|
48
107
|
type: TextParserNodeType.PARAGRAPH,
|
|
49
108
|
nodes: paragraph
|
|
@@ -61,6 +120,15 @@ var TextParser = exports.TextParser = function TextParser(options) {
|
|
|
61
120
|
text: lineBreak
|
|
62
121
|
};
|
|
63
122
|
});
|
|
123
|
+
if (this.options.bold) {
|
|
124
|
+
parser.addRule(/\*\*(.*?)\*\*/g, function (_, text) {
|
|
125
|
+
return {
|
|
126
|
+
type: TextParserNodeType.BOLD,
|
|
127
|
+
text: text,
|
|
128
|
+
continue: true
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
}
|
|
64
132
|
if (this.options.weixinEmoji) {
|
|
65
133
|
parser.addRule(_weixin_emoji_render.WeixinEmojiRender.regExp, function (weixinEmoji) {
|
|
66
134
|
return {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.
|
|
1
|
+
.xtr_2734 {
|
|
2
2
|
display: inline-block;
|
|
3
3
|
font-size: 1.2em;
|
|
4
4
|
width: 1em;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
vertical-align: -0.2em;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
.
|
|
9
|
+
.xtr_12256 {
|
|
10
10
|
background-size: 100% 100%;
|
|
11
11
|
background-repeat: no-repeat;
|
|
12
12
|
background-position: center;
|
|
@@ -7,7 +7,7 @@ var _vtils = require("vtils");
|
|
|
7
7
|
var _regexp = require("vtils/regexp");
|
|
8
8
|
var _html_render = require("./html_render");
|
|
9
9
|
var _UnifiedEmojiRender; // @ts-ignore
|
|
10
|
-
var _ = {"unifiedEmoji":"
|
|
10
|
+
var _ = {"unifiedEmoji":"xtr_2734","background":"xtr_12256"};
|
|
11
11
|
var unifiedEmojiRegExp = _regexp.emojiRegExpBuilder.build({
|
|
12
12
|
global: true
|
|
13
13
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.
|
|
1
|
+
.xtr_4380 {
|
|
2
2
|
display: inline-block;
|
|
3
3
|
font-size: 1.2em;
|
|
4
4
|
width: 1em;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
vertical-align: -0.2em;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
.
|
|
9
|
+
.xtr_76 {
|
|
10
10
|
background-size: 100% 100%;
|
|
11
11
|
background-repeat: no-repeat;
|
|
12
12
|
background-position: center;
|
|
@@ -6,7 +6,7 @@ require("./weixin_emoji_render.css");
|
|
|
6
6
|
var _vtils = require("vtils");
|
|
7
7
|
var _html_render = require("./html_render");
|
|
8
8
|
// @ts-ignore
|
|
9
|
-
var _ = {"weixinEmoji":"
|
|
9
|
+
var _ = {"weixinEmoji":"xtr_4380","background":"xtr_76"};
|
|
10
10
|
var weixinEmojiBaseUrl = "https://wxpublic-1251448646.file.myqcloud.com/public/common/files/";
|
|
11
11
|
|
|
12
12
|
// weixinEmojiUrlMap
|
package/lib/code_render.css
CHANGED
package/lib/code_render.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @ts-ignore
|
|
2
2
|
import "./code_render.css";
|
|
3
|
-
var _ = {"code":"
|
|
3
|
+
var _ = {"code":"xtr_8967","content":"xtr_1630"};
|
|
4
4
|
import { escape } from 'vtils';
|
|
5
5
|
import { HTMLRender } from "./html_render";
|
|
6
6
|
var codeRegExp = /```[^\r\n]*[\r\n]([\s\S]+?)```/g;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.
|
|
1
|
+
.xtr_1045 {
|
|
2
2
|
display: inline-block;
|
|
3
3
|
font-size: 1.2em;
|
|
4
4
|
width: 1em;
|
|
@@ -6,76 +6,76 @@
|
|
|
6
6
|
vertical-align: -0.2em;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
.
|
|
9
|
+
.xtr_7154 {
|
|
10
10
|
background-size: 100% 100%;
|
|
11
11
|
background-repeat: no-repeat;
|
|
12
12
|
background-position: center;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
.
|
|
15
|
+
.xtr_3674 {
|
|
16
16
|
width: 1.0781em;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
.
|
|
19
|
+
.xtr_11615 {
|
|
20
20
|
width: 1.0313em;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
.
|
|
23
|
+
.xtr_11456 {
|
|
24
24
|
width: 1.0625em;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
.
|
|
27
|
+
.xtr_17243 {
|
|
28
28
|
width: 1.1563em;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
.
|
|
31
|
+
.xtr_19257 {
|
|
32
32
|
width: 1.0469em;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
.
|
|
35
|
+
.xtr_3254 {
|
|
36
36
|
width: 1.1406em;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
.
|
|
39
|
+
.xtr_13218 {
|
|
40
40
|
width: 1.0781em;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
.
|
|
43
|
+
.xtr_17458 {
|
|
44
44
|
width: 1.1406em;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
.
|
|
47
|
+
.xtr_19104 {
|
|
48
48
|
width: 1.0781em;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
.
|
|
51
|
+
.xtr_7593 {
|
|
52
52
|
width: 1.1406em;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
.
|
|
55
|
+
.xtr_12634 {
|
|
56
56
|
width: 1.375em;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
.
|
|
59
|
+
.xtr_9977 {
|
|
60
60
|
width: 1.0625em;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
.
|
|
63
|
+
.xtr_7513 {
|
|
64
64
|
width: 1.1406em;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
.
|
|
67
|
+
.xtr_18959 {
|
|
68
68
|
width: 1.1406em;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
.
|
|
71
|
+
.xtr_18075 {
|
|
72
72
|
width: 1.0625em;
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
.
|
|
75
|
+
.xtr_6857 {
|
|
76
76
|
width: 1.125em;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
.
|
|
79
|
+
.xtr_19561 {
|
|
80
80
|
width: 1.0469em;
|
|
81
81
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @ts-ignore
|
|
2
2
|
import "./douyin_emoji_render.css";
|
|
3
|
-
var _ = {"emoji":"
|
|
3
|
+
var _ = {"emoji":"xtr_1045","background":"xtr_7154","_互粉":"xtr_3674","_再见":"xtr_11615","_吐血":"xtr_11456","_听歌":"xtr_17243","_嘿哈":"xtr_19257","_大哭":"xtr_3254","_强":"xtr_13218","_我想静静":"xtr_17458","_擦汗":"xtr_19104","_机智":"xtr_7593","_求抱抱":"xtr_12634","_灵机一动":"xtr_9977","_熊吉":"xtr_7513","_笑哭":"xtr_18959","_紫薇别走":"xtr_18075","_耶":"xtr_6857","_飞吻":"xtr_19561"};
|
|
4
4
|
import { HTMLRender } from "./html_render";
|
|
5
5
|
// douyinEmojiAllList
|
|
6
6
|
// biome-ignore format:
|
package/lib/text_parser.d.ts
CHANGED
|
@@ -14,7 +14,15 @@ export declare enum TextParserNodeType {
|
|
|
14
14
|
/** 抖音表情 */
|
|
15
15
|
DOUYIN_EMOJI = 64,
|
|
16
16
|
/** 小程序短链接 */
|
|
17
|
-
MINI_PROGRAM_SHORT_LINK = 128
|
|
17
|
+
MINI_PROGRAM_SHORT_LINK = 128,
|
|
18
|
+
/** 加粗效果 */
|
|
19
|
+
BOLD = 256,
|
|
20
|
+
/** 省略 */
|
|
21
|
+
ELLIPSIS = 512,
|
|
22
|
+
/** 任意表情 */
|
|
23
|
+
ANY_EMOJI = 112,
|
|
24
|
+
/** 任意链接 */
|
|
25
|
+
ANY_LINK = 132
|
|
18
26
|
}
|
|
19
27
|
export type TextParserNodeEmojiInfo = {
|
|
20
28
|
/** 图片链接 */
|
|
@@ -51,10 +59,36 @@ export type TextParserOptions = {
|
|
|
51
59
|
douyinEmojiInfo?: boolean;
|
|
52
60
|
/** 是否解析小程序短链接 */
|
|
53
61
|
miniProgramShortLink?: boolean;
|
|
62
|
+
/** 是否解析加粗效果 */
|
|
63
|
+
bold?: boolean;
|
|
64
|
+
};
|
|
65
|
+
export type TextParserParseStore = {
|
|
66
|
+
/** 最大长度 */
|
|
67
|
+
maxLength: number;
|
|
68
|
+
/** 当前长度 */
|
|
69
|
+
currentLength: number;
|
|
70
|
+
/** 剩余长度 */
|
|
71
|
+
remainingLength: number;
|
|
72
|
+
/** 是否已达到最大长度 */
|
|
73
|
+
isReachMaxLength: boolean;
|
|
74
|
+
/** 是否已超过最大长度 */
|
|
75
|
+
isOverMaxLength: boolean;
|
|
76
|
+
/** 是否有省略 */
|
|
77
|
+
hasEllipsis: boolean;
|
|
78
|
+
};
|
|
79
|
+
export type TextParserParseOptions = {
|
|
80
|
+
/** 文本 */
|
|
81
|
+
text: string;
|
|
82
|
+
/** 最大长度 */
|
|
83
|
+
maxLength?: number;
|
|
84
|
+
/** 作为片段返回 */
|
|
85
|
+
asFragment?: boolean;
|
|
86
|
+
/** 状态管理 */
|
|
87
|
+
store?: TextParserParseStore;
|
|
54
88
|
};
|
|
55
89
|
export declare class TextParser {
|
|
56
90
|
private options;
|
|
57
91
|
private parser;
|
|
58
92
|
constructor(options: TextParserOptions);
|
|
59
|
-
parse: (
|
|
93
|
+
parse: (options: TextParserParseOptions) => TextParserNode[];
|
|
60
94
|
}
|
package/lib/text_parser.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import _createForOfIteratorHelperLoose from "@babel/runtime/helpers/esm/createForOfIteratorHelperLoose";
|
|
1
2
|
import { Parser } from 'simple-text-parser';
|
|
2
3
|
import { DouyinEmojiRender } from "./douyin_emoji_render";
|
|
3
4
|
import { UnifiedEmojiRender } from "./unified_emoji_render";
|
|
4
5
|
import { WeixinEmojiRender } from "./weixin_emoji_render";
|
|
5
|
-
export var TextParserNodeType =
|
|
6
|
+
export var TextParserNodeType = function (TextParserNodeType) {
|
|
6
7
|
TextParserNodeType[TextParserNodeType["PARAGRAPH"] = 1] = "PARAGRAPH";
|
|
7
8
|
TextParserNodeType[TextParserNodeType["PLAIN_TEXT"] = 2] = "PLAIN_TEXT";
|
|
8
9
|
TextParserNodeType[TextParserNodeType["WEB_LINK"] = 4] = "WEB_LINK";
|
|
@@ -11,16 +12,45 @@ export var TextParserNodeType = /*#__PURE__*/function (TextParserNodeType) {
|
|
|
11
12
|
TextParserNodeType[TextParserNodeType["UNIFIED_EMOJI"] = 32] = "UNIFIED_EMOJI";
|
|
12
13
|
TextParserNodeType[TextParserNodeType["DOUYIN_EMOJI"] = 64] = "DOUYIN_EMOJI";
|
|
13
14
|
TextParserNodeType[TextParserNodeType["MINI_PROGRAM_SHORT_LINK"] = 128] = "MINI_PROGRAM_SHORT_LINK";
|
|
15
|
+
TextParserNodeType[TextParserNodeType["BOLD"] = 256] = "BOLD";
|
|
16
|
+
TextParserNodeType[TextParserNodeType["ELLIPSIS"] = 512] = "ELLIPSIS";
|
|
17
|
+
TextParserNodeType[TextParserNodeType["ANY_EMOJI"] = TextParserNodeType.UNIFIED_EMOJI | TextParserNodeType.WEIXIN_EMOJI | TextParserNodeType.DOUYIN_EMOJI] = "ANY_EMOJI";
|
|
18
|
+
TextParserNodeType[TextParserNodeType["ANY_LINK"] = TextParserNodeType.WEB_LINK | TextParserNodeType.MINI_PROGRAM_SHORT_LINK] = "ANY_LINK";
|
|
14
19
|
return TextParserNodeType;
|
|
15
20
|
}({});
|
|
16
21
|
export var TextParser = function TextParser(options) {
|
|
17
22
|
var _this = this;
|
|
18
23
|
this.options = options;
|
|
19
24
|
this.parser = void 0;
|
|
20
|
-
this.parse = function (
|
|
25
|
+
this.parse = function (options) {
|
|
26
|
+
if (!options.store) {
|
|
27
|
+
var _store = {
|
|
28
|
+
maxLength: options.maxLength || 0,
|
|
29
|
+
currentLength: 0,
|
|
30
|
+
get remainingLength() {
|
|
31
|
+
return _store.maxLength - _store.currentLength;
|
|
32
|
+
},
|
|
33
|
+
get isReachMaxLength() {
|
|
34
|
+
return _store.maxLength > 0 && _store.currentLength >= _store.maxLength;
|
|
35
|
+
},
|
|
36
|
+
get isOverMaxLength() {
|
|
37
|
+
return _store.maxLength > 0 && _store.currentLength > _store.maxLength;
|
|
38
|
+
},
|
|
39
|
+
hasEllipsis: false
|
|
40
|
+
};
|
|
41
|
+
options.store = _store;
|
|
42
|
+
}
|
|
43
|
+
var text = options.text;
|
|
44
|
+
var asFragment = options.asFragment;
|
|
45
|
+
var store = options.store;
|
|
21
46
|
var paragraphs = [];
|
|
22
47
|
var paragraph = [];
|
|
23
|
-
_this.parser.toTree(text)
|
|
48
|
+
for (var _iterator = _createForOfIteratorHelperLoose(_this.parser.toTree(text)), _step; !(_step = _iterator()).done;) {
|
|
49
|
+
var item = _step.value;
|
|
50
|
+
if (store.isReachMaxLength) {
|
|
51
|
+
store.hasEllipsis = true;
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
24
54
|
var nodeType = item.type === 'text' ? TextParserNodeType.PLAIN_TEXT : item.type === 'url' ? TextParserNodeType.WEB_LINK : item.type;
|
|
25
55
|
if (nodeType & TextParserNodeType.LINE_BREAK) {
|
|
26
56
|
if (paragraph.length > 0) {
|
|
@@ -31,15 +61,43 @@ export var TextParser = function TextParser(options) {
|
|
|
31
61
|
paragraph = [];
|
|
32
62
|
}
|
|
33
63
|
} else {
|
|
34
|
-
var node = {
|
|
64
|
+
var node = item.continue ? {
|
|
65
|
+
type: nodeType,
|
|
66
|
+
nodes: _this.parse({
|
|
67
|
+
text: item.text,
|
|
68
|
+
asFragment: true,
|
|
69
|
+
store: store
|
|
70
|
+
}),
|
|
71
|
+
info: item.info
|
|
72
|
+
} : {
|
|
35
73
|
type: nodeType,
|
|
36
74
|
content: item.text,
|
|
37
75
|
info: item.info
|
|
38
76
|
};
|
|
39
77
|
paragraph.push(node);
|
|
78
|
+
if (!item.continue) {
|
|
79
|
+
var isEmoji = nodeType & TextParserNodeType.ANY_EMOJI;
|
|
80
|
+
var isPlainText = nodeType & TextParserNodeType.PLAIN_TEXT;
|
|
81
|
+
var chars = isEmoji ? [item.text] : Array.from(item.text);
|
|
82
|
+
store.currentLength += chars.length;
|
|
83
|
+
if (store.isReachMaxLength) {
|
|
84
|
+
if (isPlainText && store.isOverMaxLength) {
|
|
85
|
+
node.content = chars.slice(0, store.remainingLength).join('');
|
|
86
|
+
store.hasEllipsis = true;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
40
90
|
}
|
|
41
|
-
}
|
|
91
|
+
}
|
|
92
|
+
if (asFragment) {
|
|
93
|
+
return paragraph;
|
|
94
|
+
}
|
|
42
95
|
if (paragraph.length > 0) {
|
|
96
|
+
if (store.hasEllipsis) {
|
|
97
|
+
paragraph.push({
|
|
98
|
+
type: TextParserNodeType.ELLIPSIS
|
|
99
|
+
});
|
|
100
|
+
}
|
|
43
101
|
paragraphs.push({
|
|
44
102
|
type: TextParserNodeType.PARAGRAPH,
|
|
45
103
|
nodes: paragraph
|
|
@@ -57,6 +115,15 @@ export var TextParser = function TextParser(options) {
|
|
|
57
115
|
text: lineBreak
|
|
58
116
|
};
|
|
59
117
|
});
|
|
118
|
+
if (this.options.bold) {
|
|
119
|
+
parser.addRule(/\*\*(.*?)\*\*/g, function (_, text) {
|
|
120
|
+
return {
|
|
121
|
+
type: TextParserNodeType.BOLD,
|
|
122
|
+
text: text,
|
|
123
|
+
continue: true
|
|
124
|
+
};
|
|
125
|
+
});
|
|
126
|
+
}
|
|
60
127
|
if (this.options.weixinEmoji) {
|
|
61
128
|
parser.addRule(WeixinEmojiRender.regExp, function (weixinEmoji) {
|
|
62
129
|
return {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.
|
|
1
|
+
.xtr_2734 {
|
|
2
2
|
display: inline-block;
|
|
3
3
|
font-size: 1.2em;
|
|
4
4
|
width: 1em;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
vertical-align: -0.2em;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
.
|
|
9
|
+
.xtr_12256 {
|
|
10
10
|
background-size: 100% 100%;
|
|
11
11
|
background-repeat: no-repeat;
|
|
12
12
|
background-position: center;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var _UnifiedEmojiRender;
|
|
2
2
|
// @ts-ignore
|
|
3
3
|
import "./unified_emoji_render.css";
|
|
4
|
-
var _ = {"unifiedEmoji":"
|
|
4
|
+
var _ = {"unifiedEmoji":"xtr_2734","background":"xtr_12256"};
|
|
5
5
|
import { characterToCodepoint, escapeRegExp } from 'vtils';
|
|
6
6
|
import { emojiRegExpBuilder } from 'vtils/regexp';
|
|
7
7
|
import { HTMLRender } from "./html_render";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.
|
|
1
|
+
.xtr_4380 {
|
|
2
2
|
display: inline-block;
|
|
3
3
|
font-size: 1.2em;
|
|
4
4
|
width: 1em;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
vertical-align: -0.2em;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
.
|
|
9
|
+
.xtr_76 {
|
|
10
10
|
background-size: 100% 100%;
|
|
11
11
|
background-repeat: no-repeat;
|
|
12
12
|
background-position: center;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @ts-ignore
|
|
2
2
|
import "./weixin_emoji_render.css";
|
|
3
|
-
var _ = {"weixinEmoji":"
|
|
3
|
+
var _ = {"weixinEmoji":"xtr_4380","background":"xtr_76"};
|
|
4
4
|
import { escapeRegExp, keysStrict } from 'vtils';
|
|
5
5
|
import { HTMLRender } from "./html_render";
|
|
6
6
|
var weixinEmojiBaseUrl = "https://wxpublic-1251448646.file.myqcloud.com/public/common/files/";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jayfong/x-text-render",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.64.0",
|
|
4
4
|
"license": "ISC",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"*.css"
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"vtils": "^4.95.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@jayfong/x-request": "^2.
|
|
29
|
+
"@jayfong/x-request": "^2.64.0",
|
|
30
30
|
"fs-extra": "^10.0.1",
|
|
31
31
|
"globby": "^11",
|
|
32
32
|
"katex": "^0.16.8",
|