/** * Copyright 2015 CANAL+ Group * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import isNonEmptyString from "../../../utils/is_non_empty_string"; import { findEndOfCueBlock, isStartOfCueBlock } from "./utils"; /** * Get cue blocks from a WebVTT file. * @param {Array.} linified - Whole WebVTT file. Each new element in * this array is a new line. * @param {number} headerOffset - index of the first line after the header. * Used to avoid taking the header into consideration. * @returns {Array.>} */ export default function getCueBlocks( linified: string[], headerOffset: number, ): string[][] { const cueBlocks: string[][] = []; for (let i = headerOffset; i < linified.length; i++) { if (isStartOfCueBlock(linified, i)) { const endOfCue = findEndOfCueBlock(linified, i); cueBlocks.push(linified.slice(i, endOfCue)); i = endOfCue; } else if (isNonEmptyString(linified[i])) { // continue incrementing i until either: // - empty line // - end while (isNonEmptyString(linified[i])) { i++; } } } return cueBlocks; }