function combineSegments()

in app/src/components/TranscriptLine.js [9:44]


function combineSegments(results) {
  const markers = [];

  const addMarker = (where) => {
    if (!markers.includes(where)) markers.push(where);
  };

  results.forEach((r) => {
    addMarker(r.BeginOffset);
    addMarker(r.EndOffset);

    (r.Attributes || []).forEach((a) => {
      addMarker(a.BeginOffset);
      addMarker(a.EndOffset);
    });
  });

  markers.sort((a, b) => a - b);

  let ret = [];

  for (let i = 0; i < markers.length - 1; i++) {
    const start = markers[i];
    const end = markers[i + 1];

    const matches = results.filter(
      (r) =>
        (r.BeginOffset <= start && r.EndOffset >= end) ||
        (r.Attributes || []).some((a) => a.BeginOffset <= start && a.EndOffset >= end),
    );

    if (matches.length) ret.push({ start, end, matches });
  }

  return ret;
}