Code Monkey home page Code Monkey logo

module-packer's Introduction

EncounterPlus VTT iOS v4.13

Designed to help Dungeon Masters to run D&D 5E combat encounters more easily. You can track initiative, health, statistics, and conditions for various creatures.

Promo

Installation

Documentation

Documentation can be found on https://help.encounter.plus. It is created automatically from this repository.

Issues

Bugs, issues or enhancements are tracked in this repository using Issues section. https://github.com/encounterplus/encounterplus/issues

Discussion

module-packer's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

module-packer's Issues

[Request] Add support for custom image sizes

Markdown example:

![Image Caption](/image/location.png width=500 height=100)

That's the standard for setting the max-width to be 500, and the max-height to be 100. If either of those values are unset, the default is "auto". If both are set, then the image resizes to fit both values.

Add Help link

Documentation link in help menu currently takes you to Electron help.

CLI fails when there is no assets folder

Trying to compile a module using pack.js fails with an error, while compiling the same module with the GUI (from npm start) succeeds and generate a valid Encounter+ module.

Minimal working example

my-module folder with one test.md:

# Test

Just a test page.

With CLI

$ ./pack.js /tmp/my-module -n 'My Module'
processing path: /tmp/my-module
module: My Module
/tmp/my-module/test.md
<h1 id="test">Test</h1>
<p>Just a test page.</p>

internal/validators.js:125
    throw new ERR_INVALID_ARG_TYPE(name, 'string', value);
    ^

TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received type undefined
    at validateString (internal/validators.js:125:11)
    at Object.join (path.js:1147:7)
    at Markdown.process (/home/cffs/devel/module-packer/app/parsers/markdown.js:138:31)
    at Object.<anonymous> (/home/cffs/devel/module-packer/pack.js:27:8)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)

With GUI

Using the GUI works as expected. Console output is as follows:

processing path: /tmp/my-module
module: My Module
/tmp/my-module/test.md
<h1 id="test">Test</h1>
<p>Just a test page.</p>

505 total bytes
FINISHED

Workaround

If I create an assets folder in the module, then it succeeds both ways.

The Name and Slug page settings are not used when creating pages.

When creating entries in module.xml for pages, the packer is using the filename to create the name and slug for the page. The Name and Slug specified in the markdown header are not used.

When creating a file for the 'Alabaster Sierras' region on the continent of Tal'Dorei, I created a file called 'taldorei_region_alabaster-sierras.md' to help keep the vast number of pages nominally organized. After the build, I checked the XML and noticed the following.

taldorei_region_alabaster-sierras.md
taldoreiregionalabaster-sierrasmd

It doesn't look like the name and slug are being used at all.

Advanced.md Additions Request

Two requests:

  1. Add information on how to enable the preview in VS Code to use a custom.css file.
  2. Add how to link to a heading as an anchor within a page. Saw this referenced in discord.

Incorrect header style in default text block

Hi Jacob,

When inserting a title in a default text block, the result is not like the one in README.md.
The document default header Police/Size is applied.

> ### HEADING - IN BLOCK QUOTE
> Some text 1
> Some test 2
> Some text 3

Thanks !

Error "Cannot read property 'children' of undefined" when building module.

Building a module with the attached markdown results in the error: Cannot read property 'children' of undefined

---
name: Appendix B - NPCs and Monsters
slug: appendix-b-npcs-monsters
order: 7 
module-pagebreaks: h1, h2, h3
pdf-pagebreaks: h1
footer: 
hide-footer-text: false
---

# Apendix B: NPCs & Monsters

```Monster {.two-column}
id: 2c011c22-0f0c-4cc8-95de-9f53a9b89df5
name: Evil McEvilface
slug: evil-mcevilface
size: Medium
type: humanoid
alignment: neutral evil
ac: 15
hp: 30 (10d6)
speed: 30 ft.
str: 17
dex: 13
con: 12
int: 10
wis: 6
cha: 8
role: enemy
saves: Str + 2
skills: Stealth +6
vulnerabilities: radiant
resistances: bludgeoning, piercing
damageImmunities: poison
conditionImmunities: poisoned, petrified
senses: darkvision 60 ft., passive Perception 9
languages: Common, Celestial
challenge: 1/4
environments: forest, grassland, hill, underdark
image: Monster.jpg
token: MonsterToken.png
traits:
  - name: Smells Bad
    description: The Evil McEvilface smells pretty ripe. This doesn't do anything to the party, but makes unarmed combat and grappling far less pleasant.
actions:
  - name: Novelty-Sized Plunger
    description: "Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 7 (1d6 + 4) suction damage."  
  - name: Open-carry Trebuchet
    description: "Ranged Weapon Attack: +5 to hit, range 80/320 ft., one target. Hit: 7 (1d6 + 4) bludgeon damage."
reactions:
  - name: Indignant Glare
    description: If the Evil McEvilface makes a successful spell saving throw, the Evil McEvilface glares at you disapprovingly and you feel shame. Your next ability check must be rolled with disadvantage.
legendaryActions:
  - description: The Evil McEvilface can take 1 legendary actions, using the Explosion option below.
  - name: Explosion
    description: "The Evil McEvilface suddenly explodes doing 1d20 damage to all creatures within 10 ft. This kills the Evil McEvilface."    
```

Create an alternate method for pagebreaks to account for alternate use cases.

The current method of creating page breaks based on heading is a great feature, but it has some drawbacks that are not easily worked around. The problem arises when you want to pagebreak for organizational reasons, but do not necessarily want to change the heading style.

The Campaign Manager module I am working on makes good use of the pagebreak feature for the geography pages like so:

continent.md
Continent (H1)
Continent/Region (H2)
Continent/Region/Feature (H3)
Continent/Region/Roads (H3)
Continent/Region/Settlements (H3)

For this to work, the styles for the H1, H2, H3 are all the same. H4, H5, and H6 are then used on pages to break up content without pagebreaks. This approach works well enough if the content is relatively static and isn't going to be changed by users very often. It causes problems though, if some pages in the module are intended to be edited regularly. Users expect to use headings in descending order and would not expect to find the H2 looks the same as the H1.

I believe we need an alternate method for creating pagebreaks in the source markdown. Based on some basic research, it would seem that Markdown does not have a native syntax for inserting a pagebreak, but perhaps we could create our own implementation using styles. I'm thinking we could use the syntax for a horizontal rule and add styles for the following scenarios:

---
<!-- {hr: .pagebreak} -->

Inserts a simple pagebreak that does not automatically nest. The next pages is created at the same level as the previous page.

---
<!-- {hr: .pagebreak, .nest} -->

