resolveRelativeLinks function

String resolveRelativeLinks(
  1. String raw,
  2. String linkAnchor
)

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';
  });
}