From 9686b6bd353f65cc502ec15fa1e4a51e1a0160f5 Mon Sep 17 00:00:00 2001 From: LeRatierBretonnien Date: Mon, 26 Dec 2022 00:33:13 +0100 Subject: [PATCH] Initial import --- LICENCE.txt | 25 + README.md | 29 + assets/fonts/CentaurMT.otf | Bin 0 -> 29864 bytes assets/fonts/Chaparral Pro Regular.ttf | Bin 0 -> 115724 bytes assets/fonts/CharlemagneStd-Bold.otf | Bin 0 -> 36776 bytes assets/ui/pc_sheet_bg.webp | Bin 0 -> 135430 bytes lang/fr.json | 31 + modules/heritiers-actor-sheet.js | 195 + modules/heritiers-actor.js | 629 ++ modules/heritiers-combat.js | 25 + modules/heritiers-commands.js | 123 + modules/heritiers-config.js | 13 + modules/heritiers-creature-sheet.js | 26 + modules/heritiers-hud.js | 71 + modules/heritiers-item-sheet.js | 227 + modules/heritiers-item.js | 31 + modules/heritiers-main.js | 150 + modules/heritiers-roll-dialog.js | 80 + modules/heritiers-utility.js | 674 ++ modules/xregexp-all.js | 8225 +++++++++++++++++++++++ styles/simple.css | 1452 ++++ system.json | 56 + template.json | 330 + templates/actor-sheet.html | 561 ++ templates/chat-degats-result.html | 28 + templates/chat-generic-result.html | 84 + templates/creature-sheet.html | 356 + templates/editor-notes-gm.html | 6 + templates/hud-adversites.html | 48 + templates/item-arme-sheet.html | 89 + templates/item-artefact-sheet.html | 117 + templates/item-competence-sheet.html | 91 + templates/item-contact-sheet.html | 45 + templates/item-equipement-sheet.html | 22 + templates/item-historique-sheet.html | 24 + templates/item-monnaie-sheet.html | 34 + templates/item-profil-sheet.html | 119 + templates/item-protection-sheet.html | 30 + templates/item-ressource-sheet.html | 26 + templates/item-talent-sheet.html | 68 + templates/partial-actor-equipment.html | 23 + templates/partial-automation.html | 81 + templates/partial-item-description.html | 5 + templates/partial-item-header.html | 8 + templates/partial-item-nav.html | 5 + templates/partial-item-prix.html | 33 + templates/partial-list-niveau.html | 11 + templates/partial-sante-etat.html | 6 + templates/post-item.html | 8 + templates/roll-dialog-generic.html | 112 + 50 files changed, 14432 insertions(+) create mode 100644 LICENCE.txt create mode 100644 README.md create mode 100644 assets/fonts/CentaurMT.otf create mode 100644 assets/fonts/Chaparral Pro Regular.ttf create mode 100644 assets/fonts/CharlemagneStd-Bold.otf create mode 100644 assets/ui/pc_sheet_bg.webp create mode 100644 lang/fr.json create mode 100644 modules/heritiers-actor-sheet.js create mode 100644 modules/heritiers-actor.js create mode 100644 modules/heritiers-combat.js create mode 100644 modules/heritiers-commands.js create mode 100644 modules/heritiers-config.js create mode 100644 modules/heritiers-creature-sheet.js create mode 100644 modules/heritiers-hud.js create mode 100644 modules/heritiers-item-sheet.js create mode 100644 modules/heritiers-item.js create mode 100644 modules/heritiers-main.js create mode 100644 modules/heritiers-roll-dialog.js create mode 100644 modules/heritiers-utility.js create mode 100644 modules/xregexp-all.js create mode 100644 styles/simple.css create mode 100644 system.json create mode 100644 template.json create mode 100644 templates/actor-sheet.html create mode 100644 templates/chat-degats-result.html create mode 100644 templates/chat-generic-result.html create mode 100644 templates/creature-sheet.html create mode 100644 templates/editor-notes-gm.html create mode 100644 templates/hud-adversites.html create mode 100644 templates/item-arme-sheet.html create mode 100644 templates/item-artefact-sheet.html create mode 100644 templates/item-competence-sheet.html create mode 100644 templates/item-contact-sheet.html create mode 100644 templates/item-equipement-sheet.html create mode 100644 templates/item-historique-sheet.html create mode 100644 templates/item-monnaie-sheet.html create mode 100644 templates/item-profil-sheet.html create mode 100644 templates/item-protection-sheet.html create mode 100644 templates/item-ressource-sheet.html create mode 100644 templates/item-talent-sheet.html create mode 100644 templates/partial-actor-equipment.html create mode 100644 templates/partial-automation.html create mode 100644 templates/partial-item-description.html create mode 100644 templates/partial-item-header.html create mode 100644 templates/partial-item-nav.html create mode 100644 templates/partial-item-prix.html create mode 100644 templates/partial-list-niveau.html create mode 100644 templates/partial-sante-etat.html create mode 100644 templates/post-item.html create mode 100644 templates/roll-dialog-generic.html diff --git a/LICENCE.txt b/LICENCE.txt new file mode 100644 index 0000000..6832e08 --- /dev/null +++ b/LICENCE.txt @@ -0,0 +1,25 @@ +MIT License + +Copyright (c) 2022 Uberwald/LeRatierBretonnien + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +This license does not apply to the compendium content listed in this software's +"packs" directory. See the README for licensing information for the compendium +packs. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..9ab3dcc --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +# Système Foundry pour Hawkmoon (French RPG, Titam France/Sombres Projets) + +## EN + +Unofficial system for Hawkmoon (French version from Titam France). + +This system has been approved by Département des Sombres Projets ( http://www.titam-france.fr/ ), thanks ! + +Books are mandatory to play and are available at : http://www.titam-france.fr + +## FR + +Système non-officiel pour le JDR Hawkmoon (Titam France/Sombres Projets). + +Ce système a été autorisé par le Département des Sombres Projets ( http://www.titam-france.fr/ ), merci à eux ! + +Les livres du jeu sont nécessaires pour jouer, et sont disponibles ici : http://www.titam-france.fr + +# Credits + +Hawkmoon, le jeu de rôle du Troisième Millénaire, is a property of Titam France/Sombres Projets. + +# Developmement + +LeRatierBretonnien + +# Tests, icones et saisie des données + +Prêtre, Blondin, Zechrub/Chris, Kyllian, Lightbringer diff --git a/assets/fonts/CentaurMT.otf b/assets/fonts/CentaurMT.otf new file mode 100644 index 0000000000000000000000000000000000000000..9e5e7c1e81681a6b43eef7ab5263d2c21ec4ba78 GIT binary patch literal 29864 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 z

7%K7f(H8wELxhE&INo&YbL2ZQt`KzCrq05b-dC8%LL%G!<^wgaOC7$vAxyC7|x z%My(BmOuCj`uKyVz)z0SSEKaktpLM1YmloMTH6JzO~^SBxo!gQkHPy4q}TRD4$Y|1 zLDZ%iwb=z(oPqS(1WkaypowR2m(IyLvrxu#Xrm3<5b9d?7ikSc4I?{^+yvlF0=&uf z|I^-OMv{|5e8!!j=^E$U7-*j#ve(wP^0R)L&1P?)?f@SSPF0FXlil?ox z3qejYXd<|CD#~#Zxo^rp$59YV2<$Fxsabwi!|hQ33;WVb(V26kv0cyW-hLK zK-UBiICtgOr!x-y#LsvVhbM73!)GoeIuCkW(D}$`XE%^@J2xIVOasiplesAEJlO97 z{JxFf-7s=~!%g*JfDZZ>xP0@3%VYFR0`(h6p8?4UPv!#_;TjK=TNxZKzi} zYS4kFU%(b0`E2hlFz))E2)PKUuo7^TA?IN5RN+jkX8;rMdm^|_!u1Wn6pS&`aGj3Q zz6B6UKLge>6STANdp2MWDCZ(=0YH$q2>E=2zA6Z|D)f|*_%#7Fp9m263Or^4&LjOI z;5tC)SC0bwD6sDX`!2BW0{bp>Cs5o4#ofR3tKuhEUjXY1V0-~SU-)wU5PUxL$-OIA zp^t`sQD>o_{;SL<_~a?H{6AVO&Od?-g}yTbmj3@AUH&?W*P+!ch`*VXZTNum@@g09Rj2q64;6`G$J_@*FxUo1d zD-uWHP2eWt$h_BKt#9Jo%&D;H>Ck%=bUq7*>CNTlar2?)g}!sOgwwx{<4iB%6tC+X F_rK*R5jFq- literal 0 HcmV?d00001 diff --git a/assets/fonts/Chaparral Pro Regular.ttf b/assets/fonts/Chaparral Pro Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a6bf4b711254f1f73ee3da244c607006d8548bef GIT binary patch literal 115724 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%0AkBQfZich`KMI_$Yu4a|os$M97KFwQcpvB;1_=^C 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 v7CH82xd`Ip7@_ literal 0 HcmV?d00001 diff --git a/assets/ui/pc_sheet_bg.webp b/assets/ui/pc_sheet_bg.webp new file mode 100644 index 0000000000000000000000000000000000000000..60a9f6e9e37b2c68af4508e5007230931f45989e GIT binary patch literal 135430 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�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∨)zhB{w^pNgm7ZO;8PKy; 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 z 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

nuoGY(@IG$|V==s|DC_;mqG-EW;%Y7%*`K%L$8 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 SP|k$AQ6->Y)IUH2!2kfVx1EUq literal 0 HcmV?d00001 diff --git a/lang/fr.json b/lang/fr.json new file mode 100644 index 0000000..450963c --- /dev/null +++ b/lang/fr.json @@ -0,0 +1,31 @@ +{ + "ACTOR": { + "TypePersonnage": "Personnage", + "TypeCellule": "Cellule", + "TypeCreature": "Créature" + }, + + "ITEM": { + "TypeArtefact": "Artefact", + "TypeArme": "Arme", + "TypeTalent": "Talent", + "TypeHistorique": "Historique", + "TypeProfil": "Profil", + "TypeCompetence": "Compétence", + "TypeProtection": "Protection", + "TypeMonnaie": "Monnaie", + "TypeEquipement": "Equipement", + "TypeRessource": "Ressource", + "TypeContact": "Contact" + + }, + + "HAWKMOON": { + "ui": { + "editContact": "Modifier le contact", + "deleteContact": "Supprimer le contact", + "editTrait": "Modifier le trait", + "deleteTrait": "Supprimer le trait" + } + } +} \ No newline at end of file diff --git a/modules/heritiers-actor-sheet.js b/modules/heritiers-actor-sheet.js new file mode 100644 index 0000000..a7f60fb --- /dev/null +++ b/modules/heritiers-actor-sheet.js @@ -0,0 +1,195 @@ +/** + * Extend the basic ActorSheet with some very simple modifications + * @extends {ActorSheet} + */ + +import { HeritiersUtility } from "./heritiers-utility.js"; +import { HeritiersAutomation } from "./heritiers-automation.js"; + +/* -------------------------------------------- */ +export class HeritiersActorSheet extends ActorSheet { + + /** @override */ + static get defaultOptions() { + + return mergeObject(super.defaultOptions, { + classes: ["fvtt-les-heritiers", "sheet", "actor"], + template: "systems/fvtt-les-heritiers/templates/actor-sheet.html", + width: 640, + height: 720, + tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }], + dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }], + editScore: false + }) + } + + /* -------------------------------------------- */ + async getData() { + const objectData = duplicate(this.object) + + let formData = { + title: this.title, + id: objectData.id, + type: objectData.type, + img: objectData.img, + name: objectData.name, + editable: this.isEditable, + cssClass: this.isEditable ? "editable" : "locked", + system: objectData.system, + effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)), + limited: this.object.limited, + skills: this.actor.getSkills(), + armes: duplicate(this.actor.getWeapons()), + monnaies: duplicate(this.actor.getMonnaies()), + protections: duplicate(this.actor.getArmors()), + historiques: duplicate(this.actor.getHistoriques() || []), + talents: duplicate(this.actor.getTalents() || []), + talentsCell: this.getCelluleTalents(), + profils: duplicate(this.actor.getProfils() || []), + combat: this.actor.getCombatValues(), + equipements: duplicate(this.actor.getEquipments()), + artefacts: duplicate(this.actor.getArtefacts()), + monnaies: duplicate(this.actor.getMonnaies()), + richesse: this.actor.computeRichesse(), + valeurEquipement: this.actor.computeValeurEquipement(), + initiative: this.actor.getFlag("world", "last-initiative") || -1, + description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}), + habitat: await TextEditor.enrichHTML(this.object.system.biodata.habitat, {async: true}), + options: this.options, + owner: this.document.isOwner, + editScore: this.options.editScore, + isGM: game.user.isGM + } + this.formData = formData; + + console.log("PC : ", formData, this.object); + return formData; + } + + /* -------------------------------------------- */ + getCelluleTalents( ) { + let talents = [] + for(let cellule of game.actors) { + if (cellule.type == "cellule") { + let found = cellule.system.members.find( it => it.id == this.actor.id) + if (found) { + talents = talents.concat( cellule.getTalents() ) + } + } + } + return talents + } + + /* -------------------------------------------- */ + /** @override */ + activateListeners(html) { + super.activateListeners(html); + + // Everything below here is only needed if the sheet is editable + if (!this.options.editable) return; + + // Update Inventory Item + html.find('.item-edit').click(ev => { + const li = $(ev.currentTarget).parents(".item") + let itemId = li.data("item-id") + const item = this.actor.items.get( itemId ) + item.sheet.render(true) + }) + // Delete Inventory Item + html.find('.item-delete').click(ev => { + const li = $(ev.currentTarget).parents(".item"); + HeritiersUtility.confirmDelete(this, li); + }) + html.find('.edit-item-data').change(ev => { + const li = $(ev.currentTarget).parents(".item") + let itemId = li.data("item-id") + let itemType = li.data("item-type") + let itemField = $(ev.currentTarget).data("item-field") + let dataType = $(ev.currentTarget).data("dtype") + let value = ev.currentTarget.value + this.actor.editItemField(itemId, itemType, itemField, dataType, value) + }) + + html.find('.adversite-modify').click(event => { + const li = $(event.currentTarget).parents(".item") + let adv = li.data("adversite") + let value = Number($(event.currentTarget).data("adversite-value")) + this.actor.incDecAdversite(adv, value) + }) + + html.find('.quantity-modify').click(event => { + const li = $(event.currentTarget).parents(".item") + const value = Number($(event.currentTarget).data("quantite-value")) + this.actor.incDecQuantity( li.data("item-id"), value ); + }) + + html.find('.roll-initiative').click((event) => { + this.actor.rollAttribut("pre", true) + }) + + html.find('.roll-attribut').click((event) => { + const li = $(event.currentTarget).parents(".item") + let attrKey = li.data("attr-key") + this.actor.rollAttribut(attrKey, false) + }) + html.find('.roll-competence').click((event) => { + const li = $(event.currentTarget).parents(".item") + let attrKey = $(event.currentTarget).data("attr-key") + let compId = li.data("item-id") + this.actor.rollCompetence(attrKey, compId) + }) + html.find('.roll-arme-offensif').click((event) => { + const li = $(event.currentTarget).parents(".item") + let armeId = li.data("item-id") + this.actor.rollArmeOffensif(armeId) + }) + html.find('.roll-arme-degats').click((event) => { + const li = $(event.currentTarget).parents(".item") + let armeId = li.data("item-id") + this.actor.rollArmeDegats(armeId) + }) + + html.find('.item-add').click((event) => { + const itemType = $(event.currentTarget).data("type") + this.actor.createEmbeddedDocuments('Item', [{ name: `Nouveau ${itemType}`, type: itemType }], { renderSheet: true }) + }) + + html.find('.lock-unlock-sheet').click((event) => { + this.options.editScore = !this.options.editScore; + this.render(true); + }); + html.find('.item-equip').click(ev => { + const li = $(ev.currentTarget).parents(".item"); + this.actor.equipItem( li.data("item-id") ); + this.render(true); + }); + + } + + /* -------------------------------------------- */ + /** @override */ + setPosition(options = {}) { + const position = super.setPosition(options); + const sheetBody = this.element.find(".sheet-body"); + const bodyHeight = position.height - 192; + sheetBody.css("height", bodyHeight); + return position; + } + + /* -------------------------------------------- */ + async _onDropItem(event, dragData) { + let data = event.dataTransfer.getData('text/plain') + let dataItem = JSON.parse( data) + let item = fromUuidSync(dataItem.uuid) + if (item.pack) { + item = await HeritiersUtility.searchItem(item) + } + let autoresult = HeritiersAutomation.processAutomations("on-drop", item, this.actor) + if ( autoresult.isValid ) { + super._onDropItem(event, dragData) + } else { + ui.notifications.warn( autoresult.warningMessage) + } + } + +} diff --git a/modules/heritiers-actor.js b/modules/heritiers-actor.js new file mode 100644 index 0000000..aea4b69 --- /dev/null +++ b/modules/heritiers-actor.js @@ -0,0 +1,629 @@ +/* -------------------------------------------- */ +import { HeritiersUtility } from "./heritiers-utility.js"; +import { HeritiersRollDialog } from "./heritiers-roll-dialog.js"; + +/* -------------------------------------------- */ +const __degatsBonus = [-2, -2, -1, -1, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 8, 8, 9, 9, 10, 10] +const __vitesseBonus = [-2, -2, -1, -1, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8] + +/* -------------------------------------------- */ +/** + * Extend the base Actor entity by defining a custom roll data structure which is ideal for the Simple system. + * @extends {Actor} + */ +export class HeritiersActor extends Actor { + + /* -------------------------------------------- */ + /** + * Override the create() function to provide additional SoS functionality. + * + * This overrided create() function adds initial items + * Namely: Basic skills, money, + * + * @param {Object} data Barebones actor data which this function adds onto. + * @param {Object} options (Unused) Additional options which customize the creation workflow. + * + */ + + static async create(data, options) { + + // Case of compendium global import + if (data instanceof Array) { + return super.create(data, options); + } + // If the created actor has items (only applicable to duplicated actors) bypass the new actor creation logic + if (data.items) { + let actor = super.create(data, options); + return actor; + } + + if (data.type == 'personnage') { + const skills = await HeritiersUtility.loadCompendium("fvtt-les-heritiers.skills") + data.items = skills.map(i => i.toObject()) + } + if (data.type == 'creature') { + const skills = await HeritiersUtility.loadCompendium("fvtt-les-heritiers.skills-creatures") + data.items = skills.map(i => i.toObject()) + data.items.push( { name: "Arme naturelle 1", type: 'arme', img: "systems/fvtt-les-heritiers/assets/icons/melee.webp", system: { typearme: "contact", bonusmaniementoff: 0, seuildefense: 0, degats: "0"} } ) + data.items.push( { name: "Arme naturelle 2", type: 'arme', img: "systems/fvtt-les-heritiers/assets/icons/melee.webp", system: { typearme: "contact", bonusmaniementoff: 0, seuildefense: 0, degats: "0"} } ) + } + + return super.create(data, options); + } + + /* -------------------------------------------- */ + getBonusDefenseFromTalents() { + let talents = this.items.filter(item => item.type == "talent" && item.system.isautomated) + let bonus = 0 + for (let talent of talents) { + for (let auto of talent.system.automations) { + if (auto.eventtype == "bonus-permanent" && auto.bonusname == "bonus-defensif") { + bonus += Number(auto.bonus || 0) + } + } + } + return bonus + } + + /* -------------------------------------------- */ + prepareArme(arme) { + arme = duplicate(arme) + let combat = this.getCombatValues() + if (arme.system.typearme == "contact" || arme.system.typearme == "contactjet") { + let bonusDefense = this.getBonusDefenseFromTalents() + arme.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée") ) + arme.system.attrKey = "pui" + arme.system.totalDegats = arme.system.degats + "+" + combat.bonusDegatsTotal + arme.system.totalOffensif = this.system.attributs.pui.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff + arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.seuildefense + bonusDefense + arme.system.isdefense = true + } + if (arme.system.typearme == "jet" || arme.system.typearme == "tir") { + arme.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance")) + arme.system.attrKey = "adr" + arme.system.totalOffensif = this.system.attributs.adr.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff + arme.system.totalDegats = arme.system.degats + if (arme.system.isdefense) { + arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.seuildefense + } + } + return arme + } + + /* -------------------------------------------- */ + getWeapons() { + let armes = [] + for (let arme of this.items) { + if (arme.type == "arme") { + armes.push(this.prepareArme(arme)) + } + } + return armes + } + /* -------------------------------------------- */ + getMonnaies() { + return this.items.filter( it => it.type == "monnaie") + } + + /* ----------------------- --------------------- */ + addMember( actorId) { + let members = duplicate(this.system.members) + members.push( {id: actorId} ) + this.update ({'system.members': members}) + } + async removeMember(actorId) { + let members = this.system.members.filter(it => it.id != actorId ) + this.update ({'system.members': members}) + } + + /* ----------------------- --------------------- */ + getEquipments() { + return this.items.filter(item => item.type == "equipement") + } + /* ----------------------- --------------------- */ + getArtefacts() { + return this.items.filter(item => item.type == "artefact") + } + /* ----------------------- --------------------- */ + getMonnaies() { + return this.items.filter(item => item.type == "monnaie") + } + /* -------------------------------------------- */ + getArmors() { + return this.items.filter(item => item.type == "protection") + } + getHistoriques() { + return this.items.filter(item => item.type == "historique") + } + getProfils() { + return this.items.filter(item => item.type == "profil") + } + getTalents() { + return this.items.filter(item => item.type == "talent") + } + getRessources() { + return this.items.filter(item => item.type == "ressource") + } + getContacts() { + return this.items.filter(item => item.type == "contact") + } + /* -------------------------------------------- */ + getSkills() { + let comp = [] + for (let item of this.items) { + item = duplicate(item) + if (item.type == "competence") { + item.system.attribut1total = item.system.niveau + (this.system.attributs[item.system.attribut1]?.value || 0) + item.system.attribut2total = item.system.niveau + (this.system.attributs[item.system.attribut2]?.value || 0) + item.system.attribut3total = item.system.niveau + (this.system.attributs[item.system.attribut3]?.value || 0) + if (item.system.niveau == 0) { + item.system.attribut1total -= 3 + item.system.attribut2total -= 3 + item.system.attribut3total -= 3 + } + item.system.attribut1label = this.system.attributs[item.system.attribut1]?.label || "" + item.system.attribut2label = this.system.attributs[item.system.attribut2]?.label || "" + item.system.attribut3label = this.system.attributs[item.system.attribut3]?.label || "" + comp.push(item) + } + } + return comp.sort(function (a, b) { + let fa = a.name.toLowerCase(), + fb = b.name.toLowerCase(); + if (fa < fb) { + return -1; + } + if (fa > fb) { + return 1; + } + return 0; + }) + } + + /* -------------------------------------------- */ + getDefenseBase() { + return Math.max(this.system.attributs.tre.value, this.system.attributs.pui.value) + } + + /* -------------------------------------------- */ + getVitesseBase() { + return 5 + __vitesseBonus[this.system.attributs.adr.value] + } + /* -------------------------------------------- */ + getProtection() { + let equipProtection = 0 + for(let armor in this.items) { + if (armor.type == "protection" && armor.system.equipped) { + equipProtection += Number(armor.system.protection) + } + } + if (equipProtection < 4) { + return 4 + equipProtection // Cas des boucliers + sans armure + } + return equipProtection // Uniquement la protection des armures + boucliers + } + + /* -------------------------------------------- */ + getCombatValues() { + let combat = { + initBase: this.system.attributs.adr.value, + initTotal: this.system.attributs.adr.value + this.system.combat.initbonus, + bonusDegats: this.getBonusDegats(), + bonusDegatsTotal: this.getBonusDegats() + this.system.combat.bonusdegats, + vitesseBase: this.getVitesseBase(), + vitesseTotal: this.getVitesseBase() + this.system.combat.vitessebonus, + defenseBase: this.getDefenseBase(), + protection : this.getProtection(), + defenseTotal: this.getDefenseBase() + this.system.combat.defensebonus + this.getProtection() - this.getTotalAdversite() + } + return combat + } + + /* -------------------------------------------- */ + prepareBaseData() { + } + + /* -------------------------------------------- */ + async prepareData() { + super.prepareData(); + } + + /* -------------------------------------------- */ + prepareDerivedData() { + + if (this.type == 'personnage') { + let talentBonus = this.getVigueurBonus() + let vigueur = Math.floor((this.system.attributs.pui.value + this.system.attributs.tre.value) / 2) + talentBonus + if (vigueur != this.system.sante.vigueur) { + this.update({ 'system.sante.vigueur': vigueur }) + } + } + + super.prepareDerivedData() + } + + /* -------------------------------------------- */ + _preUpdate(changed, options, user) { + + super._preUpdate(changed, options, user); + } + + /* -------------------------------------------- */ + getItemById(id) { + let item = this.items.find(item => item.id == id); + if (item) { + item = duplicate(item) + } + return item; + } + + /* -------------------------------------------- */ + async equipItem(itemId) { + let item = this.items.find(item => item.id == itemId) + if (item && item.system) { + let update = { _id: item.id, "system.equipped": !item.system.equipped } + await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity + } + } + + /* -------------------------------------------- */ + editItemField(itemId, itemType, itemField, dataType, value) { + let item = this.items.find(item => item.id == itemId) + if (item) { + console.log("Item ", item, itemField, dataType, value) + if (dataType.toLowerCase() == "number") { + value = Number(value) + } else { + value = String(value) + } + let update = { _id: item.id, [`system.${itemField}`]: value }; + this.updateEmbeddedDocuments("Item", [update]) + } + } + + /* -------------------------------------------- */ + checkAttribut(attribut, minLevel) { + let attr = this.system.attributs.find(at => at.labelnorm == attribut.toLowerCase()) + if (attr && attr.value >= minLevel) { + return { isValid: true, attr: duplicate(attr) } + } + return { isValid: false } + } + /* -------------------------------------------- */ + checkAttributOrCompetenceLevel(compName, minLevel) { + let comp = this.items.find(i => i.type == "competence" && i.name.toLowerCase() == compName.toLowerCase() && i.system.niveau >= minLevel) + if (comp) { + return { isValid: true, item: duplicate(comp) } + } else { + for (let attrKey in this.system.attributs) { + if (this.system.attributs[attrKey].label.toLowerCase() == compName.toLowerCase() && this.system.attributs[attrKey].value >= minLevel) { + return { isValid: true, item: duplicate(this.system.attributs[attrKey]) } + } + } + } + return { isValid: false, warningMessage: `Prérequis insuffisant : la compétence/attribut ${compName} doit être de niveau ${minLevel} au minimum` } + } + /* -------------------------------------------- */ + addCompetenceBonus(compName, bonus, baCost) { + let comp = this.items.find(i => i.type == "competence" && i.name.toLowerCase() == compName.toLowerCase()) + if (comp) { + comp = duplicate(comp) + comp.system.bonus = bonus + comp.system.baCost = baCost + return { isValid: true, item: comp } + } + return { isValid: false, warningMessage: `Compétence ${compName} non trouvée` } + } + /* -------------------------------------------- */ + checkIfCompetence(compName) { + let comp = this.items.find(i => i.type == "competence" && i.name.toLowerCase() == compName.toLowerCase()) + if (comp) { + return { isValid: true, item: comp } + } + return { isValid: false } + } + /* -------------------------------------------- */ + getVigueur() { + return this.system.sante.vigueur + } + + /* -------------------------------------------- */ + getVigueurBonus() { + let talents = this.items.filter(item => item.type == "talent" && item.system.isautomated) + let bonus = 0 + for (let talent of talents) { + for (let auto of talent.system.automations) { + if (auto.eventtype == "bonus-permanent" && auto.bonusname == "vigueur") { + bonus += Number(auto.bonus || 0) + } + } + } + return bonus + } + + /* -------------------------------------------- */ + getBonneAventure() { + return this.system.bonneaventure.actuelle + } + /* -------------------------------------------- */ + checkBonneAventure(cost) { + return (this.system.bonneaventure.actuelle >= cost) + } + /* -------------------------------------------- */ + changeBonneAventure(value) { + let newBA = this.system.bonneaventure.actuelle + newBA += value + this.update({ 'system.bonneaventure.actuelle': newBA }) + } + + /* -------------------------------------------- */ + getEclat() { + return this.system.eclat.value + } + + /* -------------------------------------------- */ + changeEclat(value) { + let newE = this.system.eclat.value + newE += value + this.update({ 'system.eclat.value': newE }) + } + + /* -------------------------------------------- */ + compareName(a, b) { + if (a.name < b.name) { + return -1; + } + if (a.name > b.name) { + return 1; + } + return 0; + } + + /* -------------------------------------------- */ + getAttribute(attrKey) { + return this.system.attributes[attrKey] + } + + /* -------------------------------------------- */ + getBonusDegats() { + return 0; + } + + /* -------------------------------------------- */ + async equipGear(equipmentId) { + let item = this.items.find(item => item.id == equipmentId); + if (item && item.system.data) { + let update = { _id: item.id, "system.equipped": !item.system.equipped }; + await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity + } + } + + /* -------------------------------------------- */ + getSubActors() { + let subActors = []; + for (let id of this.system.subactors) { + subActors.push(duplicate(game.actors.get(id))); + } + return subActors; + } + /* -------------------------------------------- */ + async addSubActor(subActorId) { + let subActors = duplicate(this.system.subactors); + subActors.push(subActorId); + await this.update({ 'system.subactors': subActors }); + } + /* -------------------------------------------- */ + async delSubActor(subActorId) { + let newArray = []; + for (let id of this.system.subactors) { + if (id != subActorId) { + newArray.push(id); + } + } + await this.update({ 'system.subactors': newArray }); + } + + /* -------------------------------------------- */ + getTotalAdversite() { + return this.system.adversite.bleue + this.system.adversite.rouge + this.system.adversite.noire + } + + /* -------------------------------------------- */ + async incDecAdversite(adv, incDec = 0) { + let adversite = duplicate(this.system.adversite) + adversite[adv] += Number(incDec) + adversite[adv] = Math.max(adversite[adv], 0) + this.update({ 'system.adversite': adversite }) + } + /* -------------------------------------------- */ + async incDecQuantity(objetId, incDec = 0) { + let objetQ = this.items.get(objetId) + if (objetQ) { + let newQ = objetQ.system.quantite + incDec + newQ = Math.max(newQ, 0) + const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantite': newQ }]); // pdates one EmbeddedEntity + } + } + + /* -------------------------------------------- */ + computeRichesse() { + let valueSC = 0 + for(let monnaie of this.items) { + if (monnaie.type == "monnaie") { + valueSC += Number(monnaie.system.prixsc) * Number(monnaie.system.quantite) + } + } + return HeritiersUtility.computeMonnaieDetails( valueSC) + } + + /* -------------------------------------------- */ + computeValeurEquipement() { + let valueSC = 0 + for(let equip of this.items) { + if (equip.type == "equipement" || equip.type == "arme" || equip.type == "protection") { + valueSC += Number(equip.system.prixsc) * Number(equip.system.quantite ?? 1) + valueSC += (Number(equip.system.prixca) * Number(equip.system.quantite ?? 1)) * 20 + valueSC += (Number(equip.system.prixpo) * Number(equip.system.quantite ?? 1)) * 400 + } + } + return HeritiersUtility.computeMonnaieDetails( valueSC) + } + + /* -------------------------------------------- */ + getCompetence(compId) { + return this.items.get(compId) + } + + /* -------------------------------------------- */ + async setPredilectionUsed(compId, predIdx) { + let comp = this.items.get(compId) + let pred = duplicate(comp.system.predilections) + pred[predIdx].used = true + await this.updateEmbeddedDocuments('Item', [{ _id: compId, 'system.predilections': pred }]) + } + + /* -------------------------------------------- */ + getInitiativeScore() { + let init = this.getFlag("world", "last-initiative") + return init || -1 + } + + /* -------------------------------------------- */ + getBestDefenseValue() { + let defenseList = this.items.filter(item => (item.type == "arme") && item.system.equipped) + let maxDef = 0 + let bestArme + for (let arme of defenseList) { + if (arme.type == "arme" ) { + arme = this.prepareArme(arme) + } + if (arme.system.totalDefensif > maxDef) { + maxDef = arme.system.totalDefensif + bestArme = duplicate(arme) + } + } + return bestArme + } + + /* -------------------------------------------- */ + searchRelevantTalents(competence) { + let talents = [] + + for (let talent of this.items) { + if (talent.type == "talent" && talent.system.isautomated && talent.system.automations.length > 0) { + for (let auto of talent.system.automations) { + if (auto.eventtype === "prepare-roll") { + if (auto.competence.toLowerCase() == competence.name.toLowerCase()) { + talent = duplicate(talent) + talent.system.bonus = auto.bonus + talent.system.baCost = auto.baCost + talents.push(talent) + } + } + } + } + } + return talents + } + + /* -------------------------------------------- */ + buildListeAdversites() { + return [] + } + + /* -------------------------------------------- */ + getCommonRollData(attrKey = undefined, compId = undefined, compName = undefined) { + let rollData = HeritiersUtility.getBasicRollData() + rollData.alias = this.name + rollData.actorImg = this.img + rollData.actorId = this.id + rollData.tokenId = this.token?.id + rollData.img = this.img + rollData.attributs = HeritiersUtility.getAttributs() + rollData.maitriseId = "none" + rollData.nbEclat = this.system.eclat.value + rollData.nbBA = this.system.bonneaventure.actuelle + rollData.nbAdversites = this.getTotalAdversite() + rollData.talents = [] + + if (attrKey) { + rollData.attrKey = attrKey + if (attrKey != "tochoose") { + rollData.actionImg = "systems/fvtt-les-heritiers/assets/icons/" + this.system.attributs[attrKey].labelnorm + ".webp" + rollData.attr = duplicate(this.system.attributs[attrKey]) + } + } + if (compId) { + rollData.competence = duplicate(this.items.get(compId) || {}) + rollData.maitrises = rollData.competence.system.predilections.filter(p => p.maitrise) + rollData.actionImg = rollData.competence?.img + rollData.talents = this.searchRelevantTalents(rollData.competence) + } + if (compName) { + rollData.competence = duplicate(this.items.find(item => item.name.toLowerCase() == compName.toLowerCase()) || {}) + rollData.actionImg = rollData.competence?.img + } + return rollData + } + + /* -------------------------------------------- */ + async rollAttribut(attrKey, isInit = false) { + let rollData = this.getCommonRollData(attrKey) + rollData.multiplier = (isInit)? 1 : 2 + rollData.isInit = isInit + let rollDialog = await HeritiersRollDialog.create(this, rollData) + rollDialog.render(true) + } + + /* -------------------------------------------- */ + async rollCompetence(attrKey, compId) { + let rollData = this.getCommonRollData(attrKey, compId) + rollData.multiplier = 1 // Attr multiplier, always 1 in competence mode + console.log("RollDatra", rollData) + let rollDialog = await HeritiersRollDialog.create(this, rollData) + rollDialog.render(true) + } + + /* -------------------------------------------- */ + async rollArmeOffensif(armeId) { + let arme = this.items.get(armeId) + if (arme.type == "arme") { + arme = this.prepareArme(arme) + } + let rollData = this.getCommonRollData(arme.system.attrKey, arme.system.competence._id) + rollData.arme = arme + HeritiersUtility.updateWithTarget(rollData) + console.log("ARME!", rollData) + let rollDialog = await HeritiersRollDialog.create(this, rollData) + rollDialog.render(true) + } + + /* -------------------------------------------- */ + async rollArmeDegats(armeId, targetVigueur = undefined) { + let arme = this.items.get(armeId) + if (arme.type == "arme") { + arme = this.prepareArme(arme) + } + console.log("DEGATS", arme) + let roll = new Roll( "1d10+"+arme.system.totalDegats).roll({ async: false }) + await HeritiersUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode")); + let nbEtatPerdus = 0 + if (targetVigueur) { + nbEtatPerdus = Math.floor(roll.total / targetVigueur) + } + let rollData = { + arme: arme, + finalResult: roll.total, + alias: this.name, + actorImg: this.img, + actorId: this.id, + actionImg: arme.img, + targetVigueur: targetVigueur, + nbEtatPerdus: nbEtatPerdus + } + HeritiersUtility.createChatWithRollMode(rollData.alias, { + content: await renderTemplate(`systems/fvtt-les-heritiers/templates/chat-degats-result.html`, rollData) + }) + + } +} diff --git a/modules/heritiers-combat.js b/modules/heritiers-combat.js new file mode 100644 index 0000000..14e631a --- /dev/null +++ b/modules/heritiers-combat.js @@ -0,0 +1,25 @@ +import { HeritiersUtility } from "./heritiers-utility.js"; + +/* -------------------------------------------- */ +export class HeritiersCombat extends Combat { + + /* -------------------------------------------- */ + async rollInitiative(ids, formula = undefined, messageOptions = {} ) { + ids = typeof ids === "string" ? [ids] : ids; + for (let cId = 0; cId < ids.length; cId++) { + const c = this.combatants.get(ids[cId]); + //console.log("Init for combattant", c ) + let id = c._id || c.id + let initValue = c.actor ? c.actor.getInitiativeScore() : 0 + await this.updateEmbeddedDocuments("Combatant", [ { _id: id, initiative: initValue } ]); + } + + return this; + } + + /* -------------------------------------------- */ + _onUpdate(changed, options, userId) { + } + + +} diff --git a/modules/heritiers-commands.js b/modules/heritiers-commands.js new file mode 100644 index 0000000..5f41a7f --- /dev/null +++ b/modules/heritiers-commands.js @@ -0,0 +1,123 @@ +/* -------------------------------------------- */ + +import { HeritiersUtility } from "./heritiers-utility.js"; +import { HeritiersRollDialog } from "./heritiers-roll-dialog.js"; + +/* -------------------------------------------- */ +export class HeritiersCommands { + + static init() { + if (!game.system.hawkmoon.commands) { + //const HeritiersCommands = new HeritiersCommands() + //HeritiersCommands.registerCommand({ path: ["/char"], func: (content, msg, params) => HeritiersCommands.createChar(msg), descr: "Create a new character" }); + //game.system.mournblade.commands = HeritiersCommands + } + } + + constructor() { + this.commandsTable = {} + } + + /* -------------------------------------------- */ + registerCommand(command) { + this._addCommand(this.commandsTable, command.path, '', command); + } + + /* -------------------------------------------- */ + _addCommand(targetTable, path, fullPath, command) { + if (!this._validateCommand(targetTable, path, command)) { + return; + } + const term = path[0]; + fullPath = fullPath + term + ' ' + if (path.length == 1) { + command.descr = `${fullPath}: ${command.descr}`; + targetTable[term] = command; + } + else { + if (!targetTable[term]) { + targetTable[term] = { subTable: {} }; + } + this._addCommand(targetTable[term].subTable, path.slice(1), fullPath, command) + } + } + + /* -------------------------------------------- */ + _validateCommand(targetTable, path, command) { + if (path.length > 0 && path[0] && command.descr && (path.length != 1 || targetTable[path[0]] == undefined)) { + return true; + } + console.warn("HeritiersCommands._validateCommand failed ", targetTable, path, command); + return false; + } + + + /* -------------------------------------------- */ + /* Manage chat commands */ + processChatCommand(commandLine, content = '', msg = {}) { + // Setup new message's visibility + let rollMode = game.settings.get("core", "rollMode"); + if (["gmroll", "blindroll"].includes(rollMode)) msg["whisper"] = ChatMessage.getWhisperRecipients("GM"); + if (rollMode === "blindroll") msg["blind"] = true; + msg["type"] = 0; + + let command = commandLine[0].toLowerCase(); + let params = commandLine.slice(1); + + return this.process(command, params, content, msg); + } + + /* -------------------------------------------- */ + process(command, params, content, msg) { + return this._processCommand(this.commandsTable, command, params, content, msg); + } + + /* -------------------------------------------- */ + _processCommand(commandsTable, name, params, content = '', msg = {}, path = "") { + console.log("===> Processing command") + let command = commandsTable[name]; + path = path + name + " "; + if (command && command.subTable) { + if (params[0]) { + return this._processCommand(command.subTable, params[0], params.slice(1), content, msg, path) + } + else { + this.help(msg, command.subTable); + return true; + } + } + if (command && command.func) { + const result = command.func(content, msg, params); + if (result == false) { + RdDCommands._chatAnswer(msg, command.descr); + } + return true; + } + return false; + } + + /* -------------------------------------------- */ + async createChar(msg) { + game.system.Heritiers.creator = new HeritiersActorCreate(); + game.system.Heritiers.creator.start(); + } + + /* -------------------------------------------- */ + static _chatAnswer(msg, content) { + msg.whisper = [game.user.id]; + msg.content = content; + ChatMessage.create(msg); + } + + /* -------------------------------------------- */ + async poolRoll( msg) { + let rollData = HeritiersUtility.getBasicRollData() + rollData.alias = "Dice Pool Roll", + rollData.mode = "generic" + rollData.title = `Dice Pool Roll`; + + let rollDialog = await HeritiersRollDialog.create( this, rollData); + rollDialog.render( true ); + } + +} \ No newline at end of file diff --git a/modules/heritiers-config.js b/modules/heritiers-config.js new file mode 100644 index 0000000..b8d57a2 --- /dev/null +++ b/modules/heritiers-config.js @@ -0,0 +1,13 @@ + +export const HERITIERS_CONFIG = { + + competenceCategorie : { + "aventurier": "Aventurier", + "roublard": "Roublard", + "combattant": "Combattant", + "erudit": "Erudit", + "savant": "Savant", + "gentleman": "Gentleman" + } + +} \ No newline at end of file diff --git a/modules/heritiers-creature-sheet.js b/modules/heritiers-creature-sheet.js new file mode 100644 index 0000000..c6ce66c --- /dev/null +++ b/modules/heritiers-creature-sheet.js @@ -0,0 +1,26 @@ +/** + * Extend the basic ActorSheet with some very simple modifications + * @extends {ActorSheet} + */ + + import { HeritiersActorSheet } from "./hawkmoon-actor-sheet.js"; +import { HeritiersUtility } from "./heritiers-utility.js"; +import { HeritiersAutomation } from "./hawkmoon-automation.js"; + +/* -------------------------------------------- */ +export class HeritiersCreatureSheet extends HeritiersActorSheet { + + /** @override */ + static get defaultOptions() { + + return mergeObject(super.defaultOptions, { + classes: ["fvtt-les-heritiers", "sheet", "actor"], + template: "systems/fvtt-les-heritiers/templates/creature-sheet.html", + width: 640, + height: 720, + tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }], + dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }], + editScore: false + }) + } +} diff --git a/modules/heritiers-hud.js b/modules/heritiers-hud.js new file mode 100644 index 0000000..81a9787 --- /dev/null +++ b/modules/heritiers-hud.js @@ -0,0 +1,71 @@ +/* -------------------------------------------- */ + +/* -------------------------------------------- */ +export class HeritiersTokenHud { + + static init() { + // Integration du TokenHUD + Hooks.on('renderTokenHUD', (app, html, data) => { HeritiersTokenHud.addTokenHudExtensions(app, html, data._id) }); + } + + /* -------------------------------------------- */ + static async removeExtensionHud(app, html, tokenId) { + html.find('.control-icon.hawkmoon-adversite').remove() + } + + /* -------------------------------------------- */ + static async addExtensionHud(app, html, tokenId) { + + let token = canvas.tokens.get(tokenId) + let actor = token.actor + app.hasExtension = true + + const hudData = { actor: actor } + + const controlIconActions = html.find('.control-icon[data-action=combat]'); + // initiative + await HeritiersTokenHud._configureSubMenu(controlIconActions, 'systems/fvtt-les-heritiers/templates/hud-adversites.html', hudData, + (event) => { + let adversite = event.currentTarget.attributes['data-action-index'].value + let value = Number(event.currentTarget.attributes['data-action-value'].value) + hudData.actor.incDecAdversite( adversite, value) + } ) + } + + /* -------------------------------------------- */ + static async addTokenHudExtensions(app, html, tokenId) { + const controlIconCombat = html.find('.control-icon[data-action=combat]') + if (controlIconCombat.length>0 ) { + HeritiersTokenHud.addExtensionHud(app, html, tokenId); + } + } + + /* -------------------------------------------- */ + static async _configureSubMenu(insertionPoint, template, hudData, onMenuItem) { + const hud = $(await renderTemplate(template, hudData)) + const list = hud.find('div.hawkmoon-hud-list') + + HeritiersTokenHud._toggleHudListActive(hud, list); + + hud.find('img.hawkmoon-hud-togglebutton').click(event => HeritiersTokenHud._toggleHudListActive(hud, list)); + list.find('.hawkmoon-hud-adversite').click(onMenuItem); + + insertionPoint.after(hud); + } + + /* -------------------------------------------- */ + static _showControlWhen(control, condition) { + if (condition) { + control.show() + } + else { + control.hide() + } + } + + /* -------------------------------------------- */ + static _toggleHudListActive(hud, list) { + hud.toggleClass('active') + HeritiersTokenHud._showControlWhen(list, hud.hasClass('active')) + } +} \ No newline at end of file diff --git a/modules/heritiers-item-sheet.js b/modules/heritiers-item-sheet.js new file mode 100644 index 0000000..9175495 --- /dev/null +++ b/modules/heritiers-item-sheet.js @@ -0,0 +1,227 @@ +import { HeritiersUtility } from "./heritiers-utility.js"; + +/** + * Extend the basic ItemSheet with some very simple modifications + * @extends {ItemSheet} + */ +export class HeritiersItemSheet extends ItemSheet { + + /** @override */ + static get defaultOptions() { + + return mergeObject(super.defaultOptions, { + classes: ["fvtt-les-heritiers", "sheet", "item"], + template: "systems/fvtt-les-heritiers/templates/item-sheet.html", + dragDrop: [{ dragSelector: null, dropSelector: null }], + width: 620, + height: 550, + tabs: [{navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "description"}] + }); + } + + /* -------------------------------------------- */ + _getHeaderButtons() { + let buttons = super._getHeaderButtons(); + // Add "Post to chat" button + // We previously restricted this to GM and editable items only. If you ever find this comment because it broke something: eh, sorry! + buttons.unshift( + { + class: "post", + icon: "fas fa-comment", + onclick: ev => { } + }) + return buttons + } + + /* -------------------------------------------- */ + /** @override */ + setPosition(options = {}) { + const position = super.setPosition(options); + const sheetBody = this.element.find(".sheet-body"); + const bodyHeight = position.height - 192; + sheetBody.css("height", bodyHeight); + if (this.item.type.includes('weapon')) { + position.width = 640; + } + return position; + } + + /* -------------------------------------------- */ + async getData() { + const objectData = duplicate(this.object) + let formData = { + title: this.title, + id: this.id, + type: objectData.type, + img: objectData.img, + name: objectData.name, + editable: this.isEditable, + cssClass: this.isEditable ? "editable" : "locked", + attributs: HeritiersUtility.getAttributs(), + system: objectData.system, + limited: this.object.limited, + options: this.options, + owner: this.document.isOwner, + description: await TextEditor.enrichHTML(this.object.system.description, {async: true}), + mr: (this.object.type == 'specialisation'), + isGM: game.user.isGM + } + + if ( objectData.type == "don") { + formData.sacrifice = await TextEditor.enrichHTML(this.object.system.sacrifice, {async: true}) + } + //this.options.editable = !(this.object.origin == "embeddedItem"); + console.log("ITEM DATA", formData, this); + return formData; + } + + + /* -------------------------------------------- */ + _getHeaderButtons() { + let buttons = super._getHeaderButtons(); + buttons.unshift({ + class: "post", + icon: "fas fa-comment", + onclick: ev => this.postItem() + }); + return buttons + } + + /* -------------------------------------------- */ + postItem() { + let chatData = duplicate(HeritiersUtility.data(this.item)); + if (this.actor) { + chatData.actor = { id: this.actor.id }; + } + // Don't post any image for the item (which would leave a large gap) if the default image is used + if (chatData.img.includes("/blank.png")) { + chatData.img = null; + } + // JSON object for easy creation + chatData.jsondata = JSON.stringify( + { + compendium: "postedItem", + payload: chatData, + }); + + renderTemplate('systems/fvtt-Heritiers-rpg/templates/post-item.html', chatData).then(html => { + let chatOptions = HeritiersUtility.chatDataSetup(html); + ChatMessage.create(chatOptions) + }); + } + + /* -------------------------------------------- */ + /** @override */ + activateListeners(html) { + super.activateListeners(html); + + // Everything below here is only needed if the sheet is editable + if (!this.options.editable) return; + + + // Update Inventory Item + html.find('.item-edit').click(ev => { + const li = $(ev.currentTarget).parents(".item") + const item = this.object.options.actor.getOwnedItem(li.data("item-id")) + item.sheet.render(true); + }); + + html.find('.delete-subitem').click(ev => { + this.deleteSubitem(ev); + }) + html.find('.edit-predilection').change(ev => { + const li = $(ev.currentTarget).parents(".prediction-item") + let index = li.data("prediction-index") + let pred = duplicate(this.object.system.predilections) + pred[index].name = ev.currentTarget.value + pred[index].id = pred[index].id || randomID(16) + this.object.update( { 'system.predilections': pred }) + }) + html.find('.edit-predilection-description').change(ev => { + const li = $(ev.currentTarget).parents(".prediction-item") + let index = li.data("prediction-index") + let pred = duplicate(this.object.system.predilections) + pred[index].description = ev.currentTarget.value + pred[index].id = pred[index].id || randomID(16) + this.object.update( { 'system.predilections': pred }) + }) + html.find('.predilection-acquise').change(ev => { + const li = $(ev.currentTarget).parents(".prediction-item") + let index = li.data("prediction-index") + let pred = duplicate(this.object.system.predilections) + pred[index].acquise = ev.currentTarget.checked + pred[index].id = pred[index].id || randomID(16) + this.object.update( { 'system.predilections': pred }) + }) + html.find('.predilection-maitrise').change(ev => { + const li = $(ev.currentTarget).parents(".prediction-item") + let index = li.data("prediction-index") + let pred = duplicate(this.object.system.predilections) + pred[index].maitrise = ev.currentTarget.checked + pred[index].id = pred[index].id || randomID(16) + this.object.update( { 'system.predilections': pred }) + }) + html.find('.predilection-used').change(ev => { + const li = $(ev.currentTarget).parents(".prediction-item") + let index = li.data("prediction-index") + let pred = duplicate(this.object.system.predilections) + pred[index].used = ev.currentTarget.checked + pred[index].id = pred[index].id || randomID(16) + this.object.update( { 'system.predilections': pred }) + }) + + html.find('#add-predilection').click(ev => { + let pred = duplicate(this.object.system.predilections) + pred.push( { name: "Nouvelle prédilection", id: randomID(16), used: false }) + this.object.update( { 'system.predilections': pred }) + }) + html.find('.delete-prediction').click(ev => { + const li = $(ev.currentTarget).parents(".prediction-item") + let index = li.data("prediction-index") + let pred = duplicate(this.object.system.predilections) + pred.splice(index,1) + this.object.update( { 'system.predilections': pred }) + }) + + html.find('#add-automation').click(ev => { + let autom = duplicate(this.object.system.automations) + autom.push( { eventtype: "on-drop", name: "Automatisation 1", competence: "", minLevel: 0, id: randomID(16) }) + this.object.update( { 'system.automations': autom }) + }) + html.find('.delete-automation').click(ev => { + const li = $(ev.currentTarget).parents(".automation-item") + let index = li.data("automation-index") + let autom = duplicate(this.object.system.automations) + autom.splice(index,1) + this.object.update( { 'system.automations': autom }) + }) + html.find('.automation-edit-field').change(ev => { + let index = $(ev.currentTarget).data("automation-index") + let field = $(ev.currentTarget).data("automation-field") + let auto = duplicate(this.object.system.automations) + auto[index][field] = ev.currentTarget.value + auto[index].id = auto[index].id || randomID(16) + this.object.update( { 'system.automations': auto }) + }) + + // Update Inventory Item + html.find('.item-delete').click(ev => { + const li = $(ev.currentTarget).parents(".item"); + let itemId = li.data("item-id"); + let itemType = li.data("item-type"); + }); + + } + + /* -------------------------------------------- */ + get template() { + let type = this.item.type; + return `systems/fvtt-les-heritiers/templates/item-${type}-sheet.html`; + } + + /* -------------------------------------------- */ + /** @override */ + _updateObject(event, formData) { + return this.object.update(formData); + } +} diff --git a/modules/heritiers-item.js b/modules/heritiers-item.js new file mode 100644 index 0000000..f5d076a --- /dev/null +++ b/modules/heritiers-item.js @@ -0,0 +1,31 @@ +import { HeritiersUtility } from "./heritiers-utility.js"; + +export const defaultItemImg = { + competence: "systems/fvtt-les-heritiers/assets/icons/competence.webp", + arme: "systems/fvtt-les-heritiers/assets/icons/melee.webp", + equipement: "systems/fvtt-les-heritiers/assets/icons/equipement.webp", + monnaie: "systems/fvtt-les-heritiers/assets/icons/monnaie.webp", + predilection: "systems/fvtt-les-heritiers/assets/icons/predilection.webp", + protection: "systems/fvtt-les-heritiers/assets/icons/protection.webp", + talent: "systems/fvtt-les-heritiers/assets/icons/talent.webp", + historique: "systems/fvtt-les-heritiers/assets/icons/historique.webp", + profil: "systems/fvtt-les-heritiers/assets/icons/profil.webp", + artefact: "systems/fvtt-les-heritiers/assets/icons/artefact.webp", + contact: "systems/fvtt-les-heritiers/assets/icons/contacts.webp", + ressource: "systems/fvtt-les-heritiers/assets/icons/ressources.webp", +} + +/** + * Extend the basic ItemSheet with some very simple modifications + * @extends {ItemSheet} + */ +export class HeritiersItem extends Item { + + constructor(data, context) { + if (!data.img) { + data.img = defaultItemImg[data.type]; + } + super(data, context); + } + +} diff --git a/modules/heritiers-main.js b/modules/heritiers-main.js new file mode 100644 index 0000000..d5ac9a8 --- /dev/null +++ b/modules/heritiers-main.js @@ -0,0 +1,150 @@ +/** + * Heritiers system + * Author: Uberwald + * Software License: Prop + */ + +/* -------------------------------------------- */ + +/* -------------------------------------------- */ +// Import Modules +import { HeritiersActor } from "./hawkmoon-actor.js"; +import { HeritiersItemSheet } from "./hawkmoon-item-sheet.js"; +import { HeritiersActorSheet } from "./hawkmoon-actor-sheet.js"; +import { HeritiersCreatureSheet } from "./hawkmoon-creature-sheet.js"; +import { HeritiersCelluleSheet } from "./hawkmoon-cellule-sheet.js"; +import { HeritiersUtility } from "./heritiers-utility.js"; +import { HeritiersCombat } from "./hawkmoon-combat.js"; +import { HeritiersItem } from "./hawkmoon-item.js"; +import { HeritiersAutomation } from "./hawkmoon-automation.js"; +import { HeritiersTokenHud } from "./hawkmoon-hud.js"; + +/* -------------------------------------------- */ +/* Foundry VTT Initialization */ +/* -------------------------------------------- */ + +/************************************************************************************/ +Hooks.once("init", async function () { + console.log(`Initializing Heritiers RPG`); + + /* -------------------------------------------- */ + // preload handlebars templates + HeritiersUtility.preloadHandlebarsTemplates() + + /* -------------------------------------------- */ + // Set an initiative formula for the system + CONFIG.Combat.initiative = { + formula: "1d10", + decimals: 1 + }; + + /* -------------------------------------------- */ + game.socket.on("system.fvtt-les-heritiers", data => { + HeritiersUtility.onSocketMesssage(data) + }); + + /* -------------------------------------------- */ + // Define custom Entity classes + CONFIG.Combat.documentClass = HeritiersCombat + CONFIG.Actor.documentClass = HeritiersActor + CONFIG.Item.documentClass = HeritiersItem + game.system.hawkmoon = { + HeritiersUtility, + HeritiersAutomation + } + + /* -------------------------------------------- */ + // Register sheet application classes + Actors.unregisterSheet("core", ActorSheet); + Actors.registerSheet("fvtt-les-heritiers", HeritiersActorSheet, { types: ["personnage"], makeDefault: true }) + Actors.registerSheet("fvtt-les-heritiers", HeritiersCreatureSheet, { types: ["creature"], makeDefault: true }) + Actors.registerSheet("fvtt-les-heritiers", HeritiersCelluleSheet, { types: ["cellule"], makeDefault: true }); + + Items.unregisterSheet("core", ItemSheet); + Items.registerSheet("fvtt-les-heritiers", HeritiersItemSheet, { makeDefault: true }) + + HeritiersUtility.init() + HeritiersAutomation.init() + HeritiersTokenHud.init() + +}); + +/* -------------------------------------------- */ +function welcomeMessage() { + ChatMessage.create({ + user: game.user.id, + whisper: [game.user.id], + content: `

+ Bienvenue dans Heritiers et le troisième Millénaire ! +

Les livres de Heritiers sont nécessaires pour jouer : https://www.titam-france.fr

+

Heritiers est jeu de rôle publié par Titam France/Sombres projets, tout les droits leur appartiennent.

+

Système développé par LeRatierBretonnien, support sur le Discord FR de Foundry.

+ ` }); +} + +/* -------------------------------------------- */ +// Register world usage statistics +function registerUsageCount(registerKey) { + if (game.user.isGM) { + game.settings.register(registerKey, "world-key", { + name: "Unique world key", + scope: "world", + config: false, + default: "", + type: String + }); + + let worldKey = game.settings.get(registerKey, "world-key") + if (worldKey == undefined || worldKey == "") { + worldKey = randomID(32) + game.settings.set(registerKey, "world-key", worldKey) + } + // Simple API counter + let regURL = `https://www.uberwald.me/fvtt_appcount/count.php?name="${registerKey}"&worldKey="${worldKey}"&version="${game.release.generation}.${game.release.build}"&system="${game.system.id}"&systemversion="${game.system.version}"` + //$.ajaxSetup({ + //headers: { 'Access-Control-Allow-Origin': '*' } + //}) + $.ajax(regURL) + } +} + +/* -------------------------------------------- */ +/* Foundry VTT Initialization */ +/* -------------------------------------------- */ +Hooks.once("ready", function () { + + HeritiersUtility.ready() + + // User warning + if (!game.user.isGM && game.user.character == undefined) { + ui.notifications.info("Attention ! Aucun personnage n'est relié au joueur !"); + ChatMessage.create({ + content: "ATTENTION Le joueur " + game.user.name + " n'est relié à aucun personnage !", + user: game.user._id + }); + } + + registerUsageCount('fvtt-les-heritiers') + welcomeMessage() + + // CSS patch for v9 + if (game.version) { + let sidebar = document.getElementById("sidebar"); + sidebar.style.width = "min-content"; + } +}); + +/* -------------------------------------------- */ +/* Foundry VTT Initialization */ +/* -------------------------------------------- */ +Hooks.on("chatMessage", (html, content, msg) => { + if (content[0] == '/') { + let regExp = /(\S+)/g; + let commands = content.match(regExp); + if (game.system.mournblade.commands.processChatCommand(commands, content, msg)) { + return false; + } + } + return true; +}); + diff --git a/modules/heritiers-roll-dialog.js b/modules/heritiers-roll-dialog.js new file mode 100644 index 0000000..1b37faf --- /dev/null +++ b/modules/heritiers-roll-dialog.js @@ -0,0 +1,80 @@ +import { HeritiersUtility } from "./heritiers-utility.js"; + +export class HeritiersRollDialog extends Dialog { + + /* -------------------------------------------- */ + static async create(actor, rollData ) { + + let options = { classes: ["HeritiersDialog"], width: 320, height: 'fit-content', 'z-index': 99999 }; + let html = await renderTemplate('systems/fvtt-les-heritiers/templates/roll-dialog-generic.html', rollData); + + return new HeritiersRollDialog(actor, rollData, html, options ); + } + + /* -------------------------------------------- */ + constructor(actor, rollData, html, options, close = undefined) { + let conf = { + title: "Test de Capacité", + content: html, + buttons: { + rolld10: { + icon: '', + label: "Lancer 1d10", + callback: () => { this.roll("d10") } + }, + rolld20: { + icon: '', + label: "Lancer 1d20", + callback: () => { this.roll("d20") } + }, + cancel: { + icon: '', + label: "Annuler", + callback: () => { this.close() } + } }, + close: close + } + + super(conf, options); + + this.actor = actor + this.rollData = rollData + } + + /* -------------------------------------------- */ + roll ( dice) { + this.rollData.mainDice = dice + HeritiersUtility.rollHeritiers( this.rollData ) + } + + + /* -------------------------------------------- */ + activateListeners(html) { + super.activateListeners(html); + + var dialog = this; + function onLoad() { + } + $(function () { onLoad(); }); + + html.find('#modificateur').change(async (event) => { + this.rollData.modificateur = Number(event.currentTarget.value) + }) + html.find('#difficulte').change(async (event) => { + this.rollData.difficulte = Number(event.currentTarget.value) + }) + html.find('#attrKey').change(async (event) => { + this.rollData.attrKey = String(event.currentTarget.value) + }) + html.find('#select-maitrise').change(async (event) => { + this.rollData.maitriseId = String(event.currentTarget.value) + }) + html.find('#competence-talents').change((event) => { + this.rollData.selectedTalents = $('#competence-talents').val() + }) + html.find('#bonus-malus-context').change((event) => { + this.rollData.bonusMalusContext = Number(event.currentTarget.value) + }) + + } +} \ No newline at end of file diff --git a/modules/heritiers-utility.js b/modules/heritiers-utility.js new file mode 100644 index 0000000..6a6908d --- /dev/null +++ b/modules/heritiers-utility.js @@ -0,0 +1,674 @@ +/* -------------------------------------------- */ +import { HeritiersCombat } from "./heritiers-combat.js"; +import { HeritiersCommands } from "./heritiers-commands.js"; + +/* -------------------------------------------- */ +export class HeritiersUtility { + + + /* -------------------------------------------- */ + static async init() { + Hooks.on('renderChatLog', (log, html, data) => HeritiersUtility.chatListeners(html)) + Hooks.on("getChatLogEntryContext", (html, options) => HeritiersUtility.chatRollMenu(html, options)) + + Hooks.on("getCombatTrackerEntryContext", (html, options) => { + HeritiersUtility.pushInitiativeOptions(html, options); + }) + + this.rollDataStore = {} + this.defenderStore = {} + HeritiersCommands.init() + + Handlebars.registerHelper('count', function (list) { + return list.length; + }) + Handlebars.registerHelper('includes', function (array, val) { + return array.includes(val); + }) + Handlebars.registerHelper('upper', function (text) { + return text.toUpperCase(); + }) + Handlebars.registerHelper('lower', function (text) { + return text.toLowerCase() + }) + Handlebars.registerHelper('upperFirst', function (text) { + if (typeof text !== 'string') return text + return text.charAt(0).toUpperCase() + text.slice(1) + }) + Handlebars.registerHelper('notEmpty', function (list) { + return list.length > 0; + }) + Handlebars.registerHelper('mul', function (a, b) { + return parseInt(a) * parseInt(b); + }) + + game.settings.register("fvtt-les-heritiers", "hawkmoon-pause-logo", { + name: "Logo de pause", + scope: "world", + config: true, + requiresReload: true, + default: "logo_pause_resistance", + type: String, + choices: { // If choices are defined, the resulting setting will be a select menu + "hawkmoon_logo": "Hawmoon (Texte)", + "logo_pause_resistance": "Résistance", + "logo_pause_hawkmoon_stone": "Heritiers (Pierre)", + "logo_pause_hawkmoon_violet": "Heritiers (Violet)", + "logo_pause_hawkmoon_beige": "Heritiers (Beige)", + "logo_pause_hawkmoon_rouge": "Heritiers (Rouge)" + }, + }) + + } + + /* -------------------------------------------- */ + static getModificateurOptions() { + let opt = [] + for (let i = -15; i <= 15; i++) { + opt.push(``) + } + return opt.concat("\n") + } + + /* -------------------------------------------- */ + static getPointAmeOptions() { + let opt = [] + for (let i = 1; i <= 20; i++) { + opt.push(``) + } + return opt.concat("\n") + } + + /* -------------------------------------------- */ + static getAttributs() { + return { adr: "Adresse", pui: "Puissance", cla: "Clairvoyance", pre: "Présence", tre: "Trempe" } + } + /* -------------------------------------------- */ + static pushInitiativeOptions(html, options) { + } + + /* -------------------------------------------- */ + static getSkills() { + return this.skills + } + + /* -------------------------------------------- */ + static async ready() { + const skills = await HeritiersUtility.loadCompendium("fvtt-les-heritiers.skills") + this.skills = skills.map(i => i.toObject()) + + // Setup pause logo + let logoPause = "systems/fvtt-les-heritiers/assets/logos/" + game.settings.get("fvtt-les-heritiers", "hawkmoon-pause-logo") + ".webp" + let logoImg = document.querySelector('#pause').children[0] + logoImg.setAttribute('style', `content: url(${logoPause})`) + } + + /* -------------------------------------------- */ + static async loadCompendiumData(compendium) { + const pack = game.packs.get(compendium); + return await pack?.getDocuments() ?? []; + } + + /* -------------------------------------------- */ + static async loadCompendium(compendium, filter = item => true) { + let compendiumData = await HeritiersUtility.loadCompendiumData(compendium); + return compendiumData.filter(filter); + } + + /* -------------------------------------------- */ + static getOptionsStatusList() { + return this.optionsStatusList; + } + /* -------------------------------------------- */ + static async chatListeners(html) { + + html.on("click", '.predilection-reroll', async event => { + let predIdx = $(event.currentTarget).data("predilection-index") + let messageId = HeritiersUtility.findChatMessageId(event.currentTarget) + let message = game.messages.get(messageId) + let rollData = message.getFlag("world", "hawkmoon-roll") + let actor = this.getActorFromRollData(rollData) + await actor.setPredilectionUsed(rollData.competence._id, predIdx) + rollData.competence = duplicate(actor.getCompetence(rollData.competence._id)) + HeritiersUtility.rollHeritiers(rollData) + }) + + html.on("click", '.roll-chat-degat', async event => { + let messageId = HeritiersUtility.findChatMessageId(event.currentTarget) + let message = game.messages.get(messageId) + let rollData = message.getFlag("world", "hawkmoon-roll") + let actor = this.getActorFromRollData(rollData) + actor.rollArmeDegats(rollData.arme._id, rollData.targetVigueur) + }) + } + + /* -------------------------------------------- */ + static async preloadHandlebarsTemplates() { + + const templatePaths = [ + 'systems/fvtt-les-heritiers/templates/editor-notes-gm.html', + 'systems/fvtt-les-heritiers/templates/partial-item-header.html', + 'systems/fvtt-les-heritiers/templates/partial-item-description.html', + 'systems/fvtt-les-heritiers/templates/partial-item-nav.html', + 'systems/fvtt-les-heritiers/templates/partial-list-niveau.html', + 'systems/fvtt-les-heritiers/templates/partial-item-prix.html', + 'systems/fvtt-les-heritiers/templates/partial-sante-etat.html', + 'systems/fvtt-les-heritiers/templates/partial-automation.html', + 'systems/fvtt-les-heritiers/templates/hud-adversites.html', + ] + return loadTemplates(templatePaths); + } + + /* -------------------------------------------- */ + static removeChatMessageId(messageId) { + if (messageId) { + game.messages.get(messageId)?.delete(); + } + } + + static findChatMessageId(current) { + return HeritiersUtility.getChatMessageId(HeritiersUtility.findChatMessage(current)); + } + + static getChatMessageId(node) { + return node?.attributes.getNamedItem('data-message-id')?.value; + } + + static findChatMessage(current) { + return HeritiersUtility.findNodeMatching(current, it => it.classList.contains('chat-message') && it.attributes.getNamedItem('data-message-id')) + } + + static findNodeMatching(current, predicate) { + if (current) { + if (predicate(current)) { + return current; + } + return HeritiersUtility.findNodeMatching(current.parentElement, predicate); + } + return undefined; + } + + /* -------------------------------------------- */ + static createDirectOptionList(min, max) { + let options = {}; + for (let i = min; i <= max; i++) { + options[`${i}`] = `${i}`; + } + return options; + } + + /* -------------------------------------------- */ + static buildListOptions(min, max) { + let options = "" + for (let i = min; i <= max; i++) { + options += `` + } + return options; + } + + /* -------------------------------------------- */ + static getTarget() { + if (game.user.targets && game.user.targets.size == 1) { + for (let target of game.user.targets) { + return target; + } + } + return undefined; + } + + /* -------------------------------------------- */ + static getActorFromRollData(rollData) { + let actor = game.actors.get(rollData.actorId) + if (rollData.tokenId) { + let token = canvas.tokens.placeables.find(t => t.id == rollData.tokenId) + if (token) { + actor = token.actor + } + } + return actor + } + + /* -------------------------------------------- */ + static updateRollData(rollData) { + + let id = rollData.rollId; + let oldRollData = this.rollDataStore[id] || {}; + let newRollData = mergeObject(oldRollData, rollData); + this.rollDataStore[id] = newRollData; + } + /* -------------------------------------------- */ + static saveRollData(rollData) { + game.socket.emit("system.fvtt-les-heritiers", { + name: "msg_update_roll", data: rollData + }); // Notify all other clients of the roll + this.updateRollData(rollData); + } + + /* -------------------------------------------- */ + static getRollData(id) { + return this.rollDataStore[id]; + } + + /* -------------------------------------------- */ + static onSocketMesssage(msg) { + //console.log("SOCKET MESSAGE", msg.name, game.user.character.id, msg.data.defenderId); + if (msg.name == "msg_update_defense_state") { + this.updateDefenseState(msg.data.defenderId, msg.data.rollId); + } + if (msg.name == "msg_update_roll") { + this.updateRollData(msg.data); + } + } + + /* -------------------------------------------- */ + static chatDataSetup(content, modeOverride, isRoll = false, forceWhisper) { + let chatData = { + user: game.user.id, + rollMode: modeOverride || game.settings.get("core", "rollMode"), + content: content + }; + + if (["gmroll", "blindroll"].includes(chatData.rollMode)) chatData["whisper"] = ChatMessage.getWhisperRecipients("GM").map(u => u.id); + if (chatData.rollMode === "blindroll") chatData["blind"] = true; + else if (chatData.rollMode === "selfroll") chatData["whisper"] = [game.user]; + + if (forceWhisper) { // Final force ! + chatData["speaker"] = ChatMessage.getSpeaker(); + chatData["whisper"] = ChatMessage.getWhisperRecipients(forceWhisper); + } + + return chatData; + } + + /* -------------------------------------------- */ + static async showDiceSoNice(roll, rollMode) { + if (game.modules.get("dice-so-nice")?.active) { + if (game.dice3d) { + let whisper = null; + let blind = false; + rollMode = rollMode ?? game.settings.get("core", "rollMode"); + switch (rollMode) { + case "blindroll": //GM only + blind = true; + case "gmroll": //GM + rolling player + whisper = this.getUsers(user => user.isGM); + break; + case "roll": //everybody + whisper = this.getUsers(user => user.active); + break; + case "selfroll": + whisper = [game.user.id]; + break; + } + await game.dice3d.showForRoll(roll, game.user, true, whisper, blind); + } + } + } + + /* -------------------------------------------- */ + static computeMonnaieDetails(valueSC) { + let po = Math.floor(valueSC / 400) + let pa = Math.floor((valueSC - (po*400)) / 20) + let sc = valueSC - (po*400) - (pa*20) + return { + po: po, pa: pa, sc: sc, valueSC: valueSC + } + } + + /* -------------------------------------------- */ + static computeResult(rollData) { + rollData.diceResult = rollData.roll.terms[0].results[0].result + if (rollData.mainDice.includes("d20")) { + let diceValue = rollData.roll.terms[0].results[0].result + if (diceValue % 2 == 1) { + //console.log("PAIR/IMP2", diceValue) + rollData.finalResult -= rollData.roll.terms[0].results[0].result // Substract value + if (diceValue == 1 || diceValue == 11) { + rollData.isDramatique = true + rollData.isSuccess = false + } + } + } + + //console.log("Result : ", rollData) + if (rollData.difficulte > 0 && !rollData.isDramatique) { + rollData.isSuccess = (rollData.finalResult >= rollData.difficulte) + rollData.isHeroique = ((rollData.finalResult - rollData.difficulte) >= 10) + rollData.isDramatique = ((rollData.finalResult - rollData.difficulte) <= -10) + } + + } + + /* -------------------------------------------- */ + static async rollHeritiers(rollData) { + + let actor = this.getActorFromRollData(rollData) + if (rollData.attrKey == "tochoose") { // No attr selected, force address + rollData.attrKey = "adr" + } + if (!rollData.attr) { + rollData.actionImg = "systems/fvtt-les-heritiers/assets/icons/" + actor.system.attributs[rollData.attrKey].labelnorm + ".webp" + rollData.attr = duplicate(actor.system.attributs[rollData.attrKey]) + } + + if (rollData.maitriseId != "none") { + rollData.selectedMaitrise = rollData.maitrises.find(p => p.id == rollData.maitriseId) + rollData.diceFormula = "2" + rollData.mainDice + "kh" + } else { + rollData.diceFormula = "1" + rollData.mainDice + } + + //console.log("BEFORE COMP", rollData) + if (rollData.competence) { + rollData.predilections = duplicate(rollData.competence.system.predilections.filter(pred => pred.acquise && !pred.maitrise && !pred.used) || []) + let compmod = (rollData.competence.system.niveau == 0) ? -3 : 0 + rollData.diceFormula += `+${rollData.attr.value}+${rollData.competence.system.niveau}+${rollData.modificateur}+${compmod}` + + if (rollData.selectedTalents && rollData.selectedTalents.length > 0) { + for (let id of rollData.selectedTalents) { + let talent = rollData.talents.find(t => t._id == id) + let bonusOK = true + if (talent.system.baCost) { + bonusOK = actor.checkBonneAventure(talent.system.baCost) + if (bonusOK) { + actor.changeBonneAventure(-talent.system.baCost) + } else { + ui.notifications.warn("Vous n'avez pas assez de points de Bonne Aventure !") + } + } + if (bonusOK) { + rollData.diceFormula += `+${talent.system.bonus}` + } + } + } + rollData.diceFormula += `+${rollData.bonusMalusContext}` + } else { + rollData.diceFormula += `+${rollData.attr.value}*${rollData.multiplier}+${rollData.modificateur}+${rollData.bonusMalusContext}` + } + + // Ajout adversités + rollData.diceFormula += `-${rollData.nbAdversites}` + + if (rollData.arme && rollData.arme.type == "arme") { + rollData.diceFormula += `+${rollData.arme.system.bonusmaniementoff}` + } + + let myRoll = new Roll(rollData.diceFormula).roll({ async: false }) + await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode")) + rollData.roll = myRoll + console.log(">>>> ", myRoll) + + rollData.finalResult = myRoll.total + this.computeResult(rollData) + if (rollData.isInit) { + actor.setFlag("world", "last-initiative", rollData.finalResult) + } + + this.createChatWithRollMode(rollData.alias, { + content: await renderTemplate(`systems/fvtt-les-heritiers/templates/chat-generic-result.html`, rollData) + }, rollData) + + } + + /* -------------------------------------------- */ + static async bonusRollHeritiers(rollData) { + rollData.bonusFormula = rollData.addedBonus + + let bonusRoll = new Roll(rollData.bonusFormula).roll({ async: false }) + await this.showDiceSoNice(bonusRoll, game.settings.get("core", "rollMode")); + rollData.bonusRoll = bonusRoll + + rollData.finalResult += rollData.bonusRoll.total + + this.computeResult(rollData) + + this.createChatWithRollMode(rollData.alias, { + content: await renderTemplate(`systems/fvtt-les-heritiers/templates/chat-generic-result.html`, rollData) + }, rollData) + + } + + /* -------------------------------------------- */ + static getUsers(filter) { + return game.users.filter(filter).map(user => user._id); + } + + /* -------------------------------------------- */ + static getWhisperRecipients(rollMode, name) { + switch (rollMode) { + case "blindroll": return this.getUsers(user => user.isGM); + case "gmroll": return this.getWhisperRecipientsAndGMs(name); + case "selfroll": return [game.user.id]; + } + return undefined; + } + /* -------------------------------------------- */ + static getWhisperRecipientsAndGMs(name) { + let recep1 = ChatMessage.getWhisperRecipients(name) || []; + return recep1.concat(ChatMessage.getWhisperRecipients('GM')); + } + + /* -------------------------------------------- */ + static blindMessageToGM(chatOptions) { + let chatGM = duplicate(chatOptions); + chatGM.whisper = this.getUsers(user => user.isGM); + chatGM.content = "Blinde message of " + game.user.name + "
" + chatOptions.content; + console.log("blindMessageToGM", chatGM); + game.socket.emit("system.fvtt-les-heritiers", { msg: "msg_gm_chat_message", data: chatGM }); + } + + /* -------------------------------------------- */ + static async searchItem(dataItem) { + let item + if (dataItem.pack) { + let id = dataItem.id || dataItem._id + let items = await this.loadCompendium(dataItem.pack, item => item.id == id) + item = items[0] || undefined + } else { + item = game.items.get(dataItem.id) + } + return item + } + + /* -------------------------------------------- */ + static split3Columns(data) { + + let array = [[], [], []]; + if (data == undefined) return array; + + let col = 0; + for (let key in data) { + let keyword = data[key]; + keyword.key = key; // Self-reference + array[col].push(keyword); + col++; + if (col == 3) col = 0; + } + return array; + } + + /* -------------------------------------------- */ + static async createChatMessage(name, rollMode, chatOptions, rollData = undefined) { + switch (rollMode) { + case "blindroll": // GM only + if (!game.user.isGM) { + this.blindMessageToGM(chatOptions); + + chatOptions.whisper = [game.user.id]; + chatOptions.content = "Message only to the GM"; + } + else { + chatOptions.whisper = this.getUsers(user => user.isGM); + } + break; + default: + chatOptions.whisper = this.getWhisperRecipients(rollMode, name); + break; + } + chatOptions.alias = chatOptions.alias || name + let msg = await ChatMessage.create(chatOptions) + console.log("=======>", rollData) + msg.setFlag("world", "hawkmoon-roll", rollData) + } + + /* -------------------------------------------- */ + static getBasicRollData() { + let rollData = { + rollId: randomID(16), + rollMode: game.settings.get("core", "rollMode"), + modificateursOptions: this.getModificateurOptions(), + pointAmeOptions: this.getPointAmeOptions(), + difficulte: 0, + modificateur: 0, + bonusMalusContext: 0 + } + return rollData + } + + /* -------------------------------------------- */ + static updateWithTarget(rollData) { + let target = HeritiersUtility.getTarget() + if (target) { + rollData.defenderTokenId = target.id + let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor + rollData.armeDefense = defender.getBestDefenseValue() + rollData.targetVigueur = defender.getVigueur() + if (rollData.armeDefense) { + rollData.difficulte = rollData.armeDefense.system.totalDefensif + } else { + ui.notifications.warn("Aucune arme de défense équipée, difficulté manuelle à positionner.") + } + } + } + + /* -------------------------------------------- */ + static createChatWithRollMode(name, chatOptions, rollData = undefined) { + this.createChatMessage(name, game.settings.get("core", "rollMode"), chatOptions, rollData) + } + + /* -------------------------------------------- */ + static applyBonneAventureRoll(li, changed, addedBonus) { + let msgId = li.data("message-id") + let msg = game.messages.get(msgId) + if (msg) { + let rollData = msg.getFlag("world", "hawkmoon-roll") + let actor = this.getActorFromRollData(rollData) + actor.changeBonneAventure(changed) + rollData.isReroll = true + rollData.textBonus = "Bonus de Points d'Aventure" + if (addedBonus == "reroll") { + HeritiersUtility.rollHeritiers(rollData) + } else { + rollData.addedBonus = addedBonus + HeritiersUtility.bonusRollHeritiers(rollData) + } + } + } + + /* -------------------------------------------- */ + static applyEclatRoll(li, changed, addedBonus) { + let msgId = li.data("message-id") + let msg = game.messages.get(msgId) + if (msg) { + let rollData = msg.getFlag("world", "hawkmoon-roll") + let actor = this.getActorFromRollData(rollData) + actor.changeEclat(changed) + rollData.isReroll = true + rollData.textBonus = "Bonus d'Eclat" + if (addedBonus == "reroll") { + HeritiersUtility.rollHeritiers(rollData) + } else { + rollData.addedBonus = addedBonus + HeritiersUtility.bonusRollHeritiers(rollData) + } + } + } + + /* -------------------------------------------- */ + static chatRollMenu(html, options) { + let canApply = li => canvas.tokens.controlled.length && li.find(".hawkmoon-roll").length + let canApplyBA = function (li) { + let message = game.messages.get(li.attr("data-message-id")) + let rollData = message.getFlag("world", "hawkmoon-roll") + let actor = this.getActorFromRollData(rollData) + return (!rollData.isReroll && actor.getBonneAventure() > 0) + } + let canApplyPE = function (li) { + let message = game.messages.get(li.attr("data-message-id")) + let rollData = message.getFlag("world", "hawkmoon-roll") + let actor = this.getActorFromRollData(rollData) + return (!rollData.isReroll && actor.getEclat() > 0) + } + options.push( + { + name: "Ajouer +3 (1 point de Bonne Aventure)", + icon: "", + condition: canApply && canApplyBA, + callback: li => HeritiersUtility.applyBonneAventureRoll(li, -1, "+3") + } + ) + options.push( + { + name: "Ajouter +10 (1 Point d'Eclat)", + icon: "", + condition: canApply && canApplyPE, + callback: li => HeritiersUtility.applyEclatRoll(li, -1, "+10") + } + ) + options.push( + { + name: "Relancer le dé (1 point d'Eclat)", + icon: "", + condition: canApply && canApplyPE, + callback: li => HeritiersUtility.applyEclatRoll(li, -3, "reroll") + } + ) + return options + } + + /* -------------------------------------------- */ + static async confirmDelete(actorSheet, li) { + let itemId = li.data("item-id"); + let msgTxt = "

Are you sure to remove this Item ?"; + let buttons = { + delete: { + icon: '', + label: "Yes, remove it", + callback: () => { + actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]); + li.slideUp(200, () => actorSheet.render(false)); + } + }, + cancel: { + icon: '', + label: "Cancel" + } + } + msgTxt += "

"; + let d = new Dialog({ + title: "Confirm removal", + content: msgTxt, + buttons: buttons, + default: "cancel" + }); + d.render(true); + } + + /************************************************************************************/ + static async __create_talents_table() { + let compName = "fvtt-les-heritiers.talents-cellule" + const compData = await HeritiersUtility.loadCompendium(compName) + let talents = compData.map(i => i.toObject()) + + let htmlTab = ""; + for (let entryData of talents) { + console.log(entryData) + htmlTab += `` + htmlTab += ``; + //htmlTab += ``; + htmlTab += "\n"; + } + htmlTab += "
@UUID[Compendium.${compName}.${entryData._id}]{${entryData.name}}${entryData.system.description}${entryData.system.resumebonus}
"; + await JournalEntry.create({ name: 'Liste des Talents de Cellule', content: htmlTab }); + } +} diff --git a/modules/xregexp-all.js b/modules/xregexp-all.js new file mode 100644 index 0000000..19543a6 --- /dev/null +++ b/modules/xregexp-all.js @@ -0,0 +1,8225 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.XRegExp = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i + * Steven Levithan (c) 2012-present MIT License + */ +var _default = function _default(XRegExp) { + var REGEX_DATA = 'xregexp'; + var subParts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g; + var parts = XRegExp.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/, subParts], 'g', { + conjunction: 'or' + }); + /** + * Strips a leading `^` and trailing unescaped `$`, if both are present. + * + * @private + * @param {String} pattern Pattern to process. + * @returns {String} Pattern with edge anchors removed. + */ + + function deanchor(pattern) { + // Allow any number of empty noncapturing groups before/after anchors, because regexes + // built/generated by XRegExp sometimes include them + var leadingAnchor = /^(?:\(\?:\))*\^/; + var trailingAnchor = /\$(?:\(\?:\))*$/; + + if (leadingAnchor.test(pattern) && trailingAnchor.test(pattern) && // Ensure that the trailing `$` isn't escaped + trailingAnchor.test(pattern.replace(/\\[\s\S]/g, ''))) { + return pattern.replace(leadingAnchor, '').replace(trailingAnchor, ''); + } + + return pattern; + } + /** + * Converts the provided value to an XRegExp. Native RegExp flags are not preserved. + * + * @private + * @param {String|RegExp} value Value to convert. + * @param {Boolean} [addFlagX] Whether to apply the `x` flag in cases when `value` is not + * already a regex generated by XRegExp + * @returns {RegExp} XRegExp object with XRegExp syntax applied. + */ + + + function asXRegExp(value, addFlagX) { + var flags = addFlagX ? 'x' : ''; + return XRegExp.isRegExp(value) ? value[REGEX_DATA] && value[REGEX_DATA].captureNames ? // Don't recompile, to preserve capture names + value : // Recompile as XRegExp + XRegExp(value.source, flags) : // Compile string as XRegExp + XRegExp(value, flags); + } + + function interpolate(substitution) { + return substitution instanceof RegExp ? substitution : XRegExp.escape(substitution); + } + + function reduceToSubpatternsObject(subpatterns, interpolated, subpatternIndex) { + subpatterns["subpattern".concat(subpatternIndex)] = interpolated; + return subpatterns; + } + + function embedSubpatternAfter(raw, subpatternIndex, rawLiterals) { + var hasSubpattern = subpatternIndex < rawLiterals.length - 1; + return raw + (hasSubpattern ? "{{subpattern".concat(subpatternIndex, "}}") : ''); + } + /** + * Provides tagged template literals that create regexes with XRegExp syntax and flags. The + * provided pattern is handled as a raw string, so backslashes don't need to be escaped. + * + * Interpolation of strings and regexes shares the features of `XRegExp.build`. Interpolated + * patterns are treated as atomic units when quantified, interpolated strings have their special + * characters escaped, a leading `^` and trailing unescaped `$` are stripped from interpolated + * regexes if both are present, and any backreferences within an interpolated regex are + * rewritten to work within the overall pattern. + * + * @memberOf XRegExp + * @param {String} [flags] Any combination of XRegExp flags. + * @returns {Function} Handler for template literals that construct regexes with XRegExp syntax. + * @example + * + * const h12 = /1[0-2]|0?[1-9]/; + * const h24 = /2[0-3]|[01][0-9]/; + * const hours = XRegExp.tag('x')`${h12} : | ${h24}`; + * const minutes = /^[0-5][0-9]$/; + * // Note that explicitly naming the 'minutes' group is required for named backreferences + * const time = XRegExp.tag('x')`^ ${hours} (?${minutes}) $`; + * time.test('10:59'); // -> true + * XRegExp.exec('10:59', time).minutes; // -> '59' + */ + + + XRegExp.tag = function (flags) { + return function (literals) { + var _context, _context2; + + for (var _len = arguments.length, substitutions = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + substitutions[_key - 1] = arguments[_key]; + } + + var subpatterns = (0, _reduce["default"])(_context = (0, _map["default"])(substitutions).call(substitutions, interpolate)).call(_context, reduceToSubpatternsObject, {}); + var pattern = (0, _map["default"])(_context2 = literals.raw).call(_context2, embedSubpatternAfter).join(''); + return XRegExp.build(pattern, subpatterns, flags); + }; + }; + /** + * Builds regexes using named subpatterns, for readability and pattern reuse. Backreferences in + * the outer pattern and provided subpatterns are automatically renumbered to work correctly. + * Native flags used by provided subpatterns are ignored in favor of the `flags` argument. + * + * @memberOf XRegExp + * @param {String} pattern XRegExp pattern using `{{name}}` for embedded subpatterns. Allows + * `({{name}})` as shorthand for `(?{{name}})`. Patterns cannot be embedded within + * character classes. + * @param {Object} subs Lookup object for named subpatterns. Values can be strings or regexes. A + * leading `^` and trailing unescaped `$` are stripped from subpatterns, if both are present. + * @param {String} [flags] Any combination of XRegExp flags. + * @returns {RegExp} Regex with interpolated subpatterns. + * @example + * + * const time = XRegExp.build('(?x)^ {{hours}} ({{minutes}}) $', { + * hours: XRegExp.build('{{h12}} : | {{h24}}', { + * h12: /1[0-2]|0?[1-9]/, + * h24: /2[0-3]|[01][0-9]/ + * }, 'x'), + * minutes: /^[0-5][0-9]$/ + * }); + * time.test('10:59'); // -> true + * XRegExp.exec('10:59', time).minutes; // -> '59' + */ + + + XRegExp.build = function (pattern, subs, flags) { + flags = flags || ''; // Used with `asXRegExp` calls for `pattern` and subpatterns in `subs`, to work around how + // some browsers convert `RegExp('\n')` to a regex that contains the literal characters `\` + // and `n`. See more details at . + + var addFlagX = (0, _includes["default"])(flags).call(flags, 'x'); + var inlineFlags = /^\(\?([\w$]+)\)/.exec(pattern); // Add flags within a leading mode modifier to the overall pattern's flags + + if (inlineFlags) { + flags = XRegExp._clipDuplicates(flags + inlineFlags[1]); + } + + var data = {}; + + for (var p in subs) { + if (subs.hasOwnProperty(p)) { + // Passing to XRegExp enables extended syntax and ensures independent validity, + // lest an unescaped `(`, `)`, `[`, or trailing `\` breaks the `(?:)` wrapper. For + // subpatterns provided as native regexes, it dies on octals and adds the property + // used to hold extended regex instance data, for simplicity. + var sub = asXRegExp(subs[p], addFlagX); + data[p] = { + // Deanchoring allows embedding independently useful anchored regexes. If you + // really need to keep your anchors, double them (i.e., `^^...$$`). + pattern: deanchor(sub.source), + names: sub[REGEX_DATA].captureNames || [] + }; + } + } // Passing to XRegExp dies on octals and ensures the outer pattern is independently valid; + // helps keep this simple. Named captures will be put back. + + + var patternAsRegex = asXRegExp(pattern, addFlagX); // 'Caps' is short for 'captures' + + var numCaps = 0; + var numPriorCaps; + var numOuterCaps = 0; + var outerCapsMap = [0]; + var outerCapNames = patternAsRegex[REGEX_DATA].captureNames || []; + var output = patternAsRegex.source.replace(parts, function ($0, $1, $2, $3, $4) { + var subName = $1 || $2; + var capName; + var intro; + var localCapIndex; // Named subpattern + + if (subName) { + var _context3; + + if (!data.hasOwnProperty(subName)) { + throw new ReferenceError("Undefined property ".concat($0)); + } // Named subpattern was wrapped in a capturing group + + + if ($1) { + capName = outerCapNames[numOuterCaps]; + outerCapsMap[++numOuterCaps] = ++numCaps; // If it's a named group, preserve the name. Otherwise, use the subpattern name + // as the capture name + + intro = "(?<".concat(capName || subName, ">"); + } else { + intro = '(?:'; + } + + numPriorCaps = numCaps; + var rewrittenSubpattern = data[subName].pattern.replace(subParts, function (match, paren, backref) { + // Capturing group + if (paren) { + capName = data[subName].names[numCaps - numPriorCaps]; + ++numCaps; // If the current capture has a name, preserve the name + + if (capName) { + return "(?<".concat(capName, ">"); + } // Backreference + + } else if (backref) { + localCapIndex = +backref - 1; // Rewrite the backreference + + return data[subName].names[localCapIndex] ? // Need to preserve the backreference name in case using flag `n` + "\\k<".concat(data[subName].names[localCapIndex], ">") : "\\".concat(+backref + numPriorCaps); + } + + return match; + }); + return (0, _concat["default"])(_context3 = "".concat(intro)).call(_context3, rewrittenSubpattern, ")"); + } // Capturing group + + + if ($3) { + capName = outerCapNames[numOuterCaps]; + outerCapsMap[++numOuterCaps] = ++numCaps; // If the current capture has a name, preserve the name + + if (capName) { + return "(?<".concat(capName, ">"); + } // Backreference + + } else if ($4) { + localCapIndex = +$4 - 1; // Rewrite the backreference + + return outerCapNames[localCapIndex] ? // Need to preserve the backreference name in case using flag `n` + "\\k<".concat(outerCapNames[localCapIndex], ">") : "\\".concat(outerCapsMap[+$4]); + } + + return $0; + }); + return XRegExp(output, flags); + }; +}; + +exports["default"] = _default; +module.exports = exports.default; +},{"@babel/runtime-corejs3/core-js-stable/instance/concat":12,"@babel/runtime-corejs3/core-js-stable/instance/includes":15,"@babel/runtime-corejs3/core-js-stable/instance/map":17,"@babel/runtime-corejs3/core-js-stable/instance/reduce":18,"@babel/runtime-corejs3/core-js-stable/object/define-property":22,"@babel/runtime-corejs3/helpers/interopRequireDefault":34}],2:[function(require,module,exports){ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); + +var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property"); + +_Object$defineProperty(exports, "__esModule", { + value: true +}); + +exports["default"] = void 0; + +var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice")); + +var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat")); + +var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes")); + +/*! + * XRegExp.matchRecursive 4.4.0 + * + * Steven Levithan (c) 2009-present MIT License + */ +var _default = function _default(XRegExp) { + /** + * Returns a match detail object composed of the provided values. + * + * @private + */ + function row(name, value, start, end) { + return { + name: name, + value: value, + start: start, + end: end + }; + } + /** + * Returns an array of match strings between outermost left and right delimiters, or an array of + * objects with detailed match parts and position data. An error is thrown if delimiters are + * unbalanced within the data. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {String} left Left delimiter as an XRegExp pattern. + * @param {String} right Right delimiter as an XRegExp pattern. + * @param {String} [flags] Any native or XRegExp flags, used for the left and right delimiters. + * @param {Object} [options] Lets you specify `valueNames` and `escapeChar` options. + * @returns {!Array} Array of matches, or an empty array. + * @example + * + * // Basic usage + * let str = '(t((e))s)t()(ing)'; + * XRegExp.matchRecursive(str, '\\(', '\\)', 'g'); + * // -> ['t((e))s', '', 'ing'] + * + * // Extended information mode with valueNames + * str = 'Here is
an
example'; + * XRegExp.matchRecursive(str, '', '
', 'gi', { + * valueNames: ['between', 'left', 'match', 'right'] + * }); + * // -> [ + * // {name: 'between', value: 'Here is ', start: 0, end: 8}, + * // {name: 'left', value: '
', start: 8, end: 13}, + * // {name: 'match', value: '
an
', start: 13, end: 27}, + * // {name: 'right', value: '
', start: 27, end: 33}, + * // {name: 'between', value: ' example', start: 33, end: 41} + * // ] + * + * // Omitting unneeded parts with null valueNames, and using escapeChar + * str = '...{1}.\\{{function(x,y){return {y:x}}}'; + * XRegExp.matchRecursive(str, '{', '}', 'g', { + * valueNames: ['literal', null, 'value', null], + * escapeChar: '\\' + * }); + * // -> [ + * // {name: 'literal', value: '...', start: 0, end: 3}, + * // {name: 'value', value: '1', start: 4, end: 5}, + * // {name: 'literal', value: '.\\{', start: 6, end: 9}, + * // {name: 'value', value: 'function(x,y){return {y:x}}', start: 10, end: 37} + * // ] + * + * // Sticky mode via flag y + * str = '<1><<<2>>><3>4<5>'; + * XRegExp.matchRecursive(str, '<', '>', 'gy'); + * // -> ['1', '<<2>>', '3'] + */ + + + XRegExp.matchRecursive = function (str, left, right, flags, options) { + flags = flags || ''; + options = options || {}; + var global = (0, _includes["default"])(flags).call(flags, 'g'); + var sticky = (0, _includes["default"])(flags).call(flags, 'y'); // Flag `y` is controlled internally + + var basicFlags = flags.replace(/y/g, ''); + var _options = options, + escapeChar = _options.escapeChar; + var vN = options.valueNames; + var output = []; + var openTokens = 0; + var delimStart = 0; + var delimEnd = 0; + var lastOuterEnd = 0; + var outerStart; + var innerStart; + var leftMatch; + var rightMatch; + var esc; + left = XRegExp(left, basicFlags); + right = XRegExp(right, basicFlags); + + if (escapeChar) { + var _context, _context2; + + if (escapeChar.length > 1) { + throw new Error('Cannot use more than one escape character'); + } + + escapeChar = XRegExp.escape(escapeChar); // Example of concatenated `esc` regex: + // `escapeChar`: '%' + // `left`: '<' + // `right`: '>' + // Regex is: /(?:%[\S\s]|(?:(?!<|>)[^%])+)+/ + + esc = new RegExp((0, _concat["default"])(_context = (0, _concat["default"])(_context2 = "(?:".concat(escapeChar, "[\\S\\s]|(?:(?!")).call(_context2, // Using `XRegExp.union` safely rewrites backreferences in `left` and `right`. + // Intentionally not passing `basicFlags` to `XRegExp.union` since any syntax + // transformation resulting from those flags was already applied to `left` and + // `right` when they were passed through the XRegExp constructor above. + XRegExp.union([left, right], '', { + conjunction: 'or' + }).source, ")[^")).call(_context, escapeChar, "])+)+"), // Flags `gy` not needed here + flags.replace(/[^imu]+/g, '')); + } + + while (true) { + // If using an escape character, advance to the delimiter's next starting position, + // skipping any escaped characters in between + if (escapeChar) { + delimEnd += (XRegExp.exec(str, esc, delimEnd, 'sticky') || [''])[0].length; + } + + leftMatch = XRegExp.exec(str, left, delimEnd); + rightMatch = XRegExp.exec(str, right, delimEnd); // Keep the leftmost match only + + if (leftMatch && rightMatch) { + if (leftMatch.index <= rightMatch.index) { + rightMatch = null; + } else { + leftMatch = null; + } + } // Paths (LM: leftMatch, RM: rightMatch, OT: openTokens): + // LM | RM | OT | Result + // 1 | 0 | 1 | loop + // 1 | 0 | 0 | loop + // 0 | 1 | 1 | loop + // 0 | 1 | 0 | throw + // 0 | 0 | 1 | throw + // 0 | 0 | 0 | break + // The paths above don't include the sticky mode special case. The loop ends after the + // first completed match if not `global`. + + + if (leftMatch || rightMatch) { + delimStart = (leftMatch || rightMatch).index; + delimEnd = delimStart + (leftMatch || rightMatch)[0].length; + } else if (!openTokens) { + break; + } + + if (sticky && !openTokens && delimStart > lastOuterEnd) { + break; + } + + if (leftMatch) { + if (!openTokens) { + outerStart = delimStart; + innerStart = delimEnd; + } + + ++openTokens; + } else if (rightMatch && openTokens) { + if (! --openTokens) { + if (vN) { + if (vN[0] && outerStart > lastOuterEnd) { + output.push(row(vN[0], (0, _slice["default"])(str).call(str, lastOuterEnd, outerStart), lastOuterEnd, outerStart)); + } + + if (vN[1]) { + output.push(row(vN[1], (0, _slice["default"])(str).call(str, outerStart, innerStart), outerStart, innerStart)); + } + + if (vN[2]) { + output.push(row(vN[2], (0, _slice["default"])(str).call(str, innerStart, delimStart), innerStart, delimStart)); + } + + if (vN[3]) { + output.push(row(vN[3], (0, _slice["default"])(str).call(str, delimStart, delimEnd), delimStart, delimEnd)); + } + } else { + output.push((0, _slice["default"])(str).call(str, innerStart, delimStart)); + } + + lastOuterEnd = delimEnd; + + if (!global) { + break; + } + } + } else { + throw new Error('Unbalanced delimiter found in string'); + } // If the delimiter matched an empty string, avoid an infinite loop + + + if (delimStart === delimEnd) { + ++delimEnd; + } + } + + if (global && !sticky && vN && vN[0] && str.length > lastOuterEnd) { + output.push(row(vN[0], (0, _slice["default"])(str).call(str, lastOuterEnd), lastOuterEnd, str.length)); + } + + return output; + }; +}; + +exports["default"] = _default; +module.exports = exports.default; +},{"@babel/runtime-corejs3/core-js-stable/instance/concat":12,"@babel/runtime-corejs3/core-js-stable/instance/includes":15,"@babel/runtime-corejs3/core-js-stable/instance/slice":19,"@babel/runtime-corejs3/core-js-stable/object/define-property":22,"@babel/runtime-corejs3/helpers/interopRequireDefault":34}],3:[function(require,module,exports){ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); + +var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property"); + +_Object$defineProperty(exports, "__esModule", { + value: true +}); + +exports["default"] = void 0; + +var _getIterator2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/get-iterator")); + +var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array")); + +var _getIteratorMethod2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/get-iterator-method")); + +var _symbol = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/symbol")); + +var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from")); + +var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice")); + +var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes")); + +var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat")); + +var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each")); + +function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof _symbol["default"] === "undefined" || (0, _getIteratorMethod2["default"])(o) == null) { if ((0, _isArray["default"])(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = (0, _getIterator2["default"])(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { var _context4; if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = (0, _slice["default"])(_context4 = Object.prototype.toString.call(o)).call(_context4, 8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return (0, _from["default"])(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +/*! + * XRegExp Unicode Base 4.4.0 + * + * Steven Levithan (c) 2008-present MIT License + */ +var _default = function _default(XRegExp) { + /** + * Adds base support for Unicode matching: + * - Adds syntax `\p{..}` for matching Unicode tokens. Tokens can be inverted using `\P{..}` or + * `\p{^..}`. Token names ignore case, spaces, hyphens, and underscores. You can omit the + * braces for token names that are a single letter (e.g. `\pL` or `PL`). + * - Adds flag A (astral), which enables 21-bit Unicode support. + * - Adds the `XRegExp.addUnicodeData` method used by other addons to provide character data. + * + * Unicode Base relies on externally provided Unicode character data. Official addons are + * available to provide data for Unicode categories, scripts, blocks, and properties. + * + * @requires XRegExp + */ + // ==--------------------------== + // Private stuff + // ==--------------------------== + // Storage for Unicode data + var unicode = {}; // Reuse utils + + var dec = XRegExp._dec; + var hex = XRegExp._hex; + var pad4 = XRegExp._pad4; // Generates a token lookup name: lowercase, with hyphens, spaces, and underscores removed + + function normalize(name) { + return name.replace(/[- _]+/g, '').toLowerCase(); + } // Gets the decimal code of a literal code unit, \xHH, \uHHHH, or a backslash-escaped literal + + + function charCode(chr) { + var esc = /^\\[xu](.+)/.exec(chr); + return esc ? dec(esc[1]) : chr.charCodeAt(chr[0] === '\\' ? 1 : 0); + } // Inverts a list of ordered BMP characters and ranges + + + function invertBmp(range) { + var output = ''; + var lastEnd = -1; + (0, _forEach["default"])(XRegExp).call(XRegExp, range, /(\\x..|\\u....|\\?[\s\S])(?:-(\\x..|\\u....|\\?[\s\S]))?/, function (m) { + var start = charCode(m[1]); + + if (start > lastEnd + 1) { + output += "\\u".concat(pad4(hex(lastEnd + 1))); + + if (start > lastEnd + 2) { + output += "-\\u".concat(pad4(hex(start - 1))); + } + } + + lastEnd = charCode(m[2] || m[1]); + }); + + if (lastEnd < 0xFFFF) { + output += "\\u".concat(pad4(hex(lastEnd + 1))); + + if (lastEnd < 0xFFFE) { + output += '-\\uFFFF'; + } + } + + return output; + } // Generates an inverted BMP range on first use + + + function cacheInvertedBmp(slug) { + var prop = 'b!'; + return unicode[slug][prop] || (unicode[slug][prop] = invertBmp(unicode[slug].bmp)); + } // Combines and optionally negates BMP and astral data + + + function buildAstral(slug, isNegated) { + var item = unicode[slug]; + var combined = ''; + + if (item.bmp && !item.isBmpLast) { + var _context; + + combined = (0, _concat["default"])(_context = "[".concat(item.bmp, "]")).call(_context, item.astral ? '|' : ''); + } + + if (item.astral) { + combined += item.astral; + } + + if (item.isBmpLast && item.bmp) { + var _context2; + + combined += (0, _concat["default"])(_context2 = "".concat(item.astral ? '|' : '', "[")).call(_context2, item.bmp, "]"); + } // Astral Unicode tokens always match a code point, never a code unit + + + return isNegated ? "(?:(?!".concat(combined, ")(?:[\uD800-\uDBFF][\uDC00-\uDFFF]|[\0-\uFFFF]))") : "(?:".concat(combined, ")"); + } // Builds a complete astral pattern on first use + + + function cacheAstral(slug, isNegated) { + var prop = isNegated ? 'a!' : 'a='; + return unicode[slug][prop] || (unicode[slug][prop] = buildAstral(slug, isNegated)); + } // ==--------------------------== + // Core functionality + // ==--------------------------== + + /* + * Add astral mode (flag A) and Unicode token syntax: `\p{..}`, `\P{..}`, `\p{^..}`, `\pC`. + */ + + + XRegExp.addToken( // Use `*` instead of `+` to avoid capturing `^` as the token name in `\p{^}` + /\\([pP])(?:{(\^?)([^}]*)}|([A-Za-z]))/, function (match, scope, flags) { + var ERR_DOUBLE_NEG = 'Invalid double negation '; + var ERR_UNKNOWN_NAME = 'Unknown Unicode token '; + var ERR_UNKNOWN_REF = 'Unicode token missing data '; + var ERR_ASTRAL_ONLY = 'Astral mode required for Unicode token '; + var ERR_ASTRAL_IN_CLASS = 'Astral mode does not support Unicode tokens within character classes'; // Negated via \P{..} or \p{^..} + + var isNegated = match[1] === 'P' || !!match[2]; // Switch from BMP (0-FFFF) to astral (0-10FFFF) mode via flag A + + var isAstralMode = (0, _includes["default"])(flags).call(flags, 'A'); // Token lookup name. Check `[4]` first to avoid passing `undefined` via `\p{}` + + var slug = normalize(match[4] || match[3]); // Token data object + + var item = unicode[slug]; + + if (match[1] === 'P' && match[2]) { + throw new SyntaxError(ERR_DOUBLE_NEG + match[0]); + } + + if (!unicode.hasOwnProperty(slug)) { + throw new SyntaxError(ERR_UNKNOWN_NAME + match[0]); + } // Switch to the negated form of the referenced Unicode token + + + if (item.inverseOf) { + slug = normalize(item.inverseOf); + + if (!unicode.hasOwnProperty(slug)) { + var _context3; + + throw new ReferenceError((0, _concat["default"])(_context3 = "".concat(ERR_UNKNOWN_REF + match[0], " -> ")).call(_context3, item.inverseOf)); + } + + item = unicode[slug]; + isNegated = !isNegated; + } + + if (!(item.bmp || isAstralMode)) { + throw new SyntaxError(ERR_ASTRAL_ONLY + match[0]); + } + + if (isAstralMode) { + if (scope === 'class') { + throw new SyntaxError(ERR_ASTRAL_IN_CLASS); + } + + return cacheAstral(slug, isNegated); + } + + return scope === 'class' ? isNegated ? cacheInvertedBmp(slug) : item.bmp : "".concat((isNegated ? '[^' : '[') + item.bmp, "]"); + }, { + scope: 'all', + optionalFlags: 'A', + leadChar: '\\' + }); + /** + * Adds to the list of Unicode tokens that XRegExp regexes can match via `\p` or `\P`. + * + * @memberOf XRegExp + * @param {Array} data Objects with named character ranges. Each object may have properties + * `name`, `alias`, `isBmpLast`, `inverseOf`, `bmp`, and `astral`. All but `name` are + * optional, although one of `bmp` or `astral` is required (unless `inverseOf` is set). If + * `astral` is absent, the `bmp` data is used for BMP and astral modes. If `bmp` is absent, + * the name errors in BMP mode but works in astral mode. If both `bmp` and `astral` are + * provided, the `bmp` data only is used in BMP mode, and the combination of `bmp` and + * `astral` data is used in astral mode. `isBmpLast` is needed when a token matches orphan + * high surrogates *and* uses surrogate pairs to match astral code points. The `bmp` and + * `astral` data should be a combination of literal characters and `\xHH` or `\uHHHH` escape + * sequences, with hyphens to create ranges. Any regex metacharacters in the data should be + * escaped, apart from range-creating hyphens. The `astral` data can additionally use + * character classes and alternation, and should use surrogate pairs to represent astral code + * points. `inverseOf` can be used to avoid duplicating character data if a Unicode token is + * defined as the exact inverse of another token. + * @example + * + * // Basic use + * XRegExp.addUnicodeData([{ + * name: 'XDigit', + * alias: 'Hexadecimal', + * bmp: '0-9A-Fa-f' + * }]); + * XRegExp('\\p{XDigit}:\\p{Hexadecimal}+').test('0:3D'); // -> true + */ + + XRegExp.addUnicodeData = function (data) { + var ERR_NO_NAME = 'Unicode token requires name'; + var ERR_NO_DATA = 'Unicode token has no character data '; + + var _iterator = _createForOfIteratorHelper(data), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var item = _step.value; + + if (!item.name) { + throw new Error(ERR_NO_NAME); + } + + if (!(item.inverseOf || item.bmp || item.astral)) { + throw new Error(ERR_NO_DATA + item.name); + } + + unicode[normalize(item.name)] = item; + + if (item.alias) { + unicode[normalize(item.alias)] = item; + } + } // Reset the pattern cache used by the `XRegExp` constructor, since the same pattern and + // flags might now produce different results + + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + XRegExp.cache.flush('patterns'); + }; + /** + * @ignore + * + * Return a reference to the internal Unicode definition structure for the given Unicode + * Property if the given name is a legal Unicode Property for use in XRegExp `\p` or `\P` regex + * constructs. + * + * @memberOf XRegExp + * @param {String} name Name by which the Unicode Property may be recognized (case-insensitive), + * e.g. `'N'` or `'Number'`. The given name is matched against all registered Unicode + * Properties and Property Aliases. + * @returns {Object} Reference to definition structure when the name matches a Unicode Property. + * + * @note + * For more info on Unicode Properties, see also http://unicode.org/reports/tr18/#Categories. + * + * @note + * This method is *not* part of the officially documented API and may change or be removed in + * the future. It is meant for userland code that wishes to reuse the (large) internal Unicode + * structures set up by XRegExp. + */ + + + XRegExp._getUnicodeProperty = function (name) { + var slug = normalize(name); + return unicode[slug]; + }; +}; + +exports["default"] = _default; +module.exports = exports.default; +},{"@babel/runtime-corejs3/core-js-stable/array/from":10,"@babel/runtime-corejs3/core-js-stable/array/is-array":11,"@babel/runtime-corejs3/core-js-stable/instance/concat":12,"@babel/runtime-corejs3/core-js-stable/instance/for-each":14,"@babel/runtime-corejs3/core-js-stable/instance/includes":15,"@babel/runtime-corejs3/core-js-stable/instance/slice":19,"@babel/runtime-corejs3/core-js-stable/object/define-property":22,"@babel/runtime-corejs3/core-js-stable/symbol":24,"@babel/runtime-corejs3/core-js/get-iterator":28,"@babel/runtime-corejs3/core-js/get-iterator-method":27,"@babel/runtime-corejs3/helpers/interopRequireDefault":34}],4:[function(require,module,exports){ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); + +var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property"); + +_Object$defineProperty(exports, "__esModule", { + value: true +}); + +exports["default"] = void 0; + +var _blocks = _interopRequireDefault(require("../../tools/output/blocks")); + +/*! + * XRegExp Unicode Blocks 4.4.0 + * + * Steven Levithan (c) 2010-present MIT License + * Unicode data by Mathias Bynens + */ +var _default = function _default(XRegExp) { + /** + * Adds support for all Unicode blocks. Block names use the prefix 'In'. E.g., + * `\p{InBasicLatin}`. Token names are case insensitive, and any spaces, hyphens, and + * underscores are ignored. + * + * Uses Unicode 13.0.0. + * + * @requires XRegExp, Unicode Base + */ + if (!XRegExp.addUnicodeData) { + throw new ReferenceError('Unicode Base must be loaded before Unicode Blocks'); + } + + XRegExp.addUnicodeData(_blocks["default"]); +}; + +exports["default"] = _default; +module.exports = exports.default; +},{"../../tools/output/blocks":222,"@babel/runtime-corejs3/core-js-stable/object/define-property":22,"@babel/runtime-corejs3/helpers/interopRequireDefault":34}],5:[function(require,module,exports){ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); + +var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property"); + +_Object$defineProperty(exports, "__esModule", { + value: true +}); + +exports["default"] = void 0; + +var _categories = _interopRequireDefault(require("../../tools/output/categories")); + +/*! + * XRegExp Unicode Categories 4.4.0 + * + * Steven Levithan (c) 2010-present MIT License + * Unicode data by Mathias Bynens + */ +var _default = function _default(XRegExp) { + /** + * Adds support for Unicode's general categories. E.g., `\p{Lu}` or `\p{Uppercase Letter}`. See + * category descriptions in UAX #44 . Token + * names are case insensitive, and any spaces, hyphens, and underscores are ignored. + * + * Uses Unicode 13.0.0. + * + * @requires XRegExp, Unicode Base + */ + if (!XRegExp.addUnicodeData) { + throw new ReferenceError('Unicode Base must be loaded before Unicode Categories'); + } + + XRegExp.addUnicodeData(_categories["default"]); +}; + +exports["default"] = _default; +module.exports = exports.default; +},{"../../tools/output/categories":223,"@babel/runtime-corejs3/core-js-stable/object/define-property":22,"@babel/runtime-corejs3/helpers/interopRequireDefault":34}],6:[function(require,module,exports){ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); + +var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property"); + +_Object$defineProperty(exports, "__esModule", { + value: true +}); + +exports["default"] = void 0; + +var _properties = _interopRequireDefault(require("../../tools/output/properties")); + +/*! + * XRegExp Unicode Properties 4.4.0 + * + * Steven Levithan (c) 2012-present MIT License + * Unicode data by Mathias Bynens + */ +var _default = function _default(XRegExp) { + /** + * Adds properties to meet the UTS #18 Level 1 RL1.2 requirements for Unicode regex support. See + * . Following are definitions of these properties from + * UAX #44 : + * + * - Alphabetic + * Characters with the Alphabetic property. Generated from: Lowercase + Uppercase + Lt + Lm + + * Lo + Nl + Other_Alphabetic. + * + * - Default_Ignorable_Code_Point + * For programmatic determination of default ignorable code points. New characters that should + * be ignored in rendering (unless explicitly supported) will be assigned in these ranges, + * permitting programs to correctly handle the default rendering of such characters when not + * otherwise supported. + * + * - Lowercase + * Characters with the Lowercase property. Generated from: Ll + Other_Lowercase. + * + * - Noncharacter_Code_Point + * Code points permanently reserved for internal use. + * + * - Uppercase + * Characters with the Uppercase property. Generated from: Lu + Other_Uppercase. + * + * - White_Space + * Spaces, separator characters and other control characters which should be treated by + * programming languages as "white space" for the purpose of parsing elements. + * + * The properties ASCII, Any, and Assigned are also included but are not defined in UAX #44. UTS + * #18 RL1.2 additionally requires support for Unicode scripts and general categories. These are + * included in XRegExp's Unicode Categories and Unicode Scripts addons. + * + * Token names are case insensitive, and any spaces, hyphens, and underscores are ignored. + * + * Uses Unicode 13.0.0. + * + * @requires XRegExp, Unicode Base + */ + if (!XRegExp.addUnicodeData) { + throw new ReferenceError('Unicode Base must be loaded before Unicode Properties'); + } + + var unicodeData = _properties["default"]; // Add non-generated data + + unicodeData.push({ + name: 'Assigned', + // Since this is defined as the inverse of Unicode category Cn (Unassigned), the Unicode + // Categories addon is required to use this property + inverseOf: 'Cn' + }); + XRegExp.addUnicodeData(unicodeData); +}; + +exports["default"] = _default; +module.exports = exports.default; +},{"../../tools/output/properties":224,"@babel/runtime-corejs3/core-js-stable/object/define-property":22,"@babel/runtime-corejs3/helpers/interopRequireDefault":34}],7:[function(require,module,exports){ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); + +var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property"); + +_Object$defineProperty(exports, "__esModule", { + value: true +}); + +exports["default"] = void 0; + +var _scripts = _interopRequireDefault(require("../../tools/output/scripts")); + +/*! + * XRegExp Unicode Scripts 4.4.0 + * + * Steven Levithan (c) 2010-present MIT License + * Unicode data by Mathias Bynens + */ +var _default = function _default(XRegExp) { + /** + * Adds support for all Unicode scripts. E.g., `\p{Latin}`. Token names are case insensitive, + * and any spaces, hyphens, and underscores are ignored. + * + * Uses Unicode 13.0.0. + * + * @requires XRegExp, Unicode Base + */ + if (!XRegExp.addUnicodeData) { + throw new ReferenceError('Unicode Base must be loaded before Unicode Scripts'); + } + + XRegExp.addUnicodeData(_scripts["default"]); +}; + +exports["default"] = _default; +module.exports = exports.default; +},{"../../tools/output/scripts":225,"@babel/runtime-corejs3/core-js-stable/object/define-property":22,"@babel/runtime-corejs3/helpers/interopRequireDefault":34}],8:[function(require,module,exports){ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); + +var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property"); + +_Object$defineProperty(exports, "__esModule", { + value: true +}); + +exports["default"] = void 0; + +var _xregexp = _interopRequireDefault(require("./xregexp")); + +var _build = _interopRequireDefault(require("./addons/build")); + +var _matchrecursive = _interopRequireDefault(require("./addons/matchrecursive")); + +var _unicodeBase = _interopRequireDefault(require("./addons/unicode-base")); + +var _unicodeBlocks = _interopRequireDefault(require("./addons/unicode-blocks")); + +var _unicodeCategories = _interopRequireDefault(require("./addons/unicode-categories")); + +var _unicodeProperties = _interopRequireDefault(require("./addons/unicode-properties")); + +var _unicodeScripts = _interopRequireDefault(require("./addons/unicode-scripts")); + +(0, _build["default"])(_xregexp["default"]); +(0, _matchrecursive["default"])(_xregexp["default"]); +(0, _unicodeBase["default"])(_xregexp["default"]); +(0, _unicodeBlocks["default"])(_xregexp["default"]); +(0, _unicodeCategories["default"])(_xregexp["default"]); +(0, _unicodeProperties["default"])(_xregexp["default"]); +(0, _unicodeScripts["default"])(_xregexp["default"]); +var _default = _xregexp["default"]; +exports["default"] = _default; +module.exports = exports.default; +},{"./addons/build":1,"./addons/matchrecursive":2,"./addons/unicode-base":3,"./addons/unicode-blocks":4,"./addons/unicode-categories":5,"./addons/unicode-properties":6,"./addons/unicode-scripts":7,"./xregexp":9,"@babel/runtime-corejs3/core-js-stable/object/define-property":22,"@babel/runtime-corejs3/helpers/interopRequireDefault":34}],9:[function(require,module,exports){ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); + +var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property"); + +_Object$defineProperty(exports, "__esModule", { + value: true +}); + +exports["default"] = void 0; + +var _getIterator2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/get-iterator")); + +var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array")); + +var _getIteratorMethod2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/get-iterator-method")); + +var _symbol = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/symbol")); + +var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from")); + +var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat")); + +var _indexOf = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/index-of")); + +var _create = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/create")); + +var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray")); + +var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each")); + +var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes")); + +var _parseInt2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/parse-int")); + +var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice")); + +var _sort = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/sort")); + +var _flags = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/flags")); + +function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof _symbol["default"] === "undefined" || (0, _getIteratorMethod2["default"])(o) == null) { if ((0, _isArray["default"])(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = (0, _getIterator2["default"])(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { var _context9; if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = (0, _slice["default"])(_context9 = Object.prototype.toString.call(o)).call(_context9, 8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return (0, _from["default"])(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +/*! + * XRegExp 4.4.0 + * + * Steven Levithan (c) 2007-present MIT License + */ + +/** + * XRegExp provides augmented, extensible regular expressions. You get additional regex syntax and + * flags, beyond what browsers support natively. XRegExp is also a regex utility belt with tools to + * make your client-side grepping simpler and more powerful, while freeing you from related + * cross-browser inconsistencies. + */ +// ==--------------------------== +// Private stuff +// ==--------------------------== +// Property name used for extended regex instance data +var REGEX_DATA = 'xregexp'; // Optional features that can be installed and uninstalled + +var features = { + astral: false, + namespacing: false +}; // Native methods to use and restore ('native' is an ES3 reserved keyword) + +var nativ = { + exec: RegExp.prototype.exec, + test: RegExp.prototype.test, + match: String.prototype.match, + replace: String.prototype.replace, + split: String.prototype.split +}; // Storage for fixed/extended native methods + +var fixed = {}; // Storage for regexes cached by `XRegExp.cache` + +var regexCache = {}; // Storage for pattern details cached by the `XRegExp` constructor + +var patternCache = {}; // Storage for regex syntax tokens added internally or by `XRegExp.addToken` + +var tokens = []; // Token scopes + +var defaultScope = 'default'; +var classScope = 'class'; // Regexes that match native regex syntax, including octals + +var nativeTokens = { + // Any native multicharacter token in default scope, or any single character + 'default': /\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?(?:[:=!]|<[=!])|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/, + // Any native multicharacter token in character class scope, or any single character + 'class': /\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/ +}; // Any backreference or dollar-prefixed character in replacement strings + +var replacementToken = /\$(?:{([\w$]+)}|<([\w$]+)>|(\d\d?|[\s\S]))/g; // Check for correct `exec` handling of nonparticipating capturing groups + +var correctExecNpcg = nativ.exec.call(/()??/, '')[1] === undefined; // Check for ES6 `flags` prop support + +var hasFlagsProp = (0, _flags["default"])(/x/) !== undefined; // Shortcut to `Object.prototype.toString` + +var _ref = {}, + toString = _ref.toString; + +function hasNativeFlag(flag) { + // Can't check based on the presence of properties/getters since browsers might support such + // properties even when they don't support the corresponding flag in regex construction (tested + // in Chrome 48, where `'unicode' in /x/` is true but trying to construct a regex with flag `u` + // throws an error) + var isSupported = true; + + try { + // Can't use regex literals for testing even in a `try` because regex literals with + // unsupported flags cause a compilation error in IE + new RegExp('', flag); // Work around a broken/incomplete IE11 polyfill for sticky introduced in core-js 3.6.0 + + if (flag === 'y') { + // Using function to avoid babel transform to regex literal + var gy = function () { + return 'gy'; + }(); + + var incompleteY = '.a'.replace(new RegExp('a', gy), '.') === '..'; + + if (incompleteY) { + isSupported = false; + } + } + } catch (exception) { + isSupported = false; + } + + return isSupported; +} // Check for ES6 `u` flag support + + +var hasNativeU = hasNativeFlag('u'); // Check for ES6 `y` flag support + +var hasNativeY = hasNativeFlag('y'); // Tracker for known flags, including addon flags + +var registeredFlags = { + g: true, + i: true, + m: true, + u: hasNativeU, + y: hasNativeY +}; +/** + * Attaches extended data and `XRegExp.prototype` properties to a regex object. + * + * @private + * @param {RegExp} regex Regex to augment. + * @param {Array} captureNames Array with capture names, or `null`. + * @param {String} xSource XRegExp pattern used to generate `regex`, or `null` if N/A. + * @param {String} xFlags XRegExp flags used to generate `regex`, or `null` if N/A. + * @param {Boolean} [isInternalOnly=false] Whether the regex will be used only for internal + * operations, and never exposed to users. For internal-only regexes, we can improve perf by + * skipping some operations like attaching `XRegExp.prototype` properties. + * @returns {!RegExp} Augmented regex. + */ + +function augment(regex, captureNames, xSource, xFlags, isInternalOnly) { + var _context; + + regex[REGEX_DATA] = { + captureNames: captureNames + }; + + if (isInternalOnly) { + return regex; + } // Can't auto-inherit these since the XRegExp constructor returns a nonprimitive value + + + if (regex.__proto__) { + regex.__proto__ = XRegExp.prototype; + } else { + for (var p in XRegExp.prototype) { + // An `XRegExp.prototype.hasOwnProperty(p)` check wouldn't be worth it here, since this + // is performance sensitive, and enumerable `Object.prototype` or `RegExp.prototype` + // extensions exist on `regex.prototype` anyway + regex[p] = XRegExp.prototype[p]; + } + } + + regex[REGEX_DATA].source = xSource; // Emulate the ES6 `flags` prop by ensuring flags are in alphabetical order + + regex[REGEX_DATA].flags = xFlags ? (0, _sort["default"])(_context = xFlags.split('')).call(_context).join('') : xFlags; + return regex; +} +/** + * Removes any duplicate characters from the provided string. + * + * @private + * @param {String} str String to remove duplicate characters from. + * @returns {string} String with any duplicate characters removed. + */ + + +function clipDuplicates(str) { + return nativ.replace.call(str, /([\s\S])(?=[\s\S]*\1)/g, ''); +} +/** + * Copies a regex object while preserving extended data and augmenting with `XRegExp.prototype` + * properties. The copy has a fresh `lastIndex` property (set to zero). Allows adding and removing + * flags g and y while copying the regex. + * + * @private + * @param {RegExp} regex Regex to copy. + * @param {Object} [options] Options object with optional properties: + * - `addG` {Boolean} Add flag g while copying the regex. + * - `addY` {Boolean} Add flag y while copying the regex. + * - `removeG` {Boolean} Remove flag g while copying the regex. + * - `removeY` {Boolean} Remove flag y while copying the regex. + * - `isInternalOnly` {Boolean} Whether the copied regex will be used only for internal + * operations, and never exposed to users. For internal-only regexes, we can improve perf by + * skipping some operations like attaching `XRegExp.prototype` properties. + * - `source` {String} Overrides `.source`, for special cases. + * @returns {RegExp} Copy of the provided regex, possibly with modified flags. + */ + + +function copyRegex(regex, options) { + var _context2; + + if (!XRegExp.isRegExp(regex)) { + throw new TypeError('Type RegExp expected'); + } + + var xData = regex[REGEX_DATA] || {}; + var flags = getNativeFlags(regex); + var flagsToAdd = ''; + var flagsToRemove = ''; + var xregexpSource = null; + var xregexpFlags = null; + options = options || {}; + + if (options.removeG) { + flagsToRemove += 'g'; + } + + if (options.removeY) { + flagsToRemove += 'y'; + } + + if (flagsToRemove) { + flags = nativ.replace.call(flags, new RegExp("[".concat(flagsToRemove, "]+"), 'g'), ''); + } + + if (options.addG) { + flagsToAdd += 'g'; + } + + if (options.addY) { + flagsToAdd += 'y'; + } + + if (flagsToAdd) { + flags = clipDuplicates(flags + flagsToAdd); + } + + if (!options.isInternalOnly) { + if (xData.source !== undefined) { + xregexpSource = xData.source; + } // null or undefined; don't want to add to `flags` if the previous value was null, since + // that indicates we're not tracking original precompilation flags + + + if ((0, _flags["default"])(xData) != null) { + // Flags are only added for non-internal regexes by `XRegExp.globalize`. Flags are never + // removed for non-internal regexes, so don't need to handle it + xregexpFlags = flagsToAdd ? clipDuplicates((0, _flags["default"])(xData) + flagsToAdd) : (0, _flags["default"])(xData); + } + } // Augment with `XRegExp.prototype` properties, but use the native `RegExp` constructor to avoid + // searching for special tokens. That would be wrong for regexes constructed by `RegExp`, and + // unnecessary for regexes constructed by `XRegExp` because the regex has already undergone the + // translation to native regex syntax + + + regex = augment(new RegExp(options.source || regex.source, flags), hasNamedCapture(regex) ? (0, _slice["default"])(_context2 = xData.captureNames).call(_context2, 0) : null, xregexpSource, xregexpFlags, options.isInternalOnly); + return regex; +} +/** + * Converts hexadecimal to decimal. + * + * @private + * @param {String} hex + * @returns {number} + */ + + +function dec(hex) { + return (0, _parseInt2["default"])(hex, 16); +} +/** + * Returns a pattern that can be used in a native RegExp in place of an ignorable token such as an + * inline comment or whitespace with flag x. This is used directly as a token handler function + * passed to `XRegExp.addToken`. + * + * @private + * @param {String} match Match arg of `XRegExp.addToken` handler + * @param {String} scope Scope arg of `XRegExp.addToken` handler + * @param {String} flags Flags arg of `XRegExp.addToken` handler + * @returns {string} Either '' or '(?:)', depending on which is needed in the context of the match. + */ + + +function getContextualTokenSeparator(match, scope, flags) { + if ( // No need to separate tokens if at the beginning or end of a group + match.input[match.index - 1] === '(' || match.input[match.index + match[0].length] === ')' || // No need to separate tokens if before or after a `|` + match.input[match.index - 1] === '|' || match.input[match.index + match[0].length] === '|' || // No need to separate tokens if at the beginning or end of the pattern + match.index < 1 || match.index + match[0].length >= match.input.length || // No need to separate tokens if at the beginning of a noncapturing group or lookahead. + // The way this is written relies on: + // - The search regex matching only 3-char strings. + // - Although `substr` gives chars from the end of the string if given a negative index, + // the resulting substring will be too short to match. Ex: `'abcd'.substr(-1, 3) === 'd'` + nativ.test.call(/^\(\?[:=!]/, match.input.substr(match.index - 3, 3)) || // Avoid separating tokens when the following token is a quantifier + isQuantifierNext(match.input, match.index + match[0].length, flags)) { + return ''; + } // Keep tokens separated. This avoids e.g. inadvertedly changing `\1 1` or `\1(?#)1` to `\11`. + // This also ensures all tokens remain as discrete atoms, e.g. it avoids converting the syntax + // error `(? :` into `(?:`. + + + return '(?:)'; +} +/** + * Returns native `RegExp` flags used by a regex object. + * + * @private + * @param {RegExp} regex Regex to check. + * @returns {string} Native flags in use. + */ + + +function getNativeFlags(regex) { + return hasFlagsProp ? (0, _flags["default"])(regex) : // Explicitly using `RegExp.prototype.toString` (rather than e.g. `String` or concatenation + // with an empty string) allows this to continue working predictably when + // `XRegExp.proptotype.toString` is overridden + nativ.exec.call(/\/([a-z]*)$/i, RegExp.prototype.toString.call(regex))[1]; +} +/** + * Determines whether a regex has extended instance data used to track capture names. + * + * @private + * @param {RegExp} regex Regex to check. + * @returns {boolean} Whether the regex uses named capture. + */ + + +function hasNamedCapture(regex) { + return !!(regex[REGEX_DATA] && regex[REGEX_DATA].captureNames); +} +/** + * Converts decimal to hexadecimal. + * + * @private + * @param {Number|String} dec + * @returns {string} + */ + + +function hex(dec) { + return (0, _parseInt2["default"])(dec, 10).toString(16); +} +/** + * Checks whether the next nonignorable token after the specified position is a quantifier. + * + * @private + * @param {String} pattern Pattern to search within. + * @param {Number} pos Index in `pattern` to search at. + * @param {String} flags Flags used by the pattern. + * @returns {Boolean} Whether the next nonignorable token is a quantifier. + */ + + +function isQuantifierNext(pattern, pos, flags) { + var inlineCommentPattern = '\\(\\?#[^)]*\\)'; + var lineCommentPattern = '#[^#\\n]*'; + var quantifierPattern = '[?*+]|{\\d+(?:,\\d*)?}'; + return nativ.test.call((0, _includes["default"])(flags).call(flags, 'x') ? // Ignore any leading whitespace, line comments, and inline comments + /^(?:\s|#[^#\n]*|\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/ : // Ignore any leading inline comments + /^(?:\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/, (0, _slice["default"])(pattern).call(pattern, pos)); +} +/** + * Determines whether a value is of the specified type, by resolving its internal [[Class]]. + * + * @private + * @param {*} value Object to check. + * @param {String} type Type to check for, in TitleCase. + * @returns {boolean} Whether the object matches the type. + */ + + +function isType(value, type) { + return toString.call(value) === "[object ".concat(type, "]"); +} +/** + * Adds leading zeros if shorter than four characters. Used for fixed-length hexadecimal values. + * + * @private + * @param {String} str + * @returns {string} + */ + + +function pad4(str) { + while (str.length < 4) { + str = "0".concat(str); + } + + return str; +} +/** + * Checks for flag-related errors, and strips/applies flags in a leading mode modifier. Offloads + * the flag preparation logic from the `XRegExp` constructor. + * + * @private + * @param {String} pattern Regex pattern, possibly with a leading mode modifier. + * @param {String} flags Any combination of flags. + * @returns {!Object} Object with properties `pattern` and `flags`. + */ + + +function prepareFlags(pattern, flags) { + // Recent browsers throw on duplicate flags, so copy this behavior for nonnative flags + if (clipDuplicates(flags) !== flags) { + throw new SyntaxError("Invalid duplicate regex flag ".concat(flags)); + } // Strip and apply a leading mode modifier with any combination of flags except g or y + + + pattern = nativ.replace.call(pattern, /^\(\?([\w$]+)\)/, function ($0, $1) { + if (nativ.test.call(/[gy]/, $1)) { + throw new SyntaxError("Cannot use flag g or y in mode modifier ".concat($0)); + } // Allow duplicate flags within the mode modifier + + + flags = clipDuplicates(flags + $1); + return ''; + }); // Throw on unknown native or nonnative flags + + var _iterator = _createForOfIteratorHelper(flags), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var flag = _step.value; + + if (!registeredFlags[flag]) { + throw new SyntaxError("Unknown regex flag ".concat(flag)); + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + return { + pattern: pattern, + flags: flags + }; +} +/** + * Prepares an options object from the given value. + * + * @private + * @param {String|Object} value Value to convert to an options object. + * @returns {Object} Options object. + */ + + +function prepareOptions(value) { + var options = {}; + + if (isType(value, 'String')) { + (0, _forEach["default"])(XRegExp).call(XRegExp, value, /[^\s,]+/, function (match) { + options[match] = true; + }); + return options; + } + + return value; +} +/** + * Registers a flag so it doesn't throw an 'unknown flag' error. + * + * @private + * @param {String} flag Single-character flag to register. + */ + + +function registerFlag(flag) { + if (!/^[\w$]$/.test(flag)) { + throw new Error('Flag must be a single character A-Za-z0-9_$'); + } + + registeredFlags[flag] = true; +} +/** + * Runs built-in and custom regex syntax tokens in reverse insertion order at the specified + * position, until a match is found. + * + * @private + * @param {String} pattern Original pattern from which an XRegExp object is being built. + * @param {String} flags Flags being used to construct the regex. + * @param {Number} pos Position to search for tokens within `pattern`. + * @param {Number} scope Regex scope to apply: 'default' or 'class'. + * @param {Object} context Context object to use for token handler functions. + * @returns {Object} Object with properties `matchLength`, `output`, and `reparse`; or `null`. + */ + + +function runTokens(pattern, flags, pos, scope, context) { + var i = tokens.length; + var leadChar = pattern[pos]; + var result = null; + var match; + var t; // Run in reverse insertion order + + while (i--) { + t = tokens[i]; + + if (t.leadChar && t.leadChar !== leadChar || t.scope !== scope && t.scope !== 'all' || t.flag && !(0, _includes["default"])(flags).call(flags, t.flag)) { + continue; + } + + match = XRegExp.exec(pattern, t.regex, pos, 'sticky'); + + if (match) { + result = { + matchLength: match[0].length, + output: t.handler.call(context, match, scope, flags), + reparse: t.reparse + }; // Finished with token tests + + break; + } + } + + return result; +} +/** + * Enables or disables implicit astral mode opt-in. When enabled, flag A is automatically added to + * all new regexes created by XRegExp. This causes an error to be thrown when creating regexes if + * the Unicode Base addon is not available, since flag A is registered by that addon. + * + * @private + * @param {Boolean} on `true` to enable; `false` to disable. + */ + + +function setAstral(on) { + features.astral = on; +} +/** + * Adds named capture groups to the `groups` property of match arrays. See here for details: + * https://github.com/tc39/proposal-regexp-named-groups + * + * @private + * @param {Boolean} on `true` to enable; `false` to disable. + */ + + +function setNamespacing(on) { + features.namespacing = on; +} +/** + * Returns the object, or throws an error if it is `null` or `undefined`. This is used to follow + * the ES5 abstract operation `ToObject`. + * + * @private + * @param {*} value Object to check and return. + * @returns {*} The provided object. + */ + + +function toObject(value) { + // null or undefined + if (value == null) { + throw new TypeError('Cannot convert null or undefined to object'); + } + + return value; +} // ==--------------------------== +// Constructor +// ==--------------------------== + +/** + * Creates an extended regular expression object for matching text with a pattern. Differs from a + * native regular expression in that additional syntax and flags are supported. The returned object + * is in fact a native `RegExp` and works with all native methods. + * + * @class XRegExp + * @constructor + * @param {String|RegExp} pattern Regex pattern string, or an existing regex object to copy. + * @param {String} [flags] Any combination of flags. + * Native flags: + * - `g` - global + * - `i` - ignore case + * - `m` - multiline anchors + * - `u` - unicode (ES6) + * - `y` - sticky (Firefox 3+, ES6) + * Additional XRegExp flags: + * - `n` - explicit capture + * - `s` - dot matches all (aka singleline) + * - `x` - free-spacing and line comments (aka extended) + * - `A` - astral (requires the Unicode Base addon) + * Flags cannot be provided when constructing one `RegExp` from another. + * @returns {RegExp} Extended regular expression object. + * @example + * + * // With named capture and flag x + * XRegExp(`(? [0-9]{4} ) -? # year + * (? [0-9]{2} ) -? # month + * (? [0-9]{2} ) # day`, 'x'); + * + * // Providing a regex object copies it. Native regexes are recompiled using native (not XRegExp) + * // syntax. Copies maintain extended data, are augmented with `XRegExp.prototype` properties, and + * // have fresh `lastIndex` properties (set to zero). + * XRegExp(/regex/); + */ + + +function XRegExp(pattern, flags) { + if (XRegExp.isRegExp(pattern)) { + if (flags !== undefined) { + throw new TypeError('Cannot supply flags when copying a RegExp'); + } + + return copyRegex(pattern); + } // Copy the argument behavior of `RegExp` + + + pattern = pattern === undefined ? '' : String(pattern); + flags = flags === undefined ? '' : String(flags); + + if (XRegExp.isInstalled('astral') && !(0, _includes["default"])(flags).call(flags, 'A')) { + // This causes an error to be thrown if the Unicode Base addon is not available + flags += 'A'; + } + + if (!patternCache[pattern]) { + patternCache[pattern] = {}; + } + + if (!patternCache[pattern][flags]) { + var context = { + hasNamedCapture: false, + captureNames: [] + }; + var scope = defaultScope; + var output = ''; + var pos = 0; + var result; // Check for flag-related errors, and strip/apply flags in a leading mode modifier + + var applied = prepareFlags(pattern, flags); + var appliedPattern = applied.pattern; + var appliedFlags = (0, _flags["default"])(applied); // Use XRegExp's tokens to translate the pattern to a native regex pattern. + // `appliedPattern.length` may change on each iteration if tokens use `reparse` + + while (pos < appliedPattern.length) { + do { + // Check for custom tokens at the current position + result = runTokens(appliedPattern, appliedFlags, pos, scope, context); // If the matched token used the `reparse` option, splice its output into the + // pattern before running tokens again at the same position + + if (result && result.reparse) { + appliedPattern = (0, _slice["default"])(appliedPattern).call(appliedPattern, 0, pos) + result.output + (0, _slice["default"])(appliedPattern).call(appliedPattern, pos + result.matchLength); + } + } while (result && result.reparse); + + if (result) { + output += result.output; + pos += result.matchLength || 1; + } else { + // Get the native token at the current position + var _XRegExp$exec = XRegExp.exec(appliedPattern, nativeTokens[scope], pos, 'sticky'), + _XRegExp$exec2 = (0, _slicedToArray2["default"])(_XRegExp$exec, 1), + token = _XRegExp$exec2[0]; + + output += token; + pos += token.length; + + if (token === '[' && scope === defaultScope) { + scope = classScope; + } else if (token === ']' && scope === classScope) { + scope = defaultScope; + } + } + } + + patternCache[pattern][flags] = { + // Use basic cleanup to collapse repeated empty groups like `(?:)(?:)` to `(?:)`. Empty + // groups are sometimes inserted during regex transpilation in order to keep tokens + // separated. However, more than one empty group in a row is never needed. + pattern: nativ.replace.call(output, /(?:\(\?:\))+/g, '(?:)'), + // Strip all but native flags + flags: nativ.replace.call(appliedFlags, /[^gimuy]+/g, ''), + // `context.captureNames` has an item for each capturing group, even if unnamed + captures: context.hasNamedCapture ? context.captureNames : null + }; + } + + var generated = patternCache[pattern][flags]; + return augment(new RegExp(generated.pattern, (0, _flags["default"])(generated)), generated.captures, pattern, flags); +} // Add `RegExp.prototype` to the prototype chain + + +XRegExp.prototype = /(?:)/; // ==--------------------------== +// Public properties +// ==--------------------------== + +/** + * The XRegExp version number as a string containing three dot-separated parts. For example, + * '2.0.0-beta-3'. + * + * @static + * @memberOf XRegExp + * @type String + */ + +XRegExp.version = '4.4.0'; // ==--------------------------== +// Public methods +// ==--------------------------== +// Intentionally undocumented; used in tests and addons + +XRegExp._clipDuplicates = clipDuplicates; +XRegExp._hasNativeFlag = hasNativeFlag; +XRegExp._dec = dec; +XRegExp._hex = hex; +XRegExp._pad4 = pad4; +/** + * Extends XRegExp syntax and allows custom flags. This is used internally and can be used to + * create XRegExp addons. If more than one token can match the same string, the last added wins. + * + * @memberOf XRegExp + * @param {RegExp} regex Regex object that matches the new token. + * @param {Function} handler Function that returns a new pattern string (using native regex syntax) + * to replace the matched token within all future XRegExp regexes. Has access to persistent + * properties of the regex being built, through `this`. Invoked with three arguments: + * - The match array, with named backreference properties. + * - The regex scope where the match was found: 'default' or 'class'. + * - The flags used by the regex, including any flags in a leading mode modifier. + * The handler function becomes part of the XRegExp construction process, so be careful not to + * construct XRegExps within the function or you will trigger infinite recursion. + * @param {Object} [options] Options object with optional properties: + * - `scope` {String} Scope where the token applies: 'default', 'class', or 'all'. + * - `flag` {String} Single-character flag that triggers the token. This also registers the + * flag, which prevents XRegExp from throwing an 'unknown flag' error when the flag is used. + * - `optionalFlags` {String} Any custom flags checked for within the token `handler` that are + * not required to trigger the token. This registers the flags, to prevent XRegExp from + * throwing an 'unknown flag' error when any of the flags are used. + * - `reparse` {Boolean} Whether the `handler` function's output should not be treated as + * final, and instead be reparseable by other tokens (including the current token). Allows + * token chaining or deferring. + * - `leadChar` {String} Single character that occurs at the beginning of any successful match + * of the token (not always applicable). This doesn't change the behavior of the token unless + * you provide an erroneous value. However, providing it can increase the token's performance + * since the token can be skipped at any positions where this character doesn't appear. + * @example + * + * // Basic usage: Add \a for the ALERT control code + * XRegExp.addToken( + * /\\a/, + * () => '\\x07', + * {scope: 'all'} + * ); + * XRegExp('\\a[\\a-\\n]+').test('\x07\n\x07'); // -> true + * + * // Add the U (ungreedy) flag from PCRE and RE2, which reverses greedy and lazy quantifiers. + * // Since `scope` is not specified, it uses 'default' (i.e., transformations apply outside of + * // character classes only) + * XRegExp.addToken( + * /([?*+]|{\d+(?:,\d*)?})(\??)/, + * (match) => `${match[1]}${match[2] ? '' : '?'}`, + * {flag: 'U'} + * ); + * XRegExp('a+', 'U').exec('aaa')[0]; // -> 'a' + * XRegExp('a+?', 'U').exec('aaa')[0]; // -> 'aaa' + */ + +XRegExp.addToken = function (regex, handler, options) { + options = options || {}; + var _options = options, + optionalFlags = _options.optionalFlags; + + if (options.flag) { + registerFlag(options.flag); + } + + if (optionalFlags) { + optionalFlags = nativ.split.call(optionalFlags, ''); + + var _iterator2 = _createForOfIteratorHelper(optionalFlags), + _step2; + + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var flag = _step2.value; + registerFlag(flag); + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + } // Add to the private list of syntax tokens + + + tokens.push({ + regex: copyRegex(regex, { + addG: true, + addY: hasNativeY, + isInternalOnly: true + }), + handler: handler, + scope: options.scope || defaultScope, + flag: options.flag, + reparse: options.reparse, + leadChar: options.leadChar + }); // Reset the pattern cache used by the `XRegExp` constructor, since the same pattern and flags + // might now produce different results + + XRegExp.cache.flush('patterns'); +}; +/** + * Caches and returns the result of calling `XRegExp(pattern, flags)`. On any subsequent call with + * the same pattern and flag combination, the cached copy of the regex is returned. + * + * @memberOf XRegExp + * @param {String} pattern Regex pattern string. + * @param {String} [flags] Any combination of XRegExp flags. + * @returns {RegExp} Cached XRegExp object. + * @example + * + * while (match = XRegExp.cache('.', 'gs').exec(str)) { + * // The regex is compiled once only + * } + */ + + +XRegExp.cache = function (pattern, flags) { + if (!regexCache[pattern]) { + regexCache[pattern] = {}; + } + + return regexCache[pattern][flags] || (regexCache[pattern][flags] = XRegExp(pattern, flags)); +}; // Intentionally undocumented; used in tests + + +XRegExp.cache.flush = function (cacheName) { + if (cacheName === 'patterns') { + // Flush the pattern cache used by the `XRegExp` constructor + patternCache = {}; + } else { + // Flush the regex cache populated by `XRegExp.cache` + regexCache = {}; + } +}; +/** + * Escapes any regular expression metacharacters, for use when matching literal strings. The result + * can safely be used at any point within a regex that uses any flags. + * + * @memberOf XRegExp + * @param {String} str String to escape. + * @returns {string} String with regex metacharacters escaped. + * @example + * + * XRegExp.escape('Escaped? <.>'); + * // -> 'Escaped\?\ <\.>' + */ + + +XRegExp.escape = function (str) { + return nativ.replace.call(toObject(str), /[-\[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); +}; +/** + * Executes a regex search in a specified string. Returns a match array or `null`. If the provided + * regex uses named capture, named backreference properties are included on the match array. + * Optional `pos` and `sticky` arguments specify the search start position, and whether the match + * must start at the specified position only. The `lastIndex` property of the provided regex is not + * used, but is updated for compatibility. Also fixes browser bugs compared to the native + * `RegExp.prototype.exec` and can be used reliably cross-browser. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp} regex Regex to search with. + * @param {Number} [pos=0] Zero-based index at which to start the search. + * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position + * only. The string `'sticky'` is accepted as an alternative to `true`. + * @returns {Array} Match array with named backreference properties, or `null`. + * @example + * + * // Basic use, with named backreference + * let match = XRegExp.exec('U+2620', XRegExp('U\\+(?[0-9A-F]{4})')); + * match.hex; // -> '2620' + * + * // With pos and sticky, in a loop + * let pos = 2, result = [], match; + * while (match = XRegExp.exec('<1><2><3><4>5<6>', /<(\d)>/, pos, 'sticky')) { + * result.push(match[1]); + * pos = match.index + match[0].length; + * } + * // result -> ['2', '3', '4'] + */ + + +XRegExp.exec = function (str, regex, pos, sticky) { + var cacheKey = 'g'; + var addY = false; + var fakeY = false; + var match; + addY = hasNativeY && !!(sticky || regex.sticky && sticky !== false); + + if (addY) { + cacheKey += 'y'; + } else if (sticky) { + // Simulate sticky matching by appending an empty capture to the original regex. The + // resulting regex will succeed no matter what at the current index (set with `lastIndex`), + // and will not search the rest of the subject string. We'll know that the original regex + // has failed if that last capture is `''` rather than `undefined` (i.e., if that last + // capture participated in the match). + fakeY = true; + cacheKey += 'FakeY'; + } + + regex[REGEX_DATA] = regex[REGEX_DATA] || {}; // Shares cached copies with `XRegExp.match`/`replace` + + var r2 = regex[REGEX_DATA][cacheKey] || (regex[REGEX_DATA][cacheKey] = copyRegex(regex, { + addG: true, + addY: addY, + source: fakeY ? "".concat(regex.source, "|()") : undefined, + removeY: sticky === false, + isInternalOnly: true + })); + pos = pos || 0; + r2.lastIndex = pos; // Fixed `exec` required for `lastIndex` fix, named backreferences, etc. + + match = fixed.exec.call(r2, str); // Get rid of the capture added by the pseudo-sticky matcher if needed. An empty string means + // the original regexp failed (see above). + + if (fakeY && match && match.pop() === '') { + match = null; + } + + if (regex.global) { + regex.lastIndex = match ? r2.lastIndex : 0; + } + + return match; +}; +/** + * Executes a provided function once per regex match. Searches always start at the beginning of the + * string and continue until the end, regardless of the state of the regex's `global` property and + * initial `lastIndex`. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp} regex Regex to search with. + * @param {Function} callback Function to execute for each match. Invoked with four arguments: + * - The match array, with named backreference properties. + * - The zero-based match index. + * - The string being traversed. + * - The regex object being used to traverse the string. + * @example + * + * // Extracts every other digit from a string + * const evens = []; + * XRegExp.forEach('1a2345', /\d/, (match, i) => { + * if (i % 2) evens.push(+match[0]); + * }); + * // evens -> [2, 4] + */ + + +XRegExp.forEach = function (str, regex, callback) { + var pos = 0; + var i = -1; + var match; + + while (match = XRegExp.exec(str, regex, pos)) { + // Because `regex` is provided to `callback`, the function could use the deprecated/ + // nonstandard `RegExp.prototype.compile` to mutate the regex. However, since `XRegExp.exec` + // doesn't use `lastIndex` to set the search position, this can't lead to an infinite loop, + // at least. Actually, because of the way `XRegExp.exec` caches globalized versions of + // regexes, mutating the regex will not have any effect on the iteration or matched strings, + // which is a nice side effect that brings extra safety. + callback(match, ++i, str, regex); + pos = match.index + (match[0].length || 1); + } +}; +/** + * Copies a regex object and adds flag `g`. The copy maintains extended data, is augmented with + * `XRegExp.prototype` properties, and has a fresh `lastIndex` property (set to zero). Native + * regexes are not recompiled using XRegExp syntax. + * + * @memberOf XRegExp + * @param {RegExp} regex Regex to globalize. + * @returns {RegExp} Copy of the provided regex with flag `g` added. + * @example + * + * const globalCopy = XRegExp.globalize(/regex/); + * globalCopy.global; // -> true + */ + + +XRegExp.globalize = function (regex) { + return copyRegex(regex, { + addG: true + }); +}; +/** + * Installs optional features according to the specified options. Can be undone using + * `XRegExp.uninstall`. + * + * @memberOf XRegExp + * @param {Object|String} options Options object or string. + * @example + * + * // With an options object + * XRegExp.install({ + * // Enables support for astral code points in Unicode addons (implicitly sets flag A) + * astral: true, + * + * // Adds named capture groups to the `groups` property of matches + * namespacing: true + * }); + * + * // With an options string + * XRegExp.install('astral namespacing'); + */ + + +XRegExp.install = function (options) { + options = prepareOptions(options); + + if (!features.astral && options.astral) { + setAstral(true); + } + + if (!features.namespacing && options.namespacing) { + setNamespacing(true); + } +}; +/** + * Checks whether an individual optional feature is installed. + * + * @memberOf XRegExp + * @param {String} feature Name of the feature to check. One of: + * - `astral` + * - `namespacing` + * @returns {boolean} Whether the feature is installed. + * @example + * + * XRegExp.isInstalled('astral'); + */ + + +XRegExp.isInstalled = function (feature) { + return !!features[feature]; +}; +/** + * Returns `true` if an object is a regex; `false` if it isn't. This works correctly for regexes + * created in another frame, when `instanceof` and `constructor` checks would fail. + * + * @memberOf XRegExp + * @param {*} value Object to check. + * @returns {boolean} Whether the object is a `RegExp` object. + * @example + * + * XRegExp.isRegExp('string'); // -> false + * XRegExp.isRegExp(/regex/i); // -> true + * XRegExp.isRegExp(RegExp('^', 'm')); // -> true + * XRegExp.isRegExp(XRegExp('(?s).')); // -> true + */ + + +XRegExp.isRegExp = function (value) { + return toString.call(value) === '[object RegExp]'; +}; // isType(value, 'RegExp'); + +/** + * Returns the first matched string, or in global mode, an array containing all matched strings. + * This is essentially a more convenient re-implementation of `String.prototype.match` that gives + * the result types you actually want (string instead of `exec`-style array in match-first mode, + * and an empty array instead of `null` when no matches are found in match-all mode). It also lets + * you override flag g and ignore `lastIndex`, and fixes browser bugs. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp} regex Regex to search with. + * @param {String} [scope='one'] Use 'one' to return the first match as a string. Use 'all' to + * return an array of all matched strings. If not explicitly specified and `regex` uses flag g, + * `scope` is 'all'. + * @returns {String|Array} In match-first mode: First match as a string, or `null`. In match-all + * mode: Array of all matched strings, or an empty array. + * @example + * + * // Match first + * XRegExp.match('abc', /\w/); // -> 'a' + * XRegExp.match('abc', /\w/g, 'one'); // -> 'a' + * XRegExp.match('abc', /x/g, 'one'); // -> null + * + * // Match all + * XRegExp.match('abc', /\w/g); // -> ['a', 'b', 'c'] + * XRegExp.match('abc', /\w/, 'all'); // -> ['a', 'b', 'c'] + * XRegExp.match('abc', /x/, 'all'); // -> [] + */ + + +XRegExp.match = function (str, regex, scope) { + var global = regex.global && scope !== 'one' || scope === 'all'; + var cacheKey = (global ? 'g' : '') + (regex.sticky ? 'y' : '') || 'noGY'; + regex[REGEX_DATA] = regex[REGEX_DATA] || {}; // Shares cached copies with `XRegExp.exec`/`replace` + + var r2 = regex[REGEX_DATA][cacheKey] || (regex[REGEX_DATA][cacheKey] = copyRegex(regex, { + addG: !!global, + removeG: scope === 'one', + isInternalOnly: true + })); + var result = nativ.match.call(toObject(str), r2); + + if (regex.global) { + regex.lastIndex = scope === 'one' && result ? // Can't use `r2.lastIndex` since `r2` is nonglobal in this case + result.index + result[0].length : 0; + } + + return global ? result || [] : result && result[0]; +}; +/** + * Retrieves the matches from searching a string using a chain of regexes that successively search + * within previous matches. The provided `chain` array can contain regexes and or objects with + * `regex` and `backref` properties. When a backreference is specified, the named or numbered + * backreference is passed forward to the next regex or returned. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {Array} chain Regexes that each search for matches within preceding results. + * @returns {Array} Matches by the last regex in the chain, or an empty array. + * @example + * + * // Basic usage; matches numbers within tags + * XRegExp.matchChain('1 2 3 4 a 56', [ + * XRegExp('(?is).*?'), + * /\d+/ + * ]); + * // -> ['2', '4', '56'] + * + * // Passing forward and returning specific backreferences + * html = 'XRegExp\ + * Google'; + * XRegExp.matchChain(html, [ + * {regex: //i, backref: 1}, + * {regex: XRegExp('(?i)^https?://(?[^/?#]+)'), backref: 'domain'} + * ]); + * // -> ['xregexp.com', 'www.google.com'] + */ + + +XRegExp.matchChain = function (str, chain) { + return function recurseChain(values, level) { + var item = chain[level].regex ? chain[level] : { + regex: chain[level] + }; + var matches = []; + + function addMatch(match) { + if (item.backref) { + var ERR_UNDEFINED_GROUP = "Backreference to undefined group: ".concat(item.backref); + var isNamedBackref = isNaN(item.backref); + + if (isNamedBackref && XRegExp.isInstalled('namespacing')) { + // `groups` has `null` as prototype, so using `in` instead of `hasOwnProperty` + if (!(item.backref in match.groups)) { + throw new ReferenceError(ERR_UNDEFINED_GROUP); + } + } else if (!match.hasOwnProperty(item.backref)) { + throw new ReferenceError(ERR_UNDEFINED_GROUP); + } + + var backrefValue = isNamedBackref && XRegExp.isInstalled('namespacing') ? match.groups[item.backref] : match[item.backref]; + matches.push(backrefValue || ''); + } else { + matches.push(match[0]); + } + } + + var _iterator3 = _createForOfIteratorHelper(values), + _step3; + + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { + var value = _step3.value; + (0, _forEach["default"])(XRegExp).call(XRegExp, value, item.regex, addMatch); + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + + return level === chain.length - 1 || !matches.length ? matches : recurseChain(matches, level + 1); + }([str], 0); +}; +/** + * Returns a new string with one or all matches of a pattern replaced. The pattern can be a string + * or regex, and the replacement can be a string or a function to be called for each match. To + * perform a global search and replace, use the optional `scope` argument or include flag g if using + * a regex. Replacement strings can use `${n}` or `$` for named and numbered backreferences. + * Replacement functions can use named backreferences via `arguments[0].name`. Also fixes browser + * bugs compared to the native `String.prototype.replace` and can be used reliably cross-browser. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp|String} search Search pattern to be replaced. + * @param {String|Function} replacement Replacement string or a function invoked to create it. + * Replacement strings can include special replacement syntax: + * - $$ - Inserts a literal $ character. + * - $&, $0 - Inserts the matched substring. + * - $` - Inserts the string that precedes the matched substring (left context). + * - $' - Inserts the string that follows the matched substring (right context). + * - $n, $nn - Where n/nn are digits referencing an existent capturing group, inserts + * backreference n/nn. + * - ${n}, $ - Where n is a name or any number of digits that reference an existent capturing + * group, inserts backreference n. + * Replacement functions are invoked with three or more arguments: + * - The matched substring (corresponds to $& above). Named backreferences are accessible as + * properties of this first argument. + * - 0..n arguments, one for each backreference (corresponding to $1, $2, etc. above). + * - The zero-based index of the match within the total search string. + * - The total string being searched. + * @param {String} [scope='one'] Use 'one' to replace the first match only, or 'all'. If not + * explicitly specified and using a regex with flag g, `scope` is 'all'. + * @returns {String} New string with one or all matches replaced. + * @example + * + * // Regex search, using named backreferences in replacement string + * const name = XRegExp('(?\\w+) (?\\w+)'); + * XRegExp.replace('John Smith', name, '$, $'); + * // -> 'Smith, John' + * + * // Regex search, using named backreferences in replacement function + * XRegExp.replace('John Smith', name, (match) => `${match.last}, ${match.first}`); + * // -> 'Smith, John' + * + * // String search, with replace-all + * XRegExp.replace('RegExp builds RegExps', 'RegExp', 'XRegExp', 'all'); + * // -> 'XRegExp builds XRegExps' + */ + + +XRegExp.replace = function (str, search, replacement, scope) { + var isRegex = XRegExp.isRegExp(search); + var global = search.global && scope !== 'one' || scope === 'all'; + var cacheKey = (global ? 'g' : '') + (search.sticky ? 'y' : '') || 'noGY'; + var s2 = search; + + if (isRegex) { + search[REGEX_DATA] = search[REGEX_DATA] || {}; // Shares cached copies with `XRegExp.exec`/`match`. Since a copy is used, `search`'s + // `lastIndex` isn't updated *during* replacement iterations + + s2 = search[REGEX_DATA][cacheKey] || (search[REGEX_DATA][cacheKey] = copyRegex(search, { + addG: !!global, + removeG: scope === 'one', + isInternalOnly: true + })); + } else if (global) { + s2 = new RegExp(XRegExp.escape(String(search)), 'g'); + } // Fixed `replace` required for named backreferences, etc. + + + var result = fixed.replace.call(toObject(str), s2, replacement); + + if (isRegex && search.global) { + // Fixes IE, Safari bug (last tested IE 9, Safari 5.1) + search.lastIndex = 0; + } + + return result; +}; +/** + * Performs batch processing of string replacements. Used like `XRegExp.replace`, but accepts an + * array of replacement details. Later replacements operate on the output of earlier replacements. + * Replacement details are accepted as an array with a regex or string to search for, the + * replacement string or function, and an optional scope of 'one' or 'all'. Uses the XRegExp + * replacement text syntax, which supports named backreference properties via `${name}` or + * `$`. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {Array} replacements Array of replacement detail arrays. + * @returns {String} New string with all replacements. + * @example + * + * str = XRegExp.replaceEach(str, [ + * [XRegExp('(?a)'), 'z${name}'], + * [/b/gi, 'y'], + * [/c/g, 'x', 'one'], // scope 'one' overrides /g + * [/d/, 'w', 'all'], // scope 'all' overrides lack of /g + * ['e', 'v', 'all'], // scope 'all' allows replace-all for strings + * [/f/g, ($0) => $0.toUpperCase()] + * ]); + */ + + +XRegExp.replaceEach = function (str, replacements) { + var _iterator4 = _createForOfIteratorHelper(replacements), + _step4; + + try { + for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { + var r = _step4.value; + str = XRegExp.replace(str, r[0], r[1], r[2]); + } + } catch (err) { + _iterator4.e(err); + } finally { + _iterator4.f(); + } + + return str; +}; +/** + * Splits a string into an array of strings using a regex or string separator. Matches of the + * separator are not included in the result array. However, if `separator` is a regex that contains + * capturing groups, backreferences are spliced into the result each time `separator` is matched. + * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably + * cross-browser. + * + * @memberOf XRegExp + * @param {String} str String to split. + * @param {RegExp|String} separator Regex or string to use for separating the string. + * @param {Number} [limit] Maximum number of items to include in the result array. + * @returns {Array} Array of substrings. + * @example + * + * // Basic use + * XRegExp.split('a b c', ' '); + * // -> ['a', 'b', 'c'] + * + * // With limit + * XRegExp.split('a b c', ' ', 2); + * // -> ['a', 'b'] + * + * // Backreferences in result array + * XRegExp.split('..word1..', /([a-z]+)(\d+)/i); + * // -> ['..', 'word', '1', '..'] + */ + + +XRegExp.split = function (str, separator, limit) { + return fixed.split.call(toObject(str), separator, limit); +}; +/** + * Executes a regex search in a specified string. Returns `true` or `false`. Optional `pos` and + * `sticky` arguments specify the search start position, and whether the match must start at the + * specified position only. The `lastIndex` property of the provided regex is not used, but is + * updated for compatibility. Also fixes browser bugs compared to the native + * `RegExp.prototype.test` and can be used reliably cross-browser. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp} regex Regex to search with. + * @param {Number} [pos=0] Zero-based index at which to start the search. + * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position + * only. The string `'sticky'` is accepted as an alternative to `true`. + * @returns {boolean} Whether the regex matched the provided value. + * @example + * + * // Basic use + * XRegExp.test('abc', /c/); // -> true + * + * // With pos and sticky + * XRegExp.test('abc', /c/, 0, 'sticky'); // -> false + * XRegExp.test('abc', /c/, 2, 'sticky'); // -> true + */ +// Do this the easy way :-) + + +XRegExp.test = function (str, regex, pos, sticky) { + return !!XRegExp.exec(str, regex, pos, sticky); +}; +/** + * Uninstalls optional features according to the specified options. All optional features start out + * uninstalled, so this is used to undo the actions of `XRegExp.install`. + * + * @memberOf XRegExp + * @param {Object|String} options Options object or string. + * @example + * + * // With an options object + * XRegExp.uninstall({ + * // Disables support for astral code points in Unicode addons + * astral: true, + * + * // Don't add named capture groups to the `groups` property of matches + * namespacing: true + * }); + * + * // With an options string + * XRegExp.uninstall('astral namespacing'); + */ + + +XRegExp.uninstall = function (options) { + options = prepareOptions(options); + + if (features.astral && options.astral) { + setAstral(false); + } + + if (features.namespacing && options.namespacing) { + setNamespacing(false); + } +}; +/** + * Returns an XRegExp object that is the union of the given patterns. Patterns can be provided as + * regex objects or strings. Metacharacters are escaped in patterns provided as strings. + * Backreferences in provided regex objects are automatically renumbered to work correctly within + * the larger combined pattern. Native flags used by provided regexes are ignored in favor of the + * `flags` argument. + * + * @memberOf XRegExp + * @param {Array} patterns Regexes and strings to combine. + * @param {String} [flags] Any combination of XRegExp flags. + * @param {Object} [options] Options object with optional properties: + * - `conjunction` {String} Type of conjunction to use: 'or' (default) or 'none'. + * @returns {RegExp} Union of the provided regexes and strings. + * @example + * + * XRegExp.union(['a+b*c', /(dogs)\1/, /(cats)\1/], 'i'); + * // -> /a\+b\*c|(dogs)\1|(cats)\2/i + * + * XRegExp.union([/man/, /bear/, /pig/], 'i', {conjunction: 'none'}); + * // -> /manbearpig/i + */ + + +XRegExp.union = function (patterns, flags, options) { + options = options || {}; + var conjunction = options.conjunction || 'or'; + var numCaptures = 0; + var numPriorCaptures; + var captureNames; + + function rewrite(match, paren, backref) { + var name = captureNames[numCaptures - numPriorCaptures]; // Capturing group + + if (paren) { + ++numCaptures; // If the current capture has a name, preserve the name + + if (name) { + return "(?<".concat(name, ">"); + } // Backreference + + } else if (backref) { + // Rewrite the backreference + return "\\".concat(+backref + numPriorCaptures); + } + + return match; + } + + if (!(isType(patterns, 'Array') && patterns.length)) { + throw new TypeError('Must provide a nonempty array of patterns to merge'); + } + + var parts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g; + var output = []; + + var _iterator5 = _createForOfIteratorHelper(patterns), + _step5; + + try { + for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { + var pattern = _step5.value; + + if (XRegExp.isRegExp(pattern)) { + numPriorCaptures = numCaptures; + captureNames = pattern[REGEX_DATA] && pattern[REGEX_DATA].captureNames || []; // Rewrite backreferences. Passing to XRegExp dies on octals and ensures patterns are + // independently valid; helps keep this simple. Named captures are put back + + output.push(nativ.replace.call(XRegExp(pattern.source).source, parts, rewrite)); + } else { + output.push(XRegExp.escape(pattern)); + } + } + } catch (err) { + _iterator5.e(err); + } finally { + _iterator5.f(); + } + + var separator = conjunction === 'none' ? '' : '|'; + return XRegExp(output.join(separator), flags); +}; // ==--------------------------== +// Fixed/extended native methods +// ==--------------------------== + +/** + * Adds named capture support (with backreferences returned as `result.name`), and fixes browser + * bugs in the native `RegExp.prototype.exec`. Use via `XRegExp.exec`. + * + * @memberOf RegExp + * @param {String} str String to search. + * @returns {Array} Match array with named backreference properties, or `null`. + */ + + +fixed.exec = function (str) { + var origLastIndex = this.lastIndex; + var match = nativ.exec.apply(this, arguments); + + if (match) { + // Fix browsers whose `exec` methods don't return `undefined` for nonparticipating capturing + // groups. This fixes IE 5.5-8, but not IE 9's quirks mode or emulation of older IEs. IE 9 + // in standards mode follows the spec. + if (!correctExecNpcg && match.length > 1 && (0, _includes["default"])(match).call(match, '')) { + var _context3; + + var r2 = copyRegex(this, { + removeG: true, + isInternalOnly: true + }); // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed + // matching due to characters outside the match + + nativ.replace.call((0, _slice["default"])(_context3 = String(str)).call(_context3, match.index), r2, function () { + var len = arguments.length; // Skip index 0 and the last 2 + + for (var i = 1; i < len - 2; ++i) { + if ((i < 0 || arguments.length <= i ? undefined : arguments[i]) === undefined) { + match[i] = undefined; + } + } + }); + } // Attach named capture properties + + + var groupsObject = match; + + if (XRegExp.isInstalled('namespacing')) { + // https://tc39.github.io/proposal-regexp-named-groups/#sec-regexpbuiltinexec + match.groups = (0, _create["default"])(null); + groupsObject = match.groups; + } + + if (this[REGEX_DATA] && this[REGEX_DATA].captureNames) { + // Skip index 0 + for (var i = 1; i < match.length; ++i) { + var name = this[REGEX_DATA].captureNames[i - 1]; + + if (name) { + groupsObject[name] = match[i]; + } + } + } // Fix browsers that increment `lastIndex` after zero-length matches + + + if (this.global && !match[0].length && this.lastIndex > match.index) { + this.lastIndex = match.index; + } + } + + if (!this.global) { + // Fixes IE, Opera bug (last tested IE 9, Opera 11.6) + this.lastIndex = origLastIndex; + } + + return match; +}; +/** + * Fixes browser bugs in the native `RegExp.prototype.test`. + * + * @memberOf RegExp + * @param {String} str String to search. + * @returns {boolean} Whether the regex matched the provided value. + */ + + +fixed.test = function (str) { + // Do this the easy way :-) + return !!fixed.exec.call(this, str); +}; +/** + * Adds named capture support (with backreferences returned as `result.name`), and fixes browser + * bugs in the native `String.prototype.match`. + * + * @memberOf String + * @param {RegExp|*} regex Regex to search with. If not a regex object, it is passed to `RegExp`. + * @returns {Array} If `regex` uses flag g, an array of match strings or `null`. Without flag g, + * the result of calling `regex.exec(this)`. + */ + + +fixed.match = function (regex) { + if (!XRegExp.isRegExp(regex)) { + // Use the native `RegExp` rather than `XRegExp` + regex = new RegExp(regex); + } else if (regex.global) { + var result = nativ.match.apply(this, arguments); // Fixes IE bug + + regex.lastIndex = 0; + return result; + } + + return fixed.exec.call(regex, toObject(this)); +}; +/** + * Adds support for `${n}` (or `$`) tokens for named and numbered backreferences in replacement + * text, and provides named backreferences to replacement functions as `arguments[0].name`. Also + * fixes browser bugs in replacement text syntax when performing a replacement using a nonregex + * search value, and the value of a replacement regex's `lastIndex` property during replacement + * iterations and upon completion. Note that this doesn't support SpiderMonkey's proprietary third + * (`flags`) argument. Use via `XRegExp.replace`. + * + * @memberOf String + * @param {RegExp|String} search Search pattern to be replaced. + * @param {String|Function} replacement Replacement string or a function invoked to create it. + * @returns {string} New string with one or all matches replaced. + */ + + +fixed.replace = function (search, replacement) { + var isRegex = XRegExp.isRegExp(search); + var origLastIndex; + var captureNames; + var result; + + if (isRegex) { + if (search[REGEX_DATA]) { + captureNames = search[REGEX_DATA].captureNames; + } // Only needed if `search` is nonglobal + + + origLastIndex = search.lastIndex; + } else { + search += ''; // Type-convert + } // Don't use `typeof`; some older browsers return 'function' for regex objects + + + if (isType(replacement, 'Function')) { + // Stringifying `this` fixes a bug in IE < 9 where the last argument in replacement + // functions isn't type-converted to a string + result = nativ.replace.call(String(this), search, function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + if (captureNames) { + var groupsObject; + + if (XRegExp.isInstalled('namespacing')) { + // https://tc39.github.io/proposal-regexp-named-groups/#sec-regexpbuiltinexec + groupsObject = (0, _create["default"])(null); + args.push(groupsObject); + } else { + // Change the `args[0]` string primitive to a `String` object that can store + // properties. This really does need to use `String` as a constructor + args[0] = new String(args[0]); + groupsObject = args[0]; + } // Store named backreferences + + + for (var i = 0; i < captureNames.length; ++i) { + if (captureNames[i]) { + groupsObject[captureNames[i]] = args[i + 1]; + } + } + } // Update `lastIndex` before calling `replacement`. Fixes IE, Chrome, Firefox, Safari + // bug (last tested IE 9, Chrome 17, Firefox 11, Safari 5.1) + + + if (isRegex && search.global) { + search.lastIndex = args[args.length - 2] + args[0].length; + } // ES6 specs the context for replacement functions as `undefined` + + + return replacement.apply(void 0, args); + }); + } else { + // Ensure that the last value of `args` will be a string when given nonstring `this`, + // while still throwing on null or undefined context + result = nativ.replace.call(this == null ? this : String(this), search, function () { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + return nativ.replace.call(String(replacement), replacementToken, replacer); + + function replacer($0, bracketed, angled, dollarToken) { + bracketed = bracketed || angled; // Named or numbered backreference with curly or angled braces + + if (bracketed) { + // XRegExp behavior for `${n}` or `$`: + // 1. Backreference to numbered capture, if `n` is an integer. Use `0` for the + // entire match. Any number of leading zeros may be used. + // 2. Backreference to named capture `n`, if it exists and is not an integer + // overridden by numbered capture. In practice, this does not overlap with + // numbered capture since XRegExp does not allow named capture to use a bare + // integer as the name. + // 3. If the name or number does not refer to an existing capturing group, it's + // an error. + var n = +bracketed; // Type-convert; drop leading zeros + + if (n <= args.length - 3) { + return args[n] || ''; + } // Groups with the same name is an error, else would need `lastIndexOf` + + + n = captureNames ? (0, _indexOf["default"])(captureNames).call(captureNames, bracketed) : -1; + + if (n < 0) { + throw new SyntaxError("Backreference to undefined group ".concat($0)); + } + + return args[n + 1] || ''; + } // Else, special variable or numbered backreference without curly braces + + + if (dollarToken === '$') { + // $$ + return '$'; + } + + if (dollarToken === '&' || +dollarToken === 0) { + // $&, $0 (not followed by 1-9), $00 + return args[0]; + } + + if (dollarToken === '`') { + var _context4; + + // $` (left context) + return (0, _slice["default"])(_context4 = args[args.length - 1]).call(_context4, 0, args[args.length - 2]); + } + + if (dollarToken === "'") { + var _context5; + + // $' (right context) + return (0, _slice["default"])(_context5 = args[args.length - 1]).call(_context5, args[args.length - 2] + args[0].length); + } // Else, numbered backreference without braces + + + dollarToken = +dollarToken; // Type-convert; drop leading zero + // XRegExp behavior for `$n` and `$nn`: + // - Backrefs end after 1 or 2 digits. Use `${..}` or `$<..>` for more digits. + // - `$1` is an error if no capturing groups. + // - `$10` is an error if less than 10 capturing groups. Use `${1}0` or `$<1>0` + // instead. + // - `$01` is `$1` if at least one capturing group, else it's an error. + // - `$0` (not followed by 1-9) and `$00` are the entire match. + // Native behavior, for comparison: + // - Backrefs end after 1 or 2 digits. Cannot reference capturing group 100+. + // - `$1` is a literal `$1` if no capturing groups. + // - `$10` is `$1` followed by a literal `0` if less than 10 capturing groups. + // - `$01` is `$1` if at least one capturing group, else it's a literal `$01`. + // - `$0` is a literal `$0`. + + if (!isNaN(dollarToken)) { + if (dollarToken > args.length - 3) { + throw new SyntaxError("Backreference to undefined group ".concat($0)); + } + + return args[dollarToken] || ''; + } // `$` followed by an unsupported char is an error, unlike native JS + + + throw new SyntaxError("Invalid token ".concat($0)); + } + }); + } + + if (isRegex) { + if (search.global) { + // Fixes IE, Safari bug (last tested IE 9, Safari 5.1) + search.lastIndex = 0; + } else { + // Fixes IE, Opera bug (last tested IE 9, Opera 11.6) + search.lastIndex = origLastIndex; + } + } + + return result; +}; +/** + * Fixes browser bugs in the native `String.prototype.split`. Use via `XRegExp.split`. + * + * @memberOf String + * @param {RegExp|String} separator Regex or string to use for separating the string. + * @param {Number} [limit] Maximum number of items to include in the result array. + * @returns {!Array} Array of substrings. + */ + + +fixed.split = function (separator, limit) { + if (!XRegExp.isRegExp(separator)) { + // Browsers handle nonregex split correctly, so use the faster native method + return nativ.split.apply(this, arguments); + } + + var str = String(this); + var output = []; + var origLastIndex = separator.lastIndex; + var lastLastIndex = 0; + var lastLength; // Values for `limit`, per the spec: + // If undefined: pow(2,32) - 1 + // If 0, Infinity, or NaN: 0 + // If positive number: limit = floor(limit); if (limit >= pow(2,32)) limit -= pow(2,32); + // If negative number: pow(2,32) - floor(abs(limit)) + // If other: Type-convert, then use the above rules + // This line fails in very strange ways for some values of `limit` in Opera 10.5-10.63, unless + // Opera Dragonfly is open (go figure). It works in at least Opera 9.5-10.1 and 11+ + + limit = (limit === undefined ? -1 : limit) >>> 0; + (0, _forEach["default"])(XRegExp).call(XRegExp, str, separator, function (match) { + // This condition is not the same as `if (match[0].length)` + if (match.index + match[0].length > lastLastIndex) { + output.push((0, _slice["default"])(str).call(str, lastLastIndex, match.index)); + + if (match.length > 1 && match.index < str.length) { + Array.prototype.push.apply(output, (0, _slice["default"])(match).call(match, 1)); + } + + lastLength = match[0].length; + lastLastIndex = match.index + lastLength; + } + }); + + if (lastLastIndex === str.length) { + if (!nativ.test.call(separator, '') || lastLength) { + output.push(''); + } + } else { + output.push((0, _slice["default"])(str).call(str, lastLastIndex)); + } + + separator.lastIndex = origLastIndex; + return output.length > limit ? (0, _slice["default"])(output).call(output, 0, limit) : output; +}; // ==--------------------------== +// Built-in syntax/flag tokens +// ==--------------------------== + +/* + * Letter escapes that natively match literal characters: `\a`, `\A`, etc. These should be + * SyntaxErrors but are allowed in web reality. XRegExp makes them errors for cross-browser + * consistency and to reserve their syntax, but lets them be superseded by addons. + */ + + +XRegExp.addToken(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4}|{[\dA-Fa-f]+})|x(?![\dA-Fa-f]{2}))/, function (match, scope) { + // \B is allowed in default scope only + if (match[1] === 'B' && scope === defaultScope) { + return match[0]; + } + + throw new SyntaxError("Invalid escape ".concat(match[0])); +}, { + scope: 'all', + leadChar: '\\' +}); +/* + * Unicode code point escape with curly braces: `\u{N..}`. `N..` is any one or more digit + * hexadecimal number from 0-10FFFF, and can include leading zeros. Requires the native ES6 `u` flag + * to support code points greater than U+FFFF. Avoids converting code points above U+FFFF to + * surrogate pairs (which could be done without flag `u`), since that could lead to broken behavior + * if you follow a `\u{N..}` token that references a code point above U+FFFF with a quantifier, or + * if you use the same in a character class. + */ + +XRegExp.addToken(/\\u{([\dA-Fa-f]+)}/, function (match, scope, flags) { + var code = dec(match[1]); + + if (code > 0x10FFFF) { + throw new SyntaxError("Invalid Unicode code point ".concat(match[0])); + } + + if (code <= 0xFFFF) { + // Converting to \uNNNN avoids needing to escape the literal character and keep it + // separate from preceding tokens + return "\\u".concat(pad4(hex(code))); + } // If `code` is between 0xFFFF and 0x10FFFF, require and defer to native handling + + + if (hasNativeU && (0, _includes["default"])(flags).call(flags, 'u')) { + return match[0]; + } + + throw new SyntaxError('Cannot use Unicode code point above \\u{FFFF} without flag u'); +}, { + scope: 'all', + leadChar: '\\' +}); +/* + * Empty character class: `[]` or `[^]`. This fixes a critical cross-browser syntax inconsistency. + * Unless this is standardized (per the ES spec), regex syntax can't be accurately parsed because + * character class endings can't be determined. + */ + +XRegExp.addToken(/\[(\^?)\]/, // For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S]. +// (?!) should work like \b\B, but is unreliable in some versions of Firefox + +/* eslint-disable no-confusing-arrow */ +function (match) { + return match[1] ? '[\\s\\S]' : '\\b\\B'; +}, +/* eslint-enable no-confusing-arrow */ +{ + leadChar: '[' +}); +/* + * Comment pattern: `(?# )`. Inline comments are an alternative to the line comments allowed in + * free-spacing mode (flag x). + */ + +XRegExp.addToken(/\(\?#[^)]*\)/, getContextualTokenSeparator, { + leadChar: '(' +}); +/* + * Whitespace and line comments, in free-spacing mode (aka extended mode, flag x) only. + */ + +XRegExp.addToken(/\s+|#[^\n]*\n?/, getContextualTokenSeparator, { + flag: 'x' +}); +/* + * Dot, in dotall mode (aka singleline mode, flag s) only. + */ + +XRegExp.addToken(/\./, function () { + return '[\\s\\S]'; +}, { + flag: 's', + leadChar: '.' +}); +/* + * Named backreference: `\k`. Backreference names can use the characters A-Z, a-z, 0-9, _, + * and $ only. Also allows numbered backreferences as `\k`. + */ + +XRegExp.addToken(/\\k<([\w$]+)>/, function (match) { + var _context6, _context7; + + // Groups with the same name is an error, else would need `lastIndexOf` + var index = isNaN(match[1]) ? (0, _indexOf["default"])(_context6 = this.captureNames).call(_context6, match[1]) + 1 : +match[1]; + var endIndex = match.index + match[0].length; + + if (!index || index > this.captureNames.length) { + throw new SyntaxError("Backreference to undefined group ".concat(match[0])); + } // Keep backreferences separate from subsequent literal numbers. This avoids e.g. + // inadvertedly changing `(?)\k1` to `()\11`. + + + return (0, _concat["default"])(_context7 = "\\".concat(index)).call(_context7, endIndex === match.input.length || isNaN(match.input[endIndex]) ? '' : '(?:)'); +}, { + leadChar: '\\' +}); +/* + * Numbered backreference or octal, plus any following digits: `\0`, `\11`, etc. Octals except `\0` + * not followed by 0-9 and backreferences to unopened capture groups throw an error. Other matches + * are returned unaltered. IE < 9 doesn't support backreferences above `\99` in regex syntax. + */ + +XRegExp.addToken(/\\(\d+)/, function (match, scope) { + if (!(scope === defaultScope && /^[1-9]/.test(match[1]) && +match[1] <= this.captureNames.length) && match[1] !== '0') { + throw new SyntaxError("Cannot use octal escape or backreference to undefined group ".concat(match[0])); + } + + return match[0]; +}, { + scope: 'all', + leadChar: '\\' +}); +/* + * Named capturing group; match the opening delimiter only: `(?`. Capture names can use the + * characters A-Z, a-z, 0-9, _, and $ only. Names can't be integers. Supports Python-style + * `(?P` as an alternate syntax to avoid issues in some older versions of Opera which natively + * supported the Python-style syntax. Otherwise, XRegExp might treat numbered backreferences to + * Python-style named capture as octals. + */ + +XRegExp.addToken(/\(\?P?<([\w$]+)>/, function (match) { + var _context8; + + // Disallow bare integers as names because named backreferences are added to match arrays + // and therefore numeric properties may lead to incorrect lookups + if (!isNaN(match[1])) { + throw new SyntaxError("Cannot use integer as capture name ".concat(match[0])); + } + + if (!XRegExp.isInstalled('namespacing') && (match[1] === 'length' || match[1] === '__proto__')) { + throw new SyntaxError("Cannot use reserved word as capture name ".concat(match[0])); + } + + if ((0, _includes["default"])(_context8 = this.captureNames).call(_context8, match[1])) { + throw new SyntaxError("Cannot use same name for multiple groups ".concat(match[0])); + } + + this.captureNames.push(match[1]); + this.hasNamedCapture = true; + return '('; +}, { + leadChar: '(' +}); +/* + * Capturing group; match the opening parenthesis only. Required for support of named capturing + * groups. Also adds explicit capture mode (flag n). + */ + +XRegExp.addToken(/\((?!\?)/, function (match, scope, flags) { + if ((0, _includes["default"])(flags).call(flags, 'n')) { + return '(?:'; + } + + this.captureNames.push(null); + return '('; +}, { + optionalFlags: 'n', + leadChar: '(' +}); +var _default = XRegExp; +exports["default"] = _default; +module.exports = exports.default; +},{"@babel/runtime-corejs3/core-js-stable/array/from":10,"@babel/runtime-corejs3/core-js-stable/array/is-array":11,"@babel/runtime-corejs3/core-js-stable/instance/concat":12,"@babel/runtime-corejs3/core-js-stable/instance/flags":13,"@babel/runtime-corejs3/core-js-stable/instance/for-each":14,"@babel/runtime-corejs3/core-js-stable/instance/includes":15,"@babel/runtime-corejs3/core-js-stable/instance/index-of":16,"@babel/runtime-corejs3/core-js-stable/instance/slice":19,"@babel/runtime-corejs3/core-js-stable/instance/sort":20,"@babel/runtime-corejs3/core-js-stable/object/create":21,"@babel/runtime-corejs3/core-js-stable/object/define-property":22,"@babel/runtime-corejs3/core-js-stable/parse-int":23,"@babel/runtime-corejs3/core-js-stable/symbol":24,"@babel/runtime-corejs3/core-js/get-iterator":28,"@babel/runtime-corejs3/core-js/get-iterator-method":27,"@babel/runtime-corejs3/helpers/interopRequireDefault":34,"@babel/runtime-corejs3/helpers/slicedToArray":37}],10:[function(require,module,exports){ +module.exports = require("core-js-pure/stable/array/from"); +},{"core-js-pure/stable/array/from":206}],11:[function(require,module,exports){ +module.exports = require("core-js-pure/stable/array/is-array"); +},{"core-js-pure/stable/array/is-array":207}],12:[function(require,module,exports){ +module.exports = require("core-js-pure/stable/instance/concat"); +},{"core-js-pure/stable/instance/concat":209}],13:[function(require,module,exports){ +module.exports = require("core-js-pure/stable/instance/flags"); +},{"core-js-pure/stable/instance/flags":210}],14:[function(require,module,exports){ +module.exports = require("core-js-pure/stable/instance/for-each"); +},{"core-js-pure/stable/instance/for-each":211}],15:[function(require,module,exports){ +module.exports = require("core-js-pure/stable/instance/includes"); +},{"core-js-pure/stable/instance/includes":212}],16:[function(require,module,exports){ +module.exports = require("core-js-pure/stable/instance/index-of"); +},{"core-js-pure/stable/instance/index-of":213}],17:[function(require,module,exports){ +module.exports = require("core-js-pure/stable/instance/map"); +},{"core-js-pure/stable/instance/map":214}],18:[function(require,module,exports){ +module.exports = require("core-js-pure/stable/instance/reduce"); +},{"core-js-pure/stable/instance/reduce":215}],19:[function(require,module,exports){ +module.exports = require("core-js-pure/stable/instance/slice"); +},{"core-js-pure/stable/instance/slice":216}],20:[function(require,module,exports){ +module.exports = require("core-js-pure/stable/instance/sort"); +},{"core-js-pure/stable/instance/sort":217}],21:[function(require,module,exports){ +module.exports = require("core-js-pure/stable/object/create"); +},{"core-js-pure/stable/object/create":218}],22:[function(require,module,exports){ +module.exports = require("core-js-pure/stable/object/define-property"); +},{"core-js-pure/stable/object/define-property":219}],23:[function(require,module,exports){ +module.exports = require("core-js-pure/stable/parse-int"); +},{"core-js-pure/stable/parse-int":220}],24:[function(require,module,exports){ +module.exports = require("core-js-pure/stable/symbol"); +},{"core-js-pure/stable/symbol":221}],25:[function(require,module,exports){ +module.exports = require("core-js-pure/features/array/from"); +},{"core-js-pure/features/array/from":63}],26:[function(require,module,exports){ +module.exports = require("core-js-pure/features/array/is-array"); +},{"core-js-pure/features/array/is-array":64}],27:[function(require,module,exports){ +module.exports = require("core-js-pure/features/get-iterator-method"); +},{"core-js-pure/features/get-iterator-method":65}],28:[function(require,module,exports){ +module.exports = require("core-js-pure/features/get-iterator"); +},{"core-js-pure/features/get-iterator":66}],29:[function(require,module,exports){ +module.exports = require("core-js-pure/features/instance/slice"); +},{"core-js-pure/features/instance/slice":67}],30:[function(require,module,exports){ +module.exports = require("core-js-pure/features/is-iterable"); +},{"core-js-pure/features/is-iterable":68}],31:[function(require,module,exports){ +module.exports = require("core-js-pure/features/symbol"); +},{"core-js-pure/features/symbol":69}],32:[function(require,module,exports){ +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) { + arr2[i] = arr[i]; + } + + return arr2; +} + +module.exports = _arrayLikeToArray; +},{}],33:[function(require,module,exports){ +var _Array$isArray = require("@babel/runtime-corejs3/core-js/array/is-array"); + +function _arrayWithHoles(arr) { + if (_Array$isArray(arr)) return arr; +} + +module.exports = _arrayWithHoles; +},{"@babel/runtime-corejs3/core-js/array/is-array":26}],34:[function(require,module,exports){ +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + "default": obj + }; +} + +module.exports = _interopRequireDefault; +},{}],35:[function(require,module,exports){ +var _getIterator = require("@babel/runtime-corejs3/core-js/get-iterator"); + +var _isIterable = require("@babel/runtime-corejs3/core-js/is-iterable"); + +var _Symbol = require("@babel/runtime-corejs3/core-js/symbol"); + +function _iterableToArrayLimit(arr, i) { + if (typeof _Symbol === "undefined" || !_isIterable(Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = _getIterator(arr), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; +} + +module.exports = _iterableToArrayLimit; +},{"@babel/runtime-corejs3/core-js/get-iterator":28,"@babel/runtime-corejs3/core-js/is-iterable":30,"@babel/runtime-corejs3/core-js/symbol":31}],36:[function(require,module,exports){ +function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +module.exports = _nonIterableRest; +},{}],37:[function(require,module,exports){ +var arrayWithHoles = require("./arrayWithHoles"); + +var iterableToArrayLimit = require("./iterableToArrayLimit"); + +var unsupportedIterableToArray = require("./unsupportedIterableToArray"); + +var nonIterableRest = require("./nonIterableRest"); + +function _slicedToArray(arr, i) { + return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest(); +} + +module.exports = _slicedToArray; +},{"./arrayWithHoles":33,"./iterableToArrayLimit":35,"./nonIterableRest":36,"./unsupportedIterableToArray":38}],38:[function(require,module,exports){ +var _Array$from = require("@babel/runtime-corejs3/core-js/array/from"); + +var _sliceInstanceProperty = require("@babel/runtime-corejs3/core-js/instance/slice"); + +var arrayLikeToArray = require("./arrayLikeToArray"); + +function _unsupportedIterableToArray(o, minLen) { + var _context; + + if (!o) return; + if (typeof o === "string") return arrayLikeToArray(o, minLen); + + var n = _sliceInstanceProperty(_context = Object.prototype.toString.call(o)).call(_context, 8, -1); + + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return _Array$from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen); +} + +module.exports = _unsupportedIterableToArray; +},{"./arrayLikeToArray":32,"@babel/runtime-corejs3/core-js/array/from":25,"@babel/runtime-corejs3/core-js/instance/slice":29}],39:[function(require,module,exports){ +require('../../modules/es.string.iterator'); +require('../../modules/es.array.from'); +var path = require('../../internals/path'); + +module.exports = path.Array.from; + +},{"../../internals/path":142,"../../modules/es.array.from":167,"../../modules/es.string.iterator":184}],40:[function(require,module,exports){ +require('../../modules/es.array.is-array'); +var path = require('../../internals/path'); + +module.exports = path.Array.isArray; + +},{"../../internals/path":142,"../../modules/es.array.is-array":170}],41:[function(require,module,exports){ +require('../../../modules/es.array.concat'); +var entryVirtual = require('../../../internals/entry-virtual'); + +module.exports = entryVirtual('Array').concat; + +},{"../../../internals/entry-virtual":100,"../../../modules/es.array.concat":165}],42:[function(require,module,exports){ +require('../../../modules/es.array.for-each'); +var entryVirtual = require('../../../internals/entry-virtual'); + +module.exports = entryVirtual('Array').forEach; + +},{"../../../internals/entry-virtual":100,"../../../modules/es.array.for-each":166}],43:[function(require,module,exports){ +require('../../../modules/es.array.includes'); +var entryVirtual = require('../../../internals/entry-virtual'); + +module.exports = entryVirtual('Array').includes; + +},{"../../../internals/entry-virtual":100,"../../../modules/es.array.includes":168}],44:[function(require,module,exports){ +require('../../../modules/es.array.index-of'); +var entryVirtual = require('../../../internals/entry-virtual'); + +module.exports = entryVirtual('Array').indexOf; + +},{"../../../internals/entry-virtual":100,"../../../modules/es.array.index-of":169}],45:[function(require,module,exports){ +require('../../../modules/es.array.map'); +var entryVirtual = require('../../../internals/entry-virtual'); + +module.exports = entryVirtual('Array').map; + +},{"../../../internals/entry-virtual":100,"../../../modules/es.array.map":172}],46:[function(require,module,exports){ +require('../../../modules/es.array.reduce'); +var entryVirtual = require('../../../internals/entry-virtual'); + +module.exports = entryVirtual('Array').reduce; + +},{"../../../internals/entry-virtual":100,"../../../modules/es.array.reduce":173}],47:[function(require,module,exports){ +require('../../../modules/es.array.slice'); +var entryVirtual = require('../../../internals/entry-virtual'); + +module.exports = entryVirtual('Array').slice; + +},{"../../../internals/entry-virtual":100,"../../../modules/es.array.slice":174}],48:[function(require,module,exports){ +require('../../../modules/es.array.sort'); +var entryVirtual = require('../../../internals/entry-virtual'); + +module.exports = entryVirtual('Array').sort; + +},{"../../../internals/entry-virtual":100,"../../../modules/es.array.sort":175}],49:[function(require,module,exports){ +var concat = require('../array/virtual/concat'); + +var ArrayPrototype = Array.prototype; + +module.exports = function (it) { + var own = it.concat; + return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.concat) ? concat : own; +}; + +},{"../array/virtual/concat":41}],50:[function(require,module,exports){ +var flags = require('../regexp/flags'); + +var RegExpPrototype = RegExp.prototype; + +module.exports = function (it) { + return (it === RegExpPrototype || it instanceof RegExp) && !('flags' in it) ? flags(it) : it.flags; +}; + +},{"../regexp/flags":60}],51:[function(require,module,exports){ +var arrayIncludes = require('../array/virtual/includes'); +var stringIncludes = require('../string/virtual/includes'); + +var ArrayPrototype = Array.prototype; +var StringPrototype = String.prototype; + +module.exports = function (it) { + var own = it.includes; + if (it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.includes)) return arrayIncludes; + if (typeof it === 'string' || it === StringPrototype || (it instanceof String && own === StringPrototype.includes)) { + return stringIncludes; + } return own; +}; + +},{"../array/virtual/includes":43,"../string/virtual/includes":61}],52:[function(require,module,exports){ +var indexOf = require('../array/virtual/index-of'); + +var ArrayPrototype = Array.prototype; + +module.exports = function (it) { + var own = it.indexOf; + return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.indexOf) ? indexOf : own; +}; + +},{"../array/virtual/index-of":44}],53:[function(require,module,exports){ +var map = require('../array/virtual/map'); + +var ArrayPrototype = Array.prototype; + +module.exports = function (it) { + var own = it.map; + return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.map) ? map : own; +}; + +},{"../array/virtual/map":45}],54:[function(require,module,exports){ +var reduce = require('../array/virtual/reduce'); + +var ArrayPrototype = Array.prototype; + +module.exports = function (it) { + var own = it.reduce; + return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.reduce) ? reduce : own; +}; + +},{"../array/virtual/reduce":46}],55:[function(require,module,exports){ +var slice = require('../array/virtual/slice'); + +var ArrayPrototype = Array.prototype; + +module.exports = function (it) { + var own = it.slice; + return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.slice) ? slice : own; +}; + +},{"../array/virtual/slice":47}],56:[function(require,module,exports){ +var sort = require('../array/virtual/sort'); + +var ArrayPrototype = Array.prototype; + +module.exports = function (it) { + var own = it.sort; + return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.sort) ? sort : own; +}; + +},{"../array/virtual/sort":48}],57:[function(require,module,exports){ +require('../../modules/es.object.create'); +var path = require('../../internals/path'); + +var Object = path.Object; + +module.exports = function create(P, D) { + return Object.create(P, D); +}; + +},{"../../internals/path":142,"../../modules/es.object.create":178}],58:[function(require,module,exports){ +require('../../modules/es.object.define-property'); +var path = require('../../internals/path'); + +var Object = path.Object; + +var defineProperty = module.exports = function defineProperty(it, key, desc) { + return Object.defineProperty(it, key, desc); +}; + +if (Object.defineProperty.sham) defineProperty.sham = true; + +},{"../../internals/path":142,"../../modules/es.object.define-property":179}],59:[function(require,module,exports){ +require('../modules/es.parse-int'); +var path = require('../internals/path'); + +module.exports = path.parseInt; + +},{"../internals/path":142,"../modules/es.parse-int":181}],60:[function(require,module,exports){ +require('../../modules/es.regexp.flags'); +var flags = require('../../internals/regexp-flags'); + +module.exports = function (it) { + return flags.call(it); +}; + +},{"../../internals/regexp-flags":144,"../../modules/es.regexp.flags":182}],61:[function(require,module,exports){ +require('../../../modules/es.string.includes'); +var entryVirtual = require('../../../internals/entry-virtual'); + +module.exports = entryVirtual('String').includes; + +},{"../../../internals/entry-virtual":100,"../../../modules/es.string.includes":183}],62:[function(require,module,exports){ +require('../../modules/es.array.concat'); +require('../../modules/es.object.to-string'); +require('../../modules/es.symbol'); +require('../../modules/es.symbol.async-iterator'); +require('../../modules/es.symbol.description'); +require('../../modules/es.symbol.has-instance'); +require('../../modules/es.symbol.is-concat-spreadable'); +require('../../modules/es.symbol.iterator'); +require('../../modules/es.symbol.match'); +require('../../modules/es.symbol.match-all'); +require('../../modules/es.symbol.replace'); +require('../../modules/es.symbol.search'); +require('../../modules/es.symbol.species'); +require('../../modules/es.symbol.split'); +require('../../modules/es.symbol.to-primitive'); +require('../../modules/es.symbol.to-string-tag'); +require('../../modules/es.symbol.unscopables'); +require('../../modules/es.math.to-string-tag'); +require('../../modules/es.json.to-string-tag'); +var path = require('../../internals/path'); + +module.exports = path.Symbol; + +},{"../../internals/path":142,"../../modules/es.array.concat":165,"../../modules/es.json.to-string-tag":176,"../../modules/es.math.to-string-tag":177,"../../modules/es.object.to-string":180,"../../modules/es.symbol":190,"../../modules/es.symbol.async-iterator":185,"../../modules/es.symbol.description":186,"../../modules/es.symbol.has-instance":187,"../../modules/es.symbol.is-concat-spreadable":188,"../../modules/es.symbol.iterator":189,"../../modules/es.symbol.match":192,"../../modules/es.symbol.match-all":191,"../../modules/es.symbol.replace":193,"../../modules/es.symbol.search":194,"../../modules/es.symbol.species":195,"../../modules/es.symbol.split":196,"../../modules/es.symbol.to-primitive":197,"../../modules/es.symbol.to-string-tag":198,"../../modules/es.symbol.unscopables":199}],63:[function(require,module,exports){ +var parent = require('../../es/array/from'); + +module.exports = parent; + +},{"../../es/array/from":39}],64:[function(require,module,exports){ +var parent = require('../../es/array/is-array'); + +module.exports = parent; + +},{"../../es/array/is-array":40}],65:[function(require,module,exports){ +require('../modules/web.dom-collections.iterator'); +require('../modules/es.string.iterator'); +var getIteratorMethod = require('../internals/get-iterator-method'); + +module.exports = getIteratorMethod; + +},{"../internals/get-iterator-method":106,"../modules/es.string.iterator":184,"../modules/web.dom-collections.iterator":205}],66:[function(require,module,exports){ +require('../modules/web.dom-collections.iterator'); +require('../modules/es.string.iterator'); +var getIterator = require('../internals/get-iterator'); + +module.exports = getIterator; + +},{"../internals/get-iterator":107,"../modules/es.string.iterator":184,"../modules/web.dom-collections.iterator":205}],67:[function(require,module,exports){ +var parent = require('../../es/instance/slice'); + +module.exports = parent; + +},{"../../es/instance/slice":55}],68:[function(require,module,exports){ +require('../modules/web.dom-collections.iterator'); +require('../modules/es.string.iterator'); +var isIterable = require('../internals/is-iterable'); + +module.exports = isIterable; + +},{"../internals/is-iterable":119,"../modules/es.string.iterator":184,"../modules/web.dom-collections.iterator":205}],69:[function(require,module,exports){ +var parent = require('../../es/symbol'); +require('../../modules/esnext.symbol.async-dispose'); +require('../../modules/esnext.symbol.dispose'); +require('../../modules/esnext.symbol.observable'); +require('../../modules/esnext.symbol.pattern-match'); +// TODO: Remove from `core-js@4` +require('../../modules/esnext.symbol.replace-all'); + +module.exports = parent; + +},{"../../es/symbol":62,"../../modules/esnext.symbol.async-dispose":200,"../../modules/esnext.symbol.dispose":201,"../../modules/esnext.symbol.observable":202,"../../modules/esnext.symbol.pattern-match":203,"../../modules/esnext.symbol.replace-all":204}],70:[function(require,module,exports){ +module.exports = function (it) { + if (typeof it != 'function') { + throw TypeError(String(it) + ' is not a function'); + } return it; +}; + +},{}],71:[function(require,module,exports){ +var isObject = require('../internals/is-object'); + +module.exports = function (it) { + if (!isObject(it) && it !== null) { + throw TypeError("Can't set " + String(it) + ' as a prototype'); + } return it; +}; + +},{"../internals/is-object":120}],72:[function(require,module,exports){ +module.exports = function () { /* empty */ }; + +},{}],73:[function(require,module,exports){ +var isObject = require('../internals/is-object'); + +module.exports = function (it) { + if (!isObject(it)) { + throw TypeError(String(it) + ' is not an object'); + } return it; +}; + +},{"../internals/is-object":120}],74:[function(require,module,exports){ +'use strict'; +var $forEach = require('../internals/array-iteration').forEach; +var arrayMethodIsStrict = require('../internals/array-method-is-strict'); +var arrayMethodUsesToLength = require('../internals/array-method-uses-to-length'); + +var STRICT_METHOD = arrayMethodIsStrict('forEach'); +var USES_TO_LENGTH = arrayMethodUsesToLength('forEach'); + +// `Array.prototype.forEach` method implementation +// https://tc39.github.io/ecma262/#sec-array.prototype.foreach +module.exports = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) { + return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); +} : [].forEach; + +},{"../internals/array-iteration":77,"../internals/array-method-is-strict":79,"../internals/array-method-uses-to-length":80}],75:[function(require,module,exports){ +'use strict'; +var bind = require('../internals/function-bind-context'); +var toObject = require('../internals/to-object'); +var callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing'); +var isArrayIteratorMethod = require('../internals/is-array-iterator-method'); +var toLength = require('../internals/to-length'); +var createProperty = require('../internals/create-property'); +var getIteratorMethod = require('../internals/get-iterator-method'); + +// `Array.from` method implementation +// https://tc39.github.io/ecma262/#sec-array.from +module.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { + var O = toObject(arrayLike); + var C = typeof this == 'function' ? this : Array; + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + var iteratorMethod = getIteratorMethod(O); + var index = 0; + var length, result, step, iterator, next, value; + if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2); + // if the target is not iterable or it's an array with the default iterator - use a simple case + if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) { + iterator = iteratorMethod.call(O); + next = iterator.next; + result = new C(); + for (;!(step = next.call(iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); + } + } else { + length = toLength(O.length); + result = new C(length); + for (;length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); + } + } + result.length = index; + return result; +}; + +},{"../internals/call-with-safe-iteration-closing":83,"../internals/create-property":92,"../internals/function-bind-context":104,"../internals/get-iterator-method":106,"../internals/is-array-iterator-method":116,"../internals/to-length":156,"../internals/to-object":157}],76:[function(require,module,exports){ +var toIndexedObject = require('../internals/to-indexed-object'); +var toLength = require('../internals/to-length'); +var toAbsoluteIndex = require('../internals/to-absolute-index'); + +// `Array.prototype.{ indexOf, includes }` methods implementation +var createMethod = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = toLength(O.length); + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare + if (IS_INCLUDES && el != el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare + if (value != value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + +module.exports = { + // `Array.prototype.includes` method + // https://tc39.github.io/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.github.io/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) +}; + +},{"../internals/to-absolute-index":153,"../internals/to-indexed-object":154,"../internals/to-length":156}],77:[function(require,module,exports){ +var bind = require('../internals/function-bind-context'); +var IndexedObject = require('../internals/indexed-object'); +var toObject = require('../internals/to-object'); +var toLength = require('../internals/to-length'); +var arraySpeciesCreate = require('../internals/array-species-create'); + +var push = [].push; + +// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation +var createMethod = function (TYPE) { + var IS_MAP = TYPE == 1; + var IS_FILTER = TYPE == 2; + var IS_SOME = TYPE == 3; + var IS_EVERY = TYPE == 4; + var IS_FIND_INDEX = TYPE == 6; + var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + return function ($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self = IndexedObject(O); + var boundFunction = bind(callbackfn, that, 3); + var length = toLength(self.length); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; + var value, result; + for (;length > index; index++) if (NO_HOLES || index in self) { + value = self[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) target[index] = result; // map + else if (result) switch (TYPE) { + case 3: return true; // some + case 5: return value; // find + case 6: return index; // findIndex + case 2: push.call(target, value); // filter + } else if (IS_EVERY) return false; // every + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; +}; + +module.exports = { + // `Array.prototype.forEach` method + // https://tc39.github.io/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.github.io/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.github.io/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.github.io/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.github.io/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.github.io/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6) +}; + +},{"../internals/array-species-create":82,"../internals/function-bind-context":104,"../internals/indexed-object":113,"../internals/to-length":156,"../internals/to-object":157}],78:[function(require,module,exports){ +var fails = require('../internals/fails'); +var wellKnownSymbol = require('../internals/well-known-symbol'); +var V8_VERSION = require('../internals/engine-v8-version'); + +var SPECIES = wellKnownSymbol('species'); + +module.exports = function (METHOD_NAME) { + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/677 + return V8_VERSION >= 51 || !fails(function () { + var array = []; + var constructor = array.constructor = {}; + constructor[SPECIES] = function () { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }); +}; + +},{"../internals/engine-v8-version":99,"../internals/fails":103,"../internals/well-known-symbol":163}],79:[function(require,module,exports){ +'use strict'; +var fails = require('../internals/fails'); + +module.exports = function (METHOD_NAME, argument) { + var method = [][METHOD_NAME]; + return !!method && fails(function () { + // eslint-disable-next-line no-useless-call,no-throw-literal + method.call(null, argument || function () { throw 1; }, 1); + }); +}; + +},{"../internals/fails":103}],80:[function(require,module,exports){ +var DESCRIPTORS = require('../internals/descriptors'); +var fails = require('../internals/fails'); +var has = require('../internals/has'); + +var defineProperty = Object.defineProperty; +var cache = {}; + +var thrower = function (it) { throw it; }; + +module.exports = function (METHOD_NAME, options) { + if (has(cache, METHOD_NAME)) return cache[METHOD_NAME]; + if (!options) options = {}; + var method = [][METHOD_NAME]; + var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false; + var argument0 = has(options, 0) ? options[0] : thrower; + var argument1 = has(options, 1) ? options[1] : undefined; + + return cache[METHOD_NAME] = !!method && !fails(function () { + if (ACCESSORS && !DESCRIPTORS) return true; + var O = { length: -1 }; + + if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower }); + else O[1] = 1; + + method.call(O, argument0, argument1); + }); +}; + +},{"../internals/descriptors":95,"../internals/fails":103,"../internals/has":109}],81:[function(require,module,exports){ +var aFunction = require('../internals/a-function'); +var toObject = require('../internals/to-object'); +var IndexedObject = require('../internals/indexed-object'); +var toLength = require('../internals/to-length'); + +// `Array.prototype.{ reduce, reduceRight }` methods implementation +var createMethod = function (IS_RIGHT) { + return function (that, callbackfn, argumentsLength, memo) { + aFunction(callbackfn); + var O = toObject(that); + var self = IndexedObject(O); + var length = toLength(O.length); + var index = IS_RIGHT ? length - 1 : 0; + var i = IS_RIGHT ? -1 : 1; + if (argumentsLength < 2) while (true) { + if (index in self) { + memo = self[index]; + index += i; + break; + } + index += i; + if (IS_RIGHT ? index < 0 : length <= index) { + throw TypeError('Reduce of empty array with no initial value'); + } + } + for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) { + memo = callbackfn(memo, self[index], index, O); + } + return memo; + }; +}; + +module.exports = { + // `Array.prototype.reduce` method + // https://tc39.github.io/ecma262/#sec-array.prototype.reduce + left: createMethod(false), + // `Array.prototype.reduceRight` method + // https://tc39.github.io/ecma262/#sec-array.prototype.reduceright + right: createMethod(true) +}; + +},{"../internals/a-function":70,"../internals/indexed-object":113,"../internals/to-length":156,"../internals/to-object":157}],82:[function(require,module,exports){ +var isObject = require('../internals/is-object'); +var isArray = require('../internals/is-array'); +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var SPECIES = wellKnownSymbol('species'); + +// `ArraySpeciesCreate` abstract operation +// https://tc39.github.io/ecma262/#sec-arrayspeciescreate +module.exports = function (originalArray, length) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + // cross-realm fallback + if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) C = undefined; + } + } return new (C === undefined ? Array : C)(length === 0 ? 0 : length); +}; + +},{"../internals/is-array":117,"../internals/is-object":120,"../internals/well-known-symbol":163}],83:[function(require,module,exports){ +var anObject = require('../internals/an-object'); + +// call something on iterator step with safe closing on error +module.exports = function (iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + // 7.4.6 IteratorClose(iterator, completion) + } catch (error) { + var returnMethod = iterator['return']; + if (returnMethod !== undefined) anObject(returnMethod.call(iterator)); + throw error; + } +}; + +},{"../internals/an-object":73}],84:[function(require,module,exports){ +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var ITERATOR = wellKnownSymbol('iterator'); +var SAFE_CLOSING = false; + +try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { done: !!called++ }; + }, + 'return': function () { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function () { + return this; + }; + // eslint-disable-next-line no-throw-literal + Array.from(iteratorWithReturn, function () { throw 2; }); +} catch (error) { /* empty */ } + +module.exports = function (exec, SKIP_CLOSING) { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function () { + return { + next: function () { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { /* empty */ } + return ITERATION_SUPPORT; +}; + +},{"../internals/well-known-symbol":163}],85:[function(require,module,exports){ +var toString = {}.toString; + +module.exports = function (it) { + return toString.call(it).slice(8, -1); +}; + +},{}],86:[function(require,module,exports){ +var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support'); +var classofRaw = require('../internals/classof-raw'); +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +// ES3 wrong here +var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } +}; + +// getting tag from ES6+ `Object.prototype.toString` +module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; +}; + +},{"../internals/classof-raw":85,"../internals/to-string-tag-support":159,"../internals/well-known-symbol":163}],87:[function(require,module,exports){ +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var MATCH = wellKnownSymbol('match'); + +module.exports = function (METHOD_NAME) { + var regexp = /./; + try { + '/./'[METHOD_NAME](regexp); + } catch (e) { + try { + regexp[MATCH] = false; + return '/./'[METHOD_NAME](regexp); + } catch (f) { /* empty */ } + } return false; +}; + +},{"../internals/well-known-symbol":163}],88:[function(require,module,exports){ +var fails = require('../internals/fails'); + +module.exports = !fails(function () { + function F() { /* empty */ } + F.prototype.constructor = null; + return Object.getPrototypeOf(new F()) !== F.prototype; +}); + +},{"../internals/fails":103}],89:[function(require,module,exports){ +'use strict'; +var IteratorPrototype = require('../internals/iterators-core').IteratorPrototype; +var create = require('../internals/object-create'); +var createPropertyDescriptor = require('../internals/create-property-descriptor'); +var setToStringTag = require('../internals/set-to-string-tag'); +var Iterators = require('../internals/iterators'); + +var returnThis = function () { return this; }; + +module.exports = function (IteratorConstructor, NAME, next) { + var TO_STRING_TAG = NAME + ' Iterator'; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; +}; + +},{"../internals/create-property-descriptor":91,"../internals/iterators":124,"../internals/iterators-core":123,"../internals/object-create":129,"../internals/set-to-string-tag":147}],90:[function(require,module,exports){ +var DESCRIPTORS = require('../internals/descriptors'); +var definePropertyModule = require('../internals/object-define-property'); +var createPropertyDescriptor = require('../internals/create-property-descriptor'); + +module.exports = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + +},{"../internals/create-property-descriptor":91,"../internals/descriptors":95,"../internals/object-define-property":131}],91:[function(require,module,exports){ +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + +},{}],92:[function(require,module,exports){ +'use strict'; +var toPrimitive = require('../internals/to-primitive'); +var definePropertyModule = require('../internals/object-define-property'); +var createPropertyDescriptor = require('../internals/create-property-descriptor'); + +module.exports = function (object, key, value) { + var propertyKey = toPrimitive(key); + if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value)); + else object[propertyKey] = value; +}; + +},{"../internals/create-property-descriptor":91,"../internals/object-define-property":131,"../internals/to-primitive":158}],93:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var createIteratorConstructor = require('../internals/create-iterator-constructor'); +var getPrototypeOf = require('../internals/object-get-prototype-of'); +var setPrototypeOf = require('../internals/object-set-prototype-of'); +var setToStringTag = require('../internals/set-to-string-tag'); +var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); +var redefine = require('../internals/redefine'); +var wellKnownSymbol = require('../internals/well-known-symbol'); +var IS_PURE = require('../internals/is-pure'); +var Iterators = require('../internals/iterators'); +var IteratorsCore = require('../internals/iterators-core'); + +var IteratorPrototype = IteratorsCore.IteratorPrototype; +var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; +var ITERATOR = wellKnownSymbol('iterator'); +var KEYS = 'keys'; +var VALUES = 'values'; +var ENTRIES = 'entries'; + +var returnThis = function () { return this; }; + +module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + + var getIterationMethod = function (KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; + case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; + case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; + } return function () { return new IteratorConstructor(this); }; + }; + + var TO_STRING_TAG = NAME + ' Iterator'; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] + || IterablePrototype['@@iterator'] + || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + + // fix native + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') { + createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + // Set @@toStringTag to native iterators + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; + } + } + + // fix Array#{values, @@iterator}.name in V8 / FF + if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { return nativeIterator.call(this); }; + } + + // define iterator + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator); + } + Iterators[NAME] = defaultIterator; + + // export additional methods + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + redefine(IterablePrototype, KEY, methods[KEY]); + } + } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + + return methods; +}; + +},{"../internals/create-iterator-constructor":89,"../internals/create-non-enumerable-property":90,"../internals/export":102,"../internals/is-pure":121,"../internals/iterators":124,"../internals/iterators-core":123,"../internals/object-get-prototype-of":136,"../internals/object-set-prototype-of":140,"../internals/redefine":143,"../internals/set-to-string-tag":147,"../internals/well-known-symbol":163}],94:[function(require,module,exports){ +var path = require('../internals/path'); +var has = require('../internals/has'); +var wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped'); +var defineProperty = require('../internals/object-define-property').f; + +module.exports = function (NAME) { + var Symbol = path.Symbol || (path.Symbol = {}); + if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, { + value: wrappedWellKnownSymbolModule.f(NAME) + }); +}; + +},{"../internals/has":109,"../internals/object-define-property":131,"../internals/path":142,"../internals/well-known-symbol-wrapped":162}],95:[function(require,module,exports){ +var fails = require('../internals/fails'); + +// Thank's IE8 for his funny defineProperty +module.exports = !fails(function () { + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; +}); + +},{"../internals/fails":103}],96:[function(require,module,exports){ +var global = require('../internals/global'); +var isObject = require('../internals/is-object'); + +var document = global.document; +// typeof document.createElement is 'object' in old IE +var EXISTS = isObject(document) && isObject(document.createElement); + +module.exports = function (it) { + return EXISTS ? document.createElement(it) : {}; +}; + +},{"../internals/global":108,"../internals/is-object":120}],97:[function(require,module,exports){ +// iterable DOM collections +// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods +module.exports = { + CSSRuleList: 0, + CSSStyleDeclaration: 0, + CSSValueList: 0, + ClientRectList: 0, + DOMRectList: 0, + DOMStringList: 0, + DOMTokenList: 1, + DataTransferItemList: 0, + FileList: 0, + HTMLAllCollection: 0, + HTMLCollection: 0, + HTMLFormElement: 0, + HTMLSelectElement: 0, + MediaList: 0, + MimeTypeArray: 0, + NamedNodeMap: 0, + NodeList: 1, + PaintRequestList: 0, + Plugin: 0, + PluginArray: 0, + SVGLengthList: 0, + SVGNumberList: 0, + SVGPathSegList: 0, + SVGPointList: 0, + SVGStringList: 0, + SVGTransformList: 0, + SourceBufferList: 0, + StyleSheetList: 0, + TextTrackCueList: 0, + TextTrackList: 0, + TouchList: 0 +}; + +},{}],98:[function(require,module,exports){ +var getBuiltIn = require('../internals/get-built-in'); + +module.exports = getBuiltIn('navigator', 'userAgent') || ''; + +},{"../internals/get-built-in":105}],99:[function(require,module,exports){ +var global = require('../internals/global'); +var userAgent = require('../internals/engine-user-agent'); + +var process = global.process; +var versions = process && process.versions; +var v8 = versions && versions.v8; +var match, version; + +if (v8) { + match = v8.split('.'); + version = match[0] + match[1]; +} else if (userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) version = match[1]; + } +} + +module.exports = version && +version; + +},{"../internals/engine-user-agent":98,"../internals/global":108}],100:[function(require,module,exports){ +var path = require('../internals/path'); + +module.exports = function (CONSTRUCTOR) { + return path[CONSTRUCTOR + 'Prototype']; +}; + +},{"../internals/path":142}],101:[function(require,module,exports){ +// IE8- don't enum bug keys +module.exports = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' +]; + +},{}],102:[function(require,module,exports){ +'use strict'; +var global = require('../internals/global'); +var getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f; +var isForced = require('../internals/is-forced'); +var path = require('../internals/path'); +var bind = require('../internals/function-bind-context'); +var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); +var has = require('../internals/has'); + +var wrapConstructor = function (NativeConstructor) { + var Wrapper = function (a, b, c) { + if (this instanceof NativeConstructor) { + switch (arguments.length) { + case 0: return new NativeConstructor(); + case 1: return new NativeConstructor(a); + case 2: return new NativeConstructor(a, b); + } return new NativeConstructor(a, b, c); + } return NativeConstructor.apply(this, arguments); + }; + Wrapper.prototype = NativeConstructor.prototype; + return Wrapper; +}; + +/* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.noTargetGet - prevent calling a getter on target +*/ +module.exports = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var PROTO = options.proto; + + var nativeSource = GLOBAL ? global : STATIC ? global[TARGET] : (global[TARGET] || {}).prototype; + + var target = GLOBAL ? path : path[TARGET] || (path[TARGET] = {}); + var targetPrototype = target.prototype; + + var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE; + var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor; + + for (key in source) { + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contains in native + USE_NATIVE = !FORCED && nativeSource && has(nativeSource, key); + + targetProperty = target[key]; + + if (USE_NATIVE) if (options.noTargetGet) { + descriptor = getOwnPropertyDescriptor(nativeSource, key); + nativeProperty = descriptor && descriptor.value; + } else nativeProperty = nativeSource[key]; + + // export native or implementation + sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key]; + + if (USE_NATIVE && typeof targetProperty === typeof sourceProperty) continue; + + // bind timers to global for call from export context + if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, global); + // wrap global constructors for prevent changs in this version + else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty); + // make static versions for prototype methods + else if (PROTO && typeof sourceProperty == 'function') resultProperty = bind(Function.call, sourceProperty); + // default case + else resultProperty = sourceProperty; + + // add a flag to not completely full polyfills + if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(resultProperty, 'sham', true); + } + + target[key] = resultProperty; + + if (PROTO) { + VIRTUAL_PROTOTYPE = TARGET + 'Prototype'; + if (!has(path, VIRTUAL_PROTOTYPE)) { + createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {}); + } + // export virtual prototype methods + path[VIRTUAL_PROTOTYPE][key] = sourceProperty; + // export real prototype methods + if (options.real && targetPrototype && !targetPrototype[key]) { + createNonEnumerableProperty(targetPrototype, key, sourceProperty); + } + } + } +}; + +},{"../internals/create-non-enumerable-property":90,"../internals/function-bind-context":104,"../internals/global":108,"../internals/has":109,"../internals/is-forced":118,"../internals/object-get-own-property-descriptor":132,"../internals/path":142}],103:[function(require,module,exports){ +module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } +}; + +},{}],104:[function(require,module,exports){ +var aFunction = require('../internals/a-function'); + +// optional / simple context binding +module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 0: return function () { + return fn.call(that); + }; + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + +},{"../internals/a-function":70}],105:[function(require,module,exports){ +var path = require('../internals/path'); +var global = require('../internals/global'); + +var aFunction = function (variable) { + return typeof variable == 'function' ? variable : undefined; +}; + +module.exports = function (namespace, method) { + return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) + : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; +}; + +},{"../internals/global":108,"../internals/path":142}],106:[function(require,module,exports){ +var classof = require('../internals/classof'); +var Iterators = require('../internals/iterators'); +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var ITERATOR = wellKnownSymbol('iterator'); + +module.exports = function (it) { + if (it != undefined) return it[ITERATOR] + || it['@@iterator'] + || Iterators[classof(it)]; +}; + +},{"../internals/classof":86,"../internals/iterators":124,"../internals/well-known-symbol":163}],107:[function(require,module,exports){ +var anObject = require('../internals/an-object'); +var getIteratorMethod = require('../internals/get-iterator-method'); + +module.exports = function (it) { + var iteratorMethod = getIteratorMethod(it); + if (typeof iteratorMethod != 'function') { + throw TypeError(String(it) + ' is not iterable'); + } return anObject(iteratorMethod.call(it)); +}; + +},{"../internals/an-object":73,"../internals/get-iterator-method":106}],108:[function(require,module,exports){ +(function (global){(function (){ +var check = function (it) { + return it && it.Math == Math && it; +}; + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +module.exports = + // eslint-disable-next-line no-undef + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + check(typeof self == 'object' && self) || + check(typeof global == 'object' && global) || + // eslint-disable-next-line no-new-func + Function('return this')(); + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],109:[function(require,module,exports){ +var hasOwnProperty = {}.hasOwnProperty; + +module.exports = function (it, key) { + return hasOwnProperty.call(it, key); +}; + +},{}],110:[function(require,module,exports){ +module.exports = {}; + +},{}],111:[function(require,module,exports){ +var getBuiltIn = require('../internals/get-built-in'); + +module.exports = getBuiltIn('document', 'documentElement'); + +},{"../internals/get-built-in":105}],112:[function(require,module,exports){ +var DESCRIPTORS = require('../internals/descriptors'); +var fails = require('../internals/fails'); +var createElement = require('../internals/document-create-element'); + +// Thank's IE8 for his funny defineProperty +module.exports = !DESCRIPTORS && !fails(function () { + return Object.defineProperty(createElement('div'), 'a', { + get: function () { return 7; } + }).a != 7; +}); + +},{"../internals/descriptors":95,"../internals/document-create-element":96,"../internals/fails":103}],113:[function(require,module,exports){ +var fails = require('../internals/fails'); +var classof = require('../internals/classof-raw'); + +var split = ''.split; + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +module.exports = fails(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins + return !Object('z').propertyIsEnumerable(0); +}) ? function (it) { + return classof(it) == 'String' ? split.call(it, '') : Object(it); +} : Object; + +},{"../internals/classof-raw":85,"../internals/fails":103}],114:[function(require,module,exports){ +var store = require('../internals/shared-store'); + +var functionToString = Function.toString; + +// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper +if (typeof store.inspectSource != 'function') { + store.inspectSource = function (it) { + return functionToString.call(it); + }; +} + +module.exports = store.inspectSource; + +},{"../internals/shared-store":149}],115:[function(require,module,exports){ +var NATIVE_WEAK_MAP = require('../internals/native-weak-map'); +var global = require('../internals/global'); +var isObject = require('../internals/is-object'); +var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); +var objectHas = require('../internals/has'); +var sharedKey = require('../internals/shared-key'); +var hiddenKeys = require('../internals/hidden-keys'); + +var WeakMap = global.WeakMap; +var set, get, has; + +var enforce = function (it) { + return has(it) ? get(it) : set(it, {}); +}; + +var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw TypeError('Incompatible receiver, ' + TYPE + ' required'); + } return state; + }; +}; + +if (NATIVE_WEAK_MAP) { + var store = new WeakMap(); + var wmget = store.get; + var wmhas = store.has; + var wmset = store.set; + set = function (it, metadata) { + wmset.call(store, it, metadata); + return metadata; + }; + get = function (it) { + return wmget.call(store, it) || {}; + }; + has = function (it) { + return wmhas.call(store, it); + }; +} else { + var STATE = sharedKey('state'); + hiddenKeys[STATE] = true; + set = function (it, metadata) { + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return objectHas(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return objectHas(it, STATE); + }; +} + +module.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor +}; + +},{"../internals/create-non-enumerable-property":90,"../internals/global":108,"../internals/has":109,"../internals/hidden-keys":110,"../internals/is-object":120,"../internals/native-weak-map":126,"../internals/shared-key":148}],116:[function(require,module,exports){ +var wellKnownSymbol = require('../internals/well-known-symbol'); +var Iterators = require('../internals/iterators'); + +var ITERATOR = wellKnownSymbol('iterator'); +var ArrayPrototype = Array.prototype; + +// check on default Array iterator +module.exports = function (it) { + return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); +}; + +},{"../internals/iterators":124,"../internals/well-known-symbol":163}],117:[function(require,module,exports){ +var classof = require('../internals/classof-raw'); + +// `IsArray` abstract operation +// https://tc39.github.io/ecma262/#sec-isarray +module.exports = Array.isArray || function isArray(arg) { + return classof(arg) == 'Array'; +}; + +},{"../internals/classof-raw":85}],118:[function(require,module,exports){ +var fails = require('../internals/fails'); + +var replacement = /#|\.prototype\./; + +var isForced = function (feature, detection) { + var value = data[normalize(feature)]; + return value == POLYFILL ? true + : value == NATIVE ? false + : typeof detection == 'function' ? fails(detection) + : !!detection; +}; + +var normalize = isForced.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); +}; + +var data = isForced.data = {}; +var NATIVE = isForced.NATIVE = 'N'; +var POLYFILL = isForced.POLYFILL = 'P'; + +module.exports = isForced; + +},{"../internals/fails":103}],119:[function(require,module,exports){ +var classof = require('../internals/classof'); +var wellKnownSymbol = require('../internals/well-known-symbol'); +var Iterators = require('../internals/iterators'); + +var ITERATOR = wellKnownSymbol('iterator'); + +module.exports = function (it) { + var O = Object(it); + return O[ITERATOR] !== undefined + || '@@iterator' in O + // eslint-disable-next-line no-prototype-builtins + || Iterators.hasOwnProperty(classof(O)); +}; + +},{"../internals/classof":86,"../internals/iterators":124,"../internals/well-known-symbol":163}],120:[function(require,module,exports){ +module.exports = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; + +},{}],121:[function(require,module,exports){ +module.exports = true; + +},{}],122:[function(require,module,exports){ +var isObject = require('../internals/is-object'); +var classof = require('../internals/classof-raw'); +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var MATCH = wellKnownSymbol('match'); + +// `IsRegExp` abstract operation +// https://tc39.github.io/ecma262/#sec-isregexp +module.exports = function (it) { + var isRegExp; + return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp'); +}; + +},{"../internals/classof-raw":85,"../internals/is-object":120,"../internals/well-known-symbol":163}],123:[function(require,module,exports){ +'use strict'; +var getPrototypeOf = require('../internals/object-get-prototype-of'); +var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); +var has = require('../internals/has'); +var wellKnownSymbol = require('../internals/well-known-symbol'); +var IS_PURE = require('../internals/is-pure'); + +var ITERATOR = wellKnownSymbol('iterator'); +var BUGGY_SAFARI_ITERATORS = false; + +var returnThis = function () { return this; }; + +// `%IteratorPrototype%` object +// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object +var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; + +if ([].keys) { + arrayIterator = [].keys(); + // Safari 8 has buggy iterators w/o `next` + if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } +} + +if (IteratorPrototype == undefined) IteratorPrototype = {}; + +// 25.1.2.1.1 %IteratorPrototype%[@@iterator]() +if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) { + createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis); +} + +module.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS +}; + +},{"../internals/create-non-enumerable-property":90,"../internals/has":109,"../internals/is-pure":121,"../internals/object-get-prototype-of":136,"../internals/well-known-symbol":163}],124:[function(require,module,exports){ +arguments[4][110][0].apply(exports,arguments) +},{"dup":110}],125:[function(require,module,exports){ +var fails = require('../internals/fails'); + +module.exports = !!Object.getOwnPropertySymbols && !fails(function () { + // Chrome 38 Symbol has incorrect toString conversion + // eslint-disable-next-line no-undef + return !String(Symbol()); +}); + +},{"../internals/fails":103}],126:[function(require,module,exports){ +var global = require('../internals/global'); +var inspectSource = require('../internals/inspect-source'); + +var WeakMap = global.WeakMap; + +module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap)); + +},{"../internals/global":108,"../internals/inspect-source":114}],127:[function(require,module,exports){ +var isRegExp = require('../internals/is-regexp'); + +module.exports = function (it) { + if (isRegExp(it)) { + throw TypeError("The method doesn't accept regular expressions"); + } return it; +}; + +},{"../internals/is-regexp":122}],128:[function(require,module,exports){ +var global = require('../internals/global'); +var trim = require('../internals/string-trim').trim; +var whitespaces = require('../internals/whitespaces'); + +var $parseInt = global.parseInt; +var hex = /^[+-]?0[Xx]/; +var FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22; + +// `parseInt` method +// https://tc39.github.io/ecma262/#sec-parseint-string-radix +module.exports = FORCED ? function parseInt(string, radix) { + var S = trim(String(string)); + return $parseInt(S, (radix >>> 0) || (hex.test(S) ? 16 : 10)); +} : $parseInt; + +},{"../internals/global":108,"../internals/string-trim":152,"../internals/whitespaces":164}],129:[function(require,module,exports){ +var anObject = require('../internals/an-object'); +var defineProperties = require('../internals/object-define-properties'); +var enumBugKeys = require('../internals/enum-bug-keys'); +var hiddenKeys = require('../internals/hidden-keys'); +var html = require('../internals/html'); +var documentCreateElement = require('../internals/document-create-element'); +var sharedKey = require('../internals/shared-key'); + +var GT = '>'; +var LT = '<'; +var PROTOTYPE = 'prototype'; +var SCRIPT = 'script'; +var IE_PROTO = sharedKey('IE_PROTO'); + +var EmptyConstructor = function () { /* empty */ }; + +var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; +}; + +// Create object with fake `null` prototype: use ActiveX Object with cleared prototype +var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + return temp; +}; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html.appendChild(iframe); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; +}; + +// Check for document.domain and active x support +// No need to use active x approach when document.domain is not set +// see https://github.com/es-shims/es5-shim/issues/150 +// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 +// avoid IE GC bug +var activeXDocument; +var NullProtoObject = function () { + try { + /* global ActiveXObject */ + activeXDocument = document.domain && new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); +}; + +hiddenKeys[IE_PROTO] = true; + +// `Object.create` method +// https://tc39.github.io/ecma262/#sec-object.create +module.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = NullProtoObject(); + return Properties === undefined ? result : defineProperties(result, Properties); +}; + +},{"../internals/an-object":73,"../internals/document-create-element":96,"../internals/enum-bug-keys":101,"../internals/hidden-keys":110,"../internals/html":111,"../internals/object-define-properties":130,"../internals/shared-key":148}],130:[function(require,module,exports){ +var DESCRIPTORS = require('../internals/descriptors'); +var definePropertyModule = require('../internals/object-define-property'); +var anObject = require('../internals/an-object'); +var objectKeys = require('../internals/object-keys'); + +// `Object.defineProperties` method +// https://tc39.github.io/ecma262/#sec-object.defineproperties +module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]); + return O; +}; + +},{"../internals/an-object":73,"../internals/descriptors":95,"../internals/object-define-property":131,"../internals/object-keys":138}],131:[function(require,module,exports){ +var DESCRIPTORS = require('../internals/descriptors'); +var IE8_DOM_DEFINE = require('../internals/ie8-dom-define'); +var anObject = require('../internals/an-object'); +var toPrimitive = require('../internals/to-primitive'); + +var nativeDefineProperty = Object.defineProperty; + +// `Object.defineProperty` method +// https://tc39.github.io/ecma262/#sec-object.defineproperty +exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return nativeDefineProperty(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + +},{"../internals/an-object":73,"../internals/descriptors":95,"../internals/ie8-dom-define":112,"../internals/to-primitive":158}],132:[function(require,module,exports){ +var DESCRIPTORS = require('../internals/descriptors'); +var propertyIsEnumerableModule = require('../internals/object-property-is-enumerable'); +var createPropertyDescriptor = require('../internals/create-property-descriptor'); +var toIndexedObject = require('../internals/to-indexed-object'); +var toPrimitive = require('../internals/to-primitive'); +var has = require('../internals/has'); +var IE8_DOM_DEFINE = require('../internals/ie8-dom-define'); + +var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// `Object.getOwnPropertyDescriptor` method +// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor +exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPrimitive(P, true); + if (IE8_DOM_DEFINE) try { + return nativeGetOwnPropertyDescriptor(O, P); + } catch (error) { /* empty */ } + if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); +}; + +},{"../internals/create-property-descriptor":91,"../internals/descriptors":95,"../internals/has":109,"../internals/ie8-dom-define":112,"../internals/object-property-is-enumerable":139,"../internals/to-indexed-object":154,"../internals/to-primitive":158}],133:[function(require,module,exports){ +var toIndexedObject = require('../internals/to-indexed-object'); +var nativeGetOwnPropertyNames = require('../internals/object-get-own-property-names').f; + +var toString = {}.toString; + +var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames + ? Object.getOwnPropertyNames(window) : []; + +var getWindowNames = function (it) { + try { + return nativeGetOwnPropertyNames(it); + } catch (error) { + return windowNames.slice(); + } +}; + +// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window +module.exports.f = function getOwnPropertyNames(it) { + return windowNames && toString.call(it) == '[object Window]' + ? getWindowNames(it) + : nativeGetOwnPropertyNames(toIndexedObject(it)); +}; + +},{"../internals/object-get-own-property-names":134,"../internals/to-indexed-object":154}],134:[function(require,module,exports){ +var internalObjectKeys = require('../internals/object-keys-internal'); +var enumBugKeys = require('../internals/enum-bug-keys'); + +var hiddenKeys = enumBugKeys.concat('length', 'prototype'); + +// `Object.getOwnPropertyNames` method +// https://tc39.github.io/ecma262/#sec-object.getownpropertynames +exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); +}; + +},{"../internals/enum-bug-keys":101,"../internals/object-keys-internal":137}],135:[function(require,module,exports){ +exports.f = Object.getOwnPropertySymbols; + +},{}],136:[function(require,module,exports){ +var has = require('../internals/has'); +var toObject = require('../internals/to-object'); +var sharedKey = require('../internals/shared-key'); +var CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter'); + +var IE_PROTO = sharedKey('IE_PROTO'); +var ObjectPrototype = Object.prototype; + +// `Object.getPrototypeOf` method +// https://tc39.github.io/ecma262/#sec-object.getprototypeof +module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) { + O = toObject(O); + if (has(O, IE_PROTO)) return O[IE_PROTO]; + if (typeof O.constructor == 'function' && O instanceof O.constructor) { + return O.constructor.prototype; + } return O instanceof Object ? ObjectPrototype : null; +}; + +},{"../internals/correct-prototype-getter":88,"../internals/has":109,"../internals/shared-key":148,"../internals/to-object":157}],137:[function(require,module,exports){ +var has = require('../internals/has'); +var toIndexedObject = require('../internals/to-indexed-object'); +var indexOf = require('../internals/array-includes').indexOf; +var hiddenKeys = require('../internals/hidden-keys'); + +module.exports = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while (names.length > i) if (has(O, key = names[i++])) { + ~indexOf(result, key) || result.push(key); + } + return result; +}; + +},{"../internals/array-includes":76,"../internals/has":109,"../internals/hidden-keys":110,"../internals/to-indexed-object":154}],138:[function(require,module,exports){ +var internalObjectKeys = require('../internals/object-keys-internal'); +var enumBugKeys = require('../internals/enum-bug-keys'); + +// `Object.keys` method +// https://tc39.github.io/ecma262/#sec-object.keys +module.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); +}; + +},{"../internals/enum-bug-keys":101,"../internals/object-keys-internal":137}],139:[function(require,module,exports){ +'use strict'; +var nativePropertyIsEnumerable = {}.propertyIsEnumerable; +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// Nashorn ~ JDK8 bug +var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); + +// `Object.prototype.propertyIsEnumerable` method implementation +// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable +exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; +} : nativePropertyIsEnumerable; + +},{}],140:[function(require,module,exports){ +var anObject = require('../internals/an-object'); +var aPossiblePrototype = require('../internals/a-possible-prototype'); + +// `Object.setPrototypeOf` method +// https://tc39.github.io/ecma262/#sec-object.setprototypeof +// Works with __proto__ only. Old v8 can't work with null proto objects. +/* eslint-disable no-proto */ +module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set; + setter.call(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { /* empty */ } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) setter.call(O, proto); + else O.__proto__ = proto; + return O; + }; +}() : undefined); + +},{"../internals/a-possible-prototype":71,"../internals/an-object":73}],141:[function(require,module,exports){ +'use strict'; +var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support'); +var classof = require('../internals/classof'); + +// `Object.prototype.toString` method implementation +// https://tc39.github.io/ecma262/#sec-object.prototype.tostring +module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return '[object ' + classof(this) + ']'; +}; + +},{"../internals/classof":86,"../internals/to-string-tag-support":159}],142:[function(require,module,exports){ +arguments[4][110][0].apply(exports,arguments) +},{"dup":110}],143:[function(require,module,exports){ +var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); + +module.exports = function (target, key, value, options) { + if (options && options.enumerable) target[key] = value; + else createNonEnumerableProperty(target, key, value); +}; + +},{"../internals/create-non-enumerable-property":90}],144:[function(require,module,exports){ +'use strict'; +var anObject = require('../internals/an-object'); + +// `RegExp.prototype.flags` getter implementation +// https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags +module.exports = function () { + var that = anObject(this); + var result = ''; + if (that.global) result += 'g'; + if (that.ignoreCase) result += 'i'; + if (that.multiline) result += 'm'; + if (that.dotAll) result += 's'; + if (that.unicode) result += 'u'; + if (that.sticky) result += 'y'; + return result; +}; + +},{"../internals/an-object":73}],145:[function(require,module,exports){ +// `RequireObjectCoercible` abstract operation +// https://tc39.github.io/ecma262/#sec-requireobjectcoercible +module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; +}; + +},{}],146:[function(require,module,exports){ +var global = require('../internals/global'); +var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); + +module.exports = function (key, value) { + try { + createNonEnumerableProperty(global, key, value); + } catch (error) { + global[key] = value; + } return value; +}; + +},{"../internals/create-non-enumerable-property":90,"../internals/global":108}],147:[function(require,module,exports){ +var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support'); +var defineProperty = require('../internals/object-define-property').f; +var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); +var has = require('../internals/has'); +var toString = require('../internals/object-to-string'); +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + +module.exports = function (it, TAG, STATIC, SET_METHOD) { + if (it) { + var target = STATIC ? it : it.prototype; + if (!has(target, TO_STRING_TAG)) { + defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); + } + if (SET_METHOD && !TO_STRING_TAG_SUPPORT) { + createNonEnumerableProperty(target, 'toString', toString); + } + } +}; + +},{"../internals/create-non-enumerable-property":90,"../internals/has":109,"../internals/object-define-property":131,"../internals/object-to-string":141,"../internals/to-string-tag-support":159,"../internals/well-known-symbol":163}],148:[function(require,module,exports){ +var shared = require('../internals/shared'); +var uid = require('../internals/uid'); + +var keys = shared('keys'); + +module.exports = function (key) { + return keys[key] || (keys[key] = uid(key)); +}; + +},{"../internals/shared":150,"../internals/uid":160}],149:[function(require,module,exports){ +var global = require('../internals/global'); +var setGlobal = require('../internals/set-global'); + +var SHARED = '__core-js_shared__'; +var store = global[SHARED] || setGlobal(SHARED, {}); + +module.exports = store; + +},{"../internals/global":108,"../internals/set-global":146}],150:[function(require,module,exports){ +var IS_PURE = require('../internals/is-pure'); +var store = require('../internals/shared-store'); + +(module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); +})('versions', []).push({ + version: '3.6.4', + mode: IS_PURE ? 'pure' : 'global', + copyright: '© 2020 Denis Pushkarev (zloirock.ru)' +}); + +},{"../internals/is-pure":121,"../internals/shared-store":149}],151:[function(require,module,exports){ +var toInteger = require('../internals/to-integer'); +var requireObjectCoercible = require('../internals/require-object-coercible'); + +// `String.prototype.{ codePointAt, at }` methods implementation +var createMethod = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = String(requireObjectCoercible($this)); + var position = toInteger(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = S.charCodeAt(position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size + || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF + ? CONVERT_TO_STRING ? S.charAt(position) : first + : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; +}; + +module.exports = { + // `String.prototype.codePointAt` method + // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) +}; + +},{"../internals/require-object-coercible":145,"../internals/to-integer":155}],152:[function(require,module,exports){ +var requireObjectCoercible = require('../internals/require-object-coercible'); +var whitespaces = require('../internals/whitespaces'); + +var whitespace = '[' + whitespaces + ']'; +var ltrim = RegExp('^' + whitespace + whitespace + '*'); +var rtrim = RegExp(whitespace + whitespace + '*$'); + +// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation +var createMethod = function (TYPE) { + return function ($this) { + var string = String(requireObjectCoercible($this)); + if (TYPE & 1) string = string.replace(ltrim, ''); + if (TYPE & 2) string = string.replace(rtrim, ''); + return string; + }; +}; + +module.exports = { + // `String.prototype.{ trimLeft, trimStart }` methods + // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart + start: createMethod(1), + // `String.prototype.{ trimRight, trimEnd }` methods + // https://tc39.github.io/ecma262/#sec-string.prototype.trimend + end: createMethod(2), + // `String.prototype.trim` method + // https://tc39.github.io/ecma262/#sec-string.prototype.trim + trim: createMethod(3) +}; + +},{"../internals/require-object-coercible":145,"../internals/whitespaces":164}],153:[function(require,module,exports){ +var toInteger = require('../internals/to-integer'); + +var max = Math.max; +var min = Math.min; + +// Helper for a popular repeating case of the spec: +// Let integer be ? ToInteger(index). +// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). +module.exports = function (index, length) { + var integer = toInteger(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); +}; + +},{"../internals/to-integer":155}],154:[function(require,module,exports){ +// toObject with fallback for non-array-like ES3 strings +var IndexedObject = require('../internals/indexed-object'); +var requireObjectCoercible = require('../internals/require-object-coercible'); + +module.exports = function (it) { + return IndexedObject(requireObjectCoercible(it)); +}; + +},{"../internals/indexed-object":113,"../internals/require-object-coercible":145}],155:[function(require,module,exports){ +var ceil = Math.ceil; +var floor = Math.floor; + +// `ToInteger` abstract operation +// https://tc39.github.io/ecma262/#sec-tointeger +module.exports = function (argument) { + return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); +}; + +},{}],156:[function(require,module,exports){ +var toInteger = require('../internals/to-integer'); + +var min = Math.min; + +// `ToLength` abstract operation +// https://tc39.github.io/ecma262/#sec-tolength +module.exports = function (argument) { + return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 +}; + +},{"../internals/to-integer":155}],157:[function(require,module,exports){ +var requireObjectCoercible = require('../internals/require-object-coercible'); + +// `ToObject` abstract operation +// https://tc39.github.io/ecma262/#sec-toobject +module.exports = function (argument) { + return Object(requireObjectCoercible(argument)); +}; + +},{"../internals/require-object-coercible":145}],158:[function(require,module,exports){ +var isObject = require('../internals/is-object'); + +// `ToPrimitive` abstract operation +// https://tc39.github.io/ecma262/#sec-toprimitive +// instead of the ES6 spec version, we didn't implement @@toPrimitive case +// and the second argument - flag - preferred type is a string +module.exports = function (input, PREFERRED_STRING) { + if (!isObject(input)) return input; + var fn, val; + if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; + if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; + if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; + throw TypeError("Can't convert object to primitive value"); +}; + +},{"../internals/is-object":120}],159:[function(require,module,exports){ +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var test = {}; + +test[TO_STRING_TAG] = 'z'; + +module.exports = String(test) === '[object z]'; + +},{"../internals/well-known-symbol":163}],160:[function(require,module,exports){ +var id = 0; +var postfix = Math.random(); + +module.exports = function (key) { + return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36); +}; + +},{}],161:[function(require,module,exports){ +var NATIVE_SYMBOL = require('../internals/native-symbol'); + +module.exports = NATIVE_SYMBOL + // eslint-disable-next-line no-undef + && !Symbol.sham + // eslint-disable-next-line no-undef + && typeof Symbol.iterator == 'symbol'; + +},{"../internals/native-symbol":125}],162:[function(require,module,exports){ +var wellKnownSymbol = require('../internals/well-known-symbol'); + +exports.f = wellKnownSymbol; + +},{"../internals/well-known-symbol":163}],163:[function(require,module,exports){ +var global = require('../internals/global'); +var shared = require('../internals/shared'); +var has = require('../internals/has'); +var uid = require('../internals/uid'); +var NATIVE_SYMBOL = require('../internals/native-symbol'); +var USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid'); + +var WellKnownSymbolsStore = shared('wks'); +var Symbol = global.Symbol; +var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid; + +module.exports = function (name) { + if (!has(WellKnownSymbolsStore, name)) { + if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name]; + else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name); + } return WellKnownSymbolsStore[name]; +}; + +},{"../internals/global":108,"../internals/has":109,"../internals/native-symbol":125,"../internals/shared":150,"../internals/uid":160,"../internals/use-symbol-as-uid":161}],164:[function(require,module,exports){ +// a string of all valid unicode whitespaces +// eslint-disable-next-line max-len +module.exports = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; + +},{}],165:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var fails = require('../internals/fails'); +var isArray = require('../internals/is-array'); +var isObject = require('../internals/is-object'); +var toObject = require('../internals/to-object'); +var toLength = require('../internals/to-length'); +var createProperty = require('../internals/create-property'); +var arraySpeciesCreate = require('../internals/array-species-create'); +var arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support'); +var wellKnownSymbol = require('../internals/well-known-symbol'); +var V8_VERSION = require('../internals/engine-v8-version'); + +var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable'); +var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; +var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded'; + +// We can't use this feature detection in V8 since it causes +// deoptimization and serious performance degradation +// https://github.com/zloirock/core-js/issues/679 +var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () { + var array = []; + array[IS_CONCAT_SPREADABLE] = false; + return array.concat()[0] !== array; +}); + +var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat'); + +var isConcatSpreadable = function (O) { + if (!isObject(O)) return false; + var spreadable = O[IS_CONCAT_SPREADABLE]; + return spreadable !== undefined ? !!spreadable : isArray(O); +}; + +var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT; + +// `Array.prototype.concat` method +// https://tc39.github.io/ecma262/#sec-array.prototype.concat +// with adding support of @@isConcatSpreadable and @@species +$({ target: 'Array', proto: true, forced: FORCED }, { + concat: function concat(arg) { // eslint-disable-line no-unused-vars + var O = toObject(this); + var A = arraySpeciesCreate(O, 0); + var n = 0; + var i, k, length, len, E; + for (i = -1, length = arguments.length; i < length; i++) { + E = i === -1 ? O : arguments[i]; + if (isConcatSpreadable(E)) { + len = toLength(E.length); + if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); + for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]); + } else { + if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); + createProperty(A, n++, E); + } + } + A.length = n; + return A; + } +}); + +},{"../internals/array-method-has-species-support":78,"../internals/array-species-create":82,"../internals/create-property":92,"../internals/engine-v8-version":99,"../internals/export":102,"../internals/fails":103,"../internals/is-array":117,"../internals/is-object":120,"../internals/to-length":156,"../internals/to-object":157,"../internals/well-known-symbol":163}],166:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var forEach = require('../internals/array-for-each'); + +// `Array.prototype.forEach` method +// https://tc39.github.io/ecma262/#sec-array.prototype.foreach +$({ target: 'Array', proto: true, forced: [].forEach != forEach }, { + forEach: forEach +}); + +},{"../internals/array-for-each":74,"../internals/export":102}],167:[function(require,module,exports){ +var $ = require('../internals/export'); +var from = require('../internals/array-from'); +var checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration'); + +var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) { + Array.from(iterable); +}); + +// `Array.from` method +// https://tc39.github.io/ecma262/#sec-array.from +$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, { + from: from +}); + +},{"../internals/array-from":75,"../internals/check-correctness-of-iteration":84,"../internals/export":102}],168:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var $includes = require('../internals/array-includes').includes; +var addToUnscopables = require('../internals/add-to-unscopables'); +var arrayMethodUsesToLength = require('../internals/array-method-uses-to-length'); + +var USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); + +// `Array.prototype.includes` method +// https://tc39.github.io/ecma262/#sec-array.prototype.includes +$({ target: 'Array', proto: true, forced: !USES_TO_LENGTH }, { + includes: function includes(el /* , fromIndex = 0 */) { + return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('includes'); + +},{"../internals/add-to-unscopables":72,"../internals/array-includes":76,"../internals/array-method-uses-to-length":80,"../internals/export":102}],169:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var $indexOf = require('../internals/array-includes').indexOf; +var arrayMethodIsStrict = require('../internals/array-method-is-strict'); +var arrayMethodUsesToLength = require('../internals/array-method-uses-to-length'); + +var nativeIndexOf = [].indexOf; + +var NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0; +var STRICT_METHOD = arrayMethodIsStrict('indexOf'); +var USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); + +// `Array.prototype.indexOf` method +// https://tc39.github.io/ecma262/#sec-array.prototype.indexof +$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH }, { + indexOf: function indexOf(searchElement /* , fromIndex = 0 */) { + return NEGATIVE_ZERO + // convert -0 to +0 + ? nativeIndexOf.apply(this, arguments) || 0 + : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +},{"../internals/array-includes":76,"../internals/array-method-is-strict":79,"../internals/array-method-uses-to-length":80,"../internals/export":102}],170:[function(require,module,exports){ +var $ = require('../internals/export'); +var isArray = require('../internals/is-array'); + +// `Array.isArray` method +// https://tc39.github.io/ecma262/#sec-array.isarray +$({ target: 'Array', stat: true }, { + isArray: isArray +}); + +},{"../internals/export":102,"../internals/is-array":117}],171:[function(require,module,exports){ +'use strict'; +var toIndexedObject = require('../internals/to-indexed-object'); +var addToUnscopables = require('../internals/add-to-unscopables'); +var Iterators = require('../internals/iterators'); +var InternalStateModule = require('../internals/internal-state'); +var defineIterator = require('../internals/define-iterator'); + +var ARRAY_ITERATOR = 'Array Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + +// `Array.prototype.entries` method +// https://tc39.github.io/ecma262/#sec-array.prototype.entries +// `Array.prototype.keys` method +// https://tc39.github.io/ecma262/#sec-array.prototype.keys +// `Array.prototype.values` method +// https://tc39.github.io/ecma262/#sec-array.prototype.values +// `Array.prototype[@@iterator]` method +// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator +// `CreateArrayIterator` internal method +// https://tc39.github.io/ecma262/#sec-createarrayiterator +module.exports = defineIterator(Array, 'Array', function (iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), // target + index: 0, // next index + kind: kind // kind + }); +// `%ArrayIteratorPrototype%.next` method +// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next +}, function () { + var state = getInternalState(this); + var target = state.target; + var kind = state.kind; + var index = state.index++; + if (!target || index >= target.length) { + state.target = undefined; + return { value: undefined, done: true }; + } + if (kind == 'keys') return { value: index, done: false }; + if (kind == 'values') return { value: target[index], done: false }; + return { value: [index, target[index]], done: false }; +}, 'values'); + +// argumentsList[@@iterator] is %ArrayProto_values% +// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject +// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject +Iterators.Arguments = Iterators.Array; + +// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('keys'); +addToUnscopables('values'); +addToUnscopables('entries'); + +},{"../internals/add-to-unscopables":72,"../internals/define-iterator":93,"../internals/internal-state":115,"../internals/iterators":124,"../internals/to-indexed-object":154}],172:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var $map = require('../internals/array-iteration').map; +var arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support'); +var arrayMethodUsesToLength = require('../internals/array-method-uses-to-length'); + +var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map'); +// FF49- issue +var USES_TO_LENGTH = arrayMethodUsesToLength('map'); + +// `Array.prototype.map` method +// https://tc39.github.io/ecma262/#sec-array.prototype.map +// with adding support of @@species +$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, { + map: function map(callbackfn /* , thisArg */) { + return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +},{"../internals/array-iteration":77,"../internals/array-method-has-species-support":78,"../internals/array-method-uses-to-length":80,"../internals/export":102}],173:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var $reduce = require('../internals/array-reduce').left; +var arrayMethodIsStrict = require('../internals/array-method-is-strict'); +var arrayMethodUsesToLength = require('../internals/array-method-uses-to-length'); + +var STRICT_METHOD = arrayMethodIsStrict('reduce'); +var USES_TO_LENGTH = arrayMethodUsesToLength('reduce', { 1: 0 }); + +// `Array.prototype.reduce` method +// https://tc39.github.io/ecma262/#sec-array.prototype.reduce +$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, { + reduce: function reduce(callbackfn /* , initialValue */) { + return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +},{"../internals/array-method-is-strict":79,"../internals/array-method-uses-to-length":80,"../internals/array-reduce":81,"../internals/export":102}],174:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var isObject = require('../internals/is-object'); +var isArray = require('../internals/is-array'); +var toAbsoluteIndex = require('../internals/to-absolute-index'); +var toLength = require('../internals/to-length'); +var toIndexedObject = require('../internals/to-indexed-object'); +var createProperty = require('../internals/create-property'); +var wellKnownSymbol = require('../internals/well-known-symbol'); +var arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support'); +var arrayMethodUsesToLength = require('../internals/array-method-uses-to-length'); + +var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice'); +var USES_TO_LENGTH = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 }); + +var SPECIES = wellKnownSymbol('species'); +var nativeSlice = [].slice; +var max = Math.max; + +// `Array.prototype.slice` method +// https://tc39.github.io/ecma262/#sec-array.prototype.slice +// fallback for not array-like ES3 strings and DOM objects +$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, { + slice: function slice(start, end) { + var O = toIndexedObject(this); + var length = toLength(O.length); + var k = toAbsoluteIndex(start, length); + var fin = toAbsoluteIndex(end === undefined ? length : end, length); + // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible + var Constructor, result, n; + if (isArray(O)) { + Constructor = O.constructor; + // cross-realm fallback + if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) { + Constructor = undefined; + } else if (isObject(Constructor)) { + Constructor = Constructor[SPECIES]; + if (Constructor === null) Constructor = undefined; + } + if (Constructor === Array || Constructor === undefined) { + return nativeSlice.call(O, k, fin); + } + } + result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0)); + for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]); + result.length = n; + return result; + } +}); + +},{"../internals/array-method-has-species-support":78,"../internals/array-method-uses-to-length":80,"../internals/create-property":92,"../internals/export":102,"../internals/is-array":117,"../internals/is-object":120,"../internals/to-absolute-index":153,"../internals/to-indexed-object":154,"../internals/to-length":156,"../internals/well-known-symbol":163}],175:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var aFunction = require('../internals/a-function'); +var toObject = require('../internals/to-object'); +var fails = require('../internals/fails'); +var arrayMethodIsStrict = require('../internals/array-method-is-strict'); + +var test = []; +var nativeSort = test.sort; + +// IE8- +var FAILS_ON_UNDEFINED = fails(function () { + test.sort(undefined); +}); +// V8 bug +var FAILS_ON_NULL = fails(function () { + test.sort(null); +}); +// Old WebKit +var STRICT_METHOD = arrayMethodIsStrict('sort'); + +var FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD; + +// `Array.prototype.sort` method +// https://tc39.github.io/ecma262/#sec-array.prototype.sort +$({ target: 'Array', proto: true, forced: FORCED }, { + sort: function sort(comparefn) { + return comparefn === undefined + ? nativeSort.call(toObject(this)) + : nativeSort.call(toObject(this), aFunction(comparefn)); + } +}); + +},{"../internals/a-function":70,"../internals/array-method-is-strict":79,"../internals/export":102,"../internals/fails":103,"../internals/to-object":157}],176:[function(require,module,exports){ +var global = require('../internals/global'); +var setToStringTag = require('../internals/set-to-string-tag'); + +// JSON[@@toStringTag] property +// https://tc39.github.io/ecma262/#sec-json-@@tostringtag +setToStringTag(global.JSON, 'JSON', true); + +},{"../internals/global":108,"../internals/set-to-string-tag":147}],177:[function(require,module,exports){ +var setToStringTag = require('../internals/set-to-string-tag'); + +// Math[@@toStringTag] property +// https://tc39.github.io/ecma262/#sec-math-@@tostringtag +setToStringTag(Math, 'Math', true); + +},{"../internals/set-to-string-tag":147}],178:[function(require,module,exports){ +var $ = require('../internals/export'); +var DESCRIPTORS = require('../internals/descriptors'); +var create = require('../internals/object-create'); + +// `Object.create` method +// https://tc39.github.io/ecma262/#sec-object.create +$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, { + create: create +}); + +},{"../internals/descriptors":95,"../internals/export":102,"../internals/object-create":129}],179:[function(require,module,exports){ +var $ = require('../internals/export'); +var DESCRIPTORS = require('../internals/descriptors'); +var objectDefinePropertyModile = require('../internals/object-define-property'); + +// `Object.defineProperty` method +// https://tc39.github.io/ecma262/#sec-object.defineproperty +$({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, { + defineProperty: objectDefinePropertyModile.f +}); + +},{"../internals/descriptors":95,"../internals/export":102,"../internals/object-define-property":131}],180:[function(require,module,exports){ +// empty + +},{}],181:[function(require,module,exports){ +var $ = require('../internals/export'); +var parseIntImplementation = require('../internals/number-parse-int'); + +// `parseInt` method +// https://tc39.github.io/ecma262/#sec-parseint-string-radix +$({ global: true, forced: parseInt != parseIntImplementation }, { + parseInt: parseIntImplementation +}); + +},{"../internals/export":102,"../internals/number-parse-int":128}],182:[function(require,module,exports){ +arguments[4][180][0].apply(exports,arguments) +},{"dup":180}],183:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var notARegExp = require('../internals/not-a-regexp'); +var requireObjectCoercible = require('../internals/require-object-coercible'); +var correctIsRegExpLogic = require('../internals/correct-is-regexp-logic'); + +// `String.prototype.includes` method +// https://tc39.github.io/ecma262/#sec-string.prototype.includes +$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, { + includes: function includes(searchString /* , position = 0 */) { + return !!~String(requireObjectCoercible(this)) + .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined); + } +}); + +},{"../internals/correct-is-regexp-logic":87,"../internals/export":102,"../internals/not-a-regexp":127,"../internals/require-object-coercible":145}],184:[function(require,module,exports){ +'use strict'; +var charAt = require('../internals/string-multibyte').charAt; +var InternalStateModule = require('../internals/internal-state'); +var defineIterator = require('../internals/define-iterator'); + +var STRING_ITERATOR = 'String Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); + +// `String.prototype[@@iterator]` method +// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator +defineIterator(String, 'String', function (iterated) { + setInternalState(this, { + type: STRING_ITERATOR, + string: String(iterated), + index: 0 + }); +// `%StringIteratorPrototype%.next` method +// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next +}, function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) return { value: undefined, done: true }; + point = charAt(string, index); + state.index += point.length; + return { value: point, done: false }; +}); + +},{"../internals/define-iterator":93,"../internals/internal-state":115,"../internals/string-multibyte":151}],185:[function(require,module,exports){ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.asyncIterator` well-known symbol +// https://tc39.github.io/ecma262/#sec-symbol.asynciterator +defineWellKnownSymbol('asyncIterator'); + +},{"../internals/define-well-known-symbol":94}],186:[function(require,module,exports){ +arguments[4][180][0].apply(exports,arguments) +},{"dup":180}],187:[function(require,module,exports){ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.hasInstance` well-known symbol +// https://tc39.github.io/ecma262/#sec-symbol.hasinstance +defineWellKnownSymbol('hasInstance'); + +},{"../internals/define-well-known-symbol":94}],188:[function(require,module,exports){ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.isConcatSpreadable` well-known symbol +// https://tc39.github.io/ecma262/#sec-symbol.isconcatspreadable +defineWellKnownSymbol('isConcatSpreadable'); + +},{"../internals/define-well-known-symbol":94}],189:[function(require,module,exports){ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.iterator` well-known symbol +// https://tc39.github.io/ecma262/#sec-symbol.iterator +defineWellKnownSymbol('iterator'); + +},{"../internals/define-well-known-symbol":94}],190:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var global = require('../internals/global'); +var getBuiltIn = require('../internals/get-built-in'); +var IS_PURE = require('../internals/is-pure'); +var DESCRIPTORS = require('../internals/descriptors'); +var NATIVE_SYMBOL = require('../internals/native-symbol'); +var USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid'); +var fails = require('../internals/fails'); +var has = require('../internals/has'); +var isArray = require('../internals/is-array'); +var isObject = require('../internals/is-object'); +var anObject = require('../internals/an-object'); +var toObject = require('../internals/to-object'); +var toIndexedObject = require('../internals/to-indexed-object'); +var toPrimitive = require('../internals/to-primitive'); +var createPropertyDescriptor = require('../internals/create-property-descriptor'); +var nativeObjectCreate = require('../internals/object-create'); +var objectKeys = require('../internals/object-keys'); +var getOwnPropertyNamesModule = require('../internals/object-get-own-property-names'); +var getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external'); +var getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols'); +var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor'); +var definePropertyModule = require('../internals/object-define-property'); +var propertyIsEnumerableModule = require('../internals/object-property-is-enumerable'); +var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); +var redefine = require('../internals/redefine'); +var shared = require('../internals/shared'); +var sharedKey = require('../internals/shared-key'); +var hiddenKeys = require('../internals/hidden-keys'); +var uid = require('../internals/uid'); +var wellKnownSymbol = require('../internals/well-known-symbol'); +var wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped'); +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); +var setToStringTag = require('../internals/set-to-string-tag'); +var InternalStateModule = require('../internals/internal-state'); +var $forEach = require('../internals/array-iteration').forEach; + +var HIDDEN = sharedKey('hidden'); +var SYMBOL = 'Symbol'; +var PROTOTYPE = 'prototype'; +var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(SYMBOL); +var ObjectPrototype = Object[PROTOTYPE]; +var $Symbol = global.Symbol; +var $stringify = getBuiltIn('JSON', 'stringify'); +var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; +var nativeDefineProperty = definePropertyModule.f; +var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f; +var nativePropertyIsEnumerable = propertyIsEnumerableModule.f; +var AllSymbols = shared('symbols'); +var ObjectPrototypeSymbols = shared('op-symbols'); +var StringToSymbolRegistry = shared('string-to-symbol-registry'); +var SymbolToStringRegistry = shared('symbol-to-string-registry'); +var WellKnownSymbolsStore = shared('wks'); +var QObject = global.QObject; +// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 +var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; + +// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 +var setSymbolDescriptor = DESCRIPTORS && fails(function () { + return nativeObjectCreate(nativeDefineProperty({}, 'a', { + get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; } + })).a != 7; +}) ? function (O, P, Attributes) { + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P); + if (ObjectPrototypeDescriptor) delete ObjectPrototype[P]; + nativeDefineProperty(O, P, Attributes); + if (ObjectPrototypeDescriptor && O !== ObjectPrototype) { + nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor); + } +} : nativeDefineProperty; + +var wrap = function (tag, description) { + var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]); + setInternalState(symbol, { + type: SYMBOL, + tag: tag, + description: description + }); + if (!DESCRIPTORS) symbol.description = description; + return symbol; +}; + +var isSymbol = USE_SYMBOL_AS_UID ? function (it) { + return typeof it == 'symbol'; +} : function (it) { + return Object(it) instanceof $Symbol; +}; + +var $defineProperty = function defineProperty(O, P, Attributes) { + if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes); + anObject(O); + var key = toPrimitive(P, true); + anObject(Attributes); + if (has(AllSymbols, key)) { + if (!Attributes.enumerable) { + if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {})); + O[HIDDEN][key] = true; + } else { + if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false; + Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) }); + } return setSymbolDescriptor(O, key, Attributes); + } return nativeDefineProperty(O, key, Attributes); +}; + +var $defineProperties = function defineProperties(O, Properties) { + anObject(O); + var properties = toIndexedObject(Properties); + var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties)); + $forEach(keys, function (key) { + if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]); + }); + return O; +}; + +var $create = function create(O, Properties) { + return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties); +}; + +var $propertyIsEnumerable = function propertyIsEnumerable(V) { + var P = toPrimitive(V, true); + var enumerable = nativePropertyIsEnumerable.call(this, P); + if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false; + return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true; +}; + +var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { + var it = toIndexedObject(O); + var key = toPrimitive(P, true); + if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return; + var descriptor = nativeGetOwnPropertyDescriptor(it, key); + if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) { + descriptor.enumerable = true; + } + return descriptor; +}; + +var $getOwnPropertyNames = function getOwnPropertyNames(O) { + var names = nativeGetOwnPropertyNames(toIndexedObject(O)); + var result = []; + $forEach(names, function (key) { + if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key); + }); + return result; +}; + +var $getOwnPropertySymbols = function getOwnPropertySymbols(O) { + var IS_OBJECT_PROTOTYPE = O === ObjectPrototype; + var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)); + var result = []; + $forEach(names, function (key) { + if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) { + result.push(AllSymbols[key]); + } + }); + return result; +}; + +// `Symbol` constructor +// https://tc39.github.io/ecma262/#sec-symbol-constructor +if (!NATIVE_SYMBOL) { + $Symbol = function Symbol() { + if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor'); + var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]); + var tag = uid(description); + var setter = function (value) { + if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value); + if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false; + setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value)); + }; + if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter }); + return wrap(tag, description); + }; + + redefine($Symbol[PROTOTYPE], 'toString', function toString() { + return getInternalState(this).tag; + }); + + redefine($Symbol, 'withoutSetter', function (description) { + return wrap(uid(description), description); + }); + + propertyIsEnumerableModule.f = $propertyIsEnumerable; + definePropertyModule.f = $defineProperty; + getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor; + getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames; + getOwnPropertySymbolsModule.f = $getOwnPropertySymbols; + + wrappedWellKnownSymbolModule.f = function (name) { + return wrap(wellKnownSymbol(name), name); + }; + + if (DESCRIPTORS) { + // https://github.com/tc39/proposal-Symbol-description + nativeDefineProperty($Symbol[PROTOTYPE], 'description', { + configurable: true, + get: function description() { + return getInternalState(this).description; + } + }); + if (!IS_PURE) { + redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true }); + } + } +} + +$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, { + Symbol: $Symbol +}); + +$forEach(objectKeys(WellKnownSymbolsStore), function (name) { + defineWellKnownSymbol(name); +}); + +$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, { + // `Symbol.for` method + // https://tc39.github.io/ecma262/#sec-symbol.for + 'for': function (key) { + var string = String(key); + if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string]; + var symbol = $Symbol(string); + StringToSymbolRegistry[string] = symbol; + SymbolToStringRegistry[symbol] = string; + return symbol; + }, + // `Symbol.keyFor` method + // https://tc39.github.io/ecma262/#sec-symbol.keyfor + keyFor: function keyFor(sym) { + if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol'); + if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym]; + }, + useSetter: function () { USE_SETTER = true; }, + useSimple: function () { USE_SETTER = false; } +}); + +$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, { + // `Object.create` method + // https://tc39.github.io/ecma262/#sec-object.create + create: $create, + // `Object.defineProperty` method + // https://tc39.github.io/ecma262/#sec-object.defineproperty + defineProperty: $defineProperty, + // `Object.defineProperties` method + // https://tc39.github.io/ecma262/#sec-object.defineproperties + defineProperties: $defineProperties, + // `Object.getOwnPropertyDescriptor` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors + getOwnPropertyDescriptor: $getOwnPropertyDescriptor +}); + +$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, { + // `Object.getOwnPropertyNames` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertynames + getOwnPropertyNames: $getOwnPropertyNames, + // `Object.getOwnPropertySymbols` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols + getOwnPropertySymbols: $getOwnPropertySymbols +}); + +// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives +// https://bugs.chromium.org/p/v8/issues/detail?id=3443 +$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, { + getOwnPropertySymbols: function getOwnPropertySymbols(it) { + return getOwnPropertySymbolsModule.f(toObject(it)); + } +}); + +// `JSON.stringify` method behavior with symbols +// https://tc39.github.io/ecma262/#sec-json.stringify +if ($stringify) { + var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () { + var symbol = $Symbol(); + // MS Edge converts symbol values to JSON as {} + return $stringify([symbol]) != '[null]' + // WebKit converts symbol values to JSON as null + || $stringify({ a: symbol }) != '{}' + // V8 throws on boxed symbols + || $stringify(Object(symbol)) != '{}'; + }); + + $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, { + // eslint-disable-next-line no-unused-vars + stringify: function stringify(it, replacer, space) { + var args = [it]; + var index = 1; + var $replacer; + while (arguments.length > index) args.push(arguments[index++]); + $replacer = replacer; + if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined + if (!isArray(replacer)) replacer = function (key, value) { + if (typeof $replacer == 'function') value = $replacer.call(this, key, value); + if (!isSymbol(value)) return value; + }; + args[1] = replacer; + return $stringify.apply(null, args); + } + }); +} + +// `Symbol.prototype[@@toPrimitive]` method +// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive +if (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) { + createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); +} +// `Symbol.prototype[@@toStringTag]` property +// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag +setToStringTag($Symbol, SYMBOL); + +hiddenKeys[HIDDEN] = true; + +},{"../internals/an-object":73,"../internals/array-iteration":77,"../internals/create-non-enumerable-property":90,"../internals/create-property-descriptor":91,"../internals/define-well-known-symbol":94,"../internals/descriptors":95,"../internals/export":102,"../internals/fails":103,"../internals/get-built-in":105,"../internals/global":108,"../internals/has":109,"../internals/hidden-keys":110,"../internals/internal-state":115,"../internals/is-array":117,"../internals/is-object":120,"../internals/is-pure":121,"../internals/native-symbol":125,"../internals/object-create":129,"../internals/object-define-property":131,"../internals/object-get-own-property-descriptor":132,"../internals/object-get-own-property-names":134,"../internals/object-get-own-property-names-external":133,"../internals/object-get-own-property-symbols":135,"../internals/object-keys":138,"../internals/object-property-is-enumerable":139,"../internals/redefine":143,"../internals/set-to-string-tag":147,"../internals/shared":150,"../internals/shared-key":148,"../internals/to-indexed-object":154,"../internals/to-object":157,"../internals/to-primitive":158,"../internals/uid":160,"../internals/use-symbol-as-uid":161,"../internals/well-known-symbol":163,"../internals/well-known-symbol-wrapped":162}],191:[function(require,module,exports){ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.matchAll` well-known symbol +defineWellKnownSymbol('matchAll'); + +},{"../internals/define-well-known-symbol":94}],192:[function(require,module,exports){ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.match` well-known symbol +// https://tc39.github.io/ecma262/#sec-symbol.match +defineWellKnownSymbol('match'); + +},{"../internals/define-well-known-symbol":94}],193:[function(require,module,exports){ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.replace` well-known symbol +// https://tc39.github.io/ecma262/#sec-symbol.replace +defineWellKnownSymbol('replace'); + +},{"../internals/define-well-known-symbol":94}],194:[function(require,module,exports){ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.search` well-known symbol +// https://tc39.github.io/ecma262/#sec-symbol.search +defineWellKnownSymbol('search'); + +},{"../internals/define-well-known-symbol":94}],195:[function(require,module,exports){ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.species` well-known symbol +// https://tc39.github.io/ecma262/#sec-symbol.species +defineWellKnownSymbol('species'); + +},{"../internals/define-well-known-symbol":94}],196:[function(require,module,exports){ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.split` well-known symbol +// https://tc39.github.io/ecma262/#sec-symbol.split +defineWellKnownSymbol('split'); + +},{"../internals/define-well-known-symbol":94}],197:[function(require,module,exports){ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.toPrimitive` well-known symbol +// https://tc39.github.io/ecma262/#sec-symbol.toprimitive +defineWellKnownSymbol('toPrimitive'); + +},{"../internals/define-well-known-symbol":94}],198:[function(require,module,exports){ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.toStringTag` well-known symbol +// https://tc39.github.io/ecma262/#sec-symbol.tostringtag +defineWellKnownSymbol('toStringTag'); + +},{"../internals/define-well-known-symbol":94}],199:[function(require,module,exports){ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.unscopables` well-known symbol +// https://tc39.github.io/ecma262/#sec-symbol.unscopables +defineWellKnownSymbol('unscopables'); + +},{"../internals/define-well-known-symbol":94}],200:[function(require,module,exports){ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.asyncDispose` well-known symbol +// https://github.com/tc39/proposal-using-statement +defineWellKnownSymbol('asyncDispose'); + +},{"../internals/define-well-known-symbol":94}],201:[function(require,module,exports){ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.dispose` well-known symbol +// https://github.com/tc39/proposal-using-statement +defineWellKnownSymbol('dispose'); + +},{"../internals/define-well-known-symbol":94}],202:[function(require,module,exports){ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.observable` well-known symbol +// https://github.com/tc39/proposal-observable +defineWellKnownSymbol('observable'); + +},{"../internals/define-well-known-symbol":94}],203:[function(require,module,exports){ +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +// `Symbol.patternMatch` well-known symbol +// https://github.com/tc39/proposal-pattern-matching +defineWellKnownSymbol('patternMatch'); + +},{"../internals/define-well-known-symbol":94}],204:[function(require,module,exports){ +// TODO: remove from `core-js@4` +var defineWellKnownSymbol = require('../internals/define-well-known-symbol'); + +defineWellKnownSymbol('replaceAll'); + +},{"../internals/define-well-known-symbol":94}],205:[function(require,module,exports){ +require('./es.array.iterator'); +var DOMIterables = require('../internals/dom-iterables'); +var global = require('../internals/global'); +var classof = require('../internals/classof'); +var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); +var Iterators = require('../internals/iterators'); +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + +for (var COLLECTION_NAME in DOMIterables) { + var Collection = global[COLLECTION_NAME]; + var CollectionPrototype = Collection && Collection.prototype; + if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) { + createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME); + } + Iterators[COLLECTION_NAME] = Iterators.Array; +} + +},{"../internals/classof":86,"../internals/create-non-enumerable-property":90,"../internals/dom-iterables":97,"../internals/global":108,"../internals/iterators":124,"../internals/well-known-symbol":163,"./es.array.iterator":171}],206:[function(require,module,exports){ +arguments[4][63][0].apply(exports,arguments) +},{"../../es/array/from":39,"dup":63}],207:[function(require,module,exports){ +arguments[4][64][0].apply(exports,arguments) +},{"../../es/array/is-array":40,"dup":64}],208:[function(require,module,exports){ +var parent = require('../../../es/array/virtual/for-each'); + +module.exports = parent; + +},{"../../../es/array/virtual/for-each":42}],209:[function(require,module,exports){ +var parent = require('../../es/instance/concat'); + +module.exports = parent; + +},{"../../es/instance/concat":49}],210:[function(require,module,exports){ +var parent = require('../../es/instance/flags'); + +module.exports = parent; + +},{"../../es/instance/flags":50}],211:[function(require,module,exports){ +require('../../modules/web.dom-collections.iterator'); +var forEach = require('../array/virtual/for-each'); +var classof = require('../../internals/classof'); +var ArrayPrototype = Array.prototype; + +var DOMIterables = { + DOMTokenList: true, + NodeList: true +}; + +module.exports = function (it) { + var own = it.forEach; + return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.forEach) + // eslint-disable-next-line no-prototype-builtins + || DOMIterables.hasOwnProperty(classof(it)) ? forEach : own; +}; + +},{"../../internals/classof":86,"../../modules/web.dom-collections.iterator":205,"../array/virtual/for-each":208}],212:[function(require,module,exports){ +var parent = require('../../es/instance/includes'); + +module.exports = parent; + +},{"../../es/instance/includes":51}],213:[function(require,module,exports){ +var parent = require('../../es/instance/index-of'); + +module.exports = parent; + +},{"../../es/instance/index-of":52}],214:[function(require,module,exports){ +var parent = require('../../es/instance/map'); + +module.exports = parent; + +},{"../../es/instance/map":53}],215:[function(require,module,exports){ +var parent = require('../../es/instance/reduce'); + +module.exports = parent; + +},{"../../es/instance/reduce":54}],216:[function(require,module,exports){ +arguments[4][67][0].apply(exports,arguments) +},{"../../es/instance/slice":55,"dup":67}],217:[function(require,module,exports){ +var parent = require('../../es/instance/sort'); + +module.exports = parent; + +},{"../../es/instance/sort":56}],218:[function(require,module,exports){ +var parent = require('../../es/object/create'); + +module.exports = parent; + +},{"../../es/object/create":57}],219:[function(require,module,exports){ +var parent = require('../../es/object/define-property'); + +module.exports = parent; + +},{"../../es/object/define-property":58}],220:[function(require,module,exports){ +var parent = require('../es/parse-int'); + +module.exports = parent; + +},{"../es/parse-int":59}],221:[function(require,module,exports){ +var parent = require('../../es/symbol'); + +module.exports = parent; + +},{"../../es/symbol":62}],222:[function(require,module,exports){ +module.exports = [ + { + 'name': 'InAdlam', + 'astral': '\uD83A[\uDD00-\uDD5F]' + }, + { + 'name': 'InAegean_Numbers', + 'astral': '\uD800[\uDD00-\uDD3F]' + }, + { + 'name': 'InAhom', + 'astral': '\uD805[\uDF00-\uDF3F]' + }, + { + 'name': 'InAlchemical_Symbols', + 'astral': '\uD83D[\uDF00-\uDF7F]' + }, + { + 'name': 'InAlphabetic_Presentation_Forms', + 'bmp': '\uFB00-\uFB4F' + }, + { + 'name': 'InAnatolian_Hieroglyphs', + 'astral': '\uD811[\uDC00-\uDE7F]' + }, + { + 'name': 'InAncient_Greek_Musical_Notation', + 'astral': '\uD834[\uDE00-\uDE4F]' + }, + { + 'name': 'InAncient_Greek_Numbers', + 'astral': '\uD800[\uDD40-\uDD8F]' + }, + { + 'name': 'InAncient_Symbols', + 'astral': '\uD800[\uDD90-\uDDCF]' + }, + { + 'name': 'InArabic', + 'bmp': '\u0600-\u06FF' + }, + { + 'name': 'InArabic_Extended_A', + 'bmp': '\u08A0-\u08FF' + }, + { + 'name': 'InArabic_Mathematical_Alphabetic_Symbols', + 'astral': '\uD83B[\uDE00-\uDEFF]' + }, + { + 'name': 'InArabic_Presentation_Forms_A', + 'bmp': '\uFB50-\uFDFF' + }, + { + 'name': 'InArabic_Presentation_Forms_B', + 'bmp': '\uFE70-\uFEFF' + }, + { + 'name': 'InArabic_Supplement', + 'bmp': '\u0750-\u077F' + }, + { + 'name': 'InArmenian', + 'bmp': '\u0530-\u058F' + }, + { + 'name': 'InArrows', + 'bmp': '\u2190-\u21FF' + }, + { + 'name': 'InAvestan', + 'astral': '\uD802[\uDF00-\uDF3F]' + }, + { + 'name': 'InBalinese', + 'bmp': '\u1B00-\u1B7F' + }, + { + 'name': 'InBamum', + 'bmp': '\uA6A0-\uA6FF' + }, + { + 'name': 'InBamum_Supplement', + 'astral': '\uD81A[\uDC00-\uDE3F]' + }, + { + 'name': 'InBasic_Latin', + 'bmp': '\0-\x7F' + }, + { + 'name': 'InBassa_Vah', + 'astral': '\uD81A[\uDED0-\uDEFF]' + }, + { + 'name': 'InBatak', + 'bmp': '\u1BC0-\u1BFF' + }, + { + 'name': 'InBengali', + 'bmp': '\u0980-\u09FF' + }, + { + 'name': 'InBhaiksuki', + 'astral': '\uD807[\uDC00-\uDC6F]' + }, + { + 'name': 'InBlock_Elements', + 'bmp': '\u2580-\u259F' + }, + { + 'name': 'InBopomofo', + 'bmp': '\u3100-\u312F' + }, + { + 'name': 'InBopomofo_Extended', + 'bmp': '\u31A0-\u31BF' + }, + { + 'name': 'InBox_Drawing', + 'bmp': '\u2500-\u257F' + }, + { + 'name': 'InBrahmi', + 'astral': '\uD804[\uDC00-\uDC7F]' + }, + { + 'name': 'InBraille_Patterns', + 'bmp': '\u2800-\u28FF' + }, + { + 'name': 'InBuginese', + 'bmp': '\u1A00-\u1A1F' + }, + { + 'name': 'InBuhid', + 'bmp': '\u1740-\u175F' + }, + { + 'name': 'InByzantine_Musical_Symbols', + 'astral': '\uD834[\uDC00-\uDCFF]' + }, + { + 'name': 'InCJK_Compatibility', + 'bmp': '\u3300-\u33FF' + }, + { + 'name': 'InCJK_Compatibility_Forms', + 'bmp': '\uFE30-\uFE4F' + }, + { + 'name': 'InCJK_Compatibility_Ideographs', + 'bmp': '\uF900-\uFAFF' + }, + { + 'name': 'InCJK_Compatibility_Ideographs_Supplement', + 'astral': '\uD87E[\uDC00-\uDE1F]' + }, + { + 'name': 'InCJK_Radicals_Supplement', + 'bmp': '\u2E80-\u2EFF' + }, + { + 'name': 'InCJK_Strokes', + 'bmp': '\u31C0-\u31EF' + }, + { + 'name': 'InCJK_Symbols_And_Punctuation', + 'bmp': '\u3000-\u303F' + }, + { + 'name': 'InCJK_Unified_Ideographs', + 'bmp': '\u4E00-\u9FFF' + }, + { + 'name': 'InCJK_Unified_Ideographs_Extension_A', + 'bmp': '\u3400-\u4DBF' + }, + { + 'name': 'InCJK_Unified_Ideographs_Extension_B', + 'astral': '[\uD840-\uD868][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF]' + }, + { + 'name': 'InCJK_Unified_Ideographs_Extension_C', + 'astral': '\uD869[\uDF00-\uDFFF]|[\uD86A-\uD86C][\uDC00-\uDFFF]|\uD86D[\uDC00-\uDF3F]' + }, + { + 'name': 'InCJK_Unified_Ideographs_Extension_D', + 'astral': '\uD86D[\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1F]' + }, + { + 'name': 'InCJK_Unified_Ideographs_Extension_E', + 'astral': '\uD86E[\uDC20-\uDFFF]|[\uD86F-\uD872][\uDC00-\uDFFF]|\uD873[\uDC00-\uDEAF]' + }, + { + 'name': 'InCJK_Unified_Ideographs_Extension_F', + 'astral': '\uD873[\uDEB0-\uDFFF]|[\uD874-\uD879][\uDC00-\uDFFF]|\uD87A[\uDC00-\uDFEF]' + }, + { + 'name': 'InCarian', + 'astral': '\uD800[\uDEA0-\uDEDF]' + }, + { + 'name': 'InCaucasian_Albanian', + 'astral': '\uD801[\uDD30-\uDD6F]' + }, + { + 'name': 'InChakma', + 'astral': '\uD804[\uDD00-\uDD4F]' + }, + { + 'name': 'InCham', + 'bmp': '\uAA00-\uAA5F' + }, + { + 'name': 'InCherokee', + 'bmp': '\u13A0-\u13FF' + }, + { + 'name': 'InCherokee_Supplement', + 'bmp': '\uAB70-\uABBF' + }, + { + 'name': 'InChess_Symbols', + 'astral': '\uD83E[\uDE00-\uDE6F]' + }, + { + 'name': 'InCombining_Diacritical_Marks', + 'bmp': '\u0300-\u036F' + }, + { + 'name': 'InCombining_Diacritical_Marks_Extended', + 'bmp': '\u1AB0-\u1AFF' + }, + { + 'name': 'InCombining_Diacritical_Marks_For_Symbols', + 'bmp': '\u20D0-\u20FF' + }, + { + 'name': 'InCombining_Diacritical_Marks_Supplement', + 'bmp': '\u1DC0-\u1DFF' + }, + { + 'name': 'InCombining_Half_Marks', + 'bmp': '\uFE20-\uFE2F' + }, + { + 'name': 'InCommon_Indic_Number_Forms', + 'bmp': '\uA830-\uA83F' + }, + { + 'name': 'InControl_Pictures', + 'bmp': '\u2400-\u243F' + }, + { + 'name': 'InCoptic', + 'bmp': '\u2C80-\u2CFF' + }, + { + 'name': 'InCoptic_Epact_Numbers', + 'astral': '\uD800[\uDEE0-\uDEFF]' + }, + { + 'name': 'InCounting_Rod_Numerals', + 'astral': '\uD834[\uDF60-\uDF7F]' + }, + { + 'name': 'InCuneiform', + 'astral': '\uD808[\uDC00-\uDFFF]' + }, + { + 'name': 'InCuneiform_Numbers_And_Punctuation', + 'astral': '\uD809[\uDC00-\uDC7F]' + }, + { + 'name': 'InCurrency_Symbols', + 'bmp': '\u20A0-\u20CF' + }, + { + 'name': 'InCypriot_Syllabary', + 'astral': '\uD802[\uDC00-\uDC3F]' + }, + { + 'name': 'InCyrillic', + 'bmp': '\u0400-\u04FF' + }, + { + 'name': 'InCyrillic_Extended_A', + 'bmp': '\u2DE0-\u2DFF' + }, + { + 'name': 'InCyrillic_Extended_B', + 'bmp': '\uA640-\uA69F' + }, + { + 'name': 'InCyrillic_Extended_C', + 'bmp': '\u1C80-\u1C8F' + }, + { + 'name': 'InCyrillic_Supplement', + 'bmp': '\u0500-\u052F' + }, + { + 'name': 'InDeseret', + 'astral': '\uD801[\uDC00-\uDC4F]' + }, + { + 'name': 'InDevanagari', + 'bmp': '\u0900-\u097F' + }, + { + 'name': 'InDevanagari_Extended', + 'bmp': '\uA8E0-\uA8FF' + }, + { + 'name': 'InDingbats', + 'bmp': '\u2700-\u27BF' + }, + { + 'name': 'InDogra', + 'astral': '\uD806[\uDC00-\uDC4F]' + }, + { + 'name': 'InDomino_Tiles', + 'astral': '\uD83C[\uDC30-\uDC9F]' + }, + { + 'name': 'InDuployan', + 'astral': '\uD82F[\uDC00-\uDC9F]' + }, + { + 'name': 'InEarly_Dynastic_Cuneiform', + 'astral': '\uD809[\uDC80-\uDD4F]' + }, + { + 'name': 'InEgyptian_Hieroglyphs', + 'astral': '\uD80C[\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F]' + }, + { + 'name': 'InElbasan', + 'astral': '\uD801[\uDD00-\uDD2F]' + }, + { + 'name': 'InEmoticons', + 'astral': '\uD83D[\uDE00-\uDE4F]' + }, + { + 'name': 'InEnclosed_Alphanumeric_Supplement', + 'astral': '\uD83C[\uDD00-\uDDFF]' + }, + { + 'name': 'InEnclosed_Alphanumerics', + 'bmp': '\u2460-\u24FF' + }, + { + 'name': 'InEnclosed_CJK_Letters_And_Months', + 'bmp': '\u3200-\u32FF' + }, + { + 'name': 'InEnclosed_Ideographic_Supplement', + 'astral': '\uD83C[\uDE00-\uDEFF]' + }, + { + 'name': 'InEthiopic', + 'bmp': '\u1200-\u137F' + }, + { + 'name': 'InEthiopic_Extended', + 'bmp': '\u2D80-\u2DDF' + }, + { + 'name': 'InEthiopic_Extended_A', + 'bmp': '\uAB00-\uAB2F' + }, + { + 'name': 'InEthiopic_Supplement', + 'bmp': '\u1380-\u139F' + }, + { + 'name': 'InGeneral_Punctuation', + 'bmp': '\u2000-\u206F' + }, + { + 'name': 'InGeometric_Shapes', + 'bmp': '\u25A0-\u25FF' + }, + { + 'name': 'InGeometric_Shapes_Extended', + 'astral': '\uD83D[\uDF80-\uDFFF]' + }, + { + 'name': 'InGeorgian', + 'bmp': '\u10A0-\u10FF' + }, + { + 'name': 'InGeorgian_Extended', + 'bmp': '\u1C90-\u1CBF' + }, + { + 'name': 'InGeorgian_Supplement', + 'bmp': '\u2D00-\u2D2F' + }, + { + 'name': 'InGlagolitic', + 'bmp': '\u2C00-\u2C5F' + }, + { + 'name': 'InGlagolitic_Supplement', + 'astral': '\uD838[\uDC00-\uDC2F]' + }, + { + 'name': 'InGothic', + 'astral': '\uD800[\uDF30-\uDF4F]' + }, + { + 'name': 'InGrantha', + 'astral': '\uD804[\uDF00-\uDF7F]' + }, + { + 'name': 'InGreek_And_Coptic', + 'bmp': '\u0370-\u03FF' + }, + { + 'name': 'InGreek_Extended', + 'bmp': '\u1F00-\u1FFF' + }, + { + 'name': 'InGujarati', + 'bmp': '\u0A80-\u0AFF' + }, + { + 'name': 'InGunjala_Gondi', + 'astral': '\uD807[\uDD60-\uDDAF]' + }, + { + 'name': 'InGurmukhi', + 'bmp': '\u0A00-\u0A7F' + }, + { + 'name': 'InHalfwidth_And_Fullwidth_Forms', + 'bmp': '\uFF00-\uFFEF' + }, + { + 'name': 'InHangul_Compatibility_Jamo', + 'bmp': '\u3130-\u318F' + }, + { + 'name': 'InHangul_Jamo', + 'bmp': '\u1100-\u11FF' + }, + { + 'name': 'InHangul_Jamo_Extended_A', + 'bmp': '\uA960-\uA97F' + }, + { + 'name': 'InHangul_Jamo_Extended_B', + 'bmp': '\uD7B0-\uD7FF' + }, + { + 'name': 'InHangul_Syllables', + 'bmp': '\uAC00-\uD7AF' + }, + { + 'name': 'InHanifi_Rohingya', + 'astral': '\uD803[\uDD00-\uDD3F]' + }, + { + 'name': 'InHanunoo', + 'bmp': '\u1720-\u173F' + }, + { + 'name': 'InHatran', + 'astral': '\uD802[\uDCE0-\uDCFF]' + }, + { + 'name': 'InHebrew', + 'bmp': '\u0590-\u05FF' + }, + { + 'name': 'InHigh_Private_Use_Surrogates', + 'bmp': '\uDB80-\uDBFF' + }, + { + 'name': 'InHigh_Surrogates', + 'bmp': '\uD800-\uDB7F' + }, + { + 'name': 'InHiragana', + 'bmp': '\u3040-\u309F' + }, + { + 'name': 'InIPA_Extensions', + 'bmp': '\u0250-\u02AF' + }, + { + 'name': 'InIdeographic_Description_Characters', + 'bmp': '\u2FF0-\u2FFF' + }, + { + 'name': 'InIdeographic_Symbols_And_Punctuation', + 'astral': '\uD81B[\uDFE0-\uDFFF]' + }, + { + 'name': 'InImperial_Aramaic', + 'astral': '\uD802[\uDC40-\uDC5F]' + }, + { + 'name': 'InIndic_Siyaq_Numbers', + 'astral': '\uD83B[\uDC70-\uDCBF]' + }, + { + 'name': 'InInscriptional_Pahlavi', + 'astral': '\uD802[\uDF60-\uDF7F]' + }, + { + 'name': 'InInscriptional_Parthian', + 'astral': '\uD802[\uDF40-\uDF5F]' + }, + { + 'name': 'InJavanese', + 'bmp': '\uA980-\uA9DF' + }, + { + 'name': 'InKaithi', + 'astral': '\uD804[\uDC80-\uDCCF]' + }, + { + 'name': 'InKana_Extended_A', + 'astral': '\uD82C[\uDD00-\uDD2F]' + }, + { + 'name': 'InKana_Supplement', + 'astral': '\uD82C[\uDC00-\uDCFF]' + }, + { + 'name': 'InKanbun', + 'bmp': '\u3190-\u319F' + }, + { + 'name': 'InKangxi_Radicals', + 'bmp': '\u2F00-\u2FDF' + }, + { + 'name': 'InKannada', + 'bmp': '\u0C80-\u0CFF' + }, + { + 'name': 'InKatakana', + 'bmp': '\u30A0-\u30FF' + }, + { + 'name': 'InKatakana_Phonetic_Extensions', + 'bmp': '\u31F0-\u31FF' + }, + { + 'name': 'InKayah_Li', + 'bmp': '\uA900-\uA92F' + }, + { + 'name': 'InKharoshthi', + 'astral': '\uD802[\uDE00-\uDE5F]' + }, + { + 'name': 'InKhmer', + 'bmp': '\u1780-\u17FF' + }, + { + 'name': 'InKhmer_Symbols', + 'bmp': '\u19E0-\u19FF' + }, + { + 'name': 'InKhojki', + 'astral': '\uD804[\uDE00-\uDE4F]' + }, + { + 'name': 'InKhudawadi', + 'astral': '\uD804[\uDEB0-\uDEFF]' + }, + { + 'name': 'InLao', + 'bmp': '\u0E80-\u0EFF' + }, + { + 'name': 'InLatin_1_Supplement', + 'bmp': '\x80-\xFF' + }, + { + 'name': 'InLatin_Extended_A', + 'bmp': '\u0100-\u017F' + }, + { + 'name': 'InLatin_Extended_Additional', + 'bmp': '\u1E00-\u1EFF' + }, + { + 'name': 'InLatin_Extended_B', + 'bmp': '\u0180-\u024F' + }, + { + 'name': 'InLatin_Extended_C', + 'bmp': '\u2C60-\u2C7F' + }, + { + 'name': 'InLatin_Extended_D', + 'bmp': '\uA720-\uA7FF' + }, + { + 'name': 'InLatin_Extended_E', + 'bmp': '\uAB30-\uAB6F' + }, + { + 'name': 'InLepcha', + 'bmp': '\u1C00-\u1C4F' + }, + { + 'name': 'InLetterlike_Symbols', + 'bmp': '\u2100-\u214F' + }, + { + 'name': 'InLimbu', + 'bmp': '\u1900-\u194F' + }, + { + 'name': 'InLinear_A', + 'astral': '\uD801[\uDE00-\uDF7F]' + }, + { + 'name': 'InLinear_B_Ideograms', + 'astral': '\uD800[\uDC80-\uDCFF]' + }, + { + 'name': 'InLinear_B_Syllabary', + 'astral': '\uD800[\uDC00-\uDC7F]' + }, + { + 'name': 'InLisu', + 'bmp': '\uA4D0-\uA4FF' + }, + { + 'name': 'InLow_Surrogates', + 'bmp': '\uDC00-\uDFFF' + }, + { + 'name': 'InLycian', + 'astral': '\uD800[\uDE80-\uDE9F]' + }, + { + 'name': 'InLydian', + 'astral': '\uD802[\uDD20-\uDD3F]' + }, + { + 'name': 'InMahajani', + 'astral': '\uD804[\uDD50-\uDD7F]' + }, + { + 'name': 'InMahjong_Tiles', + 'astral': '\uD83C[\uDC00-\uDC2F]' + }, + { + 'name': 'InMakasar', + 'astral': '\uD807[\uDEE0-\uDEFF]' + }, + { + 'name': 'InMalayalam', + 'bmp': '\u0D00-\u0D7F' + }, + { + 'name': 'InMandaic', + 'bmp': '\u0840-\u085F' + }, + { + 'name': 'InManichaean', + 'astral': '\uD802[\uDEC0-\uDEFF]' + }, + { + 'name': 'InMarchen', + 'astral': '\uD807[\uDC70-\uDCBF]' + }, + { + 'name': 'InMasaram_Gondi', + 'astral': '\uD807[\uDD00-\uDD5F]' + }, + { + 'name': 'InMathematical_Alphanumeric_Symbols', + 'astral': '\uD835[\uDC00-\uDFFF]' + }, + { + 'name': 'InMathematical_Operators', + 'bmp': '\u2200-\u22FF' + }, + { + 'name': 'InMayan_Numerals', + 'astral': '\uD834[\uDEE0-\uDEFF]' + }, + { + 'name': 'InMedefaidrin', + 'astral': '\uD81B[\uDE40-\uDE9F]' + }, + { + 'name': 'InMeetei_Mayek', + 'bmp': '\uABC0-\uABFF' + }, + { + 'name': 'InMeetei_Mayek_Extensions', + 'bmp': '\uAAE0-\uAAFF' + }, + { + 'name': 'InMende_Kikakui', + 'astral': '\uD83A[\uDC00-\uDCDF]' + }, + { + 'name': 'InMeroitic_Cursive', + 'astral': '\uD802[\uDDA0-\uDDFF]' + }, + { + 'name': 'InMeroitic_Hieroglyphs', + 'astral': '\uD802[\uDD80-\uDD9F]' + }, + { + 'name': 'InMiao', + 'astral': '\uD81B[\uDF00-\uDF9F]' + }, + { + 'name': 'InMiscellaneous_Mathematical_Symbols_A', + 'bmp': '\u27C0-\u27EF' + }, + { + 'name': 'InMiscellaneous_Mathematical_Symbols_B', + 'bmp': '\u2980-\u29FF' + }, + { + 'name': 'InMiscellaneous_Symbols', + 'bmp': '\u2600-\u26FF' + }, + { + 'name': 'InMiscellaneous_Symbols_And_Arrows', + 'bmp': '\u2B00-\u2BFF' + }, + { + 'name': 'InMiscellaneous_Symbols_And_Pictographs', + 'astral': '\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDDFF]' + }, + { + 'name': 'InMiscellaneous_Technical', + 'bmp': '\u2300-\u23FF' + }, + { + 'name': 'InModi', + 'astral': '\uD805[\uDE00-\uDE5F]' + }, + { + 'name': 'InModifier_Tone_Letters', + 'bmp': '\uA700-\uA71F' + }, + { + 'name': 'InMongolian', + 'bmp': '\u1800-\u18AF' + }, + { + 'name': 'InMongolian_Supplement', + 'astral': '\uD805[\uDE60-\uDE7F]' + }, + { + 'name': 'InMro', + 'astral': '\uD81A[\uDE40-\uDE6F]' + }, + { + 'name': 'InMultani', + 'astral': '\uD804[\uDE80-\uDEAF]' + }, + { + 'name': 'InMusical_Symbols', + 'astral': '\uD834[\uDD00-\uDDFF]' + }, + { + 'name': 'InMyanmar', + 'bmp': '\u1000-\u109F' + }, + { + 'name': 'InMyanmar_Extended_A', + 'bmp': '\uAA60-\uAA7F' + }, + { + 'name': 'InMyanmar_Extended_B', + 'bmp': '\uA9E0-\uA9FF' + }, + { + 'name': 'InNKo', + 'bmp': '\u07C0-\u07FF' + }, + { + 'name': 'InNabataean', + 'astral': '\uD802[\uDC80-\uDCAF]' + }, + { + 'name': 'InNew_Tai_Lue', + 'bmp': '\u1980-\u19DF' + }, + { + 'name': 'InNewa', + 'astral': '\uD805[\uDC00-\uDC7F]' + }, + { + 'name': 'InNumber_Forms', + 'bmp': '\u2150-\u218F' + }, + { + 'name': 'InNushu', + 'astral': '\uD82C[\uDD70-\uDEFF]' + }, + { + 'name': 'InOgham', + 'bmp': '\u1680-\u169F' + }, + { + 'name': 'InOl_Chiki', + 'bmp': '\u1C50-\u1C7F' + }, + { + 'name': 'InOld_Hungarian', + 'astral': '\uD803[\uDC80-\uDCFF]' + }, + { + 'name': 'InOld_Italic', + 'astral': '\uD800[\uDF00-\uDF2F]' + }, + { + 'name': 'InOld_North_Arabian', + 'astral': '\uD802[\uDE80-\uDE9F]' + }, + { + 'name': 'InOld_Permic', + 'astral': '\uD800[\uDF50-\uDF7F]' + }, + { + 'name': 'InOld_Persian', + 'astral': '\uD800[\uDFA0-\uDFDF]' + }, + { + 'name': 'InOld_Sogdian', + 'astral': '\uD803[\uDF00-\uDF2F]' + }, + { + 'name': 'InOld_South_Arabian', + 'astral': '\uD802[\uDE60-\uDE7F]' + }, + { + 'name': 'InOld_Turkic', + 'astral': '\uD803[\uDC00-\uDC4F]' + }, + { + 'name': 'InOptical_Character_Recognition', + 'bmp': '\u2440-\u245F' + }, + { + 'name': 'InOriya', + 'bmp': '\u0B00-\u0B7F' + }, + { + 'name': 'InOrnamental_Dingbats', + 'astral': '\uD83D[\uDE50-\uDE7F]' + }, + { + 'name': 'InOsage', + 'astral': '\uD801[\uDCB0-\uDCFF]' + }, + { + 'name': 'InOsmanya', + 'astral': '\uD801[\uDC80-\uDCAF]' + }, + { + 'name': 'InPahawh_Hmong', + 'astral': '\uD81A[\uDF00-\uDF8F]' + }, + { + 'name': 'InPalmyrene', + 'astral': '\uD802[\uDC60-\uDC7F]' + }, + { + 'name': 'InPau_Cin_Hau', + 'astral': '\uD806[\uDEC0-\uDEFF]' + }, + { + 'name': 'InPhags_Pa', + 'bmp': '\uA840-\uA87F' + }, + { + 'name': 'InPhaistos_Disc', + 'astral': '\uD800[\uDDD0-\uDDFF]' + }, + { + 'name': 'InPhoenician', + 'astral': '\uD802[\uDD00-\uDD1F]' + }, + { + 'name': 'InPhonetic_Extensions', + 'bmp': '\u1D00-\u1D7F' + }, + { + 'name': 'InPhonetic_Extensions_Supplement', + 'bmp': '\u1D80-\u1DBF' + }, + { + 'name': 'InPlaying_Cards', + 'astral': '\uD83C[\uDCA0-\uDCFF]' + }, + { + 'name': 'InPrivate_Use_Area', + 'bmp': '\uE000-\uF8FF' + }, + { + 'name': 'InPsalter_Pahlavi', + 'astral': '\uD802[\uDF80-\uDFAF]' + }, + { + 'name': 'InRejang', + 'bmp': '\uA930-\uA95F' + }, + { + 'name': 'InRumi_Numeral_Symbols', + 'astral': '\uD803[\uDE60-\uDE7F]' + }, + { + 'name': 'InRunic', + 'bmp': '\u16A0-\u16FF' + }, + { + 'name': 'InSamaritan', + 'bmp': '\u0800-\u083F' + }, + { + 'name': 'InSaurashtra', + 'bmp': '\uA880-\uA8DF' + }, + { + 'name': 'InSharada', + 'astral': '\uD804[\uDD80-\uDDDF]' + }, + { + 'name': 'InShavian', + 'astral': '\uD801[\uDC50-\uDC7F]' + }, + { + 'name': 'InShorthand_Format_Controls', + 'astral': '\uD82F[\uDCA0-\uDCAF]' + }, + { + 'name': 'InSiddham', + 'astral': '\uD805[\uDD80-\uDDFF]' + }, + { + 'name': 'InSinhala', + 'bmp': '\u0D80-\u0DFF' + }, + { + 'name': 'InSinhala_Archaic_Numbers', + 'astral': '\uD804[\uDDE0-\uDDFF]' + }, + { + 'name': 'InSmall_Form_Variants', + 'bmp': '\uFE50-\uFE6F' + }, + { + 'name': 'InSogdian', + 'astral': '\uD803[\uDF30-\uDF6F]' + }, + { + 'name': 'InSora_Sompeng', + 'astral': '\uD804[\uDCD0-\uDCFF]' + }, + { + 'name': 'InSoyombo', + 'astral': '\uD806[\uDE50-\uDEAF]' + }, + { + 'name': 'InSpacing_Modifier_Letters', + 'bmp': '\u02B0-\u02FF' + }, + { + 'name': 'InSpecials', + 'bmp': '\uFFF0-\uFFFF' + }, + { + 'name': 'InSundanese', + 'bmp': '\u1B80-\u1BBF' + }, + { + 'name': 'InSundanese_Supplement', + 'bmp': '\u1CC0-\u1CCF' + }, + { + 'name': 'InSuperscripts_And_Subscripts', + 'bmp': '\u2070-\u209F' + }, + { + 'name': 'InSupplemental_Arrows_A', + 'bmp': '\u27F0-\u27FF' + }, + { + 'name': 'InSupplemental_Arrows_B', + 'bmp': '\u2900-\u297F' + }, + { + 'name': 'InSupplemental_Arrows_C', + 'astral': '\uD83E[\uDC00-\uDCFF]' + }, + { + 'name': 'InSupplemental_Mathematical_Operators', + 'bmp': '\u2A00-\u2AFF' + }, + { + 'name': 'InSupplemental_Punctuation', + 'bmp': '\u2E00-\u2E7F' + }, + { + 'name': 'InSupplemental_Symbols_And_Pictographs', + 'astral': '\uD83E[\uDD00-\uDDFF]' + }, + { + 'name': 'InSupplementary_Private_Use_Area_A', + 'astral': '[\uDB80-\uDBBF][\uDC00-\uDFFF]' + }, + { + 'name': 'InSupplementary_Private_Use_Area_B', + 'astral': '[\uDBC0-\uDBFF][\uDC00-\uDFFF]' + }, + { + 'name': 'InSutton_SignWriting', + 'astral': '\uD836[\uDC00-\uDEAF]' + }, + { + 'name': 'InSyloti_Nagri', + 'bmp': '\uA800-\uA82F' + }, + { + 'name': 'InSyriac', + 'bmp': '\u0700-\u074F' + }, + { + 'name': 'InSyriac_Supplement', + 'bmp': '\u0860-\u086F' + }, + { + 'name': 'InTagalog', + 'bmp': '\u1700-\u171F' + }, + { + 'name': 'InTagbanwa', + 'bmp': '\u1760-\u177F' + }, + { + 'name': 'InTags', + 'astral': '\uDB40[\uDC00-\uDC7F]' + }, + { + 'name': 'InTai_Le', + 'bmp': '\u1950-\u197F' + }, + { + 'name': 'InTai_Tham', + 'bmp': '\u1A20-\u1AAF' + }, + { + 'name': 'InTai_Viet', + 'bmp': '\uAA80-\uAADF' + }, + { + 'name': 'InTai_Xuan_Jing_Symbols', + 'astral': '\uD834[\uDF00-\uDF5F]' + }, + { + 'name': 'InTakri', + 'astral': '\uD805[\uDE80-\uDECF]' + }, + { + 'name': 'InTamil', + 'bmp': '\u0B80-\u0BFF' + }, + { + 'name': 'InTangut', + 'astral': '[\uD81C-\uD821][\uDC00-\uDFFF]' + }, + { + 'name': 'InTangut_Components', + 'astral': '\uD822[\uDC00-\uDEFF]' + }, + { + 'name': 'InTelugu', + 'bmp': '\u0C00-\u0C7F' + }, + { + 'name': 'InThaana', + 'bmp': '\u0780-\u07BF' + }, + { + 'name': 'InThai', + 'bmp': '\u0E00-\u0E7F' + }, + { + 'name': 'InTibetan', + 'bmp': '\u0F00-\u0FFF' + }, + { + 'name': 'InTifinagh', + 'bmp': '\u2D30-\u2D7F' + }, + { + 'name': 'InTirhuta', + 'astral': '\uD805[\uDC80-\uDCDF]' + }, + { + 'name': 'InTransport_And_Map_Symbols', + 'astral': '\uD83D[\uDE80-\uDEFF]' + }, + { + 'name': 'InUgaritic', + 'astral': '\uD800[\uDF80-\uDF9F]' + }, + { + 'name': 'InUnified_Canadian_Aboriginal_Syllabics', + 'bmp': '\u1400-\u167F' + }, + { + 'name': 'InUnified_Canadian_Aboriginal_Syllabics_Extended', + 'bmp': '\u18B0-\u18FF' + }, + { + 'name': 'InVai', + 'bmp': '\uA500-\uA63F' + }, + { + 'name': 'InVariation_Selectors', + 'bmp': '\uFE00-\uFE0F' + }, + { + 'name': 'InVariation_Selectors_Supplement', + 'astral': '\uDB40[\uDD00-\uDDEF]' + }, + { + 'name': 'InVedic_Extensions', + 'bmp': '\u1CD0-\u1CFF' + }, + { + 'name': 'InVertical_Forms', + 'bmp': '\uFE10-\uFE1F' + }, + { + 'name': 'InWarang_Citi', + 'astral': '\uD806[\uDCA0-\uDCFF]' + }, + { + 'name': 'InYi_Radicals', + 'bmp': '\uA490-\uA4CF' + }, + { + 'name': 'InYi_Syllables', + 'bmp': '\uA000-\uA48F' + }, + { + 'name': 'InYijing_Hexagram_Symbols', + 'bmp': '\u4DC0-\u4DFF' + }, + { + 'name': 'InZanabazar_Square', + 'astral': '\uD806[\uDE00-\uDE4F]' + }, + { + 'name': 'Inundefined', + 'astral': '\uD803[\uDE80-\uDEBF\uDFB0-\uDFFF]|\uD806[\uDD00-\uDD5F\uDDA0-\uDDFF]|\uD807[\uDFB0-\uDFFF]|\uD80D[\uDC30-\uDC3F]|\uD822[\uDF00-\uDFFF]|\uD823[\uDC00-\uDD8F]|\uD82C[\uDD30-\uDD6F]|\uD838[\uDD00-\uDD4F\uDEC0-\uDEFF]|\uD83B[\uDD00-\uDD4F]|\uD83E[\uDE70-\uDFFF]|[\uD880-\uD883][\uDC00-\uDFFF]|\uD884[\uDC00-\uDF4F]' + } +]; + +},{}],223:[function(require,module,exports){ +module.exports = [ + { + 'name': 'C', + 'alias': 'Other', + 'isBmpLast': true, + 'bmp': '\0-\x1F\x7F-\x9F\xAD\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EE\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB\u07FC\u082E\u082F\u083F\u085C\u085D\u085F\u086B-\u089F\u08B5\u08C8-\u08D2\u08E2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A77-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C76\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180E\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1AC1-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1C8F\u1CBB\u1CBC\u1CC8-\u1CCF\u1CFB-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20C0-\u20CF\u20F1-\u20FF\u218C-\u218F\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E53-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u3130\u318F\u31E4-\u31EF\u321F\u9FFD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7C0\uA7C1\uA7CB-\uA7F4\uA82D-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB6C-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF', + 'astral': '\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F\uDEAA\uDEAE\uDEAF\uDEB2-\uDEFF\uDF28-\uDF2F\uDF5A-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCBD\uDCC2-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD48-\uDD4F\uDD77-\uDD7F\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5C\uDC62-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEB9-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD47-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE5-\uDDFF\uDE48-\uDE4F\uDEA3-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFAF\uDFB1-\uDFBF\uDFF2-\uDFFE]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD824-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82C[\uDD1F-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA0-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDD73-\uDD7A\uDDE9-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD50-\uDEBF\uDEFA-\uDEFE\uDF00-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDD00\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDF\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDD79\uDDCC\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7B-\uDE7F\uDE87-\uDE8F\uDEA9-\uDEAF\uDEB7-\uDEBF\uDEC3-\uDECF\uDED7-\uDEFF\uDF93\uDFCB-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEDE-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]' + }, + { + 'name': 'Cc', + 'alias': 'Control', + 'bmp': '\0-\x1F\x7F-\x9F' + }, + { + 'name': 'Cf', + 'alias': 'Format', + 'bmp': '\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB', + 'astral': '\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC38]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]' + }, + { + 'name': 'Cn', + 'alias': 'Unassigned', + 'bmp': '\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EE\u05F5-\u05FF\u061D\u070E\u074B\u074C\u07B2-\u07BF\u07FB\u07FC\u082E\u082F\u083F\u085C\u085D\u085F\u086B-\u089F\u08B5\u08C8-\u08D2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A77-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C76\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1AC1-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1C8F\u1CBB\u1CBC\u1CC8-\u1CCF\u1CFB-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u2065\u2072\u2073\u208F\u209D-\u209F\u20C0-\u20CF\u20F1-\u20FF\u218C-\u218F\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E53-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u3130\u318F\u31E4-\u31EF\u321F\u9FFD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7C0\uA7C1\uA7CB-\uA7F4\uA82D-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB6C-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD\uFEFE\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFF8\uFFFE\uFFFF', + 'astral': '\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F\uDEAA\uDEAE\uDEAF\uDEB2-\uDEFF\uDF28-\uDF2F\uDF5A-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCC2-\uDCCC\uDCCE\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD48-\uDD4F\uDD77-\uDD7F\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5C\uDC62-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEB9-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD47-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE5-\uDDFF\uDE48-\uDE4F\uDEA3-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFAF\uDFB1-\uDFBF\uDFF2-\uDFFE]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD824-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDB7F][\uDC00-\uDFFF]|\uD80D[\uDC2F\uDC39-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82C[\uDD1F-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA4-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDDE9-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD50-\uDEBF\uDEFA-\uDEFE\uDF00-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDD00\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDF\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDD79\uDDCC\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7B-\uDE7F\uDE87-\uDE8F\uDEA9-\uDEAF\uDEB7-\uDEBF\uDEC3-\uDECF\uDED7-\uDEFF\uDF93\uDFCB-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEDE-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00\uDC02-\uDC1F\uDC80-\uDCFF\uDDF0-\uDFFF]|[\uDBBF\uDBFF][\uDFFE\uDFFF]' + }, + { + 'name': 'Co', + 'alias': 'Private_Use', + 'bmp': '\uE000-\uF8FF', + 'astral': '[\uDB80-\uDBBE\uDBC0-\uDBFE][\uDC00-\uDFFF]|[\uDBBF\uDBFF][\uDC00-\uDFFD]' + }, + { + 'name': 'Cs', + 'alias': 'Surrogate', + 'bmp': '\uD800-\uDFFF' + }, + { + 'name': 'L', + 'alias': 'Letter', + 'bmp': 'A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', + 'astral': '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDEC0-\uDEEB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]' + }, + { + 'name': 'LC', + 'alias': 'Cased_Letter', + 'bmp': 'A-Za-z\xB5\xC0-\xD6\xD8-\xF6\xF8-\u01BA\u01BC-\u01BF\u01C4-\u0293\u0295-\u02AF\u0370-\u0373\u0376\u0377\u037B-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0560-\u0588\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FD-\u10FF\u13A0-\u13F5\u13F8-\u13FD\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2134\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2C7B\u2C7E-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA640-\uA66D\uA680-\uA69B\uA722-\uA76F\uA771-\uA787\uA78B-\uA78E\uA790-\uA7BF\uA7C2-\uA7CA\uA7F5\uA7F6\uA7FA\uAB30-\uAB5A\uAB60-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF21-\uFF3A\uFF41-\uFF5A', + 'astral': '\uD801[\uDC00-\uDC4F\uDCB0-\uDCD3\uDCD8-\uDCFB]|\uD803[\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD806[\uDCA0-\uDCDF]|\uD81B[\uDE40-\uDE7F]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDD00-\uDD43]' + }, + { + 'name': 'Ll', + 'alias': 'Lowercase_Letter', + 'bmp': 'a-z\xB5\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0560-\u0588\u10D0-\u10FA\u10FD-\u10FF\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7AF\uA7B5\uA7B7\uA7B9\uA7BB\uA7BD\uA7BF\uA7C3\uA7C8\uA7CA\uA7F6\uA7FA\uAB30-\uAB5A\uAB60-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A', + 'astral': '\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD81B[\uDE60-\uDE7F]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD83A[\uDD22-\uDD43]' + }, + { + 'name': 'Lm', + 'alias': 'Modifier_Letter', + 'bmp': '\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5\u06E6\u07F4\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C\uA69D\uA717-\uA71F\uA770\uA788\uA7F8\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3\uAAF4\uAB5C-\uAB5F\uAB69\uFF70\uFF9E\uFF9F', + 'astral': '\uD81A[\uDF40-\uDF43]|\uD81B[\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD838[\uDD37-\uDD3D]|\uD83A\uDD4B' + }, + { + 'name': 'Lo', + 'alias': 'Other_Letter', + 'bmp': '\xAA\xBA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05EF-\u05F2\u0620-\u063F\u0641-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', + 'astral': '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC50-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF4A\uDF50]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD838[\uDD00-\uDD2C\uDD4E\uDEC0-\uDEEB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]' + }, + { + 'name': 'Lt', + 'alias': 'Titlecase_Letter', + 'bmp': '\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC' + }, + { + 'name': 'Lu', + 'alias': 'Uppercase_Letter', + 'bmp': 'A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1C90-\u1CBA\u1CBD-\u1CBF\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uA7B8\uA7BA\uA7BC\uA7BE\uA7C2\uA7C4-\uA7C7\uA7C9\uA7F5\uFF21-\uFF3A', + 'astral': '\uD801[\uDC00-\uDC27\uDCB0-\uDCD3]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD81B[\uDE40-\uDE5F]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]' + }, + { + 'name': 'M', + 'alias': 'Mark', + 'bmp': '\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D81-\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1AC0\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA82C\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F', + 'astral': '\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD45\uDD46\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDDC9-\uDDCC\uDDCE\uDDCF\uDE2C-\uDE37\uDE3E\uDEDF-\uDEEA\uDF00-\uDF03\uDF3B\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC35-\uDC46\uDC5E\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDDDC\uDDDD\uDE30-\uDE40\uDEAB-\uDEB7\uDF1D-\uDF2B]|\uD806[\uDC2C-\uDC3A\uDD30-\uDD35\uDD37\uDD38\uDD3B-\uDD3E\uDD40\uDD42\uDD43\uDDD1-\uDDD7\uDDDA-\uDDE0\uDDE4\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE3E\uDE47\uDE51-\uDE5B\uDE8A-\uDE99]|\uD807[\uDC2F-\uDC36\uDC38-\uDC3F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD8A-\uDD8E\uDD90\uDD91\uDD93-\uDD97\uDEF3-\uDEF6]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF51-\uDF87\uDF8F-\uDF92\uDFE4\uDFF0\uDFF1]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]' + }, + { + 'name': 'Mc', + 'alias': 'Spacing_Mark', + 'bmp': '\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E\u094F\u0982\u0983\u09BE-\u09C0\u09C7\u09C8\u09CB\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB\u0ACC\u0B02\u0B03\u0B3E\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0B57\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0D02\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2\u0DF3\u0F3E\u0F3F\u0F7F\u102B\u102C\u1031\u1038\u103B\u103C\u1056\u1057\u1062-\u1064\u1067-\u106D\u1083\u1084\u1087-\u108C\u108F\u109A-\u109C\u17B6\u17BE-\u17C5\u17C7\u17C8\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u1A19\u1A1A\u1A55\u1A57\u1A61\u1A63\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43\u1B44\u1B82\u1BA1\u1BA6\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1C24-\u1C2B\u1C34\u1C35\u1CE1\u1CF7\u302E\u302F\uA823\uA824\uA827\uA880\uA881\uA8B4-\uA8C3\uA952\uA953\uA983\uA9B4\uA9B5\uA9BA\uA9BB\uA9BE-\uA9C0\uAA2F\uAA30\uAA33\uAA34\uAA4D\uAA7B\uAA7D\uAAEB\uAAEE\uAAEF\uAAF5\uABE3\uABE4\uABE6\uABE7\uABE9\uABEA\uABEC', + 'astral': '\uD804[\uDC00\uDC02\uDC82\uDCB0-\uDCB2\uDCB7\uDCB8\uDD2C\uDD45\uDD46\uDD82\uDDB3-\uDDB5\uDDBF\uDDC0\uDDCE\uDE2C-\uDE2E\uDE32\uDE33\uDE35\uDEE0-\uDEE2\uDF02\uDF03\uDF3E\uDF3F\uDF41-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63]|\uD805[\uDC35-\uDC37\uDC40\uDC41\uDC45\uDCB0-\uDCB2\uDCB9\uDCBB-\uDCBE\uDCC1\uDDAF-\uDDB1\uDDB8-\uDDBB\uDDBE\uDE30-\uDE32\uDE3B\uDE3C\uDE3E\uDEAC\uDEAE\uDEAF\uDEB6\uDF20\uDF21\uDF26]|\uD806[\uDC2C-\uDC2E\uDC38\uDD30-\uDD35\uDD37\uDD38\uDD3D\uDD40\uDD42\uDDD1-\uDDD3\uDDDC-\uDDDF\uDDE4\uDE39\uDE57\uDE58\uDE97]|\uD807[\uDC2F\uDC3E\uDCA9\uDCB1\uDCB4\uDD8A-\uDD8E\uDD93\uDD94\uDD96\uDEF5\uDEF6]|\uD81B[\uDF51-\uDF87\uDFF0\uDFF1]|\uD834[\uDD65\uDD66\uDD6D-\uDD72]' + }, + { + 'name': 'Me', + 'alias': 'Enclosing_Mark', + 'bmp': '\u0488\u0489\u1ABE\u20DD-\u20E0\u20E2-\u20E4\uA670-\uA672' + }, + { + 'name': 'Mn', + 'alias': 'Nonspacing_Mark', + 'bmp': '\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u09FE\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B55\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C04\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0D81\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABD\u1ABF\u1AC0\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA82C\uA8C4\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9BD\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F', + 'astral': '\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50]|\uD804[\uDC01\uDC38-\uDC46\uDC7F-\uDC81\uDCB3-\uDCB6\uDCB9\uDCBA\uDD00-\uDD02\uDD27-\uDD2B\uDD2D-\uDD34\uDD73\uDD80\uDD81\uDDB6-\uDDBE\uDDC9-\uDDCC\uDDCF\uDE2F-\uDE31\uDE34\uDE36\uDE37\uDE3E\uDEDF\uDEE3-\uDEEA\uDF00\uDF01\uDF3B\uDF3C\uDF40\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC38-\uDC3F\uDC42-\uDC44\uDC46\uDC5E\uDCB3-\uDCB8\uDCBA\uDCBF\uDCC0\uDCC2\uDCC3\uDDB2-\uDDB5\uDDBC\uDDBD\uDDBF\uDDC0\uDDDC\uDDDD\uDE33-\uDE3A\uDE3D\uDE3F\uDE40\uDEAB\uDEAD\uDEB0-\uDEB5\uDEB7\uDF1D-\uDF1F\uDF22-\uDF25\uDF27-\uDF2B]|\uD806[\uDC2F-\uDC37\uDC39\uDC3A\uDD3B\uDD3C\uDD3E\uDD43\uDDD4-\uDDD7\uDDDA\uDDDB\uDDE0\uDE01-\uDE0A\uDE33-\uDE38\uDE3B-\uDE3E\uDE47\uDE51-\uDE56\uDE59-\uDE5B\uDE8A-\uDE96\uDE98\uDE99]|\uD807[\uDC30-\uDC36\uDC38-\uDC3D\uDC3F\uDC92-\uDCA7\uDCAA-\uDCB0\uDCB2\uDCB3\uDCB5\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD90\uDD91\uDD95\uDD97\uDEF3\uDEF4]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF8F-\uDF92\uDFE4]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]' + }, + { + 'name': 'N', + 'alias': 'Number', + 'bmp': '0-9\xB2\xB3\xB9\xBC-\xBE\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u09F4-\u09F9\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0B72-\u0B77\u0BE6-\u0BF2\u0C66-\u0C6F\u0C78-\u0C7E\u0CE6-\u0CEF\u0D58-\u0D5E\u0D66-\u0D78\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F33\u1040-\u1049\u1090-\u1099\u1369-\u137C\u16EE-\u16F0\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1946-\u194F\u19D0-\u19DA\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3007\u3021-\u3029\u3038-\u303A\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA620-\uA629\uA6E6-\uA6EF\uA830-\uA835\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19', + 'astral': '\uD800[\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23\uDF41\uDF4A\uDFD1-\uDFD5]|\uD801[\uDCA0-\uDCA9]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE48\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDD30-\uDD39\uDE60-\uDE7E\uDF1D-\uDF26\uDF51-\uDF54\uDFC5-\uDFCB]|\uD804[\uDC52-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDDE1-\uDDF4\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF3B]|\uD806[\uDCE0-\uDCF2\uDD50-\uDD59]|\uD807[\uDC50-\uDC6C\uDD50-\uDD59\uDDA0-\uDDA9\uDFC0-\uDFD4]|\uD809[\uDC00-\uDC6E]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59\uDF5B-\uDF61]|\uD81B[\uDE80-\uDE96]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDFCE-\uDFFF]|\uD838[\uDD40-\uDD49\uDEF0-\uDEF9]|\uD83A[\uDCC7-\uDCCF\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]' + }, + { + 'name': 'Nd', + 'alias': 'Decimal_Number', + 'bmp': '0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19', + 'astral': '\uD801[\uDCA0-\uDCA9]|\uD803[\uDD30-\uDD39]|\uD804[\uDC66-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF39]|\uD806[\uDCE0-\uDCE9\uDD50-\uDD59]|\uD807[\uDC50-\uDC59\uDD50-\uDD59\uDDA0-\uDDA9]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59]|\uD835[\uDFCE-\uDFFF]|\uD838[\uDD40-\uDD49\uDEF0-\uDEF9]|\uD83A[\uDD50-\uDD59]|\uD83E[\uDFF0-\uDFF9]' + }, + { + 'name': 'Nl', + 'alias': 'Letter_Number', + 'bmp': '\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF', + 'astral': '\uD800[\uDD40-\uDD74\uDF41\uDF4A\uDFD1-\uDFD5]|\uD809[\uDC00-\uDC6E]' + }, + { + 'name': 'No', + 'alias': 'Other_Number', + 'bmp': '\xB2\xB3\xB9\xBC-\xBE\u09F4-\u09F9\u0B72-\u0B77\u0BF0-\u0BF2\u0C78-\u0C7E\u0D58-\u0D5E\u0D70-\u0D78\u0F2A-\u0F33\u1369-\u137C\u17F0-\u17F9\u19DA\u2070\u2074-\u2079\u2080-\u2089\u2150-\u215F\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA830-\uA835', + 'astral': '\uD800[\uDD07-\uDD33\uDD75-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE48\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDE60-\uDE7E\uDF1D-\uDF26\uDF51-\uDF54\uDFC5-\uDFCB]|\uD804[\uDC52-\uDC65\uDDE1-\uDDF4]|\uD805[\uDF3A\uDF3B]|\uD806[\uDCEA-\uDCF2]|\uD807[\uDC5A-\uDC6C\uDFC0-\uDFD4]|\uD81A[\uDF5B-\uDF61]|\uD81B[\uDE80-\uDE96]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD83A[\uDCC7-\uDCCF]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D]|\uD83C[\uDD00-\uDD0C]' + }, + { + 'name': 'P', + 'alias': 'Punctuation', + 'bmp': '!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65', + 'astral': '\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDFFF]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]' + }, + { + 'name': 'Pc', + 'alias': 'Connector_Punctuation', + 'bmp': '_\u203F\u2040\u2054\uFE33\uFE34\uFE4D-\uFE4F\uFF3F' + }, + { + 'name': 'Pd', + 'alias': 'Dash_Punctuation', + 'bmp': '\\-\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D', + 'astral': '\uD803\uDEAD' + }, + { + 'name': 'Pe', + 'alias': 'Close_Punctuation', + 'bmp': '\\)\\]\\}\u0F3B\u0F3D\u169C\u2046\u207E\u208E\u2309\u230B\u232A\u2769\u276B\u276D\u276F\u2771\u2773\u2775\u27C6\u27E7\u27E9\u27EB\u27ED\u27EF\u2984\u2986\u2988\u298A\u298C\u298E\u2990\u2992\u2994\u2996\u2998\u29D9\u29DB\u29FD\u2E23\u2E25\u2E27\u2E29\u3009\u300B\u300D\u300F\u3011\u3015\u3017\u3019\u301B\u301E\u301F\uFD3E\uFE18\uFE36\uFE38\uFE3A\uFE3C\uFE3E\uFE40\uFE42\uFE44\uFE48\uFE5A\uFE5C\uFE5E\uFF09\uFF3D\uFF5D\uFF60\uFF63' + }, + { + 'name': 'Pf', + 'alias': 'Final_Punctuation', + 'bmp': '\xBB\u2019\u201D\u203A\u2E03\u2E05\u2E0A\u2E0D\u2E1D\u2E21' + }, + { + 'name': 'Pi', + 'alias': 'Initial_Punctuation', + 'bmp': '\xAB\u2018\u201B\u201C\u201F\u2039\u2E02\u2E04\u2E09\u2E0C\u2E1C\u2E20' + }, + { + 'name': 'Po', + 'alias': 'Other_Punctuation', + 'bmp': '!-#%-\'\\*,\\.\\/:;\\?@\\\xA1\xA7\xB6\xB7\xBF\u037E\u0387\u055A-\u055F\u0589\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u166E\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u1805\u1807-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203B-\u203E\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205E\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00\u2E01\u2E06-\u2E08\u2E0B\u2E0E-\u2E16\u2E18\u2E19\u2E1B\u2E1E\u2E1F\u2E2A-\u2E2E\u2E30-\u2E39\u2E3C-\u2E3F\u2E41\u2E43-\u2E4F\u2E52\u3001-\u3003\u303D\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFE10-\uFE16\uFE19\uFE30\uFE45\uFE46\uFE49-\uFE4C\uFE50-\uFE52\uFE54-\uFE57\uFE5F-\uFE61\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF07\uFF0A\uFF0C\uFF0E\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3C\uFF61\uFF64\uFF65', + 'astral': '\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDFFF]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]' + }, + { + 'name': 'Ps', + 'alias': 'Open_Punctuation', + 'bmp': '\\(\\[\\{\u0F3A\u0F3C\u169B\u201A\u201E\u2045\u207D\u208D\u2308\u230A\u2329\u2768\u276A\u276C\u276E\u2770\u2772\u2774\u27C5\u27E6\u27E8\u27EA\u27EC\u27EE\u2983\u2985\u2987\u2989\u298B\u298D\u298F\u2991\u2993\u2995\u2997\u29D8\u29DA\u29FC\u2E22\u2E24\u2E26\u2E28\u2E42\u3008\u300A\u300C\u300E\u3010\u3014\u3016\u3018\u301A\u301D\uFD3F\uFE17\uFE35\uFE37\uFE39\uFE3B\uFE3D\uFE3F\uFE41\uFE43\uFE47\uFE59\uFE5B\uFE5D\uFF08\uFF3B\uFF5B\uFF5F\uFF62' + }, + { + 'name': 'S', + 'alias': 'Symbol', + 'bmp': '\\$\\+<->\\^`\\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20BF\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC1\uFDFC\uFDFD\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD', + 'astral': '\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEE0-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDD78\uDD7A-\uDDCB\uDDCD-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6\uDF00-\uDF92\uDF94-\uDFCA]' + }, + { + 'name': 'Sc', + 'alias': 'Currency_Symbol', + 'bmp': '\\$\xA2-\xA5\u058F\u060B\u07FE\u07FF\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BF\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6', + 'astral': '\uD807[\uDFDD-\uDFE0]|\uD838\uDEFF|\uD83B\uDCB0' + }, + { + 'name': 'Sk', + 'alias': 'Modifier_Symbol', + 'bmp': '\\^`\xA8\xAF\xB4\xB8\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u309B\u309C\uA700-\uA716\uA720\uA721\uA789\uA78A\uAB5B\uAB6A\uAB6B\uFBB2-\uFBC1\uFF3E\uFF40\uFFE3', + 'astral': '\uD83C[\uDFFB-\uDFFF]' + }, + { + 'name': 'Sm', + 'alias': 'Math_Symbol', + 'bmp': '\\+<->\\|~\xAC\xB1\xD7\xF7\u03F6\u0606-\u0608\u2044\u2052\u207A-\u207C\u208A-\u208C\u2118\u2140-\u2144\u214B\u2190-\u2194\u219A\u219B\u21A0\u21A3\u21A6\u21AE\u21CE\u21CF\u21D2\u21D4\u21F4-\u22FF\u2320\u2321\u237C\u239B-\u23B3\u23DC-\u23E1\u25B7\u25C1\u25F8-\u25FF\u266F\u27C0-\u27C4\u27C7-\u27E5\u27F0-\u27FF\u2900-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2AFF\u2B30-\u2B44\u2B47-\u2B4C\uFB29\uFE62\uFE64-\uFE66\uFF0B\uFF1C-\uFF1E\uFF5C\uFF5E\uFFE2\uFFE9-\uFFEC', + 'astral': '\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD83B[\uDEF0\uDEF1]' + }, + { + 'name': 'So', + 'alias': 'Other_Symbol', + 'bmp': '\xA6\xA9\xAE\xB0\u0482\u058D\u058E\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u09FA\u0B70\u0BF3-\u0BF8\u0BFA\u0C7F\u0D4F\u0D79\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u214A\u214C\u214D\u214F\u218A\u218B\u2195-\u2199\u219C-\u219F\u21A1\u21A2\u21A4\u21A5\u21A7-\u21AD\u21AF-\u21CD\u21D0\u21D1\u21D3\u21D5-\u21F3\u2300-\u2307\u230C-\u231F\u2322-\u2328\u232B-\u237B\u237D-\u239A\u23B4-\u23DB\u23E2-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u25B6\u25B8-\u25C0\u25C2-\u25F7\u2600-\u266E\u2670-\u2767\u2794-\u27BF\u2800-\u28FF\u2B00-\u2B2F\u2B45\u2B46\u2B4D-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA828-\uA82B\uA836\uA837\uA839\uAA77-\uAA79\uFDFD\uFFE4\uFFE8\uFFED\uFFEE\uFFFC\uFFFD', + 'astral': '\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFDC\uDFE1-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838\uDD4F|\uD83B[\uDCAC\uDD2E]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFA]|\uD83D[\uDC00-\uDED7\uDEE0-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDD78\uDD7A-\uDDCB\uDDCD-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6\uDF00-\uDF92\uDF94-\uDFCA]' + }, + { + 'name': 'Z', + 'alias': 'Separator', + 'bmp': ' \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000' + }, + { + 'name': 'Zl', + 'alias': 'Line_Separator', + 'bmp': '\u2028' + }, + { + 'name': 'Zp', + 'alias': 'Paragraph_Separator', + 'bmp': '\u2029' + }, + { + 'name': 'Zs', + 'alias': 'Space_Separator', + 'bmp': ' \xA0\u1680\u2000-\u200A\u202F\u205F\u3000' + } +]; + +},{}],224:[function(require,module,exports){ +module.exports = [ + { + 'name': 'ASCII', + 'bmp': '\0-\x7F' + }, + { + 'name': 'Alphabetic', + 'bmp': 'A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0345\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05B0-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05EF-\u05F2\u0610-\u061A\u0620-\u0657\u0659-\u065F\u066E-\u06D3\u06D5-\u06DC\u06E1-\u06E8\u06ED-\u06EF\u06FA-\u06FC\u06FF\u0710-\u073F\u074D-\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0817\u081A-\u082C\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u08D4-\u08DF\u08E3-\u08E9\u08F0-\u093B\u093D-\u094C\u094E-\u0950\u0955-\u0963\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD-\u09C4\u09C7\u09C8\u09CB\u09CC\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09F0\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3E-\u0A42\u0A47\u0A48\u0A4B\u0A4C\u0A51\u0A59-\u0A5C\u0A5E\u0A70-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD-\u0AC5\u0AC7-\u0AC9\u0ACB\u0ACC\u0AD0\u0AE0-\u0AE3\u0AF9-\u0AFC\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D-\u0B44\u0B47\u0B48\u0B4B\u0B4C\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD0\u0BD7\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4C\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCC\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CF1\u0CF2\u0D00-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4C\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D7A-\u0D7F\u0D81-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E46\u0E4D\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0ECD\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F71-\u0F81\u0F88-\u0F97\u0F99-\u0FBC\u1000-\u1036\u1038\u103B-\u103F\u1050-\u108F\u109A-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1713\u1720-\u1733\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17B3\u17B6-\u17C8\u17D7\u17DC\u1820-\u1878\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u1938\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A1B\u1A20-\u1A5E\u1A61-\u1A74\u1AA7\u1ABF\u1AC0\u1B00-\u1B33\u1B35-\u1B43\u1B45-\u1B4B\u1B80-\u1BA9\u1BAC-\u1BAF\u1BBA-\u1BE5\u1BE7-\u1BF1\u1C00-\u1C36\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1DE7-\u1DF4\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u24B6-\u24E9\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA674-\uA67B\uA67F-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\uA805\uA807-\uA827\uA840-\uA873\uA880-\uA8C3\uA8C5\uA8F2-\uA8F7\uA8FB\uA8FD-\uA8FF\uA90A-\uA92A\uA930-\uA952\uA960-\uA97C\uA980-\uA9B2\uA9B4-\uA9BF\uA9CF\uA9E0-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA60-\uAA76\uAA7A-\uAABE\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF5\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABEA\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', + 'astral': '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD27\uDE80-\uDEA9\uDEAB\uDEAC\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC00-\uDC45\uDC82-\uDCB8\uDCD0-\uDCE8\uDD00-\uDD32\uDD44-\uDD47\uDD50-\uDD72\uDD76\uDD80-\uDDBF\uDDC1-\uDDC4\uDDCE\uDDCF\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE34\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEE8\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D-\uDF44\uDF47\uDF48\uDF4B\uDF4C\uDF50\uDF57\uDF5D-\uDF63]|\uD805[\uDC00-\uDC41\uDC43-\uDC45\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCC1\uDCC4\uDCC5\uDCC7\uDD80-\uDDB5\uDDB8-\uDDBE\uDDD8-\uDDDD\uDE00-\uDE3E\uDE40\uDE44\uDE80-\uDEB5\uDEB8\uDF00-\uDF1A\uDF1D-\uDF2A]|\uD806[\uDC00-\uDC38\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD35\uDD37\uDD38\uDD3B\uDD3C\uDD3F-\uDD42\uDDA0-\uDDA7\uDDAA-\uDDD7\uDDDA-\uDDDF\uDDE1\uDDE3\uDDE4\uDE00-\uDE32\uDE35-\uDE3E\uDE50-\uDE97\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC3E\uDC40\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD41\uDD43\uDD46\uDD47\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD8E\uDD90\uDD91\uDD93-\uDD96\uDD98\uDEE0-\uDEF6\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF4F-\uDF87\uDF8F-\uDF9F\uDFE0\uDFE1\uDFE3\uDFF0\uDFF1]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9E]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDEC0-\uDEEB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD47\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD30-\uDD49\uDD50-\uDD69\uDD70-\uDD89]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]' + }, + { + 'name': 'Any', + 'isBmpLast': true, + 'bmp': '\0-\uFFFF', + 'astral': '[\uD800-\uDBFF][\uDC00-\uDFFF]' + }, + { + 'name': 'Default_Ignorable_Code_Point', + 'bmp': '\xAD\u034F\u061C\u115F\u1160\u17B4\u17B5\u180B-\u180E\u200B-\u200F\u202A-\u202E\u2060-\u206F\u3164\uFE00-\uFE0F\uFEFF\uFFA0\uFFF0-\uFFF8', + 'astral': '\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|[\uDB40-\uDB43][\uDC00-\uDFFF]' + }, + { + 'name': 'Lowercase', + 'bmp': 'a-z\xAA\xB5\xBA\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02B8\u02C0\u02C1\u02E0-\u02E4\u0345\u0371\u0373\u0377\u037A-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0560-\u0588\u10D0-\u10FA\u10FD-\u10FF\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1DBF\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u2071\u207F\u2090-\u209C\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2170-\u217F\u2184\u24D0-\u24E9\u2C30-\u2C5E\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7D\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B-\uA69D\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7AF\uA7B5\uA7B7\uA7B9\uA7BB\uA7BD\uA7BF\uA7C3\uA7C8\uA7CA\uA7F6\uA7F8-\uA7FA\uAB30-\uAB5A\uAB5C-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A', + 'astral': '\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD81B[\uDE60-\uDE7F]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD83A[\uDD22-\uDD43]' + }, + { + 'name': 'Noncharacter_Code_Point', + 'bmp': '\uFDD0-\uFDEF\uFFFE\uFFFF', + 'astral': '[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]' + }, + { + 'name': 'Uppercase', + 'bmp': 'A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1C90-\u1CBA\u1CBD-\u1CBF\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2160-\u216F\u2183\u24B6-\u24CF\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uA7B8\uA7BA\uA7BC\uA7BE\uA7C2\uA7C4-\uA7C7\uA7C9\uA7F5\uFF21-\uFF3A', + 'astral': '\uD801[\uDC00-\uDC27\uDCB0-\uDCD3]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD81B[\uDE40-\uDE5F]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]|\uD83C[\uDD30-\uDD49\uDD50-\uDD69\uDD70-\uDD89]' + }, + { + 'name': 'White_Space', + 'bmp': '\t-\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000' + } +]; + +},{}],225:[function(require,module,exports){ +module.exports = [ + { + 'name': 'Adlam', + 'astral': '\uD83A[\uDD00-\uDD4B\uDD50-\uDD59\uDD5E\uDD5F]' + }, + { + 'name': 'Ahom', + 'astral': '\uD805[\uDF00-\uDF1A\uDF1D-\uDF2B\uDF30-\uDF3F]' + }, + { + 'name': 'Anatolian_Hieroglyphs', + 'astral': '\uD811[\uDC00-\uDE46]' + }, + { + 'name': 'Arabic', + 'bmp': '\u0600-\u0604\u0606-\u060B\u060D-\u061A\u061C\u061E\u0620-\u063F\u0641-\u064A\u0656-\u066F\u0671-\u06DC\u06DE-\u06FF\u0750-\u077F\u08A0-\u08B4\u08B6-\u08C7\u08D3-\u08E1\u08E3-\u08FF\uFB50-\uFBC1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFD\uFE70-\uFE74\uFE76-\uFEFC', + 'astral': '\uD803[\uDE60-\uDE7E]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB\uDEF0\uDEF1]' + }, + { + 'name': 'Armenian', + 'bmp': '\u0531-\u0556\u0559-\u058A\u058D-\u058F\uFB13-\uFB17' + }, + { + 'name': 'Avestan', + 'astral': '\uD802[\uDF00-\uDF35\uDF39-\uDF3F]' + }, + { + 'name': 'Balinese', + 'bmp': '\u1B00-\u1B4B\u1B50-\u1B7C' + }, + { + 'name': 'Bamum', + 'bmp': '\uA6A0-\uA6F7', + 'astral': '\uD81A[\uDC00-\uDE38]' + }, + { + 'name': 'Bassa_Vah', + 'astral': '\uD81A[\uDED0-\uDEED\uDEF0-\uDEF5]' + }, + { + 'name': 'Batak', + 'bmp': '\u1BC0-\u1BF3\u1BFC-\u1BFF' + }, + { + 'name': 'Bengali', + 'bmp': '\u0980-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09FE' + }, + { + 'name': 'Bhaiksuki', + 'astral': '\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC45\uDC50-\uDC6C]' + }, + { + 'name': 'Bopomofo', + 'bmp': '\u02EA\u02EB\u3105-\u312F\u31A0-\u31BF' + }, + { + 'name': 'Brahmi', + 'astral': '\uD804[\uDC00-\uDC4D\uDC52-\uDC6F\uDC7F]' + }, + { + 'name': 'Braille', + 'bmp': '\u2800-\u28FF' + }, + { + 'name': 'Buginese', + 'bmp': '\u1A00-\u1A1B\u1A1E\u1A1F' + }, + { + 'name': 'Buhid', + 'bmp': '\u1740-\u1753' + }, + { + 'name': 'Canadian_Aboriginal', + 'bmp': '\u1400-\u167F\u18B0-\u18F5' + }, + { + 'name': 'Carian', + 'astral': '\uD800[\uDEA0-\uDED0]' + }, + { + 'name': 'Caucasian_Albanian', + 'astral': '\uD801[\uDD30-\uDD63\uDD6F]' + }, + { + 'name': 'Chakma', + 'astral': '\uD804[\uDD00-\uDD34\uDD36-\uDD47]' + }, + { + 'name': 'Cham', + 'bmp': '\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA5C-\uAA5F' + }, + { + 'name': 'Cherokee', + 'bmp': '\u13A0-\u13F5\u13F8-\u13FD\uAB70-\uABBF' + }, + { + 'name': 'Chorasmian', + 'astral': '\uD803[\uDFB0-\uDFCB]' + }, + { + 'name': 'Common', + 'bmp': '\0-@\\[-`\\{-\xA9\xAB-\xB9\xBB-\xBF\xD7\xF7\u02B9-\u02DF\u02E5-\u02E9\u02EC-\u02FF\u0374\u037E\u0385\u0387\u0605\u060C\u061B\u061F\u0640\u06DD\u08E2\u0964\u0965\u0E3F\u0FD5-\u0FD8\u10FB\u16EB-\u16ED\u1735\u1736\u1802\u1803\u1805\u1CD3\u1CE1\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5-\u1CF7\u1CFA\u2000-\u200B\u200E-\u2064\u2066-\u2070\u2074-\u207E\u2080-\u208E\u20A0-\u20BF\u2100-\u2125\u2127-\u2129\u212C-\u2131\u2133-\u214D\u214F-\u215F\u2189-\u218B\u2190-\u2426\u2440-\u244A\u2460-\u27FF\u2900-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2E00-\u2E52\u2FF0-\u2FFB\u3000-\u3004\u3006\u3008-\u3020\u3030-\u3037\u303C-\u303F\u309B\u309C\u30A0\u30FB\u30FC\u3190-\u319F\u31C0-\u31E3\u3220-\u325F\u327F-\u32CF\u32FF\u3358-\u33FF\u4DC0-\u4DFF\uA700-\uA721\uA788-\uA78A\uA830-\uA839\uA92E\uA9CF\uAB5B\uAB6A\uAB6B\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFEFF\uFF01-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFF70\uFF9E\uFF9F\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFF9-\uFFFD', + 'astral': '\uD800[\uDD00-\uDD02\uDD07-\uDD33\uDD37-\uDD3F\uDD90-\uDD9C\uDDD0-\uDDFC\uDEE1-\uDEFB]|\uD81B[\uDFE2\uDFE3]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD66\uDD6A-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDEE0-\uDEF3\uDF00-\uDF56\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDFCB\uDFCE-\uDFFF]|\uD83B[\uDC71-\uDCB4\uDD01-\uDD3D]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD00-\uDDAD\uDDE6-\uDDFF\uDE01\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEE0-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDD78\uDD7A-\uDDCB\uDDCD-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6\uDF00-\uDF92\uDF94-\uDFCA\uDFF0-\uDFF9]|\uDB40[\uDC01\uDC20-\uDC7F]' + }, + { + 'name': 'Coptic', + 'bmp': '\u03E2-\u03EF\u2C80-\u2CF3\u2CF9-\u2CFF' + }, + { + 'name': 'Cuneiform', + 'astral': '\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC70-\uDC74\uDC80-\uDD43]' + }, + { + 'name': 'Cypriot', + 'astral': '\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F]' + }, + { + 'name': 'Cyrillic', + 'bmp': '\u0400-\u0484\u0487-\u052F\u1C80-\u1C88\u1D2B\u1D78\u2DE0-\u2DFF\uA640-\uA69F\uFE2E\uFE2F' + }, + { + 'name': 'Deseret', + 'astral': '\uD801[\uDC00-\uDC4F]' + }, + { + 'name': 'Devanagari', + 'bmp': '\u0900-\u0950\u0955-\u0963\u0966-\u097F\uA8E0-\uA8FF' + }, + { + 'name': 'Dives_Akuru', + 'astral': '\uD806[\uDD00-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD35\uDD37\uDD38\uDD3B-\uDD46\uDD50-\uDD59]' + }, + { + 'name': 'Dogra', + 'astral': '\uD806[\uDC00-\uDC3B]' + }, + { + 'name': 'Duployan', + 'astral': '\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9C-\uDC9F]' + }, + { + 'name': 'Egyptian_Hieroglyphs', + 'astral': '\uD80C[\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E\uDC30-\uDC38]' + }, + { + 'name': 'Elbasan', + 'astral': '\uD801[\uDD00-\uDD27]' + }, + { + 'name': 'Elymaic', + 'astral': '\uD803[\uDFE0-\uDFF6]' + }, + { + 'name': 'Ethiopic', + 'bmp': '\u1200-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u137C\u1380-\u1399\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E' + }, + { + 'name': 'Georgian', + 'bmp': '\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u10FF\u1C90-\u1CBA\u1CBD-\u1CBF\u2D00-\u2D25\u2D27\u2D2D' + }, + { + 'name': 'Glagolitic', + 'bmp': '\u2C00-\u2C2E\u2C30-\u2C5E', + 'astral': '\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]' + }, + { + 'name': 'Gothic', + 'astral': '\uD800[\uDF30-\uDF4A]' + }, + { + 'name': 'Grantha', + 'astral': '\uD804[\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]' + }, + { + 'name': 'Greek', + 'bmp': '\u0370-\u0373\u0375-\u0377\u037A-\u037D\u037F\u0384\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03E1\u03F0-\u03FF\u1D26-\u1D2A\u1D5D-\u1D61\u1D66-\u1D6A\u1DBF\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FC4\u1FC6-\u1FD3\u1FD6-\u1FDB\u1FDD-\u1FEF\u1FF2-\u1FF4\u1FF6-\u1FFE\u2126\uAB65', + 'astral': '\uD800[\uDD40-\uDD8E\uDDA0]|\uD834[\uDE00-\uDE45]' + }, + { + 'name': 'Gujarati', + 'bmp': '\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AF1\u0AF9-\u0AFF' + }, + { + 'name': 'Gunjala_Gondi', + 'astral': '\uD807[\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD8E\uDD90\uDD91\uDD93-\uDD98\uDDA0-\uDDA9]' + }, + { + 'name': 'Gurmukhi', + 'bmp': '\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A76' + }, + { + 'name': 'Han', + 'bmp': '\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DBF\u4E00-\u9FFC\uF900-\uFA6D\uFA70-\uFAD9', + 'astral': '\uD81B[\uDFF0\uDFF1]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]' + }, + { + 'name': 'Hangul', + 'bmp': '\u1100-\u11FF\u302E\u302F\u3131-\u318E\u3200-\u321E\u3260-\u327E\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC' + }, + { + 'name': 'Hanifi_Rohingya', + 'astral': '\uD803[\uDD00-\uDD27\uDD30-\uDD39]' + }, + { + 'name': 'Hanunoo', + 'bmp': '\u1720-\u1734' + }, + { + 'name': 'Hatran', + 'astral': '\uD802[\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDCFF]' + }, + { + 'name': 'Hebrew', + 'bmp': '\u0591-\u05C7\u05D0-\u05EA\u05EF-\u05F4\uFB1D-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFB4F' + }, + { + 'name': 'Hiragana', + 'bmp': '\u3041-\u3096\u309D-\u309F', + 'astral': '\uD82C[\uDC01-\uDD1E\uDD50-\uDD52]|\uD83C\uDE00' + }, + { + 'name': 'Imperial_Aramaic', + 'astral': '\uD802[\uDC40-\uDC55\uDC57-\uDC5F]' + }, + { + 'name': 'Inherited', + 'bmp': '\u0300-\u036F\u0485\u0486\u064B-\u0655\u0670\u0951-\u0954\u1AB0-\u1AC0\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u200C\u200D\u20D0-\u20F0\u302A-\u302D\u3099\u309A\uFE00-\uFE0F\uFE20-\uFE2D', + 'astral': '\uD800[\uDDFD\uDEE0]|\uD804\uDF3B|\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD]|\uDB40[\uDD00-\uDDEF]' + }, + { + 'name': 'Inscriptional_Pahlavi', + 'astral': '\uD802[\uDF60-\uDF72\uDF78-\uDF7F]' + }, + { + 'name': 'Inscriptional_Parthian', + 'astral': '\uD802[\uDF40-\uDF55\uDF58-\uDF5F]' + }, + { + 'name': 'Javanese', + 'bmp': '\uA980-\uA9CD\uA9D0-\uA9D9\uA9DE\uA9DF' + }, + { + 'name': 'Kaithi', + 'astral': '\uD804[\uDC80-\uDCC1\uDCCD]' + }, + { + 'name': 'Kannada', + 'bmp': '\u0C80-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2' + }, + { + 'name': 'Katakana', + 'bmp': '\u30A1-\u30FA\u30FD-\u30FF\u31F0-\u31FF\u32D0-\u32FE\u3300-\u3357\uFF66-\uFF6F\uFF71-\uFF9D', + 'astral': '\uD82C[\uDC00\uDD64-\uDD67]' + }, + { + 'name': 'Kayah_Li', + 'bmp': '\uA900-\uA92D\uA92F' + }, + { + 'name': 'Kharoshthi', + 'astral': '\uD802[\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE38-\uDE3A\uDE3F-\uDE48\uDE50-\uDE58]' + }, + { + 'name': 'Khitan_Small_Script', + 'astral': '\uD81B\uDFE4|\uD822[\uDF00-\uDFFF]|\uD823[\uDC00-\uDCD5]' + }, + { + 'name': 'Khmer', + 'bmp': '\u1780-\u17DD\u17E0-\u17E9\u17F0-\u17F9\u19E0-\u19FF' + }, + { + 'name': 'Khojki', + 'astral': '\uD804[\uDE00-\uDE11\uDE13-\uDE3E]' + }, + { + 'name': 'Khudawadi', + 'astral': '\uD804[\uDEB0-\uDEEA\uDEF0-\uDEF9]' + }, + { + 'name': 'Lao', + 'bmp': '\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF' + }, + { + 'name': 'Latin', + 'bmp': 'A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uAB66-\uAB69\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A' + }, + { + 'name': 'Lepcha', + 'bmp': '\u1C00-\u1C37\u1C3B-\u1C49\u1C4D-\u1C4F' + }, + { + 'name': 'Limbu', + 'bmp': '\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1940\u1944-\u194F' + }, + { + 'name': 'Linear_A', + 'astral': '\uD801[\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]' + }, + { + 'name': 'Linear_B', + 'astral': '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA]' + }, + { + 'name': 'Lisu', + 'bmp': '\uA4D0-\uA4FF', + 'astral': '\uD807\uDFB0' + }, + { + 'name': 'Lycian', + 'astral': '\uD800[\uDE80-\uDE9C]' + }, + { + 'name': 'Lydian', + 'astral': '\uD802[\uDD20-\uDD39\uDD3F]' + }, + { + 'name': 'Mahajani', + 'astral': '\uD804[\uDD50-\uDD76]' + }, + { + 'name': 'Makasar', + 'astral': '\uD807[\uDEE0-\uDEF8]' + }, + { + 'name': 'Malayalam', + 'bmp': '\u0D00-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4F\u0D54-\u0D63\u0D66-\u0D7F' + }, + { + 'name': 'Mandaic', + 'bmp': '\u0840-\u085B\u085E' + }, + { + 'name': 'Manichaean', + 'astral': '\uD802[\uDEC0-\uDEE6\uDEEB-\uDEF6]' + }, + { + 'name': 'Marchen', + 'astral': '\uD807[\uDC70-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6]' + }, + { + 'name': 'Masaram_Gondi', + 'astral': '\uD807[\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]' + }, + { + 'name': 'Medefaidrin', + 'astral': '\uD81B[\uDE40-\uDE9A]' + }, + { + 'name': 'Meetei_Mayek', + 'bmp': '\uAAE0-\uAAF6\uABC0-\uABED\uABF0-\uABF9' + }, + { + 'name': 'Mende_Kikakui', + 'astral': '\uD83A[\uDC00-\uDCC4\uDCC7-\uDCD6]' + }, + { + 'name': 'Meroitic_Cursive', + 'astral': '\uD802[\uDDA0-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDDFF]' + }, + { + 'name': 'Meroitic_Hieroglyphs', + 'astral': '\uD802[\uDD80-\uDD9F]' + }, + { + 'name': 'Miao', + 'astral': '\uD81B[\uDF00-\uDF4A\uDF4F-\uDF87\uDF8F-\uDF9F]' + }, + { + 'name': 'Modi', + 'astral': '\uD805[\uDE00-\uDE44\uDE50-\uDE59]' + }, + { + 'name': 'Mongolian', + 'bmp': '\u1800\u1801\u1804\u1806-\u180E\u1810-\u1819\u1820-\u1878\u1880-\u18AA', + 'astral': '\uD805[\uDE60-\uDE6C]' + }, + { + 'name': 'Mro', + 'astral': '\uD81A[\uDE40-\uDE5E\uDE60-\uDE69\uDE6E\uDE6F]' + }, + { + 'name': 'Multani', + 'astral': '\uD804[\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA9]' + }, + { + 'name': 'Myanmar', + 'bmp': '\u1000-\u109F\uA9E0-\uA9FE\uAA60-\uAA7F' + }, + { + 'name': 'Nabataean', + 'astral': '\uD802[\uDC80-\uDC9E\uDCA7-\uDCAF]' + }, + { + 'name': 'Nandinagari', + 'astral': '\uD806[\uDDA0-\uDDA7\uDDAA-\uDDD7\uDDDA-\uDDE4]' + }, + { + 'name': 'New_Tai_Lue', + 'bmp': '\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u19DE\u19DF' + }, + { + 'name': 'Newa', + 'astral': '\uD805[\uDC00-\uDC5B\uDC5D-\uDC61]' + }, + { + 'name': 'Nko', + 'bmp': '\u07C0-\u07FA\u07FD-\u07FF' + }, + { + 'name': 'Nushu', + 'astral': '\uD81B\uDFE1|\uD82C[\uDD70-\uDEFB]' + }, + { + 'name': 'Nyiakeng_Puachue_Hmong', + 'astral': '\uD838[\uDD00-\uDD2C\uDD30-\uDD3D\uDD40-\uDD49\uDD4E\uDD4F]' + }, + { + 'name': 'Ogham', + 'bmp': '\u1680-\u169C' + }, + { + 'name': 'Ol_Chiki', + 'bmp': '\u1C50-\u1C7F' + }, + { + 'name': 'Old_Hungarian', + 'astral': '\uD803[\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDCFF]' + }, + { + 'name': 'Old_Italic', + 'astral': '\uD800[\uDF00-\uDF23\uDF2D-\uDF2F]' + }, + { + 'name': 'Old_North_Arabian', + 'astral': '\uD802[\uDE80-\uDE9F]' + }, + { + 'name': 'Old_Permic', + 'astral': '\uD800[\uDF50-\uDF7A]' + }, + { + 'name': 'Old_Persian', + 'astral': '\uD800[\uDFA0-\uDFC3\uDFC8-\uDFD5]' + }, + { + 'name': 'Old_Sogdian', + 'astral': '\uD803[\uDF00-\uDF27]' + }, + { + 'name': 'Old_South_Arabian', + 'astral': '\uD802[\uDE60-\uDE7F]' + }, + { + 'name': 'Old_Turkic', + 'astral': '\uD803[\uDC00-\uDC48]' + }, + { + 'name': 'Oriya', + 'bmp': '\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B77' + }, + { + 'name': 'Osage', + 'astral': '\uD801[\uDCB0-\uDCD3\uDCD8-\uDCFB]' + }, + { + 'name': 'Osmanya', + 'astral': '\uD801[\uDC80-\uDC9D\uDCA0-\uDCA9]' + }, + { + 'name': 'Pahawh_Hmong', + 'astral': '\uD81A[\uDF00-\uDF45\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]' + }, + { + 'name': 'Palmyrene', + 'astral': '\uD802[\uDC60-\uDC7F]' + }, + { + 'name': 'Pau_Cin_Hau', + 'astral': '\uD806[\uDEC0-\uDEF8]' + }, + { + 'name': 'Phags_Pa', + 'bmp': '\uA840-\uA877' + }, + { + 'name': 'Phoenician', + 'astral': '\uD802[\uDD00-\uDD1B\uDD1F]' + }, + { + 'name': 'Psalter_Pahlavi', + 'astral': '\uD802[\uDF80-\uDF91\uDF99-\uDF9C\uDFA9-\uDFAF]' + }, + { + 'name': 'Rejang', + 'bmp': '\uA930-\uA953\uA95F' + }, + { + 'name': 'Runic', + 'bmp': '\u16A0-\u16EA\u16EE-\u16F8' + }, + { + 'name': 'Samaritan', + 'bmp': '\u0800-\u082D\u0830-\u083E' + }, + { + 'name': 'Saurashtra', + 'bmp': '\uA880-\uA8C5\uA8CE-\uA8D9' + }, + { + 'name': 'Sharada', + 'astral': '\uD804[\uDD80-\uDDDF]' + }, + { + 'name': 'Shavian', + 'astral': '\uD801[\uDC50-\uDC7F]' + }, + { + 'name': 'Siddham', + 'astral': '\uD805[\uDD80-\uDDB5\uDDB8-\uDDDD]' + }, + { + 'name': 'SignWriting', + 'astral': '\uD836[\uDC00-\uDE8B\uDE9B-\uDE9F\uDEA1-\uDEAF]' + }, + { + 'name': 'Sinhala', + 'bmp': '\u0D81-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2-\u0DF4', + 'astral': '\uD804[\uDDE1-\uDDF4]' + }, + { + 'name': 'Sogdian', + 'astral': '\uD803[\uDF30-\uDF59]' + }, + { + 'name': 'Sora_Sompeng', + 'astral': '\uD804[\uDCD0-\uDCE8\uDCF0-\uDCF9]' + }, + { + 'name': 'Soyombo', + 'astral': '\uD806[\uDE50-\uDEA2]' + }, + { + 'name': 'Sundanese', + 'bmp': '\u1B80-\u1BBF\u1CC0-\u1CC7' + }, + { + 'name': 'Syloti_Nagri', + 'bmp': '\uA800-\uA82C' + }, + { + 'name': 'Syriac', + 'bmp': '\u0700-\u070D\u070F-\u074A\u074D-\u074F\u0860-\u086A' + }, + { + 'name': 'Tagalog', + 'bmp': '\u1700-\u170C\u170E-\u1714' + }, + { + 'name': 'Tagbanwa', + 'bmp': '\u1760-\u176C\u176E-\u1770\u1772\u1773' + }, + { + 'name': 'Tai_Le', + 'bmp': '\u1950-\u196D\u1970-\u1974' + }, + { + 'name': 'Tai_Tham', + 'bmp': '\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA0-\u1AAD' + }, + { + 'name': 'Tai_Viet', + 'bmp': '\uAA80-\uAAC2\uAADB-\uAADF' + }, + { + 'name': 'Takri', + 'astral': '\uD805[\uDE80-\uDEB8\uDEC0-\uDEC9]' + }, + { + 'name': 'Tamil', + 'bmp': '\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BFA', + 'astral': '\uD807[\uDFC0-\uDFF1\uDFFF]' + }, + { + 'name': 'Tangut', + 'astral': '\uD81B\uDFE0|[\uD81C-\uD820][\uDC00-\uDFFF]|\uD821[\uDC00-\uDFF7]|\uD822[\uDC00-\uDEFF]|\uD823[\uDD00-\uDD08]' + }, + { + 'name': 'Telugu', + 'bmp': '\u0C00-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C77-\u0C7F' + }, + { + 'name': 'Thaana', + 'bmp': '\u0780-\u07B1' + }, + { + 'name': 'Thai', + 'bmp': '\u0E01-\u0E3A\u0E40-\u0E5B' + }, + { + 'name': 'Tibetan', + 'bmp': '\u0F00-\u0F47\u0F49-\u0F6C\u0F71-\u0F97\u0F99-\u0FBC\u0FBE-\u0FCC\u0FCE-\u0FD4\u0FD9\u0FDA' + }, + { + 'name': 'Tifinagh', + 'bmp': '\u2D30-\u2D67\u2D6F\u2D70\u2D7F' + }, + { + 'name': 'Tirhuta', + 'astral': '\uD805[\uDC80-\uDCC7\uDCD0-\uDCD9]' + }, + { + 'name': 'Ugaritic', + 'astral': '\uD800[\uDF80-\uDF9D\uDF9F]' + }, + { + 'name': 'Vai', + 'bmp': '\uA500-\uA62B' + }, + { + 'name': 'Wancho', + 'astral': '\uD838[\uDEC0-\uDEF9\uDEFF]' + }, + { + 'name': 'Warang_Citi', + 'astral': '\uD806[\uDCA0-\uDCF2\uDCFF]' + }, + { + 'name': 'Yezidi', + 'astral': '\uD803[\uDE80-\uDEA9\uDEAB-\uDEAD\uDEB0\uDEB1]' + }, + { + 'name': 'Yi', + 'bmp': '\uA000-\uA48C\uA490-\uA4C6' + }, + { + 'name': 'Zanabazar_Square', + 'astral': '\uD806[\uDE00-\uDE47]' + } +]; + +},{}]},{},[8])(8) +}); diff --git a/styles/simple.css b/styles/simple.css new file mode 100644 index 0000000..414963a --- /dev/null +++ b/styles/simple.css @@ -0,0 +1,1452 @@ + /* ==================== (A) Fonts ==================== */ + /* ==================== (A) Fonts ==================== */ + @font-face { + font-family: "Charlemagne"; + src: url('../assets/fonts/CharlemagneStd-Bold.otf') format("otf"); + } + + :root { + /* =================== 1. ACTOR SHEET FONT STYLES =========== */ + --window-header-font-family: Charlemagne; + --window-header-title-font-size: 1.1rem; + --window-header-title-font-weight: normal; + --window-header-title-color: #f5f5f5; + + --major-button-font-family: Charlemagne; + --major-button-font-size: 1.05rem; + --major-button-font-weight: normal; + --major-button-color: #dadada; + + --tab-header-font-family: Charlemagne; + --tab-header-font-size: 1.0rem; + --tab-header-font-weight: 700; + --tab-header-color: #403f3e; + --tab-header-color-active: #4a0404; + + --actor-input-font-size: 0.8rem; + --actor-input-font-weight: 500; + --actor-input-color: black; + + --actor-label-font-size: 0.8rem; + --actor-label-font-weight: 700; + --actor-label-color: #464331c4; + + /* =================== 2. DEBUGGING HIGHLIGHTERS ============ */ + --debug-background-color-red: #ff000054; + --debug-background-color-blue: #1d00ff54; + --debug-background-color-green: #54ff0054; + + --debug-box-shadow-red: inset 0 0 2px red; + --debug-box-shadow-blue: inset 0 0 2px blue; + --debug-box-shadow-green: inset 0 0 2px green; + } + +/*@import url("https://fonts.googleapis.com/css2?family=Martel:wght@400;800&family=Roboto:wght@300;400;500&display=swap");*/ +/* Global styles & Font */ +.window-app { + font-family: Charlemagne; + text-align: justify; + font-size: 12px; + letter-spacing: 1px; + background-image: url("../assets/ui/pc_sheet_bg.webp"); + background-repeat: repeat; +} +/* Fonts */ +.window-app .window-header, #actors .directory-list, #navigation #scene-list .scene.nav-item { + font-family: "Charlemagne"; + font-size: 0.8rem; +} /* For title, sidebar character and scene */ +.sheet header.sheet-header h1 input { + font-family: "Charlemagne"; + font-size: 0.8rem; + color: lightgray; +} +.sheet nav.sheet-tabs { + font-family: "Charlemagne"; + font-size: 0.8rem; + color: #151c1f; +} /* For nav and title */ +.window-app input, .fvtt-hawkmoon-cyd .item-form, .sheet header.sheet-header .flex-group-center.flex-compteurs, .sheet header.sheet-header .flex-group-center.flex-fatigue, select, button, .item-checkbox, #sidebar, #players, #navigation #nav-toggle { + font-size: 0.8rem; +} +.fvtt-hawkmoon-cyd .sheet-header select option { + background-color: rgb(68, 25, 25); +} +.fvtt-hawkmoon-cyd .sheet-header input, .fvtt-hawkmoon-cyd .sheet-header select { + color: lightgray; +} +.window-header{ + background: rgba(0,0,0,0.75); +} + +.window-app.sheet .window-content { + margin: 0; + padding: 0; + background-image: url("../assets/ui/pc_sheet_bg.webp"); + background-repeat: repeat; +} +.strong-text{ + font-weight: bold; +} + +.tabs .item.active, .blessures-list li ul li:first-child:hover, a:hover { + text-shadow: 1px 0px 0px #ff6600; +} + +.rollable:hover, .rollable:focus { + color: #000; + text-shadow: 0 0 10px red; + cursor: pointer; +} +input:disabled { + color:#1c2058; +} +select:disabled { + color:#1c2058; +} +table {border: 1px solid #7a7971;} + +.grid, .grid-2col { + display: grid; + grid-column: span 2 / span 2; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px; + margin: 10px 0; + padding: 0; +} + +.grid-3col { + grid-column: span 3 / span 3; + grid-template-columns: repeat(3, minmax(0, 1fr)); +} + +.grid-4col { + grid-column: span 4 / span 4; + grid-template-columns: repeat(4, minmax(0, 1fr)); +} + +.grid-5col { + grid-column: span 5 / span 5; + grid-template-columns: repeat(5, minmax(0, 1fr)); +} + +.grid-6col { + grid-column: span 5 / span 5; + grid-template-columns: repeat(5, minmax(0, 1fr)); +} + +.grid-7col { + grid-column: span 7 / span 7; + grid-template-columns: repeat(7, minmax(0, 1fr)); +} + +.grid-8col { + grid-column: span 8 / span 8; + grid-template-columns: repeat(8, minmax(0, 1fr)); +} + +.grid-9col { + grid-column: span 9 / span 9; + grid-template-columns: repeat(9, minmax(0, 1fr)); +} + +.grid-10col { + grid-column: span 10 / span 10; + grid-template-columns: repeat(10, minmax(0, 1fr)); +} + +.grid-11col { + grid-column: span 11 / span 11; + grid-template-columns: repeat(11, minmax(0, 1fr)); +} + +.grid-12col { + grid-column: span 12 / span 12; + grid-template-columns: repeat(12, minmax(0, 1fr)); +} + +.flex-group-center, +.flex-group-left, +.flex-group-right { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + text-align: center; + padding: 5px; +} + +.flex-group-left { + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + text-align: left; +} + +.flex-group-right { + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + text-align: right; +} + +.flex-center { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + text-align: center; +} + +.table-create-actor { + font-size: 0.8rem; +} + +.flex-between { + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; +} + +.flex-shrink { + flex: 'flex-shrink' ; +} + +/* Styles limited to foundryvtt-vadentis sheets */ + +.fvtt-hawkmoon-cyd .sheet-header { + -webkit-box-flex: 0; + -ms-flex: 0 0 210px; + flex: 0 0 210px; + overflow: hidden; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-bottom: 10px; + background-image: url("../assets/ui/hawkmoon_background_01.png"); +} + +.background-sheet-header { + background-image: url("../assets/ui/hawkmoon_background_01.png"); + background-blend-mode: soft-light; + color: lightgray; +} + +.fvtt-hawkmoon-cyd .sheet-header .profile-img { + -webkit-box-flex: 0; + -ms-flex: 0 0 128px; + flex: 0 0 128px; + height: 128px; + width: 128px; + margin-right: 10px; + object-fit: cover; + object-position: 50% 0; +} + +.button-img { + vertical-align: baseline; + width: 8%; + height: 8%; + max-height: 48px; + border-width: 0; + border: 1px solid rgba(0, 0, 0, 0); +} +.button-img:hover { + color: rgba(255, 255, 128, 0.7); + border: 1px solid rgba(255, 128, 0, 0.8); + cursor: pointer; +} + +.button-effect-img { + vertical-align: baseline; + width: 16px; + max-height: 16px; + height: 16; + border-width: 0; +} + +.small-button-container { + height: 16px; + width: 16px; + border: 0; + vertical-align: bottom; +} + +.fvtt-hawkmoon-cyd .sheet-header .header-fields { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; +} + +.fvtt-hawkmoon-cyd .sheet-header h1.charname { + height: 50px; + padding: 0px; + margin: 5px 0; + border-bottom: 0; + font-weight: bold; + font-size: 2rem; + font-family: "Charlemagne"; + color: lightgray; +} + +.fvtt-hawkmoon-cyd .sheet-header h1.charname input { + width: 100%; + height: 100%; + margin: 0; + font-weight: bold; + font-family: "Charlemagne"; + font-size: 2rem; + color: lightgray; +} + +.fvtt-hawkmoon-cyd .sheet-tabs { + -webkit-box-flex: 0; + -ms-flex: 0; + flex: 0; +} + +.fvtt-hawkmoon-cyd .sheet-body, +.fvtt-hawkmoon-cyd .sheet-body .tab, +.fvtt-hawkmoon-cyd .sheet-body .tab .editor { + height: 100%; + font-size: 0.8rem; + color:rgba(0,0,0,0.9) +} + +.fvtt-hawkmoon-cyd .sheet-body input, .fvtt-hawkmoon-cyd .sheet-body select { + color:rgba(0,0,0,0.9) +} + +.editor { + border: 2; + height: 300px; + padding: 0 3px; +} + +.medium-editor { + border: 2; + height: 240px; + padding: 0 3px; +} + +.small-editor { + border: 2; + height: 120px; + padding: 0 3px; +} + +.fvtt-hawkmoon-cyd .tox .tox-editor-container { + background: #fff; +} + +.fvtt-hawkmoon-cyd .tox .tox-edit-area { + padding: 0 8px; +} + +.fvtt-hawkmoon-cyd .resource-label { + font-weight: bold; + text-transform: uppercase; +} + +.fvtt-hawkmoon-cyd .tabs { + height: 40px; + border-top: 1px solid #AAA; + border-bottom: 1px solid #AAA; + color: #000000; +} + +.fvtt-hawkmoon-cyd .tabs .item { + /*line-height: 40px;*/ + font-weight: bold; +} + +.fvtt-hawkmoon-cyd .tabs .item.active { + text-decoration: underline; + text-shadow: none; +} + +.fvtt-hawkmoon-cyd .items-list { + list-style: none; + margin: 1px 0; + padding: 0; + overflow-y: auto; +} + +.fvtt-hawkmoon-cyd .items-list .item-header { + font-weight: bold; +} + +.fvtt-hawkmoon-cyd .items-list .item { + height: 30px; + line-height: 24px; + padding: 1px 0; + border-bottom: 1px solid #BBB; +} + +.fvtt-hawkmoon-cyd .items-list .item .item-image { + -webkit-box-flex: 0; + -ms-flex: 0 0 24px; + flex: 0 0 24px; + margin-right: 5px; +} + +.fvtt-hawkmoon-cyd .items-list .item img { + display: block; +} + +.fvtt-hawkmoon-cyd .items-list .item-name { + margin: 0; +} + +.fvtt-hawkmoon-cyd .items-list .item-controls { + -webkit-box-flex: 0; + -ms-flex: 0 0 86px; + flex: 0 0 86px; + text-align: right; +} + + +/* ======================================== */ +/* Sheet */ +.window-app.sheet .window-content .sheet-header{ + /*background: #011d33 url("../images/ui/fond1.webp") repeat left top;*/ + background: url("../assets/ui/pc_sheet_bg.webp"); + background-repeat: repeat; +} + +.window-app.sheet .window-content .sheet-header input[type="text"], .window-app.sheet .window-content .sheet-header input[type="number"], .window-app.sheet .window-content .sheet-header input[type="password"], .window-app.sheet .window-content .sheet-header input[type="date"], .window-app.sheet .window-content .sheet-header input[type="time"] { + /*color: rgba(36, 37, 37, 0.75);*/ + /*background: rgba(255, 255, 255, 0.05);*/ + /*border: 2px saddlebrown;*/ + /*color: lightgray;*/ + border-width: 1px; + margin-bottom: 0.25rem; +} + +.window-app .window-content, .window-app.sheet .window-content .sheet-body{ + font-size: 0.8rem; + background: url("../assets/ui/pc_sheet_bg.webp"); + background-repeat: repeat-y; + color: black; +} + +/*section.sheet-body{ + padding: 0.25rem 0.5rem;}*/ + +.sheet header.sheet-header .profile-img { + object-fit: cover; + object-position: 50% 0; + margin: 0.5rem 0 0.5rem 0.5rem; + padding: 0; + border:0px; +} + +.sheet nav.sheet-tabs { + font-size: 0.70rem; + font-weight: bold; + height: 2.5rem; + flex: 0 0 3rem; + margin: 0; + padding: 0 0 0 0.25rem; + text-align: center; + text-transform: uppercase; + line-height: 1.5rem; + border-top: 0 none; + border-bottom: 0 none; + /*background-color:#2e5561;*/ + color: #151c1f; + /*background-image: url("../assets/ui/hawkmoon_background_02.png");*/ +} + +/* background: rgb(245,245,240) url("../images/ui/fond4.webp") repeat left top;*/ +nav.sheet-tabs .item { + position: relative; + padding: 0 0.25rem; +} + +nav.sheet-tabs .item:after { + content: ""; + position: absolute; + top: 0; + right: 0; + height: 2rem; + width: 1px; + /*border-right: 1px dashed rgba(52, 52, 52, 0.25);*/ +} + +.sheet .tab[data-tab] { + padding: 0; +} + +section.sheet-body:after { + content: ""; + display: block; + clear: both; +} + +.sheet header.sheet-header .flex-compteurs {text-align: right;} +.sheet header.sheet-header .resource-content {width: 2rem;} + +.select-diff { + display: inline-block; + text-align: left; + width: 50px; +} + +.window-app.sheet .window-content .tooltip:hover .tooltiptext { + top: 2rem; + left: 2rem; + margin: 0; + padding: 0.25rem; +} + +.window-app.sheet .window-content .carac-value, .window-app.sheet .window-content .competence-xp { + margin: 0.05rem; + flex-basis: 3rem; + text-align: center; +} + +/* ======================================== */ +/* Global UI elements */ + +/* ======================================== */ + +h1, h2, h3, h4 { + font-weight: bold; +} + +ul, ol { + margin: 0; + padding: 0; +} +ul, li { + list-style-type: none; +} + +.sheet li { + margin: 0.010rem; + padding: 0.25rem; +} +.header-fields li { + margin: 0; + padding: 0; +} + +.alterne-list > .list-item:hover { + background: rgba(100, 100, 50, 0.25); +} +.alterne-list > .list-item:nth-child(even) { + background: rgba(80, 60, 0, 0.10); +} +.alterne-list > .list-item:nth-child(odd) { + background: rgb(160, 130, 100, 0.05); +} + +.specialisation-label { + font-size: 0.8rem; +} + +.carac-label, +.attr-label { + font-weight: bold; +} + +.list-item { + margin: 0.125rem; + box-shadow: inset 0px 0px 1px #00000096; + border-radius: 0.25rem; + padding: 0.125rem; + flex: 1 1 5rem; +} +.item-display-show { + display: block; +} +.item-display-hide { + display: none; +} +.conteneur-type { + background: rgb(200, 10, 100, 0.25); +} + +.item-quantite { + margin-left: 0.5rem; +} + +.list-item-margin1 { + margin-left: 1rem; +} +.list-item-margin2 { + margin-left: 2rem; +} +.list-item-margin3 { + margin-left: 3rem; +} +.list-item-margin4 { + margin-left: 4rem; +} + +.sheet-competence-img { + width: 24px; + height: 24px; + flex-grow: 0; + margin-right: 0.25rem; +} +.competence-column { + flex-direction: column; + align-content: flex-start; + justify-content: flex-start; + flex-grow: 0; + flex-basis: 1; +} +.competence-header { + align-content: flex-start; + justify-content: flex-start; + font-weight: bold; + flex-grow: 0; +} +.secondaire-label, +.arme-label, +.generic-label, +.competence-label, +.devotion-label, +.sort-label, +.technique-label, +.stat-label, +.arme-label, +.armure-label, +.equipement-label, +.description-label { + flex-grow: 2; + margin-left: 4px; +} +.roll-dialog-label { + margin: 4px 0; + padding-top: 7px; +} + +.short-label { + flex-grow: 1; +} +.keyword-label { + font-size: 0.85rem; +} + +.item-sheet-label { + flex-grow: 1; +} + +.item-text-long-line { + flex-grow: 3; +} + +.score-label { + flex-grow: 2; + align-content: center; +} + +.attribut-value, +.carac-value { + flex-grow: 0; + flex-basis: 64px; + margin-right: 4px; + margin-left: 4px; +} +.sante-value, +.competence-value { + flex-grow: 0; + flex-basis: 2rem; + margin-right: 0.25rem; + margin-left: 0.25rem; +} +.description-value { + flex-grow: 0; + flex-basis: 4rem; + margin-right: 0.25rem; + margin-left: 0.25rem; +} +.competence-xp { + flex-grow: 0; + flex-basis: 2rem; + margin-right: 0.25rem; + margin-left: 0.25rem; +} +.blessures-title { + font-weight: bold; +} +.alchimie-title { + font-weight: bold; +} +.blessure-data { + flex-direction: row; + align-content: flex-start; + justify-content: flex-start; +} +.blessures-soins { + flex-grow: 0; + flex-basis: 32px; + margin-right: 4px; + margin-left: 4px; +} +.blessures-loc { + flex-grow: 0; + flex-basis: 96px; + margin-right: 4px; + margin-left: 4px; +} +.pointsreve-value { + flex-grow: 0; + flex-basis: 64px; + margin-right: 4px; + margin-left: 4px; +} + +.input-sante-header, +.stress-style { + flex-grow: 0; + flex-basis: 64px; + margin-right: 4px; + margin-left: 4px; +} + +.small-label { + margin-top: 5px; +} + +.padd-right { + margin-right: 8px; +} +.padd-left { + margin-left: 8px; +} + +.stack-left { + align-items:center; + flex-shrink: 1; + flex-grow: 0; +} +.npc-stat-label { + flex-grow: 2; +} + +.packed-left { + white-space: nowrap; + flex-grow: 0; +} + +.numeric-input { + text-align: right; + direction: rtl; + padding: 5px; +} + +.input-numeric-short { + width: 40px; + max-width: 40px; + flex-grow: 0; + flex-shrink: 0; + flex-basis: 40px; + margin-right: 0.25rem; + margin-left: 0.25rem; +} + +.stats-table { + align-content: flex-start; +} + +/* ======================================== */ +.tokenhudext { + display: flex; + flex: 0 !important; + font-weight: 600; +} +.tokenhudext.left { + justify-content: flex-start; + flex-direction: column; + position: absolute; + top: 2.75rem; + right: 4rem; +} +.tokenhudext.right { + justify-content: flex-start; + flex-direction: column; + position: absolute; + top: 2.75rem; + left: 4rem; +} +.control-icon.tokenhudicon { + width: fit-content; + height: fit-content; + min-width: 6rem; + min-height: 1.2rem; + flex-basis: auto; + padding: 0; + line-height: 1rem; + margin: 0.25rem; +} +.control-icon.tokenhudicon.right { + margin-left: 8px; +} +#token-hud .status-effects.active{ + z-index: 2; +} +/* ======================================== */ +.item-checkbox { + height: 25px; + border: 1px solid #736953a6; + border-left: none; + font-weight: 500; + font-size: 1rem; + color: black; + padding-top: 5px; + margin-right: 0px; + width: 45px; + position: relative; + left: 0px; + text-align: center; +} + + +.flex-actions-bar { + flex-grow: 2; +} + +/* ======================================== */ +/* Sidebar CSS */ +#sidebar { + font-size: 1rem; + background-position: 100%; + color: rgba(220,220,220,0.75); +} + +/* background: rgb(105,85,65) url("../images/ui/texture_feuille_perso_onglets.webp") no-repeat right bottom;*/ + +#sidebar.collapsed { + height: 470px !important; +} + +#sidebar-tabs > .collapsed, #chat-controls .chat-control-icon { + color: rgba(220,220,220,0.75); + text-shadow: 1px 1px 0 rgba(0,0,0,0.75); +} + +.sidebar-tab .directory-list .entity { + border-top: 1px dashed rgba(0,0,0,0.25); + border-bottom: 0 none; + padding: 0.25rem 0; +} + +.sidebar-tab .directory-list .entity:hover { + background: rgba(0,0,0,0.05); + cursor: pointer; +} +.chat-message-header { + background: rgba(220,220,210,0.5); + font-size: 1.1rem; + height: 48px; + text-align: center; + vertical-align: middle; + display: flex; + align-items: center; +} + +.chat-message .message-header .flavor-text, .chat-message .message-header .whisper-to { + font-size: 0.9rem; +} +.chat-actor-name { + padding: 4px; +} + +.chat-img { + width: 64px; + height: 64px; +} + +.roll-dialog-header { + height: 52px; +} + +.adversite-text { + font-weight: bold; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.icon-adversite-container { + position: relative; + text-align: center; + color: white; + width: 64px; + min-height: 48px; +} +.icon-adversite { + width: 48px; + border: 0px; +} + +.hud-adversite-container { + position: relative; + text-align: center; + color: white; + width: 64px; + min-height: 64px; +} +.hud-adversite-text { + font-weight: bold; + font-size:0.9rem; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -85%); +} + +.actor-icon { + float: left; + width: 48px; + height: 48px; + padding: 2px 6px 2px 2px; +} + +.padding-dice { + padding-top: .2rem; + padding-bottom: .2rem; +} + +.dice-image { + box-sizing: border-box; + border: none; + border-radius: 0; + max-width: 100%; +} + +.dice-image-reroll { + background-color:rgba(115, 224, 115, 0.25); + border-color: #011d33; + box-sizing: border-box; + border: 1px; + border-radius: 0%; + max-width: 100%; +} + +.chat-dice { + width: 15%; + height: 15%; + font-size: 15px; + padding: 10px; + padding-bottom: 20px; + padding-top: .2rem; + padding-bottom: .2rem; +} + +.div-river-full { + height: 5rem; + align-items: flex-start; +} + +.div-river { + align-content: center; + margin-left: 8px; + align-content:space-around; + justify-content: space-around; +} + +.div-center { + align-self: center; +} + +.chat-message { + background: rgba(220,220,210,0.5); + font-size: 0.9rem; +} + +.chat-message.whisper { + background: rgba(220,220,210,0.75); + border: 2px solid #545469; +} +.chat-message .chat-icon { + border: 0; + padding: 2px 6px 2px 2px; + float: left; + width: 64px; + height: 64px; +} + +#sidebar-tabs { + flex: 0 0 32px; + box-sizing: border-box; + margin: 0 0 5px; + border-bottom: 1px solid rgba(0,0,0,0); + box-shadow: inset 0 0 2rem rgba(0,0,0,0.5); +} + +#sidebar-tabs > .item.active { + border: 1px solid rgba(114,98,72,1); + background: rgba(30, 25, 20, 0.75); + box-shadow: 0 0 6px inset rgba(114,98,72,1); +} + +#sidebar #sidebar-tabs i{ + width: 25px; + height: 25px; + display: inline-block; + background-position:center; + background-size:cover; + text-shadow: 1px 1px 0 rgba(0,0,0,0.75); + +} + +/*#sidebar #sidebar-tabs i.fa-comments:before, #sidebar #sidebar-tabs i.fa-fist-raised:before, #sidebar #sidebar-tabs i.fa-users:before, #sidebar #sidebar-tabs i.fa-map:before, #sidebar #sidebar-tabs i.fa-suitcase:before, #sidebar #sidebar-tabs i.fa-book-open:before, #sidebar #sidebar-tabs i.fa-th-list:before, #sidebar #sidebar-tabs i.fa-music:before, #sidebar #sidebar-tabs i.fa-atlas:before, #sidebar #sidebar-tabs i.fa-cogs:before {content: "";} +#sidebar #sidebar-tabs i.fa-comments {background: url("img/ui/icon_sidebar_chat.svg") no-repeat;} +#sidebar #sidebar-tabs i.fa-fist-raised {background: url("img/ui/icon_sidebar_fight.svg") no-repeat;} +#sidebar #sidebar-tabs i.fa-users {background: url("img/ui/icon_sidebar_actor.svg") no-repeat;} +#sidebar #sidebar-tabs i.fa-map {background: url("img/ui/icon_sidebar_scene.svg") no-repeat;} +#sidebar #sidebar-tabs i.fa-suitcase {background: url("img/ui/icon_sidebar_item.svg") no-repeat;} +#sidebar #sidebar-tabs i.fa-book-open {background: url("img/ui/icon_sidebar_journal.svg") no-repeat;} +#sidebar #sidebar-tabs i.fa-th-list {background: url("img/ui/icon_sidebar_rolltable.svg") no-repeat;} +#sidebar #sidebar-tabs i.fa-music {background: url("img/ui/icon_sidebar_music.svg") no-repeat;} +#sidebar #sidebar-tabs i.fa-atlas {background: url("img/ui/icon_sidebar_compendium.svg") no-repeat;} +#sidebar #sidebar-tabs i.fa-cogs {background: url("img/ui/icon_sidebar_settings.svg") no-repeat;} + +#combat #combat-controls { + box-shadow: inset 0 0 2rem rgba(0,0,0,0.5); +} +*/ + +/*--------------------------------------------------------------------------*/ +/* Control, Tool, hotbar & navigation */ + +#controls .scene-control, #controls .control-tool { + box-shadow: 0 0 3px #000; + margin: 0 0 8px; + border-radius: 0; + background: rgba(30, 25, 20, 1); + background-origin: padding-box; + border-image: url(img/ui/footer-button.png) 10 repeat; + border-image-width: 4px; + border-image-outset: 0px; +} + +#controls .scene-control.active, #controls .control-tool.active, #controls .scene-control:hover, #controls .control-tool:hover { + background: rgba(72, 46, 28, 1); + background-origin: padding-box; + border-image: url(img/ui/footer-button.png) 10 repeat; + border-image-width: 4px; + border-image-outset: 0px; + box-shadow: 0 0 3px #ff6400; +} + +#hotbar #action-bar #macro-list { + border: 1px solid rgba(72, 46, 28, 1); + box-shadow: 2px 2px 5px #000000; +} + +#hotbar #action-bar .macro { + border-image: url(img/ui/bg_control.jpg) 21 repeat; + border-image-slice: 6 6 6 6 fill; + border-image-width: 6px 6px 6px 6px; + border-image-outset: 0px 0px 0px 0px; + border-radius: 0px; +} + +#hotbar .bar-controls { + background: rgba(30, 25, 20, 1); + border: 1px solid rgba(72, 46, 28, 1); +} + +#players { + border-image: url(img/ui/footer-button.png) 10 repeat; + border-image-width: 4px; + border-image-outset: 0px; + background: rgba(30, 25, 20, 1); +} + +#navigation #scene-list .scene.nav-item.active { + background: rgba(72, 46, 28, 1); +} + +#navigation #scene-list .scene.nav-item { + background: rgba(30, 25, 20, 1); + background-origin: padding-box; + border-image: url(img/ui/footer-button.png) 10 repeat; + border-image-width: 4px; + border-image-outset: 0px; +} + +#navigation #scene-list .scene.view, #navigation #scene-list .scene.context { + background: rgba(72, 46, 28, 1); + background-origin: padding-box; + border-image: url(img/ui/footer-button.png) 10 repeat; + border-image-width: 4px; + border-image-outset: 0px; + box-shadow: 0 0 3px #ff6400; +} + +#navigation #nav-toggle { + background: rgba(30, 25, 20, 1); + background-origin: padding-box; + border-image: url(img/ui/footer-button.png) 10 repeat; + border-image-width: 4px; + border-image-outset: 0px; +} + +/* Tooltip container */ +.tooltip { + position: relative; + display: inline-block; + /*border-bottom: 1px dotted black; /* If you want dots under the hoverable text */ +} + +/* Tooltip text */ +.tooltip .tooltiptext { + text-align: left; + background: rgba(231, 229, 226, 0.9); + width: 150px; + padding: 3px 0; + font-size: 0.9rem; + + /* Position the tooltip text */ + top: 1px; + position: absolute; + z-index: 1; + + /* Fade in tooltip */ + visibility: hidden; + opacity: 0; + transition: opacity 0.3s; +} + +.tooltip .ttt-fatigue{ + width: 360px; + + background: rgba(30, 25, 20, 0.9); + border-image: url(img/ui/bg_control.jpg) 21 repeat; + border-image-slice: 6 6 6 6 fill; + border-image-width: 6px 6px 6px 6px; + border-image-outset: 0px 0px 0px 0px; + border-radius: 0px; + + font-size: 0.8rem; + padding: 3px 0; +} + +.tooltip .ttt-ajustements { + width: 150px; + background: rgba(220,220,210,0.95); + border-radius: 6px; + font-size: 0.9rem; + padding: 3px 0; +} + +.tooltip-nobottom { + border-bottom: unset; /* If you want dots under the hoverable text */ +} +.tooltip .ttt-xp { + width: 250px; + background: rgba(220,220,210,0.95); + border-radius: 6px; + font-size: 0.9rem; + padding: 3px 0; +} + +/* Show the tooltip text when you mouse over the tooltip container */ +.tooltip:hover .tooltiptext { + visibility: visible; + opacity: 1; +} + +.chat-card-button { + box-shadow: inset 0px 1px 0px 0px #a6827e; + background: linear-gradient(to bottom, #41545a 5%, #2e5561 100%); + background-color: #7d5d3b00; + border-radius: 3px; + border: 2px ridge #846109; + display: inline-block; + cursor: pointer; + color: #ffffff; + font-size: 0.8rem; + padding: 4px 4px 0px 4px; + text-decoration: none; + text-shadow: 0px 1px 0px #4d3534; + position: relative; + /*margin:2px;*/ +} + +.chat-card-button:hover { + background: linear-gradient(to bottom, #800000 5%, #3e0101 100%); + background-color: rgb(56, 33, 33); +} +.chat-card-button:active { + position:relative; + top:1px; +} + + +.button-sheet-roll { + box-shadow: inset 0px 1px 0px 0px #a6827e; + background: linear-gradient(to bottom, #41545a 5%, #2e5561 100%); + background-color: #7d5d3b00; + border-radius: 4px; + border: 1px ridge #846109; + display: inline-block; + cursor: pointer; + color: #ffffff; + font-size: 0.8rem; + padding: 1px 1px 0px 1px; + text-decoration: none; + text-shadow: 0px 1px 0px #4d3534; + position: relative; + max-height:1.7rem; + flex-grow:1; + max-width: 3.5rem; + min-width: 3.5rem; +} +.button-sheet-roll:hover { + background: linear-gradient(to bottom, #800000 5%, #3e0101 100%); + background-color: rgb(56, 33, 33); +} +.button-sheet-roll:active { + position:relative; + top:1px; +} + +.defense-sheet { + border-radius: 4px; + text-align: center; + display: inline-block; + font-size: 0.8rem; + padding: 1px 1px 0px 1px; + text-decoration: none; + position: relative; + max-height:1.7rem; + margin-left:4px; + flex-grow:1; + max-width: 3.5rem; + min-width: 3.5rem; +} + +.plus-minus-button { + box-shadow: inset 0px 1px 0px 0px #a6827e; + background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%); + background-color: #7d5d3b00; + border-radius: 4px; + border: 2px ridge #846109; + display: inline-block; + cursor: pointer; + color: #ffffff; + padding: 3px 6px 2px 6px; + text-decoration: none; + text-shadow: 0px 1px 0px #4d3534; + position: relative; + margin:3px; + max-width: 24px; + max-height: 24px; +} + +.river-button:hover, +.plus-minus-button:hover, +.chat-card-button:hover { + background: linear-gradient(to bottom, #800000 5%, #3e0101 100%); + background-color: red; +} + +.plus-minus-button:active, +.chat-card-button:active { + position:relative; + top:1px; +} + +.plus-minus { + font-size: 0.9rem; + font-weight: bold; +} + +.ul-level1 { + padding-left: 2rem; +} + +.drop-equipment-effect, +.drop-power-effect, +.drop-perk-effect, +.drop-ability-effect, +.drop-effect-specaffected, +.drop-effect-spec, +.drop-ability-weapon, +.drop-ability-armor, +.drop-race-perk, +.drop-spec-perk, +.drop-ability-power, +.drop-ability-spec, +.drop-spec-power, +.drop-abilities, +.drop-optionnal-abilities, +.drop-specialperk1, +.drop-perk2, +.drop-spec1 , +.drop-spec2 { + background: linear-gradient(to bottom, #6c95b9fc 5%, #105177ab 100%); + background-color: #7d5d3b00; + border-radius: 3px; + border: 2px ridge #846109; +} + +.label-name { + padding-top: 7px; + padding-left: 4px; + margin-left: 4px; + min-width: 5rem; + max-width: 5rem; +} + +/*************************************************************/ +.competence-name { + padding-top: 7px; + padding-left: 4px; + margin-left: 4px; + flex-grow: 2; +} + +/*************************************************************/ +.competence-niveau { + flex-grow: 1; + min-width: 64px; + max-width: 64px; +} + +/*************************************************************/ +.arme-defensif { + padding-top: 7px; + text-align: center; + flex-grow: 2; +} + +/*************************************************************/ +.item-name-img { + flex-grow:1; + max-width: 2rem; + min-width: 2rem; + max-height: 2rem; +} + +/*************************************************************/ +#pause +{ + font-size: 2rem; +} +#pause > h3 +{ + color: #CCC +} +#pause > img { + content: url(../assets/logos/hawkmoon_logo.webp); + height: 256px; + width: 256px; + top: -80px; + left: calc(50% - 132px); +} + +#logo { + content : url(../assets/logos/hawkmoon_logo.webp); + width: 120px; + height: 40px; +} + +.dice-cell { + padding-left: 12px; + padding-right: 12px; + width: 60px; + text-align: center; +} + +.dice-formula, +.dice-total { + height: 54px; + position:relative; +} + +.item-name-label-header { + flex-grow:2; + max-width: 12rem; + min-width: 12rem; +} +.item-name-label { + flex-grow:2; + max-width: 10rem; + min-width: 10rem; +} +.item-name-label-level2 { + flex-grow:2; + max-width: 9rem; + min-width: 9rem; +} +.item-field-label-short { + padding-top: 6px; + flex-grow:1; + max-width: 4rem; + min-width: 4rem; +} +.item-field-label-medium { + padding-top: 6px; + flex-grow:1; + max-width: 6rem; + min-width: 6rem; +} +.item-field-label-long { + padding-top: 6px; + flex-grow:1; + max-width: 8rem; + min-width: 8rem; +} +.item-field-label-long2 { + padding-top: 6px; + flex-grow:1; + max-width: 20rem; + min-width: 20rem; +} +.item-control-end { + align-self: flex-end; +} +.alternate-list { + margin-top: 2px; + flex-wrap: nowrap; +} +.item-filler { + flex-grow: 6; + flex-shrink: 7; +} +.item-controls-fixed { + min-width:3.2rem; + max-width: 3.2rem; +} +.item-field { + justify-content: flex-start; + flex-grow: 1; +} +.chat-success { + font-size: 1.2rem; + font-weight: bold; + color: darkgreen; +} +.chat-failure { + font-size: 1.2rem; + font-weight: bold; + color: darkred; +} +.adversite-modify { + margin-top: 12px; +} +.argent-total-text { + margin-left: 4px; +} \ No newline at end of file diff --git a/system.json b/system.json new file mode 100644 index 0000000..6467955 --- /dev/null +++ b/system.json @@ -0,0 +1,56 @@ +{ + "id": "fvtt-les-heritiers", + "description": "Les Héritiers pour FoundryVTT", + "version": "10.0.0", + "authors": [ + { + "name": "Uberwald/LeRatierBretonnien", + "flags": {} + }, + { + "name": "Prêtre", + "flags": {} + } + ], + "esmodules": [ + "modules/heritiers-main.js" + ], + "gridDistance": 5, + "gridUnits": "m", + "license": "LICENSE.txt", + "manifest": "https://www.uberwald.me/gitea/public/fvtt-les-heritiers/raw/branch/master/system.json", + "download": "https://www.uberwald.me/gitea/public/fvtt-les-heritiers/archive/fvtt-hawkmoon-cyd-10.0.0.zip", + "languages": [ + { + "lang": "fr", + "name": "French", + "path": "lang/fr.json", + "flags": {} + } + ], + "packs": [ + { + "type": "Item", + "label": "Compétences", + "name": "skills", + "path": "packs/competences.db", + "system": "fvtt-les-heritiers", + "private": false, + "flags": {} + } + ], + "primaryTokenAttribute": "sante.vigueur", + "secondaryTokenAttribute": "bonneaventure.actuelle", + "socket": true, + "styles": [ + "styles/simple.css" + ], + "title": "Les Héritiers", + "url": "https://www.uberwald.me/gitea/public/fvtt-les-heritiers", + "background": "systems/fvtt-les-heritiers/assets/ui/fond_hawkmoon.webp", + "compatibility": { + "minimum": "10", + "verified": "10", + "maximum": "10" + } +} \ No newline at end of file diff --git a/template.json b/template.json new file mode 100644 index 0000000..4db45e5 --- /dev/null +++ b/template.json @@ -0,0 +1,330 @@ +{ + "Actor": { + "types": [ + "personnage", + "creature" + ], + "templates": { + "biodata": { + "biodata": { + "name": "", + "activite":"", + "profilmajeur": "", + "profilmineur": "", + "fortune": 0, + "traitscaracteres": "", + "taillemasquee": "", + "poidsmasquee": "", + "apparencemasquee": "", + "age": 0, + "poids": "", + "taille": "", + "cheveux": "", + "sexe": "", + "yeux": "", + "description": "", + "habitat": "", + "notes": "", + "statut": "", + "gmnotes": "" + } + }, + "core": { + "subactors": [], + "caracteristiques": { + "agi": { + "label": "Agilité", + "labelnorm": "agilite", + "abbrev": "agi", + "value": 1, + "rang": 0, + "max": 1 + }, + "con": { + "label": "Constitution", + "labelnorm": "constitution", + "abbrev": "con", + "value": 1, + "rang": 0, + "max": 1 + }, + "for": { + "label": "Force", + "labelnorm": "force", + "abbrev": "for", + "value": 1, + "rang": 0, + "max": 1 + }, + "prec": { + "label": "Précision", + "labelnorm": "precision", + "abbrev": "prec", + "value": 1, + "rang": 0, + "max": 1 + }, + "esp": { + "label": "Esprit", + "labelnorm": "esprit", + "abbrev": "esp", + "value": 1, + "rang": 0, + "max": 1 + }, + "per": { + "label": "Perception", + "labelnorm": "perception", + "abbrev": "per", + "value": 1, + "rang": 0, + "max": 1 + }, + "pres": { + "label": "Présence", + "labelnorm": "presence", + "abbrev": "pre", + "value": 1, + "rang": 0, + "max": 1 + }, + "san": { + "label": "Sang-Froid", + "labelnorm": "sangfroid", + "abbrev": "san", + "value": 1, + "rang": 0, + "max": 1 + } + }, + "rang": { + "tricherie": { + "value": 0, + "max": 0 + }, + "feerie": { + "value": 0, + "max": 0 + }, + "masque": { + "value": 0, + "max": 0 + }, + "heritage": { + "value": 0, + "scenarios": 0 + } + }, + "pv": { + "value": 0, + "max": 0 + }, + "competences": { + "aventurier": { + "label": "Aventurier", + "rang": 0, + "pp": 0 + }, + "combattant": { + "label": "Aventurier", + "rang": 0, + "pp": 0 + }, + "erudit": { + "label": "Erudit", + "rang": 0, + "pp": 0 + }, + "gentleman": { + "label": "Gentleman", + "rang": 0, + "pp": 0 + }, + "roublard": { + "label": "Roublard", + "rang": 0, + "pp": 0 + }, + "savant": { + "label": "Savant", + "rang": 0, + "pp": 0 + } + }, + "experience": { + "value": 0, + "pourtricher": 0 + }, + "combat": { + "esquive": { + "masquee": 0, + "demasquee": 0 + }, + "parade": { + "value": 0 + }, + "resistancephysique": { + "value": 0 + }, + "resistancepsychique": { + "value": 0 + }, + "protection": { + "value": 0 + }, + "effetssecondaires": "", + "dissimulation": { + "value": 0 + }, + "initiative": { + "masquee": 0, + "demasquee": 0 + }, + "corpsacorps": { + "masquee": 0, + "demasquee": 0 + }, + "tir": { + "masquee": 0, + "demasquee": 0 + } + } + }, + "npccore": { + "npctype": "", + "description": "" + } + }, + "personnage": { + "templates": [ + "biodata", + "core" + ] + } + }, + "Item": { + "templates": { + "base": { + "description": "" + }, + "basequip": { + "rarete": 0, + "quantite": 0, + "equipped": false + } + }, + "types": [ + "talenfeet", + "capacitenaturelle", + "pouvoir", + "atoutfeerique", + "competence", + "protection", + "monnaie", + "equipement", + "artefact", + "ressource", + "contact" + ], + "fee": { + "feetype": 0, + "description": "" + }, + "capacitenaturelle": { + "description": "" + }, + "pouvoir": { + "description": "" + }, + "atoutfeerique": { + "description": "" + }, + "competence": { + "categorie": "", + "profil": "", + "niveau": 0, + "predilection": false, + "specialites": "", + "description": "" + }, + "historique": { + "bonusmalus": "", + "templates": [ + "base" + ] + }, + "profil": { + "exemples": "", + "attribut1": "", + "attribut2": "", + "attribut3": "", + "competences": "", + "talentsinitie": "", + "prerequisaguerri": "", + "talentsaguerri": "", + "prerequismaitre": "", + "talentsmaitre": "", + "celluleinfo": "", + "equipement": "", + "templates": [ + "base" + ] + }, + "equipement": { + "templates": [ + "base", + "basequip" + ] + }, + "arme": { + "typearme": "", + "bonusmaniementoff": 0, + "seuildefense": 0, + "onlevelonly": false, + "degats": "", + "deuxmains": false, + "percearmure": false, + "percearmurevalue": 0, + "courte": 0, + "moyenne": 0, + "longue": 0, + "tr": 0, + "templates": [ + "base", + "basequip" + ] + }, + "protection": { + "protection": 0, + "adversitepoids" :0, + "templates": [ + "base", + "basequip" + ] + }, + "monnaie": { + "templates": [ + "base", + "basequip" + ] + }, + "artefact": { + "complexite": 0, + "branche": "", + "branche2": "none", + "dureerealisation": "", + "tempsroute": "", + "effetdejeu": "", + "defautcourant": "", + "autrescarac": "", + "avantagespossibles": "", + "avantages": "", + "competences": "", + "templates": [ + "base", + "basequip" + ] + + } + } +} \ No newline at end of file diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html new file mode 100644 index 0000000..4a0c5ef --- /dev/null +++ b/templates/actor-sheet.html @@ -0,0 +1,561 @@ +
+ + {{!-- Sheet Header --}} +
+
+
+ +
+

+
+ +
    + +
  • +

    Bonne Aventure

    + + + + +
  • + +
  • +

    Expérience

    + + +

    Eclat

    + +
  • + +
  • +

    Vigueur

    + +

    Etat

    + +
  • + +
+
+
+
+
+ + {{!-- Sheet Tab Navigation --}} +
+ + {{!-- Sheet Body --}} +
+ + {{!-- Main Tab --}} +
+ +
+ +
+ +
+
    + {{#each system.attributs as |attr key|}} +
  • + + {{attr.label}} + +
  • + {{/each}} + +
  • + + Vitesse + +
  • + +
+
+ +
+ +

Adversités

+
    + {{#each system.adversite as |adv key|}} +
  • + - +
    + +
    {{adv}}
    +
    + + +
     
    +
     
    +
     
    +
  • + {{/each}} +
+
+
+ +
+
    +
  • + +

    +
    + + + +
     
    +
  • + {{#each talents as |talent key|}} +
  • + + {{talent.name}} + {{talent.system.resumebonus}} + +
     
    +
    + + +
    +
  • + {{/each}} +
+
+ +
+
+
    +
  • + +

    +
    + + + +
     
    +
  • + {{#each talentsCell as |talent key|}} +
  • + + {{talent.name}} + {{talent.system.resumebonus}} +
     
    +
    + +
    +
  • + {{/each}} +
+
+ +
+
+ +
+ + {{!-- Competence Tab --}} +
+ +
+ +
+
    +
  • + +

    +
    + + + +
     
    +
  • + {{#each skills as |skill key|}} +
  • + + {{skill.name}} + + + {{#if (ne skill.system.attribut1 "none")}} + + {{/if}} + {{#if (ne skill.system.attribut2 "none")}} + + {{/if}} + {{#if (ne skill.system.attribut3 "none")}} + + {{/if}} + +
     
    +
    + + +
    +
  • + {{/each}} +
+
+ +
+ +
+ + {{!-- Equipement Tab --}} +
+ +
    +
  • + +
  • +
+ +
+ +
+
    +
  • + +

    +
    + + + + + + + + + +
     
    +
    + +
    +
  • + {{#each armes as |arme key|}} +
  • + + {{arme.name}} + + + {{#if arme.system.equipped}} + + {{else}} + + {{/if}} + + + {{#if arme.system.isdefense}} + + {{else}} + + {{/if}} + + + {{#if arme.system.equipped}} + + {{else}} + + {{/if}} + + +
     
    + +
  • + {{/each}} +
+
+ +
+
    +
  • + +

    +
    + + + +
     
    +
    + +
    +
  • + {{#each protections as |protection key|}} +
  • + + {{protection.name}} + + +
     
    +
    + + +
    +
  • + {{/each}} +
+
+
+
+ + + {{!-- Equipement Tab --}} +
+ +
+ +
+
+

+ +

+
+ +
+
    +
  • + +

    +
    + + + + +
     
    +
    + +
    +
  • + {{#each monnaies as |monnaie key|}} +
  • + + {{monnaie.name}} + {{monnaie.system.quantite}} + - + + + +
     
    +
    + + +
    +
  • + {{/each}} +
+
+ +
+
+

+ +

+
+ +
+
    +
  • + +

    +
    + + + + + +
     
    +
    + +
    +
  • + {{#each equipements as |equipement key|}} +
  • + + {{equipement.name}} + {{equipement.system.quantite}} + - + + + +
     
    +
    + + +
    +
  • + {{/each}} +
+
+ +
+
    +
  • + +

    +
    + + + + + +
     
    +
    + +
    +
  • + {{#each artefacts as |artefact key|}} +
  • + + {{artefact.name}} + {{artefact.system.quantite}} + - + + + +
     
    +
    + + +
    +
  • + {{/each}} +
+
+ +
+ +
+ + + {{!-- Biography Tab --}} +
+ +
+
    + {{#each historiques as |historique key|}} +
  • + + + +
    + + +
    +
  • + {{/each}} + {{#each profils as |profil key|}} +
  • + + + +
    + + +
    +
  • + {{/each}} +
+
+ + +
+
+
    +
  • + + +
  • +
  • + + +
  • +
+
+
+
    +
  • + + +
  • +
  • + + +
  • +
+
+ +
+
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
    +
    + + +

    Description

    +
    +
    + {{editor description target="system.biodata.description" button=true owner=owner editable=editable}} +
    + +
    + +
    +
    \ No newline at end of file diff --git a/templates/chat-degats-result.html b/templates/chat-degats-result.html new file mode 100644 index 0000000..131bf71 --- /dev/null +++ b/templates/chat-degats-result.html @@ -0,0 +1,28 @@ +
    + {{#if actorImg}} + {{alias}} + {{/if}} +

    {{alias}}

    +
    + +
    + +{{#if actionImg}} +
    + {{name}} +
    +{{/if}} + +
    +
    + +
    +
      +
    • Arme : {{arme.name}} (+{{arme.system.totalDegats}})
    • +
    • Dégats : {{finalResult}}
    • + {{#if targetVigueur}} +
    • Vigueur de la cible : {{targetVigueur}}
    • +
    • Etats Combativité supplémentaires perdus (manuel): {{nbEtatPerdus}}
    • + {{/if}} +
    +
    diff --git a/templates/chat-generic-result.html b/templates/chat-generic-result.html new file mode 100644 index 0000000..b4e3510 --- /dev/null +++ b/templates/chat-generic-result.html @@ -0,0 +1,84 @@ +
    + {{#if actorImg}} + {{alias}} + {{/if}} +

    {{alias}}

    +
    + +
    + +{{#if actionImg}} +
    + {{name}} +
    +{{/if}} + +
    +
    + +
    +
      +
    • Attribut : {{attr.label}} ({{attr.value}})
    • + + {{#if competence}} +
    • Compétence : {{competence.name}} ({{competence.system.niveau}})
    • + {{/if}} + + {{#if selectedMaitrise}} +
    • Maitrise : {{selectedMaitrise.name}}
    • + {{/if}} + + + {{#if arme}} +
    • Arme : {{arme.name}} (+{{arme.system.bonusmaniementoff}})
    • + {{/if}} + +
    • Formule : {{diceFormula}}
    • +
    • Résultat du dé : {{diceResult}}
    • + + {{#if bonusRoll}} +
    • {{textBonus}} : +{{bonusRoll.total}}
    • + {{/if}} + +
    • Total : {{finalResult}}
    • + + {{#if difficulte}} + {{#if isSuccess}} +
    • Succés... +
    • + {{else}} +
    • Echec...
    • + {{/if}} + {{/if}} + + {{#if isHeroique}} +
    • Héroïque !!!
    • + {{/if}} + {{#if isDramatique}} +
    • Dramatique !!!
    • + {{/if}} + + {{#if isInit}} +
    • Initiative stockée !
    • + {{/if}} + + {{#if isSuccess}} + {{#if arme}} +
    • Votre adversaire perd 1 Etat de Combativité (manuel)
    • + {{#if (not arme.system.onlevelonly)}} + + {{/if}} + {{/if}} + {{/if}} + + + {{#each predilections as |pred key|}} +
    • + +
    • + {{/each}} + +
    +
    + diff --git a/templates/creature-sheet.html b/templates/creature-sheet.html new file mode 100644 index 0000000..088e8d7 --- /dev/null +++ b/templates/creature-sheet.html @@ -0,0 +1,356 @@ +
    + + {{!-- Sheet Header --}} +
    +
    +
    + +
    +

    +
    + +
      + +
    • +

      Ressources

      + +
    • +
    +
    +
    +
    +
    + + {{!-- Sheet Tab Navigation --}} + + + {{!-- Sheet Body --}} +
    + + {{!-- Main Tab --}} +
    + +
    + +
    +
      + {{#each system.attributs as |attr key|}} +
    • + + {{attr.label}} + +
    • + {{/each}} +
    • + + Vitesse + +
    • +
    +

    Santé

    +
      +
    • + + +
    • +
    • + + +
    • +
    + +

    Combat

    +
      +
    • + +
    • +
    + +
    + +
    +

    Adversité

    +
      + {{#each system.adversite as |adv key|}} +
    • + - +
      + +
      {{adv}}
      +
      + + +
       
      +
       
      +
       
      +
    • + {{/each}} +
    + + +
    + +
    + +
    + + {{!-- Competence Tab --}} +
    + +
    + +
    +
      +
    • + +

      +
      + + + +
       
      +
    • + {{#each skills as |skill key|}} +
    • + + {{skill.name}} + + + {{#if (ne skill.system.attribut1 "none")}} + + {{/if}} + {{#if (ne skill.system.attribut2 "none")}} + + {{/if}} + {{#if (ne skill.system.attribut3 "none")}} + + {{/if}} + +
       
      +
      + + +
      +
    • + {{/each}} +
    +
    + +
    + +
    + + {{!-- Talents Tab --}} +
    + +
    + +
    +
      +
    • + +

      +
      + + + +
       
      +
    • + {{#each talents as |talent key|}} +
    • + + {{talent.name}} + {{talent.system.resumebonus}} + +
       
      +
      + + +
      +
    • + {{/each}} +
    +
    +
    + +
    +
    +
      +
    • + +

      +
      + + + +
       
      +
    • + {{#each talentsCell as |talent key|}} +
    • + + {{talent.name}} + {{talent.system.resumebonus}} +
       
      +
      + +
      +
    • + {{/each}} +
    +
    + +
    + +
    + + {{!-- Equipement Tab --}} +
    + +
    + +
    +
      +
    • + +

      +
      + + + + + + + + + +
       
      +
      + +
      +
    • + {{#each armes as |arme key|}} +
    • + + {{arme.name}} + + + {{#if arme.system.equipped}} + + {{else}} + + {{/if}} + + + {{#if arme.system.isdefense}} + + {{else}} + + {{/if}} + + + {{#if arme.system.equipped}} + + {{else}} + + {{/if}} + + +
       
      + +
    • + {{/each}} +
    +
    + +
    +
      +
    • + +

      +
      + + + +
       
      +
      + +
      +
    • + {{#each protections as |protection key|}} +
    • + + {{protection.name}} + + +
       
      +
      + + +
      +
    • + {{/each}} +
    +
    + +
    + +
    + + + {{!-- Biography Tab --}} +
    + + +

    Description

    +
    +
    + {{editor description target="system.biodata.description" button=true owner=owner editable=editable}} +
    + + +

    Habitat

    +
    +
    + {{editor habitat target="system.biodata.habitat" button=true owner=owner editable=editable}} +
    + +
    + +
    +
    \ No newline at end of file diff --git a/templates/editor-notes-gm.html b/templates/editor-notes-gm.html new file mode 100644 index 0000000..ca22bd0 --- /dev/null +++ b/templates/editor-notes-gm.html @@ -0,0 +1,6 @@ +{{#if data.isGM}} +

    GM Notes :

    +
    + {{editor data.biodata.gmnotes target="system.biodata.gmnotes" button=true owner=owner editable=editable}} +
    +{{/if}} diff --git a/templates/hud-adversites.html b/templates/hud-adversites.html new file mode 100644 index 0000000..f5187fa --- /dev/null +++ b/templates/hud-adversites.html @@ -0,0 +1,48 @@ +
    + +
    + +
    +
    + +
     -1
    +
    + +
    + +
     +1
    +
    +
    + +
    +
    + +
     -1
    +
    + +
    + +
     +1
    +
    +
    + +
    +
    + +
     -1
    +
    + +
    + +
     +1
    +
    +
    + +
    +
    \ No newline at end of file diff --git a/templates/item-arme-sheet.html b/templates/item-arme-sheet.html new file mode 100644 index 0000000..7059777 --- /dev/null +++ b/templates/item-arme-sheet.html @@ -0,0 +1,89 @@ +
    + {{> systems/fvtt-les-heritiers/templates/partial-item-header.html}} + + {{> systems/fvtt-les-heritiers/templates/partial-item-nav.html}} + + {{!-- Sheet Body --}} +
    + + {{> systems/fvtt-les-heritiers/templates/partial-item-description.html}} + +
    + +
      +
    • + + +
    • +
    • + + +
    • +
    • + + +
    • +
    • + + +
    • + {{#if system.onlevelonly}} + {{else}} +
    • + + +
    • + {{/if}} +
    • + + +
    • +
    • + + +
    • + {{#if system.percearmure}} +
    • + + +
    • + {{/if}} +
    • + + +
    • +
    • + + +
    • +
    • + + +
    • +
    • + + +
    • + + {{> systems/fvtt-les-heritiers/templates/partial-item-prix.html}} + +
    + +
    +
    \ No newline at end of file diff --git a/templates/item-artefact-sheet.html b/templates/item-artefact-sheet.html new file mode 100644 index 0000000..abb6e87 --- /dev/null +++ b/templates/item-artefact-sheet.html @@ -0,0 +1,117 @@ +
    + {{> systems/fvtt-les-heritiers/templates/partial-item-header.html}} + + {{> systems/fvtt-les-heritiers/templates/partial-item-nav.html}} + + {{!-- Sheet Body --}} +
    + + {{> systems/fvtt-les-heritiers/templates/partial-item-description.html}} + +
    + +
      +
    • + + +
    • + +
    • + + +
    • + +
    • + + +
    • + +
    • + + +
    • + +
    • + + +
    • + +
    • + +
    • +
    • + +
    • + +
    • + +
    • +
    • + +
    • + +
    • + +
    • +
    • + +
    • + +
    • + +
    • +
    • + +
    • + +
    • + +
    • +
    • + +
    • + +
    • + + +
    • + +
    • + + +
    • + +
    + +
    + +
    +
    \ No newline at end of file diff --git a/templates/item-competence-sheet.html b/templates/item-competence-sheet.html new file mode 100644 index 0000000..4c4b67c --- /dev/null +++ b/templates/item-competence-sheet.html @@ -0,0 +1,91 @@ +
    + {{> systems/fvtt-les-heritiers/templates/partial-item-header.html}} + + {{> systems/fvtt-les-heritiers/templates/partial-item-nav.html}} + + {{!-- Sheet Body --}} +
    + + {{> systems/fvtt-les-heritiers/templates/partial-item-description.html}} + +
    + +
      +
    • + + +
    • +
    • + + +
    • +
    • + + +
    • +
    • + + +
    • + +
    • +

      Prédilections

      +
    • +
    • +
        + {{#each system.predilections as |predilection key|}} +
      • + +
      • +
      • + +
      • +
      • + + + + + + +
      • +
        + {{/each}} +
      +
    • + +
    • +
    +
    + +
    +
    \ No newline at end of file diff --git a/templates/item-contact-sheet.html b/templates/item-contact-sheet.html new file mode 100644 index 0000000..1e558e5 --- /dev/null +++ b/templates/item-contact-sheet.html @@ -0,0 +1,45 @@ +
    + {{> systems/fvtt-les-heritiers/templates/partial-item-header.html}} + + {{> systems/fvtt-les-heritiers/templates/partial-item-nav.html}} + + {{!-- Sheet Body --}} +
    + + {{> systems/fvtt-les-heritiers/templates/partial-item-description.html}} + +
    + +
      +
    • + + + + + + +
    • + +
    • + + +
    • + +
    + +
    + +
    +
    \ No newline at end of file diff --git a/templates/item-equipement-sheet.html b/templates/item-equipement-sheet.html new file mode 100644 index 0000000..57792cc --- /dev/null +++ b/templates/item-equipement-sheet.html @@ -0,0 +1,22 @@ +
    + {{> systems/fvtt-les-heritiers/templates/partial-item-header.html}} + + {{> systems/fvtt-les-heritiers/templates/partial-item-nav.html}} + + {{!-- Sheet Body --}} +
    + + {{> systems/fvtt-les-heritiers/templates/partial-item-description.html}} + +
    + +
      + + {{> systems/fvtt-les-heritiers/templates/partial-item-prix.html}} + +
    + +
    + +
    +
    \ No newline at end of file diff --git a/templates/item-historique-sheet.html b/templates/item-historique-sheet.html new file mode 100644 index 0000000..7926907 --- /dev/null +++ b/templates/item-historique-sheet.html @@ -0,0 +1,24 @@ +
    + {{> systems/fvtt-les-heritiers/templates/partial-item-header.html}} + + {{> systems/fvtt-les-heritiers/templates/partial-item-nav.html}} + + {{!-- Sheet Body --}} +
    + + {{> systems/fvtt-les-heritiers/templates/partial-item-description.html}} + +
    +
      +
    • + +
    • +
    • + +
    • +
    +
    + +
    +
    \ No newline at end of file diff --git a/templates/item-monnaie-sheet.html b/templates/item-monnaie-sheet.html new file mode 100644 index 0000000..da51245 --- /dev/null +++ b/templates/item-monnaie-sheet.html @@ -0,0 +1,34 @@ +
    + {{> systems/fvtt-les-heritiers/templates/partial-item-header.html}} + + {{> systems/fvtt-les-heritiers/templates/partial-item-nav.html}} + + {{!-- Sheet Body --}} +
    + + {{> systems/fvtt-les-heritiers/templates/partial-item-description.html}} + + +
    + +
      + +
    • + + +
    • + +
    • + + +
    • + + +
    + +
    + +
    +
    diff --git a/templates/item-profil-sheet.html b/templates/item-profil-sheet.html new file mode 100644 index 0000000..4d1218c --- /dev/null +++ b/templates/item-profil-sheet.html @@ -0,0 +1,119 @@ +
    + {{> systems/fvtt-les-heritiers/templates/partial-item-header.html}} + + {{> systems/fvtt-les-heritiers/templates/partial-item-nav.html}} + + {{!-- Sheet Body --}} +
    + + {{> systems/fvtt-les-heritiers/templates/partial-item-description.html}} + +
    +
      +
    • + +
    • +
    • + +
    • +
    • + + +
    • +
    • + + +
    • +
    • + + +
    • + +
    • + +
    • +
    • + +
    • + +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • + +
    + +
    + +
    +
    \ No newline at end of file diff --git a/templates/item-protection-sheet.html b/templates/item-protection-sheet.html new file mode 100644 index 0000000..04026bc --- /dev/null +++ b/templates/item-protection-sheet.html @@ -0,0 +1,30 @@ +
    + {{> systems/fvtt-les-heritiers/templates/partial-item-header.html}} + + {{> systems/fvtt-les-heritiers/templates/partial-item-nav.html}} + + {{!-- Sheet Body --}} +
    + + {{> systems/fvtt-les-heritiers/templates/partial-item-description.html}} + +
    + +
      +
    • + + +
    • +
    • + + +
    • + + {{> systems/fvtt-les-heritiers/templates/partial-item-prix.html}} + +
    + +
    +
    \ No newline at end of file diff --git a/templates/item-ressource-sheet.html b/templates/item-ressource-sheet.html new file mode 100644 index 0000000..6797d5d --- /dev/null +++ b/templates/item-ressource-sheet.html @@ -0,0 +1,26 @@ +
    + {{> systems/fvtt-les-heritiers/templates/partial-item-header.html}} + + {{> systems/fvtt-les-heritiers/templates/partial-item-nav.html}} + + {{!-- Sheet Body --}} +
    + + {{> systems/fvtt-les-heritiers/templates/partial-item-description.html}} + +
    + +
      + +
    • + + +
    • + +
    + +
    + +
    +
    \ No newline at end of file diff --git a/templates/item-talent-sheet.html b/templates/item-talent-sheet.html new file mode 100644 index 0000000..7323e84 --- /dev/null +++ b/templates/item-talent-sheet.html @@ -0,0 +1,68 @@ +
    + {{> systems/fvtt-les-heritiers/templates/partial-item-header.html}} + + {{> systems/fvtt-les-heritiers/templates/partial-item-nav.html}} + + {{!-- Sheet Body --}} +
    + + {{> systems/fvtt-les-heritiers/templates/partial-item-description.html}} + +
    + +
      + +
    • + + +
    • + +
    • + + +
    • + +
    • + +
    • +
    • + +
    • + +
    • + +
    • +
    • + +
    • + +
    • + + +
    • + + {{> systems/fvtt-les-heritiers/templates/partial-automation.html}} + +
    +
    + +
    +
    \ No newline at end of file diff --git a/templates/partial-actor-equipment.html b/templates/partial-actor-equipment.html new file mode 100644 index 0000000..1e18b27 --- /dev/null +++ b/templates/partial-actor-equipment.html @@ -0,0 +1,23 @@ +
  • + + {{#if (eq level 1)}} + {{equip.name}} + {{else}} + {{equip.name}} + {{/if}} + + + + +
     
    +
    + {{#if (eq level 1)}} + {{#if equip.system.equipped}}{{else}}{{/if}} + {{/if}} + +
    +
  • diff --git a/templates/partial-automation.html b/templates/partial-automation.html new file mode 100644 index 0000000..e363d8a --- /dev/null +++ b/templates/partial-automation.html @@ -0,0 +1,81 @@ +
  • + + +
  • + +{{#if system.isautomated}} +
  • +
      + {{#each system.automations as |automation key|}} +
    • +
      +
    • +
    • + + + + + + + +
    • + + {{#if (eq automation.eventtype "on-drop")}} +
    • + + +
    • +
    • + + +
    • + {{/if}} + + {{#if (eq automation.eventtype "bonus-permanent")}} +
    • + + +
    • +
    • + + +
    • + {{/if}} + + {{#if (eq automation.eventtype "prepare-roll")}} +
    • + + +
    • +
    • + + +
    • +
    • + + +
    • + {{/if}} + + {{/each}} + +
    + +
  • + +
  • +{{/if}} \ No newline at end of file diff --git a/templates/partial-item-description.html b/templates/partial-item-description.html new file mode 100644 index 0000000..541eb68 --- /dev/null +++ b/templates/partial-item-description.html @@ -0,0 +1,5 @@ +
    +
    + {{editor description target="system.description" button=true owner=owner editable=editable}} +
    +
    diff --git a/templates/partial-item-header.html b/templates/partial-item-header.html new file mode 100644 index 0000000..8b4c994 --- /dev/null +++ b/templates/partial-item-header.html @@ -0,0 +1,8 @@ +
    +
    + +
    +

    +
    +
    +
    diff --git a/templates/partial-item-nav.html b/templates/partial-item-nav.html new file mode 100644 index 0000000..95b52cd --- /dev/null +++ b/templates/partial-item-nav.html @@ -0,0 +1,5 @@ +{{!-- Sheet Tab Navigation --}} + diff --git a/templates/partial-item-prix.html b/templates/partial-item-prix.html new file mode 100644 index 0000000..2d993b2 --- /dev/null +++ b/templates/partial-item-prix.html @@ -0,0 +1,33 @@ +
  • + + +
  • + +
  • + + +
  • + +
  • + + +
  • + +
  • + + + + + + + + + + + +
  • \ No newline at end of file diff --git a/templates/partial-list-niveau.html b/templates/partial-list-niveau.html new file mode 100644 index 0000000..706f51a --- /dev/null +++ b/templates/partial-list-niveau.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/templates/partial-sante-etat.html b/templates/partial-sante-etat.html new file mode 100644 index 0000000..20612fd --- /dev/null +++ b/templates/partial-sante-etat.html @@ -0,0 +1,6 @@ + + + + + + diff --git a/templates/post-item.html b/templates/post-item.html new file mode 100644 index 0000000..8ce0f51 --- /dev/null +++ b/templates/post-item.html @@ -0,0 +1,8 @@ +
    +

    {{name}}

    + {{#if img}} + + {{/if}} +

    Description :

    +

    {{{system.description}}}

    +
    diff --git a/templates/roll-dialog-generic.html b/templates/roll-dialog-generic.html new file mode 100644 index 0000000..f0ffadd --- /dev/null +++ b/templates/roll-dialog-generic.html @@ -0,0 +1,112 @@ +
    +
    + {{#if img}} + + {{/if}} +

    {{title}}

    +
    + +
    + +
    + {{#if (eq attrKey "tochoose")}} + Attribut + + {{else}} + {{attr.label}} + {{attr.value}} + {{/if}} +
    + + {{#if nbAdversites}} +
    + Malus d'adversités + - {{nbAdversites}} +
    + {{/if}} + + {{#if competence}} +
    + {{competence.name}} + {{competence.system.niveau}} +
    + {{#if maitrises}} +
    + Utiliser une maîtrise + +
    + {{/if}} + {{/if}} + + {{#if (count talents)}} +
    + Talents + +
    + {{/if}} + +
    + Bonus/Malus + +
    + + {{#if armeDefense}} +
    + Défense adversaire : + {{difficulte}} +
    + {{else}} + {{#if isInit}} + + {{else}} +
    + Difficulté : + + {{/if}} +
    + {{/if}} + +
    + +
    \ No newline at end of file