Skip to main content

Low-level parser for StepMania MSD files (SM, SSC, DWI...)

Project description

msdparser

A comprehensive, pure-Python, speed-optimized MSD parser. MSD is the underlying file format for the SM and SSC simfile formats used by StepMania, as well as a few older formats like DWI.

Full documentation can be found on Read the Docs.

Features

  • MSD lexer and parser
  • Optional escape sequences (on by default)
  • Optional strict parsing (off by default)
  • Bidirectionally-lossless parsing & serialization (in most cases)

Installation

msdparser is available on PyPI:

pip install msdparser

Quickstart

parse_msd takes a named file or string argument and yields MSDParameter instances:

>>> msd_data = """
... #VERSION:0.83;
... #TITLE:Springtime;
... #SUBTITLE:;
... #ARTIST:Kommisar;
... """
>>> from msdparser import parse_msd
>>> for param in parse_msd(string=msd_data):
...         print(
...             "key=" + repr(param.key),
...             "value=" + repr(param.value),
...         )
...
key='VERSION' value='0.83'
key='TITLE' value='Springtime'
key='SUBTITLE' value=''
key='ARTIST' value='Kommisar'

MSDParameter instances stringify back to MSD. They can be created from a sequence of strings, typically the key and value:

>>> from msdparser import MSDParameter
>>> pairs = [('TITLE', 'Springtime'), ('ARTIST', 'Kommisar')]
>>> for key, value in pairs:
...     print(str(MSDParameter([key, value])))
...
#TITLE:Springtime;
#ARTIST:Kommisar;

Parameters can be stringified exactly how they were parsed by calling serialize or stringify with exact=True:

>>> import codecs
>>> import filecmp
>>> from msdparser import MSDParameter, parse_msd
>>> with codecs.open("tests/testdata/backup.ssc", encoding="utf-8") as infile:
...     params = list(parse_msd(file=infile))
...
>>> with codecs.open("output.ssc", "w", encoding="utf-8") as outfile:
...     for param in params:
...         param.serialize(outfile, exact=True)
...
>>> filecmp.compare("tests/testdata/backup.ssc", "output.ssc")
True

Developing

msdparser uses uv for package management. Install it using pipx install uv or pip install uv, or see the installation docs for more options.

Create the virtual environment for msdparser:

uv sync

Activate the virtual environment:

# Windows
.venv\Scripts\activate
# Linux / Mac
source .venv/bin/activate

Run the unit tests:

uv run -m unittest
# Or, if you've activated your virtual environment:
python -m unittest

Build the documentation:

docs/make html

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

msdparser-3.0.0a4.tar.gz (14.0 kB view details)

Uploaded Source

Built Distribution

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

msdparser-3.0.0a4-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file msdparser-3.0.0a4.tar.gz.

File metadata

  • Download URL: msdparser-3.0.0a4.tar.gz
  • Upload date:
  • Size: 14.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.7

File hashes

Hashes for msdparser-3.0.0a4.tar.gz
Algorithm Hash digest
SHA256 388717e50db998c43a9b08b2399751d7c4ace9f12dd6cbb1c7fe07969da6e6c5
MD5 119fc9fbf8ae8f973d1c56468bad04ec
BLAKE2b-256 864fe081cff9861f87f3c9850b0ca727924ea087aa0d548808a68640a01e36fc

See more details on using hashes here.

File details

Details for the file msdparser-3.0.0a4-py3-none-any.whl.

File metadata

File hashes

Hashes for msdparser-3.0.0a4-py3-none-any.whl
Algorithm Hash digest
SHA256 123738740801e1564b47ef026bee295c0e59ab1276226d4c39557d74dd6b31fb
MD5 f8398cf934cd3d99f51ed0ca98e9cc5e
BLAKE2b-256 c73cac94d10d736ed525ff3e21630564bc9f4c120bfcbb2b37f97b6c42c746c2

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