astro-ghostcms/.pnpm-store/v3/files/17/e6b07847fda09ef256692d89b5c...

75 lines
2.1 KiB
Plaintext

import { SubstitutionAction } from './featureQuery';
/**
* Apply single substitution format 1
* @param {Array} substitutions substitutions
* @param {any} tokens a list of tokens
* @param {number} index token index
*/
function singleSubstitutionFormat1(action, tokens, index) {
tokens[index].setState(action.tag, action.substitution);
}
/**
* Apply single substitution format 2
* @param {Array} substitutions substitutions
* @param {any} tokens a list of tokens
* @param {number} index token index
*/
function singleSubstitutionFormat2(action, tokens, index) {
tokens[index].setState(action.tag, action.substitution);
}
/**
* Apply chaining context substitution format 3
* @param {Array} substitutions substitutions
* @param {any} tokens a list of tokens
* @param {number} index token index
*/
function chainingSubstitutionFormat3(action, tokens, index) {
action.substitution.forEach((subst, offset) => {
const token = tokens[index + offset];
token.setState(action.tag, subst);
});
}
/**
* Apply ligature substitution format 1
* @param {Array} substitutions substitutions
* @param {any} tokens a list of tokens
* @param {number} index token index
*/
function ligatureSubstitutionFormat1(action, tokens, index) {
let token = tokens[index];
token.setState(action.tag, action.substitution.ligGlyph);
const compsCount = action.substitution.components.length;
for (let i = 0; i < compsCount; i++) {
token = tokens[index + i + 1];
token.setState('deleted', true);
}
}
/**
* Supported substitutions
*/
const SUBSTITUTIONS = {
11: singleSubstitutionFormat1,
12: singleSubstitutionFormat2,
63: chainingSubstitutionFormat3,
41: ligatureSubstitutionFormat1
};
/**
* Apply substitutions to a list of tokens
* @param {Array} substitutions substitutions
* @param {any} tokens a list of tokens
* @param {number} index token index
*/
function applySubstitution(action, tokens, index) {
if (action instanceof SubstitutionAction && SUBSTITUTIONS[action.id]) {
SUBSTITUTIONS[action.id](action, tokens, index);
}
}
export default applySubstitution;