@@ -376,12 +376,18 @@ export namespace TaskMapable {
376376 return item ;
377377 }
378378 }
379-
379+ /**
380+ * !! NEED improvement
381+ * @param item
382+ * @returns
383+ */
380384 export function taskLinkParser ( item : TaskDataModel ) {
381385
382386 item . outlinks = [ ] ;
383387
384388 var outerLinkMatch = TaskRegularExpressions . outerLinkRegex . exec ( item . visual ! ) ;
389+ var innerLinkMatch = TaskRegularExpressions . innerLinkRegex . exec ( item . visual ! ) ;
390+ var dataviewDateMatch = TaskRegularExpressions . keyValueRegex . exec ( item . visual ! ) ;
385391
386392 const buildLink = ( text : string , display : string , path : string , index : number , inner : boolean ) => {
387393 item . visual = item . visual ! . replace ( text , display ) ;
@@ -393,17 +399,31 @@ export namespace TaskMapable {
393399 item . outlinks . push ( link ) ;
394400 } ;
395401
396- while ( ! ! outerLinkMatch ) {
397- buildLink ( outerLinkMatch [ 0 ] , outerLinkMatch [ 1 ] , outerLinkMatch [ 2 ] , outerLinkMatch . index , false ) ;
398- outerLinkMatch = TaskRegularExpressions . outerLinkRegex . exec ( item . visual ! ) ;
399- }
400-
401- var innerLinkMatch = TaskRegularExpressions . innerLinkRegex . exec ( item . visual ! ) ;
402- var dataviewDateMatch = TaskRegularExpressions . keyValueRegex . exec ( item . visual ! ) ;
403- while ( ! ! innerLinkMatch && ! dataviewDateMatch ) {
404- buildLink ( innerLinkMatch [ 0 ] , innerLinkMatch [ 1 ] , innerLinkMatch [ 1 ] , innerLinkMatch [ 'index' ] , true ) ;
405- innerLinkMatch = TaskRegularExpressions . innerLinkRegex . exec ( item . visual ! ) ;
406- dataviewDateMatch = TaskRegularExpressions . keyValueRegex . exec ( item . visual ! ) ;
402+ while ( ! ! outerLinkMatch || ( ! ! innerLinkMatch && ! dataviewDateMatch ) ) {
403+ if ( ! ! outerLinkMatch && ( ! ! innerLinkMatch && ! dataviewDateMatch ) ) {
404+ if ( outerLinkMatch . index < innerLinkMatch . index ) {
405+ buildLink ( outerLinkMatch [ 0 ] , outerLinkMatch [ 1 ] , outerLinkMatch [ 2 ] , outerLinkMatch . index , false ) ;
406+ innerLinkMatch = TaskRegularExpressions . innerLinkRegex . exec ( item . visual ! ) ;
407+ dataviewDateMatch = TaskRegularExpressions . keyValueRegex . exec ( item . visual ! ) ;
408+ ( ! ! innerLinkMatch && ! dataviewDateMatch ) &&
409+ buildLink ( innerLinkMatch [ 0 ] , innerLinkMatch [ 1 ] , innerLinkMatch [ 1 ] , innerLinkMatch . index , true ) ;
410+ } else {
411+ buildLink ( innerLinkMatch [ 0 ] , innerLinkMatch [ 1 ] , innerLinkMatch [ 1 ] , innerLinkMatch . index , true ) ;
412+ outerLinkMatch = TaskRegularExpressions . outerLinkRegex . exec ( item . visual ! ) ;
413+ ( ! ! outerLinkMatch ) &&
414+ buildLink ( outerLinkMatch [ 0 ] , outerLinkMatch [ 1 ] , outerLinkMatch [ 2 ] , outerLinkMatch . index , false ) ;
415+ }
416+ innerLinkMatch = TaskRegularExpressions . innerLinkRegex . exec ( item . visual ! ) ;
417+ dataviewDateMatch = TaskRegularExpressions . keyValueRegex . exec ( item . visual ! ) ;
418+ outerLinkMatch = TaskRegularExpressions . outerLinkRegex . exec ( item . visual ! ) ;
419+ } else if ( ! ! outerLinkMatch ) {
420+ buildLink ( outerLinkMatch [ 0 ] , outerLinkMatch [ 1 ] , outerLinkMatch [ 2 ] , outerLinkMatch . index , false ) ;
421+ outerLinkMatch = TaskRegularExpressions . outerLinkRegex . exec ( item . visual ! ) ;
422+ } else if ( ! ! innerLinkMatch && ! dataviewDateMatch ) {
423+ buildLink ( innerLinkMatch [ 0 ] , innerLinkMatch [ 1 ] , innerLinkMatch [ 1 ] , innerLinkMatch . index , true ) ;
424+ innerLinkMatch = TaskRegularExpressions . innerLinkRegex . exec ( item . visual ! ) ;
425+ dataviewDateMatch = TaskRegularExpressions . keyValueRegex . exec ( item . visual ! ) ;
426+ }
407427 }
408428
409429 return item ;
0 commit comments