import "../xregexp-all.js"; import { TextRollManager } from "./text-roll-formatter.js"; const REGEXP_ROLL_FORMULA = "(?[^\\[\\]]+)" const XREGEXP_ROLL_FORMULA = XRegExp("@roll\\[" + REGEXP_ROLL_FORMULA + "\\]", 'giu') /** * classe pour gérer les jets de dés (formules Foundry) */ export class TextRollFormula { get code() { return 'formula' } get template() { return `systems/foundryvtt-reve-de-dragon/templates/apps/textroll/link-text-roll-formula.hbs` } async onReplaceRoll(context) { const handler = new FormulaTextBuilder(context) return await handler.replaceAll() } async onRollText(event, actor) { const node = TextRollManager.getNode(event) const rollFormula = node.data('roll-formula') if (rollFormula) { const roll = new Roll(rollFormula) await roll.evaluate() await roll.toMessage() } } } class FormulaTextBuilder { constructor(context) { this.context = context } async replaceAll() { await XRegExp.forEach(this.context.text, XREGEXP_ROLL_FORMULA, async (rollMatch, i) => await this.replaceMatch(rollMatch, i)) return this.context.text } async replaceMatch(rollMatch, i) { if (rollMatch.formula) { const replacement = await TextRollManager.createRollText(this.context.template, { code: this.context.code, formula: rollMatch.formula, }) this.context.text = this.context.text.replace(rollMatch[0], replacement) } } }