Inserts a pagebreak that automatically places the following page under the previous page. (I'm not sure of the proper syntax for multiple styles.)

An approach like this would eliminate the issue described above as well as the issue of pagebreaks for the print to PDF feature. I'm not sure if this would affect the cover image styles.

PDF generation library

I was wondering if you could have the pdf show outlines like the players handbook. It would make it easier for people to jump to the page they want, instead of scrolling all the way down. I know a lot of people will be requesting this in the future.

Screen_Shot_2020-10-26_at_1 08 18_PM

Two columns display

Hi Jacob,

Is it possible to have a 2 columns text display ? Like in the PHB and other WotC books ?

Thanks !

Security Warning: Package Bomb

When I try to compile I kept getting Bombed. I was able to trace it back to the Winston package. I think it might be one of its dependencies. After removing it from my forked repo, the bomb went away. The modules still work, I just get nothing in my terminal of its status. This similar issue. My computer run out of ram and crash the operating system. @jacobjohnston, as you can tell this is a high risk.

What the bomb looks like (the craziness continue for thousands of lines):

Screen Shot 2022-01-09 at 3 32 47 PM

The last few line before my PC crashed:

|    
t̷̡͉̫͈͚͚̮̼̼̞̖̯ͫ̽͆̀̂̈͆̐̉̀͊̀ͥ̒ͤ́́̚ͅȇ̛̦̜̤̤̖̙͚̩̺̥̙̤̟͔̱̬͖̠̻̤̺̺͓̮̙̟̪̘͖̙͕̘̣̫̪̘̗̪ͭ̄ͪ͂̈͒ͩ̓̿̓̍̈̀́̿̒͟͝͞ͅs̡̛̛͕̫̦͚̞̼͕̲̤̰͎̤͈̠̣̬͚̟̝͕̱̗͓̝͎̣̟̯̹̭̣͍̟̩̱̞̜̖͇̘̻̎̑͆̃ͦͥ̅͌͗ţ̵̨̱͈̺̖̣̺̱̗̉ͩ̏̆̾ͭ̓̏́i̵̢̢̫̲̭͇͇̙͙̩͉̤͚̤͙̭̫͚̲̮̦̭͚̯͎̭͕̪̹͚̬̣̻̯̱͖̮͎̟̪̝̮̩̮ͤͩ̾͗ͬͤ͐̏ͯͦ̍̿ͩͧͧ̕̕ͅn̸͍͖̟̪͖͚̘͈̬͚̞̳̘͒ͮ̂͑ͬ̎̈̑̾̚͢ͅg͈̤̳͍̖͔͚͚̭̦̘͖̟̗͖̲̞̤͉̺̩͓̲̬̯̼̩̽ͫͫ͌ͭ͌ͣ̇̋̇͗̚͘͘ ̸̉̾͋ͮ̌ͫͮ̒̽̈ͪͦ̓ ҉̸̕ ҉̙̮͔̲̤̙̥͔̫̠̞̱̲̬̘̠͙͕̗̦̖̮̳͓͖̼͓͚͖̞̺̠̠̦͖̗̙̤̲͚͎͇̹̙͎͔̤̖̹̖̬͕̳̗ͅͅͅt̷̳͍̝̬̠͈̩͖͓̳͖͓̯̳͎̪̻̗̦͈̥̝̬̹̳̪̮͈̼̤̬̪̤̲̺̖̼̤̬̹͉̠̼̱̹̙͚̘̝̘̺̥̯͇̟̰̞͔̮ͣͮ̾̾ͤ̆̀̌͑͐̽̽͑̚͟͞ͅe̷̵̛͙͍̗̥͔̲̩̼̰͈̹̘̯̫̼̘̘̳̣̣̟̩̱̟͇̱͇͙͈͓̞̰̠͓͔̪ͮ̓ͯ̒ͪ̐ͩ͊̿ͭͥ̉̀ͨ͆͒̽̀͟s̶̙̺̫͕͖̘͈̭̼̤͐̽̔͐̓̓ͣ͋ͥ̃̾͂̂̇̈̇ͬ̌̓̀̀ͅt̶͔̗͎͓̰̫͎͕̫̘̬͚̥̯̝͚̔̿̈̀̃͝ͅỉ̵̵͖̭̫̮͚͓̣̹͉̺̬̰͈̘̳̣̙͈͖̻͍̏̿͑̿̅̇̒͂͑͑ͩͥ̋͒ͫ̍͠n̸̡̥̞͖̮̱̮̬͔̙͙̼̰͚͙̏̇ͣͩ̓͒̐ͩ͝ͅg̸̠̱̼̬̙̰͈͓̠̖̫̙̜͈̙͎͕̬͔̺͕̳̻̳̯͇͓̣͈̬̺̰̠͚̣͖̬̙̠̭̮͈̜̠̬̪̰͔̝͇̭̞̼̲ͦ̽̅̇́͢͞ ̛̛̙̰̥̙͓̹͈͓̳̖̰͇̩̬̬̘͈̔̈̊̉̎ͬ̃ͮͬ͒̀ͤ͒͟͢t̨̠̮̩̩̠̫͔͚̮̞̦͓͚͈̝̪̦̲͕͔̜̠̳̩̗͙̜̦̰̭͔̘̬̞̙̭̭̣ͧ͌͆̆ͭͫͦ͢͠ͅę̵̢̫̣̥̳̖̲̫̺̱͓̩̦̩̥͉͕͈͓̘͉̦͎͇̝̞̤̤̜̹̤͇͈͈͓̙̜̮̬͎̰̙̣͚̜̬͙͈̪͖̞̰͚͍̯͕̠̹͈̟̲͔ͦͫ͑ͬ̉̏́̂̐ͫͦ͋̎ͭ́͘ͅͅͅs̷̸͇̜̯͕̪̘̻͖̗̪̱̍̈̋̏͒ͪ̓̅͘t̛̟̻͔̫̻̪͇͕͙̞̻͍̖̱̙̥͍͖̩̜͈̙͙̝̹͎̮̫̤̜̫̻̻̻̰̠̙͙̥̖̝̪̖̝̘̱̬̥̣͉̟͖̖̤͔͈̜̩͕̰̬̰̖̝̯̑̏̔̓ͯ͘͡i̴͈̘̻̞̦̠͎͙̣̞̭̞͉̘̹͚̭̪̯̗̳̹͍͍̠̳͖̼̠̫̱͎͈̺͙̖͍͚̠̞͚̯̟̺̯͓͓̜͎͉̠̦̝͓̖̠̭ͩͧ̉ͫ̈̍̒͆́ͅͅͅͅň̷̛͕̲̞̖̻͉̻͍̤͓͈̬̲͎̜͕͈̻̼̺̺̭̰̭͇̠̘̩͇͉̺̱̺̹̝͙͔̟̤͔̪̤̟͍̥͉̯̹̬͚̩͊̀͂̂̇̅̽ͪ͊̒ͪ̃͂̎͂̑́̀̀ͅͅģ̳͈̘̜̟̣̘̺̀ͤ̍́̋̓̕ ̛̥̤̲͖͈͈͕̹̤̺͇̥̬̬̭͉͕̜̙̼͖̩̖̥̯͕̲̟͖̞̙͔͕̜̫̩̙͍͇͉̩̝̬̤̰̯̭͎̟̏ͬ̊ͧ͜ͅt̸̴̢̰̯͚̱̱̻͍̮̺̗̫̩͎͇̩͙̘̠͉̜̗͉̰͔̠͈̙̖͉̺̗̳̯̻͔̪̲̣̟̜͕̲̙̞̪̭̝̘͕̻̻̼̠̳̫̜̙͐̎̉̇ͦͅͅẽ̛̝̥̻͉̺͕̎̍͗̽͑̆͛͒ͪͫ̃̓̏͗̌̔̚͘͜͢s̵͗̓ͦ̉ͣ͐́͠ ҉̖̞̠̻̝̻̳͓̤̮̯̘͚̙͍̘̺̗̣̘̯̣̠̥̘̪͇̹̘̫̞͈͔͕̮͚͓̠̱̝̗͕̗͖̱̙͖̦̝̮̭̹̬̖̘͎̳͇̖͇͎̤͢ͅͅţ̶̠̝̲̭̘̩̜̙̬̥̻̩̖̳͐́ͥͪͤ͐͗ͮͮ̾̂ͥ̎̾ͪi͗͗ͦ̔̑̉ ҉̧̣͚͔̭̟̰͇̳̲̲̭̹̜̥͓̯̞̬̖̞̱̦̪̝͕̝̟̜͉̖̙̦̼͕̣̫̫̣̮̳̻͕͔̝͝n̸̛̩̫̙̜̹͖̬̲̤͓̊ͯͥ̑ͤ̓ͪͦͭ́͟͞ͅĝ̭̖̳̙̱͕͉̥̟͔̙̩̺͔͎̠̭͕̥͕͖̱̞͇͈͍͖̖̺͓͚̲̝̰͖̫̙̮͈̠͈̜̫̳̦̗̞̠͚͖̰͈̭̬͈̔̎̐ͫͥ̃̊͋̅́͘ͅͅͅͅ ̷̢̢̮͖̗͙̻̖̗̫͙̩͎͈͖͈̫̩͔͓͙̘̯͖̟̙̂̑̔ͩ̄̿ͥͬ͐̀̅̓̿͑ͯͮ̚ẗ̴͕̥̲͙̺̼͇̜̗̱̲̰͉͖̳̹͔͙̫̻̣̗̯̫̙͙̰͉̺̝̩̞͎̮̠̺͓͓͓̠̯͉̞̪̠̭̤͉͉̼̮̦̖͍͓̝̝̓̈͑͊ͥ̿̓ͣ̔̊́̈͗̑ͭ͆͡͞ͅë̷̸̥̠͎͔̰͈̘̥̙͎̻̬͉̗͍̟̺̫̮͍̩̰͕̹̺̝̬̪͍̼̞̥̦̤̣̪̞̺̜͓̠͈̰̞̦̝̺̠̤̭̜̮̟̜̘̲̥̮̠̰̤͔̩͈̦͋̒̓ͣ͜͟ͅs͐̓͌̓̓͊ͣ̑ͭ͌̚ ҉̢̟͍̭͍̜͇̠͓̙̫̟̙̪͙͇̱̱̝̞̰̟̣̪͓̖͍͇̻̼̳̬͈̜̞̖͈̠̦̹͙̰͎̲̺̞̱̬̖͚ṭ̞̭̫͕̱̰̹̱̦̯̤̲̮̖̤͕̰̹̖̩̘̙̹̖̖͕̞͔̳̖̤͓͖̤̞̟̠̲̙̣̖̬̬̥̺́͛ͥͦ͟͠į͈͎̳̱̝̭̦̥̦̥̅ͮ̀͑̋̒͛̌̿ͦ̃̈̀̚n̷̶͔̠̳͕̺̮̺̠͍̠͖̥̩̖̻̲̱̰͉̦̬͓̫͖ͪ̉̐̒ͣ̊̓͂͆ͦ̒̍̿̀́͘g͐͗̔͑̔ͣ̔ͨ͆ͭ̉͒̒ͮ̏͂̃̀͡ ҉̡̛͉̤̫̮͓̣͎̝̺̣̲̱͓͍̫̪̬̥͚̤̪͎̜͎̮͕̜͎͕̥̣̗̜͡ ̡͖̝͕͈̯͈͚̲̗̞̺̘̫̰̗͖͔̦̫̠͕̼͍̭̙̱̹͍̲̻͖̟̮̱̗̙̯͍̰̹͕̯̭̪̟̤̟̭̪̥̙̲̝͐̌̈͑ͩ̆ͤ̋̋͜t̸͈͓̣̘̬̮̦͎͖̮͔͍̖̪͚̫͎͔̣͙͕̭̜̤̣͙̦̠̙̤͈̬̬̳͓̜̳̹̳̙̺̳̪̭̖̣̪̣͚͖̱ͥ̿͋͆͟͡͠ͅͅͅȩ̶̵͎̪̟̦̩̖̙̣̘̭̩̜̮͔̘̠̙̩͍̬͕̗̖͔̪̞̯͉̪͈̩̼̥͚̹̠͈̩̤̰͎̔̍̆ͧ̉̈̉̑̽ͮ̑͟͠ͅṡ̶̢̡̫̝̦͈͓̼͙̺̜̲̹̹̘͎͙̗̖͓̥̼͍̗̦̠͙̩̩͈̤̻̼͓̯̳̣̖̱̱ͥͣ̓̇̊ͤ̉̾ͧ͌͋t̨̛̛̯̦͔̝̤̻̼̳̖͎̺̣̜͕ͬͧ͒̎̽̊̈̑̑ͨͦ̓͊̓ͫ́͢ͅi̡̢̛͎̞̺̞͓̫͎̗͙̹͍͉̠͓͎̙͚̬͉̥͉̰̰͖̫͙̣̝̲̙̞̲͔̟̮̬̩̬̼̰̩̜̤̗̫̠͈̭̞̗̰̱̲̰̣̬̖̠͖̯̽ͪͫ̐̀͞ͅņ̭͍̼̱͕̗̮͎̪̟̭̫̫̼͉̎̔̊̅̄̇̆͂́̏́ͬ́͡g̸̨̥̫͖̘̩̜̹͚̟͎̞̦̜͚͚̺̞̱̬̺̰̮̻̰̱͍̝̱̘̬͙̦̼̭̱̗̜̬͖͉̙̔̆͆̄̓̽ͭͥ͒̈̉̔ͭ͢͡ ̧̦̰̭͈̫̤̙͚̜̖͎͙̜̯̻̪͇͕͈͓̞̪̩̩͚͍͎̦̞͚̥͕̺͉̖̖̦͔͎̤̥̺̞̮̼̔̀̆̅̏͑̐̌̀̓͌͝͝t̩̣͈͓͍͇͔̬̪̃́̒̃͒͆́͘͟e̢͚͉͔̹͙̯̹̰̳̭̘̦͚̟̙̖̦̞̬͓̼̣̖̤͖͈̭͍͔̯͓͚̣̝̭̯ͩ̀̏̇͋͂͢͢s̷̸̳̙͇͍̹͓̣̺͚̖͇̗͚̳̣͇̮͙͓̺͈̤̱͍͙͇̲̦͓̹̘̙͚͖̫̝͉̼̑̽̋̈̓͛̎͌̈ͬ̉͆̀͠t̵̛̺̠̭̜̗͓̘̘̫̜͉̬̲̱͍̻̺̰̝̭̼̤̬̜̗͎̥͖̮̩̠̺̱̞̣̪͇̙̩̘͇̰̗̹̼͖̗͔͈̠͇̬̘̬̭̼̤̟̠͍̹̺̰̩̙͒̽̔̑̃͌͐͂̎ͭ̎̚͞ͅͅi̷̹̹̜͉̱̬̳̪̜̤̫̱̱̖̫̹͍͕̖͙̗̲͙̱̗̮̟̭͓̩͍̰̗̣̻̩̓̒͋̃͋̍̀̅̍̇̉͠ͅn̷̼̫̻̟̱̻̞̥̣̮͙̦̟̥̞̥͓̠̩̙͔̭̗̫̣͚̝̖̹̭͇̞̖̬͇̖̝̞ͩ̐̀ͩ͝g̸͕̬̬̰̠͔̮͍̲̞̮̘̰̘̬̬̬̯͍̱͓̱̫̳͕̮̠̬̻͍̞͔̰͖̦̞̙͓̩̬̞͉̼̝̭̲̰̠̱̙̖̫̫̱͍͉̘͖̅ͣͦ̾͒͐̓̽͛̋̃͋͟͢͡͡ͅͅͅ
ṱ̵̵̪̜̻͎͖͖̼̼̗̰̘͖̭͂ͩ͌̾̍ͣ̂͒̊ͯ̓̓̍̓̓̍͂̾ͨ̀͡͠ë̡̨̟͓̰̗̱̹̤̩͓͈̘̳͈̭̖̹̙̝̯̰̼̩̙̼̱̱͚̺͖̪͚͈̺͎̤̥̰̘̤͉̫̜͚̪͉̯͓͇̠̗̪̫̝̱̥̖̱͎͇͂̍̅̎̚̕͢͡ͅṡ̶̶̵͖͍̬͕̥̜͖̫̹̲͇̮͖͔̬̳̗͖̺̣̹̪̮̣̝̪̭͈̹͕̮̱͎̟̰͖̘͈̙̤̙̯̟̙͉̹̲̗̠̰̰͈͈̱͓͍͉̗̱̱̠̹̘͍̼͎̖ͨ͑̀̚͢t̤̘̗̹̞͚͚͙͔̲̯͖̬̥͚̣͉̳̟̠͚̼͓̱̲͈̰̖̳͕̘̟̩̆̅ͧ̽̒ͨ̅ͤ̓ͥ̏̑̌͒̿ͫ̑̎̚͘͢ị̧͇͉͈͚̱̹̞̮̲̼̙̫͎̟̥̳̱̪̗̮̤̜̹͍͈̘̺̫̖̗͔̪̖͓̺͎̺̰͇̘̳͙̪̜̠̦̳̟̈ͩͨ̏̈͂̽ͮ̍ͦͬ̒̏͞͞͞͝ͅn̴̴̯̹̬͓̠̣̞͓͈͕̤̗̭͈͎̳̖̟̱͎͓̣͖̯̘̥̜͎͚̼̩̬͖̮͍͓̲̞̣͎͈̪͇͍̦͙͈̲̯̎̈ͫ͋ͧ͛ͮ̌̀̅̇̑ͦ̆ͨ̔́́͝ͅͅg̸̨͌̋̀̎ͨ͑͆͒ͣ̒͌̿̂̒ ҉̫͈̣̙͇̰̱̜̻̮͈̟̯͇͇̦̦ͅͅ ̢͙̪̟̰̻̮̖̜̱̬̣̖̟̫̼̲̱͉̯͉̝͎̟͍̗̝͉̩̫̝̞͈̺̰̳̖̘̪̭͚̻̥̼͓̳̪͙̲̣̫͚̯̹̗͈̈ͤ̂̓ͨ̎̌̅͟ẗ̢̢̤̫̼̹̠̝̹̹̳̳̼͈͇̤̼͉̲̠̙̜͔̱̳̱̰̺͕̝̘̯ͪ̊͑͒̂̍ͩ́͢e̵̲̤̟̼̪͚͔͎̼̻̜̥̺͕̟̤͙͕͓̹̗͔̘͙͕̩̰͉̱̲̪̲̪̠̦̩̘̼̤̖̭͇͙̬̖͓̙͈̹̱̝̰͉͎̞̩͙̯̻̟̪͕͇̎͋̈͊ͧ͛̇͊̔͜͝ͅͅͅs̴̢̟̯͇͉̱͉̟̩͉̳͈͖͍̭̲̥ͫͪ̓̀͗ͮ́͟͝ṭ̴̡̡̡̨͈̜̝̲͖̞̙͚̥̜̤̰̗̺̻̻̮̰̠͉̯͈̩̱̥̲̻̰̗̦̞̺͎̮͈͙̝̩͙̼̹͖̪͙͎̩͙̣͙̙̻̰̥̩͖̘̳͕̼̑͛̎͑̚ͅͅͅi̷̢͎̱͍̠̪̞̰̖̘͍͚͈̯̩͖̙̺͔̲̝̱̤̪͖̙͕͔̗̼͈̬͙͉̟̗͚̗̽ͭ̓ͮ̄́̌̂͌͟͞ͅń̥̻͇̞͉͕̠͇̼̦̖̦̗̯̤̺͕̭͈͖̻̣̰̟̖̣͇̹̤̤̩̝͇̲̯̦̝͇̃ͨͪ́ͭ͌̊́̚͜͠͝ͅgͮͪͨ͋ͫ̂̏͌ͬͥ̄̔̽̇ ҉͔̰̞̹̞̱͙͔͎̠͍̤̯̫̮̲̪͙̮̟̼͈͙̩̼̹͎̱̣͈͎̯̥͖̯̠̹̦̲͇̀͠͝͠ͅͅͅͅͅ ̪̖͚̘̞̝̩̟̖̻̥̞̭͇̮̮̭̗̞̭͖̹̗̻͔͔̼̥̱̪ͫ͌̊͛ͬͮ̉̆ͣ̆͋̂ͤ͆̑̿͟͠͡ͅͅt̴̥̥̝͖̯̱͖̪͉̳̥̩̦̺͔̝̝̲̤̺̺͖̮̻̝͕̩̩̮͎̞̻̯̮̗̟͖̦͉̤̗̪̬͎ͦ̍̌ͮ̈́̓ͯ̋͛͐ͥ̊ͣ̚̕ͅe̵̷̴̺͉̲̬͚̼̝̫͖̠͉͎̖̪̠̞͓̘̩͖̮̬͎̞͓̱̩͈͈͔̭͈̙̟̭͖̘̪̘̗̲͚̳͋͑ͮ̃̈̆̔ͥ͂ͯ͗̇̽͒͊ͫͮ́̚͠s̸̬͔̼̟̫̈̅͐ͪ̿̌ͫ͆͢͞t̨̨̖͉̲̦̤̻͚̤̼͉̻̮̹̬̺̪̅̏̐̆ͩ͋̈͑ͩͤ̎̌ͭ̈ͦĭ̴̫̫̫͙̦͕͕̜̳̟̮͎̭͓̼̓̽͆ͣͫ̅ͣ͑ͥ̉̾͊ͮ̀͜͝͠n̷̖̱̯̜̞̥̦͙̙̰̻̭̭̣͔̟̬̤͓̺͍͔̹̦̝͇̙͙͍̺͔̩̝̭̭̬̤̠̣͈͎̠̭͚̻͓͎̞͈ͭ̇̾̈̌ͣ̑̋͐͐͒ͫ͞ͅͅͅg̷̷̸̢̞̘̦̤̜̻̲̦͇̯̯̱̻̩̦̺̜̼̣͍̺̝̣̩̭̱̖̥̦͓͉̜͈̜̩̟͕̝̭̯̝͖̹̪̟̦̩̳͕ͯ̈ͨ̂͒ͭͫ͟ ̨͓̯̺͇̥̠̣͇͍̟̭͇̟̼̺̞͓̦͕̬̣̟̝̙̦͓̠͓̩̻̥͓͈̻̩̪̱̦̪̝ͦ̌͋̎͆̒͐͜ͅt̴̥̳̗̥̞̭͍̯͇̱̙̥͔̞̭̝̬̱̭̹͈̲͔̲͍͙̜̯̼͔̮̤̰͖̻͔̰̞͈̤̝̭͈̟̘͙̠̹͇̹͖̺̫͓̤͕̼̙ͫ̿̈ͫ͂̀̓͊͋͛́͟ͅȩ̶̨̯̪̹͕̘̳͓͉͍̥͍̘͍̫̞̦̗̪̫̞̬̦̞̲̣̱̍ͫ̋ͯ̇ͣ̄̋ͨ̀̚͜ͅs͎̪̝̜͍͉͚̥̱̪̫̣͓̙͖̲̘͚̮̱̙̙̟̰̭̱̱̱͇͖̱̖͉̠̘͎̮̤̙͚͎̫̭͙̫̖͖̝̼͙͈͎͙͈͍̺̤̬͈̲͙͇̮̳̰͕̬ͫͥ̍̒ͩ̀͢͜͞ṭ̶̡͙̲͓̥̪͎̞͚͈͔̞͚̮͔̰͎̣͇̩͖̤̙͕̺̦̘̞̹͇̟̖̣̩̺͖̲̗̲͈̫͙̯͉̤͊͗̎ͥ͊́̒̌̿͂ͫ̈̆̾̐ͤ̑͠͝ͅï̡̬͉̖̪̯̙͊̋̑̊ͩ̑̔ͪ̓̕n̡̧̞̟̫̞̘͕͙̜̤̺̳̺̬̤̘̣̘̹̹̼͕̱̖͇͉̤͔̻̻̮͍͎͓̜͎͔͔̞̲͈̥̳̪͙ͪ́̒̋̅̾͑͛͆͌̓͊͡ͅḡ̵̛̲̖͍̫̙̪͓̩̮̺͖̗͔͙̦͇͇̙͇̯̻̙͚̹̦̹̙̳̥̮̬̭̱͙͕̤͍̣̙̫̭̖̯̝͕̬̣͚̞̞̗ͧ͆ͥ̆ͧ́̌ͥ̓̓͊͂́̕ͅ ̨͙̦̫̹̘̜̞̻͉͎͉͖͎̺̮͙̤͒̌ͭ͂ͪ̀̉̾ͩ̇̀ͥͨͣ̈ͭ͊̔͐̕t̰̟̠̞̟̣͇̬͕͇̤̪̙̯̼̥͖̱̺̬̳̗̺̻̤̤ͩ͒́̂͗̒͒̿̽ͧ̚͘͟͜e̵̷̠͔̻̣͍̭͈̲̣͖̹̪͔̰̹͎̞̺̖̻̭̖͈͓̠͓̮̖̞͈͙͚͓͖̺̤͚̳͓̙̪̜͔̦̪̩̓ͭ̆̓̃ͣ͑̅̊̑͊̚s͋͐̽̔ͥ̐ͫͭͮ̂̈̀́ ҉̷̢͔̗̹̤̦̳͕́͝ͅt̷̼̖̱̼̻̩̙͇̱̺͍͚̻͎̫̝̰̟͕̓̇ͭͤ̈͛͗̌̚̕̕͡͞ị̷̛̣͈̣̟͉̤̤̤͖̫̞̼̯͚̗̠̥̝̥̹̼̩̝̭̩̩̘̯̩̓̏ͮ̾̄̒̋̿̃̄̋͑̿ͯ͑͛̆͋͟ͅn̐̓̓ͬͬͮ͌̍ͧ̋̓̉ͪ͟͝ ҉̠̭̝̟̗̱͈̪̱̹͖̖͚̗̜̼̲̝̻̖̤̗͉̦g̿̇ͫ̒̅̓͑͗̐ͩ͋ͮͮ ҉̵̢̙̻̙̳͕̬̯͔̗̝͚̣̰̱̠͕̩̠͕͍͈̱̫̖͇͎͉̩͍̭̝̯͕̩͙͙̩̬̪͉͈̼͙͖͟͝ͅͅͅ ̱͕͉͚̫̳̣͔̥̻͓̣͈͉̣̤̹̟͙͖̫͓̲̻̟̱̖̤̮͍͕̘̝̼̘͔̼͕͈͓̮̗̱̲͖̹̝͓͓̦̣̪͕̹͇̝̣͇̼̲͔̜͖̣̥̍̽̐̃͗̇ͩͫ̇̋͗͋ͪ͑ͤ́͟ͅt̶̛̯̰̝͚̙̼̯͍̝̯̤̘̝̣̦͍̼̦̦̭̺̻͉̣̟̱̳̥̠̙̹̣̼̳͉̻͚͉͓͍͈͉̤͎͖͖̟̮̖͖̥̦̭̤̬̰̫̻̥ͯ̔̓̌͋̔ͯͮ͊͗̚̕͝ͅͅȩ̴̸̡͓̬̭͚̰͈͖͖̰͈̦̥͔̺̼̖͇̯̲̱̞̇̏̋͆ͣ̔̈ͯͯ̒͢s̡ͫ͛̂̇ͫ͒̃ͥ͆̋̿̎ͨ ҉̪̬̩̞̺̻͖͉͙̙̫̦̹͙̦̻̰͓̰̙̼͖̼͍̭͉͉̹̠̯̖͈͈̹̺̺͇̲̰̥͔͔̺̮̥͉̞̰͇̬̦͈͚͢ͅͅt͂͐̔̿͑ͭ̄͛ ҉̟͓̞̭̥̮̯̝͔̰̪͚̞͈̦̞͍̀ͅǐ̶̡̼͍̱̭̜̦̭͚̘̼͇̘̯͇̦̜̗̭͙̤̹͓̠̖̮͔̰̤̬͖̱̼̬͖̥̩̟͍̪͚͕̥̮͈͍̪̪͖̫̭̥̘̥̤̣̠̺̭̭͉͔̐̎ͮͥ̈ͭ̋͌̅ͥͯ̿ͅͅͅn̡̢͈̹͖͉̺͚̖͓͖̭̹̱̭͔̩̻̱̪̩̭̆ͬ͛̃ͥ̆ͤ̑̈̈ͫ̈̿ͅg̴̨̛͎̹̥̯̪̬̖̣̟̫̱͖̥̘͎͖̱̤͙̯̳̊͗̐ͮ͐ͯͫͅ ̸̶̣̬̦̥̻̩̱̳͇̳̝̖̮̹̪͇̮̘͈͙͍̗̹̳͍̞͕̗̥͔̝͖̤͉̗͉̻̒͋̊ͧ͛̓ͭ̓̆̎̅̍̓̔̎̈̚͜t̞̤̺͎̮̙̦̖̜̫̻͙͎͈͇͉̥̻̦̠̟̬͎̩̥̦̺̫̳͓͇̝̰͔͎̪̻̖̮̖̲̹̯̳̯͉̥͉̭̜̥͕̞̝̻̬̭̫͕̺̙̺͂ͫ̃ͨ̊̉̆̂̓̃͑͂͑͋̀͡ͅȩ̷̡̧̣̪͇͎͓͈̼̺̭̦̹͎̻̠̘̣͉͔̦͔̥̝̺͖̗̮͖̟͔̮̰̣̳̗ͣͤ̂͗ͬ̔ͮͣ͟s̢͙͉̳̰͓̻̲̝̫̺̘͔̭͔̪͇̣̗̗̜̻̖̮̭͕͈̻̜̠̩̩͉͕̞͈̟̻͖͉̪̬̪̙̟͖̹̟̯̗̭̺̞̻̫̪͖̱̦̔̅ͦͨ͗ͥ̓ͧ̈̈͌̊̓͆̿ͬ͋́̚͝͠ţ̷̵͚̰͚̣̭̯̼͙̥͈͕̹͈̗͎̰̩͉̼̖̣̭͖̺͇̠̣͎͈ͩ͑ͨͣ̌͜ͅi̧̫̳̞̬̻̱̬͓͚̰͓̯̦̥̝̜̝͔̩͔͌̂͒̌̉ͬͩ́̕n̷̴̼͈͈͖̲̣̯͙͙͙͔̦͓̗̞̱̖̫͇̠̠͉͍͕͇͕͕̳̗̟͚̪͍̼͎̖̦̔̾͆͛͐̌̉̆͗͛ͦ̓ͬ̏́̀̀͡ͅg̷̣̩̣̼̟͔̼̞͇͓̞͊ͤ̈ͪ̄̉ͨ͒ͧ̅̈ͭ̾͗͂͞͞
t̷̘̤͎͔̤̪̱͈͓̳͔̱̩̺̻̻͓̩̬͉̹̽͒ͥͯͣͫ͐͛ͪ̕͜͡͞ͅe̵̓ͤ͐ͨ̍̌ͣ̄͒́̚͞ ҉͈̘̭̳͈͍̹͓̘̜͎̫̮͙̥̟͍̪̰͔̫̮̭̰̥̻͇̭̜͍̠͟ş̡̭̯̘̱̯̬̫̝̱̜̫͖͎̺̗̮̮͍̗͎̺̼͇̞̪͎̘̝͎̺̗̼͈̙̤̟̣͙̗͕͈̤͙̫͚̗̤̬̭̙͚̩̹̻̺͌ͣͩ́͛̊̃̊͒ͫ͐̃̾̃͗̋́̄̚͜͢͡ͅͅͅṱ̸̼̻͍͓̝̼͖̳͖͖̯̠̱̯͇̱͍̦̯̺̣ͩͮͬ̐̈̕͢͢͡í̶̱̪̫̲̹̱̥̮̣̘͓͖͕͇̲͇̪̪̝͈̙̺͓̫̪̹̩̟̰̉͊̇̈̅̔͑̐ͫ̚͠͠ͅn̶̮̙̭͓̣̤̣̥̞̯͓͕̤͓̬̰̭̙͍̪̠͍̫͓͕̬̩̯͕̠̮̏̆͐̎̀ͫͪ̇̒̆ͭ̓̉̇͆̌̋̑̾͠ͅͅg̜̬̩̟̩̺̰̖͓̭̫̬͉͍͈̼͔̼̙̯̭̗̭̦̭̱̤͉̬̹̝͔̦͑ͨ̿ͫ͛̓ͨ̍̂ͤͬ̕͝ ̷̖̦̥̘̦̘̦̞̰͉̭̠̤̤̘̖͉̖̙̘̣̻͚̪̫̜̗͚̲̺̺̦̹̰͚̗̦͎̥͖͙̯͎̫̮̦͙̲͉̥͉͖̠̭̠͌̅̋ͥ͝ț̸̡̛̭̫̜̝͙̗̙̝̬͎̘͚̙̞̝̹̰̱͍̲̬̱̮̩̲̭̙͕̹̯̼̝̥͈̣̳͍̖̯͓̗͇̹̗̣̳͖̮͙͚̋̊ͤ͊̄͋̉ͤ̌ͥ̀ͅͅē̴̵̮͍̯͔̥̬͎͖̻̪̓ͯͩ̏͌ͧ̈̅̑̎̚͢͝s̨ͩ̑ͤͬ̏͌̌ͭ̈̂ͥͩ̑̈ ҉͈̤̤̫̼̼̥̰̞̻͓͈̭͕̖̤̹̻̫̫̠̗̮̱̪̫̦̺̜͇͢͠ͅẗ̶̨͇͔̘̮͍̪̬͇̳͈̙̼̘̻̻̫̩̗͎̾͑̇ͪ͒̃͂̔̋͝ͅi͌͐̀ͧ̌̃͂̂̆ͧ͒ͬ̋̋͑͋ ҉̨̛̛͓͎̞̣̤͍͙̖͙̼̦̱̞̜̟͍͙̠̰͕̤͍̱̟̖̗̬̲̺̗̬͔̠͎̭̟̫̺̘̰̼̼̼̯͉̬ͅṉ̦͉͓̖̟̪͈̳͉̯̳̰̱̜̦͚̱̲̖̞͔̹̥̯̱̝̳̥̮̠͉̲͙̒̽ͬͥͬ̒ͮ̃́̎ͣͧ̚̚͠͠ͅğ̼̪͉̞̪̼̺̯̲̬͎̠̳̼̥̙̯̗̘̭̹͓̠̦͇̼̗͓̜̘̦̮̻̘̬̙͙̥̙̖ͦ̐͆̀ͭ͋̄̀̕͜ͅ ̛̪̜͍̠͉̹̜̞̯̺͔͍͔̟͇͈̜͔͎̋ͦ̎͑̋͗̀ͧͤͮͬͫ̕ͅt̨̫̗̩̬̘̗̪͍͇̖͖͙͔̘̗͓̦̠̻͙̜̖̭͙͉̫͇̣̝͖̲̦̦̭̣͈͔͔̟̘͓̹̦̠̰͖̰͍͔͇̻͈̭̪̅̃͌̊͗̐ͧͧͩ͆̎ͧ̊ͪͫ̒͟͡͡ễ͓̩̙̭̺̼̣͍̮̖̱̘̦͉͉̫̪̖̞̠̇̂͐͢͟͞s̨̹̬̫̟̯̰̻̪̝̞̣͓̼̣̬͚̝͎͕̻͉̰͖̬̥͖̦̦̤͚̞͉̭̮̳̱̖̲̯̥̥̈ͯ̏͑̆͒͑̾̐̐͢͞ͅͅt̓͆̈ͧ͐̚ ҉̡͉͈̭̗̯̭̝̯̖͍̟̬̙̹̙̟̞̕i̴̧̛̤̰͕̞͚̭̹͍̭̞̩̦̝̠̥̣̬̮̹̠̥̫ͯ̌͒͌̈ͩ̅͗͠͞ͅn̳̫͈̱͍̻̩̫̖̩̠̺̠̤̦̖͍̠̖̼̬̥̺̱̟̘̰͙̟̙͈̘͖̮̓̃͌̾ͫ͟͠ͅͅͅg̴̸̶̖̩̪̫̟̜̻͚͎͕̫ͩ̍͂̍̋͂̍ͫͩͬͨ̆ͧͦ̽̐ͣ̕ ̵̭̟̯̭͕͇̻̦̳̭͖̅͂̃͗ͦͨ̒̉̐̽͊̇̉ͮ̄̍̍͑̈́t̛̔̋̋ͭ͊̿͟͠ ҉̘̭̥̣͓͖̙̮̪̦̖͈̰̼̱̥͙͓͇͖̹̬̲͖̣̙̱̥̳̠͚͕̠̙̭̪͔̝̯̝̺͔̳̣̘̲̱͔̻̫͔̣͍̤̭̲ẽ̓̋̃̍̊ͬ̊̋̇̿̌ͧ̂ͣ͞ ҉͔̼̲̯̫̫s̶̷̢̛͎͙͉̘̬̜͎̯͍̥̠̘̝͎̯͔̻̣ͫ̔͗̇̽͂̌͟ț̸͓͔̹͍̳͍̳̠̝̬̭̹̩͎̹͕̪̥̤͍̬͙̖̪̥̹̭̬̘͎̩̬̪̔ͦ̄̄̐̒ͩ̾̉ͣͦ̒̑̔̇̈͒̚͞ͅͅi̵̧̜̮̭͙͇̥̼͕̪̫͚̝̼̰͍̻̼̤̻̲̣̭͚̪͖̼̯̞̩̠͉̣̙͔͚͓̘͎̻̦̦̭͒̉ͯ̅̇͋́̏̃̓̆̍̀̄͂̑n̴̷̢̨̥̳͈̻͚̟̝̻̗̩̦͔͎̬͎̩̩̘̟̦͈̫̭̭̤̻̮̰̬̩̺̞̫̫͖͔͍͚͖̰͙͓͇̮̹̹̎̉̊ͩͮ͒̇͆ͫ̂̐͊̈͐̇̉͌͢g̨̛̙̠̣͖̪̯͇̗̠͈̦͓̪͎͔̜͎̤̲̜̘̺̜̠̟̱͔̫̯̜̜̝̗͎͖͖̯͙̙̯͍̤̻͕̻͎̘͎͎͓͎̺̳̗̟̭͔͍̯͆͒̊͆̿ͯ̒ͣ́̀́ͅͅ ̸̶̛̱̣͇̜̭̬̗͙̖͓̱͖̫̭͓̝͈̩̹̥̰̥͓͍̻͇͍̮̰͓̼̗̫̜̤̫̣̯͈̬̺͈͎̙̰̜̳̻̥̲̦̣̺͍̬̻̝͕̲͙͕͇̱͙͒ͤͯ̈̅ͥͨ̚͞ͅͅͅt̷̢͕̩̖̜̼̃ͭ͗̎ͭ́ͭ͑ͭ̿́͊͌̀̀͠e̹͇͎͕̗͖̜̼̘̤̘̮̟̟̙̣͇͚̜̮̬̱̝̠̣͚̺͕̞͍̱̳͍̺̥͉̥ͮͮ̾̏͛ͦ̄͒́̀̚͞ͅs̶̵̱̻̼̜̹̤̗̤̤̺͙̰̘͙̲̳̤̯̻̠̤͍̤͓̖͕͉͈̖͚̮͖̮̭̝͙̖̰̠͙̙̠̜̰͉͈̩̹̜̮̖̣͖̫̲̜͎̳͚͂͒͐͆͞t̵̷̝̝̮̼͎̯͍̗̥̪̗̤̘̮̣̙̲̙͓̥͔̯̥̱͚͓̥͖͔͇̹͕̗̪͇̟͕̰̮̤́ͦͨ̅͐̾ͫ̒̒̃̏͗̀͜͝i̡̯̜͉̪͖̻̭͕͖̰͖͙̱̞͙̟̘̝̟̠̗̘̺̬̰̭̲͇̜̫̝͓̮̬̳̜͇̩̼͉̠̟̤̮̗̤͚̖̪͔͙̱͔̰͋ͫ̈͆͊͒͟͠n̢̐̄͛̊̇̏͋̈̑̄̾̿̏̋͂̽ ҉̨̧̢̳͇̻̠̗g̬̳̼͍̭̹̬͉̭̹͇̩͔̭͈̣͙̠̟̱̰̾͌̿͂̊̀͡ͅ ̶̷̡̪̹̖̯͇̗̘̤̦͚͍̦̹̭̥̻̱̻̘̼͚̻͖̣̦͙̫̻͛͛̆̐͐̊̄ͯ͗͆̕͟t̿̀ͫ̂̿̏ͭ̿̓ͭ͊͞ ҉̬̬͉̠̗̖͚̜̩̙̬͎̹̹͕e̵͖̲̙̺̗͉͍̠̦̘̤͙̬͇̬͖̘̮̝͎͔̭ͪ̒̑͆ͭͫ̓ͫ̊ͫͮ̽͊͗͗͢͜ṣ̡̜͇͈̬̣̱̘͔̗̭̰̖͕̼̠̟͈͕̞̫͉̠̻̠̭̲̬͕̠͖̤͈̣͖͉̯͍̟̹̮͈͍̱̼̪̪͉̥̺̭̼͔͆ͣͧ́ͤ͒̂̅̍ͣͤ̉ͬ̀͜t̵̛̰̜͖̜̥͔͓̟̯̬͍͖͔̟̺͇̰̩͓͔̬͚̞͕̬͙͎̙͎̭͉̪̪̣͈͚̼̼̭̩̪̠̖̬̖̬̖̦̼̳̩̝̥͕̩͓̹͙̜̩͉͓͔̊͒͊̀ͮ̍ͥ̓͋ͭ͒̿ͧ̏̓̊͑̌ͦ͘͢ͅͅi̛̠̙͍͍͈̩͔̤̫̺̜̳̳̬̪̻̗̰̼͑̓ͥ̆͢͜n̢̜̮̜̳̣͉̙̻̹̰̣̗̰͙̭͒̅ͩͪ̀͢͞g̶̬͈͉̘̞̳͎͉̣͍̻̘̪̪̫̳̲͉̭͔̰̹̲̟̰͔͎̝̘̘͇͎̩͓̖̖̼̮̦̻͈̙̞̖̝̮̬̟͕͔̙̣̳̰̳̋̂͊ͨ̀ͩ̆̌ͭͩ̂̿ͤ̃̀̀͝͠ͅͅͅ ̸̵̤͙̩̹̳͙͕̗̗̥̜̱̪̜̫͉͎͓̜͈̮̹͙̗̘̟̻͚̝̤̻̲̤̥̦͓͎̹͚̦̺̺̹̆ͧ͆ͣͤͦ̓ͪͨ̓̑͋̂̚͘͝͞ͅț̛̹̙͕͎͍̥͓̱͈͓̯͙̥̰̺̥͇̻̪͔̮̺̯͕̰͎̖̥̽͋̓ͨ̒͛̏̊͆ͫͯ́̕ͅe̵̴̢̺̼̖̦̭̖͈͓͖̭̳̦̥̺̪̭͇̱̪̤͖̘͇̝̦͛ͣͤͪ͊̈̆͌͛̎̀̍̆̾̇ͩs̶̛̮͕̟̖͍̥̼͕̖̯̰̪̺̙̳̄ͫ̐ͫ̋ͤ̓͗͋͑̽͛̕̕͟ţ̷̀̐̂̑̾ͣ̈͐̋͊͋͊̇͡ ҉̸͓̮̹̗͎̯͓̞̮̰͍̣̝͓̰ͅͅî̷̡̮̝͚̯̫͚͓̩ͯ̑̽ͭͦ̅͂͋̂̉̈̽̐̊̃͟n͕̘͓̭̙̫̻͔̰̪̖͎̪̹̜̗̠̠̤͎͎̮̰̲̠͕̤̘̺̰̼͉̯͍̰̲͕͎͈̻̲̣̟̘͔̝̻̤͖̼̙̻̩̥̎̾̑̈͋ͬ̀̚͢͟ͅǵ̳͍̫̖̹͖̰̮̰͇̪̫͇̬̪͙ͣͯͦ̋̉̉ͮ̽̆̾̐̐͂̚͞͠ͅͅ
t̵̢̡̻͉͖̳͍̞͚͙̝͉͚̱̝̠͖̣ͭ̉̆̅̒ͥ̓͋ͮͩ̐ͬ͛̌̂ͬ̎͂̄e̵̴̢̝̣̻̗̣̙͚͍͚̺̠̫̳̺̮̞̣̹̭͉͚͚͙̪̜͖̟̣͋ͣͭͯ̿͛ͥ̆͑ͅs̶̡̟̞̱̬̱͙̻̬̜̱̗̜̼͕̟̦͔͈͈̝̝̞͓͇̭̬̝̝̜̹̲͇̘̳̥̝̻̤̳̪͉̻̦͎͚̖̟̘̝̗̪̻̝͉̻̻̼͇͔̪̘̺̝̗ͪ͌̈̓ͧ͊̽ͪ̚͘ͅͅt̴̞̥̦͉̙̺̟̯̣̦̼͓̭̮̝͕̭̺̗̤̭̥̯͇̗̘͔̮̖ͭ̈̑͒͛̈̇̆ͦ́ͅí̃̊ͤͬ̇ͥͧ̆ ҉̵̡̯͈͓̞̭͙̘̯̞͇̰̖̖̱̗͇̺͙̥̟̜̬͓̪͕͍̗̬̫͓̰̰̻͚͓̭͈͍̙̯̙̳̰̥̦̟͍̯̬̦̠̬̥̼̠͓̖̲͓̣̘͇̜n̸̥̮̞̭͉̼̤̪̱͎̟̥̥̞̘͕̗͇̗̱̘͖̪̞̹̟̝̮͖͙̤̖͚̘̞̫̤̣̱̰͇̹̖̩̼̠͔̫͉͉̮͇͔̲̜̻̼̝̿̒ͭ̃̊́͌͌̾̂͜͢͞͡ͅg̴̡̱̗͕̮̘̫̞̗̗̜̦͇̱̺̫̣̓͗̓ͪ͐̊ͧ̅̓̀ ̶̛͓̼̭͎̥͈̹̜̙̻̜̲̟͇͎̗̞͈̜͈̫͕̝̙̠̱̭̺̬̟͇̮̹̻̺̹͖̳̖̗͚̲͎͍͍̗̗̫͖̫͔̗͔̩̳̪͍̩̙̫͇̣͆̎̎͋̑͛̄̀͋ͨ̿̒ͅt̵̷̩̣̰̥͕̲̪͓̠͈̫̺̪̳͚̬͖̹̟̯͇̠̳̻̩̯̙̝͙̠̙̳̣̙̪͙̼̦̮̝̦̙̭̱̪̦̭̞̘̬̐ͧ͋̊̂̈ͩ͗ͩ͛̎̓ͥ̈̒͋̚̚̚͢͞ͅͅͅḙ̵̣͇͖̘̖̖̗̟̺̖̘͇̲͍̱͇͖͉̯̺̥̞͉̰̥̬̣̱͇͉̖̼̼̘̞̫͈̘̞̰͍̩̖̞̥̙̯͇͔͕̲̻̜͍̠̺̺̮̉͐̔̈͑̍̊ͥ͌ͯ̐̌̍͆̈͠ͅs̡͎͚̟̹͓̫̱̙͍̯̼̤̖̟̞͕̦̤̥͕̳̟̖̼̯ͣ̓̔̒ͥͯ̉̐̑̋ͣ͟t̪̹͉̗̞͉̺̘͚̦̯ͥ̽̀ͯ̔̄ͧ̌͆̋͊̄͗̑̀͡ͅi̵̢̢̫͈͙͇̫̪̭̘͈̹̳̝͈̘̦̻͕̱̥̲̰̲̲̲͍̩̬͙͕̬̲̜̺̦̙͓̼̥̞̘͚̭̝͙̼̪͉̳̮̜͔̱̼̓̈ͯ̏̇͐̽̐͗ͧͦͯ͋͐ͦ͒̕͡ņ̔̔ͭͧ̒̒̍̇̾͛ͦ̀͛̒͝͠ ҉͔̜̭̮͇͚̟̲̥̭̦͔̼̹̥͚͎̭̳̤̩͉̤̹̪͔̘̼̰̤̰̰͉̝̳̱̗̲͍̘̯͙̳̠͚͚͓͉̩̬̯͖̮̭̲̼̭̝͓̩̘̝g̨͙͎̱͉͕̗̤͔̟̬̟̖̞̻̬̭̗͕̭̞̠̖̞͓̲͇̳̥̝̭̬̭̩̰̮̠̤̙̳̭̝̙̺͕̜̥̬̙͙̭͖̖̰̏͋̊ͦ̍ͩ͘͡ͅ ̧̛̼̱̞͓̼̞̯̜̩̲͎̗͔͈̮̮̠̞͍͚͇̜ͬ͋̈̈ͭ̉̿̌̒̎̂̇̊̇̄ͅt̴̛̝̜̱̭̹̱̺̠̙̩͚̪̖̙̫̫̪͖͍͓̙̜̪̯͙̗̠̹̫͎͇̄̍͌ͯͭ̅́̑ͤͯ̉̑̚ͅͅͅͅȩ̨̩̖̮̰͎͚̳̱̜̘̥̣͇̙͇̘̪̪͈̭̯͓̲̰͚͙̼̭͔̣̣̝̼̥̩̲͖͕̤̪̖̮̺̖͓̙̳̗͉͐ͧ̎̿̓͗̾ͬ̏ͮ̑ͤ͋ͫ͗̚ş̸̔ͪ̔͑ͪͭͧͮͪ̑ͥͯ͊͒̍̂ͮ̚͘͘ ҉̺̯̞͍͇̭̱̫͚̱̱͈̩͈̥͖̣͚͚̯͚̪͎̻̻̝͍̖̝͕̥͍͍̤͙̬̭̟̘͈̦̻̭͔̣̤̩̙̩̼̪̞̖̝͚̠̹͍̲ṫ̨̯̠̜͇͔̦̯̙̘͓̝̮̘̠͉͖̳̖͖̩͈͈̳͎̪̩̰̫̬̞͙̗̭͖ͫ͋͐̄̎̊ͧ͒ͫ̋ͯ͑̏ͣ̈͝i̶̢̡͔̦̻̰̱̬̰͓̪͇̳͓͍̠̟̞̙̭̖͓̪̣̘̙̰͇͈͚̝̤̪͖̠̣̖̹̰̮͉͈̭̰̱̙̱̔̆́ͩ͌ͦ̃̑̑́̂̚ͅͅñ̴̨̢͙͙͕̮̭̭̰̦̹̥͉̬̯͖̘̻͖̮̲̙͖̒͂̈ͥ̌̂͂̄ͩ̉ͯ̾̒̏̃̑ͤ̄͠͠ͅg̡͆ͨ̉̂̋͊ͦͯ̾ͬ̇ͭ̾ͮ ҉̸̤̪̜̭̤̝̝͔͈͖̭͖̗̯̰̫͎̗̯̖̺ ̅ͪ́̐͊ͧͪ͑̾̊̑̃͌͐ ҉̲̱̖̪̺̦̤̥̤̬͎̰̣̻̕ͅt̩̝͕̘̙͚͖̗̼̣͆̆͗͛́͆́̽͢͜e̢̫̟̯̥̺̥̖͈̥͚̺̳͔͍͓̩̼͎̮̹̻͇͔̟͓̳͚͇͎̪̣̟̯̹ͤͨͨ̽͋ͯͦ͋̀̈̌̒̾̀͢͠ͅs̵̻̬̲̭̮̙̤̺̦̣͙̦͙̥̻͕̞̫̹̤̪͍̦͍̲͍̗̹͔̫̯̩̦̥̝̙̣͙͍̫̥̬̣͈̤̎̉̊͒̍̇̊͗̏̉̇̀̚̕͢͞ͅţ͎̳͈̯̤͍̰̤̠̲̙̤̯̦̭̗̰̰̘͔̮̳̖̟̟̟̭̩͈̦̞͉̪̳̗̣̬̞̝̫̱̖͍͙̘͎̳͇̙̜̱͈̟̥͔̠̗͍̭̣͙͕̉̀̏̒ͫ̋͋̉̑ͪ͂ͯ̀̕ͅi̶̧͇̲͖̥̖̜͉̬̟̟͙̼̪̪̤̦̫̦͓̺͙̦̦͔͕͎͍͈͖̗͉͔̠̤̪̻͉̟̼͚͎̭̤̤͓͕̙̪̻͇̣̪̞̻̩ͬ̋͋̊͂ͅͅͅn̵̡̧̰̩̥̣̰̳̤̯̰̣̺̳̳̟͚̭͙̯̱̖̦͈̖͉̺̦ͭ̔͂͊͡͝ͅg̷̸͎̜̪̺̭͚̩͍̤͙̖̰͕̝̗̫̮̰̰̘͔͔͓̗͖̤̙̭̻̱̞̦̹̠͚͉̣̠̺̗̺͙̟̲ͩ͆̿ͪ̂͐̈̏̆ͭͬ̽̿͐ͬ̌̎͗ͅͅ ̢̡̪̝̮͍̖̰̯̫̯̯͈̪̘̱̥̮̠̙͌͑ͦͥ̆̈̍ͩ̆̂̌͘͡t̷̷̜͔̭̺̑̾ͮͤ̄̐͌̒̌̆̆̓̓͢͟͠ȇ̶̬̬̣̞̰̼̞̠̻̰͙̠̝̞͖̖̖̞͔̪̝̮̤̝͔̥͈̠̠͍̙̣̟̺̱̱̭͍͖̗̮̠͖̺̲̣̹̳̻̰̭̟͙͇͈͍͉̘͓̲̺ͥͩ̋̒͒̋̔̂ͪ̇̿͐̇̾͑ͮ͗̚͟ͅͅs̢ͣ̀͒̾̓ͮͧ͂ͣ̾̂̀ͨ̾ͮ͂̆̑̐̕ ҉̴̡̞̩̯͍͎̬̜͍̞̩̥͇̫̼̤̩̤͖̹̫̳͇͕͉̮̰̼̞̹̜̻͙̭͙̠͇̯̹͓̯͔̤̟͈ͅţ̸̴̵̴̼̣̻̯͈̫͉ͫ̑ͣͣ̍̇̍̊̊̉̉͗̈ͩͅi̸̧̝̮̜͇̹̗̱̹̤̙̬͖͇̫͍͇̩̞̟͚̫̦̠̲͎̱͕̘̻̬͔̺̪̊̆̇̈̒͆̌̀̏͆͗̌ͯͨ̿͞͞ͅn̶̨͇͔̠̙͉̙̖̦̻̻̫͈̥̗̜̻̬͇̳̭̤͔͉̞͖̖̥̲̪͇̜̝̻̹̄̂̍ͬ̑́͢ͅg̵̶̷̨̤̱̹̺̙̬̫̭̲̱͙̘̝̫̜̳͙̙͔̼͚͈̺̘ͬͯ̇ͩ̀͑ͤ̈̿̎̓͋͞ͅ ̵̩̳̟̮͉̫̯̘̮͉͍͕͔͉̳͓͖̭̰̙̻̞̩̝̮̰̫͙̜͚̠̜̠̲͔̻̲̙͖̟͇͎̝̻̱̣̟̝͎̙̦̰͇̝̳̲̗̠̦͔̥̬̘͖̊ͬͮ͗ͧ̂̅̇̓̕͞ͅţ̧̱̞̻̤̩̝̫͇̥̱̳̺̙̮̭͍̮͖͖̩͕̹̱͙̝̘̩̩͉̳̲̗̳̹̜̲̲̳̹͇̟̙͔̹̘̭̺͓͖͉͈̫͙͖̝̻̲̼͎̫̦̘̦͍̱̃͛̆ͦͯ̽ͅę̠̯̩͉̙̬̙̳̝̘͔͍̭͚̗͇̺͇̝͖͉͔̗̯ͧͩ͊͗̅̀̉͌̾͐̄ͩ̚͠͞͡s̢͔̪̯̻̱̘͔͕͈̹̻͚͙̝̹͖̹̝̩̮̟͇͉̜͔͇̖̮͔̳̗̳͉͓̺̥̤̮̦̟͉͖̝̮̗̻̺͉̙̳̮̃ͥ̔̓͠t̨̫̱͖̩͎̝͎̫͍̱͈͎̺̰͍͇̗̥͈͖̤̝͓͈̫̺͉̺͇̜͓̩͚͔̱̺̮̥̝̞͍̬̮̰͚̣̼̻̘̝̯̬̗̭̤̪̖̟̦̻̲͑͂͆̓ͧ́́̕͝ͅĭ̵̧͉̖̦̗͉̙̼͙̙̼̹̬̙̭̰͚̻̩͕̳͍̹̟ͧ̽̈ͥͥ̒̑ͩͧ̑͘͜͢n̸̛̬̠̰̣͈̺̻̗͖ͭͣ̇ͣͣ̂͋̉ͣͤ̔͌͌ͫ͐̀́͟g̨̞̟̩̳͔̲̘̹̝̩̫̝̳̮̫͔̘͔̳̥͚̗͑̈ͨͨ̆̍̈ͩ̃͑ͤ̃́̀́ͅͅ ̵̴̷̡̦̘̟̫̜̱̤̣̲̠̭̼̰̗͈̖̬͕̝̭͙̼͍̥̤̭͕̼̦͙̘͙̜̭̦͚͇̼͚̤̝͇̫̭͖̥̮̟ͣ̌̃ͦ͌̑̎̄̽̚t̡̮̠̜̙͈̟͉͉͙̠̳̖̮͕͙̪͔̟̬̞̹̺͔̥͓̯͍̝̂ͭ̈̔̽ͬ͑͆ͤ̑̃ͬ̈ͤ̐̒͜͡͡ͅe̴͓̻̩̣ͩ̇̿̓̑͐͘ͅs̸̡̥̩͇͇̮̝̥͔̲̺͕͇͖͈͉̦̞͖͈͖͙̱̞͓̼͉̮͔͎̝̻̱̲̭̥̻̭͖͇̠̤̙̗̞̯̼͎̩̰̙ͧ̌̃͌̌̒͛̄̀̒ͥ̚͘̕͝ͅt̵̡̡̟̮͎̤͐̑ͩ͂ͭ̀̈̑̒͆̔͛̓̎ͪ͆̐͢ỉ̶̡̟̝͓͈̦̫͆͗ͣ̓͑̉̅̈ͯͮ̿ͥ͟͟͠ͅn̡̜̯̝̦̫͖̬͎͚̻̬͖͓̟̹͖͍̺̲̗͔̻̜̭̙͎̭̭͓͔̹̯̥̖̮͎̮̝̹̮̟̖̺̙̙̰͉̗̼͍̟̹̳̱̫̜̫̥̗̼̪͙̑ͮ̅ͥ͐ͮͬ̌ͯ͂̄̒͑͜ͅͅͅg̸͍̱̦̲̯͕͔̟͇̝̘̟̞̻̭̝̤̗͓̣͓̟̞͖͍̜̦̻̠̹̞͍͇͇̩̑ͣ̏͆̉̂̄̒̂͗̆ͩ͌̌̚͠

<--- Last few GCs --->

[1783:0x5440000]    31892 ms: Mark-sweep (reduce) 2048.0 (2083.4) -> 2047.5 (2083.9) MB, 2110.4 / 0.0 ms  (+ 341.3 ms in 78 steps since start of marking, biggest step 8.4 ms, walltime since start of marking 2504 ms) (average mu = 0.297, current mu = 0.159[1783:0x5440000]    35513 ms: Mark-sweep (reduce) 2048.5 (2083.9) -> 2048.1 (2084.4) MB, 3147.4 / 0.0 ms  (+ 59.9 ms in 13 steps since start of marking, biggest step 8.3 ms, walltime since start of marking 3212 ms) (average mu = 0.203, current mu = 0.114)

<--- JS stacktrace --->

FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
 1: 0xb00d90 node::Abort() [node]
 2: 0xa1823b node::FatalError(char const*, char const*) [node]
 3: 0xcedbce v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [node]
 4: 0xcedf47 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [node]
 5: 0xea6105  [node]
 6: 0xeb57dd v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [node]
 7: 0xeb84de v8::internal::Heap::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [node]
 8: 0xe7990a v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationType, v8::internal::AllocationOrigin) [node]
 9: 0x11f2f06 v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) [node]
