:tocdepth: 2 .. _conversion: Converting OpenLyrics ===================== Conversion From Other Formats ----------------------------- Being able to convert songs from other formats to OpenLyrics is necessary to speed up the adoption of the OpenLyrics format and for compatibility with other applications which already support OpenLyrics. OpenSong ^^^^^^^^ One of the tools bundled with the OpenLyrics source documents is a command line tool to convert `OpenSong `_ song files to OpenLyrics. The conversion script should work in most situations, but do make sure that the conversion was successful before removing the old files. Prerequisites Before using the script for conversion please ensure that the following is available in your system: * `Python `_ >= 2.5 * `lxml `_ Usage To execute the script use the following command: .. code-block:: console python tools/opensong2openlyrics.py opensong_file openlyrics_file.xml Where ``opensong_file`` is the original song in OpenSong format and ``openlyrics_file.xml`` is the name of the song in OpenLyrics format. Other Formats ^^^^^^^^^^^^^ `OpenLP `_ supports importing from a wide range of other formats. So you can use it to convert your songs to the OpenLyrics format. See ``_ for more information. Converting OpenLyrics schema ---------------------------- Converting old schemas to version 0.8 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Theres is a bundled script to convert old 0.6 or 0.7 OpenLyrics files to 0.8 schema. Prerequisites Before using the script for updating schema please ensure that the following is available in your system: * `Python `_ >= 2.5 Usage To execute the script use the following command: .. code-block:: console python tools/convert-schema.py old_olpenlyrics_file.xml new_olpenlyrics_file.xml Where ``old_olpenlyrics_file.xml`` is the original song with OpenLyrics 0.6 or 0.7 format and ``new_olpenlyrics_file.xml`` is the name of the song with OpenLyrics 0.8 schema. Converting schema version 0.8 to 0.9 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ There is a new method to convert 0.8 schema to 0.9 using XSLT. Prerequisites Use an `XSLT processor `_. We recommend libxslt's ``xsltproc``. Usage Execute this command: .. code-block:: console xsltproc --output new_olpenlyrics_file.xml tools/convert-schema-0.8-to-0.9.xsl old_olpenlyrics_file.xml Where ``old_olpenlyrics_file.xml`` is the original song with OpenLyrics 0.8 format and ``new_olpenlyrics_file.xml`` is the name of the song with OpenLyrics 0.9 schema. The XSL is able to receive these options: * ``--param empty-chords``: Specifies the format for converting: ``"text"`` or ``"text"``. Boolean: ``true()``, ``false()``. Dafault is ``true()``. * ``--stringparam chord-notation``: Specifies input chord notation. Used during chord processing. Possible values: ``english``, ``english-b``, ``german``, ``dutch``, ``hungarian``, ``neolatin``. Default is ``english``. * ``--stringparam xmllang``: Language for ``xml:lang``. Possible values: IETF BCP 47. Default is ``en``. * ``--param remove-optional``: Option to remove optional attributes in 0.9 (``createdIn``, ``modifiedIn`` and ``modifiedDate``). Boolean: ``true()``, ``false()``. Default is ``true()``. * ``--param update-meta``: Option to update ``modifiedIn`` and ``modifiedDate`` during convertion or not. Boolean: ``true()``, ``false()``. Default is ``false()``. * ``--param add-pi``: Option to add CSS processing intruction: ``href="../stylesheets/openlyrics.css" type="text/css"``. Boolean: ``true()``, ``false()``. Default is ``false()``. A complex example: .. code-block:: bash xsltproc \ --output new_olpenlyrics_file.xml \ --param empty-chords "true()" \ --stringparam chord-notation english \ --stringparam xmllang en \ --param remove-optional "true()" \ --param update-meta "false()" \ --param add-pi "false()" \ tools/convert-schema-0.8-to-0.9.xsl \ old_olpenlyrics_file.xml Converting schema version 0.9 to 0.8 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If a program does not support the latest 0.9 schema, it may be necessary to convert the file back to 0.8. There is another XSLT for this case. Prerequisites Use an `XSLT processor `_. We recommend libxslt's ``xsltproc``. Usage Execute this command: .. code-block:: console xsltproc --output openlyrics_0.8_file.xml tools/convert-schema-0.9-to-0.8.xsl openlyrics_0.9_file.xml Where ``openlyrics_0.9_file.xml`` is the original song with OpenLyrics 0.9 format and ``openlyrics_0.8_file.xml`` is the name of the song exported to OpenLyrics 0.8 schema.