void TextTier_setLaterEndTime (TextTier me, double xmax, const char32 *mark) { try { if (xmax <= my xmax) return; // nothing to be done if (mark != NULL) { autoTextPoint textpoint = TextPoint_create (my xmax, mark); Collection_addItem (my points, textpoint.transfer()); } my xmax = xmax; } catch (MelderError) { Melder_throw (U"Larger end time of TextTier not set."); } }
void TextTier_setEarlierStartTime (TextTier me, double xmin, const char32 *mark) { try { if (xmin >= my xmin) return; // nothing to be done if (mark != NULL) { autoTextPoint textpoint = TextPoint_create (my xmin, mark); Collection_addItem (my points, textpoint.transfer()); } my xmin = xmin; } catch (MelderError) { Melder_throw (U"Earlier start time of TextTier not set."); } }
static autoTextTier TextTier_and_IntervalTier_patch (TextTier me, IntervalTier thee, const char32 *patchLabel, double precision) { try { long myIndex = 1; autoTextTier him = TextTier_create (thy xmin, thy xmax); double xShift = thy xmin - my xmin; for (long i = 1; i <= thy intervals.size; i ++) { TextInterval ti = thy intervals.at [i]; if (Melder_equ (ti -> text, patchLabel)) { if (i > 1) { while (myIndex <= my points.size) { TextPoint tp = my points.at [myIndex]; double time = tp -> number + xShift; if (time < ti -> xmin + precision) { autoTextPoint newPoint = TextPoint_create (time, tp -> mark); his points. addItem_move (newPoint.move()); } else { break; } myIndex++; } } xShift += ti -> xmax - ti -> xmin; } else if (i == thy intervals.size) { while (myIndex <= my points.size) { TextPoint tp = my points.at [myIndex]; double time = tp -> number + xShift; if (time < ti -> xmin + precision) { autoTextPoint newPoint = TextPoint_create (time, tp -> mark); his points. addItem_move (newPoint.move()); } myIndex++; } } } return him; } catch (MelderError) { Melder_throw (me, U": cannot patch TextTier."); } }