Skip to main content

Python-Markdown extension for parsing Iron Vault journals

Project description

ironvaultmd - Iron Vault Markdown Parser

Quality Gate Status Coverage Security Hotspots Reliability Issues Maintainability Issues Security Issues

A Python-Markdown (GitHub) extension to parse Markdown files from the Iron Vault (GitHub) Obsidian plugin.

The main idea for this extension is to convert Iron Vault markdown journals into HTML sites for publishing.

Features

Supports at this point

  • parsing ```iron-vault-mechanics ``` blocks (see below for details)
  • collecting frontmatter YAML information into a dictionary
  • regular and labeled wiki-style links, i.e. [[link]] and [[link|label]] (see also below for details)
  • user-definable templates for parsing the supported nodes

Supported mechanics block content

Disclaimer: This extension came into existence for my own purposes, to eventually publish my campaigns.

After old-school pen and paper, and a bunch of other experiments, I eventually gave Iron Vault a try for my most recent campaign - and I haven't looked back. However, this only happened in December 2024, so somewhere around Iron Vault version 1.88.1, and only with a Starforged campaign. Currently, neither journals created with an older version, nor OG Ironsworn, Delve, or Sundered Isles campaigns are supported, and results may be disappointing.

Mechanics blocks and nodes

Currently supported blocks within a mechanics block: actor, move, oracle-group, oracle, prompted oracle

Currently supported nodes within a mechanics block or any of the other blocks: add, burn, clock, impact, initiative, meter, move, out-of-character comments, oracle, position, progress, progress-roll, reroll, roll, track, xp.

Links

Links are currently detected and optionally collected into a list with their reference and label, but no actual linking is performed. To collect all found links:

By default, links are packed in a <span class="ivm-link"> element, but a link user template string can be defined to adjust that behavior - see the sections about templates for more information.

Roll results

Roll results of a move are collected, including dice rerolls and burning momentum, and the outcome is added as CSS classes to the enclosing move block.

User-defined templates

Nodes are parsed using the Jinja templating engine. Every supported node has a default template and gets automatically passed all available data to it.

The default templates for each node (and some extra elements) along with a description of the available variables can be found from the templates/ directory .

Each node template can be overridden when initiating the IronVaultExtension. See below for some examples. Setting a template to an empty string ('') will prevent the node from being parsed to HTML altogether.

Installation

pip install ironvaultmd

This will install the required dependencies, markdown and pyyaml, as well.

Usage

Quick usage to convert an Iron Vault journal Markdown file to HTML and print it to the terminal:

import markdown
from ironvaultmd import IronVaultExtension

md = markdown.Markdown(extensions=[IronVaultExtension()])

with open("/path/to/ironvault/Journals/JournalEntry.md", "r", encoding="utf-8") as file:
    print(md.convert(file.read()))

Check also the ironparser.py example file for a more complete example to write a given journal Markdown file as HTML file.

Links

import markdown
from ironvaultmd import IronVaultExtension, Link

my_links: list[Link] = []
md = markdown.Markdown(extensions=[IronVaultExtension(links=my_links)])

with open("/path/to/ironvault/Journals/JournalEntry.md", "r", encoding="utf-8") as file:
    print(md.convert(file.read()))

print(my_links)

Frontmatter

import markdown
from ironvaultmd import IronVaultExtension

my_frontmatter = {}
md = markdown.Markdown(extensions=[IronVaultExtension(frontmatter=my_frontmatter)])

with open("/path/to/ironvault/Journals/JournalEntry.md", "r", encoding="utf-8") as file:
    print(md.convert(file.read()))

print(my_frontmatter)

User Templates

import markdown
from ironvaultmd import IronVaultExtension, IronVaultTemplates

my_templates = IronVaultTemplates()
my_templates.add  = '<div class="my-own-class">Adding {{ add }}</div>'
my_templates.roll = '<div class="ivm-roll">{{ total }} vs {{ vs1 }} and {{ vs2 }}</div>'
my_templates.link = '<i>{{ label }}</i>'
my_templates.xp = '' # don't add xp nodes to HTML output

md = markdown.Markdown(extensions=[IronVaultExtension(templates=my_templates)])

Developing

See DEVELOPING.md for details on how to set up development environments etc.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ironvaultmd-0.4.0.tar.gz (31.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ironvaultmd-0.4.0-py3-none-any.whl (44.9 kB view details)

Uploaded Python 3

File details

Details for the file ironvaultmd-0.4.0.tar.gz.

File metadata

  • Download URL: ironvaultmd-0.4.0.tar.gz
  • Upload date:
  • Size: 31.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for ironvaultmd-0.4.0.tar.gz
Algorithm Hash digest
SHA256 de74eef9e0ba919426b7615415039c6965a3e16607a62bfcabd425401b81ff01
MD5 51aeab51f69098a83d7c0f7e76fa75ee
BLAKE2b-256 016d36fa04eca03a29bf3467a9b88c4b56ea5f5ddb65aa18f9196e00b8a5789b

See more details on using hashes here.

File details

Details for the file ironvaultmd-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: ironvaultmd-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 44.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for ironvaultmd-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2ba0b9db10be9e6efd8bacd490892e7fb8ffbffe6f5aa2f8c981c2426d257c7c
MD5 add4696fca756c5e3262ecc71078eca6
BLAKE2b-256 ee0a425fc40d10eebab9ee64d2f32b48a4e39b0a59b529b574cd0a0f9f4ce5b5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page