Metadata-Version: 2.1
Name: rpp
Version: 0.5
Summary: Read and write Reaper RPP files with Python.
Author-email: Sviatoslav Abakumov <dust.harvesting@gmail.com>
License: BSD-3-Clause
Project-URL: Source code, https://github.com/Perlence/rpp
Project-URL: Issue tracker, https://github.com/Perlence/rpp/issues
Classifier: Development Status :: 4 - Beta
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Text Processing
Requires-Python: >=3.7
Description-Content-Type: text/x-rst
License-File: LICENSE.rst

RPP
===

RPP is a format used to describe `REAPER <http://reaper.fm>`_ projects. This package is designed to be an RPP
parser/emitter and uses `PLY <http://www.dabeaz.com/ply/>`_ as a parser framework.

Examples
--------

Import the package:

.. code-block:: python

   >>> import rpp

Decode RPP:

.. code-block:: python

   >>> r = rpp.loads("""\
   <REAPER_PROJECT 0.1 "4.32" 1372525904
     RIPPLE 0
     GROUPOVERRIDE 0 0 0
     AUTOXFADE 1
   >
   """)
   >>> r
   Element(tag='REAPER_PROJECT', attrib=['0.1', '4.32', '1372525904'], children=[
       ['RIPPLE', '0'],
       ['GROUPOVERRIDE', '0', '0', '0'],
       ['AUTOXFADE', '1'],
   ])

Transform elements into RPP:

.. code-block:: python

   >>> from rpp import Element
   >>> rpp.dumps(
   ...     Element(tag='REAPER_PROJECT', attrib=['0.1', '4.32', '1372525904'], children=[
   ...         ['RIPPLE', '0'],
   ...         ['GROUPOVERRIDE', '0', '0', '0'],
   ...         ['AUTOXFADE', '1'],
   ...     ]))
   '<REAPER_PROJECT 0.1 4.32 1372525904\n  RIPPLE 0\n  GROUPOVERRIDE 0 0 0\n  AUTOXFADE 1\n>\n'

``Element`` mimics the interface of xml.etree.ElementTree.Element_. You can perform querying operations with
``findall``, ``find``, ``iterfind``. Note that attribute and text predicates are not supported.

.. _xml.etree.ElementTree.Element: https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element

.. code-block:: python

   >>> groupoverride = r.find('.//GROUPOVERRIDE')
   >>> groupoverride
   ['GROUPOVERRIDE', '0', '0', '0']
   >>> groupoverride[1:] = ['9', '9', '9']
   >>> r
   Element(tag='REAPER_PROJECT', attrib=['0.1', '4.32', '1372525904'], children=[
       ['RIPPLE', '0'],
       ['GROUPOVERRIDE', '9', '9', '9'],
       ['AUTOXFADE', '1'],
   ])

Dependencies
------------

- `attrs <https://attrs.readthedocs.org/>`_
- `ply <http://www.dabeaz.com/ply/>`_
