/**
 * Shared SSML → spoken-text extractor.
 *
 * Strips SSML markup to the words a TTS engine would actually voice, while
 * recording a `rawToSpokenOffsetMap` from raw-SSML character offsets to
 * normalized spoken-text offsets. This is the single source of truth for SSML
 * stripping used by:
 *   - the catalog span aligner (`catalog-span-alignment.ts`),
 *   - the math speech tokenizer (`math-alignment/speech-tokenizer.ts`),
 *   - the runtime generated-speech path (PIE-623).
 *
 * Keeping one implementation guarantees provider word-boundary offsets (which
 * are into the raw SSML string) map to the same spoken text on every path.
 *
 * Tag handling:
 *   - Structural tags (`speak`, `p`, `s`, `emphasis`, `prosody`, `say-as`,
 *     `voice`, `lang`) are transparent; their text content flows through.
 *     `p`/`s` open tags inject a word boundary space.
 *   - `break` injects a space (a pause is a word boundary).
 *   - `sub alias="…"` substitutes the alias text (and skips the original).
 *     `sub` with no alias marks the content unsupported for word tracking.
 *   - Semantic tags that change *what* is spoken without leaving trackable
 *     text (`audio`, `phoneme`) mark the content unsupported.
 *   - Any other unknown element marks the content unsupported (degrade to
 *     coarse region highlighting rather than mis-track).
 */
export interface ExtractedSpokenText {
    spokenText: string;
    rawToSpokenOffsetMap: Map<number, number>;
    unsupportedSemantic: boolean;
    hasMarkup: boolean;
}
export declare const extractSpokenText: (speechText: string) => ExtractedSpokenText;
