Skip to content

Commit

Permalink
Merge pull request #55 from WolfgangDrescher/myank
Browse files Browse the repository at this point in the history
[myank] Add `-l` flag to select line range and improve cutting null tokens
  • Loading branch information
craigsapp authored Feb 9, 2023
2 parents 606d22b + a1eda08 commit 1eb6905
Show file tree
Hide file tree
Showing 6 changed files with 787 additions and 166 deletions.
6 changes: 6 additions & 0 deletions include/HumdrumToken.h
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,12 @@ class HumdrumToken : public std::string, public HumHash {
HumNum getDurationToEnd (void);
HumNum getDurationToEnd (HumNum scale);

HumNum getDurationFromNoteStart (void);
HumNum getDurationFromNoteStart (HumNum scale);

HumNum getDurationToNoteEnd (void);
HumNum getDurationToNoteEnd (HumNum scale);

HumNum getDurationFromBarline (void);
HumNum getDurationFromBarline (HumNum scale);

Expand Down
55 changes: 36 additions & 19 deletions include/humlib.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//
// Programmer: Craig Stuart Sapp <[email protected]>
// Creation Date: Sat Aug 8 12:24:49 PDT 2015
// Last Modified: Thu Jan 26 22:41:11 PST 2023
// Last Modified: Di 7 Feb 2023 18:58:16 CET
// Filename: humlib.h
// URL: https://github.com/craigsapp/humlib/blob/master/include/humlib.h
// Syntax: C++11
Expand Down Expand Up @@ -1619,6 +1619,12 @@ class HumdrumToken : public std::string, public HumHash {
HumNum getDurationToEnd (void);
HumNum getDurationToEnd (HumNum scale);

HumNum getDurationFromNoteStart (void);
HumNum getDurationFromNoteStart (HumNum scale);

HumNum getDurationToNoteEnd (void);
HumNum getDurationToNoteEnd (HumNum scale);

HumNum getDurationFromBarline (void);
HumNum getDurationFromBarline (HumNum scale);

Expand Down Expand Up @@ -9173,25 +9179,36 @@ class Tool_myank : public HumTool {
void printMeasureStart (HumdrumFile& infile, int line, const string& style);
std::string expandMultipliers (const string& inputstring);

vector<int> analyzeBarNumbers (HumdrumFile& infile);
int getBarNumberForLineNumber(int lineNumber);
int getStartLineNumber (void);
int getEndLineNumber (void);
void printDataLine (HLp line, bool& startLineHandled, const vector<int>& lastLineResolvedTokenLineIndex, const vector<HumNum>& lastLineDurationsFromNoteStart);

private:
int debugQ = 0; // used with --debug option
// int inputlist = 0; // used with --inlist option
int inlistQ = 0; // used with --inlist option
int outlistQ = 0; // used with --outlist option
int verboseQ = 0; // used with -v option
int invisibleQ = 1; // used with --visible option
int maxQ = 0; // used with --max option
int minQ = 0; // used with --min option
int instrumentQ = 0; // used with -I option
int nolastbarQ = 0; // used with -B option
int markQ = 0; // used with --mark option
int doubleQ = 0; // used with --mdsep option
int barnumtextQ = 0; // used with -T option
int Section = 0; // used with --section option
int sectionCountQ = 0; // used with --section-count option
vector<MeasureInfo> MeasureOutList; // used with -m option
vector<MeasureInfo> MeasureInList; // used with -m option
vector<vector<MyCoord> > metstates;
int m_debugQ = 0; // used with --debug option
// int inputlist = 0; // used with --inlist option
int m_inlistQ = 0; // used with --inlist option
int m_outlistQ = 0; // used with --outlist option
int m_verboseQ = 0; // used with -v option
int m_invisibleQ = 1; // used with --visible option
int m_maxQ = 0; // used with --max option
int m_minQ = 0; // used with --min option
int m_instrumentQ = 0; // used with -I option
int m_nolastbarQ = 0; // used with -B option
int m_markQ = 0; // used with --mark option
int m_doubleQ = 0; // used with --mdsep option
int m_barnumtextQ = 0; // used with -T option
int m_section = 0; // used with --section option
int m_sectionCountQ = 0; // used with --section-count option
vector<MeasureInfo> m_measureOutList; // used with -m option
vector<MeasureInfo> m_measureInList; // used with -m option
vector<vector<MyCoord> > m_metstates;

string m_lineRange; // used with -l option
vector<int> m_barNumbersPerLine; // used with -l option
bool m_hideStarting; // used with --hide-starting option
bool m_hideEnding; // used with --hide-ending option

};

Expand Down
47 changes: 29 additions & 18 deletions include/tool-myank.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,25 +155,36 @@ class Tool_myank : public HumTool {
void printMeasureStart (HumdrumFile& infile, int line, const string& style);
std::string expandMultipliers (const string& inputstring);

vector<int> analyzeBarNumbers (HumdrumFile& infile);
int getBarNumberForLineNumber(int lineNumber);
int getStartLineNumber (void);
int getEndLineNumber (void);
void printDataLine (HLp line, bool& startLineHandled, const vector<int>& lastLineResolvedTokenLineIndex, const vector<HumNum>& lastLineDurationsFromNoteStart);

private:
int debugQ = 0; // used with --debug option
// int inputlist = 0; // used with --inlist option
int inlistQ = 0; // used with --inlist option
int outlistQ = 0; // used with --outlist option
int verboseQ = 0; // used with -v option
int invisibleQ = 1; // used with --visible option
int maxQ = 0; // used with --max option
int minQ = 0; // used with --min option
int instrumentQ = 0; // used with -I option
int nolastbarQ = 0; // used with -B option
int markQ = 0; // used with --mark option
int doubleQ = 0; // used with --mdsep option
int barnumtextQ = 0; // used with -T option
int Section = 0; // used with --section option
int sectionCountQ = 0; // used with --section-count option
vector<MeasureInfo> MeasureOutList; // used with -m option
vector<MeasureInfo> MeasureInList; // used with -m option
vector<vector<MyCoord> > metstates;
int m_debugQ = 0; // used with --debug option
// int inputlist = 0; // used with --inlist option
int m_inlistQ = 0; // used with --inlist option
int m_outlistQ = 0; // used with --outlist option
int m_verboseQ = 0; // used with -v option
int m_invisibleQ = 1; // used with --visible option
int m_maxQ = 0; // used with --max option
int m_minQ = 0; // used with --min option
int m_instrumentQ = 0; // used with -I option
int m_nolastbarQ = 0; // used with -B option
int m_markQ = 0; // used with --mark option
int m_doubleQ = 0; // used with --mdsep option
int m_barnumtextQ = 0; // used with -T option
int m_section = 0; // used with --section option
int m_sectionCountQ = 0; // used with --section-count option
vector<MeasureInfo> m_measureOutList; // used with -m option
vector<MeasureInfo> m_measureInList; // used with -m option
vector<vector<MyCoord> > m_metstates;

string m_lineRange; // used with -l option
vector<int> m_barNumbersPerLine; // used with -l option
bool m_hideStarting; // used with --hide-starting option
bool m_hideEnding; // used with --hide-ending option

};

Expand Down
46 changes: 46 additions & 0 deletions src/HumdrumToken.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1090,6 +1090,52 @@ HumNum HumdrumToken::getDurationToEnd(HumNum scale) {



//////////////////////////////
//
// HumdrumToken::getDurationFromNoteStart -- Returns the duration from the start
// of the resolved HumdrumToken to the starting time of this token. This is
// useful to get the pased duration of a null token.
//

HumNum HumdrumToken::getDurationFromNoteStart(void) {
HumNum dur = HumNum();
HTp resolvedToken = this->resolveNull();
HumdrumFile* infile = getLine()->getOwner();
int startLineIndex = resolvedToken->getLineIndex();
int thisLineIndex = getLineIndex();
for (int i = startLineIndex; i < thisLineIndex; i++) {
dur += infile->getLine(i)->getDuration();
}
// TODO handle tied notes
return dur;
}


HumNum HumdrumToken::getDurationFromNoteStart(HumNum scale) {
return this->getDurationFromNoteStart() * scale;
}



//////////////////////////////
//
// HumdrumToken::getDurationToNoteEnd -- Returns the duration from this token to
// the end of the resolved HumdrumToken duration. This is useful to get the
// remaining duration of a null token.
//

HumNum HumdrumToken::getDurationToNoteEnd(void) {
// TODO handle tied notes
return this->resolveNull()->getDuration() - getDurationFromNoteStart();
}


HumNum HumdrumToken::getDurationToNoteEnd(HumNum scale) {
return this->getDurationToNoteEnd() * scale;
}



//////////////////////////////
//
// HumdrumToken::getBarlineDuration -- Returns the duration between
Expand Down
Loading

0 comments on commit 1eb6905

Please sign in to comment.