From 57361f8c550b03d5baaa7097835b98ee10c2d4be Mon Sep 17 00:00:00 2001 From: evilchili Date: Fri, 10 Jul 2026 10:45:16 -0700 Subject: [PATCH] wip --- src/ts/ribbit-editor.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/ts/ribbit-editor.ts b/src/ts/ribbit-editor.ts index 428f1e1..0519a1a 100644 --- a/src/ts/ribbit-editor.ts +++ b/src/ts/ribbit-editor.ts @@ -441,8 +441,8 @@ export class RibbitEditor extends Ribbit { } #parseInline(text: string): DocumentFragment { + var t = text; text = disambiguateAsteriskRuns(text); - const classes: Record = { '**': 'md-bold', '*': 'md-italic', @@ -450,10 +450,18 @@ export class RibbitEditor extends Ribbit { '`': 'md-code', }; + // ***bold italic*** + // ***italic* bold** + // **bold *italic*** + // ***bold** italic* x + // *italic **bold*** x + const INLINE_PATTERN = new RegExp( '\\[(?[^\\]]+)\\]\\((?[^)]+)\\)' + '|' + - '(?\\*{3}|\\*{2}|\\*|~~|`)(?.+)(?\\k(?!\\*))', + '(?\\*{2}|\\*|~~|`)' + + '(?[^*].+?)' + + '(?\\k(?!\\*))', 'g' ); @@ -462,7 +470,7 @@ export class RibbitEditor extends Ribbit { let match: RegExpExecArray | null; while ((match = INLINE_PATTERN.exec(text)) !== null) { - console.log(match, match.index, lastIndex); + console.log(`DELIM: ${match.groups!.delimiter} CONTENT: ${match.groups!.content} CLOSER: ${match.groups!.closer}`); if (match.index > lastIndex) { fragment.appendChild(document.createTextNode(text.slice(lastIndex, match.index))); } @@ -475,6 +483,7 @@ export class RibbitEditor extends Ribbit { fragment.appendChild(document.createTextNode(text.slice(lastIndex))); } + console.log(`'${t}' => '${text.replace('\u200C', '|')}`, fragment.children); return fragment; } @@ -821,9 +830,7 @@ export class RibbitEditor extends Ribbit { } #blockToMarkdown(block: HTMLElement): string { - console.log(block); if (!block.textContent!.trim() && block.querySelector('br')) { - console.log(`'${block.textContent}' appears empty, so returning empty string`); return ''; } if (block.dataset.macro) {