@@ -46,6 +46,7 @@ type CommonRule = {
4646 rawInputReplacement ?: Replacement ;
4747 pre ?: ( input : string ) => string ;
4848 post ?: ( input : string ) => string ;
49+ shouldSkipProcessing ?: ( textToCheck : string ) => boolean ;
4950} ;
5051
5152type RuleWithRegex = CommonRule & {
@@ -75,7 +76,6 @@ type TruncateOptions = {
7576
7677const MARKDOWN_LINK_REGEX = new RegExp ( `\\[((?:[^\\[\\]\\r\\n]*(?:\\[[^\\[\\]\\r\\n]*][^\\[\\]\\r\\n]*)*))]\\(${ UrlPatterns . MARKDOWN_URL_REGEX } \\)(?![^<]*(<\\/pre>|<\\/code>))` , 'gi' ) ;
7778const MARKDOWN_IMAGE_REGEX = new RegExp ( `\\!(?:\\[([^\\][]*(?:\\[[^\\][]*][^\\][]*)*)])?\\(${ UrlPatterns . MARKDOWN_URL_REGEX } \\)(?![^<]*(<\\/pre>|<\\/code>))` , 'gi' ) ;
78-
7979const MARKDOWN_VIDEO_REGEX = new RegExp (
8080 `\\!(?:\\[([^\\][]*(?:\\[[^\\][]*][^\\][]*)*)])?\\(((${ UrlPatterns . MARKDOWN_URL_REGEX } )\\.(?:${ Constants . CONST . VIDEO_EXTENSIONS . join ( '|' ) } ))\\)(?![^<]*(<\\/pre>|<\\/code>))` ,
8181 'gi' ,
@@ -213,6 +213,11 @@ export default class ExpensiMark {
213213 const extraAttrs = attrCache && attrCache [ videoSource ] ;
214214 return `<video data-expensify-source="${ Str . sanitizeURL ( videoSource ) } " data-raw-href="${ videoSource } " data-link-variant="${ typeof videoName === 'string' ? 'labeled' : 'auto' } " ${ extraAttrs || '' } >${ videoName ? `${ videoName } ` : '' } </video>` ;
215215 } ,
216+ shouldSkipProcessing : ( textToCheck ) => {
217+ const missingSpecialCharacters = ! textToCheck . includes ( '!' ) || ! textToCheck . includes ( '(' ) || ! textToCheck . includes ( ')' ) ;
218+ const missingVideoExtension = ! Constants . CONST . VIDEO_EXTENSIONS . some ( ( extension ) => textToCheck . includes ( `.${ extension } ` ) ) ;
219+ return missingSpecialCharacters || missingVideoExtension ;
220+ } ,
216221 } ,
217222
218223 /**
@@ -299,6 +304,9 @@ export default class ExpensiMark {
299304 const extraAttrs = attrCache && attrCache [ imgSource ] ;
300305 return `<img src="${ Str . sanitizeURL ( imgSource ) } "${ imgAlt ? ` alt="${ this . escapeAttributeContent ( imgAlt ) } "` : '' } data-raw-href="${ imgSource } " data-link-variant="${ typeof imgAlt === 'string' ? 'labeled' : 'auto' } " ${ extraAttrs || '' } />` ;
301306 } ,
307+ shouldSkipProcessing : ( textToCheck ) => {
308+ return ! textToCheck . includes ( '!' ) || ! textToCheck . includes ( '(' ) || ! textToCheck . includes ( ')' ) ;
309+ } ,
302310 } ,
303311
304312 /**
@@ -321,6 +329,9 @@ export default class ExpensiMark {
321329 }
322330 return `<a href="${ Str . sanitizeURL ( g2 ) } " data-raw-href="${ g2 } " data-link-variant="labeled" target="_blank" rel="noreferrer noopener">${ g1 } </a>` ;
323331 } ,
332+ shouldSkipProcessing : ( textToCheck ) => {
333+ return ! textToCheck . includes ( '.' ) ;
334+ } ,
324335 } ,
325336
326337 /**
@@ -349,7 +360,6 @@ export default class ExpensiMark {
349360 */
350361 {
351362 name : 'reportMentions' ,
352-
353363 regex : / (?< = ^ [ * ~ _ : ] ? | [ \n ] [ * ~ _ : ] ? | [: # ] ) ( # [ \p{ Ll} 0 - 9 - ] { 1 , 99 } ) (? ! [ ^ < ] * (?: < \/ p r e > | < \/ c o d e > | < \/ a > ) ) / gimu,
354364 replacement : '<mention-report>$1</mention-report>' ,
355365 } ,
@@ -416,6 +426,9 @@ export default class ExpensiMark {
416426 const href = Str . sanitizeURL ( g2 ) ;
417427 return `${ g1 } <a href="${ href } " data-raw-href="${ g2 } " data-link-variant="auto" target="_blank" rel="noreferrer noopener">${ g2 } </a>${ g1 } ` ;
418428 } ,
429+ shouldSkipProcessing : ( textToCheck ) => {
430+ return ! textToCheck . includes ( '.' ) ;
431+ } ,
419432 } ,
420433
421434 {
@@ -964,6 +977,11 @@ export default class ExpensiMark {
964977 if ( rule . pre ) {
965978 replacedText = rule . pre ( replacedText ) ;
966979 }
980+
981+ if ( rule . shouldSkipProcessing && rule . shouldSkipProcessing ( replacedText ) ) {
982+ return ;
983+ }
984+
967985 const replacement = shouldKeepRawInput && rule . rawInputReplacement ? rule . rawInputReplacement : rule . replacement ;
968986 if ( 'process' in rule ) {
969987 replacedText = rule . process ( replacedText , replacement , shouldKeepRawInput ) ;
0 commit comments