/** * Unicode Line Breaking Algorithm (UAX #14) * Determines line break opportunities in text */ import type { GlyphInfo } from "../types.ts"; /** * Line break class from UAX #14 */ export declare enum LineBreakClass { BK = 0,// Mandatory Break CR = 1,// Carriage Return LF = 2,// Line Feed CM = 3,// Combining Mark NL = 4,// Next Line SG = 5,// Surrogate (not used) WJ = 6,// Word Joiner ZW = 7,// Zero Width Space GL = 8,// Non-breaking ("Glue") SP = 9,// Space ZWJ = 10,// Zero Width Joiner B2 = 11,// Break Opportunity Before and After BA = 12,// Break After BB = 13,// Break Before HY = 14,// Hyphen CB = 15,// Contingent Break Opportunity CL = 16,// Close Punctuation CP = 17,// Close Parenthesis EX = 18,// Exclamation/Interrogation IN = 19,// Inseparable NS = 20,// Nonstarter OP = 21,// Open Punctuation QU = 22,// Quotation IS = 23,// Infix Numeric Separator NU = 24,// Numeric PO = 25,// Postfix Numeric PR = 26,// Prefix Numeric SY = 27,// Symbols Allowing Break After AI = 28,// Ambiguous (Alphabetic or Ideographic) AL = 29,// Alphabetic CJ = 30,// Conditional Japanese Starter EB = 31,// Emoji Base EM = 32,// Emoji Modifier H2 = 33,// Hangul LV Syllable H3 = 34,// Hangul LVT Syllable HL = 35,// Hebrew Letter ID = 36,// Ideographic JL = 37,// Hangul L Jamo JV = 38,// Hangul V Jamo JT = 39,// Hangul T Jamo RI = 40,// Regional Indicator SA = 41,// Complex Context Dependent (South East Asian) XX = 42 } /** * Break action */ export declare enum BreakAction { Direct = 0,// Direct break opportunity (after space) Indirect = 1,// Indirect break (only if spaces intervene) CombiningIndirect = 2,// Indirect break for combining marks CombiningProhibited = 3,// Prohibited break for combining marks Prohibited = 4,// No break allowed Explicit = 5 } /** * Line break opportunity */ export declare enum BreakOpportunity { NoBreak = 0, Optional = 1, Mandatory = 2 } /** * Get line break class for a codepoint */ export declare function getLineBreakClass(cp: number): LineBreakClass; /** * Result of line break analysis */ export interface LineBreakAnalysis { /** Break opportunities (one per character boundary) */ breaks: BreakOpportunity[]; /** Line break classes for each character */ classes: LineBreakClass[]; } /** * Analyze line break opportunities in text */ export declare function analyzeLineBreaks(text: string): LineBreakAnalysis; /** * Analyze line break opportunities from codepoints */ export declare function analyzeLineBreaksFromCodepoints(codepoints: number[]): LineBreakAnalysis; /** * Analyze line breaks for glyph infos */ export declare function analyzeLineBreaksForGlyphs(infos: GlyphInfo[]): LineBreakAnalysis; /** * Find next line break opportunity */ export declare function findNextBreak(analysis: LineBreakAnalysis, startIndex: number): number; /** * Check if break is allowed at position */ export declare function canBreakAt(analysis: LineBreakAnalysis, index: number): boolean; /** * Check if break is mandatory at position */ export declare function mustBreakAt(analysis: LineBreakAnalysis, index: number): boolean; /** * Get all break opportunities */ export declare function getAllBreakOpportunities(analysis: LineBreakAnalysis): number[];