From 17dff4666075dc876564743fe99681f59e68d0ab Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Mon, 10 Aug 2020 16:17:54 +0200 Subject: [PATCH] Remove wikilink duplicate regexp --- lib/core/link.dart | 27 +++++++++++++++++---------- lib/widgets/note_viewer.dart | 23 ++--------------------- 2 files changed, 19 insertions(+), 31 deletions(-) diff --git a/lib/core/link.dart b/lib/core/link.dart index 67ec694e..4a5bc10f 100644 --- a/lib/core/link.dart +++ b/lib/core/link.dart @@ -39,6 +39,14 @@ class LinkExtractor implements md.NodeVisitor { final String tag = el.tag; if (tag == 'a') { + var type = el.attributes['type'] ?? ""; + if (type == "wiki") { + var term = el.attributes['term']; + var link = Link(term: term, filePath: null); + links.add(link); + return; + } + var title = el.attributes['title'] ?? ""; if (title.isEmpty) { for (var child in el.children) { @@ -53,13 +61,6 @@ class LinkExtractor implements md.NodeVisitor { links.add(link); return; } - - if (tag == 'wikiLink') { - var term = el.attributes['term']; - var link = Link(term: term, filePath: null); - links.add(link); - return; - } } List visit(List nodes) { @@ -70,15 +71,21 @@ class LinkExtractor implements md.NodeVisitor { } } +/// Parse [[term]] class WikiLinkSyntax extends md.InlineSyntax { - static final String _pattern = '\\[\\[([^\\[\\]]+)\\]\\]'; + static final String _pattern = r'\[\[([^\[\]]+)\]\]'; WikiLinkSyntax() : super(_pattern); @override bool onMatch(md.InlineParser parser, Match match) { - md.Element el = md.Element.withTag('wikiLink'); - el.attributes['term'] = '${match[1].trim()}'; + var term = match[1].trim(); + + var el = md.Element('a', [md.Text(term)]); + el.attributes['type'] = 'wiki'; + el.attributes['href'] = '[[$term]]'; + el.attributes['term'] = term; + parser.addNode(el); return true; } diff --git a/lib/widgets/note_viewer.dart b/lib/widgets/note_viewer.dart index af8ce95d..b81e0fc4 100644 --- a/lib/widgets/note_viewer.dart +++ b/lib/widgets/note_viewer.dart @@ -10,6 +10,7 @@ import 'package:path/path.dart' as p; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; +import 'package:gitjournal/core/link.dart'; import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/notes_folder_fs.dart'; import 'package:gitjournal/folder_views/common.dart'; @@ -57,7 +58,7 @@ class NoteViewer extends StatelessWidget { // It's important to add both these inline syntaxes before the other // syntaxes as the LinkSyntax intefers with both of these var markdownExtensions = md.ExtensionSet.gitHubFlavored; - markdownExtensions.inlineSyntaxes.insert(0, WikiLinkSyntax2()); + markdownExtensions.inlineSyntaxes.insert(0, WikiLinkSyntax()); markdownExtensions.inlineSyntaxes.insert(1, TaskListSyntax()); final rootFolder = Provider.of(context); @@ -227,23 +228,3 @@ Widget _handleDataSchemeUri(Uri uri, final double width, final double height) { } return const SizedBox(); } - -/// Parse [[term]] -class WikiLinkSyntax2 extends md.InlineSyntax { - static final String _pattern = r'\[\[([^\[\]]+)\]\]'; - - WikiLinkSyntax2() : super(_pattern); - - @override - bool onMatch(md.InlineParser parser, Match match) { - // print("-------- WIKI LINK -------"); - var term = match[1].trim(); - - var el = md.Element('a', [md.Text(term)]); - el.attributes['type'] = 'wiki'; - el.attributes['href'] = '[[$term]]'; - - parser.addNode(el); - return true; - } -}