diff --git a/src/tables/directory.js b/src/tables/directory.js index 1e62df27..dbe69270 100644 --- a/src/tables/directory.js +++ b/src/tables/directory.js @@ -44,8 +44,11 @@ Directory.preEncode = function(stream) { this.numTables = tables.length; this.tables = tables; - this.searchRange = Math.floor(Math.log(this.numTables) / Math.LN2) * 16; - this.entrySelector = Math.floor(this.searchRange / Math.LN2); + let maxExponentFor2 = Math.floor((Math.log(this.numTables) / Math.LN2)); + let maxPowerOf2 = Math.pow(2, maxExponentFor2); + + this.searchRange = maxPowerOf2 * 16; + this.entrySelector = Math.log(maxPowerOf2) / Math.LN2; this.rangeShift = this.numTables * 16 - this.searchRange; }; diff --git a/test/directory.js b/test/directory.js new file mode 100644 index 00000000..b47ed283 --- /dev/null +++ b/test/directory.js @@ -0,0 +1,20 @@ +import fontkit from '../src'; +import assert from 'assert'; + +describe('metadata', function() { + let font = fontkit.openSync(__dirname + '/data/OpenSans/OpenSans-Regular.ttf'); + + it('decodes SFNT directory values correctly', function() { + let dir = font.directory; + assert.equal(dir.numTables, 19); + assert.equal(dir.searchRange, 256); + assert.equal(dir.entrySelector, 4); + assert.equal(dir.rangeShift, 48); + }); + + it('numTables matches table collection', function() { + let dir = font.directory; + assert.equal(Object.keys(dir.tables).length, dir.numTables); + }); + +});