Skip to content

Commit b4f1208

Browse files
committed
Notes
1 parent ddd5703 commit b4f1208

File tree

3 files changed

+34
-12
lines changed

3 files changed

+34
-12
lines changed

src/button.cpp

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,30 @@ void ButtonParser::set_rhs_note(QString str)
3939
// Trouve tous les boutons qui font cette note
4040
avaibleButton = kbd->getButtons(m_note);
4141

42+
qDebug() << avaibleButton;
43+
4244
// Si il n'y a qu'une option c'est facile
4345
if (avaibleButton.length() == 1)
4446
{
45-
m_button = avaibleButton[0];
47+
m_direction = avaibleButton[0].at(0);
48+
m_button = avaibleButton[0].remove(0,1);
4649
}
4750
// Si il y a plus d'une options il faut déterminier quel bouton choisir.
4851
// Il ne peut pas y avoir 3 fois la même note donc la taille est 2 (enfin je crois)
4952
else if (avaibleButton.length() > 1)
5053
{
51-
// Si aucune possibilités n'est dans la direction actuelle on change de direction automatiquement
52-
if (QString(avaibleButton[1][0]) != m_direction && QString(avaibleButton[0][0]) != m_direction)
53-
m_direction = (m_direction == "p") ? "t" : "p";
54-
//throw std::logic_error(QString("Vous ne pouvez pas jouer la note " + m_note + " dans le sens " + ((m_direction == "t") ? "tiré" : "poussé") + " avec cet accordéon.").toStdString());
54+
// Si les deux options on le même sens de jeu alors on a pas le choix du sens de jeu
55+
if (avaibleButton[1][0] == avaibleButton[0][0])
56+
m_direction = avaibleButton[0][0];
57+
58+
// Si on a une information de sense de jeu on vérfie que la note est jouable dans ce sens sinon
59+
// on change de sens. Si le sens de jeu n'est pas pécisé alors on affiche tout
60+
if (m_direction != "")
61+
{
62+
// Si aucune possibilités n'est dans la direction actuelle on change de direction automatiquement
63+
if (QString(avaibleButton[1][0]) != m_direction && QString(avaibleButton[0][0]) != m_direction)
64+
m_direction = (m_direction == "p") ? "t" : "p";
65+
}
5566

5667
// Si on a pas précisé le rang
5768
if (m_rank.isEmpty())
@@ -70,9 +81,11 @@ void ButtonParser::set_rhs_note(QString str)
7081
// en trichant sur le contenu de m_bouton pour que la fonction print affiche de quoi
7182
else
7283
{
73-
m_button = avaibleButton[0].remove(0,1) + "\" \\once \\override TextScript.color = #red \\" + m_direction + " \"" + avaibleButton[1].remove(0,1);
74-
//throw std::logic_error(QString("Il y a deux possibilités pour la note " + m_note + "\n 1. " + avaibleButton[0] + "\n 2. " + avaibleButton[1] + "\nAjoutez une indication de rang. Par exemple : " + m_note + "/1").toStdString());
75-
return;
84+
m_direction = avaibleButton[0][0];
85+
QString d2( avaibleButton[1][0]);
86+
87+
m_button = avaibleButton[0].remove(0,1) + "\" \\once \\override TextScript.color = #red \\" + d2 + " \"" + avaibleButton[1].remove(0,1);
88+
return;
7689
}
7790
}
7891
// Si on a précisé le rang

src/processor.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ TabliatoProcessor::TabliatoProcessor(Tabulature &tabulature)
3131
void TabliatoProcessor::parseMusic()
3232
{
3333
// A button holds the logic of parsing the notes and stores some context
34-
CURRENTDIRECTION = "p";
34+
CURRENTDIRECTION = "";
3535
CURRENTDURATION = "4";
3636

3737
ButtonParser button(m_keyboard);
@@ -123,12 +123,16 @@ void TabliatoProcessor::parseMusic()
123123
currentSymbolIsBass = false;
124124

125125
if (type == BUTTON)
126+
{
126127
button.set_rhs_button(symbol);
128+
CURRENTDIRECTION = button.direction();
129+
}
127130
else
131+
{
128132
button.set_rhs_note(symbol);
133+
}
129134

130135
CURRENTDURATION = button.duration();
131-
CURRENTDIRECTION = button.direction();
132136

133137
timeline.append(CURRENTDURATION, nnote);
134138

@@ -383,6 +387,11 @@ void TabliatoProcessor::parseMusic()
383387
parsed += " " + symbols[i];
384388
}
385389
}
390+
else if (symbol == "\\pt")
391+
{
392+
CURRENTDIRECTION = "";
393+
parsed = "";
394+
}
386395

387396
break;
388397
}

src/syntaxanalyser.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ SyntaxAnalyser::SyntaxAnalyser()
1313
fingering_rgx.setPattern("/([a-zA-Z]+|\\d)");
1414
closeChord_rgx.setPattern(">(:\\d{1,2})?\\.?~?"); // matches close chord e.g. >, >:2
1515
openChord_rgx.setPattern("[ptPT]?<");
16-
note_rgx.setPattern("\\$?[ptPT]?[a-g]{1}(is|es)?(,|'){0,2}(/[123])?(:\\d{0,2}.?)?(/[123])?~?"); // matches a to g gis ges bes cis ces a, b, c', d', d'', d'':2.
16+
note_rgx.setPattern("\\$?[ptPT]?[a-g]{1}(is|es)?(,|'){0,3}(/[123])?(:\\d{0,2}.?)?(/[123])?~?"); // matches a to g gis ges bes cis ces a, b, c', d', d'', d'':2.
1717
metric_rgx.setPattern("\\d{1,2}/\\d{1,2}"); // matches 3/4, 2/2, 6/8
1818

1919
extractRankNote.setPattern("/(\\d)");
2020
extractRankButton.setPattern("('+)");
2121
extractDuration.setPattern(":(\\d{1,2}\\.?)");
2222
extractNumButton.setPattern("[ptPT]?(\\d{1,2}'{0,2})");
23-
extractNote.setPattern("([a-g]{1}(is|es)?(,|'){0,2})");
23+
extractNote.setPattern("([a-g]{1}(is|es)?(,|'){0,3})");
2424
extractDirection.setPattern("^([ptPT])");
2525
extractTie.setPattern("(~)");
2626

0 commit comments

Comments
 (0)