1 | 'use strict';
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.init = exports.EmailOptimizer = exports.EMAILCHAR = exports._EMAILCHAR = void 0;
|
4 | const mod_1 = require("../mod");
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | exports._EMAILCHAR = '!"#$%&\'*+-/0123456789=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz{|}~.'.split('');
|
10 | exports.EMAILCHAR = {};
|
11 | for (let i in exports._EMAILCHAR)
|
12 | exports.EMAILCHAR[exports._EMAILCHAR[i]] = 1;
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 | class EmailOptimizer extends mod_1.SubSModuleOptimizer {
|
19 | |
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 | doOptimize(words) {
|
26 | const POSTAG = this.segment.POSTAG;
|
27 |
|
28 | let i = 0;
|
29 | let ie = words.length - 1;
|
30 | let addr_start = false;
|
31 | let has_at = false;
|
32 | while (i < ie) {
|
33 | let word = words[i];
|
34 | let is_ascii = ((word.p == POSTAG.A_NX) ||
|
35 | (word.p == POSTAG.A_M && word.w.charCodeAt(0) < 128))
|
36 | ? true : false;
|
37 |
|
38 |
|
39 | if (addr_start === false && is_ascii) {
|
40 | addr_start = i;
|
41 | i++;
|
42 | continue;
|
43 | }
|
44 | else {
|
45 |
|
46 | if (has_at === false && word.w == '@') {
|
47 | has_at = true;
|
48 | i++;
|
49 | continue;
|
50 | }
|
51 |
|
52 | if (has_at !== false && words[i - 1].w != '@' && is_ascii === false && !(word.w in exports.EMAILCHAR)) {
|
53 | let mailws = words.slice(addr_start, i);
|
54 |
|
55 | words.splice(addr_start, mailws.length, {
|
56 | w: this.toEmailAddress(mailws),
|
57 | p: POSTAG.URL
|
58 | });
|
59 | i = addr_start + 1;
|
60 | ie -= mailws.length - 1;
|
61 | addr_start = false;
|
62 | has_at = false;
|
63 | continue;
|
64 | }
|
65 |
|
66 | if (addr_start !== false && (is_ascii || word.w in exports.EMAILCHAR)) {
|
67 | i++;
|
68 | continue;
|
69 | }
|
70 | }
|
71 |
|
72 | addr_start = false;
|
73 | has_at = false;
|
74 | i++;
|
75 | }
|
76 |
|
77 | if (addr_start && has_at && words[ie]) {
|
78 | let word = words[ie];
|
79 | let is_ascii = ((word.p == POSTAG.A_NX) ||
|
80 | (word.p == POSTAG.A_M && word.w in exports.EMAILCHAR))
|
81 | ? true : false;
|
82 | if (is_ascii) {
|
83 | let mailws = words.slice(addr_start, words.length);
|
84 |
|
85 | words.splice(addr_start, mailws.length, {
|
86 | w: this.toEmailAddress(mailws),
|
87 | p: POSTAG.URL
|
88 | });
|
89 | }
|
90 | }
|
91 | return words;
|
92 | }
|
93 | |
94 |
|
95 |
|
96 |
|
97 |
|
98 |
|
99 | toEmailAddress(words) {
|
100 | let ret = words[0].w;
|
101 | for (let i = 1, word; word = words[i]; i++) {
|
102 | ret += word.w;
|
103 | }
|
104 | return ret;
|
105 | }
|
106 | }
|
107 | exports.EmailOptimizer = EmailOptimizer;
|
108 | exports.init = EmailOptimizer.init.bind(EmailOptimizer);
|
109 | exports.default = EmailOptimizer;
|
110 |
|
\ | No newline at end of file |