diff --git a/.github/workflows/ci_build.yml b/.github/workflows/ci_build.yml index 08437b037dc..ca515fa61ad 100644 --- a/.github/workflows/ci_build.yml +++ b/.github/workflows/ci_build.yml @@ -6,7 +6,7 @@ on: # but only for the branches specified branches: # Push events on develop branch - - develop + - 'develop' # Push events on ci-test branch (uncomment if needed for testing purposes) # - ci-test paths-ignore: @@ -44,7 +44,7 @@ env: # emscripten EM_VERSION: latest EM_CACHE_FOLDER: "emsdk-cache" - EM_CACHE_ID: 2 + EM_CACHE_ID: 3 # gh-pages GH_PAGES_REPO: ${{ github.repository_owner }}/verovio.org # works from rism-digital and from forks @@ -74,10 +74,6 @@ jobs: fail-fast: false matrix: include: - - os: ubuntu-20.04 - compiler: g++ - version: "9" - - os: ubuntu-20.04 compiler: g++ version: "10" @@ -86,13 +82,17 @@ jobs: compiler: g++ version: "11" + - os: ubuntu-22.04 + compiler: g++ + version: "12" + - os: ubuntu-20.04 compiler: clang - version: "6.0" + version: "10" - os: ubuntu-20.04 compiler: clang - version: "9" + version: "11" - os: ubuntu-20.04 compiler: clang @@ -100,11 +100,11 @@ jobs: - os: macos-latest compiler: xcode - version: "13.1" + version: "14.3" - os: macos-latest compiler: xcode - version: "14.2" + version: "15.3" - os: macos-11 compiler: g++ diff --git a/.github/workflows/clang-format-check.yml b/.github/workflows/clang-format-check.yml index e00c94d00fa..f79013e8515 100644 --- a/.github/workflows/clang-format-check.yml +++ b/.github/workflows/clang-format-check.yml @@ -18,8 +18,8 @@ jobs: steps: - uses: actions/checkout@v4 - name: Run clang-format style check for C/C++ programs. - uses: jidicula/clang-format-action@v4.9.0 + uses: jidicula/clang-format-action@v4.11.0 with: - clang-format-version: "15" + clang-format-version: "18" check-path: ${{ matrix.path['check'] }} exclude-regex: ${{ matrix.path['exclude'] }} diff --git a/.github/workflows/python-ci-wheel.yml b/.github/workflows/python-ci-wheel.yml index 219ed29ce00..ee9ee651098 100644 --- a/.github/workflows/python-ci-wheel.yml +++ b/.github/workflows/python-ci-wheel.yml @@ -82,13 +82,15 @@ jobs: #===============================================# # wheels - name: Build wheels - uses: pypa/cibuildwheel@v2.16.1 + uses: pypa/cibuildwheel@v2.16.5 with: output-dir: wheelhouse env: CIBW_SKIP: cp37-macosx_arm64 CIBW_BUILD: ${{ env.CIBW_BUILD_IDENTIFIER }} CIBW_ARCHS_MACOS: x86_64 arm64 + CIBW_ENVIRONMENT_MACOS: + MACOSX_DEPLOYMENT_TARGET=10.15 CIBW_TEST_SKIP: cp*-macosx_arm64 CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 CIBW_MANYLINUX_I686_IMAGE: manylinux2014 diff --git a/CHANGELOG.md b/CHANGELOG.md index 62594d4e9c2..ef043a05f18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [4.2.0] - 2024-05-05 +* Support for `fTrem@unitdur` (@eNote-GmbH) +* Upgrade to C++20 +* Update of the Midifile library +* Fix lyric position in MIDI output +* Fix string formatting output with some locale configurations (@ammatwain) + ## [4.1.0] - 2023-12-15 * Support for staves ordered by `scoreDef` * Support for `rend@letterspacing` and `syl@letterspacing` in MEI vu diff --git a/README.md b/README.md index fbed8c471cc..89d73c6f194 100644 --- a/README.md +++ b/README.md @@ -3,13 +3,13 @@ [![PyPI - Wheel](https://img.shields.io/pypi/wheel/verovio)](https://pypi.org/project/verovio/) [![AppVeyor status](https://ci.appveyor.com/api/projects/status/121cxhmtwurxffh0?svg=true)](https://ci.appveyor.com/project/LaurentPugin/verovio-r1t6l) [![GH Actions status](https://github.com/rism-digital/verovio/workflows/Verovio%20CI%20Build/badge.svg)](https://github.com/rism-digital/verovio/actions?query=workflow%3A%22Verovio+CI+Build%22) - [![PyPI - Downlaods](https://img.shields.io/pypi/dm/verovio?label=PyPI%20downloads)](https://pypi.org/project/verovio/) [![NPM - Downlaods](https://img.shields.io/npm/dm/verovio?label=NPM%20-%20downloads)](https://www.npmjs.com/package/verovio) +[![DOI](https://zenodo.org/badge/15762693.svg)](https://zenodo.org/doi/10.5281/zenodo.10544792) Verovio is a fast, portable and lightweight library for engraving [Music Encoding Initiative (MEI)](http://www.music-encoding.org) digital scores into SVG images. Verovio also contains on-the-fly converters to render [Plaine & Easie Code](https://www.iaml.info/plaine-easie-code), [Humdrum](https://www.humdrum.org), [Musedata](https://musedata.org), [MusicXML](https://www.musicxml.com), [EsAC](http://esac-data.org), and [ABC](https://en.wikipedia.org/wiki/ABC_notation) digital scores. -Verovio is written in standard 2017 C++ and can be compiled as a standalone command-line tool, used as a compiled music-rendering library for applications (Qt, python), or compiled into Javascript using the Emscripten LLVM-to-JavaScript compiler. Check out the JavaScript toolkit version of verovio running in the [MEI Viewer](http://www.verovio.org/mei-viewer.xhtml) as well as the [app](http://www.verovio.org/app.html) or [tutorials](https://book.verovio.org/first-steps/) for web integration and user interaction. +Verovio is written in standard 2020 C++ and can be compiled as a standalone command-line tool, used as a compiled music-rendering library for applications (Qt, python), or compiled into Javascript using the Emscripten LLVM-to-JavaScript compiler. Check out the JavaScript toolkit version of verovio running in the [MEI Viewer](http://www.verovio.org/mei-viewer.xhtml) as well as the [app](http://www.verovio.org/app.html) or [tutorials](https://book.verovio.org/first-steps/) for web integration and user interaction. ![Choice interaction](https://raw.githubusercontent.com/rism-digital/verovio.org/gh-pages/movies/reflow.gif) diff --git a/Verovio.podspec b/Verovio.podspec index 7e284004015..ed5dc087278 100644 --- a/Verovio.podspec +++ b/Verovio.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'Verovio' - s.version = '4.1.0' + s.version = '4.2.0' s.license = { :type => 'LGPL', :file => 'COPYING' } s.homepage = 'https://www.verovio.org/index.xhtml' s.authors = { 'Contributors List' => 'https://github.com/rism-digital/verovio/graphs/contributors' } @@ -17,7 +17,7 @@ Pod::Spec.new do |s| s.ios.deployment_target = '14.0' s.osx.deployment_target = '10.15' s.pod_target_xcconfig = { - "CLANG_CXX_LANGUAGE_STANDARD" => "c++17", + "CLANG_CXX_LANGUAGE_STANDARD" => "c++20", "CLANG_CXX_LIBRARY" => "libc++", "GCC_C_LANGUAGE_STANDARD" => "gnu11", "GCC_DYNAMIC_NO_PIC" => "NO", diff --git a/Verovio.xcodeproj/project.pbxproj b/Verovio.xcodeproj/project.pbxproj index b129cb6e9af..9d46f1aadd8 100644 --- a/Verovio.xcodeproj/project.pbxproj +++ b/Verovio.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ 4D1693FF1E3A44F300569BF4 /* durationinterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EBE188539540037FD8E /* durationinterface.cpp */; }; 4D1694001E3A44F300569BF4 /* toolkit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EBF188539540037FD8E /* toolkit.cpp */; }; 4D1694011E3A44F300569BF4 /* MidiEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D1BE7671C688F5A0086DC0E /* MidiEvent.cpp */; }; - 4D1694021E3A44F300569BF4 /* io.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EC0188539540037FD8E /* io.cpp */; }; + 4D1694021E3A44F300569BF4 /* iobase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EC0188539540037FD8E /* iobase.cpp */; }; 4D1694031E3A44F300569BF4 /* harm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D796B5D1D78641900A15238 /* harm.cpp */; }; 4D1694041E3A44F300569BF4 /* space.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DB3072E1AC9ED2500EE0982 /* space.cpp */; }; 4D1694051E3A44F300569BF4 /* iodarms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EC1188539540037FD8E /* iodarms.cpp */; }; @@ -182,6 +182,12 @@ 4D16945A1E3A44F300569BF4 /* dot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DC34BA719BC4A83006175CD /* dot.cpp */; }; 4D16946A1E3A455100569BF4 /* humlib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40CA06581E351161009CFDD7 /* humlib.cpp */; }; 4D1694741E3A455200569BF4 /* humlib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40CA06581E351161009CFDD7 /* humlib.cpp */; }; + 4D1AC9772B6A9BB200434023 /* filereader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D1AC9762B6A9BB200434023 /* filereader.cpp */; }; + 4D1AC9782B6A9BB200434023 /* filereader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D1AC9762B6A9BB200434023 /* filereader.cpp */; }; + 4D1AC9792B6A9BB200434023 /* filereader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D1AC9762B6A9BB200434023 /* filereader.cpp */; }; + 4D1AC97A2B6A9BB200434023 /* filereader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D1AC9762B6A9BB200434023 /* filereader.cpp */; }; + 4D1AC97C2B6A9BD000434023 /* filereader.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D1AC97B2B6A9BD000434023 /* filereader.h */; }; + 4D1AC97D2B6A9BD000434023 /* filereader.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D1AC97B2B6A9BD000434023 /* filereader.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4D1BD1B521908D6B000D35B2 /* halfmrpt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D1BD1B421908D6B000D35B2 /* halfmrpt.cpp */; }; 4D1BD1B621908D6B000D35B2 /* halfmrpt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D1BD1B421908D6B000D35B2 /* halfmrpt.cpp */; }; 4D1BD1B721908D6B000D35B2 /* halfmrpt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D1BD1B421908D6B000D35B2 /* halfmrpt.cpp */; }; @@ -800,6 +806,12 @@ 4DE96E3B21C4373200CB85BE /* bracketspan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DE96E3A21C4373200CB85BE /* bracketspan.cpp */; }; 4DE96E3C21C4373200CB85BE /* bracketspan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DE96E3A21C4373200CB85BE /* bracketspan.cpp */; }; 4DE96E3D21C4373200CB85BE /* bracketspan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DE96E3A21C4373200CB85BE /* bracketspan.cpp */; }; + 4DEBE6E12B36E78900B67DFB /* facsimilefunctor.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DEBE6E02B36E78900B67DFB /* facsimilefunctor.h */; }; + 4DEBE6E22B36E78900B67DFB /* facsimilefunctor.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DEBE6E02B36E78900B67DFB /* facsimilefunctor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4DEBE6E42B36E79600B67DFB /* facsimilefunctor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DEBE6E32B36E79600B67DFB /* facsimilefunctor.cpp */; }; + 4DEBE6E52B36E79600B67DFB /* facsimilefunctor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DEBE6E32B36E79600B67DFB /* facsimilefunctor.cpp */; }; + 4DEBE6E62B36E9B300B67DFB /* facsimilefunctor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DEBE6E32B36E79600B67DFB /* facsimilefunctor.cpp */; }; + 4DEBE6E72B36E9B400B67DFB /* facsimilefunctor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DEBE6E32B36E79600B67DFB /* facsimilefunctor.cpp */; }; 4DEC4D5A21C800A000D1D273 /* abbr.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DEC4D5921C8009600D1D273 /* abbr.h */; }; 4DEC4D7A21C8048700D1D273 /* abbr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DEC4D7921C8048700D1D273 /* abbr.cpp */; }; 4DEC4D7B21C8048700D1D273 /* abbr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DEC4D7921C8048700D1D273 /* abbr.cpp */; }; @@ -914,7 +926,7 @@ 8F086EE9188539540037FD8E /* doc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EBD188539540037FD8E /* doc.cpp */; }; 8F086EEA188539540037FD8E /* durationinterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EBE188539540037FD8E /* durationinterface.cpp */; }; 8F086EEB188539540037FD8E /* toolkit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EBF188539540037FD8E /* toolkit.cpp */; }; - 8F086EEC188539540037FD8E /* io.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EC0188539540037FD8E /* io.cpp */; }; + 8F086EEC188539540037FD8E /* iobase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EC0188539540037FD8E /* iobase.cpp */; }; 8F086EED188539540037FD8E /* iodarms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EC1188539540037FD8E /* iodarms.cpp */; }; 8F086EEE188539540037FD8E /* iomei.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EC2188539540037FD8E /* iomei.cpp */; }; 8F086EEF188539540037FD8E /* iomusxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EC3188539540037FD8E /* iomusxml.cpp */; }; @@ -948,7 +960,7 @@ 8F3DD31E18854AFB0051330C /* bboxdevicecontext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EB9188539540037FD8E /* bboxdevicecontext.cpp */; }; 8F3DD32018854AFB0051330C /* devicecontext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EBC188539540037FD8E /* devicecontext.cpp */; }; 8F3DD32218854AFB0051330C /* svgdevicecontext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086ED5188539540037FD8E /* svgdevicecontext.cpp */; }; - 8F3DD32418854B090051330C /* io.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EC0188539540037FD8E /* io.cpp */; }; + 8F3DD32418854B090051330C /* iobase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EC0188539540037FD8E /* iobase.cpp */; }; 8F3DD32618854B090051330C /* iodarms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EC1188539540037FD8E /* iodarms.cpp */; }; 8F3DD32818854B090051330C /* iomei.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EC2188539540037FD8E /* iomei.cpp */; }; 8F3DD32A18854B090051330C /* iomusxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EC3188539540037FD8E /* iomusxml.cpp */; }; @@ -994,7 +1006,7 @@ 8F59293B18854BF800FE51AD /* doc.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F59291418854BF800FE51AD /* doc.h */; }; 8F59293C18854BF800FE51AD /* durationinterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F59291518854BF800FE51AD /* durationinterface.h */; }; 8F59293D18854BF800FE51AD /* toolkit.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F59291618854BF800FE51AD /* toolkit.h */; }; - 8F59293E18854BF800FE51AD /* io.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F59291718854BF800FE51AD /* io.h */; }; + 8F59293E18854BF800FE51AD /* iobase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F59291718854BF800FE51AD /* iobase.h */; }; 8F59293F18854BF800FE51AD /* iodarms.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F59291818854BF800FE51AD /* iodarms.h */; }; 8F59294018854BF800FE51AD /* iomei.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F59291918854BF800FE51AD /* iomei.h */; }; 8F59294118854BF800FE51AD /* iomusxml.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F59291A18854BF800FE51AD /* iomusxml.h */; }; @@ -1056,8 +1068,8 @@ BB4C4AAA22A932A0001F6AF0 /* devicecontextbase.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D797B041A67C55F007637BD /* devicecontextbase.h */; settings = {ATTRIBUTES = (Public, ); }; }; BB4C4AAB22A932A0001F6AF0 /* svgdevicecontext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086ED5188539540037FD8E /* svgdevicecontext.cpp */; }; BB4C4AAC22A932A0001F6AF0 /* svgdevicecontext.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F59292C18854BF800FE51AD /* svgdevicecontext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BB4C4AAD22A932A6001F6AF0 /* io.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EC0188539540037FD8E /* io.cpp */; }; - BB4C4AAE22A932A6001F6AF0 /* io.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F59291718854BF800FE51AD /* io.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BB4C4AAD22A932A6001F6AF0 /* iobase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EC0188539540037FD8E /* iobase.cpp */; }; + BB4C4AAE22A932A6001F6AF0 /* iobase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F59291718854BF800FE51AD /* iobase.h */; settings = {ATTRIBUTES = (Public, ); }; }; BB4C4AAF22A932A6001F6AF0 /* ioabc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 402197931F2E09DA00182DF1 /* ioabc.cpp */; }; BB4C4AB022A932A6001F6AF0 /* ioabc.h in Headers */ = {isa = PBXBuildFile; fileRef = 402197921F2E09CB00182DF1 /* ioabc.h */; settings = {ATTRIBUTES = (Public, ); }; }; BB4C4AB122A932A6001F6AF0 /* iodarms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F086EC1188539540037FD8E /* iodarms.cpp */; }; @@ -1757,6 +1769,8 @@ 4D09D3EC1EA8AD8500A420E6 /* horizontalaligner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = horizontalaligner.cpp; path = src/horizontalaligner.cpp; sourceTree = ""; }; 4D14600F1EA8A913007DB90C /* horizontalaligner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = horizontalaligner.h; path = include/vrv/horizontalaligner.h; sourceTree = ""; }; 4D1694601E3A44F300569BF4 /* Verovio-Humdrum */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "Verovio-Humdrum"; sourceTree = BUILT_PRODUCTS_DIR; }; + 4D1AC9762B6A9BB200434023 /* filereader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filereader.cpp; path = src/filereader.cpp; sourceTree = ""; }; + 4D1AC97B2B6A9BD000434023 /* filereader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filereader.h; path = include/vrv/filereader.h; sourceTree = ""; }; 4D1BD1B421908D6B000D35B2 /* halfmrpt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = halfmrpt.cpp; path = src/halfmrpt.cpp; sourceTree = ""; }; 4D1BD1B821908D78000D35B2 /* halfmrpt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = halfmrpt.h; path = include/vrv/halfmrpt.h; sourceTree = ""; }; 4D1BE7661C688F5A0086DC0E /* Binasc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Binasc.cpp; path = src/midi/Binasc.cpp; sourceTree = ""; }; @@ -2014,6 +2028,8 @@ 4DE644F41EDBEA01002FBE6C /* breath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = breath.cpp; path = src/breath.cpp; sourceTree = ""; }; 4DE96E3821C4370E00CB85BE /* bracketspan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bracketspan.h; path = include/vrv/bracketspan.h; sourceTree = ""; }; 4DE96E3A21C4373200CB85BE /* bracketspan.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bracketspan.cpp; path = src/bracketspan.cpp; sourceTree = ""; }; + 4DEBE6E02B36E78900B67DFB /* facsimilefunctor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = facsimilefunctor.h; path = include/vrv/facsimilefunctor.h; sourceTree = ""; }; + 4DEBE6E32B36E79600B67DFB /* facsimilefunctor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = facsimilefunctor.cpp; path = src/facsimilefunctor.cpp; sourceTree = ""; }; 4DEC4D5921C8009600D1D273 /* abbr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = abbr.h; path = include/vrv/abbr.h; sourceTree = ""; }; 4DEC4D7921C8048700D1D273 /* abbr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = abbr.cpp; path = src/abbr.cpp; sourceTree = ""; }; 4DEC4D7D21C804C500D1D273 /* add.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = add.cpp; path = src/add.cpp; sourceTree = ""; }; @@ -2077,7 +2093,7 @@ 8F086EBD188539540037FD8E /* doc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = doc.cpp; path = src/doc.cpp; sourceTree = ""; }; 8F086EBE188539540037FD8E /* durationinterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = durationinterface.cpp; path = src/durationinterface.cpp; sourceTree = ""; }; 8F086EBF188539540037FD8E /* toolkit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = toolkit.cpp; path = src/toolkit.cpp; sourceTree = ""; }; - 8F086EC0188539540037FD8E /* io.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = io.cpp; path = src/io.cpp; sourceTree = ""; }; + 8F086EC0188539540037FD8E /* iobase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = iobase.cpp; path = src/iobase.cpp; sourceTree = ""; }; 8F086EC1188539540037FD8E /* iodarms.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = iodarms.cpp; path = src/iodarms.cpp; sourceTree = ""; }; 8F086EC2188539540037FD8E /* iomei.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = iomei.cpp; path = src/iomei.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; 8F086EC3188539540037FD8E /* iomusxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = iomusxml.cpp; path = src/iomusxml.cpp; sourceTree = ""; }; @@ -2118,7 +2134,7 @@ 8F59291418854BF800FE51AD /* doc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = doc.h; path = include/vrv/doc.h; sourceTree = ""; }; 8F59291518854BF800FE51AD /* durationinterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = durationinterface.h; path = include/vrv/durationinterface.h; sourceTree = ""; }; 8F59291618854BF800FE51AD /* toolkit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = toolkit.h; path = include/vrv/toolkit.h; sourceTree = ""; }; - 8F59291718854BF800FE51AD /* io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = io.h; path = include/vrv/io.h; sourceTree = ""; }; + 8F59291718854BF800FE51AD /* iobase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iobase.h; path = include/vrv/iobase.h; sourceTree = ""; }; 8F59291818854BF800FE51AD /* iodarms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iodarms.h; path = include/vrv/iodarms.h; sourceTree = ""; }; 8F59291918854BF800FE51AD /* iomei.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = iomei.h; path = include/vrv/iomei.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 8F59291A18854BF800FE51AD /* iomusxml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iomusxml.h; path = include/vrv/iomusxml.h; sourceTree = ""; }; @@ -2768,6 +2784,8 @@ 36E0442D2347A9290054F141 /* expansionmap.h */, 4D79643826C6B3520026288B /* featureextractor.cpp */, 4D79643026C6AA720026288B /* featureextractor.h */, + 4D1AC9762B6A9BB200434023 /* filereader.cpp */, + 4D1AC97B2B6A9BD000434023 /* filereader.h */, 4DF28A041A754DF000BA9F7D /* floatingobject.cpp */, 4D95D4F41D7185DE00B2B856 /* floatingobject.h */, 4D09D3EC1EA8AD8500A420E6 /* horizontalaligner.cpp */, @@ -2815,8 +2833,8 @@ 8F086F37188539C50037FD8E /* io */ = { isa = PBXGroup; children = ( - 8F086EC0188539540037FD8E /* io.cpp */, - 8F59291718854BF800FE51AD /* io.h */, + 8F086EC0188539540037FD8E /* iobase.cpp */, + 8F59291718854BF800FE51AD /* iobase.h */, 402197931F2E09DA00182DF1 /* ioabc.cpp */, 402197921F2E09CB00182DF1 /* ioabc.h */, 8F086EC1188539540037FD8E /* iodarms.cpp */, @@ -3012,6 +3030,8 @@ E7265E6D29DC6FD200D11F41 /* castofffunctor.h */, E763EF4129E939FB0029E56D /* convertfunctor.cpp */, E763EF3E29E939C00029E56D /* convertfunctor.h */, + 4DEBE6E32B36E79600B67DFB /* facsimilefunctor.cpp */, + 4DEBE6E02B36E78900B67DFB /* facsimilefunctor.h */, E74A806028BC9111005274E7 /* findfunctor.cpp */, E74A806528BC97D5005274E7 /* findfunctor.h */, E722106528F856C4002CD6E9 /* findlayerelementsfunctor.cpp */, @@ -3174,7 +3194,7 @@ 4DEC4DD621C8295700D1D273 /* del.h in Headers */, 4DB726C81B8BB0F30040231B /* text.h in Headers */, 4D308101203DB69D00BC44F6 /* ref.h in Headers */, - 8F59293E18854BF800FE51AD /* io.h in Headers */, + 8F59293E18854BF800FE51AD /* iobase.h in Headers */, 4DF092A22497706600239195 /* phrase.h in Headers */, 8F59293F18854BF800FE51AD /* iodarms.h in Headers */, 4DDBBB571C7AE43E00054AFF /* hairpin.h in Headers */, @@ -3378,12 +3398,14 @@ E79320642991452100D80975 /* calcstemfunctor.h in Headers */, 4D1BD1B921908D78000D35B2 /* halfmrpt.h in Headers */, 4DACC9F42990F29A00B55913 /* atts_visual.h in Headers */, + 4D1AC97C2B6A9BD000434023 /* filereader.h in Headers */, 4DA0EADD22BB77AF00A7EBEB /* zone.h in Headers */, E71EF3C32975E4DC00D36264 /* resetfunctor.h in Headers */, 4D763EC91987D067003FCAB5 /* metersig.h in Headers */, 40DA9C3720905CEB006BED92 /* ioabc.h in Headers */, 4DB3D8CD1F83D11100B5FC2B /* harm.h in Headers */, 40D45EC2204EEAFB009C1EC9 /* instrdef.h in Headers */, + 4DEBE6E12B36E78900B67DFB /* facsimilefunctor.h in Headers */, 4D94E0E22995411100F49F89 /* meibasic.h in Headers */, BD2E4D9B2875882200B04350 /* stem.h in Headers */, 4DACC9EA2990F29A00B55913 /* attmodule.h in Headers */, @@ -3420,7 +3442,7 @@ 4DACC9E92990F29A00B55913 /* atts_fingering.h in Headers */, BB4C4A9422A9328F001F6AF0 /* doc.h in Headers */, BB4C4A9922A9328F001F6AF0 /* horizontalaligner.h in Headers */, - BB4C4AAE22A932A6001F6AF0 /* io.h in Headers */, + BB4C4AAE22A932A6001F6AF0 /* iobase.h in Headers */, BB4C4BAA22A932EB001F6AF0 /* view.h in Headers */, 4DACC9DD2990F29A00B55913 /* atts_header.h in Headers */, BB4C4BC422A9330D001F6AF0 /* pugixml.hpp in Headers */, @@ -3441,6 +3463,7 @@ E7908EA0298582090004C1F9 /* alignfunctor.h in Headers */, BB4C4B9822A932E5001F6AF0 /* durationinterface.h in Headers */, BB4C4BB722A932F6001F6AF0 /* jsonxx.h in Headers */, + 4DEBE6E22B36E78900B67DFB /* facsimilefunctor.h in Headers */, BB4C4B1622A932C8001F6AF0 /* systemelement.h in Headers */, BB4C4AC622A932B6001F6AF0 /* measure.h in Headers */, E741AD00299A3D3500854426 /* calcslurdirectionfunctor.h in Headers */, @@ -3694,6 +3717,7 @@ BBC19FBF22B37CA000100F42 /* all.h in Headers */, 4DA0EAE222BB77AF00A7EBEB /* editortoolkit_mensural.h in Headers */, E79C87C8269440810098FE85 /* lv.h in Headers */, + 4D1AC97D2B6A9BD000434023 /* filereader.h in Headers */, BB4C4B5822A932D7001F6AF0 /* layerelement.h in Headers */, BB4C4B9422A932E5001F6AF0 /* areaposinterface.h in Headers */, ); @@ -3861,6 +3885,7 @@ 4D1693F61E3A44F300569BF4 /* barline.cpp in Sources */, E7901661298BCB2C008FDB4E /* calcalignmentxposfunctor.cpp in Sources */, 400FEDD6206FA74D000D3233 /* gracegrp.cpp in Sources */, + 4D1AC9782B6A9BB200434023 /* filereader.cpp in Sources */, 4D89F90F201771AE00A4D336 /* num.cpp in Sources */, 4D1693F71E3A44F300569BF4 /* bboxdevicecontext.cpp in Sources */, 4D1693F81E3A44F300569BF4 /* beam.cpp in Sources */, @@ -3895,7 +3920,7 @@ E722106828F85981002CD6E9 /* findlayerelementsfunctor.cpp in Sources */, 4D1694011E3A44F300569BF4 /* MidiEvent.cpp in Sources */, 4DA0EAEF22BB77C300A7EBEB /* editortoolkit_cmn.cpp in Sources */, - 4D1694021E3A44F300569BF4 /* io.cpp in Sources */, + 4D1694021E3A44F300569BF4 /* iobase.cpp in Sources */, 4D1694031E3A44F300569BF4 /* harm.cpp in Sources */, 4D79641926C1522B0026288B /* pageelement.cpp in Sources */, 4DB3D8DE1F83D15200B5FC2B /* btrem.cpp in Sources */, @@ -3926,6 +3951,7 @@ E7F39C6229A62B430055DBE0 /* adjustclefchangesfunctor.cpp in Sources */, E79320682991454000D80975 /* calcstemfunctor.cpp in Sources */, 4DED4F18294733140073E504 /* altsyminterface.cpp in Sources */, + 4DEBE6E72B36E9B400B67DFB /* facsimilefunctor.cpp in Sources */, 4DEF8A6521B7AAF90093A76B /* f.cpp in Sources */, 4D2073F922A3BCE000E0765F /* tabdursym.cpp in Sources */, 4D16940B1E3A44F300569BF4 /* keysig.cpp in Sources */, @@ -4140,6 +4166,7 @@ files = ( 4DEF8A6421B7AAF90093A76B /* f.cpp in Sources */, 4DB3D89E1F7E7FAA00B5FC2B /* fig.cpp in Sources */, + 4D1AC9772B6A9BB200434023 /* filereader.cpp in Sources */, 4D4FCD121F54570E0009C455 /* staffdef.cpp in Sources */, 8F086EE2188539540037FD8E /* verticalaligner.cpp in Sources */, 4DEC4D9621C81E3B00D1D273 /* expan.cpp in Sources */, @@ -4187,7 +4214,7 @@ 4D1BE76D1C688F5A0086DC0E /* MidiEvent.cpp in Sources */, E75EA9FD29CC3A88003A97A7 /* calcarticfunctor.cpp in Sources */, 35FDEBD124B6DC5B00AC1696 /* fing.cpp in Sources */, - 8F086EEC188539540037FD8E /* io.cpp in Sources */, + 8F086EEC188539540037FD8E /* iobase.cpp in Sources */, E75A69A029CCF8A200414819 /* adjustbeamsfunctor.cpp in Sources */, 4DACC9762990F29A00B55913 /* atts_neumes.cpp in Sources */, 4D796B5E1D78641900A15238 /* harm.cpp in Sources */, @@ -4206,6 +4233,7 @@ 8F086EF1188539540037FD8E /* keysig.cpp in Sources */, E74A806C28BC98B2005274E7 /* functorinterface.cpp in Sources */, E7870357299CF06D00156DC4 /* adjustarpegfunctor.cpp in Sources */, + 4DEBE6E62B36E9B300B67DFB /* facsimilefunctor.cpp in Sources */, 4DEC4D9E21C81E9400D1D273 /* orig.cpp in Sources */, 4DDBBB5D1C7AE45900054AFF /* hairpin.cpp in Sources */, 4D43C30C1A9BB22A00EA28F3 /* view_mensural.cpp in Sources */, @@ -4424,6 +4452,7 @@ 4DB3D8F01F83D1A700B5FC2B /* fig.cpp in Sources */, E790165F298BCB27008FDB4E /* calcalignmentxposfunctor.cpp in Sources */, 8F3DD36718854B410051330C /* verticalaligner.cpp in Sources */, + 4D1AC9792B6A9BB200434023 /* filereader.cpp in Sources */, 4D766F0220ACAD6E006875D8 /* nc.cpp in Sources */, 4DEC4D9821C81E3B00D1D273 /* expan.cpp in Sources */, 4D3C3F0E294B89AF009993E6 /* ornam.cpp in Sources */, @@ -4489,6 +4518,7 @@ 4DB3D8D51F83D12B00B5FC2B /* tempo.cpp in Sources */, 4DEC4DA021C81E9400D1D273 /* orig.cpp in Sources */, E7F39C6329A62B440055DBE0 /* adjustclefchangesfunctor.cpp in Sources */, + 4DEBE6E42B36E79600B67DFB /* facsimilefunctor.cpp in Sources */, E79320692991454000D80975 /* calcstemfunctor.cpp in Sources */, 8F3DD33E18854B2E0051330C /* beam.cpp in Sources */, 4DED4F19294733140073E504 /* altsyminterface.cpp in Sources */, @@ -4608,7 +4638,7 @@ E7E9C11729B0A20400CFCE2F /* adjustaccidxfunctor.cpp in Sources */, 8F3DD33818854B250051330C /* system.cpp in Sources */, 4D72A5E1208A37F0009DEC1E /* mnum.cpp in Sources */, - 8F3DD32418854B090051330C /* io.cpp in Sources */, + 8F3DD32418854B090051330C /* iobase.cpp in Sources */, 4DACC9D62990F29A00B55913 /* atts_pagebased.cpp in Sources */, 4DA0EACD22BB779400A7EBEB /* zone.cpp in Sources */, 4DEC4DBC21C8288900D1D273 /* choice.cpp in Sources */, @@ -4706,6 +4736,7 @@ BB4C4B9322A932E5001F6AF0 /* areaposinterface.cpp in Sources */, E7901660298BCB27008FDB4E /* calcalignmentxposfunctor.cpp in Sources */, BB4C4AA122A9328F001F6AF0 /* verticalaligner.cpp in Sources */, + 4D1AC97A2B6A9BB200434023 /* filereader.cpp in Sources */, BB4C4B2F22A932CF001F6AF0 /* pedal.cpp in Sources */, 4D2E759222BC2B80004C51F0 /* tuning.cpp in Sources */, BB4C4B4922A932D7001F6AF0 /* clef.cpp in Sources */, @@ -4760,7 +4791,7 @@ BB4C4A9322A9328F001F6AF0 /* doc.cpp in Sources */, 4D8135212322C41800F59C01 /* keyaccid.cpp in Sources */, BB4C4B9922A932E5001F6AF0 /* linkinginterface.cpp in Sources */, - BB4C4AAD22A932A6001F6AF0 /* io.cpp in Sources */, + BB4C4AAD22A932A6001F6AF0 /* iobase.cpp in Sources */, E74A806A28BC9843005274E7 /* functorinterface.cpp in Sources */, 4DD7C0FD27A55CEA00B9C017 /* timemap.cpp in Sources */, E78833632994EC7E00D44B01 /* calcchordnoteheadsfunctor.cpp in Sources */, @@ -4771,6 +4802,7 @@ E793206A2991454100D80975 /* calcstemfunctor.cpp in Sources */, BB4C4AD722A932B6001F6AF0 /* staff.cpp in Sources */, 4DED4F1A294733140073E504 /* altsyminterface.cpp in Sources */, + 4DEBE6E52B36E79600B67DFB /* facsimilefunctor.cpp in Sources */, BB4C4B9F22A932E5001F6AF0 /* positioninterface.cpp in Sources */, BB4C4B5322A932D7001F6AF0 /* halfmrpt.cpp in Sources */, BB4C4B8722A932DF001F6AF0 /* num.cpp in Sources */, @@ -4987,7 +5019,7 @@ buildSettings = { CODE_SIGN_IDENTITY = "-"; DEAD_CODE_STRIPPING = YES; - MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; USER_HEADER_SEARCH_PATHS = ""; }; @@ -4998,7 +5030,7 @@ buildSettings = { CODE_SIGN_IDENTITY = "-"; DEAD_CODE_STRIPPING = YES; - MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; USER_HEADER_SEARCH_PATHS = ""; }; @@ -5008,7 +5040,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; @@ -5056,7 +5088,7 @@ "$(inherited)", /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, ); - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.15; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = ""; @@ -5067,7 +5099,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; @@ -5108,7 +5140,7 @@ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, ./include/vrv/, ); - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.15; ONLY_ACTIVE_ARCH = NO; SDKROOT = macosx; USER_HEADER_SEARCH_PATHS = ""; @@ -5124,7 +5156,7 @@ "$(inherited)", NO_HUMDRUM_SUPPORT, ); - MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; + MACOSX_DEPLOYMENT_TARGET = ""; PRODUCT_NAME = "$(TARGET_NAME)"; USER_HEADER_SEARCH_PATHS = ""; }; @@ -5136,7 +5168,7 @@ CODE_SIGN_IDENTITY = "-"; DEAD_CODE_STRIPPING = YES; GCC_PREPROCESSOR_DEFINITIONS = NO_HUMDRUM_SUPPORT; - MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; + MACOSX_DEPLOYMENT_TARGET = ""; PRODUCT_NAME = "$(TARGET_NAME)"; USER_HEADER_SEARCH_PATHS = ""; }; @@ -5150,7 +5182,7 @@ EXECUTABLE_PREFIX = lib; HEADER_SEARCH_PATHS = ""; MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; }; @@ -5164,7 +5196,7 @@ EXECUTABLE_PREFIX = lib; HEADER_SEARCH_PATHS = ""; MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; }; @@ -5175,7 +5207,7 @@ buildSettings = { CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_COMMA = YES; @@ -5211,7 +5243,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.rism.VerovioFramework; @@ -5230,7 +5262,7 @@ buildSettings = { CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_COMMA = YES; @@ -5264,7 +5296,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.rism.VerovioFramework; diff --git a/bindings/android/README.md b/bindings/android/README.md index d4d42bd7f94..bd9a2d5719a 100644 --- a/bindings/android/README.md +++ b/bindings/android/README.md @@ -1,4 +1,7 @@ -## About +## Documentation for Android + +> [!WARNING] +> This documentation has not been updated and might be obsolete This allows verovio to be built as a native library for Android. It does not include any Java bindings. @@ -50,4 +53,4 @@ Java_com_example_myapplication_MainActivity_stringFromJNI(JNIEnv* env, jobject / std::string hello = "Hello from Verovio " + tk.GetVersion(); return env->NewStringUTF(hello.c_str()); } -``` \ No newline at end of file +``` diff --git a/bindings/c/README.md b/bindings/c/README.md deleted file mode 100644 index c25a089845b..00000000000 --- a/bindings/c/README.md +++ /dev/null @@ -1,25 +0,0 @@ -## C function interface - -To use Verovio with any language that supports a plain C function interface you will first need to build Verovio as a library - -```sh -cd tools -cmake -DBUILD_AS_LIBRARY=ON . -make -``` - -The compiled library (`libverovio.so`) will contain callable C symbols. These wrapper symbols are defined in `./tools/c_wrapper.h` - -## Complete example in C - -To run the `main.c` example you can use gcc to compile the example and link to the pre-built library. - -```sh -gcc main.c -o main -L../../tools -lverovio -``` - -Run (without changing your default LD LIBRARY PATH): - -```sh -LD_LIBRARY_PATH=../../tools ./main -``` diff --git a/bindings/c/main.c b/bindings/c/main.c deleted file mode 100644 index be1d8f2bef9..00000000000 --- a/bindings/c/main.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "stdbool.h" -#include "stdio.h" - -// include the header with the C functions -#include "../../tools/c_wrapper.h" - -int main() -{ - printf("Calling constructor\n"); - void *pointer = vrvToolkit_constructorResourcePath("../../data"); - printf("Pointer value %p\n", pointer); - const char *options = vrvToolkit_getAvailableOptions(pointer); - printf("%s", options); -} diff --git a/bindings/iOS/all.h b/bindings/iOS/all.h index 9c77adf6e96..98dc337773b 100644 --- a/bindings/iOS/all.h +++ b/bindings/iOS/all.h @@ -94,11 +94,13 @@ #import #import #import +#import #import #import #import #import #import +#import #import #import #import @@ -119,8 +121,8 @@ #import #import #import -#import #import +#import #import #import #import diff --git a/bindings/java/pom.xml b/bindings/java/pom.xml index a9933cc5813..d096e913665 100644 --- a/bindings/java/pom.xml +++ b/bindings/java/pom.xml @@ -4,7 +4,7 @@ org.rism.verovio VerovioToolkit - 4.1.0 + 4.2.0 jar VerovioToolkit diff --git a/bindings/python/.pypi-version b/bindings/python/.pypi-version index e41fa9d0265..84066c019f4 100644 --- a/bindings/python/.pypi-version +++ b/bindings/python/.pypi-version @@ -1,3 +1,3 @@ # dummy file used by setup.py for counting revisions when publishing to test.pypi # counting can be reset by making a change to this file -4.1.0 +4.2.0 diff --git a/bindings/qt/README.md b/bindings/qt/README.md index cdfa3858604..192cbb79066 100644 --- a/bindings/qt/README.md +++ b/bindings/qt/README.md @@ -1,4 +1,9 @@ -## Build instructions +## Documentation for the Qt binding + +> [!WARNING] +> This documentation has not been updated and might be obsolete + +### Build instructions Building the demo for Qt involves following steps: @@ -30,7 +35,7 @@ Building the demo for Qt involves following steps: make -j8 ``` -## Start Qt Demo +### Start Qt Demo To start the Qt demo add the directories for the CPP and Qt libraries to LD_LIBRARY_PATH @@ -38,7 +43,7 @@ To start the Qt demo add the directories for the CPP and Qt libraries to LD_LIBR LD_LIBRARY_PATH=../../../tools/:../build-library ./verovio-qt-demo ``` -## Android +### Android The demo can also be compiled for Android. This requires following steps: diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 5cddd3ed514..5d2b688547a 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -48,7 +48,7 @@ if(MSVC) add_definitions(/wd4244) # suppress warning of possible loss of precision add_definitions(-DNO_PAE_SUPPORT) # regex is working differently under Windows so PAE is not supported (yet) add_definitions(-DUSE_PAE_OLD_PARSER) - add_definitions(/std:c++17) + add_definitions(/std:c++20) include_directories(../include/win32) else() if(CMAKE_BUILD_TYPE MATCHES Debug) @@ -60,7 +60,7 @@ else() # jsonxx raises -Wdollar-in-identifier-extension # gcc 8.3.1 does not like -Wdollar-in-identifier-extension option. add_definitions(-Wall -W -pedantic -Wno-unused-parameter -Wno-dollar-in-identifier-extension) - add_definitions(-std=c++17) + add_definitions(-std=c++20) # extra warnings similar to Xcode compiling settings (most probably covered by -Wall): # https://github.com/llvm-mirror/clang/blob/master/include/clang/Basic/DiagnosticGroups.td @@ -175,7 +175,12 @@ set(all_SRC if (BUILD_AS_LIBRARY OR BUILD_AS_ANDROID_LIBRARY) message(STATUS "***** Building Verovio as shared library *****") - add_library(verovio SHARED ../tools/c_wrapper.cpp ${all_SRC}) + if(WIN32) + add_definitions(-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS) + endif() + add_library(verovio SHARED "../tools/c_wrapper.cpp" ${all_SRC}) + # list all headers to be copied for all installation + file(GLOB_RECURSE all_HEADERS "../include/*/*.h*" "../libmei/*/*.h*" "../tools/c_wrapper.h") ########### # WASM BC # @@ -242,11 +247,22 @@ if (BUILD_AS_ANDROID_LIBRARY) target_link_libraries(verovio ${log-lib}) endif() -install( - TARGETS verovio DESTINATION bin +install(TARGETS verovio + # for executables and dll on Win + RUNTIME DESTINATION bin + # shared libraries + LIBRARY DESTINATION lib + # for static libraries + ARCHIVE DESTINATION lib + # public headers + INCLUDES DESTINATION include ) install( DIRECTORY ../data/ DESTINATION share/verovio FILES_MATCHING PATTERN "*.xml" PATTERN "*.svg" PATTERN "*.css" ) +# install all headers in /usr/local/include/verovio +if (BUILD_AS_LIBRARY) + install(FILES ${all_HEADERS} DESTINATION include/verovio) +endif() diff --git a/codemeta.json b/codemeta.json index f561ecadf88..1ff83006465 100644 --- a/codemeta.json +++ b/codemeta.json @@ -4,8 +4,8 @@ "identifier": "Verovio", "name": "Verovio", "description": "Verovio is a fast, portable and lightweight open-source library for engraving Music Encoding Initiative (MEI) music scores into SVG.", - "softwareVersion": "4.1.0", - "datePublished": "2023-12-15", + "softwareVersion": "4.2.0", + "datePublished": "2024-05-05", "license": "https://www.gnu.org/licenses/lgpl-3.0", "programmingLanguage": [{ "@type": "ComputerLanguage", diff --git a/data/Bravura.css b/data/Bravura.css index c4c899e374f..135c1441c3e 100644 --- a/data/Bravura.css +++ b/data/Bravura.css @@ -1,6 +1,6 @@ @font-face { font-family: 'Bravura'; - src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff2'); + src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff2'); font-weight: normal; font-style: normal; } \ No newline at end of file diff --git a/data/Bravura.xml b/data/Bravura.xml index 6c8403f057e..bc11153a139 100644 --- a/data/Bravura.xml +++ b/data/Bravura.xml @@ -137,6 +137,7 @@ + diff --git a/data/Bravura/E0FB.xml b/data/Bravura/E0FB.xml new file mode 100644 index 00000000000..d31a94c6fb4 --- /dev/null +++ b/data/Bravura/E0FB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Gootville.css b/data/Gootville.css index 68ce50f6a2c..c40a0ed2167 100644 --- a/data/Gootville.css +++ b/data/Gootville.css @@ -1,6 +1,6 @@ @font-face { font-family: 'Gootville'; - src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff2'); + src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff2'); font-weight: normal; font-style: normal; } \ No newline at end of file diff --git a/data/Leipzig.css b/data/Leipzig.css index 1c5ceaffd16..ddea8607924 100644 --- a/data/Leipzig.css +++ b/data/Leipzig.css @@ -1,6 +1,6 @@ @font-face { font-family: 'Leipzig'; - src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff2'); + src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff2'); font-weight: normal; font-style: normal; } \ No newline at end of file diff --git a/data/Leipzig.xml b/data/Leipzig.xml index e9ec64193a3..31e33ecb8ae 100644 --- a/data/Leipzig.xml +++ b/data/Leipzig.xml @@ -89,7 +89,7 @@ - + @@ -776,7 +776,7 @@ - + @@ -792,4 +792,11 @@ + + + + + + + \ No newline at end of file diff --git a/data/Leipzig/E0FA.xml b/data/Leipzig/E0FA.xml index abace349678..804cced5bf6 100644 --- a/data/Leipzig/E0FA.xml +++ b/data/Leipzig/E0FA.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/E0FB.xml b/data/Leipzig/E0FB.xml new file mode 100644 index 00000000000..416d896d8e9 --- /dev/null +++ b/data/Leipzig/E0FB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leipzig/E8F8.xml b/data/Leipzig/E8F8.xml index dd25ac4801a..d42573c956c 100644 --- a/data/Leipzig/E8F8.xml +++ b/data/Leipzig/E8F8.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/data/Leipzig/EB9F.xml b/data/Leipzig/EB9F.xml new file mode 100644 index 00000000000..bfbba5c5de9 --- /dev/null +++ b/data/Leipzig/EB9F.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/Leland.css b/data/Leland.css index 35db26c5b3a..c94c3c4eb2b 100644 --- a/data/Leland.css +++ b/data/Leland.css @@ -1,6 +1,6 @@ @font-face { font-family: 'Leland'; - src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff2'); + src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff2'); font-weight: normal; font-style: normal; } \ No newline at end of file diff --git a/data/Petaluma.css b/data/Petaluma.css index f0a19c22553..fcf2a0f807f 100644 --- a/data/Petaluma.css +++ b/data/Petaluma.css @@ -1,6 +1,6 @@ @font-face { font-family: 'Petaluma'; - src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff2'); + src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff2'); font-weight: normal; font-style: normal; } \ No newline at end of file diff --git a/data/Petaluma.xml b/data/Petaluma.xml index fcc6082e623..6e4e06c1935 100644 --- a/data/Petaluma.xml +++ b/data/Petaluma.xml @@ -645,6 +645,7 @@ + diff --git a/data/Petaluma/E0FB.xml b/data/Petaluma/E0FB.xml new file mode 100644 index 00000000000..32346ea6de5 --- /dev/null +++ b/data/Petaluma/E0FB.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/emscripten/buildToolkit b/emscripten/buildToolkit index b6f20e5a7ae..afde9dd2b76 100755 --- a/emscripten/buildToolkit +++ b/emscripten/buildToolkit @@ -55,7 +55,7 @@ my ($lightQ, $version, $chattyQ, $helpQ, $exclusion, $wasmQ, $makeQ, $modularize my ($nopae, $nohumdrum, $nomusicxml, $nodarms); my ($FLAGS_NAME, $VERSION, $CHATTY); -my $cpp = 17; # c++ version to compile (11, 14, 17) +my $cpp = 20; # c++ version to compile (11, 14, 17) my $VEROVIO_ROOT = ".."; Getopt::Long::Configure("bundling"); diff --git a/emscripten/npm/package.json b/emscripten/npm/package.json index eb89d7ae6a6..906545666e4 100644 --- a/emscripten/npm/package.json +++ b/emscripten/npm/package.json @@ -1,6 +1,6 @@ { "name": "verovio", - "version": "4.1.0", + "version": "4.2.0", "description": "This is the stable version of the verovio package", "main": "dist/verovio-toolkit-wasm.js", "exports": { diff --git a/emscripten/npm/src/emscripten-proxy.js b/emscripten/npm/src/emscripten-proxy.js index 3f0c7669b5b..d7991c57b7f 100644 --- a/emscripten/npm/src/emscripten-proxy.js +++ b/emscripten/npm/src/emscripten-proxy.js @@ -109,7 +109,7 @@ function getToolkitFunction(VerovioModule, method) { mapping.renderToMIDI = VerovioModule.cwrap("vrvToolkit_renderToMIDI", "string", ["number", "string"]); // char *renderToPAE(Toolkit *ic) - mapping.renderToPAE = VerovioModule.cwrap("vrvToolkit_renderToPAE", "string"); + mapping.renderToPAE = VerovioModule.cwrap("vrvToolkit_renderToPAE", "string", ["number"]); // char *renderToSvg(Toolkit *ic, int pageNo, int xmlDeclaration) mapping.renderToSVG = VerovioModule.cwrap("vrvToolkit_renderToSVG", "string", ["number", "number", "number"]); diff --git a/emscripten/npm/src/verovio-toolkit.js b/emscripten/npm/src/verovio-toolkit.js index 68714185384..6ee8b347c42 100644 --- a/emscripten/npm/src/verovio-toolkit.js +++ b/emscripten/npm/src/verovio-toolkit.js @@ -1,6 +1,19 @@ import { createEmscriptenProxy } from "./emscripten-proxy.js"; +async function solve(options) { + const res = await fetch( + `https://raw.githubusercontent.com/lpugin/test-font/main/GoldenAge.zip`, + { + method: "GET", + } + ); + const data = await res.blob(); + console.log( res ); + console.log( options ); + return options; +} + export class VerovioToolkit { constructor(VerovioModule) { @@ -183,6 +196,7 @@ export class VerovioToolkit { } setOptions(options) { + options = this.preprocessOptions(options); return this.proxy.setOptions(this.ptr, JSON.stringify(options)); } @@ -193,6 +207,30 @@ export class VerovioToolkit { return JSON.parse(this.proxy.validatePAE(this.ptr, data)); } + preprocessOptions(options) { + // Nothing to do if we do not have 'fontAddCustom' set + if (!Object.hasOwn(options, 'fontAddCustom')) { + return options; + } + const filenames = options['fontAddCustom']; + let filesInBase64 = []; + // Get all the files and convert them to a base64 string + for (let i = 0; i < filenames.length; i++ ) { + const request = new XMLHttpRequest(); + request.open("GET", filenames[i], false); // `false` makes the request synchronous + request.send(null); + + if (request.status === 200) { + filesInBase64.push(request.responseText); + } + else { + console.error(`${filenames[i]} could not be retrieved`); + } + } + options["fontAddCustom"] = filesInBase64; + //console.log( options ); + return options; + } } // A pointer to the object - only one instance can be created for now diff --git a/fonts/Leipzig/Leipzig.svg b/fonts/Leipzig/Leipzig.svg index 5ea289cf111..533fab01983 100644 --- a/fonts/Leipzig/Leipzig.svg +++ b/fonts/Leipzig/Leipzig.svg @@ -2,11 +2,11 @@ -Created by FontForge 20220308 at Sun Jul 2 12:58:41 2023 - By Laurent Pugin +Created by FontForge 20230101 at Sat Feb 24 19:01:45 2024 + By Klaus Rettinghaus Created by Etienne Darbellay, Jean-Francois Marti, Laurent Pugin, and Klaus Rettinghaus. This font is licensed under the SIL Open Font License \(http://scripts.sil.org/OFL\). -Version 5.2.85 +Version 5.2.88 @@ -182,7 +182,7 @@ d="M0 0c0 0 40 320 300 320s300 -320 300 -320h-32s-38 227 -268 227s-268 -227 -268 +d="M198 133c102 0 207 -45 207 -133c0 -92 -118 -133 -227 -133c-101 0 -178 46 -178 133c0 88 93 133 198 133z" /> @@ -2402,7 +2402,7 @@ d="M0 375h14v-750h-14v750zM100 375h14v-750h-14v750z" /> +d="M120.146 498.265c0.224774 0 17.1897 -1.82497 17.1897 -14.4827c0 -13.3186 -15.0253 -42.3383 -63.3358 -117.782c-34 -53 -64 -102 -64 -102c-10 6 -3 2 -10 6c74.9234 172.649 99.0583 228.265 120.146 228.265z" /> + + diff --git a/fonts/Leipzig/Leipzig.ttf b/fonts/Leipzig/Leipzig.ttf index 5527ea96b9f..8eafdf58bb8 100644 Binary files a/fonts/Leipzig/Leipzig.ttf and b/fonts/Leipzig/Leipzig.ttf differ diff --git a/fonts/Leipzig/Leipzig.woff2 b/fonts/Leipzig/Leipzig.woff2 index e1cfe002396..174d3b07445 100644 Binary files a/fonts/Leipzig/Leipzig.woff2 and b/fonts/Leipzig/Leipzig.woff2 differ diff --git a/fonts/Leipzig/leipzig_metadata.json b/fonts/Leipzig/leipzig_metadata.json index 83e976a9651..ee909e258c6 100644 --- a/fonts/Leipzig/leipzig_metadata.json +++ b/fonts/Leipzig/leipzig_metadata.json @@ -30,7 +30,7 @@ "tupletBracketThickness": 0.16 }, "fontName": "Leipzig", - "fontVersion": "5.2.86", + "fontVersion": "5.2.88", "glyphBBoxes": { "4stringTabClef": { "bBoxNE": [ @@ -1078,8 +1078,8 @@ 1.9931 ], "bBoxSW": [ - -0.0005, - 1.0547 + 0.0, + 1.056 ] }, "chantCclef": { @@ -4972,6 +4972,16 @@ -0.528 ] }, + "noteheadHalfFilled": { + "bBoxNE": [ + 1.256, + 0.552 + ], + "bBoxSW": [ + 0.0, + -0.528 + ] + }, "noteheadHalfWithX": { "bBoxNE": [ 1.256, @@ -6452,6 +6462,16 @@ 0.0 ] }, + "staffPosLower8": { + "bBoxNE": [ + 0.0, + 0.0 + ], + "bBoxSW": [ + 0.0, + 0.0 + ] + }, "staffPosRaise1": { "bBoxNE": [ 0.0, @@ -7756,6 +7776,24 @@ 0.164 ] }, + "noteheadHalfFilled": { + "cutOutNW": [ + 0.14, + 0.24 + ], + "cutOutSE": [ + 1.076, + -0.24 + ], + "stemDownNW": [ + 0.0, + -0.144 + ], + "stemUpSE": [ + 1.256, + 0.164 + ] + }, "noteheadHalfWithX": { "cutOutNW": [ 0.14, @@ -7850,7 +7888,7 @@ 0.4 ], "cutOutSE": [ - 1.42, + 1.4, -0.4 ] }, diff --git a/fonts/poetry.lock b/fonts/poetry.lock index 7c516f071b4..53c2a8f35ed 100644 --- a/fonts/poetry.lock +++ b/fonts/poetry.lock @@ -1,25 +1,14 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. - -[[package]] -name = "appnope" -version = "0.1.3" -description = "Disable App Nap on macOS >= 10.9" -optional = false -python-versions = "*" -files = [ - {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, - {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, -] +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "astroid" -version = "2.14.2" +version = "2.15.8" description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.7.2" files = [ - {file = "astroid-2.14.2-py3-none-any.whl", hash = "sha256:0e0e3709d64fbffd3037e4ff403580550f14471fd3eaae9fa11cc9a5c7901153"}, - {file = "astroid-2.14.2.tar.gz", hash = "sha256:a3cf9f02c53dd259144a7e8f3ccd75d67c9a8c716ef183e0c1f291bc5d7bb3cf"}, + {file = "astroid-2.15.8-py3-none-any.whl", hash = "sha256:1aa149fc5c6589e3d0ece885b4491acd80af4f087baafa3fb5203b113e68cd3c"}, + {file = "astroid-2.15.8.tar.gz", hash = "sha256:6c107453dffee9055899705de3c9ead36e74119cee151e5a9aaf7f0b0e020a6a"}, ] [package.dependencies] @@ -32,76 +21,77 @@ wrapt = [ [[package]] name = "asttokens" -version = "2.2.1" +version = "2.4.1" description = "Annotate AST trees with source code positions" optional = false python-versions = "*" files = [ - {file = "asttokens-2.2.1-py2.py3-none-any.whl", hash = "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c"}, - {file = "asttokens-2.2.1.tar.gz", hash = "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3"}, + {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, + {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, ] [package.dependencies] -six = "*" +six = ">=1.12.0" [package.extras] -test = ["astroid", "pytest"] - -[[package]] -name = "backcall" -version = "0.2.0" -description = "Specifications for callback functions passed in to an API" -optional = false -python-versions = "*" -files = [ - {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, - {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, -] +astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] +test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] [[package]] name = "black" -version = "22.12.0" +version = "24.3.0" description = "The uncompromising code formatter." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, - {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, - {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, - {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, - {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, - {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, - {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, - {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, - {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, - {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, - {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, - {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, + {file = "black-24.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7d5e026f8da0322b5662fa7a8e752b3fa2dac1c1cbc213c3d7ff9bdd0ab12395"}, + {file = "black-24.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f50ea1132e2189d8dff0115ab75b65590a3e97de1e143795adb4ce317934995"}, + {file = "black-24.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2af80566f43c85f5797365077fb64a393861a3730bd110971ab7a0c94e873e7"}, + {file = "black-24.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:4be5bb28e090456adfc1255e03967fb67ca846a03be7aadf6249096100ee32d0"}, + {file = "black-24.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4f1373a7808a8f135b774039f61d59e4be7eb56b2513d3d2f02a8b9365b8a8a9"}, + {file = "black-24.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aadf7a02d947936ee418777e0247ea114f78aff0d0959461057cae8a04f20597"}, + {file = "black-24.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c02e4ea2ae09d16314d30912a58ada9a5c4fdfedf9512d23326128ac08ac3d"}, + {file = "black-24.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:bf21b7b230718a5f08bd32d5e4f1db7fc8788345c8aea1d155fc17852b3410f5"}, + {file = "black-24.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2818cf72dfd5d289e48f37ccfa08b460bf469e67fb7c4abb07edc2e9f16fb63f"}, + {file = "black-24.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4acf672def7eb1725f41f38bf6bf425c8237248bb0804faa3965c036f7672d11"}, + {file = "black-24.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7ed6668cbbfcd231fa0dc1b137d3e40c04c7f786e626b405c62bcd5db5857e4"}, + {file = "black-24.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:56f52cfbd3dabe2798d76dbdd299faa046a901041faf2cf33288bc4e6dae57b5"}, + {file = "black-24.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79dcf34b33e38ed1b17434693763301d7ccbd1c5860674a8f871bd15139e7837"}, + {file = "black-24.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e19cb1c6365fd6dc38a6eae2dcb691d7d83935c10215aef8e6c38edee3f77abd"}, + {file = "black-24.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65b76c275e4c1c5ce6e9870911384bff5ca31ab63d19c76811cb1fb162678213"}, + {file = "black-24.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b5991d523eee14756f3c8d5df5231550ae8993e2286b8014e2fdea7156ed0959"}, + {file = "black-24.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c45f8dff244b3c431b36e3224b6be4a127c6aca780853574c00faf99258041eb"}, + {file = "black-24.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6905238a754ceb7788a73f02b45637d820b2f5478b20fec82ea865e4f5d4d9f7"}, + {file = "black-24.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7de8d330763c66663661a1ffd432274a2f92f07feeddd89ffd085b5744f85e7"}, + {file = "black-24.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:7bb041dca0d784697af4646d3b62ba4a6b028276ae878e53f6b4f74ddd6db99f"}, + {file = "black-24.3.0-py3-none-any.whl", hash = "sha256:41622020d7120e01d377f74249e677039d20e6344ff5851de8a10f11f513bf93"}, + {file = "black-24.3.0.tar.gz", hash = "sha256:a0c9c4a0771afc6919578cec71ce82a3e31e054904e7197deacbc9382671c41f"}, ] [package.dependencies] click = ">=8.0.0" mypy-extensions = ">=0.4.3" +packaging = ">=22.0" pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "click" -version = "8.1.3" +version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -131,149 +121,160 @@ files = [ [[package]] name = "dill" -version = "0.3.6" -description = "serialize all of python" +version = "0.3.7" +description = "serialize all of Python" optional = false python-versions = ">=3.7" files = [ - {file = "dill-0.3.6-py3-none-any.whl", hash = "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0"}, - {file = "dill-0.3.6.tar.gz", hash = "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"}, + {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, + {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, ] [package.extras] graph = ["objgraph (>=1.7.2)"] [[package]] -name = "executing" +name = "exceptiongroup" version = "1.2.0" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "executing" +version = "2.0.1" description = "Get the currently executing AST node of a frame, and other information" optional = false -python-versions = "*" +python-versions = ">=3.5" files = [ - {file = "executing-1.2.0-py2.py3-none-any.whl", hash = "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc"}, - {file = "executing-1.2.0.tar.gz", hash = "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"}, + {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, + {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, ] [package.extras] -tests = ["asttokens", "littleutils", "pytest", "rich"] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] [[package]] name = "ipython" -version = "8.10.0" +version = "8.18.1" description = "IPython: Productive Interactive Computing" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "ipython-8.10.0-py3-none-any.whl", hash = "sha256:b38c31e8fc7eff642fc7c597061fff462537cf2314e3225a19c906b7b0d8a345"}, - {file = "ipython-8.10.0.tar.gz", hash = "sha256:b13a1d6c1f5818bd388db53b7107d17454129a70de2b87481d555daede5eb49e"}, + {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, + {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, ] [package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -backcall = "*" colorama = {version = "*", markers = "sys_platform == \"win32\""} decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} jedi = ">=0.16" matplotlib-inline = "*" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -pickleshare = "*" -prompt-toolkit = ">=3.0.30,<3.1.0" +prompt-toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" stack-data = "*" traitlets = ">=5" +typing-extensions = {version = "*", markers = "python_version < \"3.10\""} [package.extras] -all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] black = ["black"] -doc = ["docrepr", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] kernel = ["ipykernel"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] -test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] +test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] [[package]] name = "isort" -version = "5.12.0" +version = "5.13.2" description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.8.0" files = [ - {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, - {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, ] [package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] +colors = ["colorama (>=0.4.6)"] [[package]] name = "jedi" -version = "0.18.2" +version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, - {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, + {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, + {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, ] [package.dependencies] -parso = ">=0.8.0,<0.9.0" +parso = ">=0.8.3,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "lazy-object-proxy" -version = "1.9.0" +version = "1.10.0" description = "A fast and thorough lazy object proxy." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, + {file = "lazy-object-proxy-1.10.0.tar.gz", hash = "sha256:78247b6d45f43a52ef35c25b5581459e85117225408a4128a3daf8bf9648ac69"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:855e068b0358ab916454464a884779c7ffa312b8925c6f7401e952dcf3b89977"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab7004cf2e59f7c2e4345604a3e6ea0d92ac44e1c2375527d56492014e690c3"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc0d2fc424e54c70c4bc06787e4072c4f3b1aa2f897dfdc34ce1013cf3ceef05"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e2adb09778797da09d2b5ebdbceebf7dd32e2c96f79da9052b2e87b6ea495895"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1f711e2c6dcd4edd372cf5dec5c5a30d23bba06ee012093267b3376c079ec83"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win32.whl", hash = "sha256:76a095cfe6045c7d0ca77db9934e8f7b71b14645f0094ffcd842349ada5c5fb9"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:b4f87d4ed9064b2628da63830986c3d2dca7501e6018347798313fcf028e2fd4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fec03caabbc6b59ea4a638bee5fce7117be8e99a4103d9d5ad77f15d6f81020c"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02c83f957782cbbe8136bee26416686a6ae998c7b6191711a04da776dc9e47d4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009e6bb1f1935a62889ddc8541514b6a9e1fcf302667dcb049a0be5c8f613e56"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75fc59fc450050b1b3c203c35020bc41bd2695ed692a392924c6ce180c6f1dc9"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:782e2c9b2aab1708ffb07d4bf377d12901d7a1d99e5e410d648d892f8967ab1f"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win32.whl", hash = "sha256:edb45bb8278574710e68a6b021599a10ce730d156e5b254941754a9cc0b17d03"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:e271058822765ad5e3bca7f05f2ace0de58a3f4e62045a8c90a0dfd2f8ad8cc6"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e98c8af98d5707dcdecc9ab0863c0ea6e88545d42ca7c3feffb6b4d1e370c7ba"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:952c81d415b9b80ea261d2372d2a4a2332a3890c2b83e0535f263ddfe43f0d43"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b39d3a151309efc8cc48675918891b865bdf742a8616a337cb0090791a0de9"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e221060b701e2aa2ea991542900dd13907a5c90fa80e199dbf5a03359019e7a3"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:92f09ff65ecff3108e56526f9e2481b8116c0b9e1425325e13245abfd79bdb1b"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win32.whl", hash = "sha256:3ad54b9ddbe20ae9f7c1b29e52f123120772b06dbb18ec6be9101369d63a4074"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:127a789c75151db6af398b8972178afe6bda7d6f68730c057fbbc2e96b08d282"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4ed0518a14dd26092614412936920ad081a424bdcb54cc13349a8e2c6d106a"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ad9e6ed739285919aa9661a5bbed0aaf410aa60231373c5579c6b4801bd883c"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc0a92c02fa1ca1e84fc60fa258458e5bf89d90a1ddaeb8ed9cc3147f417255"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0aefc7591920bbd360d57ea03c995cebc204b424524a5bd78406f6e1b8b2a5d8"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5faf03a7d8942bb4476e3b62fd0f4cf94eaf4618e304a19865abf89a35c0bbee"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win32.whl", hash = "sha256:e333e2324307a7b5d86adfa835bb500ee70bfcd1447384a822e96495796b0ca4"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:cb73507defd385b7705c599a94474b1d5222a508e502553ef94114a143ec6696"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:366c32fe5355ef5fc8a232c5436f4cc66e9d3e8967c01fb2e6302fd6627e3d94"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2297f08f08a2bb0d32a4265e98a006643cd7233fb7983032bd61ac7a02956b3b"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18dd842b49456aaa9a7cf535b04ca4571a302ff72ed8740d06b5adcd41fe0757"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:217138197c170a2a74ca0e05bddcd5f1796c735c37d0eee33e43259b192aa424"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a3a87cf1e133e5b1994144c12ca4aa3d9698517fe1e2ca82977781b16955658"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win32.whl", hash = "sha256:30b339b2a743c5288405aa79a69e706a06e02958eab31859f7f3c04980853b70"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:a899b10e17743683b293a729d3a11f2f399e8a90c73b089e29f5d0fe3509f0dd"}, + {file = "lazy_object_proxy-1.10.0-pp310.pp311.pp312.pp38.pp39-none-any.whl", hash = "sha256:80fa48bd89c8f2f456fc0765c11c23bf5af827febacd2f523ca5bc1893fcc09d"}, ] [[package]] @@ -356,39 +357,58 @@ files = [ [[package]] name = "numpy" -version = "1.24.2" +version = "1.26.2" description = "Fundamental package for array computing in Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3703fc9258a4a122d17043e57b35e5ef1c5a5837c3db8be396c82e04c1cf9b0f"}, + {file = "numpy-1.26.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cc392fdcbd21d4be6ae1bb4475a03ce3b025cd49a9be5345d76d7585aea69440"}, + {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36340109af8da8805d8851ef1d74761b3b88e81a9bd80b290bbfed61bd2b4f75"}, + {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc008217145b3d77abd3e4d5ef586e3bdfba8fe17940769f8aa09b99e856c00"}, + {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ced40d4e9e18242f70dd02d739e44698df3dcb010d31f495ff00a31ef6014fe"}, + {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b272d4cecc32c9e19911891446b72e986157e6a1809b7b56518b4f3755267523"}, + {file = "numpy-1.26.2-cp310-cp310-win32.whl", hash = "sha256:22f8fc02fdbc829e7a8c578dd8d2e15a9074b630d4da29cda483337e300e3ee9"}, + {file = "numpy-1.26.2-cp310-cp310-win_amd64.whl", hash = "sha256:26c9d33f8e8b846d5a65dd068c14e04018d05533b348d9eaeef6c1bd787f9919"}, + {file = "numpy-1.26.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b96e7b9c624ef3ae2ae0e04fa9b460f6b9f17ad8b4bec6d7756510f1f6c0c841"}, + {file = "numpy-1.26.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aa18428111fb9a591d7a9cc1b48150097ba6a7e8299fb56bdf574df650e7d1f1"}, + {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06fa1ed84aa60ea6ef9f91ba57b5ed963c3729534e6e54055fc151fad0423f0a"}, + {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b"}, + {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:854ab91a2906ef29dc3925a064fcd365c7b4da743f84b123002f6139bcb3f8a7"}, + {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f43740ab089277d403aa07567be138fc2a89d4d9892d113b76153e0e412409f8"}, + {file = "numpy-1.26.2-cp311-cp311-win32.whl", hash = "sha256:a2bbc29fcb1771cd7b7425f98b05307776a6baf43035d3b80c4b0f29e9545186"}, + {file = "numpy-1.26.2-cp311-cp311-win_amd64.whl", hash = "sha256:2b3fca8a5b00184828d12b073af4d0fc5fdd94b1632c2477526f6bd7842d700d"}, + {file = "numpy-1.26.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a4cd6ed4a339c21f1d1b0fdf13426cb3b284555c27ac2f156dfdaaa7e16bfab0"}, + {file = "numpy-1.26.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d5244aabd6ed7f312268b9247be47343a654ebea52a60f002dc70c769048e75"}, + {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a3cdb4d9c70e6b8c0814239ead47da00934666f668426fc6e94cce869e13fd7"}, + {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa317b2325f7aa0a9471663e6093c210cb2ae9c0ad824732b307d2c51983d5b6"}, + {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:174a8880739c16c925799c018f3f55b8130c1f7c8e75ab0a6fa9d41cab092fd6"}, + {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f79b231bf5c16b1f39c7f4875e1ded36abee1591e98742b05d8a0fb55d8a3eec"}, + {file = "numpy-1.26.2-cp312-cp312-win32.whl", hash = "sha256:4a06263321dfd3598cacb252f51e521a8cb4b6df471bb12a7ee5cbab20ea9167"}, + {file = "numpy-1.26.2-cp312-cp312-win_amd64.whl", hash = "sha256:b04f5dc6b3efdaab541f7857351aac359e6ae3c126e2edb376929bd3b7f92d7e"}, + {file = "numpy-1.26.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4eb8df4bf8d3d90d091e0146f6c28492b0be84da3e409ebef54349f71ed271ef"}, + {file = "numpy-1.26.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a13860fdcd95de7cf58bd6f8bc5a5ef81c0b0625eb2c9a783948847abbef2c2"}, + {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64308ebc366a8ed63fd0bf426b6a9468060962f1a4339ab1074c228fa6ade8e3"}, + {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baf8aab04a2c0e859da118f0b38617e5ee65d75b83795055fb66c0d5e9e9b818"}, + {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d73a3abcac238250091b11caef9ad12413dab01669511779bc9b29261dd50210"}, + {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b361d369fc7e5e1714cf827b731ca32bff8d411212fccd29ad98ad622449cc36"}, + {file = "numpy-1.26.2-cp39-cp39-win32.whl", hash = "sha256:bd3f0091e845164a20bd5a326860c840fe2af79fa12e0469a12768a3ec578d80"}, + {file = "numpy-1.26.2-cp39-cp39-win_amd64.whl", hash = "sha256:2beef57fb031dcc0dc8fa4fe297a742027b954949cabb52a2a376c144e5e6060"}, + {file = "numpy-1.26.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1cc3d5029a30fb5f06704ad6b23b35e11309491c999838c31f124fee32107c79"}, + {file = "numpy-1.26.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94cc3c222bb9fb5a12e334d0479b97bb2df446fbe622b470928f5284ffca3f8d"}, + {file = "numpy-1.26.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe6b44fb8fcdf7eda4ef4461b97b3f63c466b27ab151bec2366db8b197387841"}, + {file = "numpy-1.26.2.tar.gz", hash = "sha256:f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea"}, +] + +[[package]] +name = "packaging" +version = "24.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" files = [ - {file = "numpy-1.24.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eef70b4fc1e872ebddc38cddacc87c19a3709c0e3e5d20bf3954c147b1dd941d"}, - {file = "numpy-1.24.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8d2859428712785e8a8b7d2b3ef0a1d1565892367b32f915c4a4df44d0e64f5"}, - {file = "numpy-1.24.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6524630f71631be2dabe0c541e7675db82651eb998496bbe16bc4f77f0772253"}, - {file = "numpy-1.24.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a51725a815a6188c662fb66fb32077709a9ca38053f0274640293a14fdd22978"}, - {file = "numpy-1.24.2-cp310-cp310-win32.whl", hash = "sha256:2620e8592136e073bd12ee4536149380695fbe9ebeae845b81237f986479ffc9"}, - {file = "numpy-1.24.2-cp310-cp310-win_amd64.whl", hash = "sha256:97cf27e51fa078078c649a51d7ade3c92d9e709ba2bfb97493007103c741f1d0"}, - {file = "numpy-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7de8fdde0003f4294655aa5d5f0a89c26b9f22c0a58790c38fae1ed392d44a5a"}, - {file = "numpy-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4173bde9fa2a005c2c6e2ea8ac1618e2ed2c1c6ec8a7657237854d42094123a0"}, - {file = "numpy-1.24.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cecaed30dc14123020f77b03601559fff3e6cd0c048f8b5289f4eeabb0eb281"}, - {file = "numpy-1.24.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a23f8440561a633204a67fb44617ce2a299beecf3295f0d13c495518908e910"}, - {file = "numpy-1.24.2-cp311-cp311-win32.whl", hash = "sha256:e428c4fbfa085f947b536706a2fc349245d7baa8334f0c5723c56a10595f9b95"}, - {file = "numpy-1.24.2-cp311-cp311-win_amd64.whl", hash = "sha256:557d42778a6869c2162deb40ad82612645e21d79e11c1dc62c6e82a2220ffb04"}, - {file = "numpy-1.24.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d0a2db9d20117bf523dde15858398e7c0858aadca7c0f088ac0d6edd360e9ad2"}, - {file = "numpy-1.24.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c72a6b2f4af1adfe193f7beb91ddf708ff867a3f977ef2ec53c0ffb8283ab9f5"}, - {file = "numpy-1.24.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c29e6bd0ec49a44d7690ecb623a8eac5ab8a923bce0bea6293953992edf3a76a"}, - {file = "numpy-1.24.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eabd64ddb96a1239791da78fa5f4e1693ae2dadc82a76bc76a14cbb2b966e96"}, - {file = "numpy-1.24.2-cp38-cp38-win32.whl", hash = "sha256:e3ab5d32784e843fc0dd3ab6dcafc67ef806e6b6828dc6af2f689be0eb4d781d"}, - {file = "numpy-1.24.2-cp38-cp38-win_amd64.whl", hash = "sha256:76807b4063f0002c8532cfeac47a3068a69561e9c8715efdad3c642eb27c0756"}, - {file = "numpy-1.24.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4199e7cfc307a778f72d293372736223e39ec9ac096ff0a2e64853b866a8e18a"}, - {file = "numpy-1.24.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:adbdce121896fd3a17a77ab0b0b5eedf05a9834a18699db6829a64e1dfccca7f"}, - {file = "numpy-1.24.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:889b2cc88b837d86eda1b17008ebeb679d82875022200c6e8e4ce6cf549b7acb"}, - {file = "numpy-1.24.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f64bb98ac59b3ea3bf74b02f13836eb2e24e48e0ab0145bbda646295769bd780"}, - {file = "numpy-1.24.2-cp39-cp39-win32.whl", hash = "sha256:63e45511ee4d9d976637d11e6c9864eae50e12dc9598f531c035265991910468"}, - {file = "numpy-1.24.2-cp39-cp39-win_amd64.whl", hash = "sha256:a77d3e1163a7770164404607b7ba3967fb49b24782a6ef85d9b5f54126cc39e5"}, - {file = "numpy-1.24.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:92011118955724465fb6853def593cf397b4a1367495e0b59a7e69d40c4eb71d"}, - {file = "numpy-1.24.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9006288bcf4895917d02583cf3411f98631275bc67cce355a7f39f8c14338fa"}, - {file = "numpy-1.24.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:150947adbdfeceec4e5926d956a06865c1c690f2fd902efede4ca6fe2e657c3f"}, - {file = "numpy-1.24.2.tar.gz", hash = "sha256:003a9f530e880cb2cd177cba1af7220b9aa42def9c4afc2a2fc3ee6be7eb2b22"}, + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] [[package]] @@ -408,64 +428,53 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.11.0" +version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pathspec-0.11.0-py3-none-any.whl", hash = "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229"}, - {file = "pathspec-0.11.0.tar.gz", hash = "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"}, + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] [[package]] name = "pexpect" -version = "4.8.0" +version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" files = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, ] [package.dependencies] ptyprocess = ">=0.5" -[[package]] -name = "pickleshare" -version = "0.7.5" -description = "Tiny 'shelve'-like database with concurrency support" -optional = false -python-versions = "*" -files = [ - {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, - {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, -] - [[package]] name = "platformdirs" -version = "3.0.0" +version = "4.1.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "platformdirs-3.0.0-py3-none-any.whl", hash = "sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567"}, - {file = "platformdirs-3.0.0.tar.gz", hash = "sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9"}, + {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, + {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, ] [package.extras] -docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] [[package]] name = "prompt-toolkit" -version = "3.0.36" +version = "3.0.43" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"}, - {file = "prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63"}, + {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, + {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"}, ] [package.dependencies] @@ -498,31 +507,32 @@ tests = ["pytest"] [[package]] name = "pygments" -version = "2.15.0" +version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.15.0-py3-none-any.whl", hash = "sha256:77a3299119af881904cd5ecd1ac6a66214b6e9bed1f2db16993b54adede64094"}, - {file = "Pygments-2.15.0.tar.gz", hash = "sha256:f7e36cffc4c517fbc252861b9a6e4644ca0e5abadf9a113c72d1358ad09b9500"}, + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] [package.extras] plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pylint" -version = "2.16.2" +version = "2.17.7" description = "python code static checker" optional = false python-versions = ">=3.7.2" files = [ - {file = "pylint-2.16.2-py3-none-any.whl", hash = "sha256:ff22dde9c2128cd257c145cfd51adeff0be7df4d80d669055f24a962b351bbe4"}, - {file = "pylint-2.16.2.tar.gz", hash = "sha256:13b2c805a404a9bf57d002cd5f054ca4d40b0b87542bdaba5e05321ae8262c84"}, + {file = "pylint-2.17.7-py3-none-any.whl", hash = "sha256:27a8d4c7ddc8c2f8c18aa0050148f89ffc09838142193fdbe98f172781a3ff87"}, + {file = "pylint-2.17.7.tar.gz", hash = "sha256:f4fcac7ae74cfe36bc8451e931d8438e4a476c20314b1101c458ad0f05191fad"}, ] [package.dependencies] -astroid = ">=2.14.2,<=2.16.0-dev0" +astroid = ">=2.15.8,<=2.17.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, @@ -541,41 +551,45 @@ testutils = ["gitpython (>3)"] [[package]] name = "scipy" -version = "1.9.3" +version = "1.11.4" description = "Fundamental algorithms for scientific computing in Python" optional = false -python-versions = ">=3.8" -files = [ - {file = "scipy-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1884b66a54887e21addf9c16fb588720a8309a57b2e258ae1c7986d4444d3bc0"}, - {file = "scipy-1.9.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:83b89e9586c62e787f5012e8475fbb12185bafb996a03257e9675cd73d3736dd"}, - {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a72d885fa44247f92743fc20732ae55564ff2a519e8302fb7e18717c5355a8b"}, - {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d01e1dd7b15bd2449c8bfc6b7cc67d630700ed655654f0dfcf121600bad205c9"}, - {file = "scipy-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:68239b6aa6f9c593da8be1509a05cb7f9efe98b80f43a5861cd24c7557e98523"}, - {file = "scipy-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b41bc822679ad1c9a5f023bc93f6d0543129ca0f37c1ce294dd9d386f0a21096"}, - {file = "scipy-1.9.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:90453d2b93ea82a9f434e4e1cba043e779ff67b92f7a0e85d05d286a3625df3c"}, - {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c06e62a390a9167da60bedd4575a14c1f58ca9dfde59830fc42e5197283dab"}, - {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abaf921531b5aeaafced90157db505e10345e45038c39e5d9b6c7922d68085cb"}, - {file = "scipy-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:06d2e1b4c491dc7d8eacea139a1b0b295f74e1a1a0f704c375028f8320d16e31"}, - {file = "scipy-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a04cd7d0d3eff6ea4719371cbc44df31411862b9646db617c99718ff68d4840"}, - {file = "scipy-1.9.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:545c83ffb518094d8c9d83cce216c0c32f8c04aaf28b92cc8283eda0685162d5"}, - {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d54222d7a3ba6022fdf5773931b5d7c56efe41ede7f7128c7b1637700409108"}, - {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cff3a5295234037e39500d35316a4c5794739433528310e117b8a9a0c76d20fc"}, - {file = "scipy-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:2318bef588acc7a574f5bfdff9c172d0b1bf2c8143d9582e05f878e580a3781e"}, - {file = "scipy-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d644a64e174c16cb4b2e41dfea6af722053e83d066da7343f333a54dae9bc31c"}, - {file = "scipy-1.9.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:da8245491d73ed0a994ed9c2e380fd058ce2fa8a18da204681f2fe1f57f98f95"}, - {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4db5b30849606a95dcf519763dd3ab6fe9bd91df49eba517359e450a7d80ce2e"}, - {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c68db6b290cbd4049012990d7fe71a2abd9ffbe82c0056ebe0f01df8be5436b0"}, - {file = "scipy-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:5b88e6d91ad9d59478fafe92a7c757d00c59e3bdc3331be8ada76a4f8d683f58"}, - {file = "scipy-1.9.3.tar.gz", hash = "sha256:fbc5c05c85c1a02be77b1ff591087c83bc44579c6d2bd9fb798bb64ea5e1a027"}, +python-versions = ">=3.9" +files = [ + {file = "scipy-1.11.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc9a714581f561af0848e6b69947fda0614915f072dfd14142ed1bfe1b806710"}, + {file = "scipy-1.11.4-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:cf00bd2b1b0211888d4dc75656c0412213a8b25e80d73898083f402b50f47e41"}, + {file = "scipy-1.11.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9999c008ccf00e8fbcce1236f85ade5c569d13144f77a1946bef8863e8f6eb4"}, + {file = "scipy-1.11.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:933baf588daa8dc9a92c20a0be32f56d43faf3d1a60ab11b3f08c356430f6e56"}, + {file = "scipy-1.11.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8fce70f39076a5aa62e92e69a7f62349f9574d8405c0a5de6ed3ef72de07f446"}, + {file = "scipy-1.11.4-cp310-cp310-win_amd64.whl", hash = "sha256:6550466fbeec7453d7465e74d4f4b19f905642c89a7525571ee91dd7adabb5a3"}, + {file = "scipy-1.11.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f313b39a7e94f296025e3cffc2c567618174c0b1dde173960cf23808f9fae4be"}, + {file = "scipy-1.11.4-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1b7c3dca977f30a739e0409fb001056484661cb2541a01aba0bb0029f7b68db8"}, + {file = "scipy-1.11.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00150c5eae7b610c32589dda259eacc7c4f1665aedf25d921907f4d08a951b1c"}, + {file = "scipy-1.11.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:530f9ad26440e85766509dbf78edcfe13ffd0ab7fec2560ee5c36ff74d6269ff"}, + {file = "scipy-1.11.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5e347b14fe01003d3b78e196e84bd3f48ffe4c8a7b8a1afbcb8f5505cb710993"}, + {file = "scipy-1.11.4-cp311-cp311-win_amd64.whl", hash = "sha256:acf8ed278cc03f5aff035e69cb511741e0418681d25fbbb86ca65429c4f4d9cd"}, + {file = "scipy-1.11.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:028eccd22e654b3ea01ee63705681ee79933652b2d8f873e7949898dda6d11b6"}, + {file = "scipy-1.11.4-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2c6ff6ef9cc27f9b3db93a6f8b38f97387e6e0591600369a297a50a8e96e835d"}, + {file = "scipy-1.11.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b030c6674b9230d37c5c60ab456e2cf12f6784596d15ce8da9365e70896effc4"}, + {file = "scipy-1.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad669df80528aeca5f557712102538f4f37e503f0c5b9541655016dd0932ca79"}, + {file = "scipy-1.11.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ce7fff2e23ab2cc81ff452a9444c215c28e6305f396b2ba88343a567feec9660"}, + {file = "scipy-1.11.4-cp312-cp312-win_amd64.whl", hash = "sha256:36750b7733d960d7994888f0d148d31ea3017ac15eef664194b4ef68d36a4a97"}, + {file = "scipy-1.11.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e619aba2df228a9b34718efb023966da781e89dd3d21637b27f2e54db0410d7"}, + {file = "scipy-1.11.4-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:f3cd9e7b3c2c1ec26364856f9fbe78695fe631150f94cd1c22228456404cf1ec"}, + {file = "scipy-1.11.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d10e45a6c50211fe256da61a11c34927c68f277e03138777bdebedd933712fea"}, + {file = "scipy-1.11.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91af76a68eeae0064887a48e25c4e616fa519fa0d38602eda7e0f97d65d57937"}, + {file = "scipy-1.11.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6df1468153a31cf55ed5ed39647279beb9cfb5d3f84369453b49e4b8502394fd"}, + {file = "scipy-1.11.4-cp39-cp39-win_amd64.whl", hash = "sha256:ee410e6de8f88fd5cf6eadd73c135020bfbbbdfcd0f6162c36a7638a1ea8cc65"}, + {file = "scipy-1.11.4.tar.gz", hash = "sha256:90a2b78e7f5733b9de748f589f09225013685f9b218275257f8a8168ededaeaa"}, ] [package.dependencies] -numpy = ">=1.18.5,<1.26.0" +numpy = ">=1.21.6,<1.28.0" [package.extras] -dev = ["flake8", "mypy", "pycodestyle", "typing_extensions"] -doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-panels (>=0.5.2)", "sphinx-tabs"] -test = ["asv", "gmpy2", "mpmath", "pytest", "pytest-cov", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] +test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "six" @@ -590,13 +604,13 @@ files = [ [[package]] name = "stack-data" -version = "0.6.2" +version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" optional = false python-versions = "*" files = [ - {file = "stack_data-0.6.2-py3-none-any.whl", hash = "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"}, - {file = "stack_data-0.6.2.tar.gz", hash = "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815"}, + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, ] [package.dependencies] @@ -609,13 +623,13 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "svgpathtools" -version = "1.6.0" +version = "1.6.1" description = "A collection of tools for manipulating and analyzing SVG Path objects and Bezier curves." optional = false python-versions = "*" files = [ - {file = "svgpathtools-1.6.0-py2.py3-none-any.whl", hash = "sha256:b046301769de58fe3d35a3f633914455b5bafba52dddfe0a41ec57ac1bcb9439"}, - {file = "svgpathtools-1.6.0.tar.gz", hash = "sha256:c0b934eed29acaeb09988afb4d15c5984366847236e21b80c079d8edb5ac0c4e"}, + {file = "svgpathtools-1.6.1-py2.py3-none-any.whl", hash = "sha256:39967f9a817b8a12cc6dd1646fc162d522fca6c3fd5f8c94913c15ee4cb3a906"}, + {file = "svgpathtools-1.6.1.tar.gz", hash = "sha256:7054e6de1953e295bf565d535d585695453b09f8db4a2f7c4853348732097a3e"}, ] [package.dependencies] @@ -647,126 +661,132 @@ files = [ [[package]] name = "tomlkit" -version = "0.11.6" +version = "0.12.3" description = "Style preserving TOML library" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "tomlkit-0.11.6-py3-none-any.whl", hash = "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b"}, - {file = "tomlkit-0.11.6.tar.gz", hash = "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73"}, + {file = "tomlkit-0.12.3-py3-none-any.whl", hash = "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba"}, + {file = "tomlkit-0.12.3.tar.gz", hash = "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"}, ] [[package]] name = "traitlets" -version = "5.9.0" +version = "5.14.0" description = "Traitlets Python configuration system" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, - {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, + {file = "traitlets-5.14.0-py3-none-any.whl", hash = "sha256:f14949d23829023013c47df20b4a76ccd1a85effb786dc060f34de7948361b33"}, + {file = "traitlets-5.14.0.tar.gz", hash = "sha256:fcdaa8ac49c04dfa0ed3ee3384ef6dfdb5d6f3741502be247279407679296772"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] [[package]] name = "typing-extensions" -version = "4.5.0" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.9.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, - {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, ] [[package]] name = "wcwidth" -version = "0.2.6" +version = "0.2.12" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, - {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, + {file = "wcwidth-0.2.12-py2.py3-none-any.whl", hash = "sha256:f26ec43d96c8cbfed76a5075dac87680124fa84e0855195a6184da9c187f133c"}, + {file = "wcwidth-0.2.12.tar.gz", hash = "sha256:f01c104efdf57971bcb756f054dd58ddec5204dd15fa31d6503ea57947d97c02"}, ] [[package]] name = "wrapt" -version = "1.14.1" +version = "1.16.0" description = "Module for decorators, wrappers and monkey patching." optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -files = [ - {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, - {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, - {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, - {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, - {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, - {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, - {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, - {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, - {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, - {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, - {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, - {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, - {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, - {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, - {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, - {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, +python-versions = ">=3.6" +files = [ + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "8990a11839baa27daa52ec96424fdaf96f294140034d66d66d7fde50197b0749" +content-hash = "13dc88eb6e57ab4192765ec4d46f48aa0091403e19806d5c3ed58ffe35a76464" diff --git a/fonts/pyproject.toml b/fonts/pyproject.toml index 3bd27e61a62..6c68d206a6d 100644 --- a/fonts/pyproject.toml +++ b/fonts/pyproject.toml @@ -12,7 +12,7 @@ svgpathtools = "^1.6.0" [tool.poetry.group.dev.dependencies] ipython = "^8.10.0" -black = "^22.8.0" +black = "^24.3.0" mypy = "^0.971" pylint = "^2.15.3" diff --git a/fonts/supported.xml b/fonts/supported.xml index ccd9a8d22d7..695b187c50b 100644 --- a/fonts/supported.xml +++ b/fonts/supported.xml @@ -269,7 +269,7 @@ - + U+E0FF U+E0A0 diff --git a/include/midi/Binasc.h b/include/midi/Binasc.h index 6aa57f09478..686cc407c7c 100644 --- a/include/midi/Binasc.h +++ b/include/midi/Binasc.h @@ -13,11 +13,11 @@ #ifndef _BINASC_H_INCLUDED #define _BINASC_H_INCLUDED -#include +#include #include +#include #include -#include -#include /* needed for MinGW */ + namespace smf { @@ -149,6 +149,8 @@ class Binasc { int getWord (std::string& word, const std::string& input, const std::string& terminators, int index); + static const char *GMinstrument[128]; + }; } // end of namespace smf diff --git a/include/midi/MidiEvent.h b/include/midi/MidiEvent.h index 39f141ee9b1..f8141d17bba 100644 --- a/include/midi/MidiEvent.h +++ b/include/midi/MidiEvent.h @@ -15,8 +15,11 @@ #define _MIDIEVENT_H_INCLUDED #include "MidiMessage.h" + +#include #include + namespace smf { class MidiEvent : public MidiMessage { @@ -63,6 +66,10 @@ class MidiEvent : public MidiMessage { }; + +std::ostream& operator<<(std::ostream& out, MidiEvent& event); + + } // end of namespace smf #endif /* _MIDIEVENT_H_INCLUDED */ diff --git a/include/midi/MidiEventList.h b/include/midi/MidiEventList.h index e3bfb13cf5b..f9b1e8538e2 100644 --- a/include/midi/MidiEventList.h +++ b/include/midi/MidiEventList.h @@ -14,8 +14,10 @@ #define _MIDIEVENTLIST_H_INCLUDED #include "MidiEvent.h" + #include + namespace smf { class MidiEventList { diff --git a/include/midi/MidiFile.h b/include/midi/MidiFile.h index 4a363da5658..4972218f627 100644 --- a/include/midi/MidiFile.h +++ b/include/midi/MidiFile.h @@ -16,19 +16,24 @@ #include "MidiEventList.h" -#include -#include -#include #include +#include +#include +#include -#define TIME_STATE_DELTA 0 -#define TIME_STATE_ABSOLUTE 1 - -#define TRACK_STATE_SPLIT 0 -#define TRACK_STATE_JOINED 1 namespace smf { +enum { + TRACK_STATE_SPLIT = 0, // Tracks are separated into separate vector postions. + TRACK_STATE_JOINED = 1 // Tracks are merged into a single vector position, +}; // like a Type-0 MIDI file, but reversible. + +enum { + TIME_STATE_DELTA = 0, // MidiMessage::ticks are in delta time format (like MIDI file). + TIME_STATE_ABSOLUTE = 1 // MidiMessage::ticks are in absolute time format (0=start time). +}; + class _TickTime { public: int tick; @@ -217,7 +222,7 @@ class MidiFile { MidiEvent* addTempo (int aTrack, int aTick, double aTempo); MidiEvent* addKeySignature (int aTrack, int aTick, - int key, bool mode = 0); + int fifths, bool mode = 0); MidiEvent* addTimeSignature (int aTrack, int aTick, int top, int bottom, int clocksPerClick = 24, diff --git a/include/midi/MidiMessage.h b/include/midi/MidiMessage.h index 49bd88a73e7..b298e15b9a0 100644 --- a/include/midi/MidiMessage.h +++ b/include/midi/MidiMessage.h @@ -14,10 +14,12 @@ #ifndef _MIDIMESSAGE_H_INCLUDED #define _MIDIMESSAGE_H_INCLUDED +#include #include #include #include + namespace smf { typedef unsigned char uchar; @@ -122,6 +124,12 @@ class MidiMessage : public std::vector { void makePatchChange (int channel, int patchnum); void makeTimbre (int channel, int patchnum); void makeController (int channel, int num, int value); + void makePitchBend (int channel, int lsb, int msb); + void makePitchBend (int channel, int value); + void makePitchBendDouble (int channel, double value); + void makePitchbend (int channel, int lsb, int msb) { makePitchBend(channel, lsb, msb); } + void makePitchbend (int channel, int value) { makePitchBend(channel, value); } + void makePitchbendDouble (int channel, double value) { makePitchBendDouble(channel, value); } // helper functions to create various continuous controller messages: void makeSustain (int channel, int value); @@ -199,6 +207,9 @@ class MidiMessage : public std::vector { }; +std::ostream& operator<<(std::ostream& out, MidiMessage& event); + + } // end of namespace smf diff --git a/include/vrv/bboxdevicecontext.h b/include/vrv/bboxdevicecontext.h index 05b63b990ba..1c6ee4f9274 100644 --- a/include/vrv/bboxdevicecontext.h +++ b/include/vrv/bboxdevicecontext.h @@ -50,7 +50,7 @@ class BBoxDeviceContext : public DeviceContext { */ ///@{ void SetBackground(int color, int style = AxSOLID) override; - void SetBackgroundImage(void *image, double opacity = 1.0) override{}; + void SetBackgroundImage(void *image, double opacity = 1.0) override {}; void SetBackgroundMode(int mode) override; void SetTextForeground(int color) override; void SetTextBackground(int color) override; @@ -87,7 +87,7 @@ class BBoxDeviceContext : public DeviceContext { void DrawSpline(int n, Point points[]) override; void DrawGraphicUri(int x, int y, int width, int height, const std::string &uri) override; void DrawSvgShape(int x, int y, int width, int height, double scale, pugi::xml_node svg) override; - void DrawBackgroundImage(int x = 0, int y = 0) override{}; + void DrawBackgroundImage(int x = 0, int y = 0) override {}; ///@} /** @@ -150,7 +150,7 @@ class BBoxDeviceContext : public DeviceContext { * @name Method for adding description element */ ///@{ - void AddDescription(const std::string &text) override{}; + void AddDescription(const std::string &text) override {}; ///@} private: diff --git a/include/vrv/clef.h b/include/vrv/clef.h index 9dcd9e635b7..bc16c6fdc42 100644 --- a/include/vrv/clef.h +++ b/include/vrv/clef.h @@ -35,6 +35,7 @@ class Clef : public LayerElement, public AttOctave, public AttOctaveDisplacement, public AttStaffIdent, + public AttTypography, public AttVisibility { public: /** diff --git a/include/vrv/devicecontext.h b/include/vrv/devicecontext.h index e493d38b611..b319c835a1a 100644 --- a/include/vrv/devicecontext.h +++ b/include/vrv/devicecontext.h @@ -207,7 +207,7 @@ class DeviceContext { * Special method for forcing bounding boxes to be updated * Used for invisible elements (e.g., ) that needs to be take into account in spacing */ - virtual void DrawPlaceholder(int x, int y){}; + virtual void DrawPlaceholder(int x, int y) {}; /** * @name Method for starting and ending a text @@ -258,14 +258,14 @@ class DeviceContext { * For example, the method can be used for grouping shapes in in SVG */ ///@{ - virtual void StartCustomGraphic(const std::string &name, std::string gClass = "", std::string gId = ""){}; - virtual void EndCustomGraphic(){}; + virtual void StartCustomGraphic(const std::string &name, std::string gClass = "", std::string gId = "") {}; + virtual void EndCustomGraphic() {}; ///@} /** * Method for changing the color of a custom graphic */ - virtual void SetCustomGraphicColor(const std::string &color){}; + virtual void SetCustomGraphicColor(const std::string &color) {}; /** * @name Methods for re-starting and ending a graphic for objects drawn in separate steps @@ -308,7 +308,7 @@ class DeviceContext { * @name Method for adding description element */ ///@{ - virtual void AddDescription(const std::string &text){}; + virtual void AddDescription(const std::string &text) {}; ///@} /** diff --git a/include/vrv/doc.h b/include/vrv/doc.h index d32fd434a3b..687f6f068e2 100644 --- a/include/vrv/doc.h +++ b/include/vrv/doc.h @@ -109,11 +109,14 @@ class Doc : public Object { /** * Getter and setter for the DocType. - * The setter resets the document. */ ///@{ DocType GetType() const { return m_type; } void SetType(DocType type); + bool IsFacs() const { return (m_type == Facs); } + bool IsRaw() const { return (m_type == Raw); } + bool IsRendering() const { return (m_type == Rendering); } + bool IsTranscription() const { return (m_type == Transcription); } ///@} /** @@ -159,6 +162,9 @@ class Doc : public Object { ///@{ Score *GetCorrespondingScore(const Object *object); const Score *GetCorrespondingScore(const Object *object) const; + // Generic version that does not necessarily rely on precalculated visible scores + Score *GetCorrespondingScore(const Object *object, const std::list &scores); + const Score *GetCorrespondingScore(const Object *object, const std::list &scores) const; ///@} /** @@ -366,6 +372,18 @@ class Doc : public Object { */ void ConvertMarkupDoc(bool permanent = true); + /** + * Sync the coordinate provided trought to m_drawingFacsX/Y. + * Call the SyncToFacsimile functor. + */ + void SyncFromFacsimileDoc(); + + /** + * Sync the coordinate provided in rendering to a . + * The document must have encoded layout and the option --break encoded must have enabled. + */ + void SyncToFacsimileDoc(); + /** * Transpose the content of the doc. */ @@ -383,6 +401,11 @@ class Doc : public Object { */ Page *SetDrawingPage(int pageIdx); + /** + * Update the drawing page sizes when a page is set as drawing page. + */ + void UpdatePageDrawingSizes(); + /** * Reset drawing page to NULL. * This might be necessary if we have replaced a page in the document. diff --git a/include/vrv/durationinterface.h b/include/vrv/durationinterface.h index 67bf2caab43..17d0ec0cc22 100644 --- a/include/vrv/durationinterface.h +++ b/include/vrv/durationinterface.h @@ -16,7 +16,6 @@ namespace vrv { -class FunctorParams; class Mensur; class Object; diff --git a/include/vrv/editortoolkit_neume.h b/include/vrv/editortoolkit_neume.h index dfeb65043e5..11828f083cb 100644 --- a/include/vrv/editortoolkit_neume.h +++ b/include/vrv/editortoolkit_neume.h @@ -31,8 +31,8 @@ namespace vrv { class EditorToolkitNeume : public EditorToolkit { public: EditorToolkitNeume(Doc *doc, View *view) : EditorToolkit(doc, view) {} - bool ParseEditorAction(const std::string &json_editorAction); - virtual std::string EditInfo() { return m_infoObject.json(); }; + bool ParseEditorAction(const std::string &json_editorAction) override; + std::string EditInfo() override; /** * Experimental editor functions. @@ -44,6 +44,7 @@ class EditorToolkitNeume : public EditorToolkit { bool Insert(std::string elementType, std::string staffId, int ulx, int uly, int lrx, int lry, std::vector> attributes); bool InsertToSyllable(std::string elementId); + bool MatchHeight(std::string elementId); bool Merge(std::vector elementIds); bool MoveOutsideSyllable(std::string elementId); bool Set(std::string elementId, std::string attrType, std::string attrValue); @@ -54,6 +55,7 @@ class EditorToolkitNeume : public EditorToolkit { bool Remove(std::string elementId); bool Resize(std::string elementId, int ulx, int uly, int lrx, int lry, float resize = NAN); bool Group(std::string groupType, std::vector elementIds); + void UnlinkSyllable(Syllable *syllable); bool Ungroup(std::string groupType, std::vector elementIds); bool ChangeGroup(std::string elementId, std::string contour); bool ToggleLigature(std::vector elementIds); @@ -72,6 +74,7 @@ class EditorToolkitNeume : public EditorToolkit { bool ParseInsertAction(jsonxx::Object param, std::string *elementType, std::string *staffId, int *ulx, int *uly, int *lrx, int *lry, std::vector> *attributes); bool ParseInsertToSyllableAction(jsonxx::Object param, std::string *elementId); + bool ParseMatchHeightAction(jsonxx::Object param, std::string *elementId); bool ParseMergeAction(jsonxx::Object param, std::vector *elementIds); bool ParseMoveOutsideSyllableAction(jsonxx::Object param, std::string *elementId); bool ParseSetAction(jsonxx::Object param, std::string *elementId, std::string *attrType, std::string *attrValue); @@ -98,9 +101,6 @@ class EditorToolkitNeume : public EditorToolkit { bool AdjustPitchFromPosition(Object *obj, Clef *clef = NULL); bool AdjustClefLineFromPosition(Clef *clef, Staff *staff = NULL); ///@} - -private: - jsonxx::Object m_infoObject; }; //-------------------------------------------------------------------------------- diff --git a/include/vrv/facsimilefunctor.h b/include/vrv/facsimilefunctor.h new file mode 100644 index 00000000000..1273343626c --- /dev/null +++ b/include/vrv/facsimilefunctor.h @@ -0,0 +1,136 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: facsimilefunctor.h +// Author: Laurent Pugin +// Created: 2023 +// Copyright (c) Authors and others. All rights reserved. +///////////////////////////////////////////////////////////////////////////// + +#ifndef __VRV_FACSIMILEFUNCTOR_H__ +#define __VRV_FACSIMILEFUNCTOR_H__ + +#include "functor.h" +#include "view.h" + +namespace vrv { + +class LayerElement; +class Measure; +class Page; +class Pb; +class Sb; +class Staff; +class Surface; +class System; + +//---------------------------------------------------------------------------- +// SyncFromFacsimileFunctor +//---------------------------------------------------------------------------- + +/** + * This class sync the layout encoded in the facsimile to m_Abs members + */ +class SyncFromFacsimileFunctor : public Functor { +public: + /** + * @name Constructors, destructors + */ + ///@{ + SyncFromFacsimileFunctor(Doc *doc); + virtual ~SyncFromFacsimileFunctor() = default; + ///@} + + /* + * Abstract base implementation + */ + bool ImplementsEndInterface() const override { return false; } + + /* + * Functor interface + */ + ///@{ + FunctorCode VisitLayerElement(LayerElement *layerElement) override; + FunctorCode VisitMeasure(Measure *measure) override; + FunctorCode VisitPage(Page *page) override; + FunctorCode VisitPb(Pb *pb) override; + FunctorCode VisitSb(Sb *sb) override; + FunctorCode VisitStaff(Staff *staff) override; + FunctorCode VisitSystem(System *system) override; + ///@} + +protected: + // +private: + // +public: + // +private: + /** The doc */ + Doc *m_doc; + // + View m_view; + // + Page *m_currentPage; + System *m_currentSystem; +}; + +//---------------------------------------------------------------------------- +// SyncToFacsimileFunctor +//---------------------------------------------------------------------------- + +/** + * This class sync the layout calculated to the facsimile + */ +class SyncToFacsimileFunctor : public Functor { +public: + /** + * @name Constructors, destructors + */ + ///@{ + SyncToFacsimileFunctor(Doc *doc); + virtual ~SyncToFacsimileFunctor() = default; + ///@} + + /* + * Abstract base implementation + */ + bool ImplementsEndInterface() const override { return false; } + + /* + * Functor interface + */ + ///@{ + FunctorCode VisitLayerElement(LayerElement *layerElement) override; + FunctorCode VisitMeasure(Measure *measure) override; + FunctorCode VisitPage(Page *page) override; + FunctorCode VisitPb(Pb *pb) override; + FunctorCode VisitSb(Sb *sb) override; + FunctorCode VisitStaff(Staff *staff) override; + FunctorCode VisitSystem(System *system) override; + ///@} + +protected: + // +private: + /** Create zone if not exist */ + Zone *GetZone(FacsimileInterface *interface, std::string type); + +public: + // +private: + /** The doc */ + Doc *m_doc; + // + View m_view; + /** The surface we are going to add / update zone */ + Surface *m_surface; + // + Page *m_currentPage; + System *m_currentSystem; + // + int m_pageMarginTop; + int m_pageMarginLeft; +}; + +} // namespace vrv + +#endif // __VRV_FACSIMILEFUNCTOR_H__ diff --git a/include/vrv/facsimileinterface.h b/include/vrv/facsimileinterface.h index cbc46f7ddb3..7afafef144b 100644 --- a/include/vrv/facsimileinterface.h +++ b/include/vrv/facsimileinterface.h @@ -13,8 +13,11 @@ #include "interface.h" namespace vrv { -class FunctorParams; -class View; + +class Facsimile; +class PrepareFacsimileFunctor; +class ResetDataFunctor; +class Surface; class Zone; //---------------------------------------------------------------------------- @@ -56,8 +59,23 @@ class FacsimileInterface : public Interface, public AttFacsimile { const Zone *GetZone() const { return m_zone; } ///@} + //-----------------// + // Pseudo functors // + //-----------------// + + /** + * We have functor code in the interface for avoiding code duplication in each implementation class. + * Since we are in an interface, we need to pass the object (implementation) to + * the pseudo functor method. + */ + ///@{ + FunctorCode InterfacePrepareFacsimile(PrepareFacsimileFunctor &functor, Object *object); + FunctorCode InterfaceResetData(ResetDataFunctor &functor, Object *object); + ///@} + private: - Zone *m_zone = NULL; + Zone *m_zone; + Surface *m_surface; }; } // namespace vrv #endif diff --git a/include/vrv/featureextractor.h b/include/vrv/featureextractor.h index 0c049af5ec3..21a74630489 100644 --- a/include/vrv/featureextractor.h +++ b/include/vrv/featureextractor.h @@ -55,6 +55,7 @@ class FeatureExtractor { std::list m_previousNotes; jsonxx::Array m_pitchesChromatic; + jsonxx::Array m_pitchesChromaticWithDuration; jsonxx::Array m_pitchesDiatonic; jsonxx::Array m_pitchesIds; diff --git a/include/vrv/filereader.h b/include/vrv/filereader.h new file mode 100644 index 00000000000..ea17d92de86 --- /dev/null +++ b/include/vrv/filereader.h @@ -0,0 +1,86 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: filereader.h +// Author: Laurent Pugin +// Created: 31/01/2024 +// Copyright (c) Authors and others. All rights reserved. +///////////////////////////////////////////////////////////////////////////// + +#ifndef __VRV_FILEREADER_H__ +#define __VRV_FILEREADER_H__ + +#include +#include +#include + +//---------------------------------------------------------------------------- + +/** Forward declaration of the zip_file.hpp class */ +namespace miniz_cpp { +class zip_file; +} + +//---------------------------------------------------------------------------- + +namespace vrv { + +//---------------------------------------------------------------------------- +// ZipFileReader +//---------------------------------------------------------------------------- + +/** + * This class is a reader for zip archives. + */ +class ZipFileReader { +public: + /** + * @name Constructors, destructors, and other standard methods + */ + ///@{ + ZipFileReader(); + ~ZipFileReader(); + ///@} + + /** + * Reset a previously loaded file. + */ + void Reset(); + + /** + * Load a file into memory. + */ + bool Load(const std::string &filename); + + /** + * Load a vector into memory + */ + bool Load(const std::vector &bytes); + + /** + * Check if the archive contains the file + */ + bool HasFile(const std::string &filename); + + /** + * Read the text file. + * Return an empty string if the file does not exist. + */ + std::string ReadTextFile(const std::string &filename); + + /** + * Return a list of all files (including directories) + */ + std::list GetFileList() const; + +private: + // +public: + // +private: + /** A pointer to the miniz zip file */ + miniz_cpp::zip_file *m_file; + +}; // class ZipFileReader + +} // namespace vrv + +#endif // __VRV_FILEREADER_H__ diff --git a/include/vrv/glyph.h b/include/vrv/glyph.h index 24089f559cf..dc28607aeeb 100644 --- a/include/vrv/glyph.h +++ b/include/vrv/glyph.h @@ -106,6 +106,18 @@ class Glyph { */ const Point *GetAnchor(SMuFLGlyphAnchor anchor) const; + /** + * Set the XML (content) of the glyph. + * This is used only for glyph added from zip archive custom fonts. + */ + void SetXML(const std::string &xml) { m_xml = xml; } + + /** + * Return the XML (content) of the glyph. + * Return the stored XML or load it from the path. + */ + std::string GetXML() const; + private: // public: @@ -124,6 +136,8 @@ class Glyph { std::string m_codeStr; /** Path to the glyph XML file */ std::string m_path; + /** XML of the content for files loaded from zip archive custom font */ + std::string m_xml; /** A map of the available anchors */ std::map m_anchors; /** A flag indicating it is a fallback */ diff --git a/include/vrv/ioabc.h b/include/vrv/ioabc.h index 4e830c11bba..f29892b0549 100644 --- a/include/vrv/ioabc.h +++ b/include/vrv/ioabc.h @@ -13,7 +13,7 @@ //---------------------------------------------------------------------------- -#include "io.h" +#include "iobase.h" #include "pugixml.hpp" #include "vrvdef.h" diff --git a/include/vrv/io.h b/include/vrv/iobase.h similarity index 97% rename from include/vrv/io.h rename to include/vrv/iobase.h index f07c2bf1448..e5cfc903acc 100644 --- a/include/vrv/io.h +++ b/include/vrv/iobase.h @@ -1,12 +1,12 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: io.h +// Name: iobase.h // Author: Laurent Pugin // Created: 2012 // Copyright (c) Authors and others. All rights reserved. ///////////////////////////////////////////////////////////////////////////// -#ifndef __VRV_IO_H__ -#define __VRV_IO_H__ +#ifndef __VRV_IOBASE_H__ +#define __VRV_IOBASE_H__ #include #include diff --git a/include/vrv/iodarms.h b/include/vrv/iodarms.h index ad3ad31820a..bd1f4bb8d56 100644 --- a/include/vrv/iodarms.h +++ b/include/vrv/iodarms.h @@ -11,7 +11,7 @@ //---------------------------------------------------------------------------- #include "attdef.h" -#include "io.h" +#include "iobase.h" namespace vrv { diff --git a/include/vrv/iohumdrum.h b/include/vrv/iohumdrum.h index f5ac61083e2..8a1cccb114d 100644 --- a/include/vrv/iohumdrum.h +++ b/include/vrv/iohumdrum.h @@ -25,7 +25,7 @@ #include "fing.h" #include "ftrem.h" #include "harm.h" -#include "io.h" +#include "iobase.h" #include "keysig.h" #include "label.h" #include "metersig.h" diff --git a/include/vrv/iomei.h b/include/vrv/iomei.h index 6b0d7800119..12f530bdacf 100644 --- a/include/vrv/iomei.h +++ b/include/vrv/iomei.h @@ -14,7 +14,7 @@ //---------------------------------------------------------------------------- #include "doc.h" -#include "io.h" +#include "iobase.h" //---------------------------------------------------------------------------- diff --git a/include/vrv/iomusxml.h b/include/vrv/iomusxml.h index 2d6decc245c..946f0d95b74 100644 --- a/include/vrv/iomusxml.h +++ b/include/vrv/iomusxml.h @@ -17,7 +17,7 @@ //---------------------------------------------------------------------------- #include "attdef.h" -#include "io.h" +#include "iobase.h" #include "metersig.h" #include "vrvdef.h" diff --git a/include/vrv/iopae.h b/include/vrv/iopae.h index bb70c151677..b02f0620adc 100644 --- a/include/vrv/iopae.h +++ b/include/vrv/iopae.h @@ -27,7 +27,7 @@ #include "atts_cmn.h" #include "clef.h" -#include "io.h" +#include "iobase.h" #include "keysig.h" #include "mensur.h" #include "metersig.h" @@ -91,6 +91,11 @@ class PAEOutput : public Output { */ bool WriteObjectEnd(Object *object) override; + /** + * Helper method to return a string representation of the PAE duration. + */ + static std::string GetPaeDur(data_DURATION dur, int ndots); + private: /** * @name Methods for writing containers (measures, staff, etc) scoreDef and related. @@ -166,6 +171,7 @@ class PAEOutput : public Output { ///@{ void WriteDur(DurationInterface *interface); void WriteGrace(AttGraced *attGraced); + bool HasFermata(Object *object); ///@} public: diff --git a/include/vrv/layerelement.h b/include/vrv/layerelement.h index af0917a61d7..cf8a7af9e32 100644 --- a/include/vrv/layerelement.h +++ b/include/vrv/layerelement.h @@ -296,7 +296,7 @@ class LayerElement : public Object, /** * Helper function to set shortening for elements with beam interface */ - virtual void SetElementShortening(int shortening){}; + virtual void SetElementShortening(int shortening) {}; /** * Get the stem mod for the element (if any) @@ -386,7 +386,7 @@ class LayerElement : public Object, public: /** Absolute position X. This is used for facsimile (transcription) encoding */ - int m_xAbs; + int m_drawingFacsX; /** * This stores a pointer to the cross-staff (if any) and the appropriate layer * See PrepareCrossStaffFunctor diff --git a/include/vrv/lb.h b/include/vrv/lb.h index 9b044f6d25b..52c97896da4 100644 --- a/include/vrv/lb.h +++ b/include/vrv/lb.h @@ -37,7 +37,7 @@ class Lb : public TextElement { /** * Lb is an empty element */ - void AddChild(Object *object) override{}; + void AddChild(Object *object) override {}; /** * Interface for class functor visitation diff --git a/include/vrv/measure.h b/include/vrv/measure.h index e9fe0cef9ca..49ab432a0d7 100644 --- a/include/vrv/measure.h +++ b/include/vrv/measure.h @@ -11,6 +11,7 @@ #include "atts_cmn.h" #include "atts_shared.h" #include "barline.h" +#include "facsimileinterface.h" #include "horizontalaligner.h" #include "object.h" @@ -34,6 +35,7 @@ class TimestampAttr; * For internally simplication of processing, unmeasured music is contained in one single measure object */ class Measure : public Object, + public FacsimileInterface, public AttBarring, public AttCoordX1, public AttCoordX2, @@ -63,6 +65,17 @@ class Measure : public Object, */ void CloneReset() override; + /** + * @name Getter to interfaces + */ + ///@{ + FacsimileInterface *GetFacsimileInterface() override { return vrv_cast(this); } + const FacsimileInterface *GetFacsimileInterface() const override + { + return vrv_cast(this); + } + ///@} + /** * Return true if measured music (otherwise we have fake measures) */ @@ -358,8 +371,8 @@ class Measure : public Object, * This is the left and right position of the measure. */ ///@{ - int m_xAbs; - int m_xAbs2; + int m_drawingFacsX1; + int m_drawingFacsX2; ///@} /** diff --git a/include/vrv/metersig.h b/include/vrv/metersig.h index df024fd5149..585c259b9c4 100644 --- a/include/vrv/metersig.h +++ b/include/vrv/metersig.h @@ -8,6 +8,7 @@ #ifndef __VRV_METERSIG_H__ #define __VRV_METERSIG_H__ +#include "atts_externalsymbols.h" #include "atts_shared.h" #include "atts_visual.h" #include "layerelement.h" @@ -24,9 +25,12 @@ class ScoreDefInterface; * This class models the MEI element. */ class MeterSig : public LayerElement, + public AttColor, public AttEnclosingChars, + public AttExtSymNames, public AttMeterSigLog, public AttMeterSigVis, + public AttTypography, public AttVisibility { public: /** diff --git a/include/vrv/object.h b/include/vrv/object.h index 1cb3f41ff41..31bbf863f95 100644 --- a/include/vrv/object.h +++ b/include/vrv/object.h @@ -31,7 +31,6 @@ class EditorialElement; class Output; class Filters; class Functor; -class FunctorParams; class Functor; class ConstFunctor; class LinkingInterface; diff --git a/include/vrv/options.h b/include/vrv/options.h index ad4c87eb7ae..0e9160240a7 100644 --- a/include/vrv/options.h +++ b/include/vrv/options.h @@ -67,6 +67,8 @@ enum option_ELISION { ELISION_unicode = UNICODE_UNDERTIE }; +enum option_FONT_FALLBACK { FONT_FALLBACK_Leipzig = 0, FONT_FALLBACK_Bravura }; + enum option_FOOTER { FOOTER_none = 0, FOOTER_auto, FOOTER_encoded, FOOTER_always }; enum option_HEADER { HEADER_none = 0, HEADER_auto, HEADER_encoded }; @@ -122,6 +124,7 @@ class Option { void SetShortOption(char shortOption, bool isCmdOnly); char GetShortOption() const { return m_shortOption; } bool IsCmdOnly() const { return m_isCmdOnly; } + virtual bool IsArgumentRequired() const { return true; } /** * Return a JSON object for the option @@ -139,6 +142,7 @@ class Option { static const std::map s_breaks; static const std::map s_condense; static const std::map s_elision; + static const std::map s_fontFallback; static const std::map s_footer; static const std::map s_header; static const std::map s_multiRestStyle; @@ -186,6 +190,8 @@ class OptionBool : public Option { bool GetDefault() const { return m_defaultValue; } bool SetValue(bool value); + bool IsArgumentRequired() const override { return false; } + private: // public: @@ -593,7 +599,7 @@ class Options { // These options are only given for documentation - except for m_scale // They are ordered by short option alphabetical order OptionBool m_standardOutput; - OptionBool m_help; + OptionString m_help; OptionBool m_allPages; OptionString m_inputFrom; OptionString m_logLevel; @@ -646,6 +652,7 @@ class Options { OptionBool m_preserveAnalyticalMarkup; OptionBool m_removeIds; OptionBool m_scaleToPageSize; + OptionBool m_setLocale; OptionBool m_showRuntime; OptionBool m_shrinkToFit; OptionIntMap m_smuflTextFont; @@ -686,6 +693,9 @@ class Options { OptionDbl m_extenderLineMinSpace; OptionDbl m_fingeringScale; OptionString m_font; + OptionArray m_fontAddCustom; + OptionIntMap m_fontFallback; + OptionBool m_fontLoadAll; OptionDbl m_graceFactor; OptionBool m_graceRhythmAlign; OptionBool m_graceRightAlign; diff --git a/include/vrv/pb.h b/include/vrv/pb.h index 92cecf39fd6..11f66ab2b0a 100644 --- a/include/vrv/pb.h +++ b/include/vrv/pb.h @@ -9,6 +9,7 @@ #define __VRV_PB_H__ #include "atts_shared.h" +#include "facsimileinterface.h" #include "systemelement.h" namespace vrv { @@ -21,7 +22,7 @@ namespace vrv { * This class represents a MEI pb in score-based MEI. * In page-based MEI, it remains as is as. Actual pages are represented by Page objects. */ -class Pb : public SystemElement, public AttNNumberLike { +class Pb : public SystemElement, public FacsimileInterface, public AttNNumberLike { public: /** * @name Constructors, destructors, and other standard methods @@ -35,6 +36,16 @@ class Pb : public SystemElement, public AttNNumberLike { std::string GetClassName() const override { return "Pb"; } ///@} + /** + * @name Getter to interfaces + */ + ///@{ + FacsimileInterface *GetFacsimileInterface() override { return vrv_cast(this); } + const FacsimileInterface *GetFacsimileInterface() const override + { + return vrv_cast(this); + } + //----------// // Functors // //----------// diff --git a/include/vrv/preparedatafunctor.h b/include/vrv/preparedatafunctor.h index 412ef9f3918..1a185a7ba7c 100644 --- a/include/vrv/preparedatafunctor.h +++ b/include/vrv/preparedatafunctor.h @@ -218,6 +218,11 @@ class PrepareFacsimileFunctor : public Functor { */ const ListOfObjects &GetZonelessSyls() const { return m_zonelessSyls; } + /* + * Getter for the facsimile + */ + Facsimile *GetFacsimile() const { return m_facsimile; } + /* * Functor interface */ @@ -488,18 +493,23 @@ class PrepareTimeSpanningFunctor : public Functor, public CollectAndProcess { FunctorCode VisitF(F *f) override; FunctorCode VisitFloatingObject(FloatingObject *floatingObject) override; FunctorCode VisitLayerElement(LayerElement *layerElement) override; + FunctorCode VisitMeasure(Measure *measure) override; FunctorCode VisitMeasureEnd(Measure *measure) override; ///@} protected: // private: - // + // Delegates to the pseudo functor of the interface + FunctorCode CallPseudoFunctor(Object *timeSpanningObject); + public: // private: // The interface list that holds the current elements to match ListOfSpanningInterOwnerPairs m_timeSpanningInterfaces; + // Indicates whether we currently traverse a measure + bool m_insideMeasure; }; //---------------------------------------------------------------------------- diff --git a/include/vrv/resetfunctor.h b/include/vrv/resetfunctor.h index 2e681f1d877..f8f4d5c1032 100644 --- a/include/vrv/resetfunctor.h +++ b/include/vrv/resetfunctor.h @@ -62,6 +62,7 @@ class ResetDataFunctor : public Functor { FunctorCode VisitMeasure(Measure *measure) override; FunctorCode VisitMRest(MRest *mRest) override; FunctorCode VisitNote(Note *note) override; + FunctorCode VisitObject(Object *object) override; FunctorCode VisitRepeatMark(RepeatMark *repeatMark) override; FunctorCode VisitRest(Rest *rest) override; FunctorCode VisitSection(Section *section) override; diff --git a/include/vrv/resources.h b/include/vrv/resources.h index 597ae6b6545..7988fb1faf4 100644 --- a/include/vrv/resources.h +++ b/include/vrv/resources.h @@ -12,6 +12,7 @@ //---------------------------------------------------------------------------- +#include "filereader.h" #include "glyph.h" namespace vrv { @@ -57,11 +58,23 @@ class Resources { ///@{ /** Init the SMufL music and text fonts */ bool InitFonts(); + /** Set the font to be used and loads it if necessary */ + bool SetFont(const std::string &fontName); + /** Add custom (external) fonts */ + bool AddCustom(const std::vector &extraFonts); + /** Load all music fonts available in the resource directory */ + bool LoadAll(); + /** Set the fallback font (Leipzig or Bravura) when some glyphs are missing in the current font */ + bool SetFallback(const std::string &fontName); + /** Get the fallback font name */ + std::string GetFallbackFont() const { return m_defaultFontName; } /** Init the text font (bounding boxes and ASCII only) */ bool InitTextFont(const std::string &fontName, const StyleAttributes &style); + /** Select a particular font */ - bool SetFont(const std::string &fontName); - std::string GetCurrentFontName() const { return m_fontName; } + bool SetCurrentFont(const std::string &fontName, bool allowLoading = false); + std::string GetCurrentFont() const { return m_currentFontName; } + bool IsFontLoaded(const std::string &fontName) const { return m_loadedFonts.find(fontName) != m_loadedFonts.end(); } ///@} /** @@ -81,6 +94,11 @@ class Resources { */ bool IsSmuflFallbackNeeded(const std::u32string &text) const; + /** + * Check if the current font is the fallback font + */ + bool IsCurrentFontFallback() const; + /** * Text fonts */ @@ -89,8 +107,21 @@ class Resources { void SelectTextFont(data_FONTWEIGHT fontWeight, data_FONTSTYLE fontStyle) const; /** Returns the glyph (if exists) for the text font (bounding box and ASCII only) */ const Glyph *GetTextGlyph(char32_t code) const; + /** Returns true if the specified font is loaded and it contains the requested glyph */ + bool FontHasGlyphAvailable(const std::string &fontName, char32_t smuflCode) const; ///@} + /** + * Get the CSS font string for the corresponding font. + * Return an empty string if the font has not been loaded. + */ + std::string GetCSSFontFor(const std::string &fontName) const; + + /** + * Retrieve the font name either from the filename path or from the zipFile content. + */ + std::string GetCustomFontname(const std::string &filename, const ZipFileReader &zipFile); + /** * Static method that converts unicode music code points to SMuFL equivalent. * Return the parameter char if nothing can be converted. @@ -98,15 +129,46 @@ class Resources { static char32_t GetSmuflGlyphForUnicodeChar(const char32_t unicodeChar); private: - bool LoadFont(const std::string &fontName, bool withFallback = true); + //---------------------------------------------------------------------------- + // LoadedFont + //---------------------------------------------------------------------------- + + class LoadedFont { + + public: + LoadedFont(const std::string &name, bool isFallback) : m_name(name), m_isFallback(isFallback){}; + ~LoadedFont(){}; + const std::string GetName() const { return m_name; }; + const GlyphTable &GetGlyphTable() const { return m_glyphTable; }; + GlyphTable &GetGlyphTableForModification() { return m_glyphTable; }; + bool isFallback() const { return m_isFallback; }; + + void SetCSSFont(const std::string &css) { m_css = css; } + std::string GetCSSFont(const std::string &path) const; + + private: + std::string m_name; + /** The loaded SMuFL font */ + GlyphTable m_glyphTable; + /** If the font needs to fallback when a glyph is not present **/ + const bool m_isFallback; + /** CSS font for font loaded as zip archive */ + std::string m_css; + }; + + //---------------------------------------------------------------------------- + + bool LoadFont(const std::string &fontName, ZipFileReader *zipFile = NULL); + + const GlyphTable &GetCurrentGlyphTable() const { return m_loadedFonts.at(m_currentFontName).GetGlyphTable(); }; + const GlyphTable &GetFallbackGlyphTable() const { return m_loadedFonts.at(m_fallbackFontName).GetGlyphTable(); }; -private: - /** The font name of the font that is currently loaded */ - std::string m_fontName; - /** The path to the resources directory (e.g., for the svg/ subdirectory with fonts as XML */ std::string m_path; - /** The loaded SMuFL font */ - GlyphTable m_fontGlyphTable; + std::string m_defaultFontName; + std::string m_fallbackFontName; + std::map m_loadedFonts; + std::string m_currentFontName; + /** A text font used for bounding box calculations */ GlyphTextMap m_textFont; mutable StyleAttributes m_currentStyle; diff --git a/include/vrv/sb.h b/include/vrv/sb.h index 83d4812dd7a..f1d43319e0e 100644 --- a/include/vrv/sb.h +++ b/include/vrv/sb.h @@ -9,6 +9,7 @@ #define __VRV_SB_H__ #include "atts_shared.h" +#include "facsimileinterface.h" #include "systemelement.h" namespace vrv { @@ -21,7 +22,7 @@ namespace vrv { * This class represents a MEI sb in score-based MEI. * In page-based MEI, it remains as it is. Actual systems are represented by System objects. */ -class Sb : public SystemElement, public AttNNumberLike { +class Sb : public SystemElement, public FacsimileInterface, public AttNNumberLike { public: /** * @name Constructors, destructors, and other standard methods @@ -35,6 +36,16 @@ class Sb : public SystemElement, public AttNNumberLike { std::string GetClassName() const override { return "Sb"; } ///@} + /** + * @name Getter to interfaces + */ + ///@{ + FacsimileInterface *GetFacsimileInterface() override { return vrv_cast(this); } + const FacsimileInterface *GetFacsimileInterface() const override + { + return vrv_cast(this); + } + //----------// // Functors // //----------// diff --git a/include/vrv/setscoredeffunctor.h b/include/vrv/setscoredeffunctor.h index 5d4d417c455..60e3d9af41d 100644 --- a/include/vrv/setscoredeffunctor.h +++ b/include/vrv/setscoredeffunctor.h @@ -88,6 +88,7 @@ class ScoreDefSetCurrentPageFunctor : public DocFunctor { */ ///@{ FunctorCode VisitPageEnd(Page *page) override; + FunctorCode VisitScore(Score *score) override; ///@} protected: @@ -97,7 +98,8 @@ class ScoreDefSetCurrentPageFunctor : public DocFunctor { public: // private: - // + // The list of all scores + std::list m_scores; }; //---------------------------------------------------------------------------- diff --git a/include/vrv/smufl.h b/include/vrv/smufl.h index 5e70fa53c69..300b9559819 100644 --- a/include/vrv/smufl.h +++ b/include/vrv/smufl.h @@ -106,6 +106,7 @@ enum { SMUFL_E0F5_noteheadParenthesisLeft = 0xE0F5, SMUFL_E0F6_noteheadParenthesisRight = 0xE0F6, SMUFL_E0FA_noteheadWholeFilled = 0xE0FA, + SMUFL_E0FB_noteheadHalfFilled = 0xE0FB, SMUFL_E101_noteheadSlashHorizontalEnds = 0xE101, SMUFL_E102_noteheadSlashWhiteWhole = 0xE102, SMUFL_E103_noteheadSlashWhiteHalf = 0xE103, @@ -644,7 +645,7 @@ enum { }; /** The number of glyphs for verification **/ -#define SMUFL_COUNT 619 +#define SMUFL_COUNT 620 } // namespace vrv diff --git a/include/vrv/staff.h b/include/vrv/staff.h index db2edc25618..cd68fe3eaa4 100644 --- a/include/vrv/staff.h +++ b/include/vrv/staff.h @@ -23,6 +23,49 @@ class Syl; class TimeSpanningInterface; class Tuning; +//---------------------------------------------------------------------------- +// LedgerLine +//---------------------------------------------------------------------------- + +/** + * This is a class with no MEI equivalent for representing legder lines. + * A ledger line is represented by a list of dashes. + * Each dash is represented by a pair of points (left - right). + */ +class LedgerLine { +public: + /** + * @name Constructors, destructors, reset methods + * Reset method reset all attribute classes + */ + ///@{ + LedgerLine(); + virtual ~LedgerLine(); + virtual void Reset(); + ///@} + + /** + * Add a dash to the ledger line object. + * If necessary merges overlapping dashes. + */ + void AddDash(int left, int right, int extension); + +protected: + // +private: + // +public: + /** + * A list of dashes relative to the staff position. + */ + std::list> m_dashes; + +protected: + // +private: + // +}; + //---------------------------------------------------------------------------- // Staff //---------------------------------------------------------------------------- @@ -226,7 +269,7 @@ class Staff : public Object, * The Y absolute position of the staff for facsimile (transcription) encodings. * This is the top left corner of the staff (the X position is the position of the system). */ - int m_yAbs; + int m_drawingFacsY; StaffDef *m_drawingStaffDef; @@ -249,49 +292,6 @@ class Staff : public Object, ///@} }; -//---------------------------------------------------------------------------- -// LedgerLine -//---------------------------------------------------------------------------- - -/** - * This is a class with no MEI equivalent for representing legder lines. - * A ledger line is represented by a list of dashes. - * Each dash is represented by a pair of points (left - right). - */ -class LedgerLine { -public: - /** - * @name Constructors, destructors, reset methods - * Reset method reset all attribute classes - */ - ///@{ - LedgerLine(); - virtual ~LedgerLine(); - virtual void Reset(); - ///@} - - /** - * Add a dash to the ledger line object. - * If necessary merges overlapping dashes. - */ - void AddDash(int left, int right, int extension); - -protected: - // -private: - // -public: - /** - * A list of dashes relative to the staff position. - */ - std::list> m_dashes; - -protected: - // -private: - // -}; - } // namespace vrv #endif diff --git a/include/vrv/svgdevicecontext.h b/include/vrv/svgdevicecontext.h index 0e7b43e4afd..0139e26ed8b 100644 --- a/include/vrv/svgdevicecontext.h +++ b/include/vrv/svgdevicecontext.h @@ -9,10 +9,8 @@ #define __VRV_SVG_DC_H__ #include -#include #include #include -#include #include #include @@ -328,9 +326,28 @@ class SvgDeviceContext : public DeviceContext { bool m_committed; // did we flushed the file? int m_originX, m_originY; - // holds the list of glyphs from the smufl font used so far - // they will be added at the end of the file as - std::set m_smuflGlyphs; + // Here we hold references to all different glyphs used so far, + // including any glyph for the same code but from different fonts. + // They will be added at the end of the file as . + // With multiple font support we need to keep track of: + // a) the glyph (to check if is has been already added) + // b) the id assigned to glyphs on the (that is has been consumed by the already rendered elements) + // To keep things as similar as possible to previous versions we generate ids with as uuuu-ss (where uuuu is the + // Smulf code for the glyph and ss the per-session suffix) for most of the cases (single font usage). When the same + // glyph has been used from several fonts we use uuuu-n-ss where n indicates the collision count. + class GlyphRef { + public: + GlyphRef(const Glyph *glyph, int count, const std::string &postfix); + const Glyph *GetGlyph() const { return m_glyph; }; + const std::string &GetRefId() const { return m_refId; }; + + private: + const Glyph *m_glyph; + std::string m_refId; + }; + const std::string InsertGlyphRef(const Glyph *glyph); + std::map m_smuflGlyphs; + std::map m_glyphCodeFontCounter; // pugixml data pugi::xml_document m_svgDoc; @@ -358,7 +375,7 @@ class SvgDeviceContext : public DeviceContext { bool m_removeXlink; // indentation value (-1 for tabs) int m_indent; - // prefix to be added to font glyphs + // postfix to be added to font glyphs std::string m_glyphPostfixId; // embedding of the smufl text font option_SMUFLTEXTFONT m_smuflTextFont; diff --git a/include/vrv/system.h b/include/vrv/system.h index a8900f2a9c5..7485e2abfbe 100644 --- a/include/vrv/system.h +++ b/include/vrv/system.h @@ -191,12 +191,12 @@ class System : public Object, public DrawingListInterface, public AttTyped { * The Y absolute position of the staff for facsimile (transcription) encodings. * This is the top left corner of the system. */ - int m_yAbs; + int m_drawingFacsY; /** * The x absolute position of the system for facsimile layouts. * This is the top left corner of the system. */ - int m_xAbs; + int m_drawingFacsX; /** * The width used by the abbreviated labels at the left of the system. * It is used internally when calculating the layout and it is not stored in the file. diff --git a/include/vrv/toolkit.h b/include/vrv/toolkit.h index 268175e3217..8ec0376e71d 100644 --- a/include/vrv/toolkit.h +++ b/include/vrv/toolkit.h @@ -77,7 +77,7 @@ class Toolkit { std::string GetResourcePath() const; /** - * Set the resource path for the Toolkit instance. + * Set the resource path for the Toolkit instance and any extra fonts * * This method needs to be called if the constructor had initFont=false or if the resource path * needs to be changed. @@ -732,6 +732,14 @@ class Toolkit { */ int GetOutputTo() { return m_outputTo; } + /** + * Setting the global locale. + */ + ///@{ + void SetLocale(); + void ResetLocale(); + ///@} + /** * Measuring runtime. * @@ -790,6 +798,8 @@ class Toolkit { Options *m_options; + std::optional m_previousLocale; + /** * The C buffer string. */ diff --git a/include/vrv/view.h b/include/vrv/view.h index 2c5473db68d..2f59e4c6657 100644 --- a/include/vrv/view.h +++ b/include/vrv/view.h @@ -122,7 +122,7 @@ class View { virtual void DoRefresh() {} virtual void DoResize() {} virtual void DoReset() {} - virtual void OnPageChange(){}; + virtual void OnPageChange() {}; ///@} /** @@ -567,6 +567,9 @@ class View { DeviceContext *dc, int y1, SegmentedLine &line, int width, int dashLength = 0, int gapLength = 0); void DrawSmuflCode( DeviceContext *dc, int x, int y, char32_t code, int staffSize, bool dimin, bool setBBGlyph = false); + // void DrawSmuflCodeWithCustomFont(DeviceContext *dc, const std::string &customFont, int x, int y, char32_t code, + // int staffSize, bool dimin, bool setBBGlyph = false); + void DrawThickBezierCurve( DeviceContext *dc, Point bezier[4], int thickness, int staffSize, int penWidth, int penStyle = AxSOLID); void DrawPartFilledRectangle(DeviceContext *dc, int x1, int y1, int x2, int y2, int fillSection); diff --git a/include/vrv/vrvdef.h b/include/vrv/vrvdef.h index 6cbfb4e772a..c3775f485be 100644 --- a/include/vrv/vrvdef.h +++ b/include/vrv/vrvdef.h @@ -39,7 +39,7 @@ namespace vrv { //---------------------------------------------------------------------------- #define VERSION_MAJOR 4 -#define VERSION_MINOR 1 +#define VERSION_MINOR 2 #define VERSION_REVISION 0 // Adds "-dev" in the version number - should be set to false for releases #define VERSION_DEV false @@ -61,11 +61,8 @@ namespace vrv { #ifdef VRV_DYNAMIC_CAST // To be used for all cases where type is cheched through Object::m_type #define vrv_cast dynamic_cast -// To be used for all FunctorParams casts within Functors -#define vrv_params_cast dynamic_cast #else #define vrv_cast static_cast -#define vrv_params_cast static_cast #endif //---------------------------------------------------------------------------- diff --git a/include/win32/win_getopt.h b/include/win32/win_getopt.h index 1dd690ee212..d8dd0019aee 100644 --- a/include/win32/win_getopt.h +++ b/include/win32/win_getopt.h @@ -36,7 +36,7 @@ int optopt = '?'; /* character checked for validity */ #undef optreset /* see getopt.h */ #define optreset __mingw_optreset int optreset; /* reset getopt */ -char *optarg; /* argument associated with option */ +const char *optarg; /* argument associated with option */ #endif //extern int optind; /* index of first non-option in argv */ @@ -76,7 +76,7 @@ static int parse_long_options(char * const *, const char *, static int gcd(int, int); static void permute_args(int, int, int, char * const *); -static char *place = EMSG; /* option letter processing */ +static const char *place = EMSG; /* option letter processing */ /* XXX: set optreset to 1 rather than these two */ static int nonopt_start = -1; /* first non option argument (for permute) */ @@ -243,7 +243,7 @@ static int parse_long_options(char * const *nargv, const char *options, const struct option *long_options, int *idx, int short_too) { - char *current_argv, *has_equal; + const char *current_argv, *has_equal; size_t current_argv_len; int i, ambiguous, match; diff --git a/setup.py b/setup.py index fc1f38b2709..a310909ee60 100644 --- a/setup.py +++ b/setup.py @@ -83,10 +83,10 @@ def get_version() -> str: # extra compile arguments EXTRA_COMPILE_ARGS = ['-DPYTHON_BINDING'] if platform.system() != 'Windows': - EXTRA_COMPILE_ARGS += ['-std=c++17', + EXTRA_COMPILE_ARGS += ['-std=c++20', '-Wno-write-strings', '-Wno-overloaded-virtual', '-g0'] else: - EXTRA_COMPILE_ARGS += ['/std:c++17', + EXTRA_COMPILE_ARGS += ['/std:c++20', '-DNO_PAE_SUPPORT'] verovio_module = Extension('verovio._verovio', diff --git a/src/accid.cpp b/src/accid.cpp index 4f3ba9b2dea..73a12003ff8 100644 --- a/src/accid.cpp +++ b/src/accid.cpp @@ -162,7 +162,7 @@ void Accid::AdjustX(LayerElement *element, const Doc *doc, int staffSize, std::v leftAccids.push_back(accid); return; } - if (adjustedAccids.count(accid) == 0) return; + if (!adjustedAccids.contains(accid)) return; } int xRelShift = 0; diff --git a/src/adjustxrelfortranscriptionfunctor.cpp b/src/adjustxrelfortranscriptionfunctor.cpp index c4e4c1f20d4..be005259ec4 100644 --- a/src/adjustxrelfortranscriptionfunctor.cpp +++ b/src/adjustxrelfortranscriptionfunctor.cpp @@ -21,7 +21,7 @@ AdjustXRelForTranscriptionFunctor::AdjustXRelForTranscriptionFunctor() : Functor FunctorCode AdjustXRelForTranscriptionFunctor::VisitLayerElement(LayerElement *layerElement) { - if (layerElement->m_xAbs == VRV_UNSET) return FUNCTOR_CONTINUE; + if (layerElement->m_drawingFacsX == VRV_UNSET) return FUNCTOR_CONTINUE; if (layerElement->IsScoreDefElement()) return FUNCTOR_SIBLINGS; diff --git a/src/beam.cpp b/src/beam.cpp index 335d7c536fb..5e30dfde1c5 100644 --- a/src/beam.cpp +++ b/src/beam.cpp @@ -19,6 +19,7 @@ #include "btrem.h" #include "doc.h" #include "editorial.h" +#include "ftrem.h" #include "functor.h" #include "gracegrp.h" #include "layer.h" @@ -332,9 +333,8 @@ std::pair BeamSegment::GetMinimalStemLength(const BeamDrawingInterface const auto [topOffset, bottomOffset] = this->GetVerticalOffset(beamInterface); // lambda check whether coord has element set and whether that element is CHORD or NOTE - const auto isNoteOrChord = [](BeamElementCoord *coord) { - return (coord->m_element && coord->m_element->Is({ CHORD, NOTE })); - }; + const auto isNoteOrChord + = [](BeamElementCoord *coord) { return (coord->m_element && coord->m_element->Is({ CHORD, NOTE })); }; using CoordIt = ArrayOfBeamElementCoords::const_iterator; for (CoordIt it = m_beamElementCoordRefs.begin(); it != m_beamElementCoordRefs.end(); ++it) { @@ -459,9 +459,8 @@ void BeamSegment::AdjustBeamToFrenchStyle(const BeamDrawingInterface *beamInterf // set to store durations of relevant notes (it's ordered, so min duration is going to be first) std::set noteDurations; // lambda check whether coord has element set and whether that element is CHORD or NOTE - const auto isNoteOrChord = [](BeamElementCoord *coord) { - return (coord->m_element && coord->m_element->Is({ CHORD, NOTE })); - }; + const auto isNoteOrChord + = [](BeamElementCoord *coord) { return (coord->m_element && coord->m_element->Is({ CHORD, NOTE })); }; // iterators using CoordIt = ArrayOfBeamElementCoords::iterator; using CoordReverseIt = ArrayOfBeamElementCoords::reverse_iterator; @@ -1634,6 +1633,9 @@ bool Beam::IsSupportedChild(Object *child) else if (child->Is(CLEF)) { assert(dynamic_cast(child)); } + else if (child->Is(FTREM)) { + assert(dynamic_cast(child)); + } else if (child->Is(GRACEGRP)) { assert(dynamic_cast(child)); } diff --git a/src/calcdotsfunctor.cpp b/src/calcdotsfunctor.cpp index af628ebbdad..b979a50aa66 100644 --- a/src/calcdotsfunctor.cpp +++ b/src/calcdotsfunctor.cpp @@ -182,7 +182,7 @@ bool CalcDotsFunctor::IsDotOverlappingWithFlag(const Note *note, const int staff if (!stem) return false; const Flag *flag = vrv_cast(stem->GetFirst(FLAG)); - if (!flag) return false; + if (!flag || (flag->m_drawingNbFlags == 0)) return false; // for the purposes of vertical spacing we care only up to 16th flags - shorter ones grow upwards char32_t flagGlyph = SMUFL_E242_flag16thUp; diff --git a/src/clef.cpp b/src/clef.cpp index d14a60822dc..3e73f0cc14d 100644 --- a/src/clef.cpp +++ b/src/clef.cpp @@ -41,6 +41,7 @@ Clef::Clef() , AttOctave() , AttOctaveDisplacement() , AttStaffIdent() + , AttTypography() , AttVisibility() { this->RegisterAttClass(ATT_CLEFLOG); @@ -53,6 +54,7 @@ Clef::Clef() this->RegisterAttClass(ATT_OCTAVE); this->RegisterAttClass(ATT_OCTAVEDISPLACEMENT); this->RegisterAttClass(ATT_STAFFIDENT); + this->RegisterAttClass(ATT_TYPOGRAPHY); this->RegisterAttClass(ATT_VISIBILITY); this->Reset(); @@ -73,6 +75,7 @@ void Clef::Reset() this->ResetOctave(); this->ResetOctaveDisplacement(); this->ResetStaffIdent(); + this->ResetTypography(); this->ResetVisibility(); } diff --git a/src/doc.cpp b/src/doc.cpp index e79a92b74b0..5b13dd476d7 100644 --- a/src/doc.cpp +++ b/src/doc.cpp @@ -23,6 +23,7 @@ #include "convertfunctor.h" #include "docselection.h" #include "expansion.h" +#include "facsimilefunctor.h" #include "featureextractor.h" #include "functor.h" #include "glyph.h" @@ -58,6 +59,7 @@ #include "staff.h" #include "staffdef.h" #include "staffgrp.h" +#include "surface.h" #include "syl.h" #include "syllable.h" #include "system.h" @@ -607,18 +609,16 @@ void Doc::PrepareData() // Try to match all spanning elements (slur, tie, etc) by processing backwards PrepareTimeSpanningFunctor prepareTimeSpanning; - prepareTimeSpanning.SetDirection(BACKWARD); this->Process(prepareTimeSpanning); prepareTimeSpanning.SetDataCollectionCompleted(); - // First we try backwards because normally the spanning elements are at the end of - // the measure. However, in some case, one (or both) end points will appear afterwards - // in the encoding. For these, the previous iteration will not have resolved the link and - // the spanning elements will remain in the timeSpanningElements array. We try again forwards - // but this time without filling the list (that is only will the remaining elements) + // First we try a forward pass which should collect most of the spanning elements. + // However, in some cases, one (or both) end points might appear a few measures + // before the spanning element in the encoding. For these, the previous iteration will not have resolved the link + // and the spanning elements will remain in the timeSpanningElements array. We try again forwards but this time + // without filling the list (that is only resolving remaining elements). const ListOfSpanningInterOwnerPairs &interfaceOwnerPairs = prepareTimeSpanning.GetInterfaceOwnerPairs(); if (!interfaceOwnerPairs.empty()) { - prepareTimeSpanning.SetDirection(FORWARD); this->Process(prepareTimeSpanning); } @@ -869,7 +869,7 @@ void Doc::PrepareData() } /************ Resolve @facs ************/ - if (this->GetType() == Facs) { + if (this->IsFacs()) { // Associate zones with elements PrepareFacsimileFunctor prepareFacsimile(this->GetFacsimile()); this->Process(prepareFacsimile); @@ -1281,10 +1281,10 @@ void Doc::ConvertToCastOffMensuralDoc(bool castOff) if (!m_isMensuralMusicOnly) return; // Do not convert transcription files - if (this->GetType() == Transcription) return; + if (this->IsTranscription()) return; // Do not convert facs files - if (this->GetType() == Facs) return; + if (this->IsFacs()) return; // We are converting to measure music in a definite way if (this->GetOptions()->m_mensuralToMeasure.GetValue()) { @@ -1388,6 +1388,32 @@ void Doc::ConvertMarkupDoc(bool permanent) } } +void Doc::SyncFromFacsimileDoc() +{ + PrepareFacsimileFunctor prepareFacsimile(this->GetFacsimile()); + this->Process(prepareFacsimile); + + SyncFromFacsimileFunctor syncFromFacsimileFunctor(this); + this->Process(syncFromFacsimileFunctor); +} + +void Doc::SyncToFacsimileDoc() +{ + // Create a new facsimile object if we do not have one already + if (!this->HasFacsimile()) { + Facsimile *facsimile = new Facsimile(); + this->SetFacsimile(facsimile); + } + if (!m_facsimile->FindDescendantByType(SURFACE)) { + m_facsimile->AddChild(new Surface()); + } + m_facsimile->SetType("transcription"); + m_facsimile->ClearChildren(); + + SyncToFacsimileFunctor syncToFacimileFunctor(this); + this->Process(syncToFacimileFunctor); +} + void Doc::TransposeDoc() { Transposer transposer; @@ -1523,10 +1549,20 @@ Score *Doc::GetCorrespondingScore(const Object *object) const Score *Doc::GetCorrespondingScore(const Object *object) const { - assert(!m_visibleScores.empty()); + return this->GetCorrespondingScore(object, m_visibleScores); +} + +Score *Doc::GetCorrespondingScore(const Object *object, const std::list &scores) +{ + return const_cast(std::as_const(*this).GetCorrespondingScore(object, scores)); +} - const Score *correspondingScore = m_visibleScores.front(); - for (Score *score : m_visibleScores) { +const Score *Doc::GetCorrespondingScore(const Object *object, const std::list &scores) const +{ + assert(!scores.empty()); + + const Score *correspondingScore = scores.front(); + for (Score *score : scores) { if ((score == object) || Object::IsPreOrdered(score, object)) { correspondingScore = score; } @@ -1807,7 +1843,7 @@ double Doc::GetCueScaling() const FontInfo *Doc::GetDrawingSmuflFont(int staffSize, bool graceSize) { - m_drawingSmuflFont.SetFaceName(m_options->m_font.GetValue().c_str()); + m_drawingSmuflFont.SetFaceName(this->GetResources().GetCurrentFont().c_str()); int value = m_drawingSmuflFontSize * staffSize / 100; if (graceSize) value = value * m_options->m_graceFactor.GetValue(); m_drawingSmuflFont.SetPointSize(value); @@ -2007,6 +2043,15 @@ Page *Doc::SetDrawingPage(int pageIdx) m_drawingPage = vrv_cast(pages->GetChild(pageIdx)); assert(m_drawingPage); + UpdatePageDrawingSizes(); + + return m_drawingPage; +} + +void Doc::UpdatePageDrawingSizes() +{ + assert(m_drawingPage); + int glyph_size; // we use the page members only if set (!= -1) @@ -2072,8 +2117,6 @@ Page *Doc::SetDrawingPage(int pageIdx) glyph_size = this->GetGlyphWidth(SMUFL_E0A2_noteheadWhole, 100, 0); m_drawingBrevisWidth = (int)((glyph_size * 0.8) / 2); - - return m_drawingPage; } int Doc::CalcMusicFontSize() @@ -2085,7 +2128,7 @@ int Doc::GetAdjustedDrawingPageHeight() const { assert(m_drawingPage); - if ((this->GetType() == Transcription) || (this->GetType() == Facs)) { + if (this->IsTranscription() || this->IsFacs()) { return m_drawingPage->m_pageHeight / DEFINITION_FACTOR; } @@ -2097,7 +2140,7 @@ int Doc::GetAdjustedDrawingPageWidth() const { assert(m_drawingPage); - if ((this->GetType() == Transcription) || (this->GetType() == Facs)) { + if (this->IsTranscription() || this->IsFacs()) { return m_drawingPage->m_pageWidth / DEFINITION_FACTOR; } diff --git a/src/editortoolkit_cmn.cpp b/src/editortoolkit_cmn.cpp index 6d8f85f49a8..18cbed036a5 100644 --- a/src/editortoolkit_cmn.cpp +++ b/src/editortoolkit_cmn.cpp @@ -213,7 +213,6 @@ bool EditorToolkitCMN::Delete(std::string &elementId) { Object *element = this->GetElement(elementId); if (!element) return false; - if (element->Is(NOTE)) { return this->DeleteNote(vrv_cast(element)); } @@ -452,7 +451,8 @@ bool EditorToolkitCMN::InsertNote(Object *object) } if (currentNote->HasEditorialContent()) { - LogInfo("Inserting a note where a note has editorial content is not possible"); + LogInfo("Inserting a note where a note has editorial content is not " + "possible"); return false; } @@ -512,10 +512,10 @@ bool EditorToolkitCMN::DeleteNote(Note *note) Chord *chord = note->IsChordTone(); Beam *beam = note->GetAncestorBeam(); - if (chord) { if (chord->HasEditorialContent()) { - LogInfo("Deleting a note in a chord that has editorial content is not possible"); + LogInfo("Deleting a note in a chord that has editorial content is not " + "possible"); return false; } int count = chord->GetChildCount(NOTE, UNLIMITED_DEPTH); @@ -560,6 +560,8 @@ bool EditorToolkitCMN::DeleteNote(Note *note) } } else if (beam) { + // If the beam has exactly 2 notes (take apart and leave a single note and a + // rest) if ((int)beam->m_beamSegment.GetElementCoordRefs()->size() == 2) { bool insertBefore = true; LayerElement *otherElement = beam->m_beamSegment.GetElementCoordRefs()->back()->m_element; @@ -584,7 +586,8 @@ bool EditorToolkitCMN::DeleteNote(Note *note) m_chainedId = rest->GetID(); return true; } - if (beam->IsFirstIn(note)) { + // If the beam has more than 2 and this is first + else if (beam->IsFirstIn(note)) { Rest *rest = new Rest(); rest->DurationInterface::operator=(*note); Object *parent = beam->GetParent(); @@ -592,8 +595,8 @@ bool EditorToolkitCMN::DeleteNote(Note *note) parent->InsertBefore(beam, rest); beam->DeleteChild(note); m_chainedId = rest->GetID(); - return true; } + // If the beam has more than 2 and this is last else if (beam->IsLastIn(note)) { Rest *rest = new Rest(); rest->DurationInterface::operator=(*note); @@ -602,18 +605,25 @@ bool EditorToolkitCMN::DeleteNote(Note *note) parent->InsertAfter(beam, rest); beam->DeleteChild(note); m_chainedId = rest->GetID(); - return true; } + // If the beam has more than 2 and this in the middle else { Rest *rest = new Rest(); rest->DurationInterface::operator=(*note); beam->ReplaceChild(note, rest); delete note; m_chainedId = rest->GetID(); - return true; } + // All but the first IF statement branches lead here + /* Clearing the coords here fixes an error where the children get updated, + * but the internal m_beamElementCoordRefs does not. By clearing it, the + * system is forced to update that structure to reflect the current + * children. */ + beam->ClearCoords(); + return true; } else { + // Deal with just a single note (Not in beam or chord) Rest *rest = new Rest(); rest->DurationInterface::operator=(*note); Object *parent = note->GetParent(); diff --git a/src/editortoolkit_neume.cpp b/src/editortoolkit_neume.cpp index e355c23fd64..2b1d30f6dc8 100644 --- a/src/editortoolkit_neume.cpp +++ b/src/editortoolkit_neume.cpp @@ -41,25 +41,29 @@ //-------------------------------------------------------------------------------- namespace vrv { +std::string EditorToolkitNeume::EditInfo() +{ + return m_editInfo.json(); +} bool EditorToolkitNeume::ParseEditorAction(const std::string &json_editorAction) { jsonxx::Object json; - m_infoObject.reset(); + m_editInfo.reset(); // Read JSON actions if (!json.parse(json_editorAction)) { LogError("Cannot parse JSON std::string."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Cannot parse JSON from std::string " + json_editorAction); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Cannot parse JSON from std::string " + json_editorAction); return false; } if (!json.has("action") || (!json.has("param") && !json.has("param"))) { LogWarning("Incorrectly formatted JSON action"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "JSON action misformatted."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "JSON action misformatted."); return false; } @@ -67,8 +71,8 @@ bool EditorToolkitNeume::ParseEditorAction(const std::string &json_editorAction) if (action != "chain" && json.has("param")) { LogWarning("Only 'chain' uses 'param' as an array."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "'param' can only be an array for a chain action."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "'param' can only be an array for a chain action."); return false; } @@ -184,6 +188,13 @@ bool EditorToolkitNeume::ParseEditorAction(const std::string &json_editorAction) return this->SplitNeume(elementId, ncId); } } + else if (action == "matchHeight") { + std::string elementId; + if (this->ParseMatchHeightAction(json.get("param"), &elementId)) { + return this->MatchHeight(elementId); + } + LogWarning("Could not parse the insert action"); + } else if (action == "merge") { std::vector elementIds; if (this->ParseMergeAction(json.get("param"), &elementIds)) { @@ -232,8 +243,8 @@ bool EditorToolkitNeume::ParseEditorAction(const std::string &json_editorAction) else { LogWarning("Unknown action type '%s'.", action.c_str()); } - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Action " + action + " could not be parsed or is unknown."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Action " + action + " could not be parsed or is unknown."); return false; } @@ -245,15 +256,15 @@ bool EditorToolkitNeume::Chain(jsonxx::Array actions) for (int i = 0; i < (int)actions.size(); i++) { if (!actions.has(0)) { LogError("Action %d was not an object", i); - m_infoObject.reset(); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Action " + std::to_string(i) + " was not an object."); + m_editInfo.reset(); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Action " + std::to_string(i) + " was not an object."); return false; } status |= this->ParseEditorAction(actions.get(i).json()); - results.import(std::to_string(i), m_infoObject); + results.import(std::to_string(i), m_editInfo); } - m_infoObject = results; + m_editInfo = results; return status; } @@ -474,8 +485,8 @@ bool EditorToolkitNeume::Drag(std::string elementId, int x, int y) std::string status = "OK", message = ""; if (!m_doc->GetDrawingPage()) { LogError("Could not get drawing page."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get drawing page."); return false; } @@ -507,8 +518,8 @@ bool EditorToolkitNeume::Drag(std::string elementId, int x, int y) Layer *layer = dynamic_cast(element->GetFirstAncestor(LAYER)); if (!layer) { LogError("Element does not have Layer parent. This should not happen."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Element does not have Layer parent."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Element does not have Layer parent."); return false; } @@ -587,8 +598,8 @@ bool EditorToolkitNeume::Drag(std::string elementId, int x, int y) Clef *clef = dynamic_cast(element); if (!clef->HasFacs()) { LogError("Clef dragging is only supported for clefs with facsimiles!"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Clef dragging is only supported for clefs with facsimiles."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Clef dragging is only supported for clefs with facsimiles."); return false; } FacsimileInterface *fi = (*clef).GetFacsimileInterface(); @@ -639,8 +650,8 @@ bool EditorToolkitNeume::Drag(std::string elementId, int x, int y) Staff *staff = vrv_cast(element); if (!staff->HasFacs()) { LogError("Staff dragging is only supported for staves with facsimiles!"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Staff dragging is only supported for staves with facsimiles."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Staff dragging is only supported for staves with facsimiles."); return false; } @@ -668,8 +679,8 @@ bool EditorToolkitNeume::Drag(std::string elementId, int x, int y) Syl *syl = dynamic_cast(element); if (!syl->HasFacs()) { LogError("Syl (boundingbox) dragging is only supported for syls with facsimiles!"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Syl dragging is only supported for syls with facsimiles."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Syl dragging is only supported for syls with facsimiles."); return false; } FacsimileInterface *fi = (*syl).GetFacsimileInterface(); @@ -682,8 +693,8 @@ bool EditorToolkitNeume::Drag(std::string elementId, int x, int y) Accid *accid = dynamic_cast(element); if (!accid->HasFacs()) { LogError("Accid dragging is only supported for accid with facsimiles!"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Accid dragging is only supported for accid with facsimiles."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Accid dragging is only supported for accid with facsimiles."); return false; } FacsimileInterface *fi = (*accid).GetFacsimileInterface(); @@ -699,8 +710,8 @@ bool EditorToolkitNeume::Drag(std::string elementId, int x, int y) DivLine *divLine = dynamic_cast(element); if (!divLine->HasFacs()) { LogError("DivLine dragging is only supported for divLine with facsimiles!"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "DivLine dragging is only supported for divLine with facsimiles."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "DivLine dragging is only supported for divLine with facsimiles."); return false; } FacsimileInterface *fi = (*divLine).GetFacsimileInterface(); @@ -714,14 +725,14 @@ bool EditorToolkitNeume::Drag(std::string elementId, int x, int y) } else { LogWarning("Unsupported element for dragging."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Unsupported element for dragging."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Unsupported element for dragging."); return false; } Layer *layer = vrv_cast(element->GetFirstAncestor(LAYER)); layer->ReorderByXPos(); // Reflect position order of elements internally (and in the resulting output file) - m_infoObject.import("status", status); - m_infoObject.import("message", message); + m_editInfo.import("status", status); + m_editInfo.import("message", message); return true; } @@ -730,14 +741,14 @@ bool EditorToolkitNeume::Insert(std::string elementType, std::string staffId, in { if (!m_doc->GetDrawingPage()) { LogError("Could not get drawing page"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get drawing page."); return false; } if (m_doc->GetType() != Facs) { LogError("Drawing page without facsimile"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Drawing page without facsimile is unsupported."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Drawing page without facsimile is unsupported."); return false; } @@ -772,10 +783,12 @@ bool EditorToolkitNeume::Insert(std::string elementType, std::string staffId, in if (elementType == "staff") { Object *parent; Staff *newStaff; + std::string columnValue; // Use closest existing staff (if there is one) if (staff) { parent = staff->GetParent(); assert(parent); + columnValue = staff->GetType(); int n = parent->GetChildCount() + 1; newStaff = new Staff(n); newStaff->m_drawingStaffDef = staff->m_drawingStaffDef; @@ -800,43 +813,43 @@ bool EditorToolkitNeume::Insert(std::string elementType, std::string staffId, in assert(surface); surface->AddChild(zone); newStaff->AttachZone(zone); + if (columnValue.length()) newStaff->SetType(columnValue); Layer *newLayer = new Layer(); newStaff->AddChild(newLayer); - // Find index to insert new staff - ListOfObjects staves = parent->FindAllDescendantsByType(STAFF, false); - std::vector stavesVector(staves.begin(), staves.end()); - stavesVector.push_back(newStaff); - StaffSort staffSort; - std::stable_sort(stavesVector.begin(), stavesVector.end(), staffSort); - for (int i = 0; i < (int)staves.size(); ++i) { - if (stavesVector.at(i) == newStaff) { - parent->InsertChild(newStaff, i); - parent->Modify(); - - m_infoObject.import("uuid", newStaff->GetID()); - m_infoObject.import("status", status); - m_infoObject.import("message", message); - - return true; + if (staff) { + // Find index to insert new staff + ListOfObjects staves = parent->FindAllDescendantsByType(STAFF, false); + std::vector stavesVector(staves.begin(), staves.end()); + stavesVector.push_back(newStaff); + StaffSort staffSort; + std::stable_sort(stavesVector.begin(), stavesVector.end(), staffSort); + for (int i = 0; i < (int)staves.size(); ++i) { + if (stavesVector.at(i) == newStaff) { + parent->InsertChild(newStaff, i); + parent->Modify(); + + m_editInfo.import("uuid", newStaff->GetID()); + m_editInfo.import("status", status); + m_editInfo.import("message", message); + + return true; + } } } - LogWarning("Failed to insert newStaff into staff"); - message += "Failed to insert newStaff into staves."; parent->AddChild(newStaff); - parent->Modify(); - m_infoObject.import("uuid", newStaff->GetID()); - m_infoObject.import("status", status); - m_infoObject.import("message", message); + m_editInfo.import("uuid", newStaff->GetID()); + m_editInfo.import("status", status); + m_editInfo.import("message", message); return true; } if (staff == NULL) { LogError("A staff must exist in the page to add a non-staff element."); delete zone; - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "A staff must exist in the page to add a non-staff element."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "A staff must exist in the page to add a non-staff element."); return false; } Layer *layer = vrv_cast(staff->FindDescendantByType(LAYER)); @@ -847,12 +860,12 @@ bool EditorToolkitNeume::Insert(std::string elementType, std::string staffId, in Syl *syl = new Syl(); Neume *neume = new Neume(); Nc *nc = new Nc(); + Zone *sylZone; std::string contour = ""; nc->AttachZone(zone); Surface *surface = vrv_cast(facsimile->FindDescendantByType(SURFACE)); surface->AddChild(zone); - zone->SetUlx(ulx); Text *text = new Text(); std::u32string str = U""; @@ -864,59 +877,46 @@ bool EditorToolkitNeume::Insert(std::string elementType, std::string staffId, in syllable->AddChild(syl); layer->AddChild(syllable); + const int noteHeight + = (int)(m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) / NOTE_HEIGHT_TO_STAFF_SIZE_RATIO); + const int noteWidth + = (int)(m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) / NOTE_WIDTH_TO_STAFF_SIZE_RATIO); + + // Set up facsimile + zone->SetUlx(ulx); + zone->SetUly(uly); + zone->SetLrx(ulx + noteWidth); + zone->SetLry(uly + noteHeight); + // add syl bounding box if Facs if (m_doc->GetType() == Facs) { FacsimileInterface *fi = vrv_cast(syl->GetFacsimileInterface()); assert(fi); - Text *text = new Text(); - syl->AddChild(text); - Zone *sylZone = new Zone(); + sylZone = new Zone(); + + int staffLry = staff->GetFacsimileInterface()->GetZone()->GetLry(); - // calculate bboxUlx and bboxUly wrt rotation using sine rule - int draw_w = staff->GetWidth(); - int draw_h = staff->GetHeight(); - double theta = staff->GetDrawingRotate(); - int staffUly = staff->GetDrawingY(); - int x = ulx - staff->GetDrawingX(); - - int bboxUlx = ulx; - int bboxUly; - // if staff rotates downward to the right - if (theta > 0) { - int y = (int)((draw_w - x) * tan(theta * M_PI / 180.0)); - bboxUly = staffUly + draw_h - y; - } - // if staff rotates upwards to the right - else { - int y = (int)(x * tan(-theta * M_PI / 180.0)); - int h = (int)(draw_w * tan(-theta * M_PI / 180.0)); - bboxUly = staffUly + (draw_h - h) - y; - } // width height and offset can be adjusted - int bboxWidth = 225; int bboxHeight = 175; int bboxOffsetX = 50; - sylZone->SetUlx(bboxUlx - bboxOffsetX); - sylZone->SetUly(bboxUly); - sylZone->SetLrx(bboxUlx + bboxWidth - bboxOffsetX); - sylZone->SetLry(bboxUly + bboxHeight); + // calculate staff rotation offset + double theta = staff->GetDrawingRotate(); + int offsetY = 0; + if (theta) { + double factor = 1.3; + offsetY = (int)((ulx - staff->GetFacsimileInterface()->GetZone()->GetUlx()) * tan(theta * M_PI / 180.0) + / factor); + } + + sylZone->SetUlx(ulx); + sylZone->SetUly(staffLry + offsetY); + sylZone->SetLrx(ulx + noteWidth + bboxOffsetX); + sylZone->SetLry(staffLry + offsetY + bboxHeight); surface->AddChild(sylZone); fi->AttachZone(sylZone); } - const int noteHeight - = (int)(m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) / NOTE_HEIGHT_TO_STAFF_SIZE_RATIO); - const int noteWidth - = (int)(m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) / NOTE_WIDTH_TO_STAFF_SIZE_RATIO); - ulx -= noteWidth / 2; - // uly -= noteHeight / 2; - // Set up facsimile - zone->SetUlx(ulx); - zone->SetUly(uly); - zone->SetLrx(ulx + noteWidth); - zone->SetLry(uly + noteHeight); - layer->ReorderByXPos(); if (!AdjustPitchFromPosition(syllable)) { @@ -925,8 +925,8 @@ bool EditorToolkitNeume::Insert(std::string elementType, std::string staffId, in delete nc; LogError("Failed to set pitch."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Failed to set pitch."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Failed to set pitch."); return false; } @@ -988,8 +988,8 @@ bool EditorToolkitNeume::Insert(std::string elementType, std::string staffId, in LogError("Unsupported character in contour."); delete newNc; delete newZone; - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Unsupported character in contour."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Unsupported character in contour."); return false; } @@ -997,12 +997,13 @@ bool EditorToolkitNeume::Insert(std::string elementType, std::string staffId, in newUly += (newUlx - ulx) * tan(-staff->GetDrawingRotate() * M_PI / 180.0); newZone->SetUlx(newUlx); newZone->SetUly(newUly); - ; newZone->SetLrx(newUlx + noteWidth); newZone->SetLry(newUly + noteHeight); newNc->AttachZone(newZone); + if (sylZone) sylZone->SetLrx(newUlx + noteWidth); + assert(surface); surface->AddChild(newZone); @@ -1014,10 +1015,10 @@ bool EditorToolkitNeume::Insert(std::string elementType, std::string staffId, in } } if (elementType == "nc") { - m_infoObject.import("uuid", nc->GetID()); + m_editInfo.import("uuid", nc->GetID()); } else { - m_infoObject.import("uuid", neume->GetID()); + m_editInfo.import("uuid", neume->GetID()); } } else if (elementType == "clef") { @@ -1042,8 +1043,8 @@ bool EditorToolkitNeume::Insert(std::string elementType, std::string staffId, in LogError("A clef shape must be specified."); delete clef; - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "A clef shape must be specified."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "A clef shape must be specified."); return false; } clef->SetShape(clefShape); @@ -1064,7 +1065,7 @@ bool EditorToolkitNeume::Insert(std::string elementType, std::string staffId, in assert(surface); surface->AddChild(zone); layer->AddChild(clef); - m_infoObject.import("uuid", clef->GetID()); + m_editInfo.import("uuid", clef->GetID()); layer->ReorderByXPos(); // ensure pitched elements associated with this clef keep their x,y positions @@ -1115,11 +1116,11 @@ bool EditorToolkitNeume::Insert(std::string elementType, std::string staffId, in if (!AdjustPitchFromPosition(custos)) { LogError("Failed to set pitch."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Failed to set pitch."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Failed to set pitch."); return false; } - m_infoObject.import("uuid", custos->GetID()); + m_editInfo.import("uuid", custos->GetID()); } else if (elementType == "accid") { Accid *accid = new Accid(); @@ -1140,8 +1141,8 @@ bool EditorToolkitNeume::Insert(std::string elementType, std::string staffId, in LogError("A accid type must be specified."); delete accid; - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "A accid type must be specified."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "A accid type must be specified."); return false; } @@ -1166,7 +1167,7 @@ bool EditorToolkitNeume::Insert(std::string elementType, std::string staffId, in zone->SetLry(uly + noteHeight); layer->ReorderByXPos(); - m_infoObject.import("uuid", accid->GetID()); + m_editInfo.import("uuid", accid->GetID()); } else if (elementType == "divLine") { DivLine *divLine = new DivLine(); @@ -1204,8 +1205,8 @@ bool EditorToolkitNeume::Insert(std::string elementType, std::string staffId, in LogError("A divLine type must be specified."); delete divLine; - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "A divLine type must be specified."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "A divLine type must be specified."); return false; } @@ -1230,18 +1231,18 @@ bool EditorToolkitNeume::Insert(std::string elementType, std::string staffId, in zone->SetLry(uly + noteHeight); layer->ReorderByXPos(); - m_infoObject.import("uuid", divLine->GetID()); + m_editInfo.import("uuid", divLine->GetID()); } else { delete zone; LogError("Unsupported type '%s' for insertion", elementType.c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Unsupported type '" + elementType + "' for insertion."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Unsupported type '" + elementType + "' for insertion."); return false; } layer->ReorderByXPos(); - m_infoObject.import("status", status); - m_infoObject.import("message", message); + m_editInfo.import("status", status); + m_editInfo.import("message", message); return true; } @@ -1249,14 +1250,14 @@ bool EditorToolkitNeume::InsertToSyllable(std::string elementId) { if (!m_doc->GetDrawingPage()) { LogError("Could not get drawing page"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get drawing page."); return false; } if (m_doc->GetType() != Facs) { LogError("Drawing page without facsimile"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Drawing page without facsimile is unsupported."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Drawing page without facsimile is unsupported."); return false; } @@ -1267,23 +1268,23 @@ bool EditorToolkitNeume::InsertToSyllable(std::string elementId) if (element == NULL) { LogError("No element exists with ID '%s'.", elementId.c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "No element exists with ID" + elementId + "."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "No element exists with ID" + elementId + "."); return false; } if (!(element->Is(DIVLINE) || element->Is(ACCID) || element->Is(CLEF))) { LogError("Element is of type %s, but only Divlines and Accids can be inserted into syllables.", element->GetClassName().c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Element is of type " + element->GetClassName() + ", but only DivLines, Accids, and Clefs can be inserted into syllables."); return false; } if (!parent->Is(LAYER)) { LogError("The selected %s is not a child of layer.", element->GetClassName().c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "The selected " + element->GetClassName() + "is not a child of layer."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "The selected " + element->GetClassName() + "is not a child of layer."); return false; } @@ -1296,8 +1297,8 @@ bool EditorToolkitNeume::InsertToSyllable(std::string elementId) } else { LogError("Selected '%s' without facsimile", element->GetClassName().c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Selected '" + element->GetClassName() + "' without facsimile is unsupported."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Selected '" + element->GetClassName() + "' without facsimile is unsupported."); return false; } @@ -1311,8 +1312,8 @@ bool EditorToolkitNeume::InsertToSyllable(std::string elementId) if (neumes.empty()) { LogError("A syllable must exist in the staff to insert a '%s' into.", element->GetClassName().c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import( + m_editInfo.import("status", "FAILURE"); + m_editInfo.import( "message", "A syllable must exist in the staff to insert a '" + element->GetClassName() + "' into."); return false; } @@ -1390,8 +1391,8 @@ bool EditorToolkitNeume::InsertToSyllable(std::string elementId) } } - m_infoObject.import("status", "OK"); - m_infoObject.import("message", ""); + m_editInfo.import("status", "OK"); + m_editInfo.import("message", ""); return true; } @@ -1399,14 +1400,14 @@ bool EditorToolkitNeume::MoveOutsideSyllable(std::string elementId) { if (!m_doc->GetDrawingPage()) { LogError("Could not get drawing page"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get drawing page."); return false; } if (m_doc->GetType() != Facs) { LogError("Drawing page without facsimile"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Drawing page without facsimile is unsupported."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Drawing page without facsimile is unsupported."); return false; } @@ -1417,23 +1418,23 @@ bool EditorToolkitNeume::MoveOutsideSyllable(std::string elementId) if (element == NULL) { LogError("No element exists with ID '%s'.", elementId.c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "No element exists with ID" + elementId + "."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "No element exists with ID" + elementId + "."); return false; } if (!(element->Is(DIVLINE) || element->Is(ACCID) || element->Is(CLEF))) { LogError("Element is of type %s, but only Divlines, Accids, and Clefs can be moved out of syllables.", element->GetClassName().c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Element is of type " + element->GetClassName() + ", but only DivLines and Accids can be inserted into syllables."); return false; } if (!parent->Is(SYLLABLE)) { LogError("The selected %s is not a child of syllable.", element->GetClassName().c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "The selected " + element->GetClassName() + "is not a child of syllable."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "The selected " + element->GetClassName() + "is not a child of syllable."); return false; } @@ -1513,8 +1514,8 @@ bool EditorToolkitNeume::MoveOutsideSyllable(std::string elementId) // INSIDE do nothing } - m_infoObject.import("status", "OK"); - m_infoObject.import("message", ""); + m_editInfo.import("status", "OK"); + m_editInfo.import("message", ""); return true; } @@ -1522,15 +1523,15 @@ bool EditorToolkitNeume::DisplaceClefOctave(std::string elementId, std::string d { if (!m_doc->GetDrawingPage()) { LogError("Could not get the drawing page."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get the drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get the drawing page."); return false; } if (direction != "above" && direction != "below") { LogError("Direction can only be either \"above\" or \"below\"."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Direction can only be either \"above\" or \"below\"."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Direction can only be either \"above\" or \"below\"."); return false; } @@ -1538,8 +1539,8 @@ bool EditorToolkitNeume::DisplaceClefOctave(std::string elementId, std::string d Object *obj = page->FindDescendantByID(elementId); if (obj == NULL || !obj->Is(CLEF)) { LogError("This action can only be done on clefs!"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "This action can only be done on clefs!"); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "This action can only be done on clefs!"); return false; } @@ -1554,8 +1555,8 @@ bool EditorToolkitNeume::DisplaceClefOctave(std::string elementId, std::string d if (octaveDis > 3 || octaveDis < -3) { LogError("Clefs can only be displaced 3 octaves."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Clefs can only be displaced 3 octaves."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Clefs can only be displaced 3 octaves."); return false; } @@ -1590,8 +1591,99 @@ bool EditorToolkitNeume::DisplaceClefOctave(std::string elementId, std::string d nc->SetOct(nc->GetOct() + move); }); - m_infoObject.import("status", "OK"); - m_infoObject.import("message", ""); + m_editInfo.import("status", "OK"); + m_editInfo.import("message", ""); + return true; +} + +bool EditorToolkitNeume::MatchHeight(std::string elementId) +{ + if (!m_doc->GetDrawingPage()) { + LogError("Could not get drawing page"); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get drawing page."); + return false; + } + if (m_doc->GetType() != Facs) { + LogError("Drawing page without facsimile"); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Drawing page without facsimile is unsupported."); + return false; + } + + Object *element = m_doc->GetDrawingPage()->FindDescendantByID(elementId); + assert(element); + Object *staffParent = element->GetFirstAncestor(STAFF); + if (element == NULL) { + LogError("No element exists with ID '%s'.", elementId.c_str()); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "No element exists with ID" + elementId + "."); + return false; + } + if (!element->Is(SYL)) { + LogError("Element is of type %s, but only element can match height.", element->GetClassName().c_str()); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import( + "message", "Element is of type " + element->GetClassName() + ", but only element can match height."); + return false; + } + + // get the position of the selected bbox + int ulx; + int uly; + int height; + if (dynamic_cast(element)->HasFacs()) { + ulx = element->GetFacsimileInterface()->GetZone()->GetUlx(); + uly = element->GetFacsimileInterface()->GetZone()->GetUly(); + height = element->GetFacsimileInterface()->GetZone()->GetLry() - uly; + } + else { + LogError("Selected '%s' without facsimile", element->GetClassName().c_str()); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Selected '" + element->GetClassName() + "' without facsimile is unsupported."); + return false; + } + + // find all syls in staff + ListOfObjects syls; + ClassIdComparison ac(SYL); + staffParent->FindAllDescendantsByComparison(&syls, &ac); + Syl *syl; + Zone *zone; + int itUlx; + // int itLrx; + int offsetY; + // int rightMost = -1; + double theta = staffParent->GetFacsimileInterface()->GetZone()->GetRotate(); + + for (auto it = syls.begin(); it != syls.end(); ++it) { + syl = dynamic_cast(*it); + zone = syl->GetFacsimileInterface()->GetZone(); + assert(zone); + + // // adjust x-axis first + // itUlx = zone->GetUlx(); + // itLrx = zone->GetLrx(); + // if (itLrx > rightMost) { + // // correct overlap + // if (itUlx < rightMost) zone->SetUlx(rightMost); + // // Update right most point if needed + // rightMost = itLrx; + // } + + offsetY = 0; + itUlx = zone->GetUlx(); + if (theta) { + double factor = 1.3; + offsetY = (int)((itUlx - ulx) * tan(theta * M_PI / 180.0) / factor); + } + + zone->SetUly(uly + offsetY); + zone->SetLry(uly + offsetY + height); + } + + m_editInfo.import("status", "OK"); + m_editInfo.import("message", ""); return true; } @@ -1608,15 +1700,15 @@ bool EditorToolkitNeume::Merge(std::vector elementIds) } else { LogError("Staff with ID '%s' does not exist!", it->c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Staff with ID '" + *it + "' does not exist."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Staff with ID '" + *it + "' does not exist."); return false; } } if (staves.size() < 2) { LogError("At least two staves must be provided."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "At least two staves must be provided."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "At least two staves must be provided."); return false; } @@ -1677,9 +1769,9 @@ bool EditorToolkitNeume::Merge(std::vector elementIds) fillLayer->ReorderByXPos(); - m_infoObject.import("uuid", fillStaff->GetID()); - m_infoObject.import("status", "OK"); - m_infoObject.import("message", ""); + m_editInfo.import("uuid", fillStaff->GetID()); + m_editInfo.import("status", "OK"); + m_editInfo.import("message", ""); // TODO change zones for staff children @@ -1721,8 +1813,8 @@ bool EditorToolkitNeume::Set(std::string elementId, std::string attrType, std::s m_doc->PrepareData(); m_doc->GetDrawingPage()->LayOut(true); } - m_infoObject.import("status", success ? "OK" : "FAILURE"); - m_infoObject.import("message", success ? "" : "Could not set attribute '" + attrType + "' to '" + attrValue + "'."); + m_editInfo.import("status", success ? "OK" : "FAILURE"); + m_editInfo.import("message", success ? "" : "Could not set attribute '" + attrType + "' to '" + attrValue + "'."); return success; } @@ -1732,15 +1824,15 @@ bool EditorToolkitNeume::SetText(std::string elementId, const std::string &text) std::string status = "OK", message = ""; const std::u32string wtext = UTF8to32(text); if (!m_doc->GetDrawingPage()) { - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not find drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not find drawing page."); return false; } Object *element = m_doc->GetDrawingPage()->FindDescendantByID(elementId); if (element == NULL) { LogWarning("No element with ID '%s' exists", elementId.c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "No element with ID '" + elementId + "' exists."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "No element with ID '" + elementId + "' exists."); return false; } @@ -1824,12 +1916,12 @@ bool EditorToolkitNeume::SetText(std::string elementId, const std::string &text) } else { LogError("Element type '%s' is unsupported for SetText", element->GetClassName().c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Element type '" + element->GetClassName() + "' is unsupported for SetText."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Element type '" + element->GetClassName() + "' is unsupported for SetText."); return false; } - m_infoObject.import("status", success ? status : "FAILURE"); - m_infoObject.import("message", success ? message : "SetText method failed."); + m_editInfo.import("status", success ? status : "FAILURE"); + m_editInfo.import("message", success ? message : "SetText method failed."); return success; } @@ -1837,8 +1929,8 @@ bool EditorToolkitNeume::SetClef(std::string elementId, std::string shape) { if (!m_doc->GetDrawingPage()) { LogError("Could not get the drawing page."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get the drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get the drawing page."); return false; } ListOfObjects objects; @@ -1861,8 +1953,8 @@ bool EditorToolkitNeume::SetClef(std::string elementId, std::string shape) success = AttModule::SetShared(clef, "shape", shape); if (!success) { LogError("Unable to set clef shape"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Unable to set clef shape."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Unable to set clef shape."); return false; } @@ -1889,8 +1981,8 @@ bool EditorToolkitNeume::SetClef(std::string elementId, std::string shape) m_doc->PrepareData(); m_doc->GetDrawingPage()->LayOut(true); } - m_infoObject.import("status", "OK"); - m_infoObject.import("message", ""); + m_editInfo.import("status", "OK"); + m_editInfo.import("message", ""); return true; } @@ -1898,23 +1990,23 @@ bool EditorToolkitNeume::Split(std::string elementId, int x) { if (!m_doc->GetDrawingPage()) { LogError("Could not get the drawing page"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get the drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get the drawing page."); return false; } Staff *staff = dynamic_cast(m_doc->GetDrawingPage()->FindDescendantByID(elementId)); // Validate parameters if (staff == NULL) { LogError("Either no element exists with ID '%s' or it is not a staff.", elementId.c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Either no element exists with ID '" + elementId + "' or it is not a staff."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Either no element exists with ID '" + elementId + "' or it is not a staff."); return false; } if (staff->GetZone()->GetUlx() > x || staff->GetZone()->GetLrx() < x) { LogError("The 'x' parameter is not within the bounds of the original staff."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "The 'x' parameter is not within bounds of the original staff."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "The 'x' parameter is not within bounds of the original staff."); return false; } @@ -1928,19 +2020,19 @@ bool EditorToolkitNeume::Split(std::string elementId, int x) if (!this->Insert("staff", "auto", newUlx, newUly, newLrx, newLry, v)) { LogError("Failed to create a second staff."); - m_infoObject.reset(); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Failed to create a second staff."); + m_editInfo.reset(); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Failed to create a second staff."); return false; } Staff *splitStaff - = dynamic_cast(m_doc->GetDrawingPage()->FindDescendantByID(m_infoObject.get("uuid"))); + = dynamic_cast(m_doc->GetDrawingPage()->FindDescendantByID(m_editInfo.get("uuid"))); assert(splitStaff); if (splitStaff == NULL) { LogError("Split staff is null"); - m_infoObject.reset(); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Split staff is null."); + m_editInfo.reset(); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Split staff is null."); return false; } @@ -1982,30 +2074,83 @@ bool EditorToolkitNeume::Split(std::string elementId, int x) } } layer->ClearRelinquishedChildren(); - m_infoObject.import("status", "OK"); - m_infoObject.import("message", ""); - m_infoObject.import("uuid", splitStaff->GetID()); + m_editInfo.import("status", "OK"); + m_editInfo.import("message", ""); + m_editInfo.import("uuid", splitStaff->GetID()); return true; } +void EditorToolkitNeume::UnlinkSyllable(Syllable *syllable) +{ + if (!m_doc->GetDrawingPage()) { + LogError("Could not get the drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get the drawing page."); + return; + } + + assert(syllable); + + std::string linkedID = (syllable->HasPrecedes() ? syllable->GetPrecedes() : syllable->GetFollows()); + if (linkedID.compare(0, 1, "#") == 0) linkedID.erase(0, 1); + Syllable *linkedSyllable = dynamic_cast(m_doc->GetDrawingPage()->FindDescendantByID(linkedID)); + if (linkedSyllable != NULL) { + if (linkedSyllable->HasPrecedes()) linkedSyllable->SetPrecedes(""); + if (linkedSyllable->HasFollows()) { + linkedSyllable->SetFollows(""); + + // Create an empty syl for the second part + Syl *syl = new Syl(); + Text *text = new Text(); + std::u32string str = U""; + text->SetText(str); + syl->AddChild(text); + linkedSyllable->AddChild(syl); + + // Create default bounding box if facs + if (m_doc->GetType() == Facs) { + Zone *zone = new Zone(); + + zone->SetUlx( + linkedSyllable->GetFirst(NEUME)->GetFirst(NC)->GetFacsimileInterface()->GetZone()->GetUlx()); + zone->SetUly(linkedSyllable->GetAncestorStaff()->GetFacsimileInterface()->GetZone()->GetLry()); + zone->SetLrx(linkedSyllable->GetLast(NEUME)->GetLast(NC)->GetFacsimileInterface()->GetZone()->GetLrx()); + zone->SetLry(zone->GetUly() + 100); + + // Make bbox larger if it has less than 2 ncs + if (linkedSyllable->GetChildCount(NC, 2) <= 2) { + zone->SetLrx(zone->GetLrx() + 50); + } + + assert(m_doc->GetFacsimile()); + m_doc->GetFacsimile()->FindDescendantByType(SURFACE)->AddChild(zone); + FacsimileInterface *fi = syl->GetFacsimileInterface(); + assert(fi); + fi->AttachZone(zone); + } + } + } +} + bool EditorToolkitNeume::Remove(std::string elementId) { if (!m_doc->GetDrawingPage()) { LogError("Could not get the drawing page."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get the drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get the drawing page."); return false; } Object *obj = m_doc->GetDrawingPage()->FindDescendantByID(elementId); assert(obj); bool result = false; - bool isNeumeOrNc, isNc, isClef; + bool isNeumeOrNc, isNc, isClef, isSyllable; isNeumeOrNc = (obj->Is(NC) || obj->Is(NEUME)); isNc = obj->Is(NC); isClef = obj->Is(CLEF); + isSyllable = obj->Is(SYLLABLE); Object *parent = obj->GetParent(); assert(parent); - m_infoObject.import("uuid", elementId); + m_editInfo.import("uuid", elementId); // Remove Zone for element (if any) InterfaceComparison ic(INTERFACE_FACSIMILE); ListOfObjects fiChildren; @@ -2046,9 +2191,9 @@ bool EditorToolkitNeume::Remove(std::string elementId) if (!result) { LogError("Failed to delete the desired element (%s)", elementId.c_str()); - m_infoObject.reset(); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Failed to delete the desired element (" + elementId + ")."); + m_editInfo.reset(); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Failed to delete the desired element (" + elementId + ")."); return false; } @@ -2059,6 +2204,13 @@ bool EditorToolkitNeume::Remove(std::string elementId) pi->AdjustPitchForNewClef(clef, previousClef); } } + else if (isSyllable) { + Syllable *syllable = dynamic_cast(obj); + assert(syllable); + if (syllable->HasPrecedes() || syllable->HasFollows()) { + UnlinkSyllable(syllable); + } + } if (!result) { result = parent->DeleteChild(obj); @@ -2066,9 +2218,9 @@ bool EditorToolkitNeume::Remove(std::string elementId) if (!result) { LogError("Failed to delete the desired element (%s)", elementId.c_str()); - m_infoObject.reset(); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Failed to delete the desired element (" + elementId + ")."); + m_editInfo.reset(); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Failed to delete the desired element (" + elementId + ")."); return false; } // Check if this leaves any containers empty and delete them @@ -2082,9 +2234,9 @@ bool EditorToolkitNeume::Remove(std::string elementId) result &= parent->DeleteChild(obj); if (!result) { LogError("Failed to delete empty neume (%s)", neumeId.c_str()); - m_infoObject.reset(); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Failed to delete empty neume (" + neumeId + ")."); + m_editInfo.reset(); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Failed to delete empty neume (" + neumeId + ")."); return false; } } @@ -2098,30 +2250,23 @@ bool EditorToolkitNeume::Remove(std::string elementId) Syllable *li = dynamic_cast(obj); assert(li); if (li->HasPrecedes() || li->HasFollows()) { - std::string linkedID = (li->HasPrecedes() ? li->GetPrecedes() : li->GetFollows()); - if (linkedID.compare(0, 1, "#") == 0) linkedID.erase(0, 1); - Syllable *linkedSyllable - = dynamic_cast(m_doc->GetDrawingPage()->FindDescendantByID(linkedID)); - if (linkedSyllable != NULL) { - if (linkedSyllable->HasPrecedes()) linkedSyllable->SetPrecedes(""); - if (linkedSyllable->HasFollows()) linkedSyllable->SetFollows(""); - } + UnlinkSyllable(li); } // Delete the syllable empty of neumes std::string syllableId = obj->GetID(); result &= parent->DeleteChild(obj); if (!result) { LogError("Failed to delete empty syllable (%s)", syllableId.c_str()); - m_infoObject.reset(); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Failed to delete empty syllable (" + syllableId + ")."); + m_editInfo.reset(); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Failed to delete empty syllable (" + syllableId + ")."); return false; } } } - m_infoObject.import("status", "OK"); - m_infoObject.import("message", ""); + m_editInfo.import("status", "OK"); + m_editInfo.import("message", ""); return true; } @@ -2129,22 +2274,22 @@ bool EditorToolkitNeume::Resize(std::string elementId, int ulx, int uly, int lrx { if (!m_doc->GetDrawingPage()) { LogError("Could not get the drawing page."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get the drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get the drawing page."); return false; } if (m_doc->GetType() != Facs) { LogWarning("Resizing is only available in facsimile mode."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Resizing is only available in facsimile mode."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Resizing is only available in facsimile mode."); return false; } Object *obj = m_doc->GetDrawingPage()->FindDescendantByID(elementId); if (obj == NULL) { LogError("Object with ID '%s' not found.", elementId.c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Object with ID '" + elementId + "' could not be found."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Object with ID '" + elementId + "' could not be found."); return false; } if (obj->Is(STAFF)) { @@ -2152,8 +2297,8 @@ bool EditorToolkitNeume::Resize(std::string elementId, int ulx, int uly, int lrx assert(staff); if (!staff->HasFacs()) { LogError("This staff does not have a facsimile."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "This staff does not have a facsimile."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "This staff does not have a facsimile."); return false; } Zone *zone = staff->GetZone(); @@ -2173,8 +2318,8 @@ bool EditorToolkitNeume::Resize(std::string elementId, int ulx, int uly, int lrx assert(syl); if (!syl->HasFacs()) { LogError("This syl (bounding box) does not have a facsimile"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "This syl does not have a facsimile."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "This syl does not have a facsimile."); return false; } Zone *zone = syl->GetZone(); @@ -2204,21 +2349,20 @@ bool EditorToolkitNeume::Resize(std::string elementId, int ulx, int uly, int lrx } else { LogError("Element of type '%s' is unsupported.", obj->GetClassName().c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Element of type '" + obj->GetClassName() + "' is unsupported."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Element of type '" + obj->GetClassName() + "' is unsupported."); return false; } - m_infoObject.import("status", "OK"); - m_infoObject.import("message", ""); + m_editInfo.import("status", "OK"); + m_editInfo.import("message", ""); return true; } bool EditorToolkitNeume::Group(std::string groupType, std::vector elementIds) { - Object *parent = NULL, *doubleParent = NULL; + Object *parent = NULL, *secondParent = NULL; std::map parents; - std::set elements; - std::vector sortedElements; + ListOfObjects elements; std::vector fullParents; std::map clefsBefore; @@ -2227,16 +2371,16 @@ bool EditorToolkitNeume::Group(std::string groupType, std::vector e // Get the current drawing page if (!m_doc->GetDrawingPage()) { LogError("Could not get the drawing page."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get the drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get the drawing page."); return false; } if (elementIds.size() == 0) { LogWarning("No element IDs to group!"); status = "WARNING"; message = "No element IDs to group!"; - m_infoObject.import("status", status); - m_infoObject.import("message", message); + m_editInfo.import("status", status); + m_editInfo.import("message", message); return true; } ClassId elementClass; @@ -2248,8 +2392,8 @@ bool EditorToolkitNeume::Group(std::string groupType, std::vector e } else { LogError("Invalid groupType: %s", groupType.c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Invalid groupType: " + groupType); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Invalid groupType: " + groupType); return false; } @@ -2259,15 +2403,15 @@ bool EditorToolkitNeume::Group(std::string groupType, std::vector e Object *el = m_doc->GetDrawingPage()->FindDescendantByID(*it); if (el == NULL) { LogError("Could not get element with ID %s", it->c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get element with ID " + *it); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get element with ID " + *it); return false; } if (el->GetClassId() != elementClass) { LogError("Element %s was of class %s. Expected class %s", el->GetID().c_str(), el->GetClassName().c_str(), groupType.c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Element " + el->GetID() + " was of class " + el->GetClassName() + " but expected class " + groupType + "."); return false; @@ -2277,8 +2421,8 @@ bool EditorToolkitNeume::Group(std::string groupType, std::vector e Object *par = el->GetParent(); if (par == NULL) { LogError("Parent of %s is null!", el->GetID().c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Parent of " + el->GetID() + " is null."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Parent of " + el->GetID() + " is null."); return false; } @@ -2301,25 +2445,22 @@ bool EditorToolkitNeume::Group(std::string groupType, std::vector e std::string resultId0; std::string resultId1; - // LogMessage("%s", chainArray.get(0).json().c_str()); - // for_each(elementIds.begin(), elementIds.begin()+idx,[](std::string s){LogMessage("%s", s.c_str());}); - std::vector elementIds0 = { elementIds.begin(), elementIds.begin() + idx }; Group("neume", elementIds0); - if (m_infoObject.get("status") == "FAILURE") { + if (m_editInfo.get("status") == "FAILURE") { resultId0 = linkedID; } else { - resultId0 = m_infoObject.get("uuid"); + resultId0 = m_editInfo.get("uuid"); } std::vector elementIds1 = { elementIds.begin() + idx, elementIds.end() }; Group("neume", elementIds1); - if (m_infoObject.get("status") == "FAILURE") { + if (m_editInfo.get("status") == "FAILURE") { resultId1 = par->GetID(); } else { - resultId1 = m_infoObject.get("uuid"); + resultId1 = m_editInfo.get("uuid"); par = m_doc->GetDrawingPage()->FindDescendantByID(resultId1); } @@ -2335,91 +2476,53 @@ bool EditorToolkitNeume::Group(std::string groupType, std::vector e uuidArray << resultId0; uuidArray << resultId1; - m_infoObject.import("uuid", uuidArray); - m_infoObject.import("status", status); - m_infoObject.import("message", message); + m_editInfo.import("uuid", uuidArray); + m_editInfo.import("status", status); + m_editInfo.import("message", message); return true; } } - if (doubleParent == NULL) { - doubleParent = par->GetParent(); - if (doubleParent == NULL) { - LogError("No second level parent!"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "No second level parent."); - return false; - } - } - else { - if (par->GetParent() != doubleParent) { - LogError("No shared second level parent!"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "No shared second level parent."); - return false; - } - } - auto possibleEntry = parents.find(el->GetParent()); - if (possibleEntry == parents.end()) { - parents.emplace(el->GetParent(), 1); - } - else { - possibleEntry->second += 1; - } - elements.insert(el); + parents[par]++; + elements.push_back(el); } if (parents.size() == 0) { LogError("Could not get the parent."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get the parent."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get the parent."); return false; } else if (parents.size() == 1) { LogError("The selected elements are already grouped."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "The selected elements are already grouped."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "The selected elements are already grouped."); return false; } - // auto it = elementIds.begin(); - // Object *el = m_doc->GetDrawingPage()->FindDescendantByID(*it); - // Layer *layer = dynamic_cast(el->GetFirstAncestor(LAYER)); - // if (!layer) { - // LogError("Elements does not have Layer parent. This should not happen."); - // m_infoObject.import("status", "FAILURE"); - // m_infoObject.import("message", "Elements does not have Layer parent."); - // return false; - // } - - std::copy(elements.begin(), elements.end(), std::back_inserter(sortedElements)); - std::stable_sort(sortedElements.begin(), sortedElements.end(), Object::sortByUlx); - ListOfObjects clefs; - std::set syllables; - ListOfObjects sortedSyllables; + ListOfObjects syllables; ClassIdComparison clefComp(CLEF); InterfaceComparison pitchComp(INTERFACE_PITCH); Clef *newClef = NULL; - m_doc->GetDrawingPage()->FindAllDescendantsBetween(&clefs, &clefComp, - sortedElements.front()->GetFirstAncestor(SYLLABLE), sortedElements.back()->GetFirstAncestor(SYLLABLE)); + m_doc->GetDrawingPage()->FindAllDescendantsBetween( + &clefs, &clefComp, elements.front()->GetFirstAncestor(SYLLABLE), elements.back()->GetFirstAncestor(SYLLABLE)); // if there are clefs between the elements getting grouped // some elements will need their pitch adjusted for the new clef // clefsBefore maps the syllable parent to its clef before the group // so we can reassociate any pitched children from their old clef to the new one if (clefs.size() != 0) { - for (auto it = sortedElements.begin(); it != sortedElements.end(); ++it) { + for (auto it = elements.begin(); it != elements.end(); ++it) { if ((*it)->Is(SYLLABLE)) { - syllables.insert(dynamic_cast(*it)); + syllables.push_back(dynamic_cast(*it)); } else { - syllables.insert((*it)->GetFirstAncestor(SYLLABLE)); + syllables.push_back((*it)->GetFirstAncestor(SYLLABLE)); } } - std::copy(syllables.begin(), syllables.end(), std::back_inserter(sortedSyllables)); - for (auto it = sortedSyllables.begin(); it != sortedSyllables.end(); ++it) { + for (auto it = syllables.begin(); it != syllables.end(); ++it) { Clef *tempClef = dynamic_cast(m_doc->GetDrawingPage()->FindPreviousChild(&clefComp, (*it))); if (tempClef == NULL) { Layer *layer = vrv_cast((*it)->GetFirstAncestor(LAYER)); @@ -2427,14 +2530,28 @@ bool EditorToolkitNeume::Group(std::string groupType, std::vector e } clefsBefore.insert(std::pair(dynamic_cast(*it), tempClef)); } - newClef = clefsBefore[dynamic_cast(sortedSyllables.front())]; + newClef = clefsBefore[dynamic_cast(syllables.front())]; } + // check if share second level parent + secondParent = (*parents.begin()).first->GetParent(); + if (secondParent == NULL) { + LogError("No second level parent!"); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "No second level parent."); + return false; + } // find parents where all of their children are being grouped for (auto it = parents.begin(); it != parents.end(); ++it) { auto parentPair = *it; Object *par = parentPair.first; int expected; + if (par->GetParent() != secondParent) { + LogError("No shared second level parent!"); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "No shared second level parent."); + return false; + } if (par->GetClassId() == SYLLABLE) { expected = par->GetChildCount(NEUME); } @@ -2445,6 +2562,7 @@ bool EditorToolkitNeume::Group(std::string groupType, std::vector e fullParents.push_back(parentPair.first); } } + // if there are no full parents we need to make a new one to attach everything to if (fullParents.empty()) { if (elementClass == NC) { @@ -2452,9 +2570,10 @@ bool EditorToolkitNeume::Group(std::string groupType, std::vector e } else if (elementClass == NEUME) { parent = new Syllable(); + Object *oldSyl = (*elements.begin())->GetFirstAncestor(SYLLABLE)->GetFirst(SYL); for (auto it = elements.begin(); it != elements.end(); ++it) { - if ((*it)->GetParent() != parent && !(*it)->Is(SYL)) { + if (!(*it)->Is(SYL)) { (*it)->MoveItselfTo(parent); } } @@ -2471,64 +2590,25 @@ bool EditorToolkitNeume::Group(std::string groupType, std::vector e if (m_doc->GetType() == Facs) { Zone *zone = new Zone(); - // if it's syllable parent has position values just use those - FacsimileInterface *syllableFi = NULL; - if (syl->GetFirstAncestor(SYLLABLE)->GetFacsimileInterface()->HasFacs()) { - syllableFi = syl->GetFirstAncestor(SYLLABLE)->GetFacsimileInterface(); - Zone *tempZone = dynamic_cast(syllableFi->GetZone()); - zone->SetUlx(tempZone->GetUlx()); - zone->SetUly(tempZone->GetUly()); - zone->SetLrx(tempZone->GetLrx()); - zone->SetLry(tempZone->GetLry()); - } - // otherwise get a boundingbox that comprises all the neumes in the syllable - else { - ListOfObjects children; - InterfaceComparison comp(INTERFACE_FACSIMILE); - syl->GetFirstAncestor(SYLLABLE)->FindAllDescendantsByComparison(&children, &comp); - for (auto iter2 = children.begin(); iter2 != children.end(); ++iter2) { - FacsimileInterface *temp = (*iter2)->GetFacsimileInterface(); - assert(temp); - Zone *tempZone = vrv_cast(temp->GetZone()); - assert(tempZone); - if (temp->HasFacs()) { - zone->SetUlx(tempZone->GetUlx()); - zone->SetUly(tempZone->GetUly()); - zone->SetLrx(tempZone->GetLrx()); - zone->SetLry(tempZone->GetLry()); - } - } - } - - // make the bounding box a little bigger and lower so it's easier to edit - const int offSetUly = 100; - const int offSetLrx = 100; - const int offSetLry = 200; + zone->SetUlx(parent->GetFirst(NEUME)->GetFirst(NC)->GetFacsimileInterface()->GetZone()->GetUlx()); + zone->SetUly(oldSyl->GetFacsimileInterface()->GetZone()->GetUly()); + zone->SetLrx(parent->GetLast(NEUME)->GetLast(NC)->GetFacsimileInterface()->GetZone()->GetLrx()); + zone->SetLry(oldSyl->GetFacsimileInterface()->GetZone()->GetLry()); - zone->SetUly(zone->GetUly() + offSetUly); - zone->SetLrx(zone->GetLrx() + offSetLrx); - zone->SetLry(zone->GetLry() + offSetLry); + // Make bbox larger if it has less than 2 ncs + if (parent->GetChildCount(NC, 2) <= 2) { + zone->SetLrx(zone->GetLrx() + 50); + } assert(m_doc->GetFacsimile()); m_doc->GetFacsimile()->FindDescendantByType(SURFACE)->AddChild(zone); - FacsimileInterface *fi = vrv_cast((*syl).GetFacsimileInterface()); + FacsimileInterface *fi = syl->GetFacsimileInterface(); assert(fi); fi->AttachZone(zone); - - // syl->ResetFacsimile(); - // syl->SetFacs(zone->GetID()); } } - parent->ReorderByXPos(); - if (doubleParent == NULL) { - return false; - } - doubleParent->AddChild(parent); - - Layer *layer = vrv_cast(parent->GetFirstAncestor(LAYER)); - assert(layer); - layer->ReorderByXPos(); + secondParent->AddChild(parent); } // if there's only one full parent we just add the other elements to it @@ -2541,7 +2621,6 @@ bool EditorToolkitNeume::Group(std::string groupType, std::vector e (*it)->MoveItselfTo(parent); } } - parent->ReorderByXPos(); } // if there is more than 1 full parent we need to concat syl's @@ -2549,39 +2628,32 @@ bool EditorToolkitNeume::Group(std::string groupType, std::vector e // also in this case we need to make sure that the facsimile of the resulting syl is correct else { if (elementClass == NC) { - if (doubleParent) { - parent = new Neume(); - for (auto it = elements.begin(); it != elements.end(); ++it) { - if ((*it)->GetParent() != parent && !(*it)->Is(SYL)) { - (*it)->MoveItselfTo(parent); - parent->ReorderByXPos(); - } + parent = new Neume(); + for (auto it = elements.begin(); it != elements.end(); ++it) { + if ((*it)->GetParent() != parent && !(*it)->Is(SYL)) { + (*it)->MoveItselfTo(parent); } - doubleParent->AddChild(parent); } - - Layer *layer = dynamic_cast(parent->GetFirstAncestor(LAYER)); - if (!layer) { - LogError("Elements does not have Layer parent. This should not happen."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Elements does not have Layer parent."); - return false; - } - - layer->ReorderByXPos(); + secondParent->AddChild(parent); } else { - std::sort(fullParents.begin(), fullParents.end(), Object::sortByUlx); - Syllable *fullSyllable = new Syllable(); + parent = new Syllable(); Syl *fullSyl = NULL; + int ulx, uly, lrx, lry; // construct concatenated string of all the syls std::u32string fullString = U""; for (auto it = fullParents.begin(); it != fullParents.end(); ++it) { Syl *syl = dynamic_cast((*it)->FindDescendantByType(SYL)); - if (syl != NULL) { + if (syl != NULL && m_doc->GetType() == Facs) { + Zone *zone = dynamic_cast(syl->GetFacsimileInterface()->GetZone()); + if (fullSyl == NULL) { fullSyl = syl; + ulx = zone->GetUlx(); + uly = zone->GetUly(); + lrx = zone->GetLrx(); + lry = zone->GetLry(); } Text *text = dynamic_cast(syl->FindDescendantByType(TEXT)); @@ -2589,84 +2661,41 @@ bool EditorToolkitNeume::Group(std::string groupType, std::vector e std::u32string currentString = text->GetText(); fullString = fullString + currentString; } + + ulx = zone->GetUlx() < ulx ? zone->GetUlx() : ulx; + uly = zone->GetUly() < uly ? zone->GetUly() : uly; + lrx = zone->GetLrx() > lrx ? zone->GetLrx() : lrx; + lry = zone->GetLry() > lry ? zone->GetLry() : lry; } } - // find the new boundingbox comprising all of the text - int ulx = -1, uly = -1, lrx = -1, lry = -1; - for (auto it = fullParents.begin(); it != fullParents.end(); ++it) { - Object *par = vrv_cast(*it); - assert(par); - Syl *descSyl = vrv_cast(par->FindDescendantByType(SYL)); - assert(descSyl); - // FacsimileInterface *facsInter = dynamic_cast - // ((*it)->FindDescendantByType(SYL)->GetFacsimileInterface()); - if (descSyl != NULL) { - FacsimileInterface *facsInter - = dynamic_cast(descSyl->GetFacsimileInterface()); - - if (facsInter != NULL) { - if (ulx == -1 || ulx > facsInter->GetDrawingX()) { - ulx = facsInter->GetDrawingX(); - } - - if (lrx < facsInter->GetWidth() + facsInter->GetDrawingX()) { - lrx = facsInter->GetWidth() + facsInter->GetDrawingX(); - } - - if (uly == -1 || uly > facsInter->GetDrawingY()) { - uly = facsInter->GetDrawingY(); - } - if (lry < facsInter->GetHeight() + facsInter->GetDrawingY()) { - lry = facsInter->GetHeight() + facsInter->GetDrawingY(); - } - } - } - } - assert(fullSyl); - Text *text = vrv_cast(fullSyl->FindDescendantByType(TEXT)); - assert(text); - text->SetText(fullString); - assert(fullSyllable); - fullSyllable->AddChild(fullSyl); - // Move elements to the new group syllable for (auto it = elements.begin(); it != elements.end(); ++it) { - if ((*it)->GetParent() != fullSyllable && !(*it)->Is(SYL)) { - (*it)->MoveItselfTo(fullSyllable); + if ((*it)->GetParent() != parent && !(*it)->Is(SYL)) { + (*it)->MoveItselfTo(parent); } } - if (doubleParent == NULL) { - LogError("No second level parent!"); - return false; - } - doubleParent->AddChild(fullSyllable); - Layer *layer = vrv_cast(fullSyllable->GetFirstAncestor(LAYER)); - assert(layer); - if (ulx >= 0 && uly >= 0 && lrx >= 0 && lry >= 0) { - FacsimileInterface *facsInter = vrv_cast(fullSyl->GetFacsimileInterface()); - assert(facsInter); - Zone *zone = vrv_cast(facsInter->GetZone()); - assert(zone); - assert(ulx >= 0); + Text *fullText = dynamic_cast(fullSyl->FindDescendantByType(TEXT)); + fullText->SetText(fullString); + parent->AddChild(fullSyl); + + if (m_doc->GetType() == Facs) { + Zone *zone = dynamic_cast(fullSyl->GetFacsimileInterface()->GetZone()); zone->SetUlx(ulx); - assert(uly >= 0); zone->SetUly(uly); - assert(lrx >= 0); zone->SetLrx(lrx); - assert(lry >= 0); zone->SetLry(lry); } - layer->ReorderByXPos(); - parent = fullSyllable; + + secondParent->AddChild(parent); } } // change the pitch of any pitched elements whose clef may have changed assert(newClef); ListOfObjects pitchedChildren; - if (sortedSyllables.size()) { - for (auto it = sortedSyllables.begin(); it != sortedSyllables.end(); ++it) { + if (syllables.size()) { + for (auto it = syllables.begin(); it != syllables.end(); ++it) { Syllable *syllable = dynamic_cast(*it); if (clefsBefore[syllable] != newClef) { syllable->FindAllDescendantsByComparison(&pitchedChildren, &pitchComp); @@ -2682,11 +2711,7 @@ bool EditorToolkitNeume::Group(std::string groupType, std::vector e Object *obj = (*it).first; obj->ClearRelinquishedChildren(); if (obj->GetChildCount() == 0) { - if (doubleParent == NULL) { - LogError("No second level parent!"); - return false; - } - doubleParent->DeleteChild(obj); + secondParent->DeleteChild(obj); } else if (obj->GetChildCount() == (obj->GetChildCount(SYL) + obj->GetChildCount(DIVLINE) + obj->GetChildCount(ACCID) @@ -2697,30 +2722,25 @@ bool EditorToolkitNeume::Group(std::string groupType, std::vector e } while ((leftover = obj->FindDescendantByType(DIVLINE)) != NULL) { leftover->MoveItselfTo(parent); - parent->ReorderByXPos(); obj->ClearRelinquishedChildren(); } while ((leftover = obj->FindDescendantByType(ACCID)) != NULL) { leftover->MoveItselfTo(parent); - parent->ReorderByXPos(); obj->ClearRelinquishedChildren(); } while ((leftover = obj->FindDescendantByType(CLEF)) != NULL) { leftover->MoveItselfTo(parent); - parent->ReorderByXPos(); obj->ClearRelinquishedChildren(); } - if (doubleParent == NULL) { - LogError("No second level parent!"); - return false; - } - doubleParent->DeleteChild(obj); + secondParent->DeleteChild(obj); } } - m_infoObject.import("uuid", parent->GetID()); - m_infoObject.import("status", status); - m_infoObject.import("message", message); + secondParent->ReorderByXPos(); + + m_editInfo.import("uuid", parent->GetID()); + m_editInfo.import("status", status); + m_editInfo.import("message", message); return true; } @@ -2745,6 +2765,7 @@ bool EditorToolkitNeume::Ungroup(std::string groupType, std::vector int ligNum = 0; // for ligature in ungroupNcs int firstIsLig = false; bool firstIsSyl = false; + Zone *oldSylZone = NULL; Clef *oldClef = NULL; ClassIdComparison ac(CLEF); ListOfObjects syllables; // List of syllables used. groupType=neume only. @@ -2754,8 +2775,8 @@ bool EditorToolkitNeume::Ungroup(std::string groupType, std::vector // Check if you can get drawing page if (!m_doc->GetDrawingPage()) { LogError("Could not get the drawing page."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get the drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get the drawing page."); return false; } @@ -2817,8 +2838,8 @@ bool EditorToolkitNeume::Ungroup(std::string groupType, std::vector } else { LogError("Unable to toggle ligature within ungroup ncs!"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Unable to toggle ligature within ungroup ncs."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Unable to toggle ligature within ungroup ncs."); return false; } } @@ -2832,14 +2853,21 @@ bool EditorToolkitNeume::Ungroup(std::string groupType, std::vector sparent->ReorderByXPos(); fparent->ClearRelinquishedChildren(); fparent->ReorderByXPos(); + uuidArray << (*it); + it = elementIds.erase(it); + if (it == elementIds.end()) break; + el = m_doc->GetDrawingPage()->FindDescendantByID(*it); } - continue; } if (elementIds.begin() == it || firstIsSyl) { // if the element is a syl we want it to stay attached to the first element // we'll still need to initialize all the parents, thus the bool if (el->Is(SYL)) { firstIsSyl = true; + oldSylZone = dynamic_cast(el->GetFacsimileInterface()->GetZone()); + if (oldSylZone) { + oldSylZone->SetLrx(oldSylZone->GetUlx() + 100); + } continue; } else if (groupType == "nc") { @@ -2847,7 +2875,6 @@ bool EditorToolkitNeume::Ungroup(std::string groupType, std::vector Nc *nc = dynamic_cast(el); assert(nc); if (nc->HasLigated() && nc->GetLigated() == BOOLEAN_true) { - // ligNum++; firstIsLig = true; } @@ -2875,12 +2902,17 @@ bool EditorToolkitNeume::Ungroup(std::string groupType, std::vector if (oldClef == NULL) { oldClef = dynamic_cast(sparent)->GetCurrentClef(); } + + // Get orginal syl zone + if (!oldSylZone) { + oldSylZone = dynamic_cast(currentParent->GetFirst(SYL)->GetFacsimileInterface()->GetZone()); + } } else { LogError("Invalid groupType for ungrouping"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Invalid groupType for ungrouping."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Invalid groupType for ungrouping."); return false; } } @@ -2888,19 +2920,15 @@ bool EditorToolkitNeume::Ungroup(std::string groupType, std::vector // if the element is a syl then we want to keep it attached to the first node if (el->Is(SYL)) { + if (oldSylZone) { + oldSylZone->SetLrx(oldSylZone->GetUlx() + 100); + } continue; } - // if (el->Is(DIVLINE) || el->Is(ACCID)) { - // el->MoveItselfTo(sparent); - // fparent->ClearRelinquishedChildren(); - // continue; - // } - if (groupType == "nc") { Nc *nc = dynamic_cast(el); assert(nc); - // if (nc->HasLigated()) continue; if (firstIsLig) { // if 1st is ligature, neglect 2nd, go to the next nc @@ -2935,70 +2963,26 @@ bool EditorToolkitNeume::Ungroup(std::string groupType, std::vector if (m_doc->GetType() == Facs) { Zone *zone = new Zone(); - // Use syllable parent positions if possible - FacsimileInterface *syllableFi = NULL; - if (syl->GetFirstAncestor(SYLLABLE)->GetFacsimileInterface()->HasFacs()) { - syllableFi = syl->GetFirstAncestor(SYLLABLE)->GetFacsimileInterface(); - Zone *tempZone = dynamic_cast(syllableFi->GetZone()); - zone->SetUlx(tempZone->GetUlx()); - zone->SetUly(tempZone->GetUly()); - zone->SetLrx(tempZone->GetLrx()); - zone->SetLry(tempZone->GetLry()); - } - // otherwise get a boundingbox that comprises all the neumes in the syllable - else { - ListOfObjects children; - InterfaceComparison comp(INTERFACE_FACSIMILE); - syl->GetFirstAncestor(SYLLABLE)->FindAllDescendantsByComparison(&children, &comp); - for (auto iter2 = children.begin(); iter2 != children.end(); ++iter2) { - FacsimileInterface *temp = (*iter2)->GetFacsimileInterface(); - assert(temp); - Zone *tempZone = vrv_cast(temp->GetZone()); - assert(tempZone); - if (temp->HasFacs()) { - if (syllableFi == NULL) { - zone->SetUlx(tempZone->GetUlx()); - zone->SetUly(tempZone->GetUly()); - zone->SetLrx(tempZone->GetLrx()); - zone->SetLry(tempZone->GetLry()); - } - else { - if (tempZone->GetUlx() < zone->GetUlx()) { - zone->SetUlx(tempZone->GetUlx()); - } - if (tempZone->GetUly() < zone->GetUly()) { - zone->SetUly(tempZone->GetUly()); - } - if (tempZone->GetLrx() > zone->GetLrx()) { - zone->SetLrx(tempZone->GetLrx()); - } - if (tempZone->GetLry() > zone->GetLry()) { - zone->SetLry(tempZone->GetLry()); - } - } - } - } - } + zone->SetUlx(el->GetFirst(NC)->GetFacsimileInterface()->GetZone()->GetUlx()); + zone->SetUly(oldSylZone->GetUly()); + zone->SetLrx(el->GetLast(NC)->GetFacsimileInterface()->GetZone()->GetLrx()); + zone->SetLry(oldSylZone->GetLry()); - // make the bounding box a little bigger and lower so it's easier to edit - zone->SetUly(zone->GetUly() + 100); - zone->SetLrx(zone->GetLrx() + 100); - zone->SetLry(zone->GetLry() + 200); + // Make bbox larger if it has less than 2 ncs + if (newParent->GetChildCount(NC, 2) <= 2) { + zone->SetLrx(zone->GetLrx() + 50); + } assert(m_doc->GetFacsimile()); m_doc->GetFacsimile()->FindDescendantByType(SURFACE)->AddChild(zone); FacsimileInterface *fi = syl->GetFacsimileInterface(); assert(fi); fi->AttachZone(zone); - - // syl->ResetFacsimile(); - // syl->SetFacs(zone->GetID()); } } if (ligNum != 1) { // if not 1st nc in ligature, add child - uuidArray << newParent->GetID(); sparent->AddChild(newParent); @@ -3030,9 +3014,9 @@ bool EditorToolkitNeume::Ungroup(std::string groupType, std::vector } } - m_infoObject.import("status", "OK"); - m_infoObject.import("message", ""); - m_infoObject.import("uuid", uuidArray); + m_editInfo.import("status", "OK"); + m_editInfo.import("message", ""); + m_editInfo.import("uuid", uuidArray); return true; } @@ -3041,8 +3025,8 @@ bool EditorToolkitNeume::SplitNeume(std::string neumeId, std::string ncId) // Check if you can get drawing page if (!m_doc->GetDrawingPage()) { LogError("Could not get the drawing page."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get the drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get the drawing page."); return false; } @@ -3064,8 +3048,8 @@ bool EditorToolkitNeume::SplitNeume(std::string neumeId, std::string ncId) int nLen = fparent->GetChildCount(); if (nLen == 0) { LogError("The selected neume has no children."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "The selected neume has no children."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "The selected neume has no children."); return false; } @@ -3073,8 +3057,8 @@ bool EditorToolkitNeume::SplitNeume(std::string neumeId, std::string ncId) int fIdx = fparent->GetChildIndex(elNc); if (fIdx == -1) { LogError("The selected neume component is not a child of the selected neume."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "The selected neume component is not a child of the selected neume."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "The selected neume component is not a child of the selected neume."); return false; } // if click on a ligature, ncId point to the second nc in the ligature, thus minus 1 @@ -3108,9 +3092,9 @@ bool EditorToolkitNeume::SplitNeume(std::string neumeId, std::string ncId) // insert newParent to sparent sparent->InsertAfter(fparent, newParent); - m_infoObject.import("status", "OK"); - m_infoObject.import("message", ""); - m_infoObject.import("uuid", uuidArray); + m_editInfo.import("status", "OK"); + m_editInfo.import("message", ""); + m_editInfo.import("uuid", uuidArray); return true; } @@ -3119,15 +3103,15 @@ bool EditorToolkitNeume::ChangeGroup(std::string elementId, std::string contour) // Check if you can get drawing page if (!m_doc->GetDrawingPage()) { LogError("Could not get the drawing page."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get the drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get the drawing page."); return false; } Neume *el = dynamic_cast(m_doc->GetDrawingPage()->FindDescendantByID(elementId)); if (el == NULL) { LogError("Unable to find neume with id %s", elementId.c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Unable to find neume with id " + elementId + "."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Unable to find neume with id " + elementId + "."); return false; } Nc *firstChild = NULL; @@ -3191,8 +3175,8 @@ bool EditorToolkitNeume::ChangeGroup(std::string elementId, std::string contour) LogError("Unsupported character in contour."); delete newNc; delete zone; - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Unsupported character in contour."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Unsupported character in contour."); return false; } zone->SetUlx(newUlx); @@ -3215,9 +3199,9 @@ bool EditorToolkitNeume::ChangeGroup(std::string elementId, std::string contour) initialLry = newLry; prevNc = newNc; } - m_infoObject.import("uuid", el->GetID()); - m_infoObject.import("status", "OK"); - m_infoObject.import("message", ""); + m_editInfo.import("uuid", el->GetID()); + m_editInfo.import("status", "OK"); + m_editInfo.import("message", ""); return true; } @@ -3235,8 +3219,8 @@ bool EditorToolkitNeume::ToggleLigature(std::vector elementIds) // Check if you can get drawing page if (!m_doc->GetDrawingPage()) { LogError("Could not get the drawing page."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get the drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get the drawing page."); return false; } @@ -3250,8 +3234,8 @@ bool EditorToolkitNeume::ToggleLigature(std::vector elementIds) int secondIdx = secondNc->GetIdx(); if (std::abs(firstIdx - secondIdx) != 1) { LogError("The selected ncs are not adjacent."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "The selected ncs are not adjacent."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "The selected ncs are not adjacent."); return false; } @@ -3309,20 +3293,20 @@ bool EditorToolkitNeume::ToggleLigature(std::vector elementIds) } // else { // LogError("isLigature is invalid!"); - // m_infoObject.import("status", "FAILURE"); - // m_infoObject.import("message", "isLigature value '" + isLigature + "' is invalid."); + // m_editInfo.import("status", "FAILURE"); + // m_editInfo.import("message", "isLigature value '" + isLigature + "' is invalid."); // return false; // } if (success1 && success2 && m_doc->GetType() != Facs) { m_doc->PrepareData(); m_doc->GetDrawingPage()->LayOut(true); } - m_infoObject.import("status", "OK"); - m_infoObject.import("message", ""); + m_editInfo.import("status", "OK"); + m_editInfo.import("message", ""); if (!(success1 && success2)) { LogWarning("Unable to update ligature attribute"); - m_infoObject.import("message", "Unable to update ligature attribute."); - m_infoObject.import("status", "WARNING"); + m_editInfo.import("message", "Unable to update ligature attribute."); + m_editInfo.import("status", "WARNING"); } surface->AddChild(zone); @@ -3333,15 +3317,15 @@ bool EditorToolkitNeume::ChangeStaff(std::string elementId) { if (!m_doc->GetDrawingPage()) { LogError("Could not get the drawing page"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get the drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get the drawing page."); return false; } if (m_doc->GetType() != Facs) { LogWarning("Staff re-association is only available in facsimile mode."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Staff re-association is only available in facsimile mode."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Staff re-association is only available in facsimile mode."); return false; } @@ -3349,8 +3333,8 @@ bool EditorToolkitNeume::ChangeStaff(std::string elementId) assert(element); if (element == NULL) { LogError("No element exists with ID '%s'.", elementId.c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "No element exists with ID" + elementId + "."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "No element exists with ID" + elementId + "."); return false; } @@ -3358,8 +3342,8 @@ bool EditorToolkitNeume::ChangeStaff(std::string elementId) || element->Is(ACCID))) { LogError("Element is of type %s, but only Syllables, Custos, Clefs, Divlines, and Accids can change staves.", element->GetClassName().c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Element is of type " + element->GetClassName() + ", but only Syllables, Custos, Clefs, DivLines, and Accids can change staves."); return false; @@ -3380,8 +3364,8 @@ bool EditorToolkitNeume::ChangeStaff(std::string elementId) LayerElement *layerElement = dynamic_cast(element); if (!layerElement->GenerateZoneBounds(&ulx, &uly, &lrx, &lry)) { LogError("Couldn't generate bounding box for syllable."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Couldn't generate bounding box for syllable."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Couldn't generate bounding box for syllable."); return false; } comp.x = (lrx + ulx) / 2; @@ -3389,8 +3373,8 @@ bool EditorToolkitNeume::ChangeStaff(std::string elementId) } else { LogError("This element does not have a facsimile."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "This element does not have a facsimile."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "This element does not have a facsimile."); return false; } @@ -3403,8 +3387,8 @@ bool EditorToolkitNeume::ChangeStaff(std::string elementId) } else { LogError("Could not find any staves. This should not happen"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not find any staves. This should not happen"); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not find any staves. This should not happen"); return false; } @@ -3413,8 +3397,8 @@ bool EditorToolkitNeume::ChangeStaff(std::string elementId) assert(parent); if (parent == NULL || sParent == NULL) { LogError("Couldn't find staff parent of element with id '%s'", elementId.c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Couldn't find staff parent of element with id " + elementId); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Couldn't find staff parent of element with id " + elementId); return false; } @@ -3422,16 +3406,16 @@ bool EditorToolkitNeume::ChangeStaff(std::string elementId) assert(LAYER); if (layer == NULL) { LogError("Couldn't find layer child of staff. This should not happen"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Couldn't find layer child of staff. This should not happen"); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Couldn't find layer child of staff. This should not happen"); return false; } if (layer == parent) { - m_infoObject.import("status", "WARNING"); - m_infoObject.import("message", "Moving to the same staff as before."); - m_infoObject.import("elementId", elementId); - m_infoObject.import("newStaffId", staff->GetID()); + m_editInfo.import("status", "WARNING"); + m_editInfo.import("message", "Moving to the same staff as before."); + m_editInfo.import("elementId", elementId); + m_editInfo.import("newStaffId", staff->GetID()); return true; } @@ -3489,8 +3473,8 @@ bool EditorToolkitNeume::ChangeStaff(std::string elementId) // Adjust clefline if (!AdjustClefLineFromPosition(dynamic_cast(element), staff)) { LogError("Could not adjust clef line of %s", element->GetID().c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Failed to set clef line from facsimile."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Failed to set clef line from facsimile."); return false; } @@ -3518,19 +3502,19 @@ bool EditorToolkitNeume::ChangeStaff(std::string elementId) if (!(element->Is(ACCID) || element->Is(DIVLINE))) { if (!AdjustPitchFromPosition(element)) { LogError("Could not adjust pitch of %s", element->GetID().c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Failed to properly set pitch."); - m_infoObject.import("elementId", element->GetID()); - m_infoObject.import("newStaffId", staff->GetID()); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Failed to properly set pitch."); + m_editInfo.import("elementId", element->GetID()); + m_editInfo.import("newStaffId", staff->GetID()); return false; } } } - m_infoObject.import("status", "OK"); - m_infoObject.import("message", ""); - m_infoObject.import("elementId", elementId); - m_infoObject.import("newStaffId", staff->GetID()); + m_editInfo.import("status", "OK"); + m_editInfo.import("message", ""); + m_editInfo.import("elementId", elementId); + m_editInfo.import("newStaffId", staff->GetID()); return true; } @@ -3538,15 +3522,15 @@ bool EditorToolkitNeume::ChangeStaffTo(std::string elementId, std::string staffI { if (!m_doc->GetDrawingPage()) { LogError("Could not get the drawing page"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not get the drawing page."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not get the drawing page."); return false; } if (m_doc->GetType() != Facs) { LogWarning("Staff re-association is only available in facsimile mode."); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Staff re-association is only available in facsimile mode."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Staff re-association is only available in facsimile mode."); return false; } @@ -3554,16 +3538,16 @@ bool EditorToolkitNeume::ChangeStaffTo(std::string elementId, std::string staffI assert(element); if (element == NULL) { LogError("No element exists with ID '%s'.", elementId.c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "No element exists with ID" + elementId + "."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "No element exists with ID" + elementId + "."); return false; } if (!(element->Is(CLEF) || element->Is(DIVLINE) || element->Is(ACCID))) { LogError("Element is of type %s, but only Clefs, Divlines, and Accids can change to a specified staff.", element->GetClassName().c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Element is of type " + element->GetClassName() + ", but only Clefs, Divlines, and Accids can change to a specified staff."); return false; @@ -3573,8 +3557,8 @@ bool EditorToolkitNeume::ChangeStaffTo(std::string elementId, std::string staffI if (!staff) { LogError("Could not find any staves. This should not happen"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Could not find any staves. This should not happen"); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Could not find any staves. This should not happen"); return false; } @@ -3583,8 +3567,8 @@ bool EditorToolkitNeume::ChangeStaffTo(std::string elementId, std::string staffI assert(parent); if (parent == NULL || sParent == NULL) { LogError("Couldn't find staff parent of element with id '%s'", elementId.c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Couldn't find staff parent of element with id " + elementId); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Couldn't find staff parent of element with id " + elementId); return false; } @@ -3592,16 +3576,16 @@ bool EditorToolkitNeume::ChangeStaffTo(std::string elementId, std::string staffI assert(LAYER); if (layer == NULL) { LogError("Couldn't find layer child of staff. This should not happen"); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Couldn't find layer child of staff. This should not happen"); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Couldn't find layer child of staff. This should not happen"); return false; } if (layer == parent) { - m_infoObject.import("status", "WARNING"); - m_infoObject.import("message", "Moving to the same staff as before."); - m_infoObject.import("elementId", elementId); - m_infoObject.import("newStaffId", staff->GetID()); + m_editInfo.import("status", "WARNING"); + m_editInfo.import("message", "Moving to the same staff as before."); + m_editInfo.import("elementId", elementId); + m_editInfo.import("newStaffId", staff->GetID()); return true; } @@ -3659,8 +3643,8 @@ bool EditorToolkitNeume::ChangeStaffTo(std::string elementId, std::string staffI // Adjust clefline if (!AdjustClefLineFromPosition(dynamic_cast(element), staff)) { LogError("Could not adjust clef line of %s", element->GetID().c_str()); - m_infoObject.import("status", "FAILURE"); - m_infoObject.import("message", "Failed to set clef line from facsimile."); + m_editInfo.import("status", "FAILURE"); + m_editInfo.import("message", "Failed to set clef line from facsimile."); return false; } @@ -3687,10 +3671,10 @@ bool EditorToolkitNeume::ChangeStaffTo(std::string elementId, std::string staffI parent->ReorderByXPos(); } - m_infoObject.import("status", "OK"); - m_infoObject.import("message", ""); - m_infoObject.import("elementId", elementId); - m_infoObject.import("newStaffId", staff->GetID()); + m_editInfo.import("status", "OK"); + m_editInfo.import("message", ""); + m_editInfo.import("elementId", elementId); + m_editInfo.import("newStaffId", staff->GetID()); return true; } @@ -3776,6 +3760,13 @@ bool EditorToolkitNeume::ParseDisplaceClefAction(jsonxx::Object param, std::stri return true; } +bool EditorToolkitNeume::ParseMatchHeightAction(jsonxx::Object param, std::string *elementId) +{ + if (!param.has("elementId")) return false; + (*elementId) = param.get("elementId"); + return true; +} + bool EditorToolkitNeume::ParseMergeAction(jsonxx::Object param, std::vector *elementIds) { if (!param.has("elementIds")) return false; diff --git a/src/facsimilefunctor.cpp b/src/facsimilefunctor.cpp new file mode 100644 index 00000000000..73ec1ef23ca --- /dev/null +++ b/src/facsimilefunctor.cpp @@ -0,0 +1,229 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: facsimilefunctor.cpp +// Author: Laurent Pugin +// Created: 2023 +// Copyright (c) Authors and others. All rights reserved. +///////////////////////////////////////////////////////////////////////////// + +#include "facsimilefunctor.h" + +//---------------------------------------------------------------------------- + +#include "doc.h" +#include "layerelement.h" +#include "measure.h" +#include "page.h" +#include "pb.h" +#include "sb.h" +#include "staff.h" +#include "surface.h" +#include "system.h" +#include "vrv.h" +#include "zone.h" + +//---------------------------------------------------------------------------- + +namespace vrv { + +//---------------------------------------------------------------------------- +// SyncFromFacsimileFunctor +//---------------------------------------------------------------------------- + +SyncFromFacsimileFunctor::SyncFromFacsimileFunctor(Doc *doc) : Functor() +{ + m_doc = doc; + m_view.SetDoc(doc); + m_currentPage = NULL; + m_currentSystem = NULL; +} + +FunctorCode SyncFromFacsimileFunctor::VisitLayerElement(LayerElement *layerElement) +{ + if (!layerElement->Is({ NOTE, REST })) return FUNCTOR_CONTINUE; + + Zone *zone = layerElement->GetZone(); + assert(zone); + layerElement->m_drawingFacsX = m_view.ToLogicalX(zone->GetUlx() * DEFINITION_FACTOR); + + return FUNCTOR_CONTINUE; +} + +FunctorCode SyncFromFacsimileFunctor::VisitMeasure(Measure *measure) +{ + Zone *zone = measure->GetZone(); + assert(zone); + measure->m_drawingFacsX1 = m_view.ToLogicalX(zone->GetUlx() * DEFINITION_FACTOR); + measure->m_drawingFacsX2 = m_view.ToLogicalX(zone->GetLrx() * DEFINITION_FACTOR); + + return FUNCTOR_CONTINUE; +} + +FunctorCode SyncFromFacsimileFunctor::VisitPage(Page *page) +{ + m_currentPage = page; + m_doc->SetDrawingPage(m_currentPage->GetIdx()); + + return FUNCTOR_CONTINUE; +} + +FunctorCode SyncFromFacsimileFunctor::VisitPb(Pb *pb) +{ + // This would happen if we run the functor on data not converted to page-based + assert(m_currentPage); + + Zone *zone = pb->GetZone(); + assert(zone && zone->GetParent()); + Surface *surface = (zone->GetParent()->Is(SURFACE)) ? vrv_cast(zone->GetParent()) : NULL; + // Use the parent surface attributes if given + if (surface && surface->HasLrx() && surface->HasLry()) { + m_currentPage->m_pageHeight = surface->GetLry() * DEFINITION_FACTOR; + m_currentPage->m_pageWidth = surface->GetLrx() * DEFINITION_FACTOR; + } + // Fallback on zone + else { + m_currentPage->m_pageHeight = zone->GetLry() * DEFINITION_FACTOR; + m_currentPage->m_pageWidth = zone->GetLrx() * DEFINITION_FACTOR; + } + // Update the page size to have to View::ToLogicalX/Y valid + m_doc->UpdatePageDrawingSizes(); + + return FUNCTOR_CONTINUE; +} + +FunctorCode SyncFromFacsimileFunctor::VisitSb(Sb *sb) +{ + // This would happen if we run the functor on data not converted to page-based + assert(m_currentSystem); + + Zone *zone = sb->GetZone(); + assert(zone); + m_currentSystem->m_drawingFacsX = m_view.ToLogicalX(zone->GetUlx() * DEFINITION_FACTOR); + m_currentSystem->m_drawingFacsY = m_view.ToLogicalY(zone->GetUly() * DEFINITION_FACTOR); + + return FUNCTOR_CONTINUE; +} + +FunctorCode SyncFromFacsimileFunctor::VisitStaff(Staff *staff) +{ + Zone *zone = staff->GetZone(); + assert(zone); + staff->m_drawingFacsY = m_view.ToLogicalY(zone->GetUly() * DEFINITION_FACTOR); + + return FUNCTOR_CONTINUE; +} + +FunctorCode SyncFromFacsimileFunctor::VisitSystem(System *system) +{ + m_currentSystem = system; + + return FUNCTOR_CONTINUE; +} + +//---------------------------------------------------------------------------- +// SyncToFacsimileFunctor +//---------------------------------------------------------------------------- + +SyncToFacsimileFunctor::SyncToFacsimileFunctor(Doc *doc) : Functor() +{ + m_doc = doc; + m_view.SetDoc(doc); + m_surface = NULL; + m_currentPage = NULL; + m_currentSystem = NULL; + m_pageMarginTop = 0; + m_pageMarginLeft = 0; +} + +FunctorCode SyncToFacsimileFunctor::VisitLayerElement(LayerElement *layerElement) +{ + if (!layerElement->Is({ NOTE, REST })) return FUNCTOR_CONTINUE; + + Zone *zone = this->GetZone(layerElement, layerElement->GetClassName()); + zone->SetUlx(m_view.ToDeviceContextX(layerElement->GetDrawingX()) / DEFINITION_FACTOR + m_pageMarginLeft); + + return FUNCTOR_CONTINUE; +} + +FunctorCode SyncToFacsimileFunctor::VisitMeasure(Measure *measure) +{ + Zone *zone = this->GetZone(measure, measure->GetClassName()); + zone->SetUlx(m_view.ToDeviceContextX(measure->GetDrawingX()) / DEFINITION_FACTOR + m_pageMarginLeft); + zone->SetLrx( + m_view.ToDeviceContextX(measure->GetDrawingX() + measure->GetWidth()) / DEFINITION_FACTOR + m_pageMarginLeft); + + return FUNCTOR_CONTINUE; +} + +FunctorCode SyncToFacsimileFunctor::VisitPage(Page *page) +{ + m_currentPage = page; + m_doc->SetDrawingPage(page->GetIdx()); + page->LayOut(); + // + m_surface = new Surface(); + assert(m_doc->GetFacsimile()); + m_doc->GetFacsimile()->AddChild(m_surface); + m_surface->SetLrx(m_doc->m_drawingPageWidth / DEFINITION_FACTOR); + m_surface->SetLry(m_doc->m_drawingPageHeight / DEFINITION_FACTOR); + // Because the facsimile output zone positions include the margins, we will add them to each zone + m_pageMarginTop = m_doc->m_drawingPageMarginTop / DEFINITION_FACTOR; + m_pageMarginLeft = m_doc->m_drawingPageMarginLeft / DEFINITION_FACTOR; + + return FUNCTOR_CONTINUE; +} + +FunctorCode SyncToFacsimileFunctor::VisitPb(Pb *pb) +{ + Zone *zone = this->GetZone(pb, pb->GetClassName()); + // The Pb zone values are currently not used in SyncFromFacsimileFunctor because the + // page sizes are synced from the parent Surface and zone positions include margins + zone->SetUlx(m_pageMarginLeft); + zone->SetUly(m_pageMarginTop); + zone->SetLrx(m_doc->m_drawingPageContentWidth / DEFINITION_FACTOR + m_pageMarginLeft); + zone->SetLry(m_doc->m_drawingPageContentHeight / DEFINITION_FACTOR + m_pageMarginTop); + + return FUNCTOR_CONTINUE; +} + +FunctorCode SyncToFacsimileFunctor::VisitSb(Sb *sb) +{ + Zone *zone = this->GetZone(sb, sb->GetClassName()); + zone->SetUlx(m_view.ToDeviceContextX(m_currentSystem->GetDrawingX()) / DEFINITION_FACTOR + m_pageMarginLeft); + zone->SetUly(m_view.ToDeviceContextY(m_currentSystem->GetDrawingY()) / DEFINITION_FACTOR + m_pageMarginTop); + + return FUNCTOR_CONTINUE; +} + +FunctorCode SyncToFacsimileFunctor::VisitStaff(Staff *staff) +{ + Zone *zone = this->GetZone(staff, staff->GetClassName()); + zone->SetUly(m_view.ToDeviceContextY(staff->GetDrawingY()) / DEFINITION_FACTOR + m_pageMarginTop); + + return FUNCTOR_CONTINUE; +} + +FunctorCode SyncToFacsimileFunctor::VisitSystem(System *system) +{ + m_currentSystem = system; + + return FUNCTOR_CONTINUE; +} + +Zone *SyncToFacsimileFunctor::GetZone(FacsimileInterface *interface, std::string type) +{ + if (interface->GetZone()) { + // Here we should probably check if the zone is a child of m_surface + return interface->GetZone(); + } + else { + Zone *zone = new Zone(); + std::transform(type.begin(), type.end(), type.begin(), ::tolower); + zone->SetType(type); + m_surface->AddChild(zone); + interface->SetFacs(StringFormat("#%s", zone->GetID().c_str())); + interface->AttachZone(zone); + return interface->GetZone(); + } +} + +} // namespace vrv diff --git a/src/facsimileinterface.cpp b/src/facsimileinterface.cpp index 6ef3a50b88a..93dd965da22 100644 --- a/src/facsimileinterface.cpp +++ b/src/facsimileinterface.cpp @@ -15,6 +15,7 @@ #include "doc.h" #include "facsimile.h" +#include "preparedatafunctor.h" #include "surface.h" #include "syllable.h" #include "view.h" @@ -34,7 +35,9 @@ FacsimileInterface::~FacsimileInterface() {} void FacsimileInterface::Reset() { this->ResetFacsimile(); - this->AttachZone(NULL); + + m_zone = NULL; + m_surface = NULL; } int FacsimileInterface::GetDrawingX() const @@ -79,12 +82,7 @@ int FacsimileInterface::GetSurfaceY() const assert(m_zone); Surface *surface = vrv_cast(m_zone->GetFirstAncestor(SURFACE)); assert(surface); - if (surface->HasLry()) { - return surface->GetLry(); - } - else { - return surface->GetMaxY(); - } + return surface->GetMaxY(); } void FacsimileInterface::AttachZone(Zone *zone) @@ -104,4 +102,39 @@ void FacsimileInterface::AttachZone(Zone *zone) } } +//---------------------------------------------------------------------------- +// Interface pseudo functor (redirected) +//---------------------------------------------------------------------------- + +FunctorCode FacsimileInterface::InterfacePrepareFacsimile(PrepareFacsimileFunctor &functor, Object *object) +{ + assert(functor.GetFacsimile()); + Facsimile *facsimile = functor.GetFacsimile(); + std::string facsID = ExtractIDFragment(this->GetFacs()); + Object *facsDescendant = facsimile->FindDescendantByID(facsID); + if (!facsDescendant) { + LogWarning("Could not find @facs '%s' in facsimile element", facsID.c_str()); + return FUNCTOR_CONTINUE; + } + + if (facsDescendant->Is(ZONE)) { + m_zone = vrv_cast(facsDescendant); + assert(m_zone); + } + else if (facsDescendant->Is(SURFACE)) { + m_surface = vrv_cast(facsDescendant); + assert(m_surface); + } + + return FUNCTOR_CONTINUE; +} + +FunctorCode FacsimileInterface::InterfaceResetData(ResetDataFunctor &functor, Object *object) +{ + m_zone = NULL; + m_surface = NULL; + + return FUNCTOR_CONTINUE; +} + } // namespace vrv diff --git a/src/featureextractor.cpp b/src/featureextractor.cpp index bf9ccfc8cf7..fad1e07b47b 100644 --- a/src/featureextractor.cpp +++ b/src/featureextractor.cpp @@ -17,6 +17,7 @@ #include "chord.h" #include "doc.h" #include "gracegrp.h" +#include "iopae.h" #include "layer.h" #include "mdiv.h" #include "measure.h" @@ -70,10 +71,16 @@ void FeatureExtractor::Extract(const Object *object) } std::stringstream pitch; + std::stringstream pitchWithDuration; + + pitchWithDuration << PAEOutput::GetPaeDur(note->GetDur(), note->GetDots()); + data_OCTAVE oct = note->GetOct(); char octSign = (oct > 3) ? '\'' : ','; int signCount = (oct > 3) ? (oct - 3) : (4 - oct); - pitch << std::string(signCount, octSign); + std::string octaves = std::string(signCount, octSign); + pitch << octaves; + pitchWithDuration << octaves; const Accid *accid = vrv_cast(note->FindDescendantByType(ACCID)); if (accid) { @@ -98,13 +105,16 @@ void FeatureExtractor::Extract(const Object *object) default: accidStr = accidStrWritten; } pitch << accidStr; + pitchWithDuration << accidStr; } std::string pname = note->AttPitch::PitchnameToStr(note->GetPname()); std::transform(pname.begin(), pname.end(), pname.begin(), ::toupper); pitch << pname; + pitchWithDuration << pname; m_pitchesChromatic << pitch.str(); + m_pitchesChromaticWithDuration << pitchWithDuration.str(); m_pitchesDiatonic << pname; jsonxx::Array pitchesIds; pitchesIds << note->GetID(); @@ -145,6 +155,7 @@ void FeatureExtractor::ToJson(std::string &output) { jsonxx::Object o; + o << "pitchesChromaticWithDuration" << m_pitchesChromaticWithDuration; o << "pitchesChromatic" << m_pitchesChromatic; o << "pitchesDiatonic" << m_pitchesDiatonic; o << "pitchesIds" << m_pitchesIds; diff --git a/src/filereader.cpp b/src/filereader.cpp new file mode 100644 index 00000000000..2ae6dfc9659 --- /dev/null +++ b/src/filereader.cpp @@ -0,0 +1,126 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: filereader.cpp +// Author: Laurent Pugin +// Created: 31/01/2024 +// Copyright (c) Authors and others. All rights reserved. +///////////////////////////////////////////////////////////////////////////// + +#include "filereader.h" + +//---------------------------------------------------------------------------- + +#include + +//---------------------------------------------------------------------------- + +#include "vrv.h" + +//---------------------------------------------------------------------------- + +#include "zip_file.hpp" + +namespace vrv { + +//---------------------------------------------------------------------------- +// ZipFileReader +//---------------------------------------------------------------------------- + +ZipFileReader::ZipFileReader() +{ + m_file = NULL; + + this->Reset(); +} + +ZipFileReader::~ZipFileReader() +{ + this->Reset(); +} + +void ZipFileReader::Reset() +{ + if (m_file) { + delete m_file; + m_file = NULL; + } +} + +bool ZipFileReader::Load(const std::string &filename) +{ +#ifdef __EMSCRIPTEN__ + std::string data = filename; + // Remove the mimetype prefix if any + if (data.starts_with("data:")) { + data = data.substr(data.find("base64,") + 7); + } + std::vector bytes = Base64Decode(data); + return this->Load(bytes); +#else + std::ifstream fin(filename.c_str(), std::ios::in | std::ios::binary); + if (!fin.is_open()) { + LogError("File archive '%s' could not be opened.", filename.c_str()); + return false; + } + + fin.seekg(0, std::ios::end); + std::streamsize fileSize = (std::streamsize)fin.tellg(); + fin.clear(); + fin.seekg(0, std::wios::beg); + + std::vector bytes; + bytes.reserve(fileSize + 1); + + unsigned char buffer; + while (fin.read((char *)&buffer, sizeof(unsigned char))) { + bytes.push_back(buffer); + } + return this->Load(bytes); +#endif +} + +bool ZipFileReader::Load(const std::vector &bytes) +{ + this->Reset(); + + m_file = new miniz_cpp::zip_file(bytes); + + return true; +} + +std::list ZipFileReader::GetFileList() const +{ + assert(m_file); + + std::list list; + for (const miniz_cpp::zip_info &member : m_file->infolist()) { + list.push_back(member.filename); + } + return list; +} + +bool ZipFileReader::HasFile(const std::string &filename) +{ + assert(m_file); + + // Look for the file in the zip + const std::vector &fileInfoList = m_file->infolist(); + return std::any_of(fileInfoList.cbegin(), fileInfoList.cend(), + [&filename](const auto &info) { return info.filename == filename; }); +} + +std::string ZipFileReader::ReadTextFile(const std::string &filename) +{ + assert(m_file); + + // Look for the meta file in the zip + for (const miniz_cpp::zip_info &member : m_file->infolist()) { + if (member.filename == filename) { + return m_file->read(member.filename); + } + } + + LogError("No file '%s' to read found in the archive", filename.c_str()); + return ""; +} + +} // namespace vrv diff --git a/src/glyph.cpp b/src/glyph.cpp index e78b91c0d1f..2413bf0f8bc 100644 --- a/src/glyph.cpp +++ b/src/glyph.cpp @@ -11,6 +11,9 @@ #include #include +#include +#include +#include //---------------------------------------------------------------------------- @@ -144,4 +147,17 @@ const Point *Glyph::GetAnchor(SMuFLGlyphAnchor anchor) const return &m_anchors.at(anchor); } +std::string Glyph::GetXML() const +{ + if (!m_xml.empty()) { + return m_xml; + } + else { + std::ifstream fstream(m_path); + std::stringstream sstream; + sstream << fstream.rdbuf(); + return sstream.str(); + } +} + } // namespace vrv diff --git a/src/io.cpp b/src/iobase.cpp similarity index 95% rename from src/io.cpp rename to src/iobase.cpp index 87c27c38159..3071a1c5599 100644 --- a/src/io.cpp +++ b/src/iobase.cpp @@ -1,11 +1,11 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: io.cpp +// Name: iobase.cpp // Author: Laurent Pugin // Created: 2012 // Copyright (c) Laurent Pugin. All rights reserved. ///////////////////////////////////////////////////////////////////////////// -#include "io.h" +#include "iobase.h" //---------------------------------------------------------------------------- diff --git a/src/iomei.cpp b/src/iomei.cpp index aaa69f00c64..aa139f99077 100644 --- a/src/iomei.cpp +++ b/src/iomei.cpp @@ -1640,8 +1640,8 @@ void MEIOutput::WriteSystem(pugi::xml_node currentNode, System *system) currentNode.append_attribute("system.rightmar") = StringFormat("%d", system->m_systemRightMar / DEFINITION_FACTOR).c_str(); // y positions - if (system->m_yAbs != VRV_UNSET) { - currentNode.append_attribute("uly") = StringFormat("%d", system->m_yAbs / DEFINITION_FACTOR).c_str(); + if (system->m_drawingFacsY != VRV_UNSET) { + currentNode.append_attribute("uly") = StringFormat("%d", system->m_drawingFacsY / DEFINITION_FACTOR).c_str(); } system->WriteTyped(currentNode); } @@ -1698,6 +1698,7 @@ void MEIOutput::WritePb(pugi::xml_node currentNode, Pb *pb) assert(pb); this->WriteSystemElement(currentNode, pb); + this->WriteFacsimileInterface(currentNode, pb); pb->WriteNNumberLike(currentNode); } @@ -1706,6 +1707,7 @@ void MEIOutput::WriteSb(pugi::xml_node currentNode, Sb *sb) assert(sb); this->WriteSystemElement(currentNode, sb); + this->WriteFacsimileInterface(currentNode, sb); sb->WriteNNumberLike(currentNode); } @@ -1883,6 +1885,8 @@ void MEIOutput::WriteMeasure(pugi::xml_node currentNode, Measure *measure) assert(measure); this->WriteXmlId(currentNode, measure); + this->WriteFacsimileInterface(currentNode, measure); + measure->WriteBarring(currentNode); measure->WriteMeasureLog(currentNode); measure->WriteMeterConformanceBar(currentNode); @@ -1890,9 +1894,9 @@ void MEIOutput::WriteMeasure(pugi::xml_node currentNode, Measure *measure) measure->WritePointing(currentNode); measure->WriteTyped(currentNode); // For now we copy the adjusted value of coord.x1 and coord.x2 to xAbs and xAbs2 respectively - if ((measure->m_xAbs != VRV_UNSET) && (measure->m_xAbs2 != VRV_UNSET)) { - measure->SetCoordX1(measure->m_xAbs / DEFINITION_FACTOR); - measure->SetCoordX2(measure->m_xAbs2 / DEFINITION_FACTOR); + if ((measure->m_drawingFacsX1 != VRV_UNSET) && (measure->m_drawingFacsX2 != VRV_UNSET)) { + measure->SetCoordX1(measure->m_drawingFacsX1 / DEFINITION_FACTOR); + measure->SetCoordX2(measure->m_drawingFacsX2 / DEFINITION_FACTOR); measure->WriteCoordX1(currentNode); measure->WriteCoordX2(currentNode); } @@ -2216,14 +2220,14 @@ void MEIOutput::WriteStaff(pugi::xml_node currentNode, Staff *staff) assert(staff); this->WriteXmlId(currentNode, staff); - staff->WriteFacsimile(currentNode); + this->WriteFacsimileInterface(currentNode, staff); staff->WriteNInteger(currentNode); staff->WriteTyped(currentNode); staff->WriteVisibility(currentNode); // y position - if (staff->m_yAbs != VRV_UNSET) { - staff->SetCoordY1(staff->m_yAbs / DEFINITION_FACTOR); + if (staff->m_drawingFacsY != VRV_UNSET) { + staff->SetCoordY1(staff->m_drawingFacsY / DEFINITION_FACTOR); staff->WriteCoordY1(currentNode); } } @@ -2298,11 +2302,12 @@ void MEIOutput::WriteLayerElement(pugi::xml_node currentNode, LayerElement *elem assert(element); this->WriteXmlId(currentNode, element); + this->WriteFacsimileInterface(currentNode, element); this->WriteLinkingInterface(currentNode, element); element->WriteLabelled(currentNode); element->WriteTyped(currentNode); - if (element->m_xAbs != VRV_UNSET) { - element->SetCoordX1(element->m_xAbs / DEFINITION_FACTOR); + if (element->m_drawingFacsX != VRV_UNSET) { + element->SetCoordX1(element->m_drawingFacsX / DEFINITION_FACTOR); element->WriteCoordX1(currentNode); } } @@ -2320,7 +2325,6 @@ void MEIOutput::WriteAccid(pugi::xml_node currentNode, Accid *accid) } WriteLayerElement(currentNode, accid); - WriteFacsimileInterface(currentNode, accid); WritePositionInterface(currentNode, accid); accid->WriteAccidental(currentNode); accid->WriteAccidentalGes(currentNode); @@ -2433,7 +2437,6 @@ void MEIOutput::WriteClef(pugi::xml_node currentNode, Clef *clef) } this->WriteLayerElement(currentNode, clef); - this->WriteFacsimileInterface(currentNode, clef); clef->WriteClefLog(currentNode); clef->WriteClefShape(currentNode); clef->WriteColor(currentNode); @@ -2451,7 +2454,6 @@ void MEIOutput::WriteCustos(pugi::xml_node currentNode, Custos *custos) { assert(custos); - this->WriteFacsimileInterface(currentNode, custos); this->WritePitchInterface(currentNode, custos); this->WritePositionInterface(currentNode, custos); this->WriteLayerElement(currentNode, custos); @@ -2465,7 +2467,6 @@ void MEIOutput::WriteDivLine(pugi::xml_node currentNode, DivLine *divLine) assert(divLine); this->WriteLayerElement(currentNode, divLine); - this->WriteFacsimileInterface(currentNode, divLine); divLine->WriteDivLineLog(currentNode); divLine->WriteColor(currentNode); divLine->WriteVisibility(currentNode); @@ -2628,6 +2629,7 @@ void MEIOutput::WriteMeterSig(pugi::xml_node currentNode, MeterSig *meterSig) } this->WriteLayerElement(currentNode, meterSig); + meterSig->WriteColor(currentNode); meterSig->WriteEnclosingChars(currentNode); meterSig->WriteMeterSigLog(currentNode); meterSig->WriteMeterSigVis(currentNode); @@ -2698,7 +2700,6 @@ void MEIOutput::WriteNc(pugi::xml_node currentNode, Nc *nc) this->WriteLayerElement(currentNode, nc); this->WriteDurationInterface(currentNode, nc); - this->WriteFacsimileInterface(currentNode, nc); this->WritePitchInterface(currentNode, nc); this->WritePositionInterface(currentNode, nc); nc->WriteColor(currentNode); @@ -2711,7 +2712,6 @@ void MEIOutput::WriteNeume(pugi::xml_node currentNode, Neume *neume) assert(neume); this->WriteLayerElement(currentNode, neume); - this->WriteFacsimileInterface(currentNode, neume); neume->WriteColor(currentNode); } @@ -2830,7 +2830,6 @@ void MEIOutput::WriteSyl(pugi::xml_node currentNode, Syl *syl) assert(syl); this->WriteLayerElement(currentNode, syl); - this->WriteFacsimileInterface(currentNode, syl); syl->WriteLang(currentNode); syl->WriteTypography(currentNode); syl->WriteSylLog(currentNode); @@ -2878,6 +2877,7 @@ void MEIOutput::WriteSurface(pugi::xml_node currentNode, Surface *surface) assert(surface); this->WriteXmlId(currentNode, surface); surface->WriteCoordinated(currentNode); + surface->WriteCoordinatedUl(currentNode); surface->WriteTyped(currentNode); for (Object *child = surface->GetFirst(); child != NULL; child = surface->GetNext()) { @@ -2900,6 +2900,7 @@ void MEIOutput::WriteZone(pugi::xml_node currentNode, Zone *zone) assert(zone); this->WriteXmlId(currentNode, zone); zone->WriteCoordinated(currentNode); + zone->WriteCoordinatedUl(currentNode); zone->WriteTyped(currentNode); } @@ -3532,6 +3533,9 @@ bool MEIInput::IsAllowed(std::string element, Object *filterParent) else if (element == "clef") { return true; } + else if (element == "fTrem") { + return true; + } else if (element == "graceGrp") { return true; } @@ -3905,6 +3909,11 @@ bool MEIInput::ReadDoc(pugi::xml_node root) m_doc->m_drawingPageHeight = m_doc->GetFacsimile()->GetMaxY(); m_doc->m_drawingPageWidth = m_doc->GetFacsimile()->GetMaxX(); } + // Temporary solution to set the document type to Transcription when using + else if (m_doc->HasFacsimile() && !m_doc->GetFacsimile()->GetType().empty()) { + m_doc->SetType(StrToDocType(m_doc->GetFacsimile()->GetType())); + // Facsimile data eventually sync with Doc::SyncFromFacsimileDoc below + } if (facsimile.next_sibling("facsimile")) { LogWarning("Only first is processed"); } @@ -4141,7 +4150,7 @@ bool MEIInput::ReadPage(Object *parent, pugi::xml_node page) Page *vrvPage = new Page(); this->SetMeiID(page, vrvPage); - if ((m_doc->GetType() == Transcription) && (m_meiversion == meiVersion_MEIVERSION_2013)) { + if (m_doc->IsTranscription() && (m_meiversion == meiVersion_MEIVERSION_2013)) { UpgradePageTo_3_0_0(vrvPage, m_doc); } @@ -4180,12 +4189,12 @@ bool MEIInput::ReadPage(Object *parent, pugi::xml_node page) parent->AddChild(vrvPage); bool success = this->ReadPageChildren(vrvPage, page); - if (success && (m_doc->GetType() == Transcription) && (vrvPage->GetPPUFactor() != 1.0)) { + if (success && m_doc->IsTranscription() && (vrvPage->GetPPUFactor() != 1.0)) { ApplyPPUFactorFunctor applyPPUFactor; vrvPage->Process(applyPPUFactor); } - if ((m_doc->GetType() == Transcription) && (m_meiversion == meiVersion_MEIVERSION_2013)) { + if (m_doc->IsTranscription() && (m_meiversion == meiVersion_MEIVERSION_2013)) { UpgradePageTo_5_0(vrvPage); } @@ -4472,6 +4481,13 @@ bool MEIInput::ReadSectionChildren(Object *parent, pugi::xml_node parentNode) LogWarning("Unsupported '<%s>' within
", current.name()); } } + + // New for blank files in neume notation + if (!unmeasured && parent->Is(SECTION) && (m_doc->m_notationType == NOTATIONTYPE_neume)) { + unmeasured = new Measure(false); + m_doc->SetMensuralMusicOnly(true); + parent->AddChild(unmeasured); + } return success; } @@ -4521,6 +4537,7 @@ bool MEIInput::ReadPb(Object *parent, pugi::xml_node pb) Pb *vrvPb = new Pb(); this->ReadSystemElement(pb, vrvPb); + this->ReadFacsimileInterface(pb, vrvPb); vrvPb->ReadNNumberLike(pb); @@ -4537,6 +4554,7 @@ bool MEIInput::ReadSb(Object *parent, pugi::xml_node sb) Sb *vrvSb = new Sb(); this->ReadSystemElement(sb, vrvSb); + this->ReadFacsimileInterface(sb, vrvSb); vrvSb->ReadNNumberLike(sb); @@ -4563,8 +4581,8 @@ bool MEIInput::ReadSystem(Object *parent, pugi::xml_node system) vrvSystem->m_systemRightMar = system.attribute("system.rightmar").as_int(); system.remove_attribute("system.rightmar"); } - if (system.attribute("uly") && (m_doc->GetType() == Transcription)) { - vrvSystem->m_yAbs = system.attribute("uly").as_int() * DEFINITION_FACTOR; + if (system.attribute("uly") && m_doc->IsTranscription()) { + vrvSystem->m_drawingFacsY = system.attribute("uly").as_int() * DEFINITION_FACTOR; system.remove_attribute("uly"); } @@ -4612,7 +4630,7 @@ bool MEIInput::ReadSystemChildren(Object *parent, pugi::xml_node parentNode) assert(system); unmeasured = new Measure(false); m_doc->SetMensuralMusicOnly(true); - if ((m_doc->GetType() == Transcription) && (m_meiversion == meiVersion_MEIVERSION_2013)) { + if (m_doc->IsTranscription() && (m_meiversion == meiVersion_MEIVERSION_2013)) { UpgradeMeasureTo_3_0_0(unmeasured, system); } system->AddChild(unmeasured); @@ -5340,6 +5358,7 @@ bool MEIInput::ReadMeasure(Object *parent, pugi::xml_node measure) m_doc->SetMensuralMusicOnly(false); } this->SetMeiID(measure, vrvMeasure); + this->ReadFacsimileInterface(measure, vrvMeasure); vrvMeasure->ReadBarring(measure); vrvMeasure->ReadMeasureLog(measure); @@ -5348,15 +5367,15 @@ bool MEIInput::ReadMeasure(Object *parent, pugi::xml_node measure) vrvMeasure->ReadPointing(measure); vrvMeasure->ReadTyped(measure); - if ((m_doc->GetType() == Transcription) && (m_meiversion == meiVersion_MEIVERSION_2013)) { + if (m_doc->IsTranscription() && (m_meiversion == meiVersion_MEIVERSION_2013)) { UpgradeMeasureTo_5_0(measure); } - if (measure.attribute("coord.x1") && measure.attribute("coord.x2") && (m_doc->GetType() == Transcription)) { + if (measure.attribute("coord.x1") && measure.attribute("coord.x2") && m_doc->IsTranscription()) { vrvMeasure->ReadCoordX1(measure); vrvMeasure->ReadCoordX2(measure); - vrvMeasure->m_xAbs = vrvMeasure->GetCoordX1() * DEFINITION_FACTOR; - vrvMeasure->m_xAbs2 = vrvMeasure->GetCoordX2() * DEFINITION_FACTOR; + vrvMeasure->m_drawingFacsX1 = vrvMeasure->GetCoordX1() * DEFINITION_FACTOR; + vrvMeasure->m_drawingFacsX2 = vrvMeasure->GetCoordX2() * DEFINITION_FACTOR; } parent->AddChild(vrvMeasure); @@ -6036,19 +6055,19 @@ bool MEIInput::ReadStaff(Object *parent, pugi::xml_node staff) { Staff *vrvStaff = new Staff(); this->SetMeiID(staff, vrvStaff); + this->ReadFacsimileInterface(staff, vrvStaff); - vrvStaff->ReadFacsimile(staff); vrvStaff->ReadNInteger(staff); vrvStaff->ReadTyped(staff); vrvStaff->ReadVisibility(staff); - if ((m_doc->GetType() == Transcription) && (m_meiversion == meiVersion_MEIVERSION_2013)) { + if (m_doc->IsTranscription() && (m_meiversion == meiVersion_MEIVERSION_2013)) { UpgradeStaffTo_5_0(staff); } - if (staff.attribute("coord.y1") && (m_doc->GetType() == Transcription)) { + if (staff.attribute("coord.y1") && m_doc->IsTranscription()) { vrvStaff->ReadCoordY1(staff); - vrvStaff->m_yAbs = vrvStaff->GetCoordY1() * DEFINITION_FACTOR; + vrvStaff->m_drawingFacsY = vrvStaff->GetCoordY1() * DEFINITION_FACTOR; } if (!vrvStaff->HasN() || (vrvStaff->GetN() == 0)) { @@ -6277,17 +6296,18 @@ bool MEIInput::ReadLayerChildren(Object *parent, pugi::xml_node parentNode, Obje bool MEIInput::ReadLayerElement(pugi::xml_node element, LayerElement *object) { this->SetMeiID(element, object); + this->ReadFacsimileInterface(element, object); this->ReadLinkingInterface(element, object); object->ReadLabelled(element); object->ReadTyped(element); - if ((m_doc->GetType() == Transcription) && (m_meiversion == meiVersion_MEIVERSION_2013)) { + if (m_doc->IsTranscription() && (m_meiversion == meiVersion_MEIVERSION_2013)) { UpgradeLayerElementTo_5_0(element); } - if (element.attribute("coord.x1") && (m_doc->GetType() == Transcription)) { + if (element.attribute("coord.x1") && m_doc->IsTranscription()) { object->ReadCoordX1(element); - object->m_xAbs = object->GetCoordX1() * DEFINITION_FACTOR; + object->m_drawingFacsX = object->GetCoordX1() * DEFINITION_FACTOR; } return true; @@ -6299,7 +6319,6 @@ bool MEIInput::ReadAccid(Object *parent, pugi::xml_node accid) this->ReadLayerElement(accid, vrvAccid); ReadPositionInterface(accid, vrvAccid); - ReadFacsimileInterface(accid, vrvAccid); vrvAccid->ReadAccidental(accid); vrvAccid->ReadAccidentalGes(accid); vrvAccid->ReadAccidLog(accid); @@ -6444,7 +6463,6 @@ bool MEIInput::ReadClef(Object *parent, pugi::xml_node clef) { Clef *vrvClef = new Clef(); this->ReadLayerElement(clef, vrvClef); - this->ReadFacsimileInterface(clef, vrvClef); vrvClef->ReadClefLog(clef); vrvClef->ReadClefShape(clef); @@ -6456,6 +6474,7 @@ bool MEIInput::ReadClef(Object *parent, pugi::xml_node clef) vrvClef->ReadOctave(clef); vrvClef->ReadOctaveDisplacement(clef); vrvClef->ReadStaffIdent(clef); + vrvClef->ReadTypography(clef); vrvClef->ReadVisibility(clef); parent->AddChild(vrvClef); @@ -6502,7 +6521,6 @@ bool MEIInput::ReadDivLine(Object *parent, pugi::xml_node divLine) DivLine *vrvDivLine = new DivLine(); this->ReadLayerElement(divLine, vrvDivLine); - this->ReadFacsimileInterface(divLine, vrvDivLine); vrvDivLine->ReadDivLineLog(divLine); vrvDivLine->ReadColor(divLine); vrvDivLine->ReadVisibility(divLine); @@ -6672,9 +6690,12 @@ bool MEIInput::ReadMeterSig(Object *parent, pugi::xml_node meterSig) this->UpgradeMeterSigTo_5_0(meterSig, vrvMeterSig); } + vrvMeterSig->ReadColor(meterSig); vrvMeterSig->ReadEnclosingChars(meterSig); + vrvMeterSig->ReadExtSymNames(meterSig); vrvMeterSig->ReadMeterSigLog(meterSig); vrvMeterSig->ReadMeterSigVis(meterSig); + vrvMeterSig->ReadTypography(meterSig); vrvMeterSig->ReadVisibility(meterSig); parent->AddChild(vrvMeterSig); @@ -6785,7 +6806,6 @@ bool MEIInput::ReadNc(Object *parent, pugi::xml_node nc) this->ReadLayerElement(nc, vrvNc); this->ReadDurationInterface(nc, vrvNc); - this->ReadFacsimileInterface(nc, vrvNc); this->ReadPitchInterface(nc, vrvNc); this->ReadPositionInterface(nc, vrvNc); vrvNc->ReadColor(nc); @@ -6800,7 +6820,6 @@ bool MEIInput::ReadNeume(Object *parent, pugi::xml_node neume) { Neume *vrvNeume = new Neume(); this->ReadLayerElement(neume, vrvNeume); - this->ReadFacsimileInterface(neume, vrvNeume); vrvNeume->ReadColor(neume); @@ -6940,7 +6959,7 @@ bool MEIInput::ReadStem(Object *parent, pugi::xml_node stem) bool MEIInput::ReadSyl(Object *parent, pugi::xml_node syl) { // Add empty text node for empty syl element for invisible bbox in neume notation - if (!syl.first_child() && (m_doc->GetType() == Facs) && (m_doc->m_notationType == NOTATIONTYPE_neume)) { + if (!syl.first_child() && m_doc->IsFacs() && (m_doc->m_notationType == NOTATIONTYPE_neume)) { syl.text().set(""); } Syl *vrvSyl = new Syl(); @@ -8460,14 +8479,14 @@ void MEIInput::UpgradeMeasureTo_3_0_0(Measure *measure, System *system) assert(system); assert(!measure->IsMeasuredMusic()); - if (system->m_yAbs == VRV_UNSET) return; + if (system->m_drawingFacsY == VRV_UNSET) return; if (system->m_systemRightMar == VRV_UNSET) return; if (system->m_systemRightMar == VRV_UNSET) return; Page *page = vrv_cast(system->GetFirstAncestor(PAGE)); assert(page); - measure->m_xAbs = system->m_systemLeftMar; - measure->m_xAbs2 = page->m_pageWidth - system->m_systemRightMar; + measure->m_drawingFacsX1 = system->m_systemLeftMar; + measure->m_drawingFacsX2 = page->m_pageWidth - system->m_systemRightMar; } void MEIInput::UpgradePageTo_3_0_0(Page *page, Doc *doc) @@ -8501,6 +8520,7 @@ bool MEIInput::ReadSurface(Facsimile *parent, pugi::xml_node surface) Surface *vrvSurface = new Surface(); this->SetMeiID(surface, vrvSurface); vrvSurface->ReadCoordinated(surface); + vrvSurface->ReadCoordinatedUl(surface); vrvSurface->ReadTyped(surface); for (pugi::xml_node child = surface.first_child(); child; child = child.next_sibling()) { @@ -8524,6 +8544,7 @@ bool MEIInput::ReadZone(Surface *parent, pugi::xml_node zone) Zone *vrvZone = new Zone(); this->SetMeiID(zone, vrvZone); vrvZone->ReadCoordinated(zone); + vrvZone->ReadCoordinatedUl(zone); vrvZone->ReadTyped(zone); parent->AddChild(vrvZone); return true; diff --git a/src/iomusxml.cpp b/src/iomusxml.cpp index 7fa4fb31d3c..667e4d99a68 100644 --- a/src/iomusxml.cpp +++ b/src/iomusxml.cpp @@ -3148,7 +3148,7 @@ void MusicXmlInput::ReadMusicXmlNote( } // ties - ReadMusicXmlTies(notations.node(), layer, note, measureNum); + ReadMusicXmlTies(node, layer, note, measureNum); // articulation std::vector artics; @@ -3625,6 +3625,10 @@ void MusicXmlInput::ReadMusicXmlNote( TabGrp *tabGrp = vrv_cast(element); tabGrp->SetBreaksec(breakSec); } + if (element->Is(REST)) { + Rest *rest = vrv_cast(element); + rest->SetBreaksec(breakSec); + } } else { if (IsInStack(BEAM, layer)) { @@ -3695,8 +3699,11 @@ void MusicXmlInput::ReadMusicXmlPrint(pugi::xml_node node, Section *section) assert(section); if (node.attribute("new-page").as_bool()) { - Pb *pb = new Pb(); - section->AddChild(pb); + const int pageBreaks = node.attribute("blank-page").as_int() + 1; + for (int i = 0; i < pageBreaks; ++i) { + Pb *pb = new Pb(); + section->AddChild(pb); + } } if (node.attribute("new-system").as_bool()) { @@ -3827,7 +3834,9 @@ void MusicXmlInput::ReadMusicXmlBeamStart(const pugi::xml_node &node, const pugi void MusicXmlInput::ReadMusicXmlTies( const pugi::xml_node &node, Layer *layer, Note *note, const std::string &measureNum) { - for (pugi::xml_node xmlTie : node.children("tied")) { + pugi::xpath_node_set xmlTies = node.select_nodes("notations/tied"); + for (pugi::xpath_node_set::const_iterator it = xmlTies.begin(); it != xmlTies.end(); ++it) { + pugi::xml_node xmlTie = (*it).node(); std::string tieType = xmlTie.attribute("type").as_string(); if (tieType.empty()) { diff --git a/src/iopae.cpp b/src/iopae.cpp index 888dfb0b62d..1e844d31a06 100644 --- a/src/iopae.cpp +++ b/src/iopae.cpp @@ -401,7 +401,12 @@ void PAEOutput::WriteMRest(MRest *mRest) if (m_skip) return; + bool fermata = this->HasFermata(mRest); + if (fermata) m_streamStringOutput << "("; + m_streamStringOutput << "="; + + if (fermata) m_streamStringOutput << ")"; } void PAEOutput::WriteMultiRest(MultiRest *multiRest) @@ -454,9 +459,7 @@ void PAEOutput::WriteNote(Note *note) m_streamStringOutput << accid; } - PointingToComparison pointingToComparisonFermata(FERMATA, note); - Fermata *fermata - = vrv_cast(m_currentMeasure->FindDescendantByComparison(&pointingToComparisonFermata, 1)); + bool fermata = this->HasFermata(note); if (fermata) m_streamStringOutput << "("; std::string pname = note->AttPitch::PitchnameToStr(note->GetPname()); @@ -481,7 +484,13 @@ void PAEOutput::WriteRest(Rest *rest) if (m_skip) return; this->WriteDur(rest); + + bool fermata = this->HasFermata(rest); + if (fermata) m_streamStringOutput << "("; + m_streamStringOutput << "-"; + + if (fermata) m_streamStringOutput << ")"; } void PAEOutput::WriteSpace(Space *space) @@ -533,6 +542,38 @@ void PAEOutput::WriteTupletEnd(Tuplet *tuplet) m_streamStringOutput << ";" << tuplet->GetNum() << ")"; } +std::string PAEOutput::GetPaeDur(data_DURATION ndur, int ndots) +{ + std::string dur; + switch (ndur) { + case (DURATION_long): dur = "0"; break; + case (DURATION_breve): dur = "9"; break; + case (DURATION_1): dur = "1"; break; + case (DURATION_2): dur = "2"; break; + case (DURATION_4): dur = "4"; break; + case (DURATION_8): dur = "8"; break; + case (DURATION_16): dur = "6"; break; + case (DURATION_32): dur = "3"; break; + case (DURATION_64): dur = "5"; break; + case (DURATION_128): dur = "7"; break; + case (DURATION_maxima): dur = "0"; break; + case (DURATION_longa): dur = "0"; break; + case (DURATION_brevis): dur = "9"; break; + case (DURATION_semibrevis): dur = "1"; break; + case (DURATION_minima): dur = "2"; break; + case (DURATION_semiminima): dur = "4"; break; + case (DURATION_fusa): dur = "8"; break; + case (DURATION_semifusa): dur = "6"; break; + default: LogWarning("Unsupported duration"); dur = "4"; + } + + if (ndots > 0) { + dur += std::string(ndots, '.'); + } + + return dur; +} + void PAEOutput::WriteDur(DurationInterface *interface) { assert(interface); @@ -541,30 +582,7 @@ void PAEOutput::WriteDur(DurationInterface *interface) if ((interface->GetDur() != m_currentDur) || (ndots != m_currentDots)) { m_currentDur = interface->GetDur(); m_currentDots = ndots; - std::string dur; - switch (m_currentDur) { - case (DURATION_long): dur = "0"; break; - case (DURATION_breve): dur = "9"; break; - case (DURATION_1): dur = "1"; break; - case (DURATION_2): dur = "2"; break; - case (DURATION_4): dur = "4"; break; - case (DURATION_8): dur = "8"; break; - case (DURATION_16): dur = "6"; break; - case (DURATION_32): dur = "3"; break; - case (DURATION_64): dur = "5"; break; - case (DURATION_128): dur = "7"; break; - case (DURATION_maxima): dur = "0"; break; - case (DURATION_longa): dur = "0"; break; - case (DURATION_brevis): dur = "9"; break; - case (DURATION_semibrevis): dur = "1"; break; - case (DURATION_minima): dur = "2"; break; - case (DURATION_semiminima): dur = "4"; break; - case (DURATION_fusa): dur = "8"; break; - case (DURATION_semifusa): dur = "6"; break; - default: LogWarning("Unsupported duration"); dur = "4"; - } - m_streamStringOutput << dur; - m_streamStringOutput << std::string(m_currentDots, '.'); + m_streamStringOutput << PAEOutput::GetPaeDur(interface->GetDur(), m_currentDots); } } @@ -583,6 +601,14 @@ void PAEOutput::WriteGrace(AttGraced *attGraced) } } +bool PAEOutput::HasFermata(Object *object) +{ + PointingToComparison pointingToComparisonFermata(FERMATA, object); + Fermata *fermata + = vrv_cast(m_currentMeasure->FindDescendantByComparison(&pointingToComparisonFermata, 1)); + return (fermata); +} + //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- #ifdef USE_PAE_OLD_PARSER @@ -3438,6 +3464,13 @@ bool PAEInput::ConvertRepeatedFigure() figure.push_back(*token); } } + // We are starting a new figure to be repeated + else if (token->m_char == '!') { + token->m_char = 0; + figureToken = &(*token); + figure.clear(); + status = pae::FIGURE_START; + } // We have completed a figure and will be repeating it else if (status == pae::FIGURE_END || status == pae::FIGURE_REPEAT) { // Repeat the figure. That is simply add it to the map @@ -3452,8 +3485,8 @@ bool PAEInput::ConvertRepeatedFigure() --token; status = pae::FIGURE_REPEAT; } - // End of repetitions - this includes the end of a measure - else { + // End of repetitions - this does not include the end of a measure + else if (!this->Was(*token, pae::MEASURE)) { // Make sure we repeated the figure at least once (is this too pedantic?) if (status == pae::FIGURE_END) { LogPAE(ERR_010_REP_UNUSED, *figureToken); @@ -3464,13 +3497,6 @@ bool PAEInput::ConvertRepeatedFigure() figure.clear(); } } - // We are starting a new figure to be repeated - else if (token->m_char == '!') { - token->m_char = 0; - figureToken = &(*token); - figure.clear(); - status = pae::FIGURE_START; - } // We should not have a repeat sign not after a figure end else if (token->m_char == 'f') { LogPAE(ERR_011_REP_NO_FIGURE, *token); diff --git a/src/layer.cpp b/src/layer.cpp index a2ea2da1ba4..a05d48903f1 100644 --- a/src/layer.cpp +++ b/src/layer.cpp @@ -273,7 +273,7 @@ const Clef *Layer::GetClefFacs(const LayerElement *test) const { const Doc *doc = vrv_cast(this->GetFirstAncestor(DOC)); assert(doc); - if (doc->GetType() == Facs) { + if (doc->IsFacs()) { ListOfConstObjects clefs; ClassIdComparison ac(CLEF); doc->FindAllDescendantsBetween(&clefs, &ac, doc->GetFirst(CLEF), test); diff --git a/src/layerelement.cpp b/src/layerelement.cpp index 589bc8e4dd9..459d4c505df 100644 --- a/src/layerelement.cpp +++ b/src/layerelement.cpp @@ -127,7 +127,7 @@ void LayerElement::Reset() this->ResetLabelled(); this->ResetTyped(); - m_xAbs = VRV_UNSET; + m_drawingFacsX = VRV_UNSET; m_drawingYRel = 0; m_drawingXRel = 0; m_drawingCueSize = false; @@ -400,13 +400,13 @@ int LayerElement::GetDrawingX() const if (this->HasFacs()) { const Doc *doc = vrv_cast(this->GetFirstAncestor(DOC)); assert(doc); - if (doc->GetType() == Facs) { + if (doc->IsFacs()) { return FacsimileInterface::GetDrawingX(); } } - // Since m_xAbs is the left position, we adjust the XRel accordingly in AdjustXRelForTranscription - if (m_xAbs != VRV_UNSET) return m_xAbs + this->GetDrawingXRel(); + // Since m_drawingFacsX is the left position, we adjust the XRel accordingly in AdjustXRelForTranscription + if (m_drawingFacsX != VRV_UNSET) return m_drawingFacsX + this->GetDrawingXRel(); if (m_cachedDrawingX != VRV_UNSET) return m_cachedDrawingX; @@ -448,7 +448,7 @@ int LayerElement::GetDrawingY() const if (this->HasFacs()) { const Doc *doc = vrv_cast(this->GetFirstAncestor(DOC)); assert(doc); - if (doc->GetType() == Facs) { + if (doc->IsFacs()) { return FacsimileInterface::GetDrawingY(); } } @@ -532,7 +532,7 @@ void LayerElement::CacheYRel(bool restore) void LayerElement::CenterDrawingX() { - if (m_xAbs != VRV_UNSET) return; + if (m_drawingFacsX != VRV_UNSET) return; this->SetDrawingXRel(0); diff --git a/src/measure.cpp b/src/measure.cpp index b6cff691a5a..7b566400378 100644 --- a/src/measure.cpp +++ b/src/measure.cpp @@ -56,6 +56,7 @@ static const ClassRegistrar s_factory("measure", MEASURE); Measure::Measure(bool measureMusic, int logMeasureNb) : Object(MEASURE, "measure-") + , FacsimileInterface() , AttBarring() , AttCoordX1() , AttCoordX2() @@ -73,6 +74,7 @@ Measure::Measure(bool measureMusic, int logMeasureNb) this->RegisterAttClass(ATT_NNUMBERLIKE); this->RegisterAttClass(ATT_POINTING); this->RegisterAttClass(ATT_TYPED); + this->RegisterInterface(FacsimileInterface::GetAttClasses(), FacsimileInterface::IsInterface()); m_measuredMusic = measureMusic; @@ -121,6 +123,7 @@ void Measure::CloneReset() void Measure::Reset() { Object::Reset(); + FacsimileInterface::Reset(); this->ResetCoordX1(); this->ResetCoordX2(); this->ResetMeasureLog(); @@ -134,8 +137,8 @@ void Measure::Reset() this->ResetDrawingScoreDef(); m_timestampAligner.Reset(); - m_xAbs = VRV_UNSET; - m_xAbs2 = VRV_UNSET; + m_drawingFacsX1 = VRV_UNSET; + m_drawingFacsX2 = VRV_UNSET; m_drawingXRel = 0; m_cachedXRel = VRV_UNSET; @@ -147,8 +150,8 @@ void Measure::Reset() m_leftBarLine.SetForm(this->GetLeft()); if (!m_measuredMusic) { - m_xAbs = VRV_UNSET; - m_xAbs2 = VRV_UNSET; + m_drawingFacsX1 = VRV_UNSET; + m_drawingFacsX2 = VRV_UNSET; } m_drawingEnding = NULL; @@ -213,12 +216,12 @@ int Measure::GetDrawingX() const if (!this->IsMeasuredMusic()) { const System *system = vrv_cast(this->GetFirstAncestor(SYSTEM)); assert(system); - if (system->m_yAbs != VRV_UNSET) { + if (system->m_drawingFacsY != VRV_UNSET) { return (system->m_systemLeftMar); } } - if (m_xAbs != VRV_UNSET) return m_xAbs; + if (m_drawingFacsX1 != VRV_UNSET) return m_drawingFacsX1; if (m_cachedDrawingX != VRV_UNSET) return m_cachedDrawingX; @@ -353,7 +356,7 @@ int Measure::GetWidth() const if (!this->IsMeasuredMusic()) { const System *system = vrv_cast(this->GetFirstAncestor(SYSTEM)); assert(system); - if (system->m_yAbs != VRV_UNSET) { + if (system->m_drawingFacsY != VRV_UNSET) { const Page *page = vrv_cast(system->GetFirstAncestor(PAGE)); assert(page); // xAbs2 = page->m_pageWidth - system->m_systemRightMar; @@ -361,7 +364,7 @@ int Measure::GetWidth() const } } - if (m_xAbs2 != VRV_UNSET) return (m_xAbs2 - m_xAbs); + if (m_drawingFacsX2 != VRV_UNSET) return (m_drawingFacsX2 - m_drawingFacsX1); assert(m_measureAligner.GetRightAlignment()); return m_measureAligner.GetRightAlignment()->GetXRel(); @@ -493,8 +496,9 @@ const Staff *Measure::GetBottomVisibleStaff() const int Measure::EnclosesTime(int time) const { int repeat = 1; - double timeDuration - = m_measureAligner.GetRightAlignment()->GetTime() * DURATION_4 / DUR_MAX * 60.0 / m_currentTempo * 1000.0 + 0.5; + double timeDuration = m_measureAligner.GetRightAlignment()->GetTime() * static_cast(DURATION_4) / DUR_MAX + * 60.0 / m_currentTempo * 1000.0 + + 0.5; std::vector::const_iterator iter; for (iter = m_realTimeOffsetMilliseconds.begin(); iter != m_realTimeOffsetMilliseconds.end(); ++iter) { if ((time >= *iter) && (time <= *iter + timeDuration)) return repeat; diff --git a/src/metersig.cpp b/src/metersig.cpp index e27022f9d79..f3df8054d23 100644 --- a/src/metersig.cpp +++ b/src/metersig.cpp @@ -16,6 +16,7 @@ //---------------------------------------------------------------------------- #include "functor.h" +#include "resources.h" #include "scoredefinterface.h" #include "smufl.h" #include "vrv.h" @@ -29,11 +30,21 @@ namespace vrv { static const ClassRegistrar s_factory("meterSig", METERSIG); MeterSig::MeterSig() - : LayerElement(METERSIG, "msig-"), AttEnclosingChars(), AttMeterSigLog(), AttMeterSigVis(), AttVisibility() + : LayerElement(METERSIG, "msig-") + , AttColor() + , AttEnclosingChars() + , AttExtSymNames() + , AttMeterSigLog() + , AttMeterSigVis() + , AttTypography() + , AttVisibility() { + this->RegisterAttClass(ATT_COLOR); this->RegisterAttClass(ATT_ENCLOSINGCHARS); + this->RegisterAttClass(ATT_EXTSYMNAMES); this->RegisterAttClass(ATT_METERSIGLOG); this->RegisterAttClass(ATT_METERSIGVIS); + this->RegisterAttClass(ATT_TYPOGRAPHY); this->RegisterAttClass(ATT_VISIBILITY); this->Reset(); @@ -44,9 +55,12 @@ MeterSig::~MeterSig() {} void MeterSig::Reset() { LayerElement::Reset(); + this->ResetColor(); this->ResetEnclosingChars(); + this->ResetExtSymNames(); this->ResetMeterSigLog(); this->ResetMeterSigVis(); + this->ResetTypography(); this->ResetVisibility(); } @@ -97,6 +111,19 @@ int MeterSig::GetTotalCount() const char32_t MeterSig::GetSymbolGlyph() const { char32_t glyph = 0; + const Resources *resources = this->GetDocResources(); + + // If there is glyph.num, prioritize it + if (this->HasGlyphNum()) { + glyph = this->GetGlyphNum(); + if (NULL != resources->GetGlyph(glyph)) return glyph; + } + // If there is glyph.name (second priority) + else if (this->HasGlyphName()) { + glyph = resources->GetGlyphCode(this->GetGlyphName()); + if (NULL != resources->GetGlyph(glyph)) return glyph; + } + switch (this->GetSym()) { case METERSIGN_common: glyph = SMUFL_E08A_timeSigCommon; break; case METERSIGN_cut: glyph = SMUFL_E08B_timeSigCutCommon; break; diff --git a/src/midi/Binasc.cpp b/src/midi/Binasc.cpp index f49aa563201..446dc03b9b0 100644 --- a/src/midi/Binasc.cpp +++ b/src/midi/Binasc.cpp @@ -11,12 +11,37 @@ #include "Binasc.h" +#include #include -#include namespace smf { +const char* Binasc::GMinstrument[128] = { + "acoustic grand piano", "bright acoustic piano", "electric grand piano", "honky-tonk piano", "rhodes piano", "chorused piano", + "harpsichord", "clavinet", "celeste", "glockenspiel", "music box", "vibraphone", + "marimba", "xylophone", "tubular bells", "dulcimer", "hammond organ", "percussive organ", + "rock organ", "church organ", "reed organ", "accordion", "harmonica", "tango accordion", + "nylon guitar", "steel guitar", "jazz guitar", "clean guitar", "muted guitar", "overdriven guitar", + "distortion guitar", "guitar harmonics", "acoustic bass", "fingered electric bass", "picked electric bass", "fretless bass", + "slap bass 1", "slap bass 2", "synth bass 1", "synth bass 2", "violin", "viola", + "cello", "contrabass", "tremolo strings", "pizzcato strings", "orchestral harp", "timpani", + "string ensemble 1", "string ensemble 2", "synth strings 1", "synth strings 1", "choir aahs", "voice oohs", + "synth voices", "orchestra hit", "trumpet", "trombone", "tuba", "muted trumpet", + "frenc horn", "brass section", "syn brass 1", "synth brass 2", "soprano sax", "alto sax", + "tenor sax", "baritone sax", "oboe", "english horn", "bassoon", "clarinet", + "piccolo", "flute", "recorder", "pan flute", "bottle blow", "shakuhachi", + "whistle", "ocarina", "square wave", "saw wave", "calliope lead", "chiffer lead", + "charang lead", "voice lead", "fifths lead", "brass lead", "newage pad", "warm pad", + "polysyn pad", "choir pad", "bowed pad", "metallic pad", "halo pad", "sweep pad", + "rain", "soundtrack", "crystal", "atmosphere", "brightness", "goblins", + "echoes", "sci-fi", "sitar", "banjo", "shamisen", "koto", + "kalimba", "bagpipes", "fiddle", "shanai", "tinkle bell", "agogo", + "steel drums", "woodblock", "taiko drum", "melodoc tom", "synth drum", "reverse cymbal", + "guitar fret noise", "breath noise", "seashore", "bird tweet", "telephone ring", "helicopter", + "applause", "gunshot" +}; + ////////////////////////////// // // Binasc::Binasc -- Constructor: set the default option values. @@ -717,7 +742,9 @@ int Binasc::readMidiEvent(std::ostream& out, std::istream& infile, output << " '" << std::dec << (int)byte1; if (m_commentsQ) { output << "\t"; - comment += "patch-change"; + comment += "patch-change ("; + comment += GMinstrument[byte1 & 0x7f]; + comment += ")"; } break; case 0xD0: // channel pressure: 1 bytes diff --git a/src/midi/MidiEvent.cpp b/src/midi/MidiEvent.cpp index 945e3c532eb..0cf590d8c97 100644 --- a/src/midi/MidiEvent.cpp +++ b/src/midi/MidiEvent.cpp @@ -13,7 +13,7 @@ #include "MidiEvent.h" -#include +#include namespace smf { @@ -278,6 +278,20 @@ double MidiEvent::getDurationInSeconds(void) const { } + +////////////////////////////// +// +// operator<<(MidiMessage) -- Print tick value followed by MIDI bytes for event. +// The tick value will be either relative or absolute depending on the state +// of the MidiFile object containing it. +// + +std::ostream& operator<<(std::ostream& out, MidiEvent& event) { + out << event.tick << '(' << static_cast(event) << ')'; + return out; +} + + } // end namespace smf diff --git a/src/midi/MidiEventList.cpp b/src/midi/MidiEventList.cpp index 52749c5d837..f38fefbc2ca 100644 --- a/src/midi/MidiEventList.cpp +++ b/src/midi/MidiEventList.cpp @@ -10,15 +10,14 @@ // Description: A class which stores a MidiEvents for a MidiFile track. // - #include "MidiEventList.h" -#include #include +#include #include #include +#include -#include namespace smf { @@ -54,8 +53,8 @@ MidiEventList::MidiEventList(const MidiEventList& other) { // MidiEventList::MidiEventList(MidiEventList&& other) { - list = std::move(other.list); - other.list.clear(); + list = std::move(other.list); + other.list.clear(); } @@ -124,12 +123,12 @@ const MidiEvent& MidiEventList::last(void) const { // MidiEvent& MidiEventList::getEvent(int index) { - return *list[index]; + return *list[index]; } const MidiEvent& MidiEventList::getEvent(int index) const { - return *list[index]; + return *list[index]; } @@ -141,10 +140,10 @@ const MidiEvent& MidiEventList::getEvent(int index) const { // void MidiEventList::clear(void) { - for (int i=0; i<(int)list.size(); i++) { - if (list[i] != NULL) { - delete list[i]; - list[i] = NULL; + for (auto& item : list) { + if (item != NULL) { + delete item; + item = NULL; } } list.resize(0); @@ -245,10 +244,10 @@ int MidiEventList::push_back(MidiEvent& event) { void MidiEventList::removeEmpties(void) { int count = 0; - for (int i=0; i<(int)list.size(); i++) { - if (list[i]->empty()) { - delete list[i]; - list[i] = NULL; + for (auto& item : list) { + if (item->empty()) { + delete item; + item = NULL; count++; } } @@ -257,9 +256,9 @@ void MidiEventList::removeEmpties(void) { } std::vector newlist; newlist.reserve(list.size() - count); - for (int i=0; i<(int)list.size(); i++) { - if (list[i]) { - newlist.push_back(list[i]); + for (auto& item : list) { + if (item) { + newlist.push_back(item); } } list.swap(newlist); @@ -292,8 +291,8 @@ int MidiEventList::linkNotePairs(void) { // dimension 3: List of active note-ons or note-offs. std::vector>> noteons; noteons.resize(16); - for (int i=0; i<(int)noteons.size(); i++) { - noteons[i].resize(128); + for (auto& noteon : noteons) { + noteon.resize(128); } // Controller linking: The following General MIDI controller numbers are @@ -433,7 +432,7 @@ void MidiEventList::clearLinks(void) { ////////////////////////////// // -// MidiEventList::clearSequence -- Remove any seqence serial numbers from +// MidiEventList::clearSequence -- Remove any sequence serial numbers from // MidiEvents in the list. This will cause the default ordering by // sortTracks() to be used, in which case the ordering of MidiEvents // occurring at the same tick may switch their ordering. @@ -454,7 +453,7 @@ void MidiEventList::clearSequence(void) { // to preseve the order of MIDI messages in a track when they occur // at the same tick time. Particularly for use with joinTracks() // or sortTracks(). markSequence will be done automatically when -// a MIDI file is read, in case the ordering of events occuring at +// a MIDI file is read, in case the ordering of events occurring at // the same time is important. Use clearSequence() to use the // default sorting behavior of sortTracks() when events occur at the // same time. Returns the next serial number that has not yet been diff --git a/src/midi/MidiFile.cpp b/src/midi/MidiFile.cpp index fa1534d79df..55956c8ce79 100644 --- a/src/midi/MidiFile.cpp +++ b/src/midi/MidiFile.cpp @@ -15,14 +15,14 @@ #include "MidiFile.h" #include "Binasc.h" -#include -#include -#include -#include +#include #include -#include +#include +#include #include -#include +#include +#include +#include namespace smf { @@ -71,21 +71,21 @@ const char* MidiFile::GMinstrument[128] = { ////////////////////////////// // -// MidiFile::MidiFile -- Constuctor. +// MidiFile::MidiFile -- Constructor. // MidiFile::MidiFile(void) { m_events.resize(1); - for (int i=0; i<(int)m_events.size(); i++) { - m_events[i] = new MidiEventList; + for (auto &event : m_events) { + event = new MidiEventList; } } MidiFile::MidiFile(const std::string& filename) { m_events.resize(1); - for (int i=0; i<(int)m_events.size(); i++) { - m_events[i] = new MidiEventList; + for (auto &event : m_events) { + event = new MidiEventList; } read(filename); } @@ -93,8 +93,8 @@ MidiFile::MidiFile(const std::string& filename) { MidiFile::MidiFile(std::istream& input) { m_events.resize(1); - for (int i=0; i<(int)m_events.size(); i++) { - m_events[i] = new MidiEventList; + for (auto &event : m_events) { + event = new MidiEventList; } read(input); } @@ -507,7 +507,7 @@ bool MidiFile::readSmf(std::istream& input) { m_events[i]->clear(); // Read MIDI events in the track, which are pairs of VLV values - // and then the bytes for the MIDI message. Running status messags + // and then the bytes for the MIDI message. Running status messages // will be filled in with their implicit command byte. // The timestamps are converted from delta ticks to absolute ticks, // with the absticks variable accumulating the VLV tick values. @@ -597,7 +597,7 @@ bool MidiFile::write(std::ostream& out) { shortdata = static_cast(getNumTracks()); writeBigEndianUShort(out, shortdata); - // 5. write out the number of ticks per quarternote. (avoiding SMTPE for now) + // 5. write out the number of ticks per quarternote. (avoiding SMPTE for now) shortdata = static_cast(getTicksPerQuarterNote()); writeBigEndianUShort(out, shortdata); @@ -774,7 +774,7 @@ bool MidiFile::writeHex(std::ostream& out, int width) { int wordcount = 1; int linewidth = width >= 0 ? width : 25; for (int i=0; iremoveEmpties(); + for (auto &event : m_events) { + event->removeEmpties(); } } @@ -954,7 +954,7 @@ void MidiFile::removeEmpties(void) { // a track when they occur at the same tick time. Particularly // for use with joinTracks() or sortTracks(). markSequence will // be done automatically when a MIDI file is read, in case the -// ordering of m_events occuring at the same time is important. +// ordering of m_events occurring at the same time is important. // Use clearSequence() to use the default sorting behavior of // sortTracks(). // @@ -982,7 +982,7 @@ void MidiFile::markSequence(int track, int sequence) { ////////////////////////////// // -// MidiFile::clearSequence -- Remove any seqence serial numbers from +// MidiFile::clearSequence -- Remove any sequence serial numbers from // MidiEvents in the MidiFile. This will cause the default ordering by // sortTracks() to be used, in which case the ordering of MidiEvents // occurring at the same tick may switch their ordering. @@ -1311,7 +1311,7 @@ void MidiFile::deltaTicks(void) { // absolute time, which means that the time field // in the MidiEvent struct represents the exact tick // time to play the event rather than the time since -// the last event to wait untill playing the current +// the last event to wait until playing the current // event. // @@ -1422,7 +1422,7 @@ int MidiFile::getFileDurationInTicks(void) { // in units of quarter notes. If the MidiFile is in delta tick mode, // then temporarily got into absolute tick mode to do the calculations. // Note that this is expensive, so you should normally call this function -// while in aboslute tick (default) mode. +// while in absolute tick (default) mode. // double MidiFile::getFileDurationInQuarters(void) { @@ -1434,7 +1434,7 @@ double MidiFile::getFileDurationInQuarters(void) { ////////////////////////////// // // MidiFile::getFileDurationInSeconds -- returns the duration of the -// logest track in the file. The tracks must be sorted before +// longest track in the file. The tracks must be sorted before // calling this function, since this function assumes that the // last MidiEvent in the track has the highest timestamp. // The file state can be in delta ticks since this function @@ -1906,7 +1906,7 @@ MidiEvent* MidiFile::addTimeSignature(int aTrack, int aTick, int top, int bottom // // MidiFile::addCompoundTimeSignature -- Add a time signature meta message // (meta #0x58), where the clocksPerClick parameter is set to three -// eighth notes for compount meters such as 6/8 which represents +// eighth notes for compound meters such as 6/8 which represents // two beats per measure. // // Default values: @@ -2347,7 +2347,7 @@ int MidiFile::getTicksPerQuarterNote(void) const { // setting for 25 frames a second with 40 subframes // which means one tick per millisecond. When SMPTE is // being used, there is no real concept of the quarter note, - // so presume 60 bpm as a simiplification here. + // so presume 60 bpm as a simplification here. // return 1000; } return m_ticksPerQuarterNote; @@ -2696,7 +2696,7 @@ double MidiFile::linearSecondInterpolationAtTick(int ticktime) { // MidiFile::buildTimeMap -- build an index of the absolute tick values // found in a MIDI file, and their corresponding time values in // seconds, taking into consideration tempo change messages. If no -// tempo messages are given (or untill they are given, then the +// tempo messages are given (or until they are given, then the // tempo is set to 120 beats per minute). If SMPTE time code is // used, then ticks are actually time values. So don't build // a time map for SMPTE ticks, and just calculate the time in @@ -2956,15 +2956,17 @@ int MidiFile::extractMidiData(std::istream& input, std::vector& array, ulong MidiFile::readVLValue(std::istream& input) { uchar b[5] = {0}; - for (int i=0; i<5; i++) { - b[i] = readByte(input); - if (!status()) { return m_rwstatus; } - if (b[i] < 0x80) { - break; - } - } + for (uchar &item : b) { + item = readByte(input); + if (!status()) { + return m_rwstatus; + } + if (item < 0x80) { + break; + } + } - return unpackVLV(b[0], b[1], b[2], b[3], b[4]); + return unpackVLV(b[0], b[1], b[2], b[3], b[4]); } @@ -3005,7 +3007,7 @@ ulong MidiFile::unpackVLV(uchar a, uchar b, uchar c, uchar d, uchar e) { // // MidiFile::writeVLValue -- write a number to the midifile // as a variable length value which segments a file into 7-bit -// values and adds a contination bit to each. Maximum size of input +// values and adds a continuation bit to each. Maximum size of input // aValue is 0x0FFFffff. // @@ -3392,7 +3394,7 @@ std::string MidiFile::base64Encode(const std::string& input) { output.reserve(((input.size()/3) + (input.size() % 3 > 0)) * 4); int vala = 0; int valb = -6; - for (unsigned char c : input) { + for (uchar c : input) { vala = (vala << 8) + c; valb += 8; while (valb >=0) { @@ -3423,7 +3425,7 @@ std::string MidiFile::base64Decode(const std::string& input) { std::string output; int vala = 0; int valb = -8; - for (unsigned char c : input) { + for (uchar c : input) { if (c == '=') { break; } else if (MidiFile::decodeLookup[c] == -1) { diff --git a/src/midi/MidiMessage.cpp b/src/midi/MidiMessage.cpp index 7b9eb33c289..5b19a36eb8a 100644 --- a/src/midi/MidiMessage.cpp +++ b/src/midi/MidiMessage.cpp @@ -14,10 +14,10 @@ #include "MidiMessage.h" #include +#include +#include #include #include -#include - namespace smf { @@ -315,11 +315,13 @@ bool MidiMessage::isMetaMessage(void) const { // bool MidiMessage::isNoteOff(void) const { - if (size() != 3) { + const MidiMessage& message = *this; + const vector& chars = message; + if (message.size() != 3) { return false; - } else if (((*this)[0] & 0xf0) == 0x80) { + } else if ((chars[0] & 0xf0) == 0x80) { return true; - } else if ((((*this)[0] & 0xf0) == 0x90) && ((*this)[2] == 0)) { + } else if (((chars[0] & 0xf0) == 0x90) && (chars[2] == 0x00)) { return true; } else { return false; @@ -676,7 +678,7 @@ bool MidiMessage::isInstrumentName(void) const { ////////////////////////////// // // MidiMessage::isLyricText -- Returns true if message is a meta message -// describing some lyric text (for karakoke MIDI files) +// describing some lyric text (for karaoke MIDI files) // (meta message type 0x05). // @@ -857,7 +859,7 @@ int MidiMessage::getKeyNumber(void) const { ////////////////////////////// // -// MidiMessage::getVelocity -- Return the key veolocity. If the message +// MidiMessage::getVelocity -- Return the key velocity. If the message // is not a note-on or a note-off, then return -1. If the value is // out of the range 0-127, then chop off the high-bits. // @@ -961,7 +963,7 @@ void MidiMessage::setP1(int value) { ////////////////////////////// // -// MidiMessage::setP2 -- Set the second paramter value. +// MidiMessage::setP2 -- Set the second paramater value. // If the MidiMessage is too short, add extra spaces // to allow for P2. The command byte and/or the P1 value // will be undefined if extra space needs to be added and @@ -980,7 +982,7 @@ void MidiMessage::setP2(int value) { ////////////////////////////// // -// MidiMessage::setP3 -- Set the third paramter value. +// MidiMessage::setP3 -- Set the third paramater value. // If the MidiMessage is too short, add extra spaces // to allow for P3. The command byte and/or the P1/P2 values // will be undefined if extra space needs to be added and @@ -1364,7 +1366,7 @@ void MidiMessage::setSpelling(int base7, int accidental) { // pc + octave * 7 // where pc is the numbers 0 through 6 representing the pitch classes // C through B, the octave is MIDI octave (not the scientific pitch -// octave which is one less than the MIDI ocatave, such as C4 = middle C). +// octave which is one less than the MIDI octave, such as C4 = middle C). // The second number is the accidental for the base-7 pitch. // @@ -1544,8 +1546,8 @@ void MidiMessage::setMetaContent(const std::string& content) { // add the size of the meta message data (VLV) int dsize = (int)content.size(); std::vector vlv = intToVlv(dsize); - for (int i=0; i<(int)vlv.size(); i++) { - this->push_back(vlv[i]); + for (uchar item : vlv) { + this->push_back(item); } std::copy(content.begin(), content.end(), std::back_inserter(*this)); } @@ -1764,6 +1766,61 @@ void MidiMessage::makeController(int channel, int num, int value) { +///////////////////////////// +// +// MidiMessage::makePitchBend -- Create a pitch-bend message. lsb is +// least-significant 7 bits of the 14-bit range, and msb is the +// most-significant 7 bits of the 14-bit range. The range depth +// is determined by a setting in the synthesizer. Typically it is +// +/- two semitones by default. See MidiFile::setPitchBendRange() +// to change the default (or change to the typical default). +// + +void MidiMessage::makePitchBend(int channel, int lsb, int msb) { + resize(0); + push_back(0xe0 | (0x0e & channel)); + push_back(0x7f & lsb); + push_back(0x7f & msb); +} + +// +// value is a 14-bit number, where 0 is the lowest pitch of the range, and +// 2^15-1 is the highest pitch of the range. +// + +void MidiMessage::makePitchBend(int channel, int value) { + resize(0); + int lsb = value & 0x7f; + int msb = (value >> 7) & 0x7f; + push_back(0xe0 | (0x7f & channel)); + push_back(lsb); + push_back(msb); +} + +// +// Input value is a number between -1.0 and +1.0. +// + +void MidiMessage::makePitchBendDouble(int channel, double value) { + // value is in the range from -1 for minimum and 2^18 - 1 for the maximum + resize(0); + double dvalue = (value + 1.0) * (pow(2.0, 15.0)); + if (dvalue < 0.0) { + dvalue = 0.0; + } + if (dvalue > pow(2.0, 15.0) - 1.0) { + dvalue = pow(2.0, 15.0) - 1.0; + } + ulong uivalue = (ulong)dvalue; + uchar lsb = uivalue & 0x7f; + uchar msb = (uivalue >> 7) & 0x7f; + push_back(0xe0 | (0x7f & channel)); + push_back(lsb); + push_back(msb); +} + + + ///////////////////////////// // // MidiMessage::makeSustain -- Create a sustain pedal message. @@ -1999,8 +2056,8 @@ void MidiMessage::makeSysExMessage(const std::vector& data) { int msize = endindex - startindex + 2; std::vector vlv = intToVlv(msize); - for (int i=0; i<(int)vlv.size(); i++) { - this->push_back(vlv[i]); + for (uchar item : vlv) { + this->push_back(item); } for (int i=startindex; i<=endindex; i++) { this->push_back(data.at(i)); @@ -2095,18 +2152,18 @@ void MidiMessage::makeMts2_KeyTuningsBySemitone(std::vector vlv = intToVlv((int)mapping.size()); - for (int i=0; i<(int)vlv.size(); i++) { - data.push_back(vlv[i]); + for (uchar item : vlv) { + data.push_back(item); } - for (int i=0; i<(int)mapping.size(); i++) { - int keynum = mapping[i].first; + for (auto &item : mapping) { + int keynum = item.first; if (keynum < 0) { keynum = 0; } else if (keynum > 127) { keynum = 127; } data.push_back((uchar)keynum); - double semitones = mapping[i].second; + double semitones = item.second; int sint = (int)semitones; if (sint < 0) { sint = 0; @@ -2120,8 +2177,8 @@ void MidiMessage::makeMts2_KeyTuningsBySemitone(std::vector> 7) & 0x7f; data.push_back(msb); data.push_back(lsb); - } - this->makeSysExMessage(data); + } + this->makeSysExMessage(data); } @@ -2204,8 +2261,8 @@ void MidiMessage::makeTemperamentBad(double maxDeviationCents, int referencePitc maxDeviationCents = 100.0; } std::vector temperament(12); - for (int i=0; i<(int)temperament.size(); i++) { - temperament[i] = ((rand() / (double)RAND_MAX) * 2.0 - 1.0) * maxDeviationCents; + for (double &item : temperament) { + item = ((rand() / (double)RAND_MAX) * 2.0 - 1.0) * maxDeviationCents; } this->makeMts9_TemperamentByCentsDeviationFromET(temperament, referencePitchClass, channelMask); } @@ -2294,6 +2351,30 @@ void MidiMessage::makeTemperamentMeantoneCommaHalf(int referencePitchClass, int } + +////////////////////////////// +// +// operator<<(MidiMessage) -- Print MIDI messages as text. 0x80 and above +// are printed as hex, below as dec (will look strange for meta messages +// and system exclusives which could be dealt with later). +// + +std::ostream& operator<<(std::ostream& out, MidiMessage& message) { + for (int i=0; i<(int)message.size(); i++) { + if (message[i] >= 0x80) { + out << "0x" << std::hex << std::setw(2) << std::setfill('0') << (int)message[i]; + out << std::dec << std::setw(0) << std::setfill(' '); + } else { + out << (int)message[i]; + } + if (i<(int)message.size() - 1) { + out << ' '; + } + } + return out; +} + + } // end namespace smf diff --git a/src/midifunctor.cpp b/src/midifunctor.cpp index cdff91503cc..8e19d336ed8 100644 --- a/src/midifunctor.cpp +++ b/src/midifunctor.cpp @@ -239,8 +239,8 @@ FunctorCode InitMaxMeasureDurationFunctor::VisitMeasureEnd(Measure *measure) const double tempo = this->GetAdjustedTempo(); measure->SetCurrentTempo(tempo); - const double scoreTimeIncrement - = measure->m_measureAligner.GetRightAlignment()->GetTime() * m_multiRestFactor * DURATION_4 / DUR_MAX; + const double scoreTimeIncrement = measure->m_measureAligner.GetRightAlignment()->GetTime() * m_multiRestFactor + * static_cast(DURATION_4) / DUR_MAX; m_currentScoreTime += scoreTimeIncrement; m_currentRealTimeSeconds += scoreTimeIncrement * 60.0 / tempo; m_multiRestFactor = 1; @@ -698,7 +698,7 @@ FunctorCode GenerateMIDIFunctor::VisitPedal(const Pedal *pedal) { if (!pedal->HasDir()) return FUNCTOR_CONTINUE; - double pedalTime = pedal->GetStart()->GetAlignment()->GetTime() * DURATION_4 / DUR_MAX; + double pedalTime = pedal->GetStart()->GetAlignment()->GetTime() * static_cast(DURATION_4) / DUR_MAX; double startTime = m_totalTime + pedalTime; int tpq = m_midiFile->getTPQ(); @@ -798,7 +798,7 @@ FunctorCode GenerateMIDIFunctor::VisitStaffDef(const StaffDef *staffDef) FunctorCode GenerateMIDIFunctor::VisitSyl(const Syl *syl) { - const int startTime = m_totalTime + m_lastNote->GetScoreTimeOnset(); + const double startTime = m_totalTime + m_lastNote->GetScoreTimeOnset(); const std::string sylText = UTF32to8(syl->GetText()); m_midiFile->addLyric(m_midiTrack, startTime * m_midiFile->getTPQ(), sylText); diff --git a/src/miscfunctor.cpp b/src/miscfunctor.cpp index c592281c499..9c3677a2823 100644 --- a/src/miscfunctor.cpp +++ b/src/miscfunctor.cpp @@ -32,15 +32,15 @@ FunctorCode ApplyPPUFactorFunctor::VisitLayerElement(LayerElement *layerElement) { if (layerElement->IsScoreDefElement()) return FUNCTOR_SIBLINGS; - if (layerElement->m_xAbs != VRV_UNSET) layerElement->m_xAbs /= m_page->GetPPUFactor(); + if (layerElement->m_drawingFacsX != VRV_UNSET) layerElement->m_drawingFacsX /= m_page->GetPPUFactor(); return FUNCTOR_CONTINUE; } FunctorCode ApplyPPUFactorFunctor::VisitMeasure(Measure *measure) { - if (measure->m_xAbs != VRV_UNSET) measure->m_xAbs /= m_page->GetPPUFactor(); - if (measure->m_xAbs2 != VRV_UNSET) measure->m_xAbs2 /= m_page->GetPPUFactor(); + if (measure->m_drawingFacsX1 != VRV_UNSET) measure->m_drawingFacsX1 /= m_page->GetPPUFactor(); + if (measure->m_drawingFacsX2 != VRV_UNSET) measure->m_drawingFacsX2 /= m_page->GetPPUFactor(); return FUNCTOR_CONTINUE; } @@ -60,15 +60,15 @@ FunctorCode ApplyPPUFactorFunctor::VisitPage(Page *page) FunctorCode ApplyPPUFactorFunctor::VisitStaff(Staff *staff) { - if (staff->m_yAbs != VRV_UNSET) staff->m_yAbs /= m_page->GetPPUFactor(); + if (staff->m_drawingFacsY != VRV_UNSET) staff->m_drawingFacsY /= m_page->GetPPUFactor(); return FUNCTOR_CONTINUE; } FunctorCode ApplyPPUFactorFunctor::VisitSystem(System *system) { - if (system->m_xAbs != VRV_UNSET) system->m_xAbs /= m_page->GetPPUFactor(); - if (system->m_yAbs != VRV_UNSET) system->m_yAbs /= m_page->GetPPUFactor(); + if (system->m_drawingFacsX != VRV_UNSET) system->m_drawingFacsX /= m_page->GetPPUFactor(); + if (system->m_drawingFacsY != VRV_UNSET) system->m_drawingFacsY /= m_page->GetPPUFactor(); system->m_systemLeftMar *= m_page->GetPPUFactor(); system->m_systemRightMar *= m_page->GetPPUFactor(); diff --git a/src/object.cpp b/src/object.cpp index bd6a76b6c67..d23e54181bf 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -28,7 +28,7 @@ #include "editorial.h" #include "featureextractor.h" #include "findfunctor.h" -#include "io.h" +#include "iobase.h" #include "keysig.h" #include "layer.h" #include "linkinginterface.h" @@ -1272,7 +1272,12 @@ bool Object::sortByUlx(Object *a, Object *b) if (a->Is(NC) && b->Is(NC)) { Nc *nca = dynamic_cast(a); Nc *ncb = dynamic_cast(b); - if (nca->HasLigated() && ncb->HasLigated() && (a->GetParent() == b->GetParent())) { + Zone *zonea = dynamic_cast(nca->GetFacsimileInterface()->GetZone()); + assert(zonea); + Zone *zoneb = dynamic_cast(ncb->GetFacsimileInterface()->GetZone()); + assert(zoneb); + if (nca->HasLigated() && ncb->HasLigated() && (a->GetParent() == b->GetParent()) + && (zonea->GetUlx() == zoneb->GetUlx())) { Object *parent = a->GetParent(); assert(parent); if (abs(parent->GetChildIndex(a) - parent->GetChildIndex(b)) == 1) { diff --git a/src/options.cpp b/src/options.cpp index 08aa84dad59..86fd84f5c47 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -32,6 +32,9 @@ const std::map Option::s_condense const std::map Option::s_elision = { { ELISION_regular, "regular" }, { ELISION_narrow, "narrow" }, { ELISION_wide, "wide" }, { ELISION_unicode, "unicode" } }; +const std::map Option::s_fontFallback + = { { FONT_FALLBACK_Leipzig, "Leipzig" }, { FONT_FALLBACK_Bravura, "Bravura" } }; + const std::map Option::s_footer = { { FOOTER_none, "none" }, { FOOTER_auto, "auto" }, { FOOTER_encoded, "encoded" }, { FOOTER_always, "always" } }; @@ -108,13 +111,11 @@ jsonxx::Object Option::ToJson() const const OptionBool *optBool = dynamic_cast(this); if (optBool) { - opt << "type" - << "bool"; + opt << "type" << "bool"; opt << "default" << optBool->GetDefault(); } else if (optDbl) { - opt << "type" - << "double"; + opt << "type" << "double"; jsonxx::Value value(optDbl->GetDefault()); value.precision_ = 2; opt << "default" << value; @@ -126,20 +127,17 @@ jsonxx::Object Option::ToJson() const opt << "max" << value; } else if (optInt) { - opt << "type" - << "int"; + opt << "type" << "int"; opt << "default" << optInt->GetDefault(); opt << "min" << optInt->GetMin(); opt << "max" << optInt->GetMax(); } else if (optString) { - opt << "type" - << "std::string"; + opt << "type" << "std::string"; opt << "default" << optString->GetDefault(); } else if (optArray) { - opt << "type" - << "array"; + opt << "type" << "array"; std::vector strValues = optArray->GetDefault(); std::vector::iterator strIter; jsonxx::Array values; @@ -149,8 +147,7 @@ jsonxx::Object Option::ToJson() const opt << "default" << values; } else if (optIntMap) { - opt << "type" - << "std::string-list"; + opt << "type" << "std::string-list"; opt << "default" << optIntMap->GetDefaultStrValue(); std::vector strValues = optIntMap->GetStrValues(false); std::vector::iterator strIter; @@ -905,7 +902,7 @@ Options::Options() m_baseOptions.AddOption(&m_standardOutput); m_help.SetInfo("Help", "Display this message"); - m_help.Init(false); + m_help.Init(""); m_help.SetKey("help"); m_help.SetShortOption('h', true); m_baseOptions.AddOption(&m_help); @@ -954,7 +951,7 @@ Options::Options() m_baseOptions.AddOption(&m_scale); m_outputTo.SetInfo("Output to", - "Select output format to: \"mei\", \"mei-pb\", \"mei-basic\", \"svg\", \"midi\", \"timemap\", " + "Select output format to: \"mei\", \"mei-pb\", \"mei-facs\", \"mei-basic\", \"svg\", \"midi\", \"timemap\", " "\"expansionmap\", \"humdrum\" or " "\"pae\""); m_outputTo.Init("svg"); @@ -1132,6 +1129,10 @@ Options::Options() m_scaleToPageSize.Init(false); this->Register(&m_scaleToPageSize, "scaleToPageSize", &m_general); + m_setLocale.SetInfo("Set the global locale", "Changes the global locale to C (this is not thread-safe)"); + m_setLocale.Init(false); + this->Register(&m_setLocale, "setLocale", &m_general); + m_showRuntime.SetInfo("Show runtime on CLI", "Display the total runtime on command-line"); m_showRuntime.Init(false); this->Register(&m_showRuntime, "showRuntime", &m_general); @@ -1290,6 +1291,18 @@ Options::Options() m_font.Init("Leipzig"); this->Register(&m_font, "font", &m_generalLayout); + m_fontAddCustom.SetInfo("Add custom font", "Add a custom music font as zip file"); + m_fontAddCustom.Init(); + this->Register(&m_fontAddCustom, "fontAddCustom", &m_generalLayout); + + m_fontFallback.SetInfo("Font fallback", "The music font fallback for missing glyphs"); + m_fontFallback.Init(FONT_FALLBACK_Leipzig, &Option::s_fontFallback); + this->Register(&m_fontFallback, "fontFallback", &m_generalLayout); + + m_fontLoadAll.SetInfo("Font init all", "Load all music fonts"); + m_fontLoadAll.Init(false); + this->Register(&m_fontLoadAll, "fontLoadAll", &m_generalLayout); + m_graceFactor.SetInfo("Grace factor", "The grace size ratio numerator"); m_graceFactor.Init(0.75, 0.5, 1.0); this->Register(&m_graceFactor, "graceFactor", &m_generalLayout); diff --git a/src/pb.cpp b/src/pb.cpp index 9b7386736a8..10f68009081 100644 --- a/src/pb.cpp +++ b/src/pb.cpp @@ -29,9 +29,10 @@ namespace vrv { static const ClassRegistrar s_factory("pb", PB); -Pb::Pb() : SystemElement(PB, "pb-"), AttNNumberLike() +Pb::Pb() : SystemElement(PB, "pb-"), FacsimileInterface(), AttNNumberLike() { this->RegisterAttClass(ATT_NNUMBERLIKE); + this->RegisterInterface(FacsimileInterface::GetAttClasses(), FacsimileInterface::IsInterface()); this->Reset(); } @@ -41,6 +42,7 @@ Pb::~Pb() {} void Pb::Reset() { SystemElement::Reset(); + FacsimileInterface::Reset(); this->ResetNNumberLike(); } diff --git a/src/preparedatafunctor.cpp b/src/preparedatafunctor.cpp index e33f0daa2fd..2d9226da362 100644 --- a/src/preparedatafunctor.cpp +++ b/src/preparedatafunctor.cpp @@ -380,12 +380,7 @@ FunctorCode PrepareFacsimileFunctor::VisitObject(Object *object) FacsimileInterface *interface = object->GetFacsimileInterface(); assert(interface); if (interface->HasFacs()) { - std::string facsID = ((interface->GetFacs().compare(0, 1, "#") == 0) ? interface->GetFacs().substr(1) - : interface->GetFacs()); - Zone *zone = m_facsimile->FindZoneByID(facsID); - if (zone != NULL) { - interface->AttachZone(zone); - } + interface->InterfacePrepareFacsimile(*this, object); } // Zoneless syl else if (object->Is(SYL)) { @@ -655,7 +650,10 @@ FunctorCode PrepareTimePointingFunctor::VisitMeasureEnd(Measure *measure) // PrepareTimeSpanningFunctor //---------------------------------------------------------------------------- -PrepareTimeSpanningFunctor::PrepareTimeSpanningFunctor() : Functor(), CollectAndProcess() {} +PrepareTimeSpanningFunctor::PrepareTimeSpanningFunctor() : Functor(), CollectAndProcess() +{ + m_insideMeasure = false; +} void PrepareTimeSpanningFunctor::InsertInterfaceOwnerPair(Object *owner, TimeSpanningInterface *interface) { @@ -664,19 +662,16 @@ void PrepareTimeSpanningFunctor::InsertInterfaceOwnerPair(Object *owner, TimeSpa FunctorCode PrepareTimeSpanningFunctor::VisitF(F *f) { - // Pass it to the pseudo functor of the interface - TimeSpanningInterface *interface = f->GetTimeSpanningInterface(); - assert(interface); - return interface->InterfacePrepareTimeSpanning(*this, f); + if (!m_insideMeasure) { + return this->CallPseudoFunctor(f); + } + return FUNCTOR_CONTINUE; } FunctorCode PrepareTimeSpanningFunctor::VisitFloatingObject(FloatingObject *floatingObject) { - // Pass it to the pseudo functor of the interface - if (floatingObject->HasInterface(INTERFACE_TIME_SPANNING)) { - TimeSpanningInterface *interface = floatingObject->GetTimeSpanningInterface(); - assert(interface); - return interface->InterfacePrepareTimeSpanning(*this, floatingObject); + if (!m_insideMeasure && floatingObject->HasInterface(INTERFACE_TIME_SPANNING)) { + return this->CallPseudoFunctor(floatingObject); } return FUNCTOR_CONTINUE; } @@ -704,28 +699,49 @@ FunctorCode PrepareTimeSpanningFunctor::VisitLayerElement(LayerElement *layerEle return FUNCTOR_CONTINUE; } -FunctorCode PrepareTimeSpanningFunctor::VisitMeasureEnd(Measure *measure) +FunctorCode PrepareTimeSpanningFunctor::VisitMeasure(Measure *measure) { - if (this->IsProcessingData()) { - return FUNCTOR_CONTINUE; + if (this->IsCollectingData()) { + ListOfObjects timeSpanningObjects; + InterfaceComparison ic(INTERFACE_TIME_SPANNING); + measure->FindAllDescendantsByComparison(&timeSpanningObjects, &ic); + for (Object *object : timeSpanningObjects) { + this->CallPseudoFunctor(object); + } } + m_insideMeasure = true; - ListOfSpanningInterOwnerPairs::iterator iter = m_timeSpanningInterfaces.begin(); - while (iter != m_timeSpanningInterfaces.end()) { - // At the end of the measure (going backward) we remove elements for which we do not need to match the end (for - // now). Eventually, we could consider them, for example if we want to display their spanning or for improved - // midi output - if (iter->second->GetClassId() == HARM) { - iter = m_timeSpanningInterfaces.erase(iter); - } - else { - ++iter; + return FUNCTOR_CONTINUE; +} + +FunctorCode PrepareTimeSpanningFunctor::VisitMeasureEnd(Measure *measure) +{ + if (this->IsCollectingData()) { + ListOfSpanningInterOwnerPairs::iterator iter = m_timeSpanningInterfaces.begin(); + while (iter != m_timeSpanningInterfaces.end()) { + // At the end of the measure we remove elements for which we do not need to match the end (for now). + // Eventually, we could consider them, for example if we want to display their spanning or for + // improved midi output + if (iter->second->GetClassId() == HARM) { + iter = m_timeSpanningInterfaces.erase(iter); + } + else { + ++iter; + } } } + m_insideMeasure = false; return FUNCTOR_CONTINUE; } +FunctorCode PrepareTimeSpanningFunctor::CallPseudoFunctor(Object *timeSpanningObject) +{ + TimeSpanningInterface *interface = timeSpanningObject->GetTimeSpanningInterface(); + assert(interface); + return interface->InterfacePrepareTimeSpanning(*this, timeSpanningObject); +} + //---------------------------------------------------------------------------- // PrepareTimestampsFunctor //---------------------------------------------------------------------------- diff --git a/src/resetfunctor.cpp b/src/resetfunctor.cpp index 8a09f26fe80..6c53b73e881 100644 --- a/src/resetfunctor.cpp +++ b/src/resetfunctor.cpp @@ -63,10 +63,7 @@ FunctorCode ResetDataFunctor::VisitArpeg(Arpeg *arpeg) { // Call parent one too this->VisitControlElement(arpeg); - - PlistInterface *interface = arpeg->GetPlistInterface(); - assert(interface); - interface->InterfaceResetData(*this, arpeg); + arpeg->PlistInterface::InterfaceResetData(*this, arpeg); return FUNCTOR_CONTINUE; } @@ -184,6 +181,9 @@ FunctorCode ResetDataFunctor::VisitDots(Dots *dots) FunctorCode ResetDataFunctor::VisitEditorialElement(EditorialElement *editorialElement) { + // Call parent one too + this->VisitObject(editorialElement); + if (editorialElement->IsSystemMilestone()) { editorialElement->SystemMilestoneInterface::InterfaceResetData(*this); } @@ -194,7 +194,6 @@ FunctorCode ResetDataFunctor::VisitEditorialElement(EditorialElement *editorialE FunctorCode ResetDataFunctor::VisitEnding(Ending *ending) { this->VisitFloatingObject(ending); - ending->SystemMilestoneInterface::InterfaceResetData(*this); return FUNCTOR_CONTINUE; @@ -203,10 +202,7 @@ FunctorCode ResetDataFunctor::VisitEnding(Ending *ending) FunctorCode ResetDataFunctor::VisitF(F *f) { this->VisitTextElement(f); - - TimeSpanningInterface *interface = f->GetTimeSpanningInterface(); - assert(interface); - interface->InterfaceResetData(*this, f); + f->TimeSpanningInterface::InterfaceResetData(*this, f); return FUNCTOR_CONTINUE; } @@ -222,10 +218,19 @@ FunctorCode ResetDataFunctor::VisitFlag(Flag *flag) FunctorCode ResetDataFunctor::VisitFloatingObject(FloatingObject *floatingObject) { + // Call parent one too + this->VisitObject(floatingObject); + floatingObject->ResetDrawing(); floatingObject->SetDrawingGrpId(0); // Pass it to the pseudo functor of the interface + if (floatingObject->HasInterface(INTERFACE_FACSIMILE)) { + FacsimileInterface *interface = floatingObject->GetFacsimileInterface(); + assert(interface); + interface->InterfaceResetData(*this, floatingObject); + } + // else / else if because TimpeSpanningInterface::InterfaceResetData resets TimePointingInterface if (floatingObject->HasInterface(INTERFACE_TIME_SPANNING)) { TimeSpanningInterface *interface = floatingObject->GetTimeSpanningInterface(); assert(interface); @@ -265,6 +270,9 @@ FunctorCode ResetDataFunctor::VisitHairpin(Hairpin *hairpin) FunctorCode ResetDataFunctor::VisitLayer(Layer *layer) { + // Call parent one too + this->VisitObject(layer); + layer->SetCrossStaffFromAbove(false); layer->SetCrossStaffFromBelow(false); return FUNCTOR_CONTINUE; @@ -272,6 +280,10 @@ FunctorCode ResetDataFunctor::VisitLayer(Layer *layer) FunctorCode ResetDataFunctor::VisitLayerElement(LayerElement *layerElement) { + // Call parent one too + this->VisitObject(layerElement); + layerElement->FacsimileInterface::InterfaceResetData(*this, layerElement); + layerElement->SetIsInBeamSpan(false); layerElement->SetDrawingCueSize(false); layerElement->m_crossStaff = NULL; @@ -299,6 +311,10 @@ FunctorCode ResetDataFunctor::VisitLigature(Ligature *ligature) FunctorCode ResetDataFunctor::VisitMeasure(Measure *measure) { + // Call parent one too + this->VisitObject(measure); + measure->FacsimileInterface::InterfaceResetData(*this, measure); + measure->m_timestampAligner.Reset(); measure->SetDrawingEnding(NULL); return FUNCTOR_CONTINUE; @@ -327,6 +343,11 @@ FunctorCode ResetDataFunctor::VisitNote(Note *note) return FUNCTOR_CONTINUE; } +FunctorCode ResetDataFunctor::VisitObject(Object *object) +{ + return FUNCTOR_CONTINUE; +} + FunctorCode ResetDataFunctor::VisitRepeatMark(RepeatMark *repeatMark) { // Call parent one too @@ -348,6 +369,7 @@ FunctorCode ResetDataFunctor::VisitRest(Rest *rest) FunctorCode ResetDataFunctor::VisitSection(Section *section) { + // Call parent one too this->VisitFloatingObject(section); if (section->IsSystemMilestone()) { @@ -369,6 +391,10 @@ FunctorCode ResetDataFunctor::VisitSlur(Slur *slur) FunctorCode ResetDataFunctor::VisitStaff(Staff *staff) { + // Call parent one too + this->VisitObject(staff); + staff->FacsimileInterface::InterfaceResetData(*this, staff); + staff->m_timeSpanningElements.clear(); staff->ClearLedgerLines(); return FUNCTOR_CONTINUE; diff --git a/src/resources.cpp b/src/resources.cpp index 114821fbe0a..d2f5774be50 100644 --- a/src/resources.cpp +++ b/src/resources.cpp @@ -9,6 +9,10 @@ //---------------------------------------------------------------------------- +#include +#include +#include +#include #include //---------------------------------------------------------------------------- @@ -21,6 +25,9 @@ #include "pugixml.hpp" +#define BRAVURA "Bravura" +#define LEIPZIG "Leipzig" + namespace vrv { //---------------------------------------------------------------------------- @@ -52,16 +59,16 @@ Resources::Resources() bool Resources::InitFonts() { - // We will need to rethink this for adding the option to add custom fonts - // Font Bravura first since it is expected to have always all symbols - if (!LoadFont("Bravura", false)) LogError("Bravura font could not be loaded."); - // The Leipzig as the default font - if (!LoadFont("Leipzig", false)) LogError("Leipzig font could not be loaded."); - - if (m_fontGlyphTable.size() < SMUFL_COUNT) { - LogError("Expected %d default SMuFL glyphs but could load only %d.", SMUFL_COUNT, m_fontGlyphTable.size()); - return false; - } + m_loadedFonts.clear(); + + // Font Bravura first. As it is expected to have always all symbols we build the code -> name table from it + if (!LoadFont(BRAVURA)) LogError("Bravura font could not be loaded."); + // Leipzig is our initial default font + if (!LoadFont(LEIPZIG)) LogError("Leipzig font could not be loaded."); + + m_defaultFontName = LEIPZIG; + m_currentFontName = m_defaultFontName; + m_fallbackFontName = m_defaultFontName; struct TextFontInfo_type { const StyleAttributes m_style; @@ -88,33 +95,160 @@ bool Resources::InitFonts() bool Resources::SetFont(const std::string &fontName) { - return LoadFont(fontName); + // and the default font provided in options, if it is not one of the previous + if (!fontName.empty() && !IsFontLoaded(fontName)) { + if (!LoadFont(fontName)) { + LogError("%s font could not be loaded.", fontName.c_str()); + return false; + } + } + + m_defaultFontName = IsFontLoaded(fontName) ? fontName : LEIPZIG; + m_currentFontName = m_defaultFontName; + + return true; +} + +bool Resources::AddCustom(const std::vector &extraFonts) +{ + bool success = true; + // options supplied fonts + for (const std::string &fontFile : extraFonts) { + ZipFileReader zipFile; + if (!zipFile.Load(fontFile)) { + continue; + } + std::string fontName = GetCustomFontname(fontFile, zipFile); + if (fontName.empty() || IsFontLoaded(fontName)) { + continue; + } + success = success && LoadFont(fontName, &zipFile); + if (!success) { + LogError("Option supplied font %s could not be loaded.", fontName.c_str()); + } + } + return success; +} + +bool Resources::LoadAll() +{ + bool success = true; + std::string path = Resources::GetPath() + "/"; + for (const std::filesystem::directory_entry &entry : std::filesystem::directory_iterator(path)) { + const std::filesystem::path path = entry.path(); + if (path.has_extension() && path.has_stem() && path.extension() == ".xml") { + const std::string fontName = path.stem().string(); + if (!IsFontLoaded(fontName)) { + success = success && LoadFont(fontName); + } + } + } + return success; +} + +bool Resources::SetFallback(const std::string &fontName) +{ + m_fallbackFontName = fontName; + return true; +} + +bool Resources::SetCurrentFont(const std::string &fontName, bool allowLoading) +{ + if (IsFontLoaded(fontName)) { + m_currentFontName = fontName; + return true; + } + else if (allowLoading && LoadFont(fontName)) { + m_currentFontName = fontName; + return true; + } + else { + return false; + } } const Glyph *Resources::GetGlyph(char32_t smuflCode) const { - return m_fontGlyphTable.count(smuflCode) ? &m_fontGlyphTable.at(smuflCode) : NULL; + if (GetCurrentGlyphTable().contains(smuflCode)) { + return &GetCurrentGlyphTable().at(smuflCode); + } + else if (!this->IsCurrentFontFallback()) { + const GlyphTable &fallbackTable = this->GetFallbackGlyphTable(); + return (fallbackTable.contains(smuflCode)) ? &fallbackTable.at(smuflCode) : NULL; + } + else { + return NULL; + } } const Glyph *Resources::GetGlyph(const std::string &smuflName) const { - return m_glyphNameTable.count(smuflName) ? &m_fontGlyphTable.at(m_glyphNameTable.at(smuflName)) : NULL; + return (this->GetGlyphCode(smuflName)) ? &GetCurrentGlyphTable().at(this->GetGlyphCode(smuflName)) : NULL; } char32_t Resources::GetGlyphCode(const std::string &smuflName) const { - return m_glyphNameTable.count(smuflName) ? m_glyphNameTable.at(smuflName) : 0; + return m_glyphNameTable.contains(smuflName) ? m_glyphNameTable.at(smuflName) : 0; } bool Resources::IsSmuflFallbackNeeded(const std::u32string &text) const { + if (m_loadedFonts.at(m_currentFontName).isFallback()) { + return false; + } for (char32_t c : text) { - const Glyph *glyph = this->GetGlyph(c); - if (glyph && glyph->GetFallback()) return true; + if (!GetCurrentGlyphTable().contains(c)) return true; } return false; } +bool Resources::IsCurrentFontFallback() const +{ + return (m_currentFontName == m_fallbackFontName); +} + +bool Resources::FontHasGlyphAvailable(const std::string &fontName, char32_t smuflCode) const +{ + if (!IsFontLoaded(fontName)) { + return false; + } + + const GlyphTable &table = m_loadedFonts.at(fontName).GetGlyphTable(); + if (table.find(smuflCode) != table.end()) { + return true; + } + else { + return false; + } +} + +std::string Resources::GetCSSFontFor(const std::string &fontName) const +{ + if (!IsFontLoaded(fontName)) { + return ""; + } + + const LoadedFont &font = m_loadedFonts.at(fontName); + return font.GetCSSFont(m_path); +} + +std::string Resources::GetCustomFontname(const std::string &filename, const ZipFileReader &zipFile) +{ +#ifdef __EMSCRIPTEN__ + for (auto &s : zipFile.GetFileList()) { + std::filesystem::path path(s); + if (!path.has_parent_path() && path.has_extension() && path.extension() == ".xml") { + return path.stem(); + } + } + LogWarning("The font name could not be extracted from the archive"); + return ""; +#else + std::filesystem::path path(filename); + return (path.has_stem()) ? path.stem().string() : ""; +#endif +} + void Resources::SelectTextFont(data_FONTWEIGHT fontWeight, data_FONTSTYLE fontStyle) const { if (fontWeight == FONTWEIGHT_NONE) { @@ -158,15 +292,33 @@ char32_t Resources::GetSmuflGlyphForUnicodeChar(const char32_t unicodeChar) return smuflChar; } -bool Resources::LoadFont(const std::string &fontName, bool withFallback) +bool Resources::LoadFont(const std::string &fontName, ZipFileReader *zipFile) { pugi::xml_document doc; - const std::string filename = Resources::GetPath() + "/" + fontName + ".xml"; - pugi::xml_parse_result parseResult = doc.load_file(filename.c_str()); - if (!parseResult) { - // File not found, default bounding boxes will be used - LogError("Failed to load font and glyph bounding boxes"); - return false; + // For zip archive custom font, load the data from the zipFile + if (zipFile) { + const std::string filename = fontName + ".xml"; + if (!zipFile->HasFile(filename)) { + // File not found, default bounding boxes will be used + LogError("Failed to load font and glyph bounding boxes"); + return false; + } + pugi::xml_parse_result parseResult = doc.load_string(zipFile->ReadTextFile(filename).c_str()); + if (!parseResult) { + // File not found, default bounding boxes will be used + LogError("Failed to load font and glyph bounding boxes"); + return false; + } + } + // Other wise use the resource directory + else { + const std::string filename = Resources::GetPath() + "/" + fontName + ".xml"; + pugi::xml_parse_result parseResult = doc.load_file(filename.c_str()); + if (!parseResult) { + // File not found, default bounding boxes will be used + LogError("Failed to load font and glyph bounding boxes"); + return false; + } } pugi::xml_node root = doc.first_child(); if (!root.attribute("units-per-em")) { @@ -174,12 +326,19 @@ bool Resources::LoadFont(const std::string &fontName, bool withFallback) return false; } - if (withFallback) { - for (auto &glyph : m_fontGlyphTable) { - glyph.second.SetFallback(true); - } + bool buildNameTable = (fontName == BRAVURA) ? true : false; + bool isFallback = ((fontName == BRAVURA) || (fontName == LEIPZIG)) ? true : false; + + m_loadedFonts.insert(std::pair(fontName, Resources::LoadedFont(fontName, isFallback))); + LoadedFont &font = m_loadedFonts.at(fontName); + + // For zip archive custom font also store the CSS + if (zipFile) { + font.SetCSSFont(zipFile->ReadTextFile(fontName + ".css")); } + GlyphTable &glyphTable = font.GetGlyphTableForModification(); + const int unitsPerEm = atoi(root.attribute("units-per-em").value()); for (pugi::xml_node current = root.child("g"); current; current = current.next_sibling("g")) { @@ -196,7 +355,17 @@ bool Resources::LoadFont(const std::string &fontName, bool withFallback) if (current.attribute("w")) width = current.attribute("w").as_float(); if (current.attribute("h")) height = current.attribute("h").as_float(); glyph.SetBoundingBox(x, y, width, height); - glyph.SetPath(Resources::GetPath() + "/" + fontName + "/" + c_attribute.value() + ".xml"); + + std::string glyphFilename = fontName + "/" + c_attribute.value() + ".xml"; + // Store the XML in the glyph for fonts loaded from zip files + if (zipFile) { + glyph.SetXML(zipFile->ReadTextFile(glyphFilename)); + } + // Otherwise only store the path + else { + glyph.SetPath(Resources::GetPath() + "/" + glyphFilename); + } + if (current.attribute("h-a-x")) glyph.SetHorizAdvX(current.attribute("h-a-x").as_float()); // load anchors @@ -211,12 +380,17 @@ bool Resources::LoadFont(const std::string &fontName, bool withFallback) } const char32_t smuflCode = (char32_t)strtol(c_attribute.value(), NULL, 16); - glyph.SetFallback(false); - m_fontGlyphTable[smuflCode] = glyph; - m_glyphNameTable[n_attribute.value()] = smuflCode; + glyphTable[smuflCode] = glyph; + if (buildNameTable) { + m_glyphNameTable[n_attribute.value()] = smuflCode; + } + } + + if (isFallback && glyphTable.size() < SMUFL_COUNT) { + LogError("Expected %d default SMuFL glyphs but could load only %d.", SMUFL_COUNT, glyphTable.size()); + return false; } - m_fontName = fontName; return true; } @@ -268,4 +442,18 @@ bool Resources::InitTextFont(const std::string &fontName, const StyleAttributes return true; } +std::string Resources::LoadedFont::GetCSSFont(const std::string &path) const +{ + if (!m_css.empty()) { + return m_css; + } + else { + const std::string cssFontPath = StringFormat("%s/%s.css", path.c_str(), m_name.c_str()); + std::ifstream fstream(cssFontPath); + std::stringstream sstream; + sstream << fstream.rdbuf(); + return sstream.str(); + } +} + } // namespace vrv diff --git a/src/sb.cpp b/src/sb.cpp index 33a33c0bdf6..883f46a7e1c 100644 --- a/src/sb.cpp +++ b/src/sb.cpp @@ -29,9 +29,10 @@ namespace vrv { static const ClassRegistrar s_factory("sb", SB); -Sb::Sb() : SystemElement(SB, "sb-"), AttNNumberLike() +Sb::Sb() : SystemElement(SB, "sb-"), FacsimileInterface(), AttNNumberLike() { this->RegisterAttClass(ATT_NNUMBERLIKE); + this->RegisterInterface(FacsimileInterface::GetAttClasses(), FacsimileInterface::IsInterface()); this->Reset(); } @@ -41,6 +42,7 @@ Sb::~Sb() {} void Sb::Reset() { SystemElement::Reset(); + FacsimileInterface::Reset(); this->ResetNNumberLike(); } diff --git a/src/setscoredeffunctor.cpp b/src/setscoredeffunctor.cpp index 144bc4d3248..29f6548c8ce 100644 --- a/src/setscoredeffunctor.cpp +++ b/src/setscoredeffunctor.cpp @@ -68,11 +68,18 @@ FunctorCode ScoreDefSetCurrentPageFunctor::VisitPageEnd(Page *page) { const Object *firstSystem = page->GetFirst(SYSTEM); const Object *reference = firstSystem ? firstSystem : page; - page->m_score = m_doc->GetCorrespondingScore(reference); + page->m_score = m_doc->GetCorrespondingScore(reference, m_scores); const Object *lastSystem = page->GetLast(SYSTEM); reference = lastSystem ? lastSystem : page; - page->m_scoreEnd = m_doc->GetCorrespondingScore(reference); + page->m_scoreEnd = m_doc->GetCorrespondingScore(reference, m_scores); + + return FUNCTOR_CONTINUE; +} + +FunctorCode ScoreDefSetCurrentPageFunctor::VisitScore(Score *score) +{ + m_scores.push_back(score); return FUNCTOR_CONTINUE; } diff --git a/src/staff.cpp b/src/staff.cpp index 3d91195fea9..28b69219213 100644 --- a/src/staff.cpp +++ b/src/staff.cpp @@ -66,7 +66,7 @@ void Staff::Reset() this->ResetTyped(); this->ResetVisibility(); - m_yAbs = VRV_UNSET; + m_drawingFacsY = VRV_UNSET; m_drawingStaffSize = 100; m_drawingLines = 5; @@ -125,7 +125,7 @@ int Staff::GetDrawingX() const if (this->HasFacs()) { const Doc *doc = vrv_cast(this->GetFirstAncestor(DOC)); assert(doc); - if (doc->GetType() == Facs) { + if (doc->IsFacs()) { return FacsimileInterface::GetDrawingX(); } } @@ -137,12 +137,12 @@ int Staff::GetDrawingY() const if (this->HasFacs()) { const Doc *doc = vrv_cast(this->GetFirstAncestor(DOC)); assert(DOC); - if (doc->GetType() == Facs) { + if (doc->IsFacs()) { return FacsimileInterface::GetDrawingY(); } } - if (m_yAbs != VRV_UNSET) return m_yAbs; + if (m_drawingFacsY != VRV_UNSET) return m_drawingFacsY; if (!m_staffAlignment) return 0; @@ -160,7 +160,7 @@ double Staff::GetDrawingRotate() const if (this->HasFacs()) { const Doc *doc = vrv_cast(this->GetFirstAncestor(DOC)); assert(doc); - if (doc->GetType() == Facs) { + if (doc->IsFacs()) { return FacsimileInterface::GetDrawingRotate(); } } @@ -172,7 +172,7 @@ void Staff::AdjustDrawingStaffSize() if (this->HasFacs()) { Doc *doc = vrv_cast(this->GetFirstAncestor(DOC)); assert(doc); - if (doc->GetType() == Facs) { + if (doc->IsFacs()) { double rotate = this->GetDrawingRotate(); Zone *zone = this->GetZone(); assert(zone); diff --git a/src/svgdevicecontext.cpp b/src/svgdevicecontext.cpp index 4451b067d8c..1769f1f138d 100644 --- a/src/svgdevicecontext.cpp +++ b/src/svgdevicecontext.cpp @@ -84,6 +84,43 @@ bool SvgDeviceContext::CopyFileToStream(const std::string &filename, std::ostrea return true; } +SvgDeviceContext::GlyphRef::GlyphRef(const Glyph *glyph, int count, const std::string &postfix) : m_glyph(glyph) +{ + // Add the counter only when necessary (more than one font for that glyph) + if (count == 0) { + m_refId = StringFormat("%s-%s", glyph->GetCodeStr().c_str(), postfix.c_str()); + } + else { + m_refId = StringFormat("%s-%d-%s", glyph->GetCodeStr().c_str(), count, postfix.c_str()); + } +}; + +const std::string SvgDeviceContext::InsertGlyphRef(const Glyph *glyph) +{ + const std::string code = glyph->GetCodeStr(); + + // We have already used this glyph + if (m_smuflGlyphs.find(glyph) != m_smuflGlyphs.end()) { + return m_smuflGlyphs.at(glyph).GetRefId(); + } + + int count; + // This is the first time we have a glyph with this code + if (m_glyphCodeFontCounter.find(code) == m_glyphCodeFontCounter.end()) { + count = 0; + } + // We used it but with another font + else { + count = m_glyphCodeFontCounter[(code)]; + } + GlyphRef ref(glyph, count, m_glyphPostfixId); + const std::string id = ref.GetRefId(); + m_smuflGlyphs.insert(std::pair(glyph, ref)); + m_glyphCodeFontCounter[code] = count + 1; + + return id; +} + void SvgDeviceContext::IncludeTextFont(const std::string &fontname, const Resources *resources) { assert(resources); @@ -91,17 +128,7 @@ void SvgDeviceContext::IncludeTextFont(const std::string &fontname, const Resour std::string cssContent; if (m_smuflTextFont == SMUFLTEXTFONT_embedded) { - const std::string cssFontPath = StringFormat("%s/%s.css", resources->GetPath().c_str(), fontname.c_str()); - std::ifstream cssFontFile(cssFontPath); - if (!cssFontFile.is_open()) { - LogWarning("The CSS font for '%s' could not be loaded and will not be embedded in the SVG", - resources->GetCurrentFontName().c_str()); - } - else { - std::stringstream cssFontStream; - cssFontStream << cssFontFile.rdbuf(); - cssContent = cssFontStream.str(); - } + cssContent = resources->GetCSSFontFor(fontname); } else { std::string versionPath @@ -156,11 +183,11 @@ void SvgDeviceContext::Commit(bool xml_declaration) const Resources *resources = this->GetResources(true); // include the selected font if (m_vrvTextFont && resources) { - this->IncludeTextFont(resources->GetCurrentFontName(), resources); + this->IncludeTextFont(resources->GetCurrentFont(), resources); } - // include the Leipzig fallback font + // include the fallback font if (m_vrvTextFontFallback && resources) { - this->IncludeTextFont("Leipzig", resources); + this->IncludeTextFont(resources->GetFallbackFont(), resources); } } @@ -171,15 +198,13 @@ void SvgDeviceContext::Commit(bool xml_declaration) pugi::xml_document sourceDoc; // for each needed glyph - for (const Glyph *smuflGlyph : m_smuflGlyphs) { - // load the XML file that contains it as a pugi::xml_document - std::ifstream source(smuflGlyph->GetPath()); - sourceDoc.load(source); + for (const std::pair entry : m_smuflGlyphs) { + // load the XML as a pugi::xml_document + sourceDoc.load_string(entry.first->GetXML().c_str()); // copy all the nodes inside into the master document for (pugi::xml_node child = sourceDoc.first_child(); child; child = child.next_sibling()) { - std::string id = StringFormat("%s-%s", child.attribute("id").value(), m_glyphPostfixId.c_str()); - child.attribute("id").set_value(id.c_str()); + child.attribute("id").set_value(entry.second.GetRefId().c_str()); defs.append_copy(child); } } @@ -1020,12 +1045,11 @@ void SvgDeviceContext::DrawMusicText(const std::u32string &text, int x, int y, b } // Add the glyph to the array for the - m_smuflGlyphs.insert(glyph); + const std::string id = InsertGlyphRef(glyph); // Write the char in the SVG pugi::xml_node useChild = AddChild("use"); - useChild.append_attribute(hrefAttrib.c_str()) - = StringFormat("#%s-%s", glyph->GetCodeStr().c_str(), m_glyphPostfixId.c_str()).c_str(); + useChild.append_attribute(hrefAttrib.c_str()) = StringFormat("#%s", id.c_str()).c_str(); useChild.append_attribute("x") = x; useChild.append_attribute("y") = y; useChild.append_attribute("height") = StringFormat("%dpx", m_fontStack.top()->GetPointSize()).c_str(); diff --git a/src/system.cpp b/src/system.cpp index f7deae78600..cbf3e6748f3 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -74,9 +74,9 @@ void System::Reset() m_systemLeftMar = 0; m_systemRightMar = 0; - m_xAbs = VRV_UNSET; + m_drawingFacsX = VRV_UNSET; m_drawingXRel = 0; - m_yAbs = VRV_UNSET; + m_drawingFacsY = VRV_UNSET; m_drawingYRel = 0; m_drawingTotalWidth = 0; m_drawingJustifiableWidth = 0; @@ -111,7 +111,7 @@ bool System::IsSupportedChild(Object *child) int System::GetDrawingX() const { - if (m_xAbs != VRV_UNSET) return m_xAbs; + if (m_drawingFacsX != VRV_UNSET) return m_drawingFacsX; m_cachedDrawingX = 0; return m_drawingXRel; @@ -119,7 +119,7 @@ int System::GetDrawingX() const int System::GetDrawingY() const { - if (m_yAbs != VRV_UNSET) return m_yAbs; + if (m_drawingFacsY != VRV_UNSET) return m_drawingFacsY; m_cachedDrawingY = 0; return m_drawingYRel; @@ -341,7 +341,7 @@ void System::AddToDrawingListIfNecessary(Object *object) else if (object->Is(DYNAM)) { Dynam *dynam = vrv_cast(object); assert(dynam); - if (dynam->GetEnd() || (dynam->GetNextLink() && (dynam->GetExtender() == BOOLEAN_true))) { + if ((dynam->GetEnd() || dynam->GetNextLink()) && (dynam->GetExtender() == BOOLEAN_true)) { this->AddToDrawingList(dynam); } } diff --git a/src/toolkit.cpp b/src/toolkit.cpp index cb8fe6e8ada..2ae7b97c19b 100644 --- a/src/toolkit.cpp +++ b/src/toolkit.cpp @@ -21,6 +21,7 @@ #include "editortoolkit_cmn.h" #include "editortoolkit_mensural.h" #include "editortoolkit_neume.h" +#include "filereader.h" #include "findfunctor.h" #include "ioabc.h" #include "iodarms.h" @@ -48,10 +49,6 @@ #include "crc.h" #include "jsonxx.h" -#ifndef NO_MXL_SUPPORT -#include "zip_file.hpp" -#endif /* NO_MXL_SUPPORT */ - namespace vrv { const char *UTF_16_BE_BOM = "\xFE\xFF"; @@ -88,6 +85,8 @@ Toolkit::Toolkit(bool initFont) Toolkit::~Toolkit() { + this->ResetLocale(); + if (m_humdrumBuffer) { free(m_humdrumBuffer); m_humdrumBuffer = NULL; @@ -117,13 +116,26 @@ bool Toolkit::SetResourcePath(const std::string &path) { Resources &resources = m_doc.GetResourcesForModification(); resources.SetPath(path); - return resources.InitFonts(); + bool success = resources.InitFonts(); + if (m_options->m_fontAddCustom.IsSet()) { + success = success && resources.AddCustom(m_options->m_fontAddCustom.GetValue()); + } + if (m_options->m_font.IsSet()) { + success = success && this->SetFont(m_options->m_font.GetValue()); + } + if (m_options->m_fontFallback.IsSet()) { + success = success && resources.SetFallback(m_options->m_fontFallback.GetStrValue()); + } + if (m_options->m_fontLoadAll.IsSet()) { + success = success && resources.LoadAll(); + } + return success; } bool Toolkit::SetFont(const std::string &fontName) { Resources &resources = m_doc.GetResourcesForModification(); - const bool ok = resources.SetFont(fontName); + const bool ok = resources.SetCurrentFont(fontName, true); if (!ok) LogWarning("Font '%s' could not be loaded", fontName.c_str()); return ok; } @@ -152,6 +164,9 @@ bool Toolkit::SetOutputTo(std::string const &outputTo) else if (outputTo == "mei-pb") { m_outputTo = MEI; } + else if (outputTo == "mei-facs") { + m_outputTo = MEI; + } else if (outputTo == "midi") { m_outputTo = MIDI; } @@ -420,26 +435,24 @@ bool Toolkit::LoadZipFile(const std::string &filename) bool Toolkit::LoadZipData(const std::vector &bytes) { #ifndef NO_MXL_SUPPORT - miniz_cpp::zip_file file(bytes); - - std::string filename; - // Look for the meta file in the zip - for (miniz_cpp::zip_info &member : file.infolist()) { - if (member.filename == "META-INF/container.xml") { - std::string container = file.read(member.filename); - // Find the file name with an xpath query - pugi::xml_document doc; - doc.load_buffer(container.c_str(), container.size()); - pugi::xml_node root = doc.first_child(); - pugi::xml_node rootfile = root.select_node("/container/rootfiles/rootfile").node(); - filename = rootfile.attribute("full-path").value(); - break; - } + ZipFileReader zipFileReader; + zipFileReader.Load(bytes); + + const std::string metaInf = "META-INF/container.xml"; + if (!zipFileReader.HasFile(metaInf)) { + LogError("No '%s' file to load found in the archive", metaInf.c_str()); + return false; } + std::string containerXml = zipFileReader.ReadTextFile("META-INF/container.xml"); + pugi::xml_document doc; + doc.load_buffer(containerXml.c_str(), containerXml.size()); + pugi::xml_node root = doc.first_child(); + pugi::xml_node rootfile = root.select_node("/container/rootfiles/rootfile").node(); + std::string filename = rootfile.attribute("full-path").value(); if (!filename.empty()) { LogInfo("Loading file '%s' in the archive", filename.c_str()); - return this->LoadData(file.read(filename)); + return this->LoadData(zipFileReader.ReadTextFile(filename)); } else { LogError("No file to load found in the archive"); @@ -749,9 +762,14 @@ bool Toolkit::LoadData(const std::string &data) breaks = BREAKS_none; } - // Always set breaks to 'none' with Transcription or Facs rendering - rendering them differenty requires the MEI - // to be converted - if (m_doc.GetType() == Transcription || m_doc.GetType() == Facs) breaks = BREAKS_none; + // Always set breaks to 'none' with Facs rendering + if (m_doc.IsFacs()) breaks = BREAKS_none; + + // Always set breaks to 'none' or 'encoded' with Transcription rendering + // rendering them differenty requires the MEI + if (m_doc.IsTranscription()) { + breaks = (m_doc.HasFacsimile()) ? BREAKS_encoded : BREAKS_none; + } if (breaks != BREAKS_none) { if (input->GetLayoutInformation() == LAYOUT_ENCODED @@ -784,6 +802,10 @@ bool Toolkit::LoadData(const std::string &data) } } + if (m_doc.IsTranscription() && m_doc.HasFacsimile()) { + m_doc.SyncFromFacsimileDoc(); + } + delete input; m_view.SetDoc(&m_doc); @@ -816,6 +838,7 @@ std::string Toolkit::GetMEI(const std::string &jsonOptions) std::string firstMeasure; std::string lastMeasure; std::string mdiv; + bool generateFacs = false; jsonxx::Object json; @@ -838,6 +861,7 @@ std::string Toolkit::GetMEI(const std::string &jsonOptions) if (json.has("firstMeasure")) firstMeasure = json.get("firstMeasure"); if (json.has("lastMeasure")) lastMeasure = json.get("lastMeasure"); if (json.has("mdiv")) mdiv = json.get("mdiv"); + if (json.has("generateFacs")) generateFacs = json.get("generateFacs"); } } @@ -873,6 +897,16 @@ std::string Toolkit::GetMEI(const std::string &jsonOptions) if (!lastMeasure.empty()) meioutput.SetLastMeasure(lastMeasure); if (!mdiv.empty()) meioutput.SetMdiv(mdiv); + if (generateFacs) { + if (meioutput.HasFilter() || !scoreBased || (m_options->m_breaks.GetValue() != BREAKS_encoded) + || m_doc.HasSelection()) { + LogError("Generating facsimile is only possible with all pages, encoded breaks, score-based output and " + "without selection."); + return ""; + } + m_doc.SyncToFacsimileDoc(); + } + std::string output = meioutput.GetOutput(); if (hadSelection) m_doc.ReactivateSelection(false); @@ -1104,8 +1138,24 @@ bool Toolkit::SetOptions(const std::string &jsonOptions) m_options->Sync(); + this->SetLocale(); + // Forcing font resource to be reset if the font is given in the options - if (json.has("font")) this->SetFont(m_options->m_font.GetValue()); + if (json.has("fontAddCustom")) { + Resources &resources = m_doc.GetResourcesForModification(); + resources.AddCustom(m_options->m_fontAddCustom.GetValue()); + } + if (json.has("font")) { + this->SetFont(m_options->m_font.GetValue()); + } + if (json.has("fontFallback")) { + Resources &resources = m_doc.GetResourcesForModification(); + resources.SetFallback(m_options->m_fontFallback.GetStrValue()); + } + if (json.has("fontLoadAll")) { + Resources &resources = m_doc.GetResourcesForModification(); + resources.LoadAll(); + } return true; } @@ -1402,7 +1452,7 @@ void Toolkit::RedoLayout(const std::string &jsonOptions) this->ResetLogBuffer(); - if ((this->GetPageCount() == 0) || (m_doc.GetType() == Transcription) || (m_doc.GetType() == Facs)) { + if ((this->GetPageCount() == 0) || m_doc.IsTranscription() || m_doc.IsFacs()) { LogWarning("No data to re-layout"); return; } @@ -1465,7 +1515,7 @@ bool Toolkit::RenderToDeviceContext(int pageNo, DeviceContext *deviceContext) if (adjustWidth || (breaks == BREAKS_none)) width = m_doc.GetAdjustedDrawingPageWidth(); if (adjustHeight || (breaks == BREAKS_none)) height = m_doc.GetAdjustedDrawingPageHeight(); - if (m_doc.GetType() == Transcription) { + if (m_doc.IsTranscription()) { width = m_doc.GetAdjustedDrawingPageWidth(); height = m_doc.GetAdjustedDrawingPageHeight(); } @@ -1488,7 +1538,7 @@ bool Toolkit::RenderToDeviceContext(int pageNo, DeviceContext *deviceContext) deviceContext->SetWidth(width); deviceContext->SetHeight(height); - if (m_doc.GetType() == Facs) { + if (m_doc.IsFacs()) { deviceContext->SetWidth(m_doc.GetFacsimile()->GetMaxX()); deviceContext->SetHeight(m_doc.GetFacsimile()->GetMaxY()); } @@ -1524,7 +1574,7 @@ std::string Toolkit::RenderToSVG(int pageNo, bool xmlDeclaration) svg.SetMMOutput(true); } - if (m_doc.GetType() == Facs) { + if (m_doc.IsFacs()) { svg.SetFacsimile(true); } @@ -2105,6 +2155,21 @@ std::string Toolkit::ConvertHumdrumToMIDI(const std::string &humdrumData) #endif } +void Toolkit::SetLocale() +{ + if (m_options->m_setLocale.GetValue() && !m_previousLocale) { + // Required for proper formatting, e.g., in StringFormat (see vrv.cpp) + m_previousLocale = std::locale::global(std::locale::classic()); + } +} + +void Toolkit::ResetLocale() +{ + if (m_previousLocale) { + std::locale::global(*m_previousLocale); + } +} + void Toolkit::InitClock() { #ifndef NO_RUNTIME diff --git a/src/verticalaligner.cpp b/src/verticalaligner.cpp index 0bf5b3ed82e..60cbad6b3b7 100644 --- a/src/verticalaligner.cpp +++ b/src/verticalaligner.cpp @@ -48,7 +48,6 @@ void SystemAligner::Reset() m_spacingTypes.clear(); m_system = NULL; - ArrayOfObjects &children = this->GetChildrenForModification(); m_bottomAlignment = new StaffAlignment(); m_bottomAlignment->SetStaff(NULL, NULL, this->GetAboveSpacingType(NULL)); m_bottomAlignment->SetParentSystem(this->GetSystem()); diff --git a/src/view.cpp b/src/view.cpp index f9ee518f1eb..666db7ba544 100644 --- a/src/view.cpp +++ b/src/view.cpp @@ -74,7 +74,7 @@ void View::SetPage(int pageIdx, bool doLayout) m_doc->ScoreDefSetCurrentDoc(); // if we once deal with multiple views, it would be better // to redo the layout only when necessary? - if (m_doc->GetType() == Transcription || m_doc->GetType() == Facs) { + if (m_doc->IsTranscription() || m_doc->IsFacs()) { m_currentPage->LayOutTranscription(); } else { diff --git a/src/view_beam.cpp b/src/view_beam.cpp index 1be6bdbe31c..34d04de9f06 100644 --- a/src/view_beam.cpp +++ b/src/view_beam.cpp @@ -49,6 +49,14 @@ void View::DrawBeam(DeviceContext *dc, LayerElement *element, Layer *layer, Staf return; } + if (beam->GetFirst(FTREM)) { + // If there is a fTrem we ignore the beam and just handle its children + dc->StartGraphic(element, "", element->GetID()); + this->DrawLayerChildren(dc, beam, layer, staff, measure); + dc->EndGraphic(element, this); + return; + } + beam->m_beamSegment.InitCoordRefs(beam->GetElementCoords()); data_BEAMPLACE initialPlace = beam->GetPlace(); @@ -150,8 +158,8 @@ void View::DrawFTremSegment(DeviceContext *dc, Staff *staff, FTrem *fTrem) secondElement->m_x += (m_doc->GetDrawingStemWidth(staff->m_drawingStaffSize)) / 2; } - // Number of bars to draw - const int allBars = fTrem->GetBeams(); + // Number of beams to draw + const int allBars = fTrem->HasBeams() ? fTrem->GetBeams() : fTrem->GetUnitdur() - DURATION_4; int floatingBars = fTrem->HasBeamsFloat() ? fTrem->GetBeamsFloat() : 0; int fullBars = allBars - floatingBars; diff --git a/src/view_control.cpp b/src/view_control.cpp index e491dda4abb..9a0065f0ce9 100644 --- a/src/view_control.cpp +++ b/src/view_control.cpp @@ -1063,7 +1063,10 @@ void View::DrawTrillExtension( } // Adjust the x2 for endid - if (!trill->GetEnd()->Is(TIMESTAMP_ATTR)) x2 -= trill->GetEnd()->GetDrawingRadius(m_doc); + if (!trill->GetEnd()->Is(TIMESTAMP_ATTR)) { + x2 -= trill->GetEnd()->GetDrawingRadius(m_doc); + } + x2 -= m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize); int length = x2 - x1; Point orig(x1, y); diff --git a/src/view_element.cpp b/src/view_element.cpp index c970d76b031..3c698c7add7 100644 --- a/src/view_element.cpp +++ b/src/view_element.cpp @@ -301,12 +301,12 @@ void View::DrawAccid(DeviceContext *dc, LayerElement *element, Layer *layer, Sta if (notationType == NOTATIONTYPE_neume) { int rotateOffset = 0; - if ((m_doc->GetType() == Facs) && (staff->GetDrawingRotate() != 0)) { + if (m_doc->IsFacs() && (staff->GetDrawingRotate() != 0)) { double deg = staff->GetDrawingRotate(); int xDiff = x - staff->GetDrawingX(); rotateOffset = int(xDiff * tan(deg * M_PI / 180.0)); } - if (accid->HasFacs() && (m_doc->GetType() == Facs)) { + if (accid->HasFacs() && m_doc->IsFacs()) { y = ToLogicalY(y); } y -= rotateOffset; @@ -653,7 +653,7 @@ void View::DrawClef(DeviceContext *dc, LayerElement *element, Layer *layer, Staf } int x, y; - if (m_doc->GetType() == Facs && clef->HasFacs()) { + if (m_doc->IsFacs() && clef->HasFacs()) { y = ToLogicalY(staff->GetDrawingY()); x = clef->GetDrawingX(); } @@ -671,7 +671,7 @@ void View::DrawClef(DeviceContext *dc, LayerElement *element, Layer *layer, Staf if (clef->HasLine()) { y -= m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) * (staff->m_drawingLines - clef->GetLine()); - if ((m_doc->GetType() == Facs) && (staff->GetDrawingRotate() != 0)) { + if (m_doc->IsFacs() && (staff->GetDrawingRotate() != 0)) { double deg = staff->GetDrawingRotate(); int xDiff = x - staff->GetDrawingX(); y -= int(xDiff * tan(deg * M_PI / 180.0)); @@ -687,9 +687,16 @@ void View::DrawClef(DeviceContext *dc, LayerElement *element, Layer *layer, Staf dc->StartGraphic(element, "", element->GetID()); + std::string previousFont = ""; + if (clef->HasFontname()) { + Resources &resources = m_doc->GetResourcesForModification(); + previousFont = resources.GetCurrentFont(); + resources.SetCurrentFont(clef->GetFontname()); + } + this->DrawSmuflCode(dc, x, y, sym, staff->m_drawingStaffSize, false); - if ((m_doc->GetType() == Facs) && element->HasFacs()) { + if (m_doc->IsFacs() && element->HasFacs()) { const int noteHeight = (int)(m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) / NOTE_HEIGHT_TO_STAFF_SIZE_RATIO); const int noteWidth @@ -705,6 +712,11 @@ void View::DrawClef(DeviceContext *dc, LayerElement *element, Layer *layer, Staf // Possibly draw enclosing brackets this->DrawClefEnclosing(dc, clef, staff, sym, x, y); + if (!previousFont.empty()) { + Resources &resources = m_doc->GetResourcesForModification(); + resources.SetCurrentFont(previousFont); + } + dc->EndGraphic(element, this); } @@ -748,7 +760,7 @@ void View::DrawCustos(DeviceContext *dc, LayerElement *element, Layer *layer, St const int sym = custos->GetCustosGlyph(staff->m_drawingNotationType); int x, y; - if (custos->HasFacs() && m_doc->GetType() == Facs) { + if (custos->HasFacs() && m_doc->IsFacs()) { x = custos->GetDrawingX(); // Recalculate y from pitch to prevent visual/meaning mismatch Clef *clef = layer->GetClef(element); @@ -777,7 +789,7 @@ void View::DrawCustos(DeviceContext *dc, LayerElement *element, Layer *layer, St y -= m_doc->GetDrawingUnit(staff->m_drawingStaffSize); } - if ((m_doc->GetType() == Facs) && (staff->GetDrawingRotate() != 0)) { + if (m_doc->IsFacs() && (staff->GetDrawingRotate() != 0)) { double deg = staff->GetDrawingRotate(); int xDiff = x - staff->GetDrawingX(); y -= int(xDiff * tan(deg * M_PI / 180.0)); @@ -785,7 +797,7 @@ void View::DrawCustos(DeviceContext *dc, LayerElement *element, Layer *layer, St this->DrawSmuflCode(dc, x, y, sym, staff->m_drawingStaffSize, false, true); - if ((m_doc->GetType() == Facs) && element->HasFacs()) { + if (m_doc->IsFacs() && element->HasFacs()) { const int noteHeight = (int)(m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) / 2); const int noteWidth = (int)(m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) / 1.4); @@ -1123,6 +1135,13 @@ void View::DrawMeterSig(DeviceContext *dc, MeterSig *meterSig, Staff *staff, int dc->StartGraphic(meterSig, "", meterSig->GetID()); + std::string previousFont; + if (meterSig->HasFontname()) { + Resources &resources = m_doc->GetResourcesForModification(); + previousFont = resources.GetCurrentFont(); + resources.SetCurrentFont(meterSig->GetFontname()); + } + int y = staff->GetDrawingY() - m_doc->GetDrawingUnit(staff->m_drawingStaffSize) * (staff->m_drawingLines - 1); int x = meterSig->GetDrawingX() + horizOffset; @@ -1133,7 +1152,7 @@ void View::DrawMeterSig(DeviceContext *dc, MeterSig *meterSig, Staff *staff, int x += m_doc->GetGlyphWidth(enclosingFront, glyphSize, false); } - if (meterSig->HasSym()) { + if (meterSig->HasSym() || meterSig->HasGlyphNum() || meterSig->HasGlyphName()) { const char32_t code = meterSig->GetSymbolGlyph(); this->DrawSmuflCode(dc, x, y, code, glyphSize, false); x += m_doc->GetGlyphWidth(code, glyphSize, false); @@ -1149,6 +1168,11 @@ void View::DrawMeterSig(DeviceContext *dc, MeterSig *meterSig, Staff *staff, int this->DrawSmuflCode(dc, x, y, enclosingBack, glyphSize, false); } + if (!previousFont.empty()) { + Resources &resources = m_doc->GetResourcesForModification(); + resources.SetCurrentFont(previousFont); + } + dc->EndGraphic(meterSig, this); } @@ -1464,8 +1488,6 @@ void View::DrawNote(DeviceContext *dc, LayerElement *element, Layer *layer, Staf } drawingDur = DUR_4; } - drawingDur = ((note->GetColored() == BOOLEAN_true) && drawingDur > DUR_1) ? (drawingDur + 1) : drawingDur; - if (drawingDur < DUR_BR) { this->DrawMaximaToBrevis(dc, noteY, element, layer, staff); } @@ -1473,7 +1495,15 @@ void View::DrawNote(DeviceContext *dc, LayerElement *element, Layer *layer, Staf // Whole notes char32_t fontNo; if (note->GetColored() == BOOLEAN_true) { - fontNo = (drawingDur == DUR_1) ? SMUFL_E0FA_noteheadWholeFilled : SMUFL_E0A3_noteheadHalf; + if (DUR_1 == drawingDur) { + fontNo = SMUFL_E0FA_noteheadWholeFilled; + } + else if (DUR_2 == drawingDur) { + fontNo = SMUFL_E0FB_noteheadHalfFilled; + } + else { + fontNo = SMUFL_E0A3_noteheadHalf; + } } else { fontNo = note->GetNoteheadGlyph(drawingDur); @@ -1770,7 +1800,7 @@ void View::DrawSyl(DeviceContext *dc, LayerElement *element, Layer *layer, Staff TextDrawingParams params; params.m_x = syl->GetDrawingX(); params.m_y = syl->GetDrawingY(); - if (m_doc->GetType() == Facs) { + if (m_doc->IsFacs()) { params.m_width = syl->GetDrawingWidth(); params.m_height = syl->GetDrawingHeight(); } @@ -1792,7 +1822,7 @@ void View::DrawSyl(DeviceContext *dc, LayerElement *element, Layer *layer, Staff FontInfo vrvTxt; assert(dc->HasFont()); vrvTxt.SetPointSize(dc->GetFont()->GetPointSize() * m_doc->GetMusicToLyricFontSizeRatio()); - vrvTxt.SetFaceName(m_doc->GetOptions()->m_font.GetValue()); + vrvTxt.SetFaceName(m_doc->GetResources().GetCurrentFont()); std::u32string str; str.push_back(m_doc->GetOptions()->m_lyricElision.GetValue()); bool isFallbackNeeded = (m_doc->GetResources()).IsSmuflFallbackNeeded(str); diff --git a/src/view_graph.cpp b/src/view_graph.cpp index 76bf8ade512..8165042c2a0 100644 --- a/src/view_graph.cpp +++ b/src/view_graph.cpp @@ -276,6 +276,26 @@ void View::DrawEnclosingBrackets(DeviceContext *dc, int x, int y, int height, in horizontalThickness, verticalThickness); } +/* +void View::DrawSmuflCodeWithCustomFont(DeviceContext *dc, const std::string &customFont, int x, int y, char32_t code, + int staffSize, bool dimin, bool setBBGlyph) +{ + if (customFont.empty()) { + this->DrawSmuflCode(dc, x, y, code, staffSize, dimin, setBBGlyph); + return; + } + + Resources &resources = m_doc->GetResourcesForModification(); + const std::string prevFont = resources.GetCurrentFont(); + + resources.SetCurrentFont(customFont); + + DrawSmuflCode(dc, x, y, code, staffSize, dimin, setBBGlyph); + + resources.SetCurrentFont(prevFont); +} +*/ + void View::DrawSmuflCode(DeviceContext *dc, int x, int y, char32_t code, int staffSize, bool dimin, bool setBBGlyph) { assert(dc); diff --git a/src/view_neume.cpp b/src/view_neume.cpp index cbdf0b8c624..971a8bf3304 100644 --- a/src/view_neume.cpp +++ b/src/view_neume.cpp @@ -74,10 +74,10 @@ void View::DrawNc(DeviceContext *dc, LayerElement *element, Layer *layer, Staff struct drawingParams { wchar_t fontNo = SMUFL_E990_chantPunctum; wchar_t fontNoLiq[5] = {}; - float xOffset = 0; - float yOffset = 0; - float xOffsetLiq[5] = { 0, 0, 0, 0, 0 }; - float yOffsetLiq[5] = { 0, 0, 0, 0, 0 }; + double xOffset = 0; + double yOffset = 0; + double xOffsetLiq[5] = { 0, 0, 0, 0, 0 }; + double yOffsetLiq[5] = { 0, 0, 0, 0, 0 }; }; std::vector params; params.push_back(drawingParams()); @@ -204,12 +204,12 @@ void View::DrawNc(DeviceContext *dc, LayerElement *element, Layer *layer, Staff = (int)(m_doc->GetDrawingDoubleUnit(staff->m_drawingStaffSize) / NOTE_WIDTH_TO_STAFF_SIZE_RATIO); int noteY, noteX; int yValue; - if (nc->HasFacs() && (m_doc->GetType() == Facs)) { + if (nc->HasFacs() && m_doc->IsFacs()) { noteY = ToLogicalY(staff->GetDrawingY()); noteX = nc->GetDrawingX(); params.at(0).xOffset = 0; } - else if (neume->HasFacs() && (m_doc->GetType() == Facs)) { + else if (neume->HasFacs() && m_doc->IsFacs()) { noteY = ToLogicalY(staff->GetDrawingY()); noteX = neume->GetDrawingX() + position * noteWidth; } @@ -229,7 +229,7 @@ void View::DrawNc(DeviceContext *dc, LayerElement *element, Layer *layer, Staff } int octaveOffset = (nc->GetOct() - clefOctave) * ((staffSize / 2) * 7); int rotateOffset; - if ((m_doc->GetType() == Facs) && (staff->GetDrawingRotate() != 0)) { + if (m_doc->IsFacs() && (staff->GetDrawingRotate() != 0)) { double deg = staff->GetDrawingRotate(); int xDiff = noteX - staff->GetDrawingX(); rotateOffset = int(xDiff * tan(deg * M_PI / 180.0)); @@ -265,7 +265,7 @@ void View::DrawNc(DeviceContext *dc, LayerElement *element, Layer *layer, Staff } // adjust facsimile values of element based on where it is rendered if necessary - if ((m_doc->GetType() == Facs) && element->HasFacs()) { + if (m_doc->IsFacs() && element->HasFacs()) { FacsimileInterface *fi = element->GetFacsimileInterface(); fi->GetZone()->SetUlx(noteX); fi->GetZone()->SetUly(ToDeviceContextY(yValue)); @@ -380,7 +380,7 @@ void View::DrawDivLine(DeviceContext *dc, LayerElement *element, Layer *layer, S } int x, y; - if ((m_doc->GetType() == Facs) && (divLine->HasFacs())) { + if (m_doc->IsFacs() && (divLine->HasFacs())) { x = divLine->GetDrawingX(); y = ToLogicalY(staff->GetDrawingY()); } @@ -393,7 +393,7 @@ void View::DrawDivLine(DeviceContext *dc, LayerElement *element, Layer *layer, S y -= (m_doc->GetDrawingUnit(staff->m_drawingStaffSize)) * 3; int rotateOffset; - if ((m_doc->GetType() == Facs) && (staff->GetDrawingRotate() != 0)) { + if (m_doc->IsFacs() && (staff->GetDrawingRotate() != 0)) { double deg = staff->GetDrawingRotate(); int xDiff = x - staff->GetDrawingX(); rotateOffset = int(xDiff * tan(deg * M_PI / 180.0)); diff --git a/src/view_page.cpp b/src/view_page.cpp index 7a49126257c..51d8b78be5c 100644 --- a/src/view_page.cpp +++ b/src/view_page.cpp @@ -1238,7 +1238,7 @@ void View::DrawStaff(DeviceContext *dc, Staff *staff, Measure *measure, System * dc->StartGraphic(staff, "", staff->GetID()); - if (m_doc->GetType() == Facs) { + if (m_doc->IsFacs()) { staff->SetFromFacsimile(m_doc); } @@ -1283,7 +1283,7 @@ void View::DrawStaffLines(DeviceContext *dc, Staff *staff, Measure *measure, Sys int j, x1, x2, y1, y2; - if (staff->HasFacs() && (m_doc->GetType() == Facs)) { + if (staff->HasFacs() && m_doc->IsFacs()) { double d = staff->GetDrawingRotate(); x1 = staff->GetDrawingX(); x2 = x1 + staff->GetWidth(); diff --git a/src/view_tab.cpp b/src/view_tab.cpp index ecd12728cae..c1172885fb7 100644 --- a/src/view_tab.cpp +++ b/src/view_tab.cpp @@ -98,8 +98,6 @@ void View::DrawTabNote(DeviceContext *dc, LayerElement *element, Layer *layer, S // TabGrp *tabGrp = note->IsTabGrpNote(); // assert(tabGrp); - dc->StartGraphic(note, "", note->GetID()); - int x = element->GetDrawingX(); int y = element->GetDrawingY(); @@ -152,8 +150,6 @@ void View::DrawTabNote(DeviceContext *dc, LayerElement *element, Layer *layer, S // Draw children (nothing yet) this->DrawLayerChildren(dc, note, layer, staff, measure); - - dc->EndGraphic(note, this); } void View::DrawTabDurSym(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure) diff --git a/src/view_text.cpp b/src/view_text.cpp index 2d2839dd935..ff281247add 100644 --- a/src/view_text.cpp +++ b/src/view_text.cpp @@ -123,7 +123,7 @@ void View::DrawDynamString(DeviceContext *dc, const std::u32string &str, TextDra std::u32string smuflStr = Dynam::GetSymbolStr(token.first, singleGlyphs); FontInfo vrvTxt; vrvTxt.SetPointSize(dc->GetFont()->GetPointSize() * m_doc->GetMusicToLyricFontSizeRatio()); - vrvTxt.SetFaceName(m_doc->GetOptions()->m_font.GetValue()); + vrvTxt.SetFaceName(m_doc->GetResources().GetCurrentFont()); bool isFallbackNeeded = (m_doc->GetResources()).IsSmuflFallbackNeeded(smuflStr); vrvTxt.SetSmuflWithFallback(isFallbackNeeded); vrvTxt.SetStyle(FONTSTYLE_normal); @@ -197,7 +197,7 @@ void View::DrawHarmString(DeviceContext *dc, const std::u32string &str, TextDraw FontInfo vrvTxt; vrvTxt.SetPointSize(dc->GetFont()->GetPointSize() * m_doc->GetMusicToLyricFontSizeRatio()); - vrvTxt.SetFaceName(m_doc->GetOptions()->m_font.GetValue()); + vrvTxt.SetFaceName(m_doc->GetResources().GetCurrentFont()); bool isFallbackNeeded = (m_doc->GetResources()).IsSmuflFallbackNeeded(smuflAccid); vrvTxt.SetSmuflWithFallback(isFallbackNeeded); dc->SetFont(&vrvTxt); @@ -292,7 +292,7 @@ void View::DrawLyricString( FontInfo vrvTxt; vrvTxt.SetPointSize(dc->GetFont()->GetPointSize() * m_doc->GetMusicToLyricFontSizeRatio()); - vrvTxt.SetFaceName(m_doc->GetOptions()->m_font.GetValue()); + vrvTxt.SetFaceName(m_doc->GetResources().GetCurrentFont()); std::u32string elision; elision.push_back(m_doc->GetOptions()->m_lyricElision.GetValue()); bool isFallbackNeeded = (m_doc->GetResources()).IsSmuflFallbackNeeded(elision); @@ -407,7 +407,7 @@ void View::DrawRend(DeviceContext *dc, Rend *rend, TextDrawingParams ¶ms) // Because we do not have the string at this stage we rely only on the selected font // This means fallback will not work for missing glyphs within rendFont.SetSmuflWithFallback(false); - rendFont.SetFaceName(m_doc->GetOptions()->m_font.GetValue()); + rendFont.SetFaceName(m_doc->GetResources().GetCurrentFont()); int pointSize = (rendFont.GetPointSize() != 0) ? rendFont.GetPointSize() : params.m_pointSize; rendFont.SetPointSize(pointSize * m_doc->GetMusicToLyricFontSizeRatio()); customFont = true; @@ -619,7 +619,7 @@ void View::DrawSymbol(DeviceContext *dc, Symbol *symbol, TextDrawingParams ¶ if (symbol->HasGlyphAuth() && symbol->GetGlyphAuth() == "smufl") { bool isFallbackNeeded = (m_doc->GetResources()).IsSmuflFallbackNeeded(str); symbolFont.SetSmuflWithFallback(isFallbackNeeded); - symbolFont.SetFaceName(m_doc->GetOptions()->m_font.GetValue()); + symbolFont.SetFaceName(m_doc->GetResources().GetCurrentFont()); int pointSize = (symbolFont.GetPointSize() != 0) ? symbolFont.GetPointSize() : params.m_pointSize; symbolFont.SetPointSize(pointSize * m_doc->GetMusicToLyricFontSizeRatio()); } diff --git a/tools/c_wrapper.cpp b/tools/c_wrapper.cpp index a4023388046..10e32fd86b2 100644 --- a/tools/c_wrapper.cpp +++ b/tools/c_wrapper.cpp @@ -115,6 +115,19 @@ const char *vrvToolkit_getHumdrum(void *tkPtr) return buffer; } +bool vrvToolkit_getHumdrumFile(void *tkPtr, const char *filename) +{ + Toolkit *tk = static_cast(tkPtr); + return tk->GetHumdrumFile(filename); +} + +const char *vrvToolkit_getID(void *tkPtr) +{ + Toolkit *tk = static_cast(tkPtr); + tk->SetCString(tk->GetID()); + return tk->GetCString(); +} + const char *vrvToolkit_convertHumdrumToHumdrum(void *tkPtr, const char *humdrumData) { Toolkit *tk = static_cast(tkPtr); @@ -192,6 +205,19 @@ int vrvToolkit_getPageWithElement(void *tkPtr, const char *xmlId) return tk->GetPageWithElement(xmlId); } +const char *vrvToolkit_getResourcePath(void *tkPtr) +{ + Toolkit *tk = static_cast(tkPtr); + tk->SetCString(tk->GetResourcePath()); + return tk->GetCString(); +} + +int vrvToolkit_getScale(void *tkPtr) +{ + Toolkit *tk = static_cast(tkPtr); + return tk->GetScale(); +} + double vrvToolkit_getTimeForElement(void *tkPtr, const char *xmlId) { Toolkit *tk = static_cast(tkPtr); @@ -218,6 +244,12 @@ bool vrvToolkit_loadData(void *tkPtr, const char *data) return tk->LoadData(data); } +bool vrvToolkit_loadFile(void *tkPtr, const char *filename) +{ + Toolkit *tk = static_cast(tkPtr); + return tk->LoadFile(filename); +} + bool vrvToolkit_loadZipDataBase64(void *tkPtr, const char *data) { Toolkit *tk = static_cast(tkPtr); @@ -256,13 +288,25 @@ const char *vrvToolkit_renderToExpansionMap(void *tkPtr) return tk->GetCString(); } -const char *vrvToolkit_renderToMIDI(void *tkPtr, const char *c_options) +bool vrvToolkit_renderToExpansionMapFile(void *tkPtr, const char *filename) +{ + Toolkit *tk = static_cast(tkPtr); + return tk->RenderToExpansionMapFile(filename); +} + +const char *vrvToolkit_renderToMIDI(void *tkPtr) { Toolkit *tk = static_cast(tkPtr); tk->SetCString(tk->RenderToMIDI()); return tk->GetCString(); } +bool vrvToolkit_renderToMIDIFile(void *tkPtr, const char *filename) +{ + Toolkit *tk = static_cast(tkPtr); + return tk->RenderToMIDIFile(filename); +} + const char *vrvToolkit_renderToPAE(void *tkPtr) { Toolkit *tk = static_cast(tkPtr); @@ -270,6 +314,12 @@ const char *vrvToolkit_renderToPAE(void *tkPtr) return tk->GetCString(); } +bool vrvToolkit_renderToPAEFile(void *tkPtr, const char *filename) +{ + Toolkit *tk = static_cast(tkPtr); + return tk->RenderToPAEFile(filename); +} + const char *vrvToolkit_renderToSVG(void *tkPtr, int page_no, bool xmlDeclaration) { Toolkit *tk = static_cast(tkPtr); @@ -277,6 +327,12 @@ const char *vrvToolkit_renderToSVG(void *tkPtr, int page_no, bool xmlDeclaration return tk->GetCString(); } +bool vrvToolkit_renderToSVGFile(void *tkPtr, const char *filename, int pageNo) +{ + Toolkit *tk = static_cast(tkPtr); + return tk->RenderToSVGFile(filename, pageNo); +} + const char *vrvToolkit_renderToTimemap(void *tkPtr, const char *c_options) { Toolkit *tk = static_cast(tkPtr); @@ -284,6 +340,12 @@ const char *vrvToolkit_renderToTimemap(void *tkPtr, const char *c_options) return tk->GetCString(); } +bool vrvToolkit_renderToTimemapFile(void *tkPtr, const char *filename, const char *c_options) +{ + Toolkit *tk = static_cast(tkPtr); + return tk->RenderToTimemapFile(filename, c_options); +} + void vrvToolkit_resetOptions(void *tkPtr) { Toolkit *tk = static_cast(tkPtr); @@ -296,18 +358,48 @@ void vrvToolkit_resetXmlIdSeed(void *tkPtr, int seed) tk->ResetXmlIdSeed(seed); } +bool vrvToolkit_saveFile(void *tkPtr, const char *filename, const char *c_options) +{ + Toolkit *tk = static_cast(tkPtr); + return tk->SaveFile(filename, c_options); +} + bool vrvToolkit_select(void *tkPtr, const char *selection) { Toolkit *tk = static_cast(tkPtr); return tk->Select(selection); } +bool vrvToolkit_setInputFrom(void *tkPtr, const char *inputFrom) +{ + Toolkit *tk = static_cast(tkPtr); + return tk->SetInputFrom(inputFrom); +} + bool vrvToolkit_setOptions(void *tkPtr, const char *options) { Toolkit *tk = static_cast(tkPtr); return tk->SetOptions(options); } +bool vrvToolkit_setOutputTo(void *tkPtr, const char *outputTo) +{ + Toolkit *tk = static_cast(tkPtr); + return tk->SetOutputTo(outputTo); +} + +bool vrvToolkit_setResourcePath(void *tkPtr, const char *path) +{ + Toolkit *tk = static_cast(tkPtr); + return tk->SetResourcePath(path); +} + +bool vrvToolkit_setScale(void *tkPtr, int scale) +{ + Toolkit *tk = static_cast(tkPtr); + return tk->SetScale(scale); +} + const char *vrvToolkit_validatePAE(void *tkPtr, const char *data) { Toolkit *tk = static_cast(tkPtr); @@ -315,4 +407,11 @@ const char *vrvToolkit_validatePAE(void *tkPtr, const char *data) return tk->GetCString(); } +const char *vrvToolkit_validatePAEFile(void *tkPtr, const char *filename) +{ + Toolkit *tk = static_cast(tkPtr); + tk->SetCString(tk->ValidatePAEFile(filename)); + return tk->GetCString(); +} + } // extern C diff --git a/tools/c_wrapper.h b/tools/c_wrapper.h index 21ef1b7db7b..9b221a59828 100644 --- a/tools/c_wrapper.h +++ b/tools/c_wrapper.h @@ -21,6 +21,7 @@ void *vrvToolkit_constructorResourcePath(const char *resourcePath); void vrvToolkit_destructor(void *tkPtr); bool vrvToolkit_edit(void *tkPtr, const char *editorAction); +const char *vrvToolkit_editInfo(void *tkPtr); const char *vrvToolkit_getAvailableOptions(void *tkPtr); const char *vrvToolkit_getDefaultOptions(void *tkPtr); const char *vrvToolkit_getDescriptiveFeatures(void *tkPtr, const char *options); @@ -28,6 +29,8 @@ const char *vrvToolkit_getElementAttr(void *tkPtr, const char *xmlId); const char *vrvToolkit_getElementsAtTime(void *tkPtr, int millisec); const char *vrvToolkit_getExpansionIdsForElement(void *tkPtr, const char *xmlId); const char *vrvToolkit_getHumdrum(void *tkPtr); +bool vrvToolkit_getHumdrumFile(void *tkPtr, const char *filename); +const char *vrvToolkit_getID(void *tkPtr); const char *vrvToolkit_convertHumdrumToHumdrum(void *tkPtr, const char *humdrumData); const char *vrvToolkit_convertHumdrumToMIDI(void *tkPtr, const char *humdrumData); const char *vrvToolkit_convertMEIToHumdrum(void *tkPtr, const char *meiData); @@ -39,24 +42,39 @@ const char *vrvToolkit_getOptions(void *tkPtr); const char *vrvToolkit_getOptionUsageString(void *tkPtr); int vrvToolkit_getPageCount(void *tkPtr); int vrvToolkit_getPageWithElement(void *tkPtr, const char *xmlId); +const char *vrvToolkit_getResourcePath(void *tkPtr); +int vrvToolkit_getScale(void *tkPtr); double vrvToolkit_getTimeForElement(void *tkPtr, const char *xmlId); +const char *vrvToolkit_getTimesForElement(void *tkPtr, const char *xmlId); const char *vrvToolkit_getVersion(void *tkPtr); bool vrvToolkit_loadData(void *tkPtr, const char *data); +bool vrvToolkit_loadFile(void *tkPtr, const char *filename); bool vrvToolkit_loadZipDataBase64(void *tkPtr, const char *data); bool vrvToolkit_loadZipDataBuffer(void *tkPtr, const unsigned char *data, int length); void vrvToolkit_redoLayout(void *tkPtr, const char *c_options); void vrvToolkit_redoPagePitchPosLayout(void *tkPtr); const char *vrvToolkit_renderData(void *tkPtr, const char *data, const char *options); const char *vrvToolkit_renderToExpansionMap(void *tkPtr); -const char *vrvToolkit_renderToMIDI(void *tkPtr, const char *c_options); +bool vrvToolkit_renderToExpansionMapFile(void *tkPtr, const char *filename); +const char *vrvToolkit_renderToMIDI(void *tkPtr); +bool vrvToolkit_renderToMIDIFile(void *tkPtr, const char *filename); const char *vrvToolkit_renderToPAE(void *tkPtr); +bool vrvToolkit_renderToPAEFile(void *tkPtr, const char *filename); const char *vrvToolkit_renderToSVG(void *tkPtr, int page_no, bool xmlDeclaration); +bool vrvToolkit_renderToSVGFile(void *tkPtr, const char *filename, int pageNo); const char *vrvToolkit_renderToTimemap(void *tkPtr, const char *c_options); +bool vrvToolkit_renderToTimemapFile(void *tkPtr, const char *filename, const char *c_options); void vrvToolkit_resetOptions(void *tkPtr); void vrvToolkit_resetXmlIdSeed(void *tkPtr, int seed); +bool vrvToolkit_saveFile(void *tkPtr, const char *filename, const char *c_options); bool vrvToolkit_select(void *tkPtr, const char *selection); +bool vrvToolkit_setInputFrom(void *tkPtr, const char *inputFrom); bool vrvToolkit_setOptions(void *tkPtr, const char *options); +bool vrvToolkit_setOutputTo(void *tkPtr, const char *outputTo); +bool vrvToolkit_setResourcePath(void *tkPtr, const char *path); +bool vrvToolkit_setScale(void *tkPtr, int scale); const char *vrvToolkit_validatePAE(void *tkPtr, const char *data); +const char *vrvToolkit_validatePAEFile(void *tkPtr, const char *filename); #ifdef __cplusplus } // extern C diff --git a/tools/main.cpp b/tools/main.cpp index 6f5aba3d793..a57880eccb3 100644 --- a/tools/main.cpp +++ b/tools/main.cpp @@ -72,6 +72,12 @@ bool optionExists(const std::string &option, int argc, char **argv, std::string return false; } +option optionStruct(vrv::Option *option, const std::map &optionNames) +{ + return { optionNames.at(option).c_str(), option->IsArgumentRequired() ? required_argument : no_argument, 0, + option->GetShortOption() }; +} + int main(int argc, char **argv) { std::string infile; @@ -89,18 +95,34 @@ int main(int argc, char **argv) // The fonts will be loaded later with Resources::InitFonts() vrv::Toolkit toolkit(false); + vrv::Options *options = toolkit.GetOptionsObj(); + + // map storing lower-case option names + std::map optionNames + = { { &options->m_allPages, vrv::FromCamelCase(options->m_allPages.GetKey()) }, + { &options->m_inputFrom, vrv::FromCamelCase(options->m_inputFrom.GetKey()) }, + { &options->m_help, vrv::FromCamelCase(options->m_help.GetKey()) }, + { &options->m_logLevel, vrv::FromCamelCase(options->m_logLevel.GetKey()) }, + { &options->m_outfile, vrv::FromCamelCase(options->m_outfile.GetKey()) }, + { &options->m_page, vrv::FromCamelCase(options->m_page.GetKey()) }, + { &options->m_resourcePath, vrv::FromCamelCase(options->m_resourcePath.GetKey()) }, + { &options->m_scale, vrv::FromCamelCase(options->m_scale.GetKey()) }, + { &options->m_outputTo, vrv::FromCamelCase(options->m_outputTo.GetKey()) }, + { &options->m_version, vrv::FromCamelCase(options->m_version.GetKey()) }, + { &options->m_xmlIdSeed, vrv::FromCamelCase(options->m_xmlIdSeed.GetKey()) } }; + static struct option base_options[] = { // - { "all-pages", no_argument, 0, 'a' }, // - { "input-from", required_argument, 0, 'f' }, // - { "help", required_argument, 0, 'h' }, // - { "log-level", required_argument, 0, 'l' }, // - { "outfile", required_argument, 0, 'o' }, // - { "page", required_argument, 0, 'p' }, // - { "resources", required_argument, 0, 'r' }, // - { "scale", required_argument, 0, 's' }, // - { "output-to", required_argument, 0, 't' }, // - { "version", no_argument, 0, 'v' }, // - { "xml-id-seed", required_argument, 0, 'x' }, // + optionStruct(&options->m_allPages, optionNames), // + optionStruct(&options->m_inputFrom, optionNames), // + optionStruct(&options->m_help, optionNames), // + optionStruct(&options->m_logLevel, optionNames), // + optionStruct(&options->m_outfile, optionNames), // + optionStruct(&options->m_page, optionNames), // + optionStruct(&options->m_resourcePath, optionNames), // + optionStruct(&options->m_scale, optionNames), // + optionStruct(&options->m_outputTo, optionNames), // + optionStruct(&options->m_version, optionNames), // + optionStruct(&options->m_xmlIdSeed, optionNames), // // standard input - long options only or - as filename { "stdin", no_argument, 0, 'z' }, // { 0, 0, 0, 0 } @@ -108,7 +130,6 @@ int main(int argc, char **argv) int baseSize = sizeof(base_options) / sizeof(option); - vrv::Options *options = toolkit.GetOptionsObj(); const vrv::MapOfStrOptions *params = options->GetItems(); int mapSize = (int)params->size(); @@ -238,6 +259,8 @@ int main(int argc, char **argv) } options->Sync(); + toolkit.SetLocale(); + if (show_version) { display_version(); exit(0); @@ -272,18 +295,12 @@ int main(int argc, char **argv) exit(1); } - // Load a specified font - if (!toolkit.SetOptions(vrv::StringFormat("{\"font\": \"%s\" }", options->m_font.GetValue().c_str()))) { - std::cerr << "Font '" << options->m_font.GetValue() << "' could not be loaded." << std::endl; - exit(1); - } - - if ((outformat != "svg") && (outformat != "mei") && (outformat != "mei-basic") && (outformat != "mei-pb") - && (outformat != "midi") && (outformat != "timemap") && (outformat != "expansionmap") - && (outformat != "humdrum") && (outformat != "hum") && (outformat != "pae")) { + const std::vector outformats = { "mei", "mei-basic", "mei-pb", "mei-facs", "svg", "midi", "timemap", + "expansionmap", "humdrum", "hum", "pae" }; + if (std::find(outformats.begin(), outformats.end(), outformat) == outformats.end()) { std::cerr << "Output format (" << outformat - << ") can only be 'mei', 'mei-basic', 'mei-pb', 'svg', 'midi', 'timemap', 'expansionmap', 'humdrum' " - "or 'pae'." + << ") can only be 'mei', 'mei-basic', 'mei-pb', mei-facs', 'svg', 'midi', 'timemap', 'expansionmap', " + "'humdrum', 'hum', or 'pae'." << std::endl; exit(1); } @@ -553,10 +570,12 @@ int main(int argc, char **argv) const char *scoreBased = (outformat == "mei-pb") ? "false" : "true"; const char *basic = (outformat == "mei-basic") ? "true" : "false"; const char *removeIds = (options->m_removeIds.GetValue()) ? "true" : "false"; + const char *generateFacs = (outformat == "mei-facs") ? "true" : "false"; outfile += ".mei"; if (all_pages) { std::string params - = vrv::StringFormat("{'scoreBased': %s, 'basic': %s, 'removeIds': %s}", scoreBased, basic, removeIds); + = vrv::StringFormat("{'scoreBased': %s, 'basic': %s, 'removeIds': %s, 'generateFacs': %s}", scoreBased, + basic, removeIds, generateFacs); if (std_output) { std::string output; std::cout << toolkit.GetMEI(params); @@ -570,7 +589,8 @@ int main(int argc, char **argv) } else { std::string params = vrv::StringFormat( - "{'scoreBased': %s, 'basic': %s, 'pageNo': %d, 'removeIds': %s}", scoreBased, basic, page, removeIds); + "{'scoreBased': %s, 'basic': %s, 'pageNo': %d, 'removeIds': %s, 'generateFacs': %s}", scoreBased, basic, + page, removeIds, generateFacs); if (std_output) { std::cout << toolkit.GetMEI(params); }