MUSX Document Model
Loading...
Searching...
No Matches
MUSX Document Model

Welcome to the Musx Document Model.

Use the navigation buttons at the top of this page to browse through the framework documentation.

The Musx Document Model is a C++ class framework around the EnigmaXml format embedded in .musx files generated by Finale music software. It requires the C++17 standard.

Features include:

  • Dependency-free class definitions.
  • Factory classes separate from object model classes.
  • Xml Deserializer interfaces that allow the caller to use any Xml utility for xml handling.

The following macro definitions are available to modify behavior of the library.

  • MUSX_DISPLAY_NODE_NAMES: Log each node name that is processed in the order found. (When verbose logging is specified.)
  • MUSX_THROW_ON_UNKNOWN_XML: Throws musx::factory::unknown_xml_error if an unknown child node is encountered. Otherwise it logs the message, which by default sends it to std::cerr. This macro does not affect unknown top-level nodes, which are always silently skipped.
  • MUSX_THROW_ON_INTEGRITY_CHECK_FAIL: Throws musx::dom::integrity_error if a class fails its integrity check. Otherwise it it logs the message, which by default sends it to std::cerr.

The recommended way to define these macros is from your make file or build project. They are primarily intended for debugging.

The EnigmaXml that is extracted from a .musx file follows the pattern that any missing node receives the default value. This is mainly interesting for booleans and enums. The xml nodes for booleans only show up if they are true. The default values for enums do not show up either, which means it is frequently difficult to know what their string values might be. For this reason, default enum values are usually omitted from the XmlEnumMapping tables.

The Musx Document Model project is not affiliated with or endorsed by Finale or its parent company.

  • It is an independent open-source library designed to help users access and convert their own data in the absence of Finale, which has been discontinued.
  • It does not contain any Finale source code.
  • It is not capable of writing Finale files, only reading them.
  • It has been separately developed by analyzing the contents of EnigmaXml files and other publically available resources, such as the PDK Framework for Finale and Jari Williamsson’s original site.
  • Nothing in the repository circumvents digital copy protection on the Finale application.

(This reference web-site is generated directly from the source code by the Doxygen application.)

Author
Robert Patterson