resolveRelativeLinks function
Replaces relative links (e.g. @:.sibling) with their absolute versions
(e.g. @:a.b.sibling for the anchor a.b)
so that all subsequent steps only deal with absolute links.
Implementation
String resolveRelativeLinks(String raw, String linkAnchor) {
return raw.replaceAllMapped(RegexUtils.linkedRegex, (match) {
final linkedPath = (match.group(1) ?? match.group(2))!;
if (!linkedPath.startsWith('.')) {
// already absolute
return match.group(0)!;
}
final resolved = linkAnchor.isEmpty
? linkedPath.substring(1)
: '$linkAnchor$linkedPath';
return match.group(2) != null ? '@:{$resolved}' : '@:$resolved';
});
}