| Server IP : 121.121.20.254 / Your IP : 216.73.216.202 Web Server : Microsoft-IIS/10.0 System : Windows NT WEB-SERVER 10.0 build 20348 (Windows Server 2022) AMD64 User : IUSR ( 0) PHP Version : 8.3.28 Disable Function : NONE MySQL : ON | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /Program Files/Microsoft VS Code/ce099c1ed2/resources/app/node_modules/opentype.js/src/ |
Upload File : |
// The Position object provides utility methods to manipulate
// the GPOS position table.
import Layout from './layout';
/**
* @exports opentype.Position
* @class
* @extends opentype.Layout
* @param {opentype.Font}
* @constructor
*/
function Position(font) {
Layout.call(this, font, 'gpos');
}
Position.prototype = Layout.prototype;
/**
* Find a glyph pair in a list of lookup tables of type 2 and retrieve the xAdvance kerning value.
*
* @param {integer} leftIndex - left glyph index
* @param {integer} rightIndex - right glyph index
* @returns {integer}
*/
Position.prototype.getKerningValue = function(kerningLookups, leftIndex, rightIndex) {
for (let i = 0; i < kerningLookups.length; i++) {
const subtables = kerningLookups[i].subtables;
for (let j = 0; j < subtables.length; j++) {
const subtable = subtables[j];
const covIndex = this.getCoverageIndex(subtable.coverage, leftIndex);
if (covIndex < 0) continue;
switch (subtable.posFormat) {
case 1:
// Search Pair Adjustment Positioning Format 1
let pairSet = subtable.pairSets[covIndex];
for (let k = 0; k < pairSet.length; k++) {
let pair = pairSet[k];
if (pair.secondGlyph === rightIndex) {
return pair.value1 && pair.value1.xAdvance || 0;
}
}
break; // left glyph found, not right glyph - try next subtable
case 2:
// Search Pair Adjustment Positioning Format 2
const class1 = this.getGlyphClass(subtable.classDef1, leftIndex);
const class2 = this.getGlyphClass(subtable.classDef2, rightIndex);
const pair = subtable.classRecords[class1][class2];
return pair.value1 && pair.value1.xAdvance || 0;
}
}
}
return 0;
};
/**
* List all kerning lookup tables.
*
* @param {string} [script='DFLT'] - use font.position.getDefaultScriptName() for a better default value
* @param {string} [language='dflt']
* @return {object[]} The list of kerning lookup tables (may be empty), or undefined if there is no GPOS table (and we should use the kern table)
*/
Position.prototype.getKerningTables = function(script, language) {
if (this.font.tables.gpos) {
return this.getLookupTables(script, language, 'kern', 2);
}
};
export default Position;