Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 | 70x 70x 70x 70x 3x 3x 3x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x | import { validateCharacter, validateExtendedCharacter } from './gsmvalidator';
function isHighSurrogate(code) {
return code >= 0xd800 && code <= 0xdbff;
}
export const gsmSplit = function (message, options) {
options = options || { summary: false };
if (message === '') {
return {
parts: [
{
content: options.summary ? undefined : '',
length: 0,
bytes: 0
}
],
totalLength: 0,
totalBytes: 0
};
}
const messages = [];
let length = 0;
let bytes = 0;
let totalBytes = 0;
let totalLength = 0;
let messagePart = '';
function bank() {
const msg = {
content: options.summary ? undefined : messagePart,
length: length,
bytes: bytes
};
messages.push(msg);
totalLength += length;
length = 0;
totalBytes += bytes;
bytes = 0;
messagePart = '';
}
for (let i = 0, count = message.length; i < count; i++) {
let c = message.charAt(i);
if (!validateCharacter(c)) {
if (isHighSurrogate(c.charCodeAt(0))) {
i++;
}
c = '\u0020';
} else if (validateExtendedCharacter(c)) {
if (bytes === 152) bank();
bytes++;
}
bytes++;
length++;
if (!options.summary) messagePart += c;
if (bytes === 153) bank();
}
if (bytes > 0) bank();
if (messages[1] && totalBytes <= 160) {
return {
parts: [
{
content: options.summary
? undefined
: messages[0].content + messages[1].content,
length: totalLength,
bytes: totalBytes
}
],
totalLength: totalLength,
totalBytes: totalBytes
};
}
return {
parts: messages,
totalLength: totalLength,
totalBytes: totalBytes
};
};
|