Skip to content

Commit

Permalink
Convert src/core/to_unicode_map.js to use standard classes
Browse files Browse the repository at this point in the history
  • Loading branch information
Snuffleupagus authored and pull[bot] committed Mar 13, 2022
1 parent 06e3115 commit 1720411
Showing 1 changed file with 67 additions and 77 deletions.
144 changes: 67 additions & 77 deletions src/core/to_unicode_map.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,99 +15,89 @@

import { unreachable } from "../shared/util.js";

const ToUnicodeMap = (function ToUnicodeMapClosure() {
// eslint-disable-next-line no-shadow
function ToUnicodeMap(cmap = []) {
class ToUnicodeMap {
constructor(cmap = []) {
// The elements of this._map can be integers or strings, depending on how
// `cmap` was created.
this._map = cmap;
}

ToUnicodeMap.prototype = {
get length() {
return this._map.length;
},
get length() {
return this._map.length;
}

forEach(callback) {
for (const charCode in this._map) {
callback(charCode, this._map[charCode].charCodeAt(0));
}
},

has(i) {
return this._map[i] !== undefined;
},

get(i) {
return this._map[i];
},

charCodeOf(value) {
// `Array.prototype.indexOf` is *extremely* inefficient for arrays which
// are both very sparse and very large (see issue8372.pdf).
const map = this._map;
if (map.length <= 0x10000) {
return map.indexOf(value);
}
for (const charCode in map) {
if (map[charCode] === value) {
return charCode | 0;
}
}
return -1;
},
forEach(callback) {
for (const charCode in this._map) {
callback(charCode, this._map[charCode].charCodeAt(0));
}
}

amend(map) {
for (const charCode in map) {
this._map[charCode] = map[charCode];
has(i) {
return this._map[i] !== undefined;
}

get(i) {
return this._map[i];
}

charCodeOf(value) {
// `Array.prototype.indexOf` is *extremely* inefficient for arrays which
// are both very sparse and very large (see issue8372.pdf).
const map = this._map;
if (map.length <= 0x10000) {
return map.indexOf(value);
}
for (const charCode in map) {
if (map[charCode] === value) {
return charCode | 0;
}
},
};
}
return -1;
}

return ToUnicodeMap;
})();
amend(map) {
for (const charCode in map) {
this._map[charCode] = map[charCode];
}
}
}

const IdentityToUnicodeMap = (function IdentityToUnicodeMapClosure() {
// eslint-disable-next-line no-shadow
function IdentityToUnicodeMap(firstChar, lastChar) {
class IdentityToUnicodeMap {
constructor(firstChar, lastChar) {
this.firstChar = firstChar;
this.lastChar = lastChar;
}

IdentityToUnicodeMap.prototype = {
get length() {
return this.lastChar + 1 - this.firstChar;
},
get length() {
return this.lastChar + 1 - this.firstChar;
}

forEach(callback) {
for (let i = this.firstChar, ii = this.lastChar; i <= ii; i++) {
callback(i, i);
}
},
forEach(callback) {
for (let i = this.firstChar, ii = this.lastChar; i <= ii; i++) {
callback(i, i);
}
}

has(i) {
return this.firstChar <= i && i <= this.lastChar;
},
has(i) {
return this.firstChar <= i && i <= this.lastChar;
}

get(i) {
if (this.firstChar <= i && i <= this.lastChar) {
return String.fromCharCode(i);
}
return undefined;
},

charCodeOf(v) {
return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar
? v
: -1;
},

amend(map) {
unreachable("Should not call amend()");
},
};

return IdentityToUnicodeMap;
})();
get(i) {
if (this.firstChar <= i && i <= this.lastChar) {
return String.fromCharCode(i);
}
return undefined;
}

charCodeOf(v) {
return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar
? v
: -1;
}

amend(map) {
unreachable("Should not call amend()");
}
}

export { IdentityToUnicodeMap, ToUnicodeMap };

0 comments on commit 1720411

Please sign in to comment.