LCOV - code coverage report
Current view: top level - src/engraving/playback/metaparsers/internal - symbolsmetaparser.cpp Coverage Total Hit
Test: filtered_coverage.info Lines: 16.3 % 300 49
Test Date: 2026-11-05 04:07:02

            Line data    Source code
       1              : /*
       2              :  * SPDX-License-Identifier: GPL-3.0-only
       3              :  * MuseScore-Studio-CLA-applies
       4              :  *
       5              :  * MuseScore Studio
       6              :  * Music Composition & Notation
       7              :  *
       8              :  * Copyright (C) 2021 MuseScore Limited and others
       9              :  *
      10              :  * This program is free software: you can redistribute it and/or modify
      11              :  * it under the terms of the GNU General Public License version 3 as
      12              :  * published by the Free Software Foundation.
      13              :  *
      14              :  * This program is distributed in the hope that it will be useful,
      15              :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      16              :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      17              :  * GNU General Public License for more details.
      18              :  *
      19              :  * You should have received a copy of the GNU General Public License
      20              :  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
      21              :  */
      22              : 
      23              : #include "symbolsmetaparser.h"
      24              : 
      25              : #include "dom/articulation.h"
      26              : 
      27              : using namespace mu::engraving;
      28              : using namespace muse;
      29              : 
      30            0 : static mpe::ArticulationType textTypeToArticulationType(ArticulationTextType textType)
      31              : {
      32            0 :     switch (textType) {
      33            0 :     case ArticulationTextType::NO_TEXT: return mpe::ArticulationType::Standard;
      34            0 :     case ArticulationTextType::SLAP: return mpe::ArticulationType::Slap;
      35            0 :     case ArticulationTextType::POP: return mpe::ArticulationType::Pop;
      36            0 :     case ArticulationTextType::TD: return mpe::ArticulationType::ThumbDamp;
      37            0 :     case ArticulationTextType::BD: return mpe::ArticulationType::BrushDamp;
      38            0 :     case ArticulationTextType::RT: return mpe::ArticulationType::RingTouch;
      39            0 :     case ArticulationTextType::PL: return mpe::ArticulationType::Pluck;
      40            0 :     case ArticulationTextType::SB: return mpe::ArticulationType::SingingBell;
      41            0 :     case ArticulationTextType::VIB: return mpe::ArticulationType::SingingVibrate;
      42              :     }
      43              : 
      44            0 :     UNREACHABLE;
      45              :     return mpe::ArticulationType::Undefined;
      46              : }
      47              : 
      48         1514 : mpe::ArticulationTypeSet SymbolsMetaParser::symbolToArticulations(SymId symId, OrnamentStyle ornamentStyle)
      49              : {
      50         1514 :     mpe::ArticulationTypeSet types;
      51              : 
      52         1514 :     switch (symId) {
      53            1 :     case SymId::articAccentAbove:
      54              :     case SymId::articAccentBelow:
      55            1 :         types.emplace(mpe::ArticulationType::Accent);
      56            1 :         break;
      57            0 :     case SymId::articAccentStaccatoAbove:
      58              :     case SymId::articAccentStaccatoBelow:
      59            0 :         types.emplace(mpe::ArticulationType::Accent);
      60            0 :         types.emplace(mpe::ArticulationType::Staccato);
      61            0 :         break;
      62            0 :     case SymId::articLaissezVibrerAbove:
      63              :     case SymId::articLaissezVibrerBelow:
      64            0 :         types.emplace(mpe::ArticulationType::LaissezVibrer);
      65            0 :         break;
      66            0 :     case SymId::articMarcatoAbove:
      67              :     case SymId::articMarcatoBelow:
      68            0 :         types.emplace(mpe::ArticulationType::Marcato);
      69            0 :         break;
      70            0 :     case SymId::articMarcatoStaccatoAbove:
      71              :     case SymId::articMarcatoStaccatoBelow:
      72            0 :         types.emplace(mpe::ArticulationType::Marcato);
      73            0 :         types.emplace(mpe::ArticulationType::Staccato);
      74            0 :         break;
      75            0 :     case SymId::articMarcatoTenutoAbove:
      76              :     case SymId::articMarcatoTenutoBelow:
      77            0 :         types.emplace(mpe::ArticulationType::Marcato);
      78            0 :         types.emplace(mpe::ArticulationType::Tenuto);
      79            0 :         break;
      80            0 :     case SymId::articSoftAccentAbove:
      81              :     case SymId::articSoftAccentBelow:
      82            0 :         types.emplace(mpe::ArticulationType::SoftAccent);
      83            0 :         break;
      84            0 :     case SymId::articSoftAccentStaccatoAbove:
      85              :     case SymId::articSoftAccentStaccatoBelow:
      86            0 :         types.emplace(mpe::ArticulationType::SoftAccent);
      87            0 :         types.emplace(mpe::ArticulationType::Staccato);
      88            0 :         break;
      89            0 :     case SymId::articSoftAccentTenutoAbove:
      90              :     case SymId::articSoftAccentTenutoBelow:
      91            0 :         types.emplace(mpe::ArticulationType::SoftAccent);
      92            0 :         types.emplace(mpe::ArticulationType::Tenuto);
      93            0 :         break;
      94            0 :     case SymId::articSoftAccentTenutoStaccatoAbove:
      95              :     case SymId::articSoftAccentTenutoStaccatoBelow:
      96            0 :         types.emplace(mpe::ArticulationType::SoftAccent);
      97            0 :         types.emplace(mpe::ArticulationType::Tenuto);
      98            0 :         types.emplace(mpe::ArticulationType::Staccato);
      99            0 :         break;
     100            1 :     case SymId::articStaccatissimoAbove:
     101              :     case SymId::articStaccatissimoBelow:
     102              :     case SymId::articStaccatissimoStrokeAbove:
     103              :     case SymId::articStaccatissimoStrokeBelow:
     104              :     case SymId::articStaccatissimoWedgeAbove:
     105              :     case SymId::articStaccatissimoWedgeBelow:
     106            1 :         types.emplace(mpe::ArticulationType::Staccatissimo);
     107            1 :         break;
     108            1 :     case SymId::articStaccatoAbove:
     109              :     case SymId::articStaccatoBelow:
     110            1 :         types.emplace(mpe::ArticulationType::Staccato);
     111            1 :         break;
     112            1 :     case SymId::articTenutoAbove:
     113              :     case SymId::articTenutoBelow:
     114            1 :         types.emplace(mpe::ArticulationType::Tenuto);
     115            1 :         break;
     116            0 :     case SymId::articTenutoStaccatoAbove:
     117              :     case SymId::articTenutoStaccatoBelow:
     118            0 :         types.emplace(mpe::ArticulationType::Tenuto);
     119            0 :         types.emplace(mpe::ArticulationType::Staccato);
     120            0 :         break;
     121            0 :     case SymId::articTenutoAccentAbove:
     122              :     case SymId::articTenutoAccentBelow:
     123            0 :         types.emplace(mpe::ArticulationType::Tenuto);
     124            0 :         types.emplace(mpe::ArticulationType::Accent);
     125            0 :         break;
     126            0 :     case SymId::dynamicSforzando:
     127              :     case SymId::dynamicSforzando1:
     128              :     case SymId::dynamicSforzandoPianissimo:
     129              :     case SymId::dynamicSforzandoPiano:
     130              :     case SymId::dynamicSforzato:
     131              :     case SymId::dynamicSforzatoFF:
     132              :     case SymId::dynamicSforzatoPiano:
     133            0 :         types.emplace(mpe::ArticulationType::Subito);
     134            0 :         break;
     135            0 :     case SymId::guitarFadeIn:
     136            0 :         types.emplace(mpe::ArticulationType::FadeIn);
     137            0 :         break;
     138            0 :     case SymId::guitarVolumeSwell:
     139            0 :         types.emplace(mpe::ArticulationType::VolumeSwell);
     140            0 :         break;
     141            0 :     case SymId::guitarFadeOut:
     142            0 :         types.emplace(mpe::ArticulationType::FadeOut);
     143            0 :         break;
     144            0 :     case SymId::stringsHalfHarmonic:
     145              :     case SymId::stringsHarmonic:
     146            0 :         types.emplace(mpe::ArticulationType::Harmonic);
     147            0 :         break;
     148            0 :     case SymId::stringsMuteOn:
     149              :     case SymId::elecMute:
     150              :     case SymId::brassMuteHalfClosed:
     151              :     case SymId::brassMuteClosed:
     152              :     case SymId::brassHarmonMuteStemHalfRight:
     153              :     case SymId::brassHarmonMuteStemHalfLeft:
     154              :     case SymId::brassHarmonMuteClosed:
     155            0 :         types.emplace(mpe::ArticulationType::Mute);
     156            0 :         break;
     157            0 :     case SymId::brassHarmonMuteStemOpen:
     158              :     case SymId::brassMuteOpen:
     159              :     case SymId::guitarHalfOpenPedal:
     160              :     case SymId::guitarOpenPedal:
     161              :     case SymId::vocalMouthOpen:
     162              :     case SymId::vocalMouthSlightlyOpen:
     163              :     case SymId::vocalMouthWideOpen:
     164              :     case SymId::windOpenHole:
     165              :     case SymId::elecUnmute:
     166              :     case SymId::stringsMuteOff:
     167            0 :         types.emplace(mpe::ArticulationType::Open);
     168            0 :         break;
     169            0 :     case SymId::pluckedLeftHandPizzicato:
     170            0 :         types.emplace(mpe::ArticulationType::Pizzicato);
     171            0 :         break;
     172            0 :     case SymId::pluckedSnapPizzicatoAbove:
     173              :     case SymId::pluckedSnapPizzicatoBelow:
     174            0 :         types.emplace(mpe::ArticulationType::SnapPizzicato);
     175            0 :         break;
     176            0 :     case SymId::stringsUpBow:
     177            0 :         types.emplace(mpe::ArticulationType::UpBow);
     178            0 :         break;
     179            0 :     case SymId::stringsDownBow:
     180            0 :         types.emplace(mpe::ArticulationType::DownBow);
     181            0 :         break;
     182            0 :     case SymId::stringsJeteAbove:
     183              :     case SymId::stringsJeteBelow:
     184            0 :         types.emplace(mpe::ArticulationType::Jete);
     185            0 :         break;
     186            0 :     case SymId::noteheadXWhole:
     187              :     case SymId::noteheadXBlack:
     188              :     case SymId::noteheadXDoubleWhole:
     189              :     case SymId::noteheadWholeWithX:
     190              :     case SymId::noteheadVoidWithX:
     191            0 :         types.emplace(mpe::ArticulationType::CrossNote);
     192            0 :         break;
     193            0 :     case SymId::noteheadSlashX:
     194            0 :         types.emplace(mpe::ArticulationType::CrossLargeNote);
     195            0 :         break;
     196            0 :     case SymId::noteheadXOrnate:
     197              :     case SymId::noteheadXOrnateEllipse:
     198            0 :         types.emplace(mpe::ArticulationType::CrossOrnateNote);
     199            0 :         break;
     200            0 :     case SymId::noteheadCircleSlash:
     201              :     case SymId::noteheadCircledBlack:
     202              :     case SymId::noteheadCircledHalf:
     203              :     case SymId::noteheadCircledBlackLarge:
     204              :     case SymId::noteheadCircledDoubleWhole:
     205              :     case SymId::noteheadCircledDoubleWholeLarge:
     206              :     case SymId::noteheadCircledHalfLarge:
     207              :     case SymId::noteheadCircledWhole:
     208              :     case SymId::noteheadCircledWholeLarge:
     209            0 :         types.emplace(mpe::ArticulationType::CircleNote);
     210            0 :         break;
     211            0 :     case SymId::noteheadCircleX:
     212              :     case SymId::noteheadCircleXDoubleWhole:
     213              :     case SymId::noteheadCircleXHalf:
     214              :     case SymId::noteheadCircleXWhole:
     215            0 :         types.emplace(mpe::ArticulationType::CircleCrossNote);
     216            0 :         break;
     217            0 :     case SymId::noteheadRoundWhiteWithDot:
     218              :     case SymId::noteheadRoundWhiteWithDotLarge:
     219            0 :         types.emplace(mpe::ArticulationType::CircleDotNote);
     220            0 :         break;
     221            0 :     case SymId::noteheadDiamondBlack:
     222              :     case SymId::noteheadDiamondBlackOld:
     223              :     case SymId::noteheadDiamondBlackWide:
     224              :     case SymId::noteheadDiamondDoubleWhole:
     225              :     case SymId::noteheadDiamondHalfWide:
     226              :     case SymId::noteheadDiamondDoubleWholeOld:
     227              :     case SymId::noteheadDiamondWhole:
     228              :     case SymId::noteheadDiamondWholeOld:
     229              :     case SymId::noteheadDiamondHalf:
     230              :     case SymId::noteheadDiamondHalfFilled:
     231              :     case SymId::noteheadDiamondHalfOld:
     232            0 :         types.emplace(mpe::ArticulationType::DiamondNote);
     233            0 :         break;
     234            0 :     case SymId::noteShapeMoonBlack:
     235              :     case SymId::noteShapeMoonDoubleWhole:
     236              :     case SymId::noteShapeMoonWhite:
     237            0 :         types.emplace(mpe::ArticulationType::MoonNote);
     238            0 :         break;
     239            0 :     case SymId::noteheadTriangleLeftBlack:
     240              :     case SymId::noteheadTriangleLeftWhite:
     241            0 :         types.emplace(mpe::ArticulationType::TriangleLeftNote);
     242            0 :         break;
     243            0 :     case SymId::noteheadTriangleRightBlack:
     244              :     case SymId::noteheadTriangleRightWhite:
     245              :     case SymId::noteShapeTriangleRightWhite:
     246              :     case SymId::noteShapeTriangleRightBlack:
     247              :     case SymId::noteShapeTriangleRightDoubleWhole:
     248            0 :         types.emplace(mpe::ArticulationType::TriangleRightNote);
     249            0 :         break;
     250            0 :     case SymId::noteheadTriangleDownBlack:
     251              :     case SymId::noteheadTriangleDownDoubleWhole:
     252              :     case SymId::noteheadTriangleDownHalf:
     253              :     case SymId::noteheadTriangleDownWhite:
     254              :     case SymId::noteheadTriangleDownWhole:
     255            0 :         types.emplace(mpe::ArticulationType::TriangleDownNote);
     256            0 :         break;
     257            0 :     case SymId::noteheadTriangleUpBlack:
     258              :     case SymId::noteheadTriangleUpDoubleWhole:
     259              :     case SymId::noteheadTriangleUpHalf:
     260              :     case SymId::noteheadTriangleUpRightBlack:
     261              :     case SymId::noteheadTriangleUpRightWhite:
     262              :     case SymId::noteheadTriangleUpWhite:
     263              :     case SymId::noteheadTriangleUpWhole:
     264              :     case SymId::noteShapeTriangleUpBlack:
     265              :     case SymId::noteShapeTriangleUpWhite:
     266              :     case SymId::noteShapeTriangleUpDoubleWhole:
     267            0 :         types.emplace(mpe::ArticulationType::TriangleUpNote);
     268            0 :         break;
     269            0 :     case SymId::noteheadTriangleRoundDownBlack:
     270              :     case SymId::noteheadTriangleRoundDownWhite:
     271              :     case SymId::noteShapeTriangleRoundBlack:
     272              :     case SymId::noteShapeTriangleRoundWhite:
     273              :     case SymId::noteShapeTriangleRoundDoubleWhole:
     274            0 :         types.emplace(mpe::ArticulationType::TriangleRoundDownNote);
     275            0 :         break;
     276            0 :     case SymId::noteheadPlusBlack:
     277              :     case SymId::noteheadPlusDoubleWhole:
     278              :     case SymId::noteheadPlusHalf:
     279              :     case SymId::noteheadPlusWhole:
     280            0 :         types.emplace(mpe::ArticulationType::PlusNote);
     281            0 :         break;
     282            0 :     case SymId::noteheadSlashWhiteWhole:
     283              :     case SymId::noteheadSlashWhiteHalf:
     284              :     case SymId::noteheadSlashHorizontalEnds:
     285              :     case SymId::noteheadSlashWhiteDoubleWhole:
     286            0 :         types.emplace(mpe::ArticulationType::SlashNote);
     287            0 :         break;
     288            0 :     case SymId::noteShapeSquareBlack:
     289              :     case SymId::noteShapeSquareWhite:
     290              :     case SymId::noteShapeSquareDoubleWhole:
     291            0 :         types.emplace(mpe::ArticulationType::SquareNote);
     292            0 :         break;
     293            0 :     case SymId::noteheadSlashedWhole1:
     294              :     case SymId::noteheadSlashedHalf1:
     295              :     case SymId::noteheadSlashedBlack1:
     296              :     case SymId::noteheadSlashedDoubleWhole1:
     297            0 :         types.emplace(mpe::ArticulationType::SlashedForwardsNote);
     298            0 :         break;
     299            0 :     case SymId::noteheadSlashedWhole2:
     300              :     case SymId::noteheadSlashedHalf2:
     301              :     case SymId::noteheadSlashedBlack2:
     302              :     case SymId::noteheadSlashedDoubleWhole2:
     303            0 :         types.emplace(mpe::ArticulationType::SlashedBackwardsNote);
     304            0 :         break;
     305            0 :     case SymId::brassScoop:
     306            0 :         types.emplace(mpe::ArticulationType::Scoop);
     307            0 :         break;
     308            0 :     case SymId::brassPlop:
     309            0 :         types.emplace(mpe::ArticulationType::Plop);
     310            0 :         break;
     311            0 :     case SymId::brassFallLipLong:
     312              :     case SymId::brassFallLipMedium:
     313              :     case SymId::brassFallLipShort:
     314              :     case SymId::brassFallRoughLong:
     315              :     case SymId::brassFallRoughMedium:
     316              :     case SymId::brassFallRoughShort:
     317            0 :         types.emplace(mpe::ArticulationType::QuickFall);
     318            0 :         break;
     319            0 :     case SymId::brassFallSmoothLong:
     320              :     case SymId::brassFallSmoothMedium:
     321              :     case SymId::brassFallSmoothShort:
     322            0 :         types.emplace(mpe::ArticulationType::Fall);
     323            0 :         break;
     324            0 :     case SymId::brassDoitLong:
     325              :     case SymId::brassDoitMedium:
     326              :     case SymId::brassDoitShort:
     327            0 :         types.emplace(mpe::ArticulationType::Doit);
     328            0 :         break;
     329            0 :     case SymId::brassBend:
     330            0 :         types.emplace(mpe::ArticulationType::BrassBend);
     331            0 :         break;
     332            0 :     case SymId::dynamicCrescendoHairpin:
     333            0 :         types.emplace(mpe::ArticulationType::Crescendo);
     334            0 :         break;
     335            0 :     case SymId::dynamicDiminuendoHairpin:
     336            0 :         types.emplace(mpe::ArticulationType::Diminuendo);
     337            0 :         break;
     338            0 :     case SymId::ornamentUpPrall:
     339            0 :         types.emplace(mpe::ArticulationType::UpPrall);
     340            0 :         break;
     341            0 :     case SymId::ornamentPrallDown:
     342            0 :         types.emplace(mpe::ArticulationType::PrallDown);
     343            0 :         break;
     344            0 :     case SymId::ornamentPrallUp:
     345            0 :         types.emplace(mpe::ArticulationType::PrallUp);
     346            0 :         break;
     347            0 :     case SymId::ornamentLinePrall:
     348            0 :         types.emplace(mpe::ArticulationType::LinePrall);
     349            0 :         break;
     350            0 :     case SymId::ornamentPrallMordent:
     351            0 :         types.emplace(mpe::ArticulationType::PrallMordent);
     352            0 :         break;
     353            0 :     case SymId::ornamentUpMordent:
     354            0 :         types.emplace(mpe::ArticulationType::UpMordent);
     355            0 :         break;
     356            1 :     case SymId::ornamentMordent:
     357              :     case SymId::ornamentPinceCouperin:
     358            1 :         types.emplace(mpe::ArticulationType::LowerMordent);
     359            1 :         break;
     360            0 :     case SymId::ornamentDownMordent:
     361            0 :         types.emplace(mpe::ArticulationType::DownMordent);
     362            0 :         break;
     363            1 :     case SymId::ornamentTurn:
     364              :     case SymId::ornamentTurnUp:
     365              :     case SymId::ornamentHaydn:
     366              :     case SymId::brassJazzTurn:
     367            1 :         types.emplace(mpe::ArticulationType::Turn);
     368            1 :         break;
     369            2 :     case SymId::ornamentTurnInverted:
     370              :     case SymId::ornamentTurnUpS:
     371              :     case SymId::ornamentTurnSlash:
     372            2 :         types.emplace(mpe::ArticulationType::InvertedTurn);
     373            2 :         break;
     374            5 :     case SymId::ornamentTrill:
     375              :     case SymId::ornamentShake3:
     376              :     case SymId::ornamentShakeMuffat1:
     377            5 :         if (ornamentStyle == OrnamentStyle::DEFAULT) {
     378            4 :             types.emplace(mpe::ArticulationType::Trill);
     379              :         } else {
     380            1 :             types.emplace(mpe::ArticulationType::TrillBaroque);
     381              :         }
     382            5 :         break;
     383            1 :     case SymId::ornamentShortTrill:
     384            1 :         if (ornamentStyle == OrnamentStyle::DEFAULT) {
     385            1 :             types.emplace(mpe::ArticulationType::UpperMordent);
     386              :         } else {
     387            0 :             types.emplace(mpe::ArticulationType::UpperMordentBaroque);
     388              :         }
     389            1 :         break;
     390            0 :     case SymId::ornamentTremblement:
     391              :     case SymId::ornamentTremblementCouperin:
     392            0 :         types.emplace(mpe::ArticulationType::Tremblement);
     393            0 :         break;
     394            0 :     case SymId::graceNoteAcciaccaturaStemDown:
     395              :     case SymId::graceNoteAcciaccaturaStemUp:
     396              :     case SymId::graceNoteSlashStemDown:
     397              :     case SymId::graceNoteSlashStemUp:
     398            0 :         types.emplace(mpe::ArticulationType::Acciaccatura);
     399            0 :         break;
     400            0 :     case SymId::graceNoteAppoggiaturaStemDown:
     401              :     case SymId::graceNoteAppoggiaturaStemUp:
     402            0 :         types.emplace(mpe::ArticulationType::PreAppoggiatura);
     403            0 :         break;
     404            0 :     case SymId::glissandoUp:
     405              :     case SymId::glissandoDown:
     406            0 :         types.emplace(mpe::ArticulationType::DiscreteGlissando);
     407            0 :         break;
     408            0 :     case SymId::wiggleArpeggiatoDown:
     409              :     case SymId::wiggleArpeggiatoDownArrow:
     410            0 :         types.emplace(mpe::ArticulationType::ArpeggioDown);
     411            0 :         break;
     412            0 :     case SymId::wiggleArpeggiatoUp:
     413              :     case SymId::wiggleArpeggiatoUpArrow:
     414            0 :         types.emplace(mpe::ArticulationType::ArpeggioUp);
     415            0 :         break;
     416            0 :     case SymId::wiggleArpeggiatoDownSwash:
     417            0 :         types.emplace(mpe::ArticulationType::ArpeggioStraightDown);
     418            0 :         break;
     419            0 :     case SymId::wiggleArpeggiatoUpSwash:
     420            0 :         types.emplace(mpe::ArticulationType::ArpeggioStraightUp);
     421            0 :         break;
     422            0 :     case SymId::wiggleVibratoLargeFaster:
     423              :     case SymId::wiggleVibratoLargeFasterStill:
     424              :     case SymId::wiggleVibratoLargeFastest:
     425              :     case SymId::wiggleVibratoLargeSlow:
     426              :     case SymId::wiggleVibratoLargeSlower:
     427              :     case SymId::wiggleVibratoLargeSlowest:
     428              :     case SymId::wiggleVibratoLargestFast:
     429              :     case SymId::wiggleVibratoLargestFaster:
     430              :     case SymId::wiggleVibratoLargestFasterStill:
     431              :     case SymId::wiggleVibratoLargestFastest:
     432              :     case SymId::wiggleVibratoLargestSlow:
     433              :     case SymId::wiggleVibratoLargestSlowest:
     434              :     case SymId::wiggleVibratoMediumFast:
     435              :     case SymId::wiggleVibratoMediumFaster:
     436              :     case SymId::wiggleVibratoMediumFasterStill:
     437              :     case SymId::wiggleVibratoMediumFastest:
     438              :     case SymId::wiggleVibratoMediumSlow:
     439              :     case SymId::wiggleVibratoMediumSlowest:
     440              :     case SymId::wiggleVibratoSmallFast:
     441              :     case SymId::wiggleVibratoSmallFaster:
     442              :     case SymId::wiggleVibratoSmallFasterStill:
     443              :     case SymId::wiggleVibratoSmallFastest:
     444              :     case SymId::wiggleVibratoSmallSlow:
     445              :     case SymId::wiggleVibratoSmallSlower:
     446              :     case SymId::wiggleVibratoSmallSlowest:
     447              :     case SymId::wiggleVibratoSmallestFast:
     448              :     case SymId::wiggleVibratoSmallestFaster:
     449              :     case SymId::wiggleVibratoSmallestFasterStill:
     450              :     case SymId::wiggleVibratoSmallestFastest:
     451              :     case SymId::wiggleVibratoSmallestSlow:
     452              :     case SymId::wiggleVibratoSmallestSlower:
     453              :     case SymId::wiggleVibratoSmallestSlowest:
     454              :     case SymId::wiggleVibratoStart:
     455              :     case SymId::wiggleVibratoLargeFast:
     456              :     case SymId::wiggleVibrato:
     457            0 :         types.emplace(mpe::ArticulationType::Vibrato);
     458            0 :         break;
     459            0 :     case SymId::wiggleVibratoWide:
     460            0 :         types.emplace(mpe::ArticulationType::WideVibrato);
     461            0 :         break;
     462            0 :     case SymId::handbellsMalletBellOnTable:
     463            0 :         types.emplace(mpe::ArticulationType::MalletBellOnTable);
     464            0 :         break;
     465            0 :     case SymId::handbellsMalletBellSuspended:
     466            0 :         types.emplace(mpe::ArticulationType::MalletBellSuspended);
     467            0 :         break;
     468            0 :     case SymId::handbellsMalletLft:
     469            0 :         types.emplace(mpe::ArticulationType::MalletLift);
     470            0 :         break;
     471            0 :     case SymId::handbellsPluckLift:
     472            0 :         types.emplace(mpe::ArticulationType::PluckLift);
     473            0 :         break;
     474            0 :     case SymId::handbellsGyro:
     475            0 :         types.emplace(mpe::ArticulationType::Gyro);
     476            0 :         break;
     477            0 :     case SymId::handbellsMartellato:
     478            0 :         types.emplace(mpe::ArticulationType::Martellato);
     479            0 :         break;
     480            0 :     case SymId::handbellsMartellatoLift:
     481            0 :         types.emplace(mpe::ArticulationType::MartellatoLift);
     482            0 :         break;
     483            0 :     case SymId::handbellsHandMartellato:
     484            0 :         types.emplace(mpe::ArticulationType::HandMartellato);
     485            0 :         break;
     486            0 :     case SymId::handbellsMutedMartellato:
     487            0 :         types.emplace(mpe::ArticulationType::MutedMartellato);
     488            0 :         break;
     489         1500 :     default:
     490         1500 :         break;
     491              :     }
     492              : 
     493         1514 :     return types;
     494            0 : }
     495              : 
     496           14 : void SymbolsMetaParser::doParse(const EngravingItem* item, const RenderingContext& ctx, mpe::ArticulationMap& result)
     497              : {
     498           14 :     IF_ASSERT_FAILED(item->isArticulationFamily()) {
     499            0 :         return;
     500              :     }
     501              : 
     502           14 :     const Articulation* articulationSymbol = toArticulation(item);
     503           14 :     if (!articulationSymbol->playArticulation()) {
     504            0 :         return;
     505              :     }
     506              : 
     507           14 :     mpe::ArticulationTypeSet types;
     508              : 
     509           14 :     if (articulationSymbol->textType() != ArticulationTextType::NO_TEXT) {
     510            0 :         types.insert(textTypeToArticulationType(articulationSymbol->textType()));
     511              :     } else {
     512           14 :         types = symbolToArticulations(articulationSymbol->symId(), articulationSymbol->ornamentStyle());
     513              :     }
     514              : 
     515           28 :     for (mpe::ArticulationType type : types) {
     516           14 :         const mpe::ArticulationPattern& pattern = ctx.profile->pattern(type, mpe::ArticulationType::Standard);
     517           14 :         if (pattern.empty()) {
     518            1 :             continue;
     519              :         }
     520              : 
     521           13 :         appendArticulationData(mpe::ArticulationMeta(type, pattern, ctx.nominalTimestamp, ctx.nominalDuration), result);
     522              :     }
     523           14 : }
        

Generated by: LCOV version 2.0-1