Current section
Files
Jump to
Current section
Files
lib/subtitles.ex
defmodule Subtitles do
alias Subtitles.VttParser
alias Subtitles.SrtParser
@srt_cue_matcher ~r/\n?1\n(\d{2}:){2}\d{2},\d{3} --> (\d{2}:){2}\d{2},\d{3}(\n.+)+\n\n/
def get_format(subtitle) do
subtitle = subtitle |> Utils.normalize_line_endings()
subtitle |> is_vtt?() && :vtt ||
subtitle |> is_srt?() && :srt ||
:unknown
end
def parse(subtitle), do: subtitle |> parse(get_format(subtitle))
def parse(subtitle, :vtt), do: {:ok, subtitle |> VttParser.parse()}
def parse(subtitle, :srt), do: {:ok, subtitle |> SrtParser.parse()}
def parse(_, :unknown), do: {:error, "Unknown subtitle format"}
defp is_vtt?(subtitle), do: subtitle |> String.starts_with?("WEBVTT")
defp is_srt?(subtitle), do: @srt_cue_matcher |> Regex.match?(subtitle)
end