//
// Programmer: Craig Stuart Sapp <craig@ccrma.stanford.edu>
// Creation Date: Mon Mar 25 10:24:23 PST 2002
// Last Modified: Mon Mar 25 10:24:27 PST 2002
// Filename: ...sig/examples/all/extracttext.cpp
// Web Address: http://sig.sapp.org/examples/museinfo/score/extracttext.cpp
// Syntax: C++; museinfo
//
// Description: Extract text fields from SCORE data files.
//
#include "ScorePage.h"
#include "Options.h"
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#ifndef OLDCPP
#include <fstream>
#else
#include <fstream.h>
#endif
void extractText(ScorePage& score, int page, int pageQ, int staffQ,
int hposQ, int vposQ);
void printTextLine(const char* string);
// interface variables:
Options options;
int staffQ = 0; // used with the -s option
int hposQ = 0; // used with the -h option
int vposQ = 0; // used with the -v option
int pageQ = 0; // used with the -p option
int verboseQ = 0; // not accessible from command line
int fontQ = 0; // used with the -f option
int main(int argc, char** argv) {
options.define("s|staff=b", "print staff of text");
options.define("h|hpos=b", "print horizontal position of text");
options.define("v|vpos=b", "print vertical position of text");
options.define("p|page=b", "print page number of text");
options.define("f|F|no-font=b", "remove font information from text");
options.process(argc, argv);
vposQ = options.getBoolean("vpos");
hposQ = options.getBoolean("hpos");
staffQ = options.getBoolean("staff");
pageQ = options.getBoolean("page");
fontQ = options.getBoolean("no-font");
if (options.getArgCount() == 0) {
cout << "Usage: " << argv[0] << " input.mus " << endl;
exit(1);
}
ScorePage score;
for (int i=1; i<=options.getArgCount(); i++) {
score.clear();
score.readFile(options.getArg(i), verboseQ);
extractText(score, i, pageQ, staffQ, hposQ, vposQ);
}
cout << flush;
return 0;
}
//////////////////////////////
//
// extractText --
//
void extractText(ScorePage& score, int page, int pageQ, int staffQ,
int hposQ, int vposQ) {
int i;
for (i=0; i<score.getSize(); i++) {
if (score[i].isTextItem()) {
if (pageQ) {
cout << page << '\t';
}
if (staffQ) {
cout << score[i].getPValue(2) << '\t';
}
if (hposQ) {
cout << score[i].getPValue(3) << '\t';
}
if (vposQ) {
cout << score[i].getPValue(4) << '\t';
}
printTextLine(score[i].getTextData());
cout << '\n';
}
}
}
//////////////////////////////
//
// printTextLine -- extract the font information if necessary.
//
void printTextLine(const char* string) {
if (!fontQ) {
cout << string;
} else {
int i;
int length = strlen(string);
for (i=0; i<length; i++) {
if (string[i] == '_' && isdigit(string[i+1]) && isdigit(string[i+2])) {
i += 2;
} else {
cout << string[i];
}
}
}
}
// md5sum: 6c17cbe8f33d4cd0d83a869595fdb2f9 extracttext.cpp [20050403]