diff --git a/module/apps/rdd-import-stats.js b/module/apps/rdd-import-stats.js index 6d710903..8f65c7ee 100644 --- a/module/apps/rdd-import-stats.js +++ b/module/apps/rdd-import-stats.js @@ -226,7 +226,40 @@ export class RdDStatBlockParser { }); dialog.render(true); } + + static fixWeirdPDF(statString) { + // Split the statString into lines + let lines = statString.split("\n"); + let newLines = []; + let index = 0; + let nextType = "string"; + // Loop through each line + for (let i = 0; i < lines.length; i++) { + // remove trailing spaces + lines[i] = lines[i].trim(); + // Is it text ? + if (lines[i].match(/^[a-zA-Zéêè\s]+/)) { + if ( nextType == "string" ) { + newLines[index] = lines[i]; + nextType = "number"; + } else { + console.log("Wrong sequence string detected...", lines[i], nextType); + } + } + // Is it a number ? + if (lines[i].match(/^[\d\s]+/)) { + if ( nextType == "number" ) { + newLines[index] = newLines[index] + lines[i]; + nextType = "string"; + index++; + } else { + console.log("Wrong sequence number detected...", lines[i], nextType); + } + } + } + } + static async parseStatBlock(statString, type = "npc") { //statString = statBlock03; @@ -234,6 +267,9 @@ export class RdDStatBlockParser { return; } + // Special function to fix strange/weird copy/paste from PDF readers + // Unused up to now : this.fixWeirdPDF(statString); + // Replace all endline by space in the statString statString = statString.replace(/\n/g, " "); // Remove all multiple spaces @@ -300,7 +336,7 @@ export class RdDStatBlockParser { comp.system.iscombat = true; } items.push(comp); // Only selective push - } + } } if (actorType == "personnage") { items.push(comp); // Always push @@ -311,6 +347,7 @@ export class RdDStatBlockParser { const weapons = await SystemCompendiums.getWorldOrCompendiumItems("arme", "equipement") //console.log("Equipement : ", equipment); for (let w of weapons) { + let weapon = XRegExp.exec(statString.toLowerCase(), XRegExp(w.name.toLowerCase()+"\\s+(?\\+\\d+)", 'gi')); if (weapon) { w.system.equipe = true @@ -377,7 +414,7 @@ export class RdDStatBlockParser { let name if (actorType == "personnage") { name = XRegExp.exec(statString.toLowerCase(), XRegExp("(?[\\w\\s\\d]+),", 'gi')); - if (!name.value) { + if (!name?.value) { name = XRegExp.exec(statString.toLowerCase(), XRegExp("(?.+)\\s+taille", 'gi')); } name = name?.value || "Importé";