Skip to content

Commit a3397eb

Browse files
author
zhuwenq
committed
fix: fix task link parser error
1 parent 808e8b6 commit a3397eb

File tree

2 files changed

+33
-12
lines changed

2 files changed

+33
-12
lines changed

ExampleVault/DailyNote/2023-02-23.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ The color defined in the meta data field should be valid.
1111
- [ ] Github: [Leonezz/obsidian-tasks-calendar-wrapper (github.com)](https://github.com/Leonezz/obsidian-tasks-calendar-wrapper) asd
1212
- [ ] [[2023-02-23]]
1313
- [ ] Inbox: [[Inbox]]
14+
- [ ] Follow up on [[Project Name]] and read the [Website](http://www.website.com/) instead of...
1415

1516
These texts are not of a task item, but as I type them, the views will update automatically because the on-modify event has been connected to the update handler of the plugin.

utils/tasks.ts

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)