1
0
Fork 0
mirror of https://github.com/futurepress/epub.js.git synced 2025-10-04 15:09:16 +02:00

Improved CFI generation - support for most popular breakable characters.

This commit is contained in:
Jaroslaw Bielski 2014-12-04 11:36:59 +01:00
parent 701ea1c115
commit 287cbcd317
9 changed files with 121 additions and 17 deletions

File diff suppressed because one or more lines are too long

32
reader/js/epub.min.js vendored
View file

@ -6608,13 +6608,35 @@ EPUBJS.Renderer.prototype.mapPage = function(){
};
EPUBJS.Renderer.prototype.indexOfBreakableChar = function (text, startPosition) {
var whiteCharacters = "\x2D\x20\t\r\n\b\f";
// '-' \x2D
// ' ' \x20
if (! startPosition) {
startPosition = 0;
}
for (var i = startPosition; i < text.length; i++) {
if (whiteCharacters.indexOf(text.charAt(i)) != -1) {
return i;
}
}
return -1;
};
EPUBJS.Renderer.prototype.splitTextNodeIntoWordsRanges = function(node){
var ranges = [];
var text = node.textContent.trim();
var range;
var rect;
var list;
pos = text.indexOf(" ");
// jaroslaw.bielski@7bulls.com
// Usage of indexOf() function for space character as word delimiter
// is not sufficient in case of other breakable characters like \r\n- etc
pos = this.indexOfBreakableChar(text);
if(pos === -1) {
range = this.doc.createRange();
@ -6626,11 +6648,15 @@ EPUBJS.Renderer.prototype.splitTextNodeIntoWordsRanges = function(node){
range.setStart(node, 0);
range.setEnd(node, pos);
ranges.push(range);
range = false;
// jaroslaw.bielski@7bulls.com
// there was a word miss in case of one letter words
range = this.doc.createRange();
range.setStart(node, pos+1);
while ( pos != -1 ) {
pos = text.indexOf(" ", pos + 1);
pos = this.indexOfBreakableChar(text, pos + 1);
if(pos > 0) {
if(range) {