pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
87 lines (86 loc) • 3.6 kB
TypeScript
import { type TextStyleRun } from './parseTaggedText';
import type { ICanvasRenderingContext2D } from '../../../../environment/canvas/ICanvasRenderingContext2D';
import type { TextStyle } from '../../TextStyle';
import type { CanBreakCharsFn, FontMetrics, MeasureTextFn, WordWrapSplitFn } from './types';
/**
* Function type for measuring font metrics.
* @internal
*/
type MeasureFontFn = (font: string) => FontMetrics;
/**
* Result of measuring tagged text.
* @internal
*/
interface TaggedMeasurementResult {
/** Total width including stroke and shadow */
width: number;
/** Total height including shadow */
height: number;
/** Array of line text (for compatibility) */
lines: string[];
/** Per-line widths */
lineWidths: number[];
/** Base line height from style */
lineHeight: number;
/** Maximum line width */
maxLineWidth: number;
/** Font properties from base style */
fontProperties: FontMetrics;
/** Per-line style runs */
runsByLine: TextStyleRun[][];
/** Per-line ascent values */
lineAscents: number[];
/** Per-line descent values */
lineDescents: number[];
/** Per-line heights */
lineHeights: number[];
/** Whether any run has drop shadow */
hasDropShadow: boolean;
}
/**
* Styled token with continuation flag for word wrapping.
* @internal
*/
interface StyledToken {
token: string;
style: TextStyle;
continuesFromPrevious: boolean;
}
/**
* Measures tagged text with multiple styles.
* Handles per-run font measurement and per-line metrics.
* @param text - The tagged text to measure
* @param style - The base text style containing tagStyles
* @param wordWrap - Whether to apply word wrapping
* @param context - The canvas 2D context
* @param measureTextFn - Function to measure text width
* @param measureFontFn - Function to measure font metrics
* @param canBreakCharsFn - Function to check if characters can be broken
* @param wordWrapSplitFn - Function to split words into characters
* @returns TaggedMeasurementResult with all measurement data
* @internal
*/
export declare function measureTaggedText(text: string, style: TextStyle, wordWrap: boolean, context: ICanvasRenderingContext2D, measureTextFn: MeasureTextFn, measureFontFn: MeasureFontFn, canBreakCharsFn: CanBreakCharsFn, wordWrapSplitFn: WordWrapSplitFn): TaggedMeasurementResult;
/**
* Applies word wrapping to tagged text lines.
* Breaks runs at word boundaries while maintaining style information.
* @param runsByLine - Array of run arrays, one per line
* @param style - The base text style
* @param context - The canvas 2D context
* @param measureTextFn - Function to measure text width
* @param canBreakCharsFn - Function to check if characters can be broken
* @param wordWrapSplitFn - Function to split words into characters
* @returns New runsByLine array with word wrap applied
* @internal
*/
export declare function wordWrapTaggedLines(runsByLine: TextStyleRun[][], style: TextStyle, context: ICanvasRenderingContext2D, measureTextFn: MeasureTextFn, canBreakCharsFn: CanBreakCharsFn, wordWrapSplitFn: WordWrapSplitFn): TextStyleRun[][];
/**
* Tokenizes an array of TextStyleRuns into individual styled tokens.
* Each token is a word, space, or newline with its associated style.
* Tracks whether adjacent tokens across run boundaries form a continuous word.
* @param runs - The runs to tokenize
* @returns Array of styled tokens with continuation flags
* @internal
*/
export declare function tokenizeTaggedRuns(runs: TextStyleRun[]): StyledToken[];
export {};