From 5f75130fbff18bc422112466cd5e9f7820ac94a1 Mon Sep 17 00:00:00 2001 From: Andreas Gal Date: Mon, 20 Jun 2011 03:49:40 -0400 Subject: [PATCH] store ranges as [start, end], instead of storing all codes --- fonts.js | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/fonts.js b/fonts.js index 49a78cb53..73d42d8be 100644 --- a/fonts.js +++ b/fonts.js @@ -315,14 +315,16 @@ var Font = (function () { codes.push(String.fromCharCode(glyphs[n].unicode)) codes.sort(); + // Split the sorted codes into ranges. var ranges = []; for (var n = 0; n < length; ) { - var range = []; - do { - var current = codes[n++].charCodeAt(0); - range.push(current); - } while (n < length && current + 1 == codes[n].charCodeAt(0)); - ranges.push(range); + var start = codes[n++].charCodeAt(0); + var end = start; + while (n < length && end + 1 == codes[n].charCodeAt(0)) { + ++end; + ++n; + } + ranges.push([start, end]); } return ranges; } @@ -367,10 +369,10 @@ var Font = (function () { for (var i = 0; i < segCount - 1; i++) { var range = ranges[i]; 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); - bias += range.length; + bias += (range[1] - range[0] + 1); // deltas are signed shorts delta[0] ^= 0xFF; @@ -382,8 +384,8 @@ var Font = (function () { idDeltas.push(delta[0], delta[1]); idRangeOffsets.push(0x00, 0x00); - for (var j = 0; j < range.length; j++) - glyphsIdsArray.push(range[j]); + for (var j = range[0]; j <= range[1]; j++) + glyphsIdsArray.push(j); } startCount.push(0xFF, 0xFF); endCount.push(0xFF, 0xFF);