Browse Source

Merge pull request #5135 from nnethercote/identity-cmap-proper

Make IdentityCMaps more compact.
Yury Delendik 11 years ago
parent
commit
57860149e9
  1. 53
      src/core/cmap.js

53
src/core/cmap.js

@ -302,20 +302,69 @@ var CMap = (function CMapClosure() {
return [0, 1]; return [0, 1];
} }
}; };
return CMap; return CMap;
})(); })();
// A special case of CMap, where the _map array implicitly has a length of
// 65535 and each element is equal to its index.
var IdentityCMap = (function IdentityCMapClosure() { var IdentityCMap = (function IdentityCMapClosure() {
function IdentityCMap(vertical, n) { function IdentityCMap(vertical, n) {
CMap.call(this); CMap.call(this);
this.vertical = vertical; this.vertical = vertical;
this.addCodespaceRange(n, 0, 0xffff); this.addCodespaceRange(n, 0, 0xffff);
this.mapCidRange(0, 0xffff, 0);
} }
Util.inherit(IdentityCMap, CMap, {}); Util.inherit(IdentityCMap, CMap, {});
IdentityCMap.prototype = {
addCodespaceRange: CMap.prototype.addCodespaceRange,
mapCidRange: function(low, high, dstLow) {
error('should not call mapCidRange');
},
mapBfRange: function(low, high, dstLow) {
error('should not call mapBfRange');
},
mapBfRangeToArray: function(low, high, array) {
error('should not call mapBfRangeToArray');
},
mapOne: function(src, dst) {
error('should not call mapCidOne');
},
lookup: function(code) {
return (isInt(code) && code <= 0xffff) ? code : undefined;
},
contains: function(code) {
return isInt(code) && code <= 0xffff;
},
forEach: function(callback) {
for (var i = 0; i <= 0xffff; i++) {
callback(i, i);
}
},
charCodeOf: function(value) {
return (isInt(value) && value <= 0xffff) ? value : -1;
},
getMap: function() {
// Sometimes identity maps must be instantiated, but it's rare.
var map = new Array(0x10000);
for (var i = 0; i <= 0xffff; i++) {
map[i] = i;
}
return map;
},
readCharCode: CMap.prototype.readCharCode
};
return IdentityCMap; return IdentityCMap;
})(); })();

Loading…
Cancel
Save