Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
recorddirectory.cpp
Go to the documentation of this file.
1
// Copyright (C) 2025 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4
#
include
"recorddirectory.h"
5
#
include
<
translatormessage
.
h
>
6
7
#
include
<
QMap
>
8
9
QT_BEGIN_NAMESPACE
10
11
const
char
*
meta_id_key
=
"meta-id"
;
12
13
void
RecordDirectory::recordMessage(
const
TranslatorMessage
&msg)
14
{
15
MessageItem
mi{ msg.sourceText(), msg.context(), msg.comment(),
16
QString(), msg
.
lineNumber
(
)
, msg
.
startOffset
(
)
,
17
msg
.
endOffset
(
)
, msg
.
isPlural
(
)
, !msg.extra(
meta_id_key
).isEmpty() };
18
if
(
const
auto
it = m_messages.find(mi); it != m_messages.end())
19
mi.id = it->id;
20
else
if
(QString id = msg.id(); id.isEmpty()) {
21
mi.id = calculateId(msg);
22
m_messages.emplace(mi);
23
}
else
// this is only the case in verification
24
mi.id =
std
::move(id);
25
for
(
const
TranslatorMessage::Reference &ref : msg.allReferences()) {
26
auto
ref_mi = std::make_shared<MessageItem>(mi);
27
ref_mi->lineNo = ref.lineNumber();
28
ref_mi->startOffset = ref.startOffset();
29
ref_mi->endOffset = ref.endOffset();
30
m_msgLocations[ref.fileName()].insert(std::move(ref_mi));
31
}
32
}
33
34
void
RecordDirectory::recordExistingId(
const
QString &id)
35
{
36
m_existingIds.emplace(id);
37
}
38
39
void
RecordDirectory::recordError(
const
QString &file,
int
line,
const
QString &error)
40
{
41
if
(
auto
&fileErrors = m_errors[file]; !fileErrors.contains(line))
42
fileErrors[line] =
"//ltext2id error: "_L1
+ error;
43
}
44
45
void
RecordDirectory::recordAddedLines(
const
QString &file,
int
fromLine,
int
addedLines)
46
{
47
m_fileAddedLines[file].emplace(fromLine, addedLines);
48
}
49
50
int
RecordDirectory::addedLines(
const
QString &file,
int
line)
const
51
{
52
int
addedLines = 0;
53
if
(
const
auto
fit = m_fileAddedLines.find(file); fit != m_fileAddedLines.cend()) {
54
const
auto
&fileAddedLines = fit->second;
55
auto
itr = fileAddedLines.upper_bound(line);
56
if
(itr != fileAddedLines.cbegin()) {
57
itr--;
58
addedLines = itr->second;
59
}
60
}
61
return
addedLines;
62
}
63
64
bool
RecordDirectory::containsFile(
const
QString &filename)
const
noexcept
65
{
66
return
m_msgLocations.contains(filename);
67
}
68
69
QString RecordDirectory::calculateId(
const
TranslatorMessage
&msg)
const
70
{
71
QString id = msg.extra(
meta_id_key
);
72
if
(!id.isEmpty())
73
return
id;
74
75
const
QString &source = msg.sourceText();
76
int
words = 0;
77
int
index = 0;
78
79
while
(index < source.size()) {
80
QChar c = source[index];
81
bool
word =
false
;
82
while
(!c.isLetterOrNumber()) {
83
id += QChar(
'a'
+ c.unicode() % 32);
84
word =
true
;
85
if
(++index == source.size())
86
break
;
87
c = source[index];
88
}
89
if
(word)
90
words++;
91
92
if
(words == 2)
93
break
;
94
id += c;
95
index++;
96
}
97
98
if
(!id.isEmpty() && id.front() ==
'-'
)
99
id = msg.context() + id;
100
else
101
id = msg.context() +
'-'
+ id;
102
103
if
(index < source.size() || !msg.comment().isEmpty())
104
id +=
'-'
+ QString::number(qHash(source + msg.comment()) % 100000);
105
106
if
(m_existingIds.count(id))
107
id +=
"_2"_L1
;
108
return
id;
109
}
110
111
QString RecordDirectory::id(
const
TranslatorMessage
&msg)
const
112
{
113
MessageItem
mi{ msg.sourceText(), msg.context(), msg.comment(), QString() };
114
if
(
const
auto
it = m_messages.find(mi); it != m_messages.end())
115
return
it->id;
116
return
{};
117
}
118
119
QT_END_NAMESPACE
MessageItem
Definition
messagemodel.h:23
TranslatorMessage
Definition
translatormessage.h:17
TranslatorMessage::lineNumber
int lineNumber() const
Definition
translatormessage.h:84
TranslatorMessage::endOffset
int endOffset() const
Definition
translatormessage.h:101
TranslatorMessage::startOffset
int startOffset() const
Definition
translatormessage.h:99
TranslatorMessage::isPlural
bool isPlural() const
Definition
translatormessage.h:113
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
meta_id_key
const char * meta_id_key
Definition
recorddirectory.cpp:11
qttools
src
linguist
ltext2id
recorddirectory.cpp
Generated on
for Qt by
1.18.0