From 7705d33067244b31d24620a62b1c5bc463cb9fa0 Mon Sep 17 00:00:00 2001 From: ribber <569894874@qq.com> Date: Tue, 11 Apr 2023 18:51:02 +0800 Subject: [PATCH] support dataview inline field --- src/collecting.ts | 100 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 69 insertions(+), 31 deletions(-) diff --git a/src/collecting.ts b/src/collecting.ts index 0f91aad..3b137f3 100644 --- a/src/collecting.ts +++ b/src/collecting.ts @@ -775,39 +775,76 @@ export function collectDataFromFileMeta( // In form 'key::value', named group 'value' from plugin export function collectDataFromDvField( - content: string, - query: Query, - renderInfo: RenderInfo, - dataMap: DataMap, - xValueMap: XValueMap + content: string, + query: Query, + renderInfo: RenderInfo, + dataMap: DataMap, + xValueMap: XValueMap ): boolean { - let dvTarget = query.getTarget(); - if (query.getParentTarget()) { - dvTarget = query.getParentTarget(); // use parent tag name for multiple values - } - // Dataview ask user to add dashes for spaces as search target - // So a dash may stands for a real dash or a space - dvTarget = dvTarget.replace("-", "[\\s\\-]"); - - // Test this in Regex101 - // remember '\s' includes new line - // (^| |\t)\*{0,2}dvTarget\*{0,2}(::[ |\t]*(?[\d\.\/\-\w,@; \t:]*))(\r?\n|\r|$) - let strRegex = - "(^| |\\t)\\*{0,2}" + - dvTarget + - "\\*{0,2}(::[ |\\t]*(?[\\d\\.\\/\\-,@; \\t:" + - WordCharacters + - "]*))(\\r\\?\\n|\\r|$)"; - // console.log(strRegex); - - return extractDataUsingRegexWithMultipleValues( - content, - strRegex, - query, - dataMap, - xValueMap, - renderInfo + let dvTarget = query.getTarget(); + if (query.getParentTarget()) { + dvTarget = query.getParentTarget(); // use parent tag name for multiple values + } + // Dataview ask user to add dashes for spaces as search target + // So a dash may stands for a real dash or a space + dvTarget = dvTarget.replace("-", "[\\s\\-]"); + + // Test this in Regex101 + // remember '\s' includes new line + // (^| |\t)\*{0,2}dvTarget\*{0,2}(::[ |\t]*(?[\d\.\/\-\w,@; \t:]*))(\r?\n|\r|$) + let strRegex = + "(^| |\\t)\\*{0,2}" + + dvTarget + + "\\*{0,2}(::[ |\\t]*(?[\\d\\.\\/\\-,@; \\t:" + + WordCharacters + + "]*))(\\r\\?\\n|\\r|$)"; + let outline = extractDataUsingRegexWithMultipleValues( + content, + strRegex, + query, + dataMap, + xValueMap, + renderInfo ); + let inline = collectDataFromInlineDvField(content, query, renderInfo, dataMap, xValueMap) + return outline || inline +} + +// In form 'key::value', named group 'value' from plugin +export function collectDataFromInlineDvField( + content: string, + query: Query, + renderInfo: RenderInfo, + dataMap: DataMap, + xValueMap: XValueMap +): boolean { + let dvTarget = query.getTarget(); + if (query.getParentTarget()) { + dvTarget = query.getParentTarget(); // use parent tag name for multiple values + } + // Dataview ask user to add dashes for spaces as search target + // So a dash may stands for a real dash or a space + dvTarget = dvTarget.replace("-", "[\\s\\-]"); + + // Test this in Regex101 + // remember '\s' includes new line + // ^.*?(\[|\()\*{0,2}dvTarget\*{0,2}(::[ |\t]*(?[\d\.\/\-\w,@; \t:]*))(\]|\)).*? + let strRegex = + "^.*?(\\[|\\()\\*{0,2}" + + dvTarget + + "\\*{0,2}(::[ |\\t]*(?[\\d\\.\\/\\-,@; \\t:" + + WordCharacters + + "]*))(\\]|\\)).*?$"; + // console.log(strRegex); + + return extractDataUsingRegexWithMultipleValues( + content, + strRegex, + query, + dataMap, + xValueMap, + renderInfo + ); } // In form 'regex with value', name group 'value' from users @@ -844,3 +881,4 @@ export function collectDataFromTask( renderInfo ); } +