import type { Aff, Flag, Flags } from "./index"; /** Base class for the {@link Prefix}/{@link Suffix} classes. Won't work by itself. */ export declare abstract class Affix { /** The {@link Flag} that denotes the "name" for this affix. */ flag: Flag; /** * If true, this affix is allowed to have the opposite form of this * affix, i.e. if a {@link Suffix} would be allowed to have a * {@link Prefix}, and vice versa. */ crossproduct: boolean; /** * What is "stripped" from the stem when this affix is applied. e.g. this * would be `"e"` for the suffix `"or"` (as in `create`, `creator`) */ strip: string; /** * What to add when this affix is applied. e.g. this would be `"or"` in * the transformation needed for `create`, `creator`. */ add: string; /** {@link Flags} this affix has been marked with. */ flags: Flags; /** * `RegExp` tested against a word to determine if this affix is relevant * to said word. This doesn't check if the word *has* this affix, just if * it *can* have this affix. */ conditionRegex: RegExp; /** `RegExp` tested against a word to determine if said word has this affix. */ lookupRegex: RegExp; /** * `RegExp` tested against a word to match the specific section of said * word that would need to be stripped to apply this affix. */ replaceRegex: RegExp; /** * @param flag - {@link Flag} that this affix will be labled with. * @param crossproduct - Sets the {@link Affix.crossproduct} state, with * the string "Y" meaning `true` and everything else meaning `false`. * @param strip - What this affix should strip from a word to be applied. * If given as the string "0", that means not to strip anything. * @param add - What to add to a word when this affix is applied. If * given as the string "0", that means to add nothing. * @param aff - The {@link Aff} data to use when parsing flags. */ constructor(flag: Flag, crossproduct: string, strip: string, add: string, aff: Aff); /** * Determines if a word matches the conditions of this affix. * * @param word - The word to check against this affix's conditions. */ relevant(word: string): boolean; /** * Determines if a word already has this affix applied to it. * * @param word - The word to check for if this affix is already present. */ on(word: string): boolean; /** * Applies this affix to a word, returning the word as a transformed string. * * @param word - The word to apply the transformation to. */ apply(word: string): string; /** * Determines if this affix has the given flag. * * @param flag - The flag to check for. Can be undefined, which will return false. */ has(flag?: Flag): boolean; /** * Determines if this affix is compatible with a set of flags, meaning * that the affix's flags are present in the flag set given. * * @param required - The flags this affix must have. * @param forbidden - An optional set of flags which has the inverse * effect, meaning that this affix's flags *cannot* be found in this set. */ compatible(required: Flags, forbidden?: Flags): boolean; } /** An {@link Affix} that is applied to or found at the beginning of a stem. */ export declare class Prefix extends Affix { /** * @param flag - {@link Flag} that this affix will be labled with. * @param crossproduct - Sets the {@link Affix.crossproduct} state, with * the string "Y" meaning `true` and everything else meaning `false`. * @param strip - What this affix should strip from a word to be applied. * If given as the string "0", that means not to strip anything. * @param add - What to add to a word when this affix is applied. If * given as the string "0", that means to add nothing. * @param condition - A `RegExp` like pattern to check against a word to * see if this affix is relevant. * @param aff - The {@link Aff} data to use when parsing flags. */ constructor(flag: string, crossproduct: string, strip: string, add: string, condition: string, aff: Aff); } /** An {@link Affix} that is applied to or can be found at the end of a stem. */ export declare class Suffix extends Affix { /** * @param flag - {@link Flag} that this affix will be labled with. * @param crossproduct - Sets the {@link Affix.crossproduct} state, with * the string "Y" meaning `true` and everything else meaning `false`. * @param strip - What this affix should strip from a word to be applied. * If given as the string "0", that means not to strip anything. * @param add - What to add to a word when this affix is applied. If * given as the string "0", that means to add nothing. * @param condition - A `RegExp` like pattern to check against a word to * see if this affix is relevant. * @param aff - The {@link Aff} data to use when parsing flags. */ constructor(flag: string, crossproduct: string, strip: string, add: string, condition: string, aff: Aff); }