diff --git a/src/Lib/Ass/Syl.cc b/src/Lib/Ass/Syl.cc index dae50d1e767ed5a9ead6754054a3fe0e1bb370fd..0d411f20998acbca715f9dbf444a9f3d46d4f63d 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 f6fd016937ce76089725ec0eb38e16cb0724c7f1..101de152b212992bf0030e9eb3d5ccfe8bde6bf5 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; }; }