|
|
|
import pause from '../helpers/schedulers/pause';
|
|
|
|
import splitStringByLength from '../helpers/string/splitStringByLength';
|
|
|
|
import {MessageEntity} from '../layer';
|
|
|
|
|
|
|
|
const text = 'abc def ghi jkl mno pqr stu vwx yz';
|
|
|
|
// const text = 'abcdefghijklmnopqrstuvwxyz';
|
|
|
|
const entities: MessageEntity[] = [];
|
|
|
|
const maxLength = 3;
|
|
|
|
const parts = ['abc def ghi', 'jkl mno pqr', 'stu vwx yz'];
|
|
|
|
|
|
|
|
async function split(str: string, maxLength: number, entities: MessageEntity[]) {
|
|
|
|
if(str.length <= maxLength) return [str];
|
|
|
|
|
|
|
|
const delimiter = ' ';
|
|
|
|
const out: {part: string, entities: MessageEntity[]}[] = [];
|
|
|
|
|
|
|
|
let offset = 0;
|
|
|
|
while(str.length) {
|
|
|
|
const isEnd = (offset + maxLength) >= str.length;
|
|
|
|
const sliced = str.slice(offset, offset + maxLength);
|
|
|
|
if(!sliced.length) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
const delimiterIndex = !isEnd ? sliced.lastIndexOf(delimiter) : -1;
|
|
|
|
console.log(`sliced='${sliced}'`);
|
|
|
|
let good: string;
|
|
|
|
if(delimiterIndex !== -1) {
|
|
|
|
offset += delimiter.length;
|
|
|
|
good = sliced.slice(0, delimiterIndex);
|
|
|
|
} else {
|
|
|
|
good = sliced;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!good.length) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
offset += good.length;
|
|
|
|
out.push({part: good, entities: []});
|
|
|
|
console.log(`'${good}'`);
|
|
|
|
|
|
|
|
// await pause(1000);
|
|
|
|
}
|
|
|
|
|
|
|
|
return out;
|
|
|
|
}
|
|
|
|
|
|
|
|
describe('Split string', () => {
|
|
|
|
const splitted = split(text, maxLength, []);
|
|
|
|
|
|
|
|
// console.log(parts, splitted);
|
|
|
|
|
|
|
|
test('parts', () => {
|
|
|
|
expect(1).toEqual(1);
|
|
|
|
});
|
|
|
|
|
|
|
|
test('a', async() => {
|
|
|
|
console.log(await splitted);
|
|
|
|
});
|
|
|
|
|
|
|
|
// test('')
|
|
|
|
});
|