« get me outta code hell

data: add additionalNames wiki property ("Additional Names") - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/yaml.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2023-11-20 19:32:03 -0400
committer(quasar) nebula <qznebula@protonmail.com>2023-11-21 07:50:14 -0400
commitbde469f4cede426bd9baa8981b876e82ae290972 (patch)
tree5bd945a7159dca0d050a84f3ea6913e83e9471e2 /src/data/yaml.js
parent765e039ef94f7cd1365ba9f211bd686beab5e8ec (diff)
data: add additionalNames wiki property ("Additional Names")
Diffstat (limited to 'src/data/yaml.js')
-rw-r--r--src/data/yaml.js20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/data/yaml.js b/src/data/yaml.js
index 67cd8db7..cde4413b 100644
--- a/src/data/yaml.js
+++ b/src/data/yaml.js
@@ -436,6 +436,7 @@ export const processTrackSectionDocument = makeProcessDocument(T.TrackSectionHel
 
 export const processTrackDocument = makeProcessDocument(T.Track, {
   fieldTransformations: {
+    'Additional Names': parseAdditionalNames,
     'Duration': parseDuration,
 
     'Date First Released': (value) => new Date(value),
@@ -457,6 +458,7 @@ export const processTrackDocument = makeProcessDocument(T.Track, {
   propertyFieldMapping: {
     name: 'Track',
     directory: 'Directory',
+    additionalNames: 'Additional Names',
     duration: 'Duration',
     color: 'Color',
     urls: 'URLs',
@@ -741,6 +743,24 @@ export function parseContributors(contributionStrings) {
   });
 }
 
+export function parseAdditionalNames(additionalNameStrings) {
+  if (!Array.isArray(additionalNameStrings)) {
+    return additionalNameStrings;
+  }
+
+  return additionalNameStrings.map(additionalNameString => {
+    if (typeof additionalNameString !== 'string') return additionalNameString;
+
+    const match = additionalNameString.match(extractAccentRegex);
+    if (!match) return additionalNameString;
+
+    return {
+      name: match.groups.main,
+      annotation: match.groups.accent ?? null,
+    };
+  });
+}
+
 function parseDimensions(string) {
   // It's technically possible to pass an array like [30, 40] through here.
   // That's not really an issue because if it isn't of the appropriate shape,