Spaces:
Running
Running
| /** | |
| * Convert markdown content into a plaintext string suitable for TTS. | |
| * Strips code blocks, images, and excess whitespace. | |
| */ | |
| export function markdownToPlainText(markdown: string): string { | |
| if (!markdown) return ''; | |
| let text = markdown; | |
| // Remove fenced code blocks | |
| text = text.replace(/```[\s\S]*?```/g, ''); | |
| // Remove inline code | |
| text = text.replace(/`([^`]*)`/g, '$1'); | |
| // Remove images:  | |
| text = text.replace(/!\[[^\]]*\]\([^)]+\)/g, ''); | |
| // Replace markdown links with link text | |
| text = text.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1'); | |
| // Strip emphasis markers (**bold**, __bold__, *italics*, _italics_) | |
| text = text.replace(/(\*\*|__)(.*?)\1/g, '$2'); | |
| text = text.replace(/(\*|_)(.*?)\1/g, '$2'); | |
| // Remove stray asterisks/underscores that might remain | |
| text = text.replace(/[*_]+/g, ''); | |
| // Replace headings with emphasized text | |
| text = text.replace(/^(#{1,6})\s*(.*)$/gm, '$2'); | |
| // Replace list markers with dash | |
| text = text.replace(/^\s*[-*+]\s+/gm, '- '); | |
| // Normalize whitespace | |
| text = text.replace(/\s+\n/g, '\n').replace(/\n{3,}/g, '\n\n'); | |
| return text.trim(); | |
| } | |