LCOV - code coverage report
Current view: top level - src/braille/internal - braillecode.cpp Coverage Total Hit
Test: filtered_coverage.info Lines: 73.0 % 122 89
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) 2023 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 <sstream>
      24              : #include <vector>
      25              : 
      26              : #include "braillecode.h"
      27              : 
      28              : #include "log.h"
      29              : 
      30              : namespace mu::engraving {
      31              : std::vector<braille_code*> master_braille_code_list;
      32              : 
      33          515 : braille_code::braille_code(std::string t, std::string c)
      34              : {
      35          515 :     tag = t;
      36          515 :     code = c;
      37          515 :     braille = translate2Braille(code);
      38          515 :     num_cells = static_cast<int>(braille.length());
      39          515 :     master_braille_code_list.push_back(this);
      40          515 : }
      41              : 
      42          515 : braille_code::~braille_code()
      43              : {
      44          515 :     tag.clear();
      45          515 :     code.clear();
      46          515 :     braille.clear();
      47          515 : }
      48              : 
      49            0 : void braille_code::print()
      50              : {
      51            0 :     LOGD() << " Braille code " << tag << " " << code << " " << braille << " " << num_cells;
      52            0 : }
      53              : 
      54              : braille_code Braille_CapIndicator = braille_code("CapIndicator", "6");
      55              : braille_code Braille_NumIndicator = braille_code("NumIndicator", "3456");
      56              : braille_code Braille_TxtIndicator = braille_code("TextIndicator", "345");
      57              : 
      58              : //[Letter]
      59              : braille_code Braille_a = braille_code("a", "1");
      60              : braille_code Braille_b = braille_code("b", "12");
      61              : braille_code Braille_c = braille_code("c", "14");
      62              : braille_code Braille_d = braille_code("d", "145");
      63              : braille_code Braille_e = braille_code("e", "15");
      64              : braille_code Braille_f = braille_code("f", "124");
      65              : braille_code Braille_g = braille_code("g", "1245");
      66              : braille_code Braille_h = braille_code("h", "125");
      67              : braille_code Braille_i = braille_code("i", "24");
      68              : braille_code Braille_j = braille_code("j", "245");
      69              : braille_code Braille_k = braille_code("k", "13");
      70              : braille_code Braille_l = braille_code("l", "123");
      71              : braille_code Braille_m = braille_code("m", "134");
      72              : braille_code Braille_n = braille_code("n", "1345");
      73              : braille_code Braille_o = braille_code("o", "135");
      74              : braille_code Braille_p = braille_code("p", "1234");
      75              : braille_code Braille_q = braille_code("q", "12345");
      76              : braille_code Braille_r = braille_code("r", "1235");
      77              : braille_code Braille_s = braille_code("s", "234");
      78              : braille_code Braille_t = braille_code("t", "2345");
      79              : braille_code Braille_u = braille_code("u", "136");
      80              : braille_code Braille_v = braille_code("v", "1236");
      81              : braille_code Braille_w = braille_code("w", "2456");
      82              : braille_code Braille_x = braille_code("x", "1346");
      83              : braille_code Braille_y = braille_code("y", "13456");
      84              : braille_code Braille_z = braille_code("z", "1356");
      85              : 
      86              : braille_code* Braille_Letters[] = {
      87              :     &Braille_a, &Braille_b, &Braille_c, &Braille_d, &Braille_e,
      88              :     &Braille_f, &Braille_g, &Braille_h, &Braille_i, &Braille_j,
      89              :     &Braille_k, &Braille_l, &Braille_m, &Braille_n, &Braille_o,
      90              :     &Braille_p, &Braille_q, &Braille_r, &Braille_s, &Braille_t,
      91              :     &Braille_u, &Braille_v, &Braille_w, &Braille_x, &Braille_y,
      92              :     &Braille_z };
      93              : 
      94              : //upper and lower numbers
      95              : braille_code Braille_Upper0 = braille_code("Upper0", "245");
      96              : braille_code Braille_Upper1 = braille_code("Upper1", "1");
      97              : braille_code Braille_Upper2 = braille_code("Upper2", "12");
      98              : braille_code Braille_Upper3 = braille_code("Upper3", "14");
      99              : braille_code Braille_Upper4 = braille_code("Upper4", "145");
     100              : braille_code Braille_Upper5 = braille_code("Upper5", "15");
     101              : braille_code Braille_Upper6 = braille_code("Upper6", "124");
     102              : braille_code Braille_Upper7 = braille_code("Upper7", "1245");
     103              : braille_code Braille_Upper8 = braille_code("Upper8", "125");
     104              : braille_code Braille_Upper9 = braille_code("Upper9", "24");
     105              : 
     106              : braille_code* Braille_UpperNumbers[] = {
     107              :     &Braille_Upper0, &Braille_Upper1, &Braille_Upper2, &Braille_Upper3,
     108              :     &Braille_Upper4, &Braille_Upper5, &Braille_Upper6, &Braille_Upper7,
     109              :     &Braille_Upper8, &Braille_Upper9, };
     110              : 
     111              : //#lower numbers
     112              : braille_code Braille_Lower0 = braille_code("Lower0", "356");
     113              : braille_code Braille_Lower1 = braille_code("Lower1", "2");
     114              : braille_code Braille_Lower2 = braille_code("Lower2", "23");
     115              : braille_code Braille_Lower3 = braille_code("Lower3", "25");
     116              : braille_code Braille_Lower4 = braille_code("Lower4", "256");
     117              : braille_code Braille_Lower5 = braille_code("Lower5", "26");
     118              : braille_code Braille_Lower6 = braille_code("Lower6", "235");
     119              : braille_code Braille_Lower7 = braille_code("Lower7", "2356");
     120              : braille_code Braille_Lower8 = braille_code("Lower8", "236");
     121              : braille_code Braille_Lower9 = braille_code("Lower9", "35");
     122              : 
     123              : braille_code* Braille_LowerNumbers[] ={
     124              :     &Braille_Lower0, &Braille_Lower1, &Braille_Lower2, &Braille_Lower3,
     125              :     &Braille_Lower4, &Braille_Lower5, &Braille_Lower6, &Braille_Lower7,
     126              :     &Braille_Lower8, &Braille_Lower9 };
     127              : 
     128              : //[NoteShape]
     129              : //#Notes: Braille note shapes are same such as whole=16th=256, half=32nd=512 etc.
     130              : //#to deal with complicate back-translation and reading issues, each note should be defined, even it could easily handle by coding.
     131              : braille_code Braille_aWhole = braille_code("aWhole", "2346");
     132              : braille_code Braille_aHalf = braille_code("aHalf", "234");
     133              : braille_code Braille_aQuarter = braille_code("aQuarter", "246");
     134              : braille_code Braille_a8th = braille_code("a8th", "24");
     135              : braille_code Braille_bWhole = braille_code("bWhole", "23456");
     136              : braille_code Braille_bHalf = braille_code("bHalf", "2345");
     137              : braille_code Braille_bQuarter = braille_code("bQuarter", "2456");
     138              : braille_code Braille_b8th = braille_code("b8th", "245");
     139              : braille_code Braille_cWhole = braille_code("cWhole", "13456");
     140              : braille_code Braille_cHalf = braille_code("cHalf", "1345");
     141              : braille_code Braille_cQuarter = braille_code("cQuarter", "1456");
     142              : braille_code Braille_c8th = braille_code("c8th", "145");
     143              : braille_code Braille_dWhole = braille_code("dWhole", "1356");
     144              : braille_code Braille_dHalf = braille_code("dHalf", "135");
     145              : braille_code Braille_dQuarter = braille_code("dQuarter", "156");
     146              : braille_code Braille_d8th = braille_code("d8th", "15");
     147              : braille_code Braille_eWhole = braille_code("eWhole", "12346");
     148              : braille_code Braille_eHalf = braille_code("eHalf", "1234");
     149              : braille_code Braille_eQuarter = braille_code("eQuarter", "1246");
     150              : braille_code Braille_e8th = braille_code("e8th", "124");
     151              : braille_code Braille_fWhole = braille_code("fWhole", "123456");
     152              : braille_code Braille_fHalf = braille_code("fHalf", "12345");
     153              : braille_code Braille_fQuarter = braille_code("fQuarter", "12456");
     154              : braille_code Braille_f8th = braille_code("f8th", "1245");
     155              : braille_code Braille_gWhole = braille_code("gWhole", "12356");
     156              : braille_code Braille_gHalf = braille_code("gHalf", "1235");
     157              : braille_code Braille_gQuarter = braille_code("gQuarter", "1256");
     158              : braille_code Braille_g8th = braille_code("g8th", "125");
     159              : //#16th to 128th notes
     160              : braille_code Braille_a16th = braille_code("a16th", "2346");
     161              : braille_code Braille_a32nd = braille_code("a32nd", "234");
     162              : braille_code Braille_a64th = braille_code("a64th", "246");
     163              : braille_code Braille_a128th = braille_code("a128th", "24");
     164              : braille_code Braille_b16th = braille_code("b16th", "23456");
     165              : braille_code Braille_b32nd = braille_code("b32nd", "2345");
     166              : braille_code Braille_b64th = braille_code("b64th", "2456");
     167              : braille_code Braille_b128th = braille_code("b128th", "245");
     168              : braille_code Braille_c16th = braille_code("c16th", "13456");
     169              : braille_code Braille_c32nd = braille_code("c32nd", "1345");
     170              : braille_code Braille_c64th = braille_code("c64th", "1456");
     171              : braille_code Braille_c128th = braille_code("c128th", "145");
     172              : braille_code Braille_d16th = braille_code("d16th", "1356");
     173              : braille_code Braille_d32nd = braille_code("d32nd", "135");
     174              : braille_code Braille_d64th = braille_code("d64th", "156");
     175              : braille_code Braille_d128th = braille_code("d128th", "15");
     176              : braille_code Braille_e16th = braille_code("e16th", "12346");
     177              : braille_code Braille_e32nd = braille_code("e32nd", "1234");
     178              : braille_code Braille_e64th = braille_code("e64th", "1246");
     179              : braille_code Braille_e128th = braille_code("e128th", "124");
     180              : braille_code Braille_f16th = braille_code("f16th", "123456");
     181              : braille_code Braille_f32nd = braille_code("f32nd", "12345");
     182              : braille_code Braille_f64th = braille_code("f64th", "12456");
     183              : braille_code Braille_f128th = braille_code("f128th", "1245");
     184              : braille_code Braille_g16th = braille_code("g16th", "12356");
     185              : braille_code Braille_g32nd = braille_code("g32nd", "1235");
     186              : braille_code Braille_g64th = braille_code("g64th", "1256");
     187              : braille_code Braille_g128th = braille_code("g128th", "125");
     188              : //#256th to 2048th notes
     189              : braille_code Braille_a256th = braille_code("a256th", "2346");
     190              : braille_code Braille_a512th = braille_code("a512th", "234");
     191              : braille_code Braille_a1024th = braille_code("a1024th", "246");
     192              : braille_code Braille_a2048th = braille_code("a2048th", "24");
     193              : braille_code Braille_b256th = braille_code("b256th", "23456");
     194              : braille_code Braille_b512th = braille_code("b512th", "2345");
     195              : braille_code Braille_b1024th = braille_code("b1024th", "2456");
     196              : braille_code Braille_b2048th = braille_code("b2048th", "245");
     197              : braille_code Braille_c256th = braille_code("c256th", "13456");
     198              : braille_code Braille_c512th = braille_code("c512th", "1345");
     199              : braille_code Braille_c1024th = braille_code("c1024th", "1456");
     200              : braille_code Braille_c2048th = braille_code("c2048th", "145");
     201              : braille_code Braille_d256th = braille_code("d256th", "1356");
     202              : braille_code Braille_d512th = braille_code("d512th", "135");
     203              : braille_code Braille_d1024th = braille_code("d1024th", "156");
     204              : braille_code Braille_d2048th = braille_code("d2048th", "15");
     205              : braille_code Braille_e256th = braille_code("e256th", "12346");
     206              : braille_code Braille_e512th = braille_code("e512th", "1234");
     207              : braille_code Braille_e1024th = braille_code("e1024th", "1246");
     208              : braille_code Braille_e2048th = braille_code("e2048th", "124");
     209              : braille_code Braille_f256th = braille_code("f256th", "123456");
     210              : braille_code Braille_f512th = braille_code("f512th", "12345");
     211              : braille_code Braille_f1024th = braille_code("f1024th", "12456");
     212              : braille_code Braille_f2048th = braille_code("f2048th", "1245");
     213              : braille_code Braille_g256th = braille_code("g256th", "12356");
     214              : braille_code Braille_g512th = braille_code("g512th", "1235");
     215              : braille_code Braille_g1024th = braille_code("g1024th", "1256");
     216              : braille_code Braille_g2048th = braille_code("g2048th", "125");
     217              : //#special notes: breve (double whole notes)
     218              : //#Advised to use the definitions of Haipeng as first option for breve notes right below this section.
     219              : braille_code Braille_aBreve = braille_code("aBreve", "2346-13");
     220              : braille_code Braille_bBreve = braille_code("bBreve", "23456-13");
     221              : braille_code Braille_cBreve = braille_code("cBreve", "13456-13");
     222              : braille_code Braille_dBreve = braille_code("dBreve", "1356-13");
     223              : braille_code Braille_eBreve = braille_code("eBreve", "12346-13");
     224              : braille_code Braille_fBreve = braille_code("fBreve", "123456-13");
     225              : braille_code Braille_gBreve = braille_code("gBreve", "12356-13");
     226              : //##########Added by Haipeng
     227              : //#Another kind of breve, mainly used other than the above one which should be used mainly in plain chant
     228              : braille_code Braille_aBreveAlt = braille_code("aBreveAlt", "2346-45-14-2346");
     229              : braille_code Braille_bBreveAlt = braille_code("bBreveAlt", "23456-45-14-23456");
     230              : braille_code Braille_cBreveAlt = braille_code("cBreveAlt", "13456-45-14-13456");
     231              : braille_code Braille_dBreveAlt = braille_code("dBreveAlt", "1356-45-14-1356");
     232              : braille_code Braille_eBreveAlt = braille_code("eBreveAlt", "12346-45-14-12346");
     233              : braille_code Braille_fBreveAlt = braille_code("fBreveAlt", "123456-45-14-123456");
     234              : braille_code Braille_gBreveAlt = braille_code("gBreveAlt", "12356-45-14-12356");
     235              : //##Other longer notes in ancient music, including Longa and Maxima (quadruple whole note)
     236              : braille_code Braille_aLonga = braille_code("aLonga", "2346-45-14-45-14-2346");
     237              : braille_code Braille_bLonga = braille_code("bLonga", "23456-45-14-45-14-23456");
     238              : braille_code Braille_cLonga = braille_code("cLonga", "13456-45-14-45-14-13456");
     239              : braille_code Braille_dLonga = braille_code("dLonga", "1356-45-14-45-14-1356");
     240              : braille_code Braille_eLonga = braille_code("eLonga", "12346-45-14-45-14-12346");
     241              : braille_code Braille_fLonga = braille_code("fLonga", "123456-45-14-45-14-123456");
     242              : braille_code Braille_gLonga = braille_code("gLonga", "12356-45-14-45-14-12356");
     243              : braille_code Braille_aMaxima = braille_code("aMaxima", "2346-45-14-45-14-45-14-2346");
     244              : braille_code Braille_bMaxima = braille_code("bMaxima", "23456-45-14-45-14-45-14-23456");
     245              : braille_code Braille_cMaxima = braille_code("cMaxima", "13456-45-14-45-14-45-14-13456");
     246              : braille_code Braille_dMaxima = braille_code("dMaxima", "1356-45-14-45-14-45-14-1356");
     247              : braille_code Braille_eMaxima = braille_code("eMaxima", "12346-45-14-45-14-45-14-12346");
     248              : braille_code Braille_fMaxima = braille_code("fMaxima", "123456-45-14-45-14-45-14-123456");
     249              : braille_code Braille_gMaxima = braille_code("gMaxima", "12356-45-14-45-14-45-14-12356");
     250              : 
     251              : braille_code* Braille_aNotes[] = {
     252              :     &Braille_aMaxima, &Braille_aLonga, &Braille_aBreve,
     253              :     &Braille_aWhole, &Braille_aHalf, &Braille_aQuarter,
     254              :     &Braille_a8th, &Braille_a16th, &Braille_a32nd,
     255              :     &Braille_a64th, &Braille_a128th, &Braille_a256th,
     256              :     &Braille_a512th, &Braille_a128th, &Braille_a2048th,
     257              :     &Braille_aBreveAlt };
     258              : braille_code* Braille_bNotes[] = {
     259              :     &Braille_bMaxima, &Braille_bLonga, &Braille_bBreve,
     260              :     &Braille_bWhole, &Braille_bHalf, &Braille_bQuarter,
     261              :     &Braille_b8th, &Braille_b16th, &Braille_b32nd,
     262              :     &Braille_b64th, &Braille_b128th, &Braille_b256th,
     263              :     &Braille_b512th, &Braille_b128th, &Braille_b2048th,
     264              :     &Braille_bBreveAlt };
     265              : braille_code* Braille_cNotes[] = {
     266              :     &Braille_cMaxima, &Braille_cLonga, &Braille_cBreve,
     267              :     &Braille_cWhole, &Braille_cHalf, &Braille_cQuarter,
     268              :     &Braille_c8th, &Braille_c16th, &Braille_c32nd,
     269              :     &Braille_c64th, &Braille_c128th, &Braille_c256th,
     270              :     &Braille_c512th, &Braille_c128th, &Braille_c2048th,
     271              :     &Braille_cBreveAlt };
     272              : braille_code* Braille_dNotes[] = {
     273              :     &Braille_dMaxima, &Braille_dLonga, &Braille_dBreve,
     274              :     &Braille_dWhole, &Braille_dHalf, &Braille_dQuarter,
     275              :     &Braille_d8th, &Braille_d16th, &Braille_d32nd,
     276              :     &Braille_d64th, &Braille_d128th, &Braille_d256th,
     277              :     &Braille_d512th, &Braille_d128th, &Braille_d2048th,
     278              :     &Braille_dBreveAlt };
     279              : braille_code* Braille_eNotes[] = {
     280              :     &Braille_eMaxima, &Braille_eLonga, &Braille_eBreve,
     281              :     &Braille_eWhole, &Braille_eHalf, &Braille_eQuarter,
     282              :     &Braille_e8th, &Braille_e16th, &Braille_e32nd,
     283              :     &Braille_e64th, &Braille_e128th, &Braille_e256th,
     284              :     &Braille_e512th, &Braille_e128th, &Braille_e2048th,
     285              :     &Braille_eBreveAlt };
     286              : braille_code* Braille_fNotes[] = {
     287              :     &Braille_fMaxima, &Braille_fLonga, &Braille_fBreve,
     288              :     &Braille_fWhole, &Braille_fHalf, &Braille_fQuarter,
     289              :     &Braille_f8th, &Braille_f16th, &Braille_f32nd,
     290              :     &Braille_f64th, &Braille_f128th, &Braille_f256th,
     291              :     &Braille_f512th, &Braille_f128th, &Braille_f2048th,
     292              :     &Braille_fBreveAlt };
     293              : braille_code* Braille_gNotes[] = {
     294              :     &Braille_gMaxima, &Braille_gLonga, &Braille_gBreve,
     295              :     &Braille_gWhole, &Braille_gHalf, &Braille_gQuarter,
     296              :     &Braille_g8th, &Braille_g16th, &Braille_g32nd,
     297              :     &Braille_g64th, &Braille_g128th, &Braille_g256th,
     298              :     &Braille_g512th, &Braille_g128th, &Braille_g2048th,
     299              :     &Braille_gBreveAlt };
     300              : 
     301              : braille_code* Braille_wholeNotes[] = {
     302              :     &Braille_aWhole, &Braille_bWhole, &Braille_cWhole,
     303              :     &Braille_dWhole, &Braille_eWhole, &Braille_fWhole, &Braille_gWhole
     304              : };
     305              : braille_code* Braille_halfNotes[] = {
     306              :     &Braille_aHalf, &Braille_bHalf, &Braille_cHalf,
     307              :     &Braille_dHalf, &Braille_eHalf, &Braille_fHalf, &Braille_gHalf
     308              : };
     309              : braille_code* Braille_quarterNotes[] = {
     310              :     &Braille_aQuarter, &Braille_bQuarter, &Braille_cQuarter,
     311              :     &Braille_dQuarter, &Braille_eQuarter, &Braille_fQuarter, &Braille_gQuarter
     312              : };
     313              : braille_code* Braille_8thNotes[] = {
     314              :     &Braille_a8th, &Braille_b8th, &Braille_c8th,
     315              :     &Braille_d8th, &Braille_e8th, &Braille_f8th, &Braille_g8th
     316              : };
     317              : braille_code* Braille_16thNotes[] = {
     318              :     &Braille_a16th, &Braille_b16th, &Braille_c16th,
     319              :     &Braille_d16th, &Braille_e16th, &Braille_f16th, &Braille_g16th
     320              : };
     321              : braille_code* Braille_32ndNotes[] = {
     322              :     &Braille_a32nd, &Braille_b32nd, &Braille_c32nd,
     323              :     &Braille_d32nd, &Braille_e32nd, &Braille_f32nd, &Braille_g32nd
     324              : };
     325              : braille_code* Braille_64thNotes[] = {
     326              :     &Braille_a64th, &Braille_b64th, &Braille_c64th,
     327              :     &Braille_d64th, &Braille_e64th, &Braille_f64th, &Braille_g64th
     328              : };
     329              : braille_code* Braille_128thNotes[] = {
     330              :     &Braille_a128th, &Braille_b128th, &Braille_c128th,
     331              :     &Braille_d128th, &Braille_e128th, &Braille_f128th, &Braille_g128th
     332              : };
     333              : braille_code* Braille_256thNotes[] = {
     334              :     &Braille_a256th, &Braille_b256th, &Braille_c256th,
     335              :     &Braille_d256th, &Braille_e256th, &Braille_f256th, &Braille_g256th
     336              : };
     337              : braille_code* Braille_512thNotes[] = {
     338              :     &Braille_a512th, &Braille_b512th, &Braille_c512th,
     339              :     &Braille_d512th, &Braille_e512th, &Braille_f512th, &Braille_g512th
     340              : };
     341              : braille_code* Braille_1024thNotes[] = {
     342              :     &Braille_a1024th, &Braille_b1024th, &Braille_c1024th,
     343              :     &Braille_d1024th, &Braille_e1024th, &Braille_f1024th, &Braille_g1024th
     344              : };
     345              : braille_code* Braille_2048thNotes[] = {
     346              :     &Braille_a2048th, &Braille_b2048th, &Braille_c2048th,
     347              :     &Braille_d2048th, &Braille_e2048th, &Braille_f2048th, &Braille_g2048th
     348              : };
     349              : 
     350              : //####################
     351              : 
     352              : //#Braille rests' shapes are same as notes above, whole rest=16th rest=256th etc.
     353              : braille_code Braille_RestWhole = braille_code("RestWhole", "134");
     354              : braille_code Braille_RestHalf = braille_code("RestHalf", "136");
     355              : braille_code Braille_RestQuarter = braille_code("RestQuarter", "1236");
     356              : braille_code Braille_Rest8th = braille_code("Rest8th", "1346");
     357              : //#16th to 128th rests
     358              : braille_code Braille_Rest16th = braille_code("Rest16th", "134");
     359              : braille_code Braille_Rest32nd = braille_code("Rest32nd", "136");
     360              : braille_code Braille_Rest64th = braille_code("Rest64th", "1236");
     361              : braille_code Braille_Rest128th = braille_code("Rest128th", "1346");
     362              : //#256th to 2048th rests
     363              : braille_code Braille_Rest256th = braille_code("Rest256th", "134");
     364              : braille_code Braille_Rest512th = braille_code("Rest512th", "136");
     365              : braille_code Braille_Rest1024th = braille_code("Rest1024th", "1236");
     366              : braille_code Braille_Rest2048th = braille_code("Rest2048th", "1346");
     367              : //#breve rest, use Haipeng's breve rest definition below as first option.
     368              : braille_code Braille_RestBreve = braille_code("RestBreve", "134-13");
     369              : //##########Added by Haipeng##########
     370              : //#More widely used Breve rest, swap the above with Alt
     371              : braille_code Braille_RestBreveAlt = braille_code("RestBreveAlt", "134-45-14-134");
     372              : //#Other longer rests in ancient music
     373              : braille_code Braille_RestLonga = braille_code("RestLonga", "134-45-14-45-14-134");
     374              : braille_code Braille_RestMaxima = braille_code("RestMaxima", "134-45-14-45-14-45-14-134");
     375              : 
     376              : braille_code* Braille_Rests[] = {
     377              :     &Braille_RestMaxima, &Braille_RestLonga, &Braille_RestBreve,
     378              :     &Braille_RestWhole, &Braille_RestHalf, &Braille_RestQuarter,
     379              :     &Braille_Rest8th, &Braille_Rest16th, &Braille_Rest32nd,
     380              :     &Braille_Rest64th, &Braille_Rest128th, &Braille_Rest256th,
     381              :     &Braille_Rest512th, &Braille_Rest128th, &Braille_Rest2048th,
     382              :     &Braille_RestBreveAlt };
     383              : //####################
     384              : 
     385              : //[MusicPunctuation]
     386              : braille_code Braille_PlusSign = braille_code("PlusSign", "346");
     387              : braille_code Braille_MinusSign = braille_code("MinusSign", "36");
     388              : braille_code Braille_SlashSign = braille_code("SlashSign", "34");
     389              : //#note dot sign, to add value for the associated note and some other situations
     390              : braille_code Braille_Dot = braille_code("Dot", "3");
     391              : braille_code Braille_Parentheses = braille_code("Parentheses", "6-3");
     392              : braille_code Braille_OpenParentheses = braille_code("OpenParentheses", "6-3");
     393              : braille_code Braille_CloseParentheses = braille_code("CloseParentheses", "6-3");
     394              : braille_code Braille_SpecialParentheses = braille_code("SpecialParentheses", "2356");
     395              : braille_code Braille_PageIndicator = braille_code("PageIndicator", "5-25");
     396              : braille_code Braille_LineIndicator = braille_code("LineIndicator", "6-123");
     397              : braille_code Braille_Hyphen = braille_code("Hyphen", "5");
     398              : braille_code Braille_MusicComma = braille_code("MusicComma", "126-2");
     399              : braille_code Braille_MusicCommaEnd = braille_code("MusicCommaEnd", "126-2-3");
     400              : //##########Added by Haipeng##########
     401              : //#Prefix for cautionary accidentals and hidden rests
     402              : braille_code Braille_Cautionary = braille_code("Cautionary", "5");
     403              : //#Prefix for editorial elements such as dashed slurs, ties and hairpins
     404              : braille_code Braille_Editorial = braille_code("Editorial", "5-123");
     405              : //####################
     406              : braille_code Braille_EqualSign = braille_code("EqualSign", "2356");
     407              : braille_code Braille_UpperOpenBracket = braille_code("UpperOpenBracket", "56-2");
     408              : braille_code Braille_UpperCloseBracket = braille_code("UpperCloseBracket", "5-23");
     409              : braille_code Braille_UpperBrokenOpenBracket = braille_code("UpperBrokenOpenBracket", "56-2-2");
     410              : braille_code Braille_UpperBrokenCloseBracket = braille_code("UpperBrokenCloseBracket", "5-5-23");
     411              : braille_code Braille_UpperOpenEndedBracket = braille_code("UpperOpenEndedBracket", "56-2");
     412              : braille_code Braille_UpperCloseEndedBracket = braille_code("UpperCloseEndedBracket", "5-3");
     413              : braille_code Braille_LowerOpenBracket = braille_code("LowerOpenBracket", "56-3");
     414              : braille_code Braille_LowerCloseBracket = braille_code("LowerCloseBracket", "6-23");
     415              : braille_code Braille_LowerBrokenOpenBracket = braille_code("LowerBrokenOpenBracket", "56-3-3");
     416              : braille_code Braille_LowerBrokenCloseBracket = braille_code("LowerBrokenCloseBracket", "6-6-23");
     417              : braille_code Braille_LowerOpenEndedBracket = braille_code("LowerOpenEndedBracket", "56-3");
     418              : braille_code Braille_LowerCloseEndedBracket = braille_code("LowerCloseEndedBracket", "6-2");
     419              : braille_code Braille_OpenMusicCodeIndicator = braille_code("OpenMusicCodeIndicator", "6-3");
     420              : braille_code Braille_CloseMusicCodeIndicator = braille_code("CloseMusicCodeIndicator", "56-23");
     421              : braille_code Braille_AsteriskSign = braille_code("AsteriskSign", "345-26-35");
     422              : braille_code Braille_FootnoteSeparator = braille_code("FootnoteSeparator", "36-36-36-36-36");
     423              : //[Harmony]
     424              : braille_code Braille_Diminished = braille_code("Diminished", "256");
     425              : braille_code Braille_HalfDiminished = braille_code("", "256-3");
     426              : braille_code Braille_Triangle = braille_code("HalfDiminished", "356");
     427              : braille_code Braille_HalfTriangle = braille_code("HalfTriangle", "356-3");
     428              : //#No chord
     429              : braille_code Braille_NoHarmony = braille_code("NoHarmony", "6-6-1345-14");
     430              : 
     431              : //##########Newly added by Haipeng
     432              : //#A figure is prefixed by a number sign, so here only give the signs not available elsewhere
     433              : braille_code Braille_IsolatedSharp = braille_code("IsolatedSharp", "146-13");
     434              : braille_code Braille_IsolatedDoubleSharp = braille_code("IsolatedDoubleSharp", "146-146-13");
     435              : braille_code Braille_IsolatedFlat = braille_code("IsolatedFlat", "126-13");
     436              : braille_code Braille_IsolatedDoubleFlat = braille_code("IsolatedDoubleFlat", "126-126-13");
     437              : braille_code Braille_IsolatedNatural = braille_code("IsolatedNatural", "16-13");
     438              : braille_code Braille_Cross = braille_code("Cross", "56");
     439              : 
     440              : braille_code Braille_FiguredBassIndicator = braille_code("FiguredBassIndicator", "56-345");
     441              : braille_code Braille_FiguredBassSeparator = braille_code("FiguredBassSeparator", "36");
     442              : braille_code Braille_PlusAccidental = braille_code("PlusAccidental", "346");
     443              : braille_code Braille_AccidentalIsolator = braille_code("AccidentalIsolator", "13");
     444              : braille_code Braille_BackslashFigure = braille_code("BackslashFigure", "56");
     445              : braille_code Braille_SlashFigure = braille_code("SlashFigure", "34");
     446              : braille_code Braille_FigureExtension = braille_code("FigureExtension", "1");
     447              : //####################
     448              : //#note value indicators: to add before a note having same Braille shape but with different value like between  half and 32nd notes.
     449              : //#whole-8th notes range
     450              : braille_code Braille_FirstValueRange = braille_code("FirstValueRange", "45-126-2");
     451              : //#16th-128th notes range
     452              : braille_code Braille_SecondValueRange = braille_code("SecondValueRange", "6-126-2");
     453              : //#256th notes and further range
     454              : braille_code Braille_ThirdValueRange = braille_code("ThirdValueRange", "56-126-2");
     455              : 
     456              : braille_code* Braille_ValueRanges[] = { &Braille_FirstValueRange, &Braille_SecondValueRange, &Braille_ThirdValueRange };
     457              : //#octave signs
     458              : //#based on Piano keyboard, octave 0 and 8 for lowest and highest notes out of the full octave
     459              : //#there are 7 full octaves from 1 to 7
     460              : braille_code Braille_Octave0 = braille_code("Octave0", "4-4");
     461              : braille_code Braille_Octave1 = braille_code("Octave1", "4");
     462              : braille_code Braille_Octave2 = braille_code("Octave2", "45");
     463              : braille_code Braille_Octave3 = braille_code("Octave3", "456");
     464              : braille_code Braille_Octave4 = braille_code("Octave4", "5");
     465              : braille_code Braille_Octave5 = braille_code("Octave5", "46");
     466              : braille_code Braille_Octave6 = braille_code("Octave6", "56");
     467              : braille_code Braille_Octave7 = braille_code("Octave7", "6");
     468              : braille_code Braille_Octave8 = braille_code("Octave8", "6-6");
     469              : 
     470              : braille_code* Braille_Octaves[] = {
     471              :     &Braille_Octave0, &Braille_Octave1, &Braille_Octave2,
     472              :     &Braille_Octave3, &Braille_Octave4, &Braille_Octave5,
     473              :     &Braille_Octave6, &Braille_Octave7, &Braille_Octave8 };
     474              : //#clef signs
     475              : braille_code Braille_ClefG = braille_code("ClefG", "345-34-123");
     476              : braille_code Braille_ClefF = braille_code("ClefF", "345-3456-123");
     477              : braille_code Braille_ClefC = braille_code("ClefC", "345-346-123");
     478              : //#Treble and bass clefs used in different hands
     479              : braille_code Braille_ClefGLeft = braille_code("ClefGLeft", "345-34-13");
     480              : braille_code Braille_ClefFRight = braille_code("ClefFRight", "345-3456-13");
     481              : //#special clefs
     482              : //#G/F/C clef on first line (French violin), second/third/fourth/fifth line etc
     483              : braille_code Braille_ClefGFirstLine = braille_code("ClefGFirstLine", "345-34-4-123");
     484              : braille_code Braille_ClefGThirdLine = braille_code("ClefGThirdLine", "345-34-456-123");
     485              : braille_code Braille_ClefGFourthLine = braille_code("ClefGFourthLine", "345-34-5-123");
     486              : braille_code Braille_ClefGFifthLine = braille_code("ClefGFifthLine", "345-34-46-123");
     487              : braille_code Braille_ClefFFirstLine = braille_code("ClefFFirstLine", "345-3456-4-123");
     488              : braille_code Braille_ClefFSecondLine = braille_code("ClefFSecondLine", "345-3456-45-123");
     489              : braille_code Braille_ClefFThirdLine = braille_code("ClefFThirdLine", "345-3456-456-123");
     490              : //braille_code Braille_ClefFFourthLine = braille_code("ClefFFourthLine", "345-3456-5-123");
     491              : braille_code Braille_ClefFFifthLine = braille_code("ClefFFifthLine", "345-3456-46-123");
     492              : braille_code Braille_ClefCFirstLine = braille_code("ClefCFirstLine", "345-346-4-123");
     493              : braille_code Braille_ClefCSecondLine = braille_code("ClefCSecondLine", "345-346-45-123");
     494              : //braille_code Braille_ClefCThirdLine = braille_code("ClefCThirdLine", "345-346-456-123");
     495              : braille_code Braille_ClefCFourthLine = braille_code("ClefCFourthLine", "345-346-5-123");
     496              : braille_code Braille_ClefCFifthLine = braille_code("ClefCFifthLine", "345-346-46-123");
     497              : //#hands
     498              : braille_code Braille_RightHand = braille_code("RightHand", "46-345");
     499              : braille_code Braille_LeftHand = braille_code("LeftHand", "456-345");
     500              : //##########Added by Haipeng##########
     501              : //#Right and left hands with reversed interval directions in hand-changing passage. Not used for general interval direction changes such as piano left hand reading downwards in orchestral scores where all intervals are down.
     502              : braille_code Braille_RightHandUp = braille_code("RightHandUp", "46-345-345");
     503              : braille_code Braille_LeftHandDown = braille_code("LeftHandDown", "456-345-345");
     504              : //####################
     505              : braille_code Braille_OrganPedal = braille_code("OrganPedal", "45-345");
     506              : //##########Added by Haipeng##########
     507              : //#Chord and figured bass prefix
     508              : braille_code Braille_ChordPrefix = braille_code("ChordPrefix", "25-345");
     509              : //#Accordion prefix, detected by instrument definition
     510              : //AccordionBass 6-345
     511              : //#Outline prefix, when producing piano accompaniment with melody outline
     512              : braille_code Braille_Outline = braille_code("Outline", "5-345");
     513              : //####################
     514              : //#accidental signs: natural, sharp and flat.
     515              : braille_code Braille_NaturalAccidental = braille_code("NaturalAccidental", "16");
     516              : //#sharps
     517              : braille_code Braille_SharpAccidental = braille_code("SharpAccidental", "146");
     518              : //#1/4 sharp
     519              : braille_code Braille_QuarterSharp = braille_code("QuarterSharp", "4-146");
     520              : //#3/4 sharp
     521              : braille_code Braille_ThreeQuarterSharp = braille_code("ThreeQuarterSharp", "456-146");
     522              : //#flats
     523              : braille_code Braille_FlatAccidental = braille_code("FlatAccidental", "126");
     524              : braille_code Braille_QuarterFlat = braille_code("QuarterFlat", "4-126");
     525              : braille_code Braille_ThreeQuarterFlat = braille_code("ThreeQuarterFlat", "456-126");
     526              : 
     527              : braille_code* Braille_Accidentals[] = {
     528              :     &Braille_NaturalAccidental,
     529              :     &Braille_SharpAccidental, &Braille_QuarterSharp, &Braille_ThreeQuarterSharp,
     530              :     &Braille_FlatAccidental, &Braille_QuarterFlat, &Braille_ThreeQuarterFlat
     531              : };
     532              : //#Time signatures
     533              : braille_code Braille_CommonTime = braille_code("CommonTime", "46-14");
     534              : braille_code Braille_CutTime = braille_code("CutTime", "456-14");
     535              : //# time signature by seconds
     536              : braille_code Braille_TimeInSecondSign = braille_code("TimeInSecondSign", "45");
     537              : braille_code Braille_TimeExtensionSign = braille_code("TimeExtensionSign", "36-36");
     538              : //#ties
     539              : braille_code Braille_NoteTie = braille_code("NoteTie", "4-14");
     540              : braille_code Braille_ChordTie = braille_code("ChordTie", "46-14");
     541              : braille_code Braille_ChordTieDoubling = braille_code("ChordTieDoubling", "46-14-14");
     542              : braille_code Braille_Arpeggio = braille_code("Arpeggio", "45-14");
     543              : braille_code Braille_TieLetRing = braille_code("TieLetRing", "56-14");
     544              : braille_code Braille_TieNoStart = braille_code("TieNoStart", "46-56-14");
     545              : //##########Added by Haipeng##########
     546              : braille_code Braille_TieCrossVoice = braille_code("TieCrossVoice", "456-4-14");
     547              : braille_code Braille_TieCrossVoiceFrom = braille_code("TieCrossVoiceFrom", "46-456-4-14");
     548              : braille_code Braille_TieCrossStaff = braille_code("TieCrossStaff", "5-4-14");
     549              : braille_code Braille_TieCrossStaffFrom = braille_code("TieCrossStaffFrom", "46-5-4-14");
     550              : braille_code Braille_ChordTieCrossVoice = braille_code("ChordTieCrossVoice", "456-46-14");
     551              : braille_code Braille_ChordTieCrossVoiceFrom = braille_code("ChordTieCrossVoiceFrom", "46-456-46-14");
     552              : braille_code Braille_ChordTieCrossStaff = braille_code("ChordTieCrossStaff", "5-46-14");
     553              : braille_code Braille_ChordTieCrossStaffFrom = braille_code("ChordTieCrossStaffFrom", "46-5-46-14");
     554              : //####################
     555              : //#slurs
     556              : braille_code Braille_NoteSlur = braille_code("NoteSlur", "14");
     557              : braille_code Braille_LongSlurOpenBracket = braille_code("LongSlurOpenBracket", "56-12");
     558              : braille_code Braille_LongSlurCloseBracket = braille_code("LongSlurCloseBracket", "45-23");
     559              : braille_code Braille_ConvergentSlur = braille_code("ConvergentSlur", "6-14");
     560              : braille_code Braille_SameNoteSlur = braille_code("SameNoteSlur", "56-14");
     561              : 
     562              : braille_code Braille_GraceSlur = braille_code("GraceSlur", "56-14");
     563              : braille_code Braille_GraceSlurDoubling = braille_code("GraceSlurDoubling", "56-14-14");
     564              : //##########Added by Haipeng##########
     565              : braille_code Braille_SlurCrossVoice = braille_code("SlurCrossVoice", "456-14");
     566              : braille_code Braille_SlurCrossVoiceFrom = braille_code("SlurCrossVoiceFrom", "46-456-14");
     567              : braille_code Braille_SlurCrossStaff = braille_code("slurCrossStaff", "5-14");
     568              : braille_code Braille_SlurCrossStaffFrom = braille_code("SlurCrossStaffFrom", "46-5-14");
     569              : //####################
     570              : //#Intervals, Braille signs to write for chords
     571              : //#Braille sign for second interval has same dots for 9, 16, 23 (+7)
     572              : braille_code Braille_Interval2 = braille_code("Interval2", "34");
     573              : braille_code Braille_Interval3 = braille_code("Interval3", "346");
     574              : braille_code Braille_Interval4 = braille_code("Interval4", "3456");
     575              : braille_code Braille_Interval5 = braille_code("Interval5", "35");
     576              : braille_code Braille_Interval6 = braille_code("Interval6", "356");
     577              : braille_code Braille_Interval7 = braille_code("Interval7", "25");
     578              : braille_code Braille_Interval8 = braille_code("Interval8", "36");
     579              : 
     580              : braille_code* Braille_Intervals[] = {
     581              :     &Braille_Interval2, &Braille_Interval3, &Braille_Interval4,
     582              :     &Braille_Interval5, &Braille_Interval6, &Braille_Interval7,
     583              :     &Braille_Interval8 };
     584              : //#tuplet: note grouping 2/3/5/6/XXX-notes grouping
     585              : braille_code Braille_Tuplet3 = braille_code("Tuplet3", "23");
     586              : braille_code Braille_TupletPrefix = braille_code("TupletPrefix", "456");
     587              : //#repeats' signs in print score
     588              : braille_code Braille_RepetitionForward = braille_code("RepetitionForward", "126-2356");
     589              : braille_code Braille_RepetitionBackward = braille_code("RepetitionBackward", "126-23");
     590              : braille_code Braille_Coda = braille_code("Coda", "346-123");
     591              : braille_code Braille_Segno = braille_code("Segno", "346");
     592              : // Fermata
     593              : braille_code Braille_InvertedType = braille_code("InvertedType", "5");
     594              : braille_code Braille_FermataDefault = braille_code("FermataDefault", "126-123");
     595              : braille_code Braille_FermataSquare = braille_code("FermataSquare", "56-126-123");
     596              : braille_code Braille_FermataAngled = braille_code("FermataAngled", "45-126-123");
     597              : braille_code Braille_FermataDoubleSquare = braille_code("FermataDoubleSquare", "56-56-126-123");
     598              : braille_code Braille_FermataDoubleAngled = braille_code("FermataDoubleAngled", "45-45-126-123");
     599              : braille_code Braille_FermataHalfCurve = braille_code("FermataHalfCurve", "45-126-123");
     600              : braille_code Braille_FermataDoubleDot = braille_code("FermataDoubleDot", "56-126-123");
     601              : //##Newly added by Haipeng##
     602              : braille_code Braille_FermataBarline = braille_code("FermataBarline", "456-126-123");
     603              : braille_code Braille_FermataNormalBarline = braille_code("FermataNormalBarline", "456");
     604              : //#Braille measure or partial repetition sign
     605              : braille_code Braille_NotesRepeat = braille_code("NotesRepeat", "2356");
     606              : //#Newly added by Haipeng##
     607              : //#This repeat should be used according to beamings in unmeasured passage. It should be used between beams, within a long beam, but can't cross beams in different places, thus break the musical meaning implied by the beaming.
     608              : braille_code Braille_StartingBeamRepeat = braille_code("StartingBeamRepeat", "16-2356");
     609              : //#barlines
     610              : braille_code Braille_SingleBarline = braille_code("SingleBarline", "0");
     611              : braille_code Braille_DashedBarline = braille_code("DashedBarline", "13");
     612              : braille_code Braille_SpecialBarline = braille_code("SpecialBarline", "123");
     613              : braille_code Braille_SectionalDouble = braille_code("SectionalDouble", "126-13-3");
     614              : braille_code Braille_FinalDouble = braille_code("FinalDouble", "126-13");
     615              : //#fingering
     616              : braille_code Braille_Finger0 = braille_code("Finger0", "13"); //#thumb
     617              : braille_code Braille_Finger1 = braille_code("Finger1", "1");     //#index
     618              : braille_code Braille_Finger2 = braille_code("Finger2", "12");    //#middle
     619              : braille_code Braille_Finger3 = braille_code("Finger3", "123");   //#ring
     620              : braille_code Braille_Finger4 = braille_code("Finger4", "2");     //#little
     621              : braille_code Braille_Finger5 = braille_code("Finger5", "13");    //#open string
     622              : 
     623              : braille_code Braille_FingerSlur = braille_code("FingerSlur", "14");    //Finger slur
     624              : 
     625              : braille_code* Braille_Fingers[] = { &Braille_Finger0, &Braille_Finger1, &Braille_Finger2,
     626              :                                     &Braille_Finger3, &Braille_Finger4, &Braille_Finger5 };
     627              : //##Comment by Haipeng: The names above are not strict, but I believe they can be correctly mapped to Musicxml.##
     628              : //#plucks, for string instruments
     629              : braille_code Braille_PluckP = braille_code("PluckP", "1234"); //#thumb
     630              : braille_code Braille_PluckI = braille_code("PluckI", "24");   //#index
     631              : braille_code Braille_PluckM = braille_code("PluckM", "134");  //#middle
     632              : braille_code Braille_PluckA = braille_code("PluckA", "1");    //#ring
     633              : braille_code Braille_PluckC = braille_code("PluckC", "1346");   //#little
     634              : 
     635              : braille_code* Braille_Plucks[] = { &Braille_PluckP, &Braille_PluckI, &Braille_PluckM,
     636              :                                    &Braille_PluckA, &Braille_PluckC };
     637              : 
     638              : braille_code Braille_Dot6PluckP = braille_code("Dot6PluckP", "6-1");
     639              : braille_code Braille_Dot6PluckI = braille_code("Dot6PluckI", "6-12");
     640              : braille_code Braille_Dot6PluckM = braille_code("Dot6PluckM", "6-123");
     641              : braille_code Braille_Dot6PluckA = braille_code("Dot6PluckA", "6-2");
     642              : braille_code Braille_Dot6PluckC = braille_code("Dot6PluckC", "6-13");
     643              : //#string
     644              : braille_code Braille_String1 = braille_code("String1", "146-1");
     645              : braille_code Braille_String2 = braille_code("String2", "146-12");
     646              : braille_code Braille_String3 = braille_code("String3", "146-123");
     647              : braille_code Braille_String4 = braille_code("String4", "146-2");
     648              : braille_code Braille_String5 = braille_code("String5", "146-13");
     649              : braille_code Braille_String6 = braille_code("String6", "146-23");
     650              : braille_code Braille_String7 = braille_code("String7", "146-3");
     651              : 
     652              : braille_code* Braille_Strings[] = {
     653              :     &Braille_String1, &Braille_String2, &Braille_String3,
     654              :     &Braille_String4, &Braille_String5, &Braille_String6,
     655              :     &Braille_String7 };
     656              : 
     657              : braille_code Braille_String1_Doubling = braille_code("String1Doubling", "146-1-1");
     658              : braille_code Braille_String2_Doubling = braille_code("String2Doubling", "146-12-12");
     659              : braille_code Braille_String3_Doubling = braille_code("String3Doubling", "146-123-123");
     660              : braille_code Braille_String4_Doubling = braille_code("String4Doubling", "146-2-2");
     661              : braille_code Braille_String5_Doubling = braille_code("String5Doubling", "146-13-13");
     662              : braille_code Braille_String6_Doubling = braille_code("String6Doubling", "146-23-23");
     663              : braille_code Braille_String7_Doubling = braille_code("String7Doubling", "146-3-3");
     664              : 
     665              : braille_code* Braille_Strings_Doubling[] = {
     666              :     &Braille_String1_Doubling, &Braille_String2_Doubling, &Braille_String3_Doubling,
     667              :     &Braille_String4_Doubling, &Braille_String5_Doubling, &Braille_String6_Doubling,
     668              :     &Braille_String7_Doubling };
     669              : //[Fret]
     670              : //#frets
     671              : braille_code Braille_Fret1 = braille_code("Fret1", "345-345");
     672              : braille_code Braille_Fret2 = braille_code("Fret2", "345-34");
     673              : braille_code Braille_Fret3 = braille_code("Fret3", "345-346");
     674              : braille_code Braille_Fret4 = braille_code("Fret4", "345-3456");
     675              : braille_code Braille_Fret5 = braille_code("Fret5", "345-35");
     676              : braille_code Braille_Fret6 = braille_code("Fret6", "345-356");
     677              : braille_code Braille_Fret7 = braille_code("Fret7", "6-345-25");
     678              : braille_code Braille_Fret8 = braille_code("Fret8", "345-36");
     679              : braille_code Braille_Fret9 = braille_code("Fret9", "345-36-34");
     680              : braille_code Braille_Fret10 = braille_code("Fret10", "345-36-346");
     681              : braille_code Braille_Fret11 = braille_code("Fret11", "345-36-3456");
     682              : braille_code Braille_Fret12 = braille_code("Fret12", "345-36-35");
     683              : braille_code Braille_Fret13 = braille_code("Fret13", "345-36-356");
     684              : 
     685              : braille_code* Braille_Frets[] = {
     686              :     &Braille_Fret1, &Braille_Fret2, &Braille_Fret3,
     687              :     &Braille_Fret4, &Braille_Fret5, &Braille_Fret6,
     688              :     &Braille_Fret7, &Braille_Fret8, &Braille_Fret9,
     689              :     &Braille_Fret10, &Braille_Fret11, &Braille_Fret12,
     690              :     &Braille_Fret13 };
     691              : //[VoiceAccord]
     692              : //#accord
     693              : braille_code Braille_FullMeasureAccord = braille_code("FullMeasureAccord", "126-345");
     694              : braille_code Braille_PartialMeasureAccord = braille_code("PartialMeasureAccord", "5-2");
     695              : braille_code Braille_MeasureSeparator = braille_code("MeasureSeparator", "46-13");
     696              : //[Pedal]
     697              : //#pedal signs
     698              : braille_code Braille_PedalDown = braille_code("PedalDown", "126-14");
     699              : braille_code Braille_PedalUp = braille_code("PedalUp", "16-14");
     700              : braille_code Braille_NotePedalUpDownAtNote = braille_code("NotePedalUpDownAtNote", "16-126-14");
     701              : braille_code Braille_HalfPedal = braille_code("HalfPedal", "5-126-14");
     702              : braille_code Braille_AfterNotePedalDown = braille_code("AfterNotePedalDown", "6-126-14");
     703              : braille_code Braille_AfterNotePedalUp = braille_code("AfterNotePedalUp", "5-16-14");
     704              : braille_code Braille_NoPedal = braille_code("NoPedal", "16-14");
     705              : //[Ornament]
     706              : //#articulations, ornaments
     707              : braille_code Braille_Spiccato = braille_code("Spiccato", "236");
     708              : braille_code Braille_Staccato = braille_code("Staccato", "236");
     709              : braille_code Braille_Staccatissimo = braille_code("Staccatissimo", "6-236");
     710              : braille_code Braille_DetachedLegato = braille_code("DetachedLegato", "5-236");
     711              : braille_code Braille_Tenuto = braille_code("Tenuto", "456-236");
     712              : braille_code Braille_Accent = braille_code("Accent", "46-236");
     713              : braille_code Braille_Stress = braille_code("Stress", "45-236");
     714              : braille_code Braille_Unstress = braille_code("Unstress", "4-236");
     715              : braille_code Braille_StrongAccent = braille_code("StrongAccent", "56-236");
     716              : //##########Added by Haipeng##########
     717              : braille_code Braille_SoftAccent = braille_code("SoftAccent", "16-3");
     718              : braille_code Braille_Scoop = braille_code("Scoop", "126-3-14");
     719              : braille_code Braille_Plop = braille_code("Plop", "126-12-14");
     720              : braille_code Braille_Doit = braille_code("Doit", "14-126-3");
     721              : braille_code Braille_Falloff = braille_code("Falloff", "14-126-12");
     722              : braille_code Braille_UpBow = braille_code("UpBow", "126-3");
     723              : braille_code Braille_DownBow = braille_code("DownBow", "126-12");
     724              : braille_code Braille_HarmonicNatural = braille_code("HarmonicNatural", "13");
     725              : braille_code Braille_HarmonicArtificial = braille_code("HarmonicArtificial", "16-123");
     726              : braille_code Braille_OpenString = braille_code("OpenString", "13");
     727              : braille_code Braille_Stopped = braille_code("Stopped", "126-12");
     728              : braille_code Braille_SnapPizzicato = braille_code("SnapPizzicato", "16-13");
     729              : braille_code Braille_HammerOn = braille_code("HammerOn", "126-3");
     730              : braille_code Braille_PullOff = braille_code("PullOff", "126-12");
     731              : //####################
     732              : braille_code Braille_ArpeggiateUp = braille_code("ArpeggiateUp", "345-13");
     733              : braille_code Braille_ArpeggiateDown = braille_code("ArpeggiateDown", "345-13-13");
     734              : braille_code Braille_Cue = braille_code("Cue", "6-26");
     735              : braille_code Braille_GraceShort = braille_code("GraceShort", "26");
     736              : braille_code Braille_GraceLong = braille_code("GraceLong", "5-26");
     737              : braille_code Braille_TrillMark = braille_code("TrillMark", "235");
     738              : braille_code Braille_Turn = braille_code("Turn", "6-256");
     739              : braille_code Braille_InvertedTurn = braille_code("InvertedTurn", "6-256-123");
     740              : braille_code Braille_DelayedTurn = braille_code("DelayedTurn", "256");
     741              : braille_code Braille_DelayedInvertedTurn = braille_code("DelayedInvertedTurn", "256-123");
     742              : braille_code Braille_MordentShort = braille_code("MordentShort", "5-235-123");
     743              : braille_code Braille_MordentLong = braille_code("MordentLong", "56-235-123");
     744              : braille_code Braille_InvertedMordentShort = braille_code("InvertedMordentShort", "5-235");
     745              : braille_code Braille_InvertedMordentLong = braille_code("InvertedMordentLong", "56-235");
     746              : //##Added by Haipeng##
     747              : braille_code Braille_Schleifer = braille_code("Schleifer", "4-26");
     748              : braille_code Braille_Shake = braille_code("Shake", "5-235-123");
     749              : braille_code Braille_BreathMark = braille_code("BreathMark", "345-2");
     750              : braille_code Braille_Caesura = braille_code("Caesura", "6-34");
     751              : 
     752              : braille_code Braille_TremoloSingle1 = braille_code("TremoloSingle1", "45-12");
     753              : braille_code Braille_TremoloSingle2 = braille_code("TremoloSingle2", "45-123");
     754              : braille_code Braille_TremoloSingle3 = braille_code("TremoloSingle3", "45-2");
     755              : braille_code Braille_TremoloSingle4 = braille_code("TremoloSingle4", "45-13");
     756              : braille_code Braille_TremoloSingle5 = braille_code("TremoloSingle5", "45-3");
     757              : 
     758              : braille_code* Braille_TremoloSingles[] = {
     759              :     &Braille_TremoloSingle1, &Braille_TremoloSingle2, &Braille_TremoloSingle3,
     760              :     &Braille_TremoloSingle4, &Braille_TremoloSingle5 };
     761              : 
     762              : braille_code Braille_TremoloDouble1 = braille_code("TremoloDouble1", "46-12");
     763              : braille_code Braille_TremoloDouble2 = braille_code("TremoloDouble2", "46-123");
     764              : braille_code Braille_TremoloDouble3 = braille_code("TremoloDouble3", "46-2");
     765              : braille_code Braille_TremoloDouble4 = braille_code("TremoloDouble4", "46-1");
     766              : braille_code Braille_TremoloDouble5 = braille_code("TremoloDouble5", "46-3");
     767              : 
     768              : braille_code* Braille_TremoloDoubles[] = {
     769              :     &Braille_TremoloDouble1, &Braille_TremoloDouble2, &Braille_TremoloDouble3,
     770              :     &Braille_TremoloDouble4, &Braille_TremoloDouble5 };
     771              : 
     772              : braille_code Braille_Glissando = braille_code("Glissando", "4-1");
     773              : braille_code Braille_LongGlissandoStart = braille_code("LongGlissandoStart", "4-1-3");
     774              : braille_code Braille_LongGlissandoStop = braille_code("LongGlissandoStop", "6-4-1");
     775              : braille_code Braille_Slide = braille_code("Slide", "4-1");
     776              : braille_code Braille_LongSlideStart = braille_code("LongSlideStart", "4-1-3");
     777              : braille_code Braille_LongSlideStop = braille_code("LongSlideStop", "6-4-1");
     778              : //##########Added by Haipeng##########
     779              : //[Noteheads]
     780              : braille_code Braille_blackHead = braille_code("blackHead", "26-1");
     781              : braille_code Braille_XShape = braille_code("XShape", "26-12");
     782              : braille_code Braille_Diamond = braille_code("Diamond", "26-123");
     783              : braille_code Braille_DiamondHarmonic = braille_code("DiamondHarmonic", "16-123");
     784              : braille_code Braille_Slashed = braille_code("Slashed", "26-13");
     785              : //#Comment: If the diamond is in a chord, then use DiamondHarmonic, since it's an artificial harmonic.
     786              : braille_code Braille_StemOnly = braille_code("StemOnly", "26-13");
     787              : braille_code Braille_Circled = braille_code("Circled", "26-2");
     788              : //[Stems]
     789              : braille_code Braille_StemPrefix = braille_code("StemPrefix", "456");
     790              : braille_code Braille_StemWhole = braille_code("StemWhole", "3");
     791              : braille_code Braille_StemHalf = braille_code("StemHalf", "13");
     792              : braille_code Braille_StemQuarter = braille_code("StemQuarter", "1");
     793              : braille_code Braille_Stem8th = braille_code("Stem8th", "12");
     794              : braille_code Braille_Stem16th = braille_code("Stem16th", "123");
     795              : braille_code Braille_Stem32nd = braille_code("Stem32nd", "2");
     796              : //[HarpPedalDiagram]
     797              : braille_code Braille_HarpPedalBegin = braille_code("HarpPedalBegin", "345-36");
     798              : braille_code Braille_HarpPedalEnd = braille_code("HarpPedalEnd", "3-345");
     799              : braille_code Braille_HarpPedalRaised = braille_code("HarpPedalRaised", "12");
     800              : braille_code Braille_HarpPedalCentered = braille_code("HarpPedalCentered", "2");
     801              : braille_code Braille_HarpPedalLowered = braille_code("HarpPedalLowered", "23");
     802              : braille_code Braille_HarpPedalDivider = braille_code("HarpPedalDivider", "123");
     803              : //[FetherBeams]
     804              : braille_code Braille_FanBeamAccelerando = braille_code("FanBeamAccelerando", "45-126-2-6-126-2");
     805              : braille_code Braille_FanBeamRitardando = braille_code("FanBeamRitardando", "6-126-2-45-126-2");
     806              : braille_code Braille_FanBeamSteady = braille_code("FanBeamSteady", "6-126-2-6-126-2");
     807              : braille_code Braille_FanBeamEnd = braille_code("FanBeamEnd", "56-13");
     808              : // Placement
     809              : braille_code Braille_PlacementBelow = braille_code("PlacementBelow", "6");
     810              : // Hand interval up/down
     811              : braille_code Braille_LeftHandIntervalDown = braille_code("LeftHandIntervalDown", "456-345-345");
     812              : braille_code Braille_RightHandIntervalUp = braille_code("RightHandIntervalUp", "46-345-345");
     813              : // Additional braille codes
     814              : braille_code Braille_NewLine = braille_code("NewLine", "\n");
     815              : // Slurs
     816              : braille_code Braille_SlurCrossVoiceDubling = braille_code("SlurCrossVoiceDubling", "456-14-14");
     817              : braille_code Braille_SlurCrossStaffDubling = braille_code("SlurCrossStaffDubling", "5-14-14");
     818              : // Wavy
     819              : braille_code Braille_OrnamentWavyStart = braille_code("OrnamentWavyStart", "3-3");
     820              : braille_code Braille_OrnamentWavyStop = braille_code("OrnamentWavyStop", "345-3");
     821              : braille_code Braille_WavyRepetitionLine = braille_code("WavyRepetitionLine", "26-2356");
     822              : // Dubling
     823              : braille_code Braille_CueDubling = braille_code("CueDubling", "6-26-26");
     824              : braille_code Braille_GraceLongDubling = braille_code("GraceLongDubling", "5-26-26");
     825              : // Noteheads dubling
     826              : braille_code Braille_blackHeadDubling = braille_code("blackHeadDubling", "26-1-1");
     827              : braille_code Braille_XShapeDubling = braille_code("XShapeDubling", "26-12-12");
     828              : braille_code Braille_DiamondDubling = braille_code("DiamondDubling", "26-123-123");
     829              : braille_code Braille_DiamondHarmonicDubling = braille_code("DiamondHarmonicDubling", "16-123-16-123");
     830              : braille_code Braille_SlashedDubling = braille_code("SlashedDubling", "26-13-13");
     831              : braille_code Braille_StemOnlyDubling = braille_code("StemOnlyDubling", "26-13-13");
     832              : braille_code Braille_CircledDubling = braille_code("CircledDubling", "26-2-2");
     833              : // Tremolo dubling
     834              : braille_code Braille_TremoloSingle1Dubling = braille_code("TremoloSingle1Dubling", "45-12-12");
     835              : braille_code Braille_TremoloSingle2Dubling = braille_code("TremoloSingle2Dubling", "45-123-123");
     836              : braille_code Braille_TremoloSingle3Dubling = braille_code("TremoloSingle3Dubling", "45-2-2");
     837              : braille_code Braille_TremoloSingle4Dubling = braille_code("TremoloSingle4Dubling", "45-13-13");
     838              : braille_code Braille_TremoloSingle5Dubling = braille_code("TremoloSingle5Dubling", "45-3-3");
     839              : braille_code Braille_TremoloDouble1Dubling = braille_code("TremoloDouble1Dubling", "46-12-12");
     840              : braille_code Braille_TremoloDouble2Dubling = braille_code("TremoloDouble2Dubling", "46-123-123");
     841              : braille_code Braille_TremoloDouble3Dubling = braille_code("TremoloDouble3Dubling", "46-2-2");
     842              : braille_code Braille_TremoloDouble4Dubling = braille_code("TremoloDouble4Dubling", "46-1-1");
     843              : braille_code Braille_TremoloDouble5Dubling = braille_code("TremoloDouble5Dubling", "46-3-3");
     844              : // Dash sign
     845              : braille_code Braille_DashSign = braille_code("DashSign", "36");
     846              : // Dashline
     847              : braille_code Braille_DashLineStart = braille_code("DashLineStart", "3-3");
     848              : braille_code Braille_DashLineStop = braille_code("DashLineStop", "345-3");
     849              : braille_code Braille_DashNestedLineStart = braille_code("DashNestedLineStart", "36-36");
     850              : braille_code Braille_DashNestedLineStop = braille_code("DashNestedLineStop", "345-36");
     851              : // Elision
     852              : braille_code Braille_Elision2 = braille_code("Elision2", "12");
     853              : braille_code Braille_Elision3 = braille_code("Elision3", "123");
     854              : // Empty
     855              : braille_code Braille_Empty = braille_code("Empty", "");
     856              : // line over line format
     857              : braille_code Braille_HarmonyLineIndicator = braille_code("HarmonyLineIndicator", "25-345");
     858              : braille_code Braille_LyricLineIndicator = braille_code("LyricLineIndicator", "56-23");
     859              : braille_code Braille_MusicLineIndicator = braille_code("MusicLineIndicator", "6-3");
     860              : braille_code Braille_PluckLineIndicator = braille_code("PluckLineIndicator", "0-0");
     861              : braille_code Braille_SoloMelodyLineIndicator = braille_code("SoloMelodyLineIndicator", "5-345");
     862              : // wedge stop
     863              : braille_code Braille_WedgeCStop = braille_code("WedgeCStop", "345-25");
     864              : braille_code Braille_WedgeDStop = braille_code("WedgeDStop", "345-256");
     865              : // Repeats
     866              : braille_code Braille_PartialRepeat = braille_code("PartialRepeat", "2356");
     867              : braille_code Braille_MeasureRepeat = braille_code("MeasureRepeat", "2356"); // ??? 2356?
     868              : // Check dot
     869              : braille_code Braille_CheckDot = braille_code("CheckDot", "");
     870              : // Check figure Bass Separator
     871              : braille_code Braille_CheckFiguredBassSeparator = braille_code("CheckFiguredBassSeparator", "");
     872              : // Thumb
     873              : braille_code Braille_ThumbPosition = braille_code("ThumbPosition", "16-13");
     874              : // Accordion
     875              : braille_code Braille_AccordionMiddle2 = braille_code("AccordionMiddle2", "34");
     876              : braille_code Braille_AccordionMiddle3 = braille_code("AccordionMiddle3", "346");
     877              : // String intrument
     878              : braille_code Braille_LeftHandPizzicato = braille_code("LeftHandPizzicato", "456-345");
     879              : 
     880         1031 : std::string getBraillePattern(std::string dots)
     881              : {
     882         1031 :     const char* dotc = dots.c_str();
     883         1031 :     int d = atoi(dotc);
     884              : 
     885         1031 :     switch (d) {
     886              :     // No dots
     887           12 :     case 0: return " ";
     888              : 
     889              :     // One dot
     890           66 :     case 1: return "⠁";
     891          105 :     case 2: return "⠂";
     892          117 :     case 3: return "⠄";
     893           63 :     case 4: return "⠈";
     894           90 :     case 5: return "⠐";
     895          114 :     case 6: return "⠠";
     896              : 
     897              :     // Two dots
     898           75 :     case 12: return "⠃";
     899          135 :     case 13: return "⠅";
     900          282 :     case 14: return "⠉";
     901           15 :     case 15: return "⠑";
     902           42 :     case 16: return "⠡";
     903           42 :     case 23: return "⠆";
     904           18 :     case 24: return "⠊";
     905           21 :     case 25: return "⠒";
     906           69 :     case 26: return "⠢";
     907           39 :     case 34: return "⠌";
     908           15 :     case 35: return "⠔";
     909           63 :     case 36: return "⠤";
     910          219 :     case 45: return "⠘";
     911           99 :     case 46: return "⠨";
     912           81 :     case 56: return "⠰";
     913              : 
     914              :     // Three dots
     915          162 :     case 123: return "⠇";
     916           15 :     case 124: return "⠋";
     917           15 :     case 125: return "⠓";
     918          129 :     case 126: return "⠣";
     919           36 :     case 134: return "⠍";
     920           12 :     case 135: return "⠕";
     921           12 :     case 136: return "⠥";
     922           15 :     case 145: return "⠙";
     923           60 :     case 146: return "⠩";
     924            9 :     case 156: return "⠱";
     925           12 :     case 234: return "⠎";
     926           21 :     case 235: return "⠖";
     927           30 :     case 236: return "⠦";
     928           15 :     case 245: return "⠚";
     929            9 :     case 246: return "⠪";
     930           24 :     case 256: return "⠲";
     931          183 :     case 345: return "⠜";
     932           39 :     case 346: return "⠬";
     933           18 :     case 356: return "⠴";
     934           66 :     case 456: return "⠸";
     935              : 
     936              :     // Four dots
     937           15 :     case 1234: return "⠏";
     938           12 :     case 1235: return "⠗";
     939           12 :     case 1236: return "⠧";
     940           15 :     case 1245: return "⠛";
     941            9 :     case 1246: return "⠫";
     942            9 :     case 1256: return "⠳";
     943           15 :     case 1345: return "⠝";
     944           15 :     case 1346: return "⠭";
     945           33 :     case 1356: return "⠵";
     946            9 :     case 1456: return "⠹";
     947           12 :     case 2345: return "⠞";
     948           30 :     case 2346: return "⠮";
     949           27 :     case 2356: return "⠶";
     950           12 :     case 2456: return "⠺";
     951           30 :     case 3456: return "⠼";
     952              : 
     953              :     // Five dots
     954           12 :     case 12345: return "⠟";
     955           30 :     case 12346: return "⠯";
     956           30 :     case 12356: return "⠷";
     957            9 :     case 12456: return "⠻";
     958           33 :     case 13456: return "⠽";
     959           30 :     case 23456: return "⠾";
     960              : 
     961              :     // Six dots
     962           30 :     case 123456: return "⠿";
     963              :     }
     964              : 
     965            0 :     return " ";
     966              : }
     967              : 
     968          515 : std::string translate2Braille(std::string codes)
     969              : {
     970          515 :     std::stringstream test(codes);
     971          515 :     std::string segment;
     972          515 :     std::vector<std::string> seglist;
     973              : 
     974          515 :     std::string txt = "";
     975         1546 :     while (std::getline(test, segment, '-')) {
     976         1031 :         txt.append(getBraillePattern(segment));
     977              :     }
     978          515 :     return txt;
     979          515 : }
     980              : 
     981            0 : std::string intToBrailleUpperNumbers(std::string txt, bool indicator)
     982              : {
     983            0 :     std::string braille = "";
     984            0 :     if (indicator) {
     985            0 :         braille.append(translate2Braille(Braille_NumIndicator.code));
     986              :     }
     987              : 
     988            0 :     for (size_t i=0; i < txt.length(); i++) {
     989            0 :         char c = txt.at(i);
     990            0 :         if (c - '0' <= 9) {
     991            0 :             braille.append(translate2Braille(Braille_UpperNumbers[c - '0']->code));
     992              :         }
     993              :     }
     994            0 :     return braille;
     995            0 : }
     996              : 
     997            0 : std::string intToBrailleLowerNumbers(std::string txt, bool indicator)
     998              : {
     999            0 :     std::string braille = "";
    1000            0 :     if (indicator) {
    1001            0 :         braille.append(Braille_NumIndicator.code);
    1002              :     }
    1003              : 
    1004            0 :     for (size_t i=0; i < txt.length(); i++) {
    1005            0 :         char c = txt.at(i);
    1006            0 :         if (c - '0' <= 9) {
    1007            0 :             braille.append(Braille_LowerNumbers[c - '0']->code);
    1008              :         }
    1009              :     }
    1010            0 :     return braille;
    1011            0 : }
    1012              : 
    1013            0 : std::vector<std::string> splitCodes(std::string code)
    1014              : {
    1015            0 :     std::stringstream test(code);
    1016            0 :     std::string segment;
    1017            0 :     std::vector<std::string> seglist;
    1018              : 
    1019            0 :     std::vector<std::string> lst;
    1020            0 :     while (std::getline(test, segment, '-')) {
    1021            0 :         lst.push_back(segment);
    1022              :     }
    1023            0 :     return lst;
    1024            0 : }
    1025              : }
        

Generated by: LCOV version 2.0-1