« get me outta code hell

wiki-data: don't eat <br> in inline links - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2026-03-31 08:00:41 -0300
committer(quasar) nebula <qznebula@protonmail.com>2026-03-31 08:00:41 -0300
commit1f94b922e7e80e958b3fcf0b9d154038a81076af (patch)
treeabe376740779353e52d3491d5c7198aac9907719
parentab8ab50387fa3a129d59f5e4fe7c221b987955d7 (diff)
wiki-data: don't eat <br> in inline links
-rw-r--r--src/common-util/wiki-data.js17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/common-util/wiki-data.js b/src/common-util/wiki-data.js
index 4c7f66f4..4bae0125 100644
--- a/src/common-util/wiki-data.js
+++ b/src/common-util/wiki-data.js
@@ -1,6 +1,6 @@
 // Utility functions for interacting with wiki data.
 
-import {accumulateSum, chunkByConditions, empty, unique} from './sugar.js';
+import {accumulateSum, chunkByConditions, empty, re, unique} from './sugar.js';
 import {sortByDate} from './sort.js';
 
 // This is a duplicate binding of filterMultipleArrays that's included purely
@@ -593,7 +593,20 @@ export function* matchMarkdownLinks(markdownSource, {marked}) {
 }
 
 export function* matchInlineLinks(source) {
-  const plausibleLinkRegexp = /\b[a-z]*:\/\/[^ ]*?(?=(?:[,.!?]*)(?:\s|$))/gm;
+  const plausibleLinkRegexp = re('gmi')`
+    ${/\b[a-z]*:\/\//}
+    ${/.*?/}
+
+    (?=${[
+      // Ordinary in-sentence punctuation doesn't terminate the
+      // un-greedy URL match above, but it shouldn't be counted
+      // as part of the link either, if it's at the end.
+      /(?:[,.!?]*)/,
+
+      // Actual terminators.
+      /(?:\s|$|<br>)/,
+    ]})
+  `;
 
   let plausibleMatch = null;
   while (plausibleMatch = plausibleLinkRegexp.exec(source)) {