About Page Update

This commit is contained in:
2025-12-01 17:23:22 +00:00
parent 436e0a5910
commit 9515a8e1b3
6 changed files with 63 additions and 51 deletions

View File

@@ -74,8 +74,9 @@ const textStyles = ['bold', 'dim', 'italic', 'underline', 'strikethrough', 'over
export function parseColorText(text: string, colors: ThemeColorMap = colorMap): TextSegment[] {
const segments: TextSegment[] = [];
// Match both (&specs)content(&) and (&icon, iconName) patterns
const regex = /\(&([^)]+)\)(.*?)\(&\)|\(&icon,\s*([^)]+)\)/g;
// Match (&icon, iconName) patterns FIRST, then (&specs)content(&)
// This prevents (&icon, ...) from being consumed as the start of a color block
const regex = /\(&icon,\s*([^)]+)\)|\(&([^)]+)\)(.*?)\(&\)/g;
let lastIndex = 0;
let match: RegExpExecArray | null;
@@ -84,16 +85,17 @@ export function parseColorText(text: string, colors: ThemeColorMap = colorMap):
segments.push({ text: text.slice(lastIndex, match.index) });
}
// Check if this is an icon match (match[3] is the icon name)
if (match[3]) {
const iconName = match[3].trim();
// Check if this is an icon match (Group 1 is the icon name)
if (match[1]) {
const iconName = match[1].trim();
segments.push({ text: '', icon: iconName });
lastIndex = match.index + match[0].length;
continue;
}
const specs = match[1].split(',').map(s => s.trim().toLowerCase());
const content = match[2];
// Standard text formatting (Group 2 is specs, Group 3 is content)
const specs = match[2].split(',').map(s => s.trim().toLowerCase());
const content = match[3];
const segment: TextSegment = { text: content };
for (const spec of specs) {