import 'package:markdown/markdown.dart' as md; /// Parses `[[Note Title]]` wikilinks into anchor elements with a custom /// `wikilink://` href, handled by the app's onTapLink callback. class WikilinkSyntax extends md.InlineSyntax { WikilinkSyntax() : super(r'\[\[([^\[\]\n]+)\]\]'); @override bool onMatch(md.InlineParser parser, Match match) { final title = match[1]!.trim(); if (title.isEmpty) return false; final anchor = md.Element.text('a', title); anchor.attributes['href'] = 'wikilink://${Uri.encodeComponent(title)}'; parser.addNode(anchor); return true; } } /// GitHub-flavored markdown extended with [[wikilink]] support. /// Use this as the extensionSet wherever note bodies are rendered. final wikilinkExtensionSet = md.ExtensionSet( md.ExtensionSet.gitHubFlavored.blockSyntaxes, [WikilinkSyntax(), ...md.ExtensionSet.gitHubFlavored.inlineSyntaxes], );