store ranges as [start, end], instead of storing all codes
This commit is contained in:
parent
52e1631030
commit
5f75130fbf
22
fonts.js
22
fonts.js
@ -315,14 +315,16 @@ var Font = (function () {
|
|||||||
codes.push(String.fromCharCode(glyphs[n].unicode))
|
codes.push(String.fromCharCode(glyphs[n].unicode))
|
||||||
codes.sort();
|
codes.sort();
|
||||||
|
|
||||||
|
// Split the sorted codes into ranges.
|
||||||
var ranges = [];
|
var ranges = [];
|
||||||
for (var n = 0; n < length; ) {
|
for (var n = 0; n < length; ) {
|
||||||
var range = [];
|
var start = codes[n++].charCodeAt(0);
|
||||||
do {
|
var end = start;
|
||||||
var current = codes[n++].charCodeAt(0);
|
while (n < length && end + 1 == codes[n].charCodeAt(0)) {
|
||||||
range.push(current);
|
++end;
|
||||||
} while (n < length && current + 1 == codes[n].charCodeAt(0));
|
++n;
|
||||||
ranges.push(range);
|
}
|
||||||
|
ranges.push([start, end]);
|
||||||
}
|
}
|
||||||
return ranges;
|
return ranges;
|
||||||
}
|
}
|
||||||
@ -367,10 +369,10 @@ var Font = (function () {
|
|||||||
for (var i = 0; i < segCount - 1; i++) {
|
for (var i = 0; i < segCount - 1; i++) {
|
||||||
var range = ranges[i];
|
var range = ranges[i];
|
||||||
var start = FontsUtils.integerToBytes(range[0], 2);
|
var start = FontsUtils.integerToBytes(range[0], 2);
|
||||||
var end = FontsUtils.integerToBytes(range[range.length - 1], 2);
|
var end = FontsUtils.integerToBytes(range[1], 2);
|
||||||
|
|
||||||
var delta = FontsUtils.integerToBytes(((range[0] - 1) - bias) % 65536, 2);
|
var delta = FontsUtils.integerToBytes(((range[0] - 1) - bias) % 65536, 2);
|
||||||
bias += range.length;
|
bias += (range[1] - range[0] + 1);
|
||||||
|
|
||||||
// deltas are signed shorts
|
// deltas are signed shorts
|
||||||
delta[0] ^= 0xFF;
|
delta[0] ^= 0xFF;
|
||||||
@ -382,8 +384,8 @@ var Font = (function () {
|
|||||||
idDeltas.push(delta[0], delta[1]);
|
idDeltas.push(delta[0], delta[1]);
|
||||||
idRangeOffsets.push(0x00, 0x00);
|
idRangeOffsets.push(0x00, 0x00);
|
||||||
|
|
||||||
for (var j = 0; j < range.length; j++)
|
for (var j = range[0]; j <= range[1]; j++)
|
||||||
glyphsIdsArray.push(range[j]);
|
glyphsIdsArray.push(j);
|
||||||
}
|
}
|
||||||
startCount.push(0xFF, 0xFF);
|
startCount.push(0xFF, 0xFF);
|
||||||
endCount.push(0xFF, 0xFF);
|
endCount.push(0xFF, 0xFF);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user