10: 0x15e7819  [node]
Aborted (core dumped)

Enhancement: Spells

I was writing spells in modules and noticed that it doesn't support markdown in the app. It would be greatly appreciated if they had markdown/html support in the descriptions of the spell. As of now, they work fine for PDF generation.


PDF:
mage-hand-pdf

App:
mage-hand-app

Values of items are not displayed in Markdown

Hi Jacob,

When creating an item, all values set in md code are not displayed in preview.
It is visible even in the README.md of the project.

When printing to PDF, the items have not all the values.

Is it possible to view all values set to items (and also spells, etc...) ?

Thanks !

Ability to hide a group but process pages.

Request
Add a option called "hidden" a group to the "include-in" directive in a group.yaml to process and include any pages inside the group, but not display the group in the module.

Requirements

  • Any page contained within the folder must have a "parent" defined in the page header to be accessible in the module.

Use Case
When working with large numbers of pages, it is helpful to be able to use folders to better organize the files but retain the ability to use another page as the parent to those pages.

For example: My DM screen module has nearly 300 pages with many more to come. The UI will basically look like:

  • Home
  • Abilities
    • Strength
    • Dexterity
  • Combat
    • Actions
      • Attack
      • Cast Spell
  • Conditions
    • Blinded
    • Deafened

Being able to put files into folders based on their top level menu (conditions, abilities, etc) would greatly reduce the clutter in the module's root directory and make it easier to maintain.

Generate PDFs in A4

For those of us outside the US, can we have the option to export PDFs in A4 format (210 x 297 mm) as an alternative to US-Letter?

Add support for font-awesome

Please add support for font-awesome via markdown-it-fontawesome
Not sure if you want to include fontawesome directly, but this will at least allow one to notate it in markdown if they're including it in your project.

Exported Map's Background Image Not Appearing on iOS Import

First, this tool is fantastic for creating adventure pages to be imported on the iOS E+ app. I've recently added on the map feature for E+ and have been trying to export my map in the bundled module.

The map appears in the module and the walls are present when I switch to the walls layer, but my map's image is not properly importing. The iOS app is unable to import the generated .module file that is importable by the Mac app, so I've been importing the module.xml file inside of the ModuleBuild folder. I see the image tag in the module.xml and it matches the image that is included in the folder.

Any advice on properly importing the map images?

It's worth noting that the same occurs for me when using the Cultist Hideout example in the examples.zip file.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.