UNPKG

@syncfusion/ej2-pdf

Version:

Feature-rich JavaScript PDF library with built-in support for loading and manipulating PDF document.

348 lines (347 loc) 12 kB
import { Dictionary } from './../../pdf-primitives'; /** * Provides bidirectional visual reordering support for text, including * level-based runs reordering and mirrored glyph shaping for RTL contexts. * * @private */ export declare class _Bidirectional { /** * Stores the reordering indexes computed by the bidi algorithm. * * @private */ _indexes: number[]; /** * Stores the resolved embedding levels for each code point. * * @private */ _indexLevels: number[]; /** * Maps code points to their mirrored counterparts for RTL shaping. * * @private */ _mirroringShape: Dictionary<number, number>; /** * Creates a new instance of the `_Bidirectional` class. * * @private */ constructor(); /** * Applies Unicode symmetric mirroring to characters whose resolved embedding level * is odd, using an internal mirroring map. * * @private * @param {string} text The source text to mirror where required. * @returns {string} The string with mirrored characters applied at odd levels. */ _doMirrorShaping(text: string): string; /** * Computes visual order from logical input using BiDi levels and mirroring, and * returns the visually ordered string. * * @private * @param {string} inputText The original logical-order string. * @param {boolean} isRtl Whether the paragraph base direction is RTL. * @returns {string} The visually ordered (reordered) string. */ _getLogicalToVisualString(inputText: string, isRtl: boolean): string; /** * Initializes the index map to identity based on the * current `_indexLevels` length. * * @private * @returns {void} */ _setDefaultIndexLevel(): void; /** * Reorders indices in the range `[sIndex, eIndex]` according to the BiDi algorithm * by processing embedding levels from maximum to minimum odd levels. * * @private * @param {number} sIndex The start index (inclusive). * @param {number} eIndex The end index (inclusive). * @returns {void} */ _doOrder(sIndex: number, eIndex: number): void; /** * Reverses the `_indexes` segment in the range. * * @private * @param {number} i The inclusive starting index of the segment. * @param {number} j The exclusive ending index of the segment. * @returns {void} */ _reArrange(i: number, j: number): void; /** * Reverses the `_indexes` segment in the range. * * @private * @returns {void} */ _update(): void; } /** * Implements a lightweight Unicode BiDi classifier and visual ordering engine. * It classifies characters into BiDi classes, computes levels, normalizes runs, * and produces per-character embedding levels for visual reordering. * * @private */ export declare class _RtlCharacters { /** * Bidi character types for the input text sequence. * * @private */ _type: number[]; /** * Selected text order for shaping (-1 = auto). * * @private */ _textOrder: number; /** * Length of the input text sequence. * * @private */ _length: number; /** * Resulting visual order index map after processing. * * @private */ _result: number[]; /** * Resolved embedding levels for each input character. * * @private */ _levels: number[]; /** * Table that maps BMP code points to RTL character types. * * @private */ _rtlCharacterTypes: number[]; L: number; lre: number; lro: number; R: number; AL: number; rle: number; rlo: number; pdf: number; EN: number; ES: number; ET: number; AN: number; CS: number; nsm: number; BN: number; B: number; S: number; WS: number; ON: number; /** * Compact range table mapping Unicode intervals to bidi types. * * @private */ _charTypes: number[]; /** * Creates an instance of the 'RtlCharacters' class. * * @private */ constructor(); /** * Produces per-character embedding levels for the input by classifying characters, * resolving paragraph direction, and executing a simplified BiDi pass. * * @private * @param {string} inputText The logical-order text to analyze. * @param {boolean} isRtl When `true`, sets the paragraph base type to LRE; otherwise `L`. * @returns {number[]} A shallow copy of the resolved embedding levels for each character. */ _getVisualOrder(inputText: string, isRtl: boolean): number[]; /** * Maps each character in `text` to its BiDi class using `_rtlCharacterTypes`. * * @private * @param {string} text The input string. * @returns {number[]} The array of BiDi class codes for each character. */ _getCharacterCode(text: string): number[]; /** * Initializes `_levels` to the paragraph base level for all characters. * * @private * @returns {void} */ _setDefaultLevels(): void; /** * Seeds the `_levels` array from default values. * * @private * @returns {void} */ _setLevels(): void; /** * Adjusts levels for the resolved run , incrementing even/odd * runs according to BiDi rules for neutral and number classes. * * @private * @param {number} index The start index of the run. * @param {number} level The current level of the run. * @param {number} length The end index (exclusive) of the run. * @returns {void} */ _updateLevels(index: number, level: number, length: number): void; /** * Executes the main BiDi resolution pass: * - initializes levels, * - removes embeddings/overrides/BN for processing, * - resolves runs and types (EN/AN/AL/neutral handling), * - reapplies embeddings, and fills sentinel levels. * * @private * @returns {void} */ _doVisualOrder(): void; /** * Compacts `_result` and `_levels` by skipping embedding/override/BN codes * and returns the resulting logical length. * * @private * @returns {number} The compacted length excluding embedding/override/BN controls. */ _getEmbeddedCharactersLength(): number; /** * Re-expands the compacted `_result` and `_levels` back to full length, restoring * embedding/override/BN positions and carrying over levels as needed. * * @private * @param {number} length The compacted logical length. * @returns {void} */ _checkEmbeddedCharacters(length: number): void; /** * Normalizes combining marks to inherit the preceding strong type and * starts class resolution by dispatching to digit/Arabic/neutral handlers. * * @private * @param {number} index Start index of the current run. * @param {number} length End index (exclusive) of the current run. * @param {number} level Resolved embedding level of the run. * @param {number} startType The effective type before the run. * @param {number} endType The effective type after the run. * @returns {void} */ _check(index: number, length: number, level: number, startType: number, endType: number): void; /** * Resolves European numbers to Arabic numbers when preceded by `AL`, * per BiDi rules, within the given run. * * @private * @param {number} index Start index of the run. * @param {number} length End index (exclusive) of the run. * @param {number} level Embedding level. * @param {number} startType Type before the run. * @param {number} endType Type after the run. * @returns {void} */ _checkEuropeanDigits(index: number, length: number, level: number, startType: number, endType: number): void; /** * Converts Arabic letters (`AL`) to right-to-left (`R`) within the run. * * @private * @param {number} index Start index of the run. * @param {number} length End index (exclusive) of the run. * @param {number} level Embedding level. * @param {number} startType Type before the run. * @param {number} endType Type after the run. * @returns {void} */ _checkArabicCharacters(index: number, length: number, level: number, startType: number, endType: number): void; /** * Resolves European number separators `ES` and common separators `CS` * to `EN`/`AN` when flanked by matching number classes on both sides. * * @private * @param {number} index Start index of the run. * @param {number} length End index (exclusive) of the run. * @param {number} level Embedding level. * @param {number} startType Type before the run. * @param {number} endType Type after the run. * @returns {void} */ _checkEuropeanNumberSeparator(index: number, length: number, level: number, startType: number, endType: number): void; /** * Normalizes number terminators `ET` by collapsing contiguous ranges and * resolving their type based on surrounding strong/number classes. * * @private * @param {number} index Start index of the run. * @param {number} length End index (exclusive) of the run. * @param {number} level Embedding level. * @param {number} startType Type before the run. * @param {number} endType Type after the run. * @returns {void} */ _checkEuropeanNumberTerminator(index: number, length: number, level: number, startType: number, endType: number): void; /** * Converts remaining `ES`/`ET`/`CS` to `ON` for further resolution. * * @private * @param {number} index Start index of the run. * @param {number} length End index (exclusive) of the run. * @param {number} level Embedding level. * @param {number} startType Type before the run. * @param {number} endType Type after the run. * @returns {void} */ _checkOtherNeutrals(index: number, length: number, level: number, startType: number, endType: number): void; /** * Resolves European numbers `EN` to `L` when preceded by a left-to-right * strong type within the run, per BiDi rules. * * @private * @param {number} index Start index of the run. * @param {number} length End index (exclusive) of the run. * @param {number} level Embedding level. * @param {number} startType Type before the run. * @param {number} endType Type after the run. * @returns {void} */ _checkOtherCharacters(index: number, length: number, level: number, startType: number, endType: number): void; /** * Scans forward from `index` while the current type matches any of `validSet`, * returning the first index not in the set or `length` if none. * * @private * @param {number} index The starting index (inclusive). * @param {number} length The maximum index (exclusive). * @param {number[]} validSet The set of types to consume. * @returns {number} The next index after the consumed range. */ _getLength(index: number, length: number, validSet: number[]): number; /** * Resolves whitespace, neutrals, and separators (`WS`, `ON`, `B`, `S`) by * assigning them the surrounding strong type (or the default based on the level), * per the BiDi resolution steps. * * @private * @param {number} index Start index of the run. * @param {number} length End index (exclusive) of the run. * @param {number} level Embedding level. * @param {number} startType Type before the run. * @param {number} endType Type after the run. * @returns {void} */ _checkCharacters(index: number, length: number, level: number, startType: number, endType: number): void; }