glubs - Subtitle parser

Package Version Hex Docs

glubs (gleam subtitles) is a WebVTT (and in the future maybe SRT) parser written in Gleam, designed to parse WebVTT files and provide a structured representation of the content.

Installation

If available on Hex this package can be added to your Gleam project:

gleam add glubs

and its documentation can be found at https://hexdocs.pm/glubs.

Features

Example

import glubs/webvtt.{Cue, EndTag, Note, StartTag, Text, WebVTT}
import gleam/option.{None, Some}
import simplifile

pub fn main() {
 // WebVTT parser
 let assert Ok(content) = simplifile.read("test/fixtures/comments.vtt")
 let assert Ok(result) = webvtt.parse(content)

 let assert WebVTT(
   comment: Some("- Translation of that film I like"),
   items: [
     Note(
       "This translation was done by Kyle so that\nsome friends can watch it with their parents.",
     ),
     Cue(
       id: Some("1"),
       start_time: 135_000,
       end_time: 140_000,
       payload: "- Ta en kopp varmt te.\n- Det är inte varmt.",
     ),
     Cue(
       id: Some("2"),
       start_time: 140_000,
       end_time: 145_000,
       payload: "- Har en kopp te.\n- Det smakar som te.",
     ),
     Note("This last line may not translate well."),
     Cue(
       id: Some("3"),
       start_time: 145_000,
       end_time: 150_000,
       payload: "- Ta en kopp",
     ),
   ],
 ) = result

 // Cue payload tokenizer
 let assert Ok(tokens) =
   "<v Phil>Hi!\n<v.loud.shout Rob>Hello <i>mate!</i></v>"
   |> webvtt.tokenize()

 let assert [
   StartTag("v", classes: [], annotation: Some("Phil")),
   Text("Hi!\n"),
   StartTag("v", classes: ["loud", "shout"], annotation: Some("Rob")),
   Text("Hello "),
   StartTag("i", classes: [], annotation: None),
   Text("mate!"),
   EndTag("i"),
   EndTag("v"),
 ] = tokens
}
Search Document