int main(int argc, char** argv) { checkOptions(options, argc, argv); HumdrumStream streamer(options); HumdrumFile infile; if (summaryQ) { Summary.setSize(1000); Summary.setAll(0); } while (streamer.read(infile)) { if (!streamer.eof()) { // if there are multiple segments, store a segement marker // for each segment. Do not store if only a single segment, // unless --segement option is given. SEGMENTS = 1; } processFile(infile, infile.getFileName()); } if (summaryQ) { printSummary(Summary); } return 0; }
void processFile(HumdrumFile& infile, const string& filename) { int i; if (SEGMENTS && !summaryQ) { cout << "!!!!SEGMENT: " << infile.getFileName() << endl; } if (debugQ) { cout << "!! file: " << infile.getFileName() << endl; } if (validQ && !isValidFile(infile)) { return; } if (kernQ) { Array<int> ktracks; infile.getTracksByExInterp(ktracks, "**kern"); cout << ktracks.getSize() << endl; return; } if (mdurQ || summaryQ || nograceQ) { infile.analyzeRhythm("4"); } Array<int> analysis(infile.getNumLines()); analysis.setAll(0); analysis.allowGrowth(0); for (i=0; i<infile.getNumLines(); i++) { if (!infile[i].isData()) { continue; } analysis[i] = doAnalysis(infile, i); } if (summaryQ) { return; } // print analysis: int firstdata = 1; PerlRegularExpression pre; for (i=0; i<infile.getNumLines(); i++) { if (appendQ) { cout << infile[i]; } if (infile[i].isData()) { if (appendQ) { cout << '\t'; } if (measureQ && firstdata) { printMeasureData(analysis, infile, i); firstdata = 0; } else if (measureQ) { cout << "."; } else { if (nograceQ && (infile[i].getDuration() == 0)) { cout << "."; } else { cout << analysis[i]; } } if (prependQ) { cout << '\t'; } if (appendQ) { cout << '\n'; } } else if (infile[i].isInterpretation()) { if (appendQ) { cout << '\t'; } if (strcmp(infile[i][0], "*-") == 0) { cout << "*-"; } else if (strncmp(infile[i][0], "**", 2) == 0) { printExclusiveInterpretation(); } else { cout << "*"; } if (prependQ) { cout << '\t'; } if (appendQ) { cout << '\n'; } } else if (infile[i].isBarline()) { if (pre.search(infile[i][0], "\\d")) { firstdata = 1; } if (appendQ) { cout << '\t'; } cout << infile[i][0]; if (prependQ) { cout << '\t'; } if (appendQ) { cout << '\n'; } } else if (infile[i].isLocalComment()) { if (appendQ) { cout << '\t'; } cout << "!"; if (prependQ) { cout << '\t'; } if (appendQ) { cout << '\n'; } } else { if (!(appendQ || prependQ)) { cout << infile[i]; } if (appendQ) { cout << '\n'; } } if (prependQ) { cout << infile[i]; } if (!appendQ) { cout << '\n'; } } }