From c8c5b4f8eac55d850effccb2e6a366a16d0be386 Mon Sep 17 00:00:00 2001 From: Artur Adib Date: Wed, 2 Nov 2011 14:43:27 -0400 Subject: [PATCH] First iteration, tracemonkey/ecma262 working --- src/canvas.js | 4 +-- src/core.js | 2 +- src/fonts.js | 79 ++++++++++++++++++++++++++------------------------- 3 files changed, 43 insertions(+), 42 deletions(-) diff --git a/src/canvas.js b/src/canvas.js index 474cc250f..1aeb851df 100644 --- a/src/canvas.js +++ b/src/canvas.js @@ -125,7 +125,7 @@ var CanvasGraphics = (function canvasGraphics() { this[fnArray[i]].apply(this, argsArray[i]); } else { var deps = argsArray[i]; - for (var n = 0; n < deps.length; n++) { + for (var n = 0, depsLength = deps.length; n < depsLength; n++) { var depObjId = deps[n]; // If the promise isn't resolved yet, add the continueCallback @@ -184,7 +184,7 @@ var CanvasGraphics = (function canvasGraphics() { TODO('set flatness: ' + flatness); }, setGState: function canvasGraphicsSetGState(states) { - for (var i = 0; i < states.length; i++) { + for (var i = 0, statesLength = states.length; i < statesLength; i++) { var state = states[i]; var key = state[0]; var value = state[1]; diff --git a/src/core.js b/src/core.js index 09d665972..112883ba2 100644 --- a/src/core.js +++ b/src/core.js @@ -205,7 +205,7 @@ var Page = (function pagePage() { ensureFonts: function pageEnsureFonts(fonts, callback) { // Convert the font names to the corresponding font obj. - for (var i = 0; i < fonts.length; i++) { + for (var i = 0, fontsLength = fonts.length; i < fontsLength; i++) { fonts[i] = this.objs.objs[fonts[i]].data; } diff --git a/src/fonts.js b/src/fonts.js index b027b766a..7c753deb2 100644 --- a/src/fonts.js +++ b/src/fonts.js @@ -393,7 +393,7 @@ var FontLoader = { bind: function fontLoaderBind(fonts, callback) { function checkFontsLoaded() { - for (var i = 0; i < objs.length; i++) { + for (var i = 0, objsLength = objs.length; i < objsLength; i++) { var fontObj = objs[i]; if (fontObj.loading) { return false; @@ -409,7 +409,7 @@ var FontLoader = { var rules = [], names = [], objs = []; - for (var i = 0; i < fonts.length; i++) { + for (var i = 0, fontsLength = fonts.length; i < fontsLength; i++) { var font = fonts[i]; // If there is already a fontObj on the font, then it was loaded/attached @@ -490,7 +490,7 @@ var FontLoader = { 'width: 10px; height: 10px;' + 'position: absolute; top: 0px; left: 0px;'); var html = ''; - for (var i = 0; i < names.length; ++i) { + for (var i = 0, namesLength = names.length; i < namesLength; ++i) { html += 'Hi'; } div.innerHTML = html; @@ -501,7 +501,7 @@ var FontLoader = { 'message', function fontLoaderMessage(e) { var fontNames = JSON.parse(e.data); - for (var i = 0; i < objs.length; ++i) { + for (var i = 0, objsLength = objs.length; i < objsLength; ++i) { var font = objs[i]; font.loading = false; } @@ -517,13 +517,13 @@ var FontLoader = { // pdfjsFontLoadFailed? var src = ''; src += ''; src += ''; - for (var i = 0; i < names.length; ++i) { + for (var i = 0, namesLength = names.length; i < namesLength; ++i) { src += '

Hi

'; } src += ''; @@ -673,7 +673,7 @@ var UnicodeRanges = [ ]; function getUnicodeRangeFor(value) { - for (var i = 0; i < UnicodeRanges.length; i++) { + for (var i = 0, ii = UnicodeRanges.length; i < ii; i++) { var range = UnicodeRanges[i]; if (value >= range.begin && value < range.end) return i; @@ -782,7 +782,7 @@ var Font = (function Font() { function stringToArray(str) { var array = []; - for (var i = 0; i < str.length; ++i) + for (var i = 0, strLength = str.length; i < strLength; ++i) array[i] = str.charCodeAt(i); return array; @@ -790,7 +790,7 @@ var Font = (function Font() { function arrayToString(arr) { var str = ''; - for (var i = 0; i < arr.length; ++i) + for (var i = 0, arrLength = arr.length; i < arrLength; ++i) str += String.fromCharCode(arr[i]); return str; @@ -1116,11 +1116,11 @@ var Font = (function Font() { // Mac want 1-byte per character strings while Windows want // 2-bytes per character, so duplicate the names table var stringsUnicode = []; - for (var i = 0; i < strings.length; i++) { + for (var i = 0, stringsLength = strings.length; i < stringsLength; i++) { var str = strings[i]; var strUnicode = ''; - for (var j = 0; j < str.length; j++) + for (var j = 0, strLength = str.length; j < strLength; j++) strUnicode += string16(str.charCodeAt(j)); stringsUnicode.push(strUnicode); } @@ -1138,9 +1138,9 @@ var Font = (function Font() { // Build the name records field var strOffset = 0; - for (var i = 0; i < platforms.length; i++) { + for (var i = 0, platfLength = platforms.length; i < platfLength; i++) { var strs = names[i]; - for (var j = 0; j < strs.length; j++) { + for (var j = 0, strsLength = strs.length; j < strsLength; j++) { var str = strs[j]; var nameRecord = platforms[i] + // platform ID @@ -1258,7 +1258,7 @@ var Font = (function Font() { string32(table.offset); } - for (var i = 0; i < data.length; i++) + for (var i = 0, dataLength = data.length; i < dataLength; i++) cmap.data[i] = data.charCodeAt(i); } @@ -1345,7 +1345,7 @@ var Font = (function Font() { if (numMissing > 0) { font.pos = (font.start ? font.start : 0) + metrics.offset; var entries = ''; - for (var i = 0; i < hmtx.length; i++) + for (var i = 0, hmtxLength = hmtx.length; i < hmtxLength; i++) entries += String.fromCharCode(font.getByte()); for (var i = 0; i < numMissing; i++) entries += '\x00\x00'; @@ -1549,18 +1549,18 @@ var Font = (function Font() { }); // rewrite the tables but tweak offsets - for (var i = 0; i < tables.length; i++) { + for (var i = 0, tablesLength = tables.length; i < tablesLength; i++) { var table = tables[i]; var data = []; var tableData = table.data; - for (var j = 0; j < tableData.length; j++) + for (var j = 0, dataLength = tableData.length; j < dataLength; j++) data.push(tableData[j]); createTableEntry(ttf, table.tag, data); } // Add the table datas - for (var i = 0; i < tables.length; i++) { + for (var i = 0, tablesLength = tables.length; i < tablesLength; i++) { var table = tables[i]; var tableData = table.data; ttf.file += arrayToString(tableData); @@ -1575,7 +1575,7 @@ var Font = (function Font() { convert: function font_convert(fontName, font, properties) { function isFixedPitch(glyphs) { - for (var i = 0; i < glyphs.length - 1; i++) { + for (var i = 0, glyphsMax = glyphs.length - 1; i < glyphsMax; i++) { if (glyphs[i] != glyphs[i + 1]) return false; } @@ -1657,7 +1657,7 @@ var Font = (function Font() { // Horizontal metrics 'hmtx': (function fontFieldsHmtx() { var hmtx = '\x00\x00\x00\x00'; // Fake .notdef - for (var i = 0; i < charstrings.length; i++) { + for (var i = 0, cstrMax = charstrings.length; i < cstrMax; i++) { hmtx += string16(charstrings[i].width) + string16(0); } return stringToArray(hmtx); @@ -1729,8 +1729,8 @@ var Font = (function Font() { } encoding[0] = { unicode: 0, width: 0 }; - var glyph = 1, i, j, k; - for (i = 0; i < cidToUnicode.length; ++i) { + var glyph = 1, i, j, k, cidLength; + for (i = 0, cidLength = cidToUnicode.length; i < cidLength; ++i) { var unicode = cidToUnicode[i]; var width; if (isArray(unicode)) { @@ -1844,7 +1844,7 @@ var Font = (function Font() { } } else { - for (var i = 0; i < chars.length; ++i) { + for (var i = 0, charsLength = chars.length; i < charsLength; ++i) { var charcode = chars.charCodeAt(i); var glyph = encoding[charcode]; if ('undefined' == typeof(glyph)) { @@ -2142,7 +2142,7 @@ var Type1Parser = function type1Parser() { count++; var array = str.substr(start, count).split(' '); - for (var i = 0; i < array.length; i++) + for (var i = 0, arrayLength = array.length; i < arrayLength; i++) array[i] = parseFloat(array[i] || 0); return array; } @@ -2167,7 +2167,7 @@ var Type1Parser = function type1Parser() { this.extractFontProgram = function t1_extractFontProgram(stream) { var eexec = decrypt(stream, kEexecEncryptionKey, 4); var eexecStr = ''; - for (var i = 0; i < eexec.length; i++) + for (var i = 0, eexecLength = eexec.length; i < eexecLength; i++) eexecStr += String.fromCharCode(eexec[i]); var glyphsSection = false, subrsSection = false; @@ -2291,7 +2291,7 @@ var Type1Parser = function type1Parser() { this.extractFontHeader = function t1_extractFontHeader(stream, properties) { var headerString = ''; - for (var i = 0; i < stream.length; i++) + for (var i = 0, streamLength = stream.length; i < streamLength; i++) headerString += String.fromCharCode(stream[i]); var token = ''; @@ -2318,7 +2318,7 @@ var Type1Parser = function type1Parser() { var matrix = readNumberArray(headerString, i + 1); // The FontMatrix is in unitPerEm, so make it pixels - for (var j = 0; j < matrix.length; j++) + for (var j = 0, matLength = matrix.length; j < matLength; j++) matrix[j] *= 1000; // Make the angle into the right direction @@ -2479,7 +2479,7 @@ CFF.prototype = { } for (var i = 0; i < count; i++) { - for (var j = 0; j < objects[i].length; j++) + for (var j = 0, objLength = objects[i].length; j < objLength; j++) data += isByte ? String.fromCharCode(objects[i][j] & 0xFF) : objects[i][j]; } @@ -2507,7 +2507,7 @@ CFF.prototype = { var charstrings = []; var missings = []; - for (var i = 0; i < glyphs.length; i++) { + for (var i = 0, glLength = glyphs.length; i < glLength; i++) { var glyph = glyphs[i]; var mapping = properties.glyphs[glyph.glyph]; if (!mapping) { @@ -2597,6 +2597,7 @@ CFF.prototype = { }, flattenCharstring: function flattenCharstring(charstring, map) { + // charstring changes size - can't cache .length in loop for (var i = 0; i < charstring.length; i++) { var command = charstring[i]; if (command.charAt) { @@ -2641,7 +2642,7 @@ CFF.prototype = { '\x1c\x00\x00\x10'; // Encoding var boundingBox = properties.bbox; - for (var i = 0; i < boundingBox.length; i++) + for (var i = 0, boxLength = boundingBox.length; i < boxLength; i++) dict += self.encodeNumber(boundingBox[i]); dict += '\x05'; // FontBBox; @@ -2731,7 +2732,7 @@ CFF.prototype = { if (isArray(value)) { data += self.encodeNumber(value[0]); - for (var i = 1; i < value.length; i++) + for (var i = 1, valLength = value.length; i < valLength; i++) data += self.encodeNumber(value[i] - value[i - 1]); } else { data += self.encodeNumber(value); @@ -2752,7 +2753,7 @@ CFF.prototype = { var cff = []; for (var index in fields) { var field = fields[index]; - for (var i = 0; i < field.length; i++) + for (var i = 0, fLength = field.length; i < fLength; i++) cff.push(field.charCodeAt(i)); } @@ -2849,7 +2850,7 @@ var Type2CFF = (function type2CFF() { // create the mapping between charstring and glyph id var glyphIds = []; - for (var i = 0; i < charstrings.length; i++) + for (var i = 0, cstrLength = charstrings.length; i < cstrLength; i++) glyphIds.push(charstrings[i].gid); this.charstrings = charstrings; @@ -2867,7 +2868,7 @@ var Type2CFF = (function type2CFF() { var charstrings = []; var firstChar = properties.firstChar; var glyphMap = {}; - for (var i = 0; i < charsets.length; i++) { + for (var i = 0, csetLength = charsets.length; i < csetLength; i++) { var glyph = charsets[i]; for (var charcode in encoding) { if (encoding[charcode] == i) @@ -2876,7 +2877,7 @@ var Type2CFF = (function type2CFF() { } var differences = properties.differences; - for (var i = 0; i < differences.length; ++i) { + for (var i = 0, diffLength = differences.length; i < diffLength; ++i) { var glyph = differences[i]; if (!glyph) continue; @@ -2887,7 +2888,7 @@ var Type2CFF = (function type2CFF() { } var glyphs = properties.glyphs; - for (var i = 1; i < charsets.length; i++) { + for (var i = 1, csetLength = charsets.length; i < csetLength; i++) { var glyph = charsets[i]; var code = glyphMap[glyph] || 0; @@ -2921,7 +2922,7 @@ var Type2CFF = (function type2CFF() { // properties.glyphs[code] || properties.glyphs[glyph] var nextUnusedUnicode = kCmapGlyphOffset + 0x0020; var lastUnicode = charstrings[0].unicode, wasModified = false; - for (var i = 1; i < charstrings.length; ++i) { + for (var i = 1, cstrLength = charstrings.length; i < cstrLength; ++i) { if (lastUnicode != charstrings[i].unicode) { lastUnicode = charstrings[i].unicode; continue; @@ -2966,7 +2967,7 @@ var Type2CFF = (function type2CFF() { var gid = 1; var baseEncoding = pos ? Encodings.ExpertEncoding.slice() : Encodings.StandardEncoding.slice(); - for (var i = 0; i < charset.length; i++) { + for (var i = 0, csetLength = charset.length; i < csetLength; i++) { var index = baseEncoding.indexOf(charset[i]); if (index != -1) encoding[index] = gid++;