-module(glubs@srt). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). -export([to_string/1, parse/1]). -export_type([srt/0, cue/0]). -type srt() :: {srt, list(cue())}. -type cue() :: {cue, integer(), integer(), integer(), binary()}. -spec cue_to_string(cue()) -> gleam@string_builder:string_builder(). cue_to_string(Cue) -> Start_time = glubs@timestamp:to_string(erlang:element(3, Cue), <<","/utf8>>), End_time = glubs@timestamp:to_string(erlang:element(4, Cue), <<","/utf8>>), _pipe@2 = [gleam@string_builder:from_string( gleam@int:to_string(erlang:element(2, Cue)) ), begin _pipe = Start_time, _pipe@1 = gleam@string_builder:append(_pipe, <<" --> "/utf8>>), gleam@string_builder:append_builder(_pipe@1, End_time) end, gleam@string_builder:from_string(erlang:element(5, Cue))], gleam@string_builder:join(_pipe@2, <<"\n"/utf8>>). -spec to_string(srt()) -> binary(). to_string(Srt) -> _pipe = erlang:element(2, Srt), _pipe@1 = gleam@list:map(_pipe, fun cue_to_string/1), _pipe@2 = gleam@string_builder:join(_pipe@1, <<"\n\n"/utf8>>), _pipe@3 = gleam@string_builder:append(_pipe@2, <<"\n"/utf8>>), gleam@string_builder:to_string(_pipe@3). -spec parse_cue(binary()) -> {ok, cue()} | {error, binary()}. parse_cue(Input) -> [Id, Ts | Lines] = gleam@string:split(Input, <<"\n"/utf8>>), gleam@result:'try'( begin _pipe = Id, _pipe@1 = gleam@int:parse(_pipe), gleam@result:replace_error( _pipe@1, <<"Cannot parse identifier"/utf8>> ) end, fun(Id@1) -> gleam@result:'try'( glubs@timestamp:parse_range(Ts, <<","/utf8>>), fun(_use0) -> {Start_time, End_time} = _use0, {ok, {cue, Id@1, Start_time, End_time, gleam@string:join(Lines, <<"\n"/utf8>>)}} end ) end ). -spec parse(binary()) -> {ok, srt()} | {error, binary()}. parse(Input) -> _pipe = Input, _pipe@1 = gleam@string:replace(_pipe, <<"\r\n"/utf8>>, <<"\n"/utf8>>), _pipe@2 = gleam@string:trim_right(_pipe@1), _pipe@3 = gleam@string:split(_pipe@2, <<"\n\n"/utf8>>), _pipe@4 = gleam@list:try_map(_pipe@3, fun parse_cue/1), gleam@result:map(_pipe@4, fun(_capture) -> {srt, _capture} end).