From 57d35a0f9abf6a90970c40af727c8840b8a97f86 Mon Sep 17 00:00:00 2001
From: Vincent Vandemeulebrouck <vincent.vandeme@gmail.com>
Date: Wed, 4 Dec 2024 01:43:23 +0100
Subject: [PATCH] Fix: sorts contenant des apostrophes
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Le caractère utilisé dans le texte n'est pas l'apostrophe simple
informatique (utilisé dans les compendiums), et pas transformé
par toLowerCaseNoAccent...
---
 module/apps/rdd-import-stats.js | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/module/apps/rdd-import-stats.js b/module/apps/rdd-import-stats.js
index db3180c1..262ee156 100644
--- a/module/apps/rdd-import-stats.js
+++ b/module/apps/rdd-import-stats.js
@@ -22,8 +22,8 @@ const compParser = {
   entite: XREGEXP_COMP_CREATURE
 }
 
-const XREGEXP_SORT_VOIE = "[OHNT\\/]+"
-const XREGEXP_SORT_NAME = "(?<name>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-']+)"
+const XREGEXP_SORT_VOIE = "(?<voies>[OHNT](\\/[OHNT])*)"
+const XREGEXP_SORT_NAME = "(?<name>[^\\(]+)"
 const XREGEXP_SORT_CASE = "\\((?<case>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+)\\)";
 
 const XREGEXP_SORT = "(" + XREGEXP_SORT_VOIE
@@ -216,7 +216,7 @@ export class RdDStatBlockParser {
 
 
     if (type == "personnage") {
-      await RdDStatBlockParser.parseHautReve(statString, items);
+      await RdDStatBlockParser.parseHautReve(statString, actorData, items);
       RdDStatBlockParser.parsePersonnage(statString, actorData);
     }
 
@@ -228,7 +228,7 @@ export class RdDStatBlockParser {
     console.log(actorData);
   }
 
-  static async parseHautReve(statString, items) {
+  static async parseHautReve(statString, actorData, items) {
     let hautRevant = false;
     // Attemp to detect spell
     let sorts = await SystemCompendiums.getWorldOrCompendiumItems("sort", "sorts-oniros");
@@ -236,9 +236,10 @@ export class RdDStatBlockParser {
     sorts = sorts.concat(await SystemCompendiums.getWorldOrCompendiumItems("sort", "sorts-narcos"));
     sorts = sorts.concat(await SystemCompendiums.getWorldOrCompendiumItems("sort", "sorts-thanatos"));
 
-    XRegExp.forEach(statString, XRegExp(XREGEXP_SORT, 'giu'),
+    XRegExp.forEach(statString, XRegExp(XREGEXP_SORT, 'gu' /* keep case sensitive to match the spell draconic skill */),
       function (matchSort, i) {
-        let sort = sorts.find(s => Grammar.equalsInsensitive(s.name, matchSort.name));
+        const sortName = Grammar.toLowerCaseNoAccent(matchSort.name).trim().replace("’", "'");
+        let sort = sorts.find(s => Grammar.toLowerCaseNoAccent(s.name) == sortName)
         if (sort) {
           hautRevant = true;
           sort = sort.toObject();
@@ -247,6 +248,10 @@ export class RdDStatBlockParser {
           }
           items.push(sort);
         }
+        else{
+          ui.notifications.warn(`Impossible de trouver le sort ${matchSort.name} / ${sortName}`)
+          console.warn(`Impossible de trouver le sort ${matchSort.name} / ${sortName}`)
+        }
       });
 
     if (hautRevant) {