86 for(
const QString &oneLine :
qAsConst(data))
109 data.append(QString(
"[by: %1]\n[offset:0]\n").arg(
TTK_APP_NAME));
118 if(!file.open(QIODevice::WriteOnly))
123 QTextStream outstream(&file);
124 #if TTK_QT_VERSION_CHECK(6,0,0)
125 outstream.setEncoding(QStringConverter::Utf8);
127 outstream.setCodec(
"UTF-8");
139 copy.insert(it.key() + pos, it.value());
147 qint64 beforeTime = 0;
153 beforeTime = keys[0];
156 for(
int i = 1; i < keys.count(); ++i)
159 const qint64 afterTime = keys[i];
160 if(beforeTime <= time && time <= afterTime)
166 beforeTime = afterTime;
219 pre = last = QString();
247 interval = later - previous;
256 for(
int i = 0; i < index + 1; ++i)
310 for(
int i = 0; i <
middle(); ++i)
325 for(
int i = 0; i <
middle(); ++i)
352 if(oneLine.contains(regx01))
357 else if(oneLine.contains(regx02))
362 else if(oneLine.contains(regx03))
367 else if(oneLine.contains(regx04))
372 else if(oneLine.contains(regx05))
377 else if(oneLine.contains(regx06))
382 else if(oneLine.contains(regx07))
387 else if(oneLine.contains(regx08))
392 else if(oneLine.contains(regx09))
397 else if(oneLine.contains(regx10))
402 else if(oneLine.contains(regx11))
407 else if(oneLine.contains(regx12))
412 else if(oneLine.contains(regx13))
423 QString temp = oneLine;
424 temp.replace(regx, {});
425 int pos = regx.
match(oneLine);
428 const QString &cap = regx.
captured(0);
451 pos = regx.
match(oneLine, pos);
461 const int minutes = regx.
captured(0).toInt();
465 const int seconds = regx.
captured(0).toInt();
469 const int milliseconds = regx.
captured(0).toInt();
470 const int length = QString::number(milliseconds).length();
471 const qint64 totalTime = minutes *
TTK_DN_M2MS + seconds *
TTK_DN_S2MS + milliseconds * std::pow(10, 3 - length);
481 const int minutes = regx.
captured(0).toInt();
485 const int seconds = regx.
captured(0).toInt();
494 const QStringList list(cap.split(splite));
495 if(list.count() != 3)
500 const int minutes = list[0].toInt();
501 const int seconds = list[1].toInt();
502 const int milliseconds = list[2].toInt();
503 const int length = QString::number(milliseconds).length();
504 const qint64 totalTime = minutes *
TTK_DN_M2MS + seconds *
TTK_DN_S2MS + milliseconds * std::pow(10, 3 - length);
QString captured(int index) const
virtual bool decode(const QString &input) overridefinal
const QByteArray & data() const noexcept
virtual bool decode(const QString &input) overridefinal
QStringList dataList() const
bool isValid() const noexcept
void setPattern(const QString &v)
void setTimePosition(qint64 pos)
bool findText(qint64 current, qint64 total, QString &pre, QString &last, qint64 &interval) const
#define TTK_INFO_STREAM(msg)
QMap< qint64, QString > TTKIntStringMap
QString text(int index) const
The class of the krc to lrc.
qint64 findTimePosition(qint64 time)
virtual bool decode(const QString &input) overridefinal
qint64 findTime(int index) const
TTK_MODULE_EXPORT QStringList split(const QString &value, const QString &key=TTK_DEFAULT_STR)
#define QtNamespace(p)
Qt use namespace.
virtual bool decode(const QString &input) overridefinal
virtual bool decode(const QString &input) overridefinal
The class of the regular expression.
The class of the plain lrc.
TTKIntStringMap m_lrcContainer
MusicLrcAnalysis(QObject *parent=nullptr)
QString dataString() const
void matchLrcLine(const QString &oneLine)
State loadFromFile(const QString &path)
#define TTK_FILE_SUFFIX(fin)
The class of the trc to lrc.
bool isEmpty() const noexcept
The class of the qrc to lrc.
static QString toString(qint64 time, const QString &format) noexcept
int match(const QString &str, int pos=0)
The class of the yrc to lrc.
State loadFromBuffer(const TTKIntStringMap &data)
int capturedLength() const
QStringList m_currentShowLrcContainer
int count() const noexcept
int middle() const noexcept