HTp GridSlice::createRecipTokenFromDuration(HumNum duration) { duration /= 4; // convert to quarter note units. HTp token; string str; HumNum dotdur; if (duration.getNumerator() == 0) { // if the GridSlice is at the end of a measure, the // time between the starttime/endtime of the GridSlice should // be subtracted from the endtime of the current GridMeasure. token = new HumdrumToken("g"); return token; } else if (duration.getNumerator() == 1) { token = new HumdrumToken(to_string(duration.getDenominator())); return token; } else if (duration.getNumerator() % 3 == 0) { dotdur = ((duration * 2) / 3); if (dotdur.getNumerator() == 1) { token = new HumdrumToken(to_string(dotdur.getDenominator()) + "."); return token; } } // try to fit to two dots here // try to fit to three dots here str = to_string(duration.getDenominator()) + "%" + to_string(duration.getNumerator()); token = new HumdrumToken(str); return token; }
string Convert::getHumNumAttributes(const HumNum& num) { string output; if (num.isInteger()) { output += " float=\"" + to_string(num.getNumerator()) + "\""; } else { stringstream sstr; sstr << num.toFloat(); output += " float=\"" + sstr.str() + "\""; } if (!num.isInteger()) { HumNum rem = num.getRemainder(); output += " ratfrac=\"" + to_string(rem.getNumerator()) + + "/" + to_string(rem.getDenominator()) + "\""; } return output; }