Skip to main content

Python parser and generator for Arma class definitions (e.g. sqm files)

Project description

Status

Build Status

About

This is a Python parser for Arma 3 class definitions such as those appearing inside unrapified mission files.

It's based on Fusselwurm's arma-class-parser that is written JavaScript.

I grew tired of using it in conjunction with PyExecJS (complicated to set up and needing to patch things up on Windows) and py2js (too slow to parse even 300KB sqm files) and decided to port the original JavaScript code to Python.

Installation

pip install armaclass

Usage

Parse the values from a string

In [1]: import armaclass

In [2]: armaclass.parse('version=12;\n\nclass Moo  {\r\n value = 1; };')
Out[2]: {'Moo': {'value': 1.0}, 'version': 12.0}

Keep the values ordered as they were in the original file

In [3]: armaclass.parse('version=12;\n\nclass Moo  {\r\n value = 1; };', keep_order=True)
Out[3]: OrderedDict([('version', 12.0), ('Moo', OrderedDict([('value', 1.0)]))])

Note: Starting with Python 3.7 onwards, dicts are always ordered so it doesn't matter if you use keep_order or not.

Generate the files based on a parsed (or manually created) structure

In [4]: from collections import OrderedDict
In [5]: structure = OrderedDict([('version', 12.0), ('Moo', OrderedDict([('value', 1.0)]))])
In [6]: print(armaclass.generate(structure))
version=12;

class Moo
{
    value=1;
};

Indent with tabs instead of spaces

In [7]: print(armaclass.generate(structure, indent=1, use_tabs=True))
version=12;

class Moo
{
        value=1;
};

Extending the generator

You can use this library to write a program that will port your Arma class files to DayZ, for example. To do so, you will need to create your own generator by subclassing armaclass.generator.Generator and implementing your own methods (the ones raising NotImplemented).

Development

Notes

The naming conventions may not match Python's pep8 as I was trying to stay close to the original parsing names to facilitate porting. Those (internal) names may be changed in the future.

Making code changes

  • Create a virtualenv using your preferred method (mkvirtualenv, venv, etc...)
  • pip install -r requirements.txt
  • Write code AND tests
  • pytest to test run your tests
  • ptw -n if you want pytest to automatically be called whenever you save any file from the project

Contributing

If you feel something is missing or plain wrong, feel free to submit a Pull Request. You are encouraged to submit the same PR/suggestion to the original arma-class-parser as well.

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

armaclass-0.2.2.tar.gz (5.7 kB view details)

Uploaded Source

Built Distribution

armaclass-0.2.2-py2.py3-none-any.whl (7.2 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file armaclass-0.2.2.tar.gz.

File metadata

  • Download URL: armaclass-0.2.2.tar.gz
  • Upload date:
  • Size: 5.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.7.9

File hashes

Hashes for armaclass-0.2.2.tar.gz
Algorithm Hash digest
SHA256 b7903e9ff4ea2b9b3e0e25306e1100743cdeb6b4c9c81799c617e0574c737ace
MD5 c324f48431c96697f18589c440278117
BLAKE2b-256 034da8c543a6a0c0522ca58cc261443714b553dce0589ee299aecb6d5dec962e

See more details on using hashes here.

File details

Details for the file armaclass-0.2.2-py2.py3-none-any.whl.

File metadata

  • Download URL: armaclass-0.2.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 7.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.1

File hashes

Hashes for armaclass-0.2.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 fb6306d0f96c755242e9a2a7aaee0b6d930f7d0e3a560b6153d1c110047f3d0d
MD5 8e7040d1765407ca2e3de461f8abede6
BLAKE2b-256 6ef1b6e5d8a4960a5a14ad5d8e51c1065f0b765d311a47e9cbc93b04f3a4d6ed

See more details on using hashes here.

Supported by

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