From 2b19ebd64d4489dc3c555f8a5c42e45749a738a9 Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Sun, 11 Jul 2021 20:28:58 +0200 Subject: [PATCH] ASS: The Syl get its duration from the passed string --- src/Lib/Ass/Syl.cc | 17 ++++++++++++++++- src/Lib/Ass/Syl.hh | 5 ++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Lib/Ass/Syl.cc b/src/Lib/Ass/Syl.cc index dae50d1e..0d411f20 100644 --- a/src/Lib/Ass/Syl.cc +++ b/src/Lib/Ass/Syl.cc @@ -6,10 +6,25 @@ using namespace Vivy::Ass; Syl::Syl(Line *const line, const QString &lineString, ConstructMode mode) noexcept : content(lineString) , styleProperties(line->getStyleProperties()) - , dur(line->getDuration()) + , duration(line->getDuration()) , parentLine(line) { // Will override the `content`, but will be heavy anyway if (mode == ConstructMode::ReadAssTags) { + const int textBegin = lineString.lastIndexOf('}') + 1; + content = (textBegin >= lineString.size()) ? "" : lineString.mid(textBegin); + duration = getDurationFromString(lineString); } } + +quint64 +Syl::getDurationFromString(const QString &line) noexcept +{ + QRegExp re("\\\\(?:k|K|ko|kf)(\\d+)"); + int pos = 0; + quint64 duration = 0; + while ((pos = re.indexIn(line, pos)) != -1) { + duration += re.cap(1).toUInt(); + } + return duration; +} diff --git a/src/Lib/Ass/Syl.hh b/src/Lib/Ass/Syl.hh index f6fd0169..101de152 100644 --- a/src/Lib/Ass/Syl.hh +++ b/src/Lib/Ass/Syl.hh @@ -14,7 +14,7 @@ class Syl final { private: QString content; StyleProperties styleProperties; - quint64 dur{ 0 }; + quint64 duration{ 0 }; public: Line *const parentLine; @@ -31,6 +31,9 @@ public: Syl &operator=(const Syl &) = delete; ~Syl() noexcept = default; + +private: + static quint64 getDurationFromString(const QString &) noexcept; }; } -- GitLab