25 bool verifyFail =
false;
28 verifyTor.load(tsFile, cd,
"ts");
29 verifyTor.makeFileNamesAbsolute(QFileInfo(tsFile).absoluteDir());
31 if (!cd.errors().empty()) {
32 printErr(
"ltext2id error: cannot load the TS file %1 after transformation. "
33 "Manual fix is necessary."_L1.arg(tsFile));
39 if (!msg.context().isEmpty()
40 && !m_records.isNonSupported(msg.fileName(), msg
.lineNumber())) {
42 <<
"ltext2id error: failed to transform message with context '%1' and source '%2' in TS file %3"_L1
43 .arg(msg.context(), msg.sourceText(), tsFile);
46 transformedIds.remove(msg.id());
48 for (
const QString &missingId : transformedIds) {
49 printErr(
"ltext2id error: missing id '%1' from the TS file %2."_L1.arg(missingId).arg(
59 processSources(verifyTor, sources, cd);
61 RecordDirectory verifyRecords;
62 for (
const TranslatorMessage &msg : verifyTor.messages())
63 verifyRecords.recordMessage(msg);
65 for (
const auto &[filename, messages] : m_records.messageLocations().asKeyValueRange()) {
67 printOut(
"ltext2id: verifying source file %1"_L1.arg(filename));
68 const auto &verifyMessages = verifyRecords.messageLocations()[filename];
69 auto transformedItr = verifyMessages.cbegin();
70 for (
const std::shared_ptr<MessageItem> &original : messages) {
71 if (m_records.isNonSupported(filename, original->lineNo)
72 && transformedItr != verifyMessages.cend()) {
78 while (transformedItr != verifyMessages.cend()
79 && transformedItr->get()->lineNo < original->lineNo)
82 if (transformedItr == verifyMessages.cend())
83 const_cast<RecordDirectory &>(m_records).recordError(
84 filename, original->lineNo,
85 "Missing translation call with the expected id '%1' after transformation"_L1
88 const MessageItem &transformed = *transformedItr->get();
89 if (original->sourceText != transformed.sourceText || original->id != transformed.id
90 || original->lineNo != transformed.lineNo
91 || original->plural != transformed.plural) {
92 const_cast<RecordDirectory &>(m_records).recordError(filename, original->lineNo,
100 for (
const auto &[fileName, fileErrors] : m_records.errors().asKeyValueRange()) {
101 QStringList lines = readLines(fileName);
102 for (
const auto &[lineNo, error] : fileErrors.asKeyValueRange()) {
103 auto &line = lines[lineNo - 1];
104 const QString indentation = getIndentation(line);
105 line = indentation + error +
'\n' + line;
107 writeLines(fileName, lines);