to markdown bullets
// (native Feishu list format). \n- creates separate lines in the
// cell — the continuation parser in parseTableRows handles them.
// Inline formatting first (before block elements, to avoid splitting ** markers)
let normalized = cell.replace(/<\/?strong>/gi, "**");
normalized = normalized.replace(/<\/?b>/gi, "**");
normalized = normalized.replace(/<\/?em>/gi, "*");
normalized = normalized.replace(/<\/?i>/gi, "*");
//
→ newline
normalized = normalized.replace(/
]*\/?>/gi, "\n\n");
// Collapse ** followed by newlines into clean paragraph breaks
// This fixes patterns like
→ **\n\n → \n\n
normalized = normalized.replace(/\*{1,2}\n{1,2}\*{1,2}/g, "\n\n");
// Strip leading ** on a line followed by only whitespace/newline
normalized = normalized.replace(/^\*{1,2}\s*$/gm, "");
// Paragraph breaks in table cells
normalized = normalized.replace(/<\/p>\s*/gi, "\n\n");
normalized = normalized.replace(/<\/p>/gi, "");
normalized = normalized.replace(/
/gi, "");
// List items
normalized = normalized.replace(/