diff options
| author | syeopite <syeopite@syeopite.dev> | 2024-01-30 15:25:45 -0800 |
|---|---|---|
| committer | syeopite <syeopite@syeopite.dev> | 2024-01-30 15:25:45 -0800 |
| commit | 0ad2eff2a46c28a877de1960a2dc5c15c0f94444 (patch) | |
| tree | 731060181834d30641efe992a58192e297e918ab /src | |
| parent | 1c0b4205d40781ff2d34d64dddf29e5dc89d1723 (diff) | |
| download | invidious-0ad2eff2a46c28a877de1960a2dc5c15c0f94444.tar.gz invidious-0ad2eff2a46c28a877de1960a2dc5c15c0f94444.tar.bz2 invidious-0ad2eff2a46c28a877de1960a2dc5c15c0f94444.zip | |
WebVTT::Builder: Add logic to escape special chars
Diffstat (limited to 'src')
| -rw-r--r-- | src/invidious/helpers/webvtt.cr | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/invidious/helpers/webvtt.cr b/src/invidious/helpers/webvtt.cr index 56f761ed..260d250f 100644 --- a/src/invidious/helpers/webvtt.cr +++ b/src/invidious/helpers/webvtt.cr @@ -4,13 +4,23 @@ module WebVTT # A WebVTT builder generates WebVTT files private class Builder + # See https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API#cue_payload + private ESCAPE_SUBSTITUTIONS = { + '&' => "&", + '<' => "<", + '>' => ">", + '\u200E' => "‎", + '\u200F' => "‏", + '\u00A0' => " ", + } + def initialize(@io : IO) end # Writes an vtt cue with the specified time stamp and contents def cue(start_time : Time::Span, end_time : Time::Span, text : String) timestamp(start_time, end_time) - @io << text + @io << self.escape(text) @io << "\n\n" end @@ -29,6 +39,10 @@ module WebVTT @io << '.' << timestamp.milliseconds.to_s.rjust(3, '0') end + private def escape(text : String) : String + return text.gsub(ESCAPE_SUBSTITUTIONS) + end + def document(setting_fields : Hash(String, String)? = nil, &) @io << "WEBVTT\n" |
