@@ -632,34 +632,8 @@ export function previewGhostHunkByPosition(text, kind, markdownPos, markdownCont
632632 // We need to find what plain text position corresponds to markdownPos in markdown
633633 const prefixMarkdown = markdownContent . substring ( 0 , markdownPos ) ;
634634
635- // Strip markdown from the prefix - this gives us the plain text before the insert point
636- // We need stripMarkdown here - let's inline a simple version
637- let prefixPlain = prefixMarkdown ;
638- // Remove images:  -> alt
639- prefixPlain = prefixPlain . replace ( / ! \[ ( [ ^ \] ] * ) \] \( [ ^ ) ] * \) / g, '$1' ) ;
640- // Remove links: [text](url) -> text
641- prefixPlain = prefixPlain . replace ( / \[ ( [ ^ \] ] * ) \] \( [ ^ ) ] * \) / g, '$1' ) ;
642- // Remove bold: **text** -> text
643- prefixPlain = prefixPlain . replace ( / \* \* ( [ ^ * ] + ) \* \* / g, '$1' ) ;
644- prefixPlain = prefixPlain . replace ( / _ _ ( [ ^ _ ] + ) _ _ / g, '$1' ) ;
645- // Remove italic (careful not to match list items)
646- prefixPlain = prefixPlain . replace ( / (?< ! [ * _ ] ) \* ( [ ^ * \n ] + ) \* (? ! [ * ] ) / g, '$1' ) ;
647- prefixPlain = prefixPlain . replace ( / (?< ! [ _ * ] ) _ ( [ ^ _ \n ] + ) _ (? ! [ _ ] ) / g, '$1' ) ;
648- // Remove strikethrough
649- prefixPlain = prefixPlain . replace ( / ~ ~ ( [ ^ ~ ] + ) ~ ~ / g, '$1' ) ;
650- // Remove inline code
651- prefixPlain = prefixPlain . replace ( / ` ( [ ^ ` ] + ) ` / g, '$1' ) ;
652- // Remove heading markers
653- prefixPlain = prefixPlain . replace ( / ^ ( # { 1 , 6 } ) \s + / gm, '' ) ;
654- // Remove blockquote markers
655- prefixPlain = prefixPlain . replace ( / ^ > \s * / gm, '' ) ;
656- // Remove horizontal rules
657- prefixPlain = prefixPlain . replace ( / ^ [ - * _ ] { 3 , } \s * $ / gm, '' ) ;
658- // Remove list markers
659- prefixPlain = prefixPlain . replace ( / ^ [ \s ] * [ - * + ] \s + / gm, '' ) ;
660- prefixPlain = prefixPlain . replace ( / ^ [ \s ] * \d + \. \s + / gm, '' ) ;
661- // Normalize newlines
662- prefixPlain = prefixPlain . replace ( / \n { 2 , } / g, '\n' ) ;
635+ // Strip markdown from the prefix to get plain text length
636+ const prefixPlain = stripMarkdown ( prefixMarkdown ) ;
663637
664638 // The plain text offset is the length of the stripped prefix
665639 const plainOffset = prefixPlain . length ;
@@ -674,46 +648,14 @@ export function previewGhostHunkByPosition(text, kind, markdownPos, markdownCont
674648 to = posPm ;
675649 } else if ( kind === 'delete' ) {
676650 // Delete: we need the range of text being deleted
677- // Strip markdown from the delete text to get its plain length
678- let deleteTextPlain = text ;
679- deleteTextPlain = deleteTextPlain . replace ( / ! \[ ( [ ^ \] ] * ) \] \( [ ^ ) ] * \) / g, '$1' ) ;
680- deleteTextPlain = deleteTextPlain . replace ( / \[ ( [ ^ \] ] * ) \] \( [ ^ ) ] * \) / g, '$1' ) ;
681- deleteTextPlain = deleteTextPlain . replace ( / \* \* ( [ ^ * ] + ) \* \* / g, '$1' ) ;
682- deleteTextPlain = deleteTextPlain . replace ( / _ _ ( [ ^ _ ] + ) _ _ / g, '$1' ) ;
683- deleteTextPlain = deleteTextPlain . replace ( / (?< ! [ * _ ] ) \* ( [ ^ * \n ] + ) \* (? ! [ * ] ) / g, '$1' ) ;
684- deleteTextPlain = deleteTextPlain . replace ( / (?< ! [ _ * ] ) _ ( [ ^ _ \n ] + ) _ (? ! [ _ ] ) / g, '$1' ) ;
685- deleteTextPlain = deleteTextPlain . replace ( / ~ ~ ( [ ^ ~ ] + ) ~ ~ / g, '$1' ) ;
686- deleteTextPlain = deleteTextPlain . replace ( / ` ( [ ^ ` ] + ) ` / g, '$1' ) ;
687- deleteTextPlain = deleteTextPlain . replace ( / ^ ( # { 1 , 6 } ) \s + / gm, '' ) ;
688- deleteTextPlain = deleteTextPlain . replace ( / ^ > \s * / gm, '' ) ;
689- deleteTextPlain = deleteTextPlain . replace ( / ^ [ - * _ ] { 3 , } \s * $ / gm, '' ) ;
690- deleteTextPlain = deleteTextPlain . replace ( / ^ [ \s ] * [ - * + ] \s + / gm, '' ) ;
691- deleteTextPlain = deleteTextPlain . replace ( / ^ [ \s ] * \d + \. \s + / gm, '' ) ;
692- deleteTextPlain = deleteTextPlain . replace ( / \n { 2 , } / g, '\n' ) ;
693-
651+ const deleteTextPlain = stripMarkdown ( text ) ;
694652 const fromPm = charToPm ( plainOffset ) ;
695653 const toPm = charToPm ( plainOffset + deleteTextPlain . length ) ;
696654 from = fromPm ;
697655 to = toPm ;
698656 } else if ( kind === 'replace' ) {
699657 // Replace: delete the old text and insert new text at that position
700- const deleteText = deleteTextOrInsertText ;
701- let deleteTextPlain = deleteText || '' ;
702- deleteTextPlain = deleteTextPlain . replace ( / ! \[ ( [ ^ \] ] * ) \] \( [ ^ ) ] * \) / g, '$1' ) ;
703- deleteTextPlain = deleteTextPlain . replace ( / \[ ( [ ^ \] ] * ) \] \( [ ^ ) ] * \) / g, '$1' ) ;
704- deleteTextPlain = deleteTextPlain . replace ( / \* \* ( [ ^ * ] + ) \* \* / g, '$1' ) ;
705- deleteTextPlain = deleteTextPlain . replace ( / _ _ ( [ ^ _ ] + ) _ _ / g, '$1' ) ;
706- deleteTextPlain = deleteTextPlain . replace ( / (?< ! [ * _ ] ) \* ( [ ^ * \n ] + ) \* (? ! [ * ] ) / g, '$1' ) ;
707- deleteTextPlain = deleteTextPlain . replace ( / (?< ! [ _ * ] ) _ ( [ ^ _ \n ] + ) _ (? ! [ _ ] ) / g, '$1' ) ;
708- deleteTextPlain = deleteTextPlain . replace ( / ~ ~ ( [ ^ ~ ] + ) ~ ~ / g, '$1' ) ;
709- deleteTextPlain = deleteTextPlain . replace ( / ` ( [ ^ ` ] + ) ` / g, '$1' ) ;
710- deleteTextPlain = deleteTextPlain . replace ( / ^ ( # { 1 , 6 } ) \s + / gm, '' ) ;
711- deleteTextPlain = deleteTextPlain . replace ( / ^ > \s * / gm, '' ) ;
712- deleteTextPlain = deleteTextPlain . replace ( / ^ [ - * _ ] { 3 , } \s * $ / gm, '' ) ;
713- deleteTextPlain = deleteTextPlain . replace ( / ^ [ \s ] * [ - * + ] \s + / gm, '' ) ;
714- deleteTextPlain = deleteTextPlain . replace ( / ^ [ \s ] * \d + \. \s + / gm, '' ) ;
715- deleteTextPlain = deleteTextPlain . replace ( / \n { 2 , } / g, '\n' ) ;
716-
658+ const deleteTextPlain = stripMarkdown ( deleteTextOrInsertText || '' ) ;
717659 deleteFrom = charToPm ( plainOffset ) ;
718660 deleteTo = charToPm ( plainOffset + deleteTextPlain . length ) ;
719661 }
0 commit comments