diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml new file mode 100644 index 000000000..6a7eace8f --- /dev/null +++ b/.github/workflows/macos.yml @@ -0,0 +1,29 @@ +# This is a basic workflow to help you get started with Actions + +name: MacOS + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the dev branch + push: + branches: [ dev ] + pull_request: + branches: [ dev ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: macos-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + - name: Build libmusicxml + run: make -C build diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml new file mode 100644 index 000000000..83d2e1dcf --- /dev/null +++ b/.github/workflows/ubuntu.yml @@ -0,0 +1,29 @@ +# This is a basic workflow to help you get started with Actions + +name: Ubuntu + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the dev branch + push: + branches: [ dev ] + pull_request: + branches: [ dev ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + - name: Build libmusicxml + run: make -C build diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml new file mode 100644 index 000000000..fe1ad4fe7 --- /dev/null +++ b/.github/workflows/windows.yml @@ -0,0 +1,32 @@ +# This is a basic workflow to help you get started with Actions + +name: Windows + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the dev branch + push: + branches: [ dev ] + pull_request: + branches: [ dev ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: windows-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + - name: Get latest CMake and ninja + uses: lukka/get-cmake@latest + + - name: Build libmusicxml + run: make -C build diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index ad6f1ff0d..000000000 --- a/.travis.yml +++ /dev/null @@ -1,22 +0,0 @@ -os: linux -dist: xenial -language: cpp -compiler: clang - -before_install: - - sudo apt-get -qq update - -#branches: -# except: -# - lilypond - -#branches: -# only: -# - dev -# - master - -script: - - make -C build -j 2 - - sudo make -C build/libdir install - - export LD_LIBRARY_PATH=/usr/local/lib - - make -C validation travis diff --git a/CHANGELOG.txt b/CHANGELOG.txt index e9086e4af..fd6e8e31b 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,6 +1,35 @@ MusicXML Library +---------------------------------------------------------------------------------------------------- +Version 3.21 +- xml2guido v.3.2: + - Support for Pedal, non-wavy trills tags + - Major improvements to Octava, Xml Directions, Fingerings, Wedge, Slurs, Beaming and other + articulation parsing especially for multi-voice scores + - Improvements to horizontal positioning of elements following MusicXML TimePositions + - Support for Partial generation of Guido Scores from MusicXML + - Updates for latest GuidoLib Release + Note: iOS Builds now use frameworks as it has (re)become industry standard via XCFramework since 2021. + + +---------------------------------------------------------------------------------------------------- +Version 3.20 +- xml2guido v.3.1: + - Fix Accolade and barformat inference + - Removes default staffFormat distance inference as MusicXML is not consistent + - Adds Font-size and Sound element conditions to infer Tempo Markup + - Improves staff-Distance parsing + - Fixed Octava Parsing for Guido + - Adds support for Staccatissimo and SnapPizzicato + - Fixed y-pos inference from XML for Fermata and other articulations (Fingering etc.) + - Adds Guido Fingering Support on Chords + - Evade Slur generation for multi-voice slurs in XML + - Improved grouping detection for Guido Beaming (especially nested beams) + - Fixed ordering of grace notte tag creation + - Ability tto parse nested Ties with correct sequencing in Guido + + ---------------------------------------------------------------------------------------------------- Version 3.19 - fix parsing bug with comments after DOCTYPE diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 96a0b412a..000000000 --- a/appveyor.yml +++ /dev/null @@ -1,24 +0,0 @@ -version: 1.0.{build} -image: Visual Studio 2015 -skip_tags: true -build_script: -- cmd: >- - cd build - - mkdir win32 win64 - - cd win64 - - cmake .. -G "Visual Studio 14 2015 Win64" - - cmake --build . --config Release - -notifications: - - provider: Email - to: - - '{{commitAuthorEmail}}' - - fober@grame.fr - subject: 'Build {{status}}: {{projectName}} {{buildVersion}}' - on_build_success: false - on_build_failure: true - on_build_status_changed: true diff --git a/build/CMakeLists.txt b/build/CMakeLists.txt index 8be089485..cc35b6ad6 100644 --- a/build/CMakeLists.txt +++ b/build/CMakeLists.txt @@ -2,7 +2,7 @@ # CMAKE libmusicxml2 ####################################### project(libmusicxml2) -cmake_minimum_required(VERSION 2.4) +cmake_minimum_required(VERSION 3.4.0) if(CMAKE_CONFIGURATION_TYPES) set(CMAKE_CONFIGURATION_TYPES Debug Release) endif() @@ -11,7 +11,7 @@ endif() # versions management set (XMLVERSION 3.1) -set (VERSION 3.1.9) +set (VERSION 3.2.1) macro (get_major_minor_patch version) string( REGEX REPLACE "([0-9]*)\\.([0-9]*)\\.([0-9]*)" "\\1" VERSION_MAJOR ${version} ) string( REGEX REPLACE "([0-9]*)\\.([0-9]*)\\.([0-9]*)" "\\2" VERSION_MINOR ${version} ) @@ -19,39 +19,38 @@ macro (get_major_minor_patch version) endmacro() get_major_minor_patch( ${VERSION} ) set (SOVERS ${VERSION_MAJOR}) -set (STRVERS "v.3.17") -set (SSTRVERS "3.17") +set (STRVERS "v.3.21") +set (SSTRVERS "3.21") message (STATUS "Configuring version ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") get_filename_component(ROOT ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) ####################################### -option ( FMWK "Generates a framework on MacOS by default" off ) -option ( UNIVERSAL "Generates universal binaries" off ) -option ( GDB "Activates ggdb3 option" off ) -option ( LILY "Include lilypond part" on ) -option ( BRL "Include braille part" off ) +option ( FMWK "Generates a framework on MacOS by default" off ) +option ( GENTOOLS "Generates tools" on ) +option ( GENSTATIC "Generates the static library" on ) + +if (GENTOOLS) + message (STATUS "Generate tools (force required static library generation)") + set (GENSTATIC on) +endif() ####################################### get_filename_component(ROOT ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) set (DOCDIR ${ROOT}/doc) -set (DOC ${DOCDIR}/presentation/libmusicxml2.pdf ${DOCDIR}/userSGuideToXml2ly/userSGuideToXml2ly.pdf ${DOCDIR}/maintainerSGuideToXml2ly/MaintainerSGuideToXml2ly.pdf) -set (SCHEMA ${ROOT}/dtds/${XMLVERSION}) +set (DOC ${DOCDIR}/presentation/libmusicxml2.pdf) +set (SCHEMA ${ROOT}/dtds/${XMLVERSION}) set (BINDIR ${CMAKE_CURRENT_SOURCE_DIR}/bin) set (LIBDIR ${CMAKE_CURRENT_SOURCE_DIR}/lib) ####################################### -set (CMAKE_CXX_STANDARD 11) +set (CMAKE_CXX_STANDARD 17) if(UNIX) - if (GDB) - add_definitions(-Wall -DGCC -ggdb3 -Wno-overloaded-virtual) - else() - add_definitions(-Wall -DGCC -O3 -Wno-overloaded-virtual) - endif() + add_definitions(-Wall -DGCC -O3 -Wno-overloaded-virtual) endif() @@ -59,14 +58,17 @@ endif() # mac os specific part ######################################### if(APPLE) + set (CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") + set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "gnu++14") if ( IOS ) message (STATUS "Generates project for iOS - Use -DIOS=no to change.") set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "iPhoneOS") - set (CMAKE_OSX_ARCHITECTURES "arm64") # unsupported on iOS 11.4.0: armv7 armv7s + #set (CMAKE_OSX_ARCHITECTURES "arm64 x86_64") # unsupported on iOS 11.4.0: armv7 armv7s set (CMAKE_OSX_SYSROOT "iphoneos") - set (CMAKE_CXX_FLAGS "-miphoneos-version-min=11.2") - set (libtype STATIC) - set (FMWK "false") + set(IOS_DEPLOYMENT_TARGET 13.0) + #set (libtype STATIC) + set (FMWK "true") + set (CMAKE_MACOSX_RPATH 1) elseif( UNIVERSAL ) message (STATUS "Generates universal binaries - Use -DUNIVERSAL=no to change. .") set (CMAKE_OSX_ARCHITECTURES "x86_64") @@ -91,9 +93,6 @@ endif() set (SRCDIR ${ROOT}/src) set (SAMPLEDIR ${ROOT}/samples) set (SRCFOLDERS factory files elements guido lib operations parser visitors) -if (LILY) - set (SRCFOLDERS ${SRCFOLDERS} interface lilypond) -endif() foreach(folder ${SRCFOLDERS}) set(SRC ${SRC} "${SRCDIR}/${folder}/*.cpp") # add source files @@ -103,14 +102,11 @@ foreach(folder ${SRCFOLDERS}) set(HEADERS ${HEADERS} "${SRCDIR}/${folder}/*.h") # add header files endforeach() -if (NOT LILY) - message (STATUS "Lilypond part is not included, use -DLILY=yes to change") - set(SRC ${SRC} "${SRCDIR}/interface/libmusicxml.cpp" "${SRCDIR}/interface/musicxml2guido.cpp") - set(HEADERS $HEADERS "${SRCDIR}/interface/libmusicxml.h" "${SRCDIR}/interface/musicxml2guido.h") - set (SRCFOLDERS ${SRCFOLDERS} interface) -endif() +set(SRC ${SRC} "${SRCDIR}/interface/libmusicxml.cpp" "${SRCDIR}/interface/musicxml2guido.cpp") +set(HEADERS $HEADERS "${SRCDIR}/interface/libmusicxml.h" "${SRCDIR}/interface/musicxml2guido.h") +set (SRCFOLDERS ${SRCFOLDERS} interface) file (GLOB CORESRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${SRC}) -file (GLOB COREH RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${HEADERS}) +file (GLOB COREH RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${HEADERS} "${SRCDIR}/elements/*H" "${SRCDIR}/visitors/*H" "${SRCDIR}/files/*H" "${SRCDIR}/parser/reader.h" "${SRCDIR}/lib/*H" "${SRCDIR}/guido/*H") foreach(folder ${SRCFOLDERS}) set(INCL ${INCL} "${SRCDIR}/${folder}") # add include folders @@ -127,18 +123,25 @@ set_source_files_properties (${COREH} PROPERTIES HEADER_FILE_ONLY TRUE) if(WIN32 OR MSYS) enable_language(RC) set(LIBCONTENT ${CORESRC} ${COREH} ${ROOT}/win32/libmusicxml/libmusicxml.rc) + if (MINGW) + set(target musicxml) + else() + set(target libmusicxml) + endif() else() set(LIBCONTENT ${CORESRC} ${COREH}) + set(target libmusicxml) endif() -set(target musicxml2) set(staticlib musicxml2static) if (NOT IOS) -add_library(${target} SHARED ${LIBCONTENT}) -set_target_properties (${target} PROPERTIES + add_library(${target} SHARED ${LIBCONTENT}) + set_target_properties (${target} PROPERTIES VERSION ${VERSION} SOVERSION ${SOVERS} + RUNTIME_OUTPUT_DIRECTORY ${LIBDIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${LIBDIR} ARCHIVE_OUTPUT_DIRECTORY ${LIBDIR} ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${LIBDIR} LIBRARY_OUTPUT_DIRECTORY ${LIBDIR} @@ -147,9 +150,36 @@ set_target_properties (${target} PROPERTIES DEFINE_SYMBOL LIBMUSICXML_EXPORTS XCODE_ATTRIBUTE_ENABLE_BITCODE "NO" ) +elseif(IOS) + add_library(${target} SHARED ${LIBCONTENT}) + set_target_properties (${target} PROPERTIES + VERSION ${VERSION} + SOVERSION ${SOVERS} + FRAMEWORK ${FMWK} + FRAMEWORK_VERSION C + OUTPUT_NAME libmusicxml + RUNTIME_OUTPUT_DIRECTORY ${LIBDIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${LIBDIR} + ARCHIVE_OUTPUT_DIRECTORY ${LIBDIR} + ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${LIBDIR} + LIBRARY_OUTPUT_DIRECTORY ${LIBDIR} + LIBRARY_OUTPUT_DIRECTORY_RELEASE ${LIBDIR} + XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET ${IOS_DEPLOYMENT_TARGET} + PUBLIC_HEADER "${COREH}" + MACOSX_FRAMEWORK_IDENTIFIER "com.grame.libmusicxml" + MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${STRVERS} + MACOSX_FRAMEWORK_BUNDLE_VERSION ${VERSION} + INSTALL_NAME_DIR "$(LOCAL_LIBRARY_DIR)/Frameworks" + BUILD_WITH_INSTALL_NAME_DIR YES + #XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks" + XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH YES + DEFINE_SYMBOL LIBMUSICXML_EXPORTS + XCODE_ATTRIBUTE_ENABLE_BITCODE "NO" + XCODE_ATTRIBUTE_DEFINES_MODULE YES + ) endif() -if (NOT WIN32) +if (NOT WIN32) #AND NOT IOS add_library(${staticlib} STATIC ${LIBCONTENT}) set_target_properties (${staticlib} PROPERTIES VERSION ${VERSION} @@ -169,7 +199,9 @@ if (FMWK AND APPLE AND NOT IOS) set_target_properties (${target} PROPERTIES OUTPUT_NAME libmusicxml2 FRAMEWORK ${FMWK} - FRAMEWORK_VERSION ${VERSION} + FRAMEWORK_VERSION C + MACOSX_FRAMEWORK_IDENTIFIER "com.grame.libmusicxml" + XCODE_ATTRIBUTE_DEFINES_MODULE YES MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${STRVERS} MACOSX_FRAMEWORK_BUNDLE_VERSION ${SSTRVERS} MACOSX_FRAMEWORK_IDENTIFIER ${target} @@ -179,15 +211,7 @@ endif() ####################################### # set sample targets set (SAMPLES xmlversion RandomMusic RandomChords xmlfactory partsummary xml2guido xmliter countnotes readunrolled xml2midi xmlread xmltranspose xmlclone) -set (TOOLS xml2guido xmlread xmltranspose xmlversion) -if (LILY) - set (SAMPLES ${SAMPLES} xml2ly) - set (TOOLS ${TOOLS} xml2ly) -endif() -if (BRL) - set (SAMPLES ${SAMPLES} xml2brl) - set (TOOLS ${TOOLS} xml2brl) -endif() +set (TOOLS xml2guido xmlread xml2midi xmltranspose xmlversion) if (APPLE) set (LINKTO ${staticlib}) @@ -196,7 +220,7 @@ else() endif() -if(NOT IOS ) +if(NOT IOS AND GENTOOLS) foreach(sample ${SAMPLES}) add_executable( ${sample} ${SAMPLEDIR}/${sample}.cpp ) target_link_libraries( ${sample} ${LINKTO}) @@ -227,13 +251,24 @@ else () set (BINDEST bin) endif () +if (IOS) + install ( TARGETS ${INSTALLED} + RUNTIME DESTINATION ${BINDEST} + LIBRARY DESTINATION ${LIBDEST} + ARCHIVE DESTINATION ${LIBDEST} + FRAMEWORK DESTINATION lib CONFIGURATIONS Release + PUBLIC_HEADER DESTINATION include/libmusicxml +# PRIVATE_HEADER DESTINATION PrivateHeaders + ) +endif() if (NOT IOS) message (STATUS "Install location is ${CMAKE_INSTALL_PREFIX}") -if (WIN32) - set (INSTALLED ${target}) -else() - set (INSTALLED ${target} ${staticlib}) +set (INSTALLED ${target}) +if (NOT WIN32) +if (GENSTATIC) + set (INSTALLED ${INSTALLED} ${staticlib}) +endif() endif() install ( TARGETS ${INSTALLED} RUNTIME DESTINATION ${BINDEST} @@ -243,11 +278,13 @@ install ( TARGETS ${INSTALLED} PUBLIC_HEADER DESTINATION include/libmusicxml ) +if (GENTOOLS) install ( TARGETS ${TOOLS} RUNTIME DESTINATION ${BINDEST} LIBRARY DESTINATION ${LIBDEST} ARCHIVE DESTINATION ${LIBDEST} ) +endif() #################################### # install misc files @@ -274,23 +311,11 @@ install ( PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ ) - #################################### # install VS redistributables -if (WIN32) -if (${CMAKE_GENERATOR} STREQUAL "Visual Studio 14 2015 Win64") - set (VS "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/redist/x64/Microsoft.VC140.CRT") -elseif (${CMAKE_GENERATOR} STREQUAL "Visual Studio 15 2017 Win64") - set (VS "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Redist/MSVC/14.16.27012/x64/Microsoft.VC141.CRT") -else() - set (VS "/unknown/visual/studio/version") +if (MSVC) + include (InstallRequiredSystemLibraries) endif() -install ( - FILES "${VS}/msvcp140.dll" "${VS}/vcruntime140.dll" DESTINATION ${CMAKE_INSTALL_PREFIX}/bin - PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ -) -endif() - #################################### # cpack section diff --git a/build/MakePkg.bat b/build/MakePkg.bat index 9ab1b907f..050483f78 100644 --- a/build/MakePkg.bat +++ b/build/MakePkg.bat @@ -7,7 +7,7 @@ IF NOT EXIST libmusicxml2.sln ( ) -cmake .. -DPACK=on -DLILY=on -DBRL=on +cmake .. -DPACK=on -DLILY=off -DBRL=off cmake --build . --config Release -- /maxcpucount:4 cpack -G NSIS64 move libMusicXML-*.exe .. diff --git a/build/Makefile b/build/Makefile index e04780dc8..2ac1f68bf 100644 --- a/build/Makefile +++ b/build/Makefile @@ -2,70 +2,32 @@ # # -.PHONY : msys win32 win64 linux android - -PDIR ?= libdir -VERSION = 3.19 - -system := $(shell uname -s) -system := $(shell echo $(system) | grep MINGW > /dev/null && echo MINGW || echo $(system)) -ifeq ($(system), Darwin) - TARGET ?= macos - OUTDIR = $(PDIR)/Release - GENERATOR ?= Xcode - PREFIX ?= /usr/local - NATIVEPACK = macpack -else -ifeq ($(system), MINGW) - TARGET ?= windows - PDIR ?= win64 - NATIVEPACK = winpack -else -ifeq ($(system), Linux) - TARGET ?= linux - OUTDIR = $(PDIR) - GENERATOR ?= Unix Makefiles - PREFIX ?= /usr/local - NATIVEPACK = linuxpack -else - TARGET = undefined - NATIVEPACK = undefined -endif -endif -endif - -IOS := iosdir -MSVC ?= Visual Studio 14 2015 -MSVC64 := $(MSVC) Win64 -JOBS ?= 6 +.PHONY: android + +MAKE ?= make +CMAKE ?= cmake +LIBDIR ?= libdir +IOSDIR ?= iosdir +MAKEFILE ?= Makefile + +VERSION = 3.21 CMAKEOPT ?= -TOOLS := xml2midi xmlread xml2guido xml2ly xmlversion +TOOLS := xml2midi xmlread xml2guido xmlversion all : - make $(TARGET) - -undefined: - $(error System is undefined, not target available) + $(MAKE) libmusicxml help : - @echo libmusicxml makefile - Targets are : + @echo "libmusicxml makefile - Available targets:" @echo " all (default): build the libmusicxml library for the current platform," @echo " build the libmusicxml tools," - @echo - @echo "Platform targets to build the libmusicxml library are:" - @echo " macos build the library for macos" - @echo " windows build 32 and 64 bits library for windows" - @echo " linux build the library for linux" @echo " android build a static library for Android" @echo " ios build a static library for iOS" - @echo " msys build on Windows using MSys" - @echo " js build a javascript library" - @echo "the platform targets is automatically evaluated by the default target." + @echo " wasm build the wasm library" + @echo " minimal build the library with only guido support (no tools and no static library)" @echo @echo "Misc:" - @echo " universal switch to universal binaries (MacOS)" - @echo " native switch universal binaries off (MacOS)" @echo " cmake re-generates the cmake project" @echo " format source code formatting using clang-format" @echo " install install library, tools and headers" @@ -75,105 +37,52 @@ help : @echo "Options:" @echo " CMAKEOPT cmake options passed to cmake by the 'cmake' target" @echo " GENERATOR the cmake generator. Currently '$(GENERATOR)'" - @echo " PDIR the generation folder. Currently '$(PDIR)'" + @echo " LIBDIR the generation folder. Currently '$(LIBDIR)'" @echo " MSVC [Windows only] the windows generator. Currently '$(MSVC)'" @echo " PREFIX the install location prefix. Currently $(PREFIX)'" @echo @echo "CMake options:" - @echo " FMWK [MacOS only] Generates a framework on MacOS. Default is on" - @echo " UNIVERSAL [MacOS only] Generates universal binaries. Default is off" - @echo " GDB Activates ggdb3 option. Default is off" - @echo " LILY Include lilypond part. Default is on" - @echo "NOTE: CMake options can be passed using CMAKEOPT, e.g." - @echo " 'make cmake CMAKEOPT=-DLILY=off'" + @echo " FMWK [MacOS only] Generates a framework on MacOS. Default is off" -$(PDIR) : - mkdir $(PDIR) - -#=============================================================== -# building the javascript library -#=============================================================== -js: - make -C ../javascript - #=============================================================== -# building the library on Mac OS X +# building the library #=============================================================== -macos : $(PDIR)/libmusicxml2.xcodeproj - cmake --build $(PDIR) --config Release -- -jobs $(JOBS) - -cd lib && [ -d libmusicxml2.framework ] && tar czf libmusicxml2.tgz libmusicxml2.framework || echo "no framework" - -$(PDIR)/libmusicxml2.xcodeproj : $(PDIR) CMakeLists.txt - cd $(PDIR) && cmake .. -G Xcode $(CMAKEOPT) -Wno-dev - -universal: $(PDIR) - cd $(PDIR) && cmake .. -DUNIVERSAL=on -Wno-dev +libmusicxml: $(LIBDIR) $(LIBDIR)/$(MAKEFILE) + $(CMAKE) --build $(LIBDIR) --config Release -native: $(PDIR) - cd $(PDIR) && cmake .. -DUNIVERSAL=off -Wno-dev +$(LIBDIR): + mkdir $(LIBDIR) +$(LIBDIR)/$(MAKEFILE) : CMakeLists.txt + cd $(LIBDIR) && $(CMAKE) .. $(CMAKEOPTS) $(GENERATOR) #=============================================================== -# building the library for iOS -#=============================================================== -ios : $(IOS)/libmusicxml2.xcodeproj - cmake --build $(IOS) --config Release -- -jobs $(JOBS) - -$(IOS)/libmusicxml2.xcodeproj : CMakeLists.txt - [ -d $(IOS) ] || mkdir $(IOS) - cd $(IOS) && cmake .. -G Xcode -DIOS=yes -Wno-dev $(CMAKEOPT) - - -#=============================================================== -# building the library on windows +# building the javascript library #=============================================================== +wasm: + $(MAKE) -C ../javascript #=============================================================== -# using msys -msys : GENERATOR ?= MSYS Makefiles -msys : $(PDIR)/Makefile - make -C $(PDIR) +minimal: + $(MAKE) cmake CMAKEOPT="-DGENTOOLS=off -DGENSTATIC=off" + $(CMAKE) --build $(LIBDIR) --config Release #=============================================================== -# using visual studio -windows : - make win32 - make win64 - -win32 : win32/libmusicxml2.sln - cmake --build win32 --config Release -- /maxcpucount:4 - -win32/libmusicxml2.sln : CMakeLists.txt - [ -d win32 ] || mkdir win32 - cd win32 && cmake .. -G "$(MSVC)" $(CMAKEOPT) - -win64 : win64/libmusicxml2.sln - cmake --build win64 --config Release -- /maxcpucount:4 - -win64/libmusicxml2.sln : CMakeLists.txt - [ -d win64 ] || mkdir win64 - cd win64 && cmake .. -G "$(MSVC64)" $(CMAKEOPT) - -#=============================================================== -# building the library on linux +# building the library for iOS #=============================================================== -linux : $(PDIR)/Makefile - make -C $(PDIR) - -$(PDIR)/Makefile : $(PDIR) CMakeLists.txt - cd $(PDIR) && cmake .. -G "$(GENERATOR)" $(CMAKEOPT) - +ios : + $(MAKE) libmusicxml LIBDIR=$(IOSDIR) CMAKEOPTS="-DIOS=on" #=============================================================== -cmake : $(PDIR) - cd $(PDIR) && cmake .. -G "$(GENERATOR)" -Wno-dev $(CMAKEOPT) +cmake : $(LIBDIR) + cd $(LIBDIR) && $(CMAKE) .. $(CMAKEOPT) #=============================================================== # building the library for Android #=============================================================== android : - ndk-build -C android -j 6 + ndk-build -C android cp android/libs/armeabi-v7a/libmusicxml2.so android/libmusicxml2.armeabi-v7a.so cp android/libs/x86/libmusicxml2.so android/libmusicxml2.x86.so @@ -188,10 +97,10 @@ format : #=============================================================== # install #=============================================================== -installLog := $(PDIR)/install_manifest.txt +installLog := $(LIBDIR)/install_manifest.txt install: - cd $(PDIR) && cmake .. -DCMAKE_INSTALL_PREFIX=$(PREFIX) - cmake --build $(PDIR) --config Release --target install + cd $(LIBDIR) && $(CMAKE) .. -DCMAKE_INSTALL_PREFIX=$(PREFIX) + $(CMAKE) --build $(LIBDIR) --config Release --target install uninstall: installedfiles = $(shell cat $(installLog)) uninstall: $(installLog) @@ -207,7 +116,7 @@ localinstall: PACKDIR := ../packages PACK := $(PACKDIR)/libmusicxml2-$(VERSION) package: - $(MAKE) $(NATIVEPACK) + cmake --build $(LIBDIR) --config Release --target package winpack: $(MAKE) win64 @@ -215,8 +124,6 @@ winpack: mv win64/libmusicxml-*.exe . macpack: $(PACKDIR)/README.html - $(MAKE) cmake CMAKEOPT="-DLILY=on -DBRL=on -DFMWK=off" - $(MAKE) macos -[ -d $(PACK) ] && rm -rf $(PACK) $(MAKE) install PREFIX=../$(PACK) hdiutil create $(PACK).dmg -fs HFS+ -srcfolder $(PACK) -format UDBZ -ov diff --git a/build/Building.md b/build/ReadMe.md similarity index 70% rename from build/Building.md rename to build/ReadMe.md index 3a3534109..761ccf954 100644 --- a/build/Building.md +++ b/build/ReadMe.md @@ -21,14 +21,5 @@ You must have the [emscripten](http://emscripten.org) compiler installed and `e - from the build folder: run `make js` - from the javascript/build folder: run `make` -##### Note for Linux platforms: -The procedure to compile is close to the usual 'configure' 'make' 'make install' steps. Actually, you can simply do the following: - > cd /your_path_to_the_guidolib_project/build - > make - > sudo make install - -##### Note for Windows platforms: -The CMake project description is "Visual Studio" oriented. Using MingW may require some adaptation of the CMakeLists.txt file. You can benefit of the standard command line tools (make) by installing [MSYS](http://www.mingw.org/wiki/MSYS) of [MSYS2](http://www.msys2.org/). - ---------------------------- In case of trouble, contact me: diff --git a/doc/Doxyfile b/doc/Doxyfile index 2dd89f506..b47222146 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -31,7 +31,7 @@ PROJECT_NAME = LibMusicXML # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 3.19 +PROJECT_NUMBER = 3.21 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff --git a/doc/INSIDE.pdf b/doc/INSIDE.pdf deleted file mode 100644 index beb2507ad..000000000 Binary files a/doc/INSIDE.pdf and /dev/null differ diff --git a/doc/libmusicxmlArchitecture/TextOutputIcon.png b/doc/libmusicxmlArchitecture/TextOutputIcon.png deleted file mode 100644 index aa0103b0d..000000000 Binary files a/doc/libmusicxmlArchitecture/TextOutputIcon.png and /dev/null differ diff --git a/doc/libmusicxmlArchitecture/libmusicxmlArchitecture.pdf b/doc/libmusicxmlArchitecture/libmusicxmlArchitecture.pdf deleted file mode 100644 index 284f7a25b..000000000 Binary files a/doc/libmusicxmlArchitecture/libmusicxmlArchitecture.pdf and /dev/null differ diff --git a/doc/libmusicxmlArchitecture/libmusicxmlArchitecture.png b/doc/libmusicxmlArchitecture/libmusicxmlArchitecture.png deleted file mode 100644 index 86673f94e..000000000 Binary files a/doc/libmusicxmlArchitecture/libmusicxmlArchitecture.png and /dev/null differ diff --git a/doc/libmusicxmlArchitecture/libmusicxmlArchitecture.tex b/doc/libmusicxmlArchitecture/libmusicxmlArchitecture.tex deleted file mode 100644 index d8377a022..000000000 --- a/doc/libmusicxmlArchitecture/libmusicxmlArchitecture.tex +++ /dev/null @@ -1,518 +0,0 @@ - -% libmusicxml2 architecture overview -% Grame, 2017 - -\documentclass[border=20pt]{standalone} - -\usepackage{tikz} - -\usetikzlibrary{math} -\usetikzlibrary{arrows.meta} - -\begin{document} - -\begin{tikzpicture}[scale=5] - -% elements positions -% ------------------------------------------------ - -\tikzmath{ - % MSR - \MSRAbs = 0; - \MSROrd = 0; - % - % MusicXMLTree - \MusicXMLTreeAngle = 90; - \MusicXMLTreeAbs = cos(\MusicXMLTreeAngle); - \MusicXMLTreeOrd = sin(\MusicXMLTreeAngle); - % - % MusicXML - \MusicXMLAbs = \MusicXMLTreeAbs * 2; - \MusicXMLOrd = \MusicXMLTreeOrd * 2; - % - % Guido - \GuidoAngle = 55; - \GuidoAbs = cos(\GuidoAngle) * 2; - \GuidoOrd = sin(\GuidoAngle) * 2; - % - % MDSR - \MDSRAngle = 200; - \MDSRAbs = cos(\MDSRAngle); - \MDSROrd = sin(\MDSRAngle); - % - % MIDI - \MIDIAbs = \MDSRAbs * 2; - \MIDIOrd = \MDSROrd * 2; - % - % LPSR - \LPSRAngle = 312.5; - \LPSRAbs = cos(\LPSRAngle); - \LPSROrd = sin(\LPSRAngle); - % - % LilyPond - \LilyPondAbs = \LPSRAbs * 2; - \LilyPondOrd = \LPSROrd * 2; - % - % BSR - \BSRAngle = 347.5; - \BSRAbs = cos(\BSRAngle); - \BSROrd = sin(\BSRAngle); - % - % Braille music - \BrailleMusicAbs = \BSRAbs * 2; - \BrailleMusicOrd = \BSROrd * 2; - % - % RandomMusic - \RandomMusicStartAbs = -1.15; - \RandomMusicStartOrd = \MusicXMLTreeOrd + 0.35; - \RandomMusicInterAbs = \MusicXMLTreeAbs - 0.10; - \RandomMusicInterOrd = \MusicXMLTreeOrd - 0.10; - \RandomMusicEndAbs = \MusicXMLAbs - 0.20; - \RandomMusicEndOrd = \MusicXMLOrd - 0.15; - % - % textOutput - \textOutputAngle = 145; - \textOutputRadius = 1.4; - \textOutputAbs = cos(\textOutputAngle) * \textOutputRadius; - \textOutputOrd = sin(\textOutputAngle) * \textOutputRadius; - % - % tools - \toolsStartAbs = \MusicXMLAbs - 0.125; - \toolsStartOrd = \MusicXMLOrd - 0.15; - \toolsInterAbs = \MusicXMLTreeAbs - 0.05; - \toolsInterOrd = \MusicXMLTreeOrd - 0.1; - \toolsEndAbs = \textOutputAbs + 0.15; - \toolsEndOrd = \textOutputOrd + 0.0; - % - % xmlToGuido - \xmlToGuidoInterangle = (\MusicXMLTreeAngle + \GuidoAngle) / 2; - \xmlToGuidoInterRadius = 0.6; - \xmlToGuidoStartAbs = \MusicXMLAbs + 0.15; - \xmlToGuidoStartOrd = \MusicXMLOrd - 0.15; - \xmlToGuidoInterAbs = cos(\xmlToGuidoInterangle) * \xmlToGuidoInterRadius; - \xmlToGuidoInterOrd = sin(\xmlToGuidoInterangle) * \xmlToGuidoInterRadius; - \xmlToGuidoEndAbs = \GuidoAbs - 0.15; - \xmlToGuidoEndOrd = \GuidoOrd - 0.15; - % - % xml2ly - \xmlToLyInterIAngle = mod((\MusicXMLTreeAngle + \LPSRAngle) * 2 / 3, 360); - \xmlToLyInterIIAngle = mod((\MusicXMLTreeAngle + \LPSRAngle) * 1 / 3, 360); - \xmlToLyInterRadius = 0.10; - \xmlToLyStartAbs = \MusicXMLAbs + 0.05; - \xmlToLyStartOrd = \MusicXMLOrd - 0.15; - \xmlToLyInterIAbs = cos(\xmlToLyInterIAngle) * \xmlToLyInterRadius; - \xmlToLyInterIOrd = sin(\xmlToLyInterIAngle) * \xmlToLyInterRadius; - \xmlToLyInterIIAbs = cos(\xmlToLyInterIIAngle) * \xmlToLyInterRadius; - \xmlToLyInterIIOrd = sin(\xmlToLyInterIIAngle) * \xmlToLyInterRadius; - \xmlToLyEndAbs = \LilyPondAbs - 0.045; - \xmlToLyEndOrd = \LilyPondOrd + 0.15; - % - % xml2brl - \xmlToBrlInterIAngle = mod((\MusicXMLTreeAngle + \LPSRAngle) * 2 / 3, 360); - \xmlToBrlInterIIAngle = mod((\MusicXMLTreeAngle + \LPSRAngle) * 1 / 3, 360); - \xmlToBrlInterRadius = 0.2; - \xmlToBrlStartAbs = \MusicXMLAbs + 0.10; - \xmlToBrlStartOrd = \MusicXMLOrd - 0.15; - \xmlToBrlInterIAbs = cos(\xmlToBrlInterIAngle) * \xmlToBrlInterRadius; - \xmlToBrlInterIOrd = sin(\xmlToBrlInterIAngle) * \xmlToBrlInterRadius; - \xmlToBrlInterIIAbs = cos(\xmlToBrlInterIIAngle) * \xmlToBrlInterRadius; - \xmlToBrlInterIIOrd = sin(\xmlToBrlInterIIAngle) * \xmlToBrlInterRadius; - \xmlToBrlEndAbs = \BrailleMusicAbs - 0.05; - \xmlToBrlEndOrd = \BrailleMusicOrd + 0.15; - % - % toBeWrittenCommon - \toBeWrittenCommonStartAbs = -1.15; - \toBeWrittenCommonStartOrd = \MDSROrd + 0.65; - \toBeWrittenCommonEndAbs = \toBeWrittenCommonStartAbs + 0.65; - \toBeWrittenCommonEndOrd = \toBeWrittenCommonStartOrd - 0.225; - % - % toBeWrittenToMusicXML - \toBeWrittenToMusicXMLInterIAngle = mod((\MusicXMLTreeAngle + \MDSRAngle) * -0.1, 360); - \toBeWrittenToMusicXMLInterIIAngle = mod((\MusicXMLTreeAngle + \MDSRAngle) * 0.375, 360); - \toBeWrittenToMusicXMLInterRadius = -0.20; - \toBeWrittenToMusicXMLStartAbs = \toBeWrittenCommonEndAbs; - \toBeWrittenToMusicXMLStartOrd = \toBeWrittenCommonEndOrd; - \toBeWrittenToMusicXMLInterIAbs = cos(\toBeWrittenToMusicXMLInterIAngle) * \toBeWrittenToMusicXMLInterRadius; - \toBeWrittenToMusicXMLInterIOrd = sin(\toBeWrittenToMusicXMLInterIAngle) * \toBeWrittenToMusicXMLInterRadius; - \toBeWrittenToMusicXMLInterIIAbs = cos(\toBeWrittenToMusicXMLInterIIAngle) * \toBeWrittenToMusicXMLInterRadius; - \toBeWrittenToMusicXMLInterIIOrd = sin(\toBeWrittenToMusicXMLInterIIAngle) * \toBeWrittenToMusicXMLInterRadius; - \toBeWrittenToMusicXMLEndAbs = \MusicXMLAbs - 0.05; - \toBeWrittenToMusicXMLEndOrd = \MusicXMLOrd - 0.15; - % - % toBeWrittenToLilyPond - \toBeWrittenToLilyPondInterIAngle = mod((\LPSRAngle + \MDSRAngle) * -0.1, 360); - \toBeWrittenToLilyPondInterIIAngle = mod((\LPSRAngle + \MDSRAngle) * 0.375, 360); - \toBeWrittenToLilyPondInterRadius = 0.30; - \toBeWrittenToLilyPondStartAbs = \toBeWrittenCommonEndAbs5; - \toBeWrittenToLilyPondStartOrd = \toBeWrittenCommonEndOrd; - \toBeWrittenToLilyPondInterIAbs = cos(\toBeWrittenToLilyPondInterIAngle) * \toBeWrittenToLilyPondInterRadius; - \toBeWrittenToLilyPondInterIOrd = sin(\toBeWrittenToLilyPondInterIAngle) * \toBeWrittenToLilyPondInterRadius; - \toBeWrittenToLilyPondInterIIAbs = cos(\toBeWrittenToLilyPondInterIIAngle) * \toBeWrittenToLilyPondInterRadius; - \toBeWrittenToLilyPondInterIIOrd = sin(\toBeWrittenToLilyPondInterIIAngle) * \toBeWrittenToLilyPondInterRadius; - \toBeWrittenToLilyPondEndAbs = \LilyPondAbs - 0.15; - \toBeWrittenToLilyPondEndOrd = \LilyPondOrd - 0.15; - % - % toBeWrittenToBrailleMusic - \toBeWrittenToBrailleMusicInterIAngle = mod((\LPSRAngle + \MDSRAngle) * -0.1, 360); - \toBeWrittenToBrailleMusicInterIIAngle = mod((\LPSRAngle + \MDSRAngle) * 0.375, 360); - \toBeWrittenToBrailleMusicInterRadius = 0.30; - \toBeWrittenToBrailleMusicStartAbs = \toBeWrittenCommonEndAbs5; - \toBeWrittenToBrailleMusicStartOrd = \toBeWrittenCommonEndOrd; - \toBeWrittenToBrailleMusicInterIAbs = cos(\toBeWrittenToBrailleMusicInterIAngle) * \toBeWrittenToBrailleMusicInterRadius; - \toBeWrittenToBrailleMusicInterIOrd = sin(\toBeWrittenToBrailleMusicInterIAngle) * \toBeWrittenToBrailleMusicInterRadius; - \toBeWrittenToBrailleMusicInterIIAbs = cos(\toBeWrittenToBrailleMusicInterIIAngle) * \toBeWrittenToBrailleMusicInterRadius; - \toBeWrittenToBrailleMusicInterIIOrd = sin(\toBeWrittenToBrailleMusicInterIIAngle) * \toBeWrittenToBrailleMusicInterRadius; - \toBeWrittenToBrailleMusicEndAbs = \BrailleMusicAbs - 0.15; - \toBeWrittenToBrailleMusicEndOrd = \BrailleMusicOrd - 0.15; - % - % title - \titleAbs = -2.2; - \titleOrd = 2.0; - % - % table - \tableOrd = -2.4; - % - % bottom line - \bottomLineOrd = -3.2; - % - % legend - \legendAbs = \titleAbs; - \legendOrd = -3.4; - % - % date - \dateAbs = 0.25; - \dateOrd = \bottomLineOrd-0.2; -} - - -% The coordinates -% ------------------------------------------------ - -\coordinate (MSR) at (\MSRAbs,\MSROrd); - -\coordinate (MusicXML) at (\MusicXMLAbs,\MusicXMLOrd); -\coordinate (Guido) at (\GuidoAbs,\GuidoOrd); - -% Draw the title -% ------------------------------------------------ - -\node[right,scale=2] (title) at (\titleAbs,\titleOrd) {libmusicxml2:}; - -\node[right,scale=2] (title) at (\titleAbs,\titleOrd-0.15) {architecture overview}; - -\node[right,scale=1] at (\titleAbs,\titleOrd-0.30) {~(light gray indicates items not yet available)}; - -\node[right,scale=1] at (\titleAbs,\titleOrd-0.45) {~(https://github.com/grame-cncm/libmusicxml/tree/lilypond)}; - - -% Draw the elements -% ------------------------------------------------ - -% MSR -\node[align=center,style={circle,minimum size=80,fill=green!20}] - (MSR) at (MSR) {MSR\\(graph)}; - -% MusicXML -\node[align=center,style={rectangle,rounded corners=10pt,minimum size=80,fill=red!15}] - (MusicXML) - at (MusicXML) {MusicXML\\(text)}; - -% MusicXMLTree -\node[align=center,style={circle,minimum size=80,fill=red!15}] - (MusicXMLTree) - at (\MusicXMLTreeAbs,\MusicXMLTreeOrd) {xmlelement\\tree}; - -% Guido -\node[align=center,style={rectangle,rounded corners=10pt,minimum size=80,fill=brown!20}] - (Guido) at (Guido) {Guido\\(text)}; - -% LilyPond -\node[align=center,style={rectangle,rounded corners=10pt,minimum size=80,fill=orange!20}] - (LilyPond) - at (\LilyPondAbs, \LilyPondOrd) {LilyPond\\(text)}; -\node[align=center,style={circle,minimum size=80,fill=orange!20}] - (LPSR) - at (\LPSRAbs, \LPSROrd) {LPSR\\(graph)}; - -% Braille music -\node[align=center,style={rectangle,rounded corners=10pt,minimum size=80,fill=orange!20}] - (Braille music) - at (\BrailleMusicAbs, \BrailleMusicOrd) {Braille music\\(text)}; -\node[align=center,style={circle,minimum size=80,fill=orange!20}] - (BSR) - at (\BSRAbs, \BSROrd) {BSR\\(graph)}; - -% MIDI -\node[align=center,style={rectangle,rounded corners=10pt,minimum size=80,fill=blue!15}] - (MIDI) - at (\MIDIAbs,\MIDIOrd) {MIDI\\(binary)}; - -% MDSR -\node[align=center,style={circle,minimum size=80,fill=blue!15,text=gray!80}] - (MDSR) - at (\MDSRAbs,\MDSROrd) {MDSR\\(?)}; - -% textOutput -\node[align=center] - (textOutput) - at (\textOutputAbs,\textOutputOrd) {\includegraphics[scale=0.15]{TextOutputIcon.png}}; - - -% Draw the arrows between the elements -% ------------------------------------------------ - -% MusicXML <-> MusicXMLTree -\draw [<->,thick,{Stealth[length=10pt]}-{Stealth[length=10pt]}] (MusicXML) -- (MusicXMLTree); - -% MusicXMLTree -> MSR -\draw [->,thick,{Stealth[length=10pt,color=gray!50]}-{Stealth[length=10pt]}] (MusicXMLTree) -- (MSR); - -% MSR <-> LPSR -\draw [<-,thick,{Stealth[length=10pt]}-{Stealth[length=10pt]}] (MSR) -- (LPSR); - -% LPSR -> LilyPond -\draw [->,thick,-{Stealth[length=10pt]}] (LPSR) -- (LilyPond); - -% MSR <-> BSR -\draw [<-,thick,{Stealth[length=10pt]}-{Stealth[length=10pt]}] (MSR) -- (BSR); - -% BSR -> Braille music -\draw [->,thick,-{Stealth[length=10pt]}] (BSR) -- (Braille music); - -% MIDI -> MDSR -\draw [<->,very thick,{Stealth[length=10pt]}-{Stealth[length=10pt]},loosely dashed,color=gray!50] (MIDI) -- (MDSR); - -% MDSR -> MSR -\draw [<->,very thick,{Stealth[length=10pt]}-{Stealth[length=10pt]},loosely dashed,color=gray!50] (MDSR) -- (MSR); - - -% Draw the tools -% ------------------------------------------------ - -\filldraw [gray!30] - (\toolsStartAbs, \toolsStartOrd) circle [radius=0pt] - (\toolsInterAbs,\toolsInterOrd) circle [radius=0pt] - (\toolsEndAbs,\toolsEndOrd) circle [radius=0pt]; - -\draw [->,thick,red,-{Stealth[length=10pt]},anchor=center] - (\toolsStartAbs, \toolsStartOrd) - .. - node[above,pos=0.85,sloped] {tools} - controls (\toolsInterAbs,\toolsInterOrd) - .. - (\toolsEndAbs,\toolsEndOrd); - - -% Draw RandomMusic -% ------------------------------------------------ - -\filldraw [gray!30] - (\RandomMusicStartAbs, \RandomMusicStartOrd) circle [radius=1pt] - (\RandomMusicInterAbs,\RandomMusicInterOrd) circle [radius=0pt] - (\RandomMusicEndAbs,\RandomMusicEndOrd) circle [radius=0pt]; - -\draw [->,thick,red,-{Stealth[length=10pt]},anchor=center] - (\RandomMusicStartAbs, \RandomMusicStartOrd) - .. - node[above,pos=0.175,sloped] {\texttt{RandomMusic}} - controls (\RandomMusicInterAbs,\RandomMusicInterOrd) - .. - (\RandomMusicEndAbs,\RandomMusicEndOrd); - - -% Draw xml2guido -% ------------------------------------------------ - -\filldraw [gray!30] - (\xmlToGuidoStartAbs, \xmlToGuidoStartOrd) circle [radius=0pt] - (\xmlToGuidoInterAbs,\xmlToGuidoInterOrd) circle [radius=0pt] - (\xmlToGuidoEndAbs,\xmlToGuidoEndOrd) circle [radius=0pt]; - -\draw [->,thick,red,-{Stealth[length=10pt]},anchor=center] - (\xmlToGuidoStartAbs, \xmlToGuidoStartOrd) - .. - node[above,pos=0.815,sloped] {\texttt{xml2guido}} - controls (\xmlToGuidoInterAbs,\xmlToGuidoInterOrd) - .. - (\xmlToGuidoEndAbs,\xmlToGuidoEndOrd); - - -% Draw xml2ly -% ------------------------------------------------ - -\filldraw [gray!30] - (\xmlToLyStartAbs,\xmlToLyStartOrd) circle [radius=0pt] - (\xmlToLyInterIAbs,\xmlToLyInterIOrd) circle [radius=0pt] - (\xmlToLyInterIIAbs,\xmlToLyInterIIOrd) circle [radius=0pt] - (\xmlToLyEndAbs,\xmlToLyEndOrd) circle [radius=0pt]; - -\draw [->,thick,red,-{Stealth[length=10pt]},anchor=center] - (\xmlToLyStartAbs, \xmlToLyStartOrd) - .. - node[above,pos=0.685,sloped] {\texttt{xml2ly}} - controls - (\xmlToLyInterIAbs,\xmlToLyInterIOrd) - and - (\xmlToLyInterIIAbs,\xmlToLyInterIIOrd) - .. - (\xmlToLyEndAbs,\xmlToLyEndOrd); - - -% Draw xml2brl -% ------------------------------------------------ - -\filldraw [gray!30] - (\xmlToBrlStartAbs,\xmlToBrlStartOrd) circle [radius=0pt] - (\xmlToBrlInterIAbs,\xmlToBrlInterIOrd) circle [radius=0pt] - (\xmlToBrlInterIIAbs,\xmlToBrlInterIIOrd) circle [radius=0pt] - (\xmlToBrlEndAbs,\xmlToBrlEndOrd) circle [radius=0pt]; - -\draw [->,thick,red,-{Stealth[length=10pt]},anchor=center] - (\xmlToBrlStartAbs, \xmlToBrlStartOrd) - .. - node[above,pos=0.685,sloped] {\texttt{xml2brl}} - controls - (\xmlToBrlInterIAbs,\xmlToBrlInterIOrd) - and - (\xmlToBrlInterIIAbs,\xmlToBrlInterIIOrd) - .. - (\xmlToBrlEndAbs,\xmlToBrlEndOrd); - - -% Draw toBeWrittenCommon -% ------------------------------------------------ - -\filldraw [gray!30] - (\toBeWrittenCommonStartAbs,\toBeWrittenCommonStartOrd) circle [radius=1pt]; - -\draw [-,thick,red,loosely dashed,color=gray!50,anchor=center] - (\toBeWrittenCommonStartAbs, \toBeWrittenCommonStartOrd) - -- - (\toBeWrittenCommonEndAbs,\toBeWrittenCommonEndOrd) - node [sloped,midway,above] {\texttt{toBeWritten}}; - - -% Draw toBeWrittenToMusicXML -% ------------------------------------------------ - -\filldraw [gray!30] - (\toBeWrittenToMusicXMLStartAbs,\toBeWrittenToMusicXMLStartOrd) circle [radius=0pt] - (\toBeWrittenToMusicXMLInterIAbs,\toBeWrittenToMusicXMLInterIOrd) circle [radius=0pt] - (\toBeWrittenToMusicXMLInterIIAbs,\toBeWrittenToMusicXMLInterIIOrd) circle [radius=0pt] - (\toBeWrittenToMusicXMLEndAbs,\toBeWrittenToMusicXMLEndOrd) circle [radius=0pt]; - -\draw [-,thick,red,-{Stealth[length=10pt]},loosely dashed,color=gray!50,anchor=center] - (\toBeWrittenToMusicXMLStartAbs, \toBeWrittenToMusicXMLStartOrd) - .. - % node[above,pos=0.10,sloped] {toBeWritten} - controls - (\toBeWrittenToMusicXMLInterIAbs,\toBeWrittenToMusicXMLInterIOrd) - and - (\toBeWrittenToMusicXMLInterIIAbs,\toBeWrittenToMusicXMLInterIIOrd) - .. - (\toBeWrittenToMusicXMLEndAbs,\toBeWrittenToMusicXMLEndOrd); - - -% Draw toBeWrittenToLilyPond -% ------------------------------------------------ - -\filldraw [gray!30] - (\toBeWrittenToLilyPondStartAbs,\toBeWrittenToLilyPondStartOrd) circle [radius=0pt] - (\toBeWrittenToLilyPondInterIAbs,\toBeWrittenToLilyPondInterIOrd) circle [radius=0pt] - (\toBeWrittenToLilyPondInterIIAbs,\toBeWrittenToLilyPondInterIIOrd) circle [radius=0pt] - (\toBeWrittenToLilyPondEndAbs,\toBeWrittenToLilyPondEndOrd) circle [radius=0pt]; - -\draw [-,thick,red,-{Stealth[length=10pt]},loosely dashed,color=gray!50,anchor=center] - (\toBeWrittenToLilyPondStartAbs, \toBeWrittenToLilyPondStartOrd) - .. - controls - (\toBeWrittenToLilyPondInterIAbs,\toBeWrittenToLilyPondInterIOrd) - and - (\toBeWrittenToLilyPondInterIIAbs,\toBeWrittenToLilyPondInterIIOrd) - .. - (\toBeWrittenToLilyPondEndAbs,\toBeWrittenToLilyPondEndOrd); - - -% Draw toBeWrittenToBrailleMusic -% ------------------------------------------------ - -\filldraw [gray!30] - (\toBeWrittenToBrailleMusicStartAbs,\toBeWrittenToBrailleMusicStartOrd) circle [radius=0pt] - (\toBeWrittenToBrailleMusicInterIAbs,\toBeWrittenToBrailleMusicInterIOrd) circle [radius=0pt] - (\toBeWrittenToBrailleMusicInterIIAbs,\toBeWrittenToBrailleMusicInterIIOrd) circle [radius=0pt] - (\toBeWrittenToBrailleMusicEndAbs,\toBeWrittenToBrailleMusicEndOrd) circle [radius=0pt]; - -\draw [-,thick,red,-{Stealth[length=10pt]},loosely dashed,color=gray!50,anchor=center] - (\toBeWrittenToBrailleMusicStartAbs, \toBeWrittenToBrailleMusicStartOrd) - .. - controls - (\toBeWrittenToBrailleMusicInterIAbs,\toBeWrittenToBrailleMusicInterIOrd) - and - (\toBeWrittenToBrailleMusicInterIIAbs,\toBeWrittenToBrailleMusicInterIIOrd) - .. - (\toBeWrittenToBrailleMusicEndAbs,\toBeWrittenToBrailleMusicEndOrd); - - -% Draw the table -% ------------------------------------------------ - -\node[right,scale=1] (table) at (\legendAbs,\tableOrd) { -\def \contentsWidth{1.5\textwidth} -\def \arraystretch{1.3} -% -\begin{tabular}[t]{lp{\contentsWidth}} -{Entity} & {Description} \tabularnewline[0.5ex] -\hline\\[-3.0ex] -% -xmlelement tree & a tree representing the MusicXML markups such as {\tt }, {\tt