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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file msdparser-3.0.0a7.tar.gz.
File metadata
- Download URL: msdparser-3.0.0a7.tar.gz
- Upload date:
- Size: 14.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
797bc6a99ae491cf2712483d2e0fb086ac4e047354cc8f8e4712bce95833c6c6
|
|
| MD5 |
437e2a02110a3355a5de90869b46c8a3
|
|
| BLAKE2b-256 |
6a4a0ff937272ad32cb923667e3e476433cd8606f654fa22d9e1b37dec697cb3
|
File details
Details for the file msdparser-3.0.0a7-py3-none-any.whl.
File metadata
- Download URL: msdparser-3.0.0a7-py3-none-any.whl
- Upload date:
- Size: 11.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef324aa943e325bc1c1ef6b363bf55433def3deb8a9f2fa608b14eff828ccf64
|
|
| MD5 |
d8119613091b50eb5ccfe2a029bcd783
|
|
| BLAKE2b-256 |
77d76c0fec5bb3177e6fa157fc7fef01c3d1f016b9168bb22fb8cc0809181617
|