| baseline | var lineregex = /\n/g;
var lines = [];
var position = 0;
var match;
do {
match = lineregex.exec(text);
var line = {
line: lines.length,
start: position
};
lines.push(line);
if (match){
line.textEnd = match.index;
line.end = match.index + match[0].length;
position = line.end;
}
else {
line.textEnd = position + text.slice(position).length;
break;
}
} while (true);
| ready |
| split and map | var position = 0;
lines = text.split(/\n/).map(function(lineText, index){
var lineObject = {
line: index,
start: position,
};
position += lineText.length
lineObject.textEnd = position;
position += 1;
lineObject.end = position;
return lineObject;
});
| ready |
| indexOf and slice | var lines = [];
var position = 0;
var index;
while (index !== -1) {
index = text.indexOf('\n', position);
var line = {
line: lines.length,
start: position,
textEnd: index,
end: position = index + 1
};
lines.push(line);
};
if (lines.length){
var lastLine = lines[lines.length - 1];
var lineTextLength = text.slice(lastLine.start).length;
if (lineTextLength){
lastLine.textEnd = lastLine.start + lineTextLength;
delete lastLine.end;
}
else{
lines.pop();
}
}
| ready |
| segmenter | var segmenter = new Intl.Segmenter("en", { granularity: "sentence" });
var lines = [];
var segments = segmenter.segment(text);
for (const {segment,index} of segments){
var line = {
line: lines.length,
start: index,
textEnd: index + segment.length,
};
line.end = line.textEnd + 1;
lines.push(line);
}
| ready |