bool HumdrumLine::isTerminator(void) const { if (getTokenCount() == 0) { // if tokens have not been parsed, check line text return equalChar(1, '!') && equalChar(0, '*'); } for (int i=0; i<getTokenCount(); i++) { if (!token(i)->isTerminator()) { return false; } } return true; }
bool HumdrumLine::isAllNull(void) const { if (!hasSpines()) { return false; } for (int i=0; i<getTokenCount(); i++) { if (!token(i)->isNull()) { return false; } } return true; }
int evx_get_token_count (EIF_POINTER a_node_context) // Document token count { return getTokenCount ((VTDNav *)a_node_context); }
ostream& HumdrumLine::printXml(ostream& out, int level, const string& indent) { if (hasSpines()) { out << Convert::repeatString(indent, level) << "<frame"; out << " n=\"" << getLineIndex() << "\""; out << " xml:id=\"" << getXmlId() << "\""; out << ">\n"; level++; out << Convert::repeatString(indent, level) << "<frameInfo>\n"; level++; out << Convert::repeatString(indent, level) << "<fieldCount>"; out << getTokenCount() << "</fieldCount>\n"; out << Convert::repeatString(indent, level); out << "<frameStart"; out << Convert::getHumNumAttributes(getDurationFromStart()); out << "/>\n"; out << Convert::repeatString(indent, level); out << "<frameDuration"; out << Convert::getHumNumAttributes(getDuration()); out << "/>\n"; out << Convert::repeatString(indent, level) << "<frameType>"; if (isData()) { out << "data"; } else if (isBarline()) { out << "barline"; } else if (isInterpretation()) { out << "interpretation"; } else if (isLocalComment()) { out << "local-comment"; } out << "</frameType>\n"; if (isBarline()) { // print the duration to the next barline or to the end of the score // if there is no barline at the end of the score. out << Convert::repeatString(indent, level); out << "<barlineDuration"; out << Convert::getHumNumAttributes(getBarlineDuration()); out << "/>\n"; } bool bstart = isKernBoundaryStart(); bool bend = isKernBoundaryEnd(); if (bstart || bend) { out << Convert::repeatString(indent, level); cout << "<kernBoundary"; cout << " start=\""; if (bstart) { cout << "true"; } else { cout << "false"; } cout << "\""; cout << " end=\""; if (bend) { cout << "true"; } else { cout << "false"; } cout << "\""; cout << "/>\n"; } level--; out << Convert::repeatString(indent, level) << "</frameInfo>\n"; out << Convert::repeatString(indent, level) << "<fields>\n"; level++; for (int i=0; i<getFieldCount(); i++) { token(i)->printXml(out, level, indent); } level--; out << Convert::repeatString(indent, level) << "</fields>\n"; level--; out << Convert::repeatString(indent, level) << "</frame>\n"; } else { // global comments, reference records, or blank lines print here. out << Convert::repeatString(indent, level) << "<metaFrame"; out << " n=\"" << getLineIndex() << "\""; out << " token=\"" << Convert::encodeXml(((string)(*this))) << "\""; out << " xml:id=\"" << getXmlId() << "\""; out << "/>\n"; level++; out << Convert::repeatString(indent, level) << "<frameInfo>\n"; level++; out << Convert::repeatString(indent, level); out << "<startTime"; out << Convert::getHumNumAttributes(getDurationFromStart()); out << "/>\n"; out << Convert::repeatString(indent, level) << "<frameType>"; if (isReference()) { out << "reference"; } else if (isBlank()) { out << "empty"; } else { out << "global-comment"; } out << "</frameType>\n"; if (isReference()) { out << Convert::repeatString(indent, level); out << "<referenceKey>" << Convert::encodeXml(getReferenceKey()); out << "</referenceKey>\n"; out << Convert::repeatString(indent, level); out << "<referenceValue>" << Convert::encodeXml(getReferenceValue()); out << "</referenceValue>\n"; } level--; out << Convert::repeatString(indent, level) << "<frameInfo>\n"; level--; out << Convert::repeatString(indent, level) << "</metaFrame>\n"; } return out; }