presentation/MentionRule.cpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #include "MentionRule.h" | ||
| 2 | |||
| 3 | namespace MentionRule { | ||
| 4 | |||
| 5 | namespace { | ||
| 6 | |||
| 7 | 320 | bool partOfName(QChar c) { | |
| 8 |
6/8✓ Branch 3 → 4 taken 99 times.
✓ Branch 3 → 16 taken 221 times.
✓ Branch 7 → 8 taken 99 times.
✗ Branch 7 → 16 not taken.
✓ Branch 11 → 12 taken 97 times.
✓ Branch 11 → 16 taken 2 times.
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 97 times.
|
320 | return c.isLetterOrNumber() || c == QLatin1Char('-') || c == QLatin1Char('.') || c == QLatin1Char('\''); |
| 9 | } | ||
| 10 | |||
| 11 | } // namespace | ||
| 12 | |||
| 13 | 97 | Mention at(const QString &text, int cursor) { | |
| 14 |
3/6✓ Branch 2 → 3 taken 97 times.
✗ Branch 2 → 5 not taken.
✗ Branch 4 → 5 not taken.
✓ Branch 4 → 6 taken 97 times.
✗ Branch 7 → 8 not taken.
✓ Branch 7 → 9 taken 97 times.
|
97 | if (cursor <= 0 || cursor > text.size()) |
| 15 | ✗ | return {}; | |
| 16 | // Walk back over the fragment to the "@". | ||
| 17 | 97 | int at = cursor - 1; | |
| 18 |
5/6✓ Branch 11 → 12 taken 320 times.
✗ Branch 11 → 16 not taken.
✓ Branch 14 → 15 taken 223 times.
✓ Branch 14 → 16 taken 97 times.
✓ Branch 17 → 10 taken 223 times.
✓ Branch 17 → 18 taken 97 times.
|
320 | while (at >= 0 && partOfName(text.at(at))) |
| 19 | 223 | --at; | |
| 20 |
5/6✓ Branch 18 → 19 taken 97 times.
✗ Branch 18 → 24 not taken.
✓ Branch 23 → 24 taken 65 times.
✓ Branch 23 → 25 taken 32 times.
✓ Branch 26 → 27 taken 65 times.
✓ Branch 26 → 28 taken 32 times.
|
97 | if (at < 0 || text.at(at) != QLatin1Char('@')) |
| 21 | 65 | return {}; | |
| 22 |
1/1✓ Branch 28 → 29 taken 32 times.
|
32 | const QString fragment = text.mid(at + 1, cursor - at - 1); |
| 23 |
6/6✓ Branch 30 → 31 taken 27 times.
✓ Branch 30 → 34 taken 5 times.
✓ Branch 33 → 34 taken 1 time.
✓ Branch 33 → 35 taken 26 times.
✓ Branch 36 → 37 taken 6 times.
✓ Branch 36 → 38 taken 26 times.
|
32 | if (fragment.isEmpty() || !fragment.at(0).isLetter()) |
| 24 | 6 | return {}; | |
| 25 |
2/2✓ Branch 38 → 39 taken 25 times.
✓ Branch 38 → 40 taken 1 time.
|
26 | const QChar before = at > 0 ? text.at(at - 1) : QChar(QLatin1Char('\n')); |
| 26 |
6/6✓ Branch 45 → 46 taken 23 times.
✓ Branch 45 → 67 taken 3 times.
✓ Branch 49 → 50 taken 9 times.
✓ Branch 49 → 67 taken 14 times.
✓ Branch 53 → 54 taken 8 times.
✓ Branch 53 → 67 taken 1 time.
|
34 | if (!(before == QLatin1Char('\n') || before == QLatin1Char(' ') || before == QLatin1Char('\t') || |
| 27 |
8/8✓ Branch 57 → 58 taken 7 times.
✓ Branch 57 → 67 taken 1 time.
✓ Branch 61 → 62 taken 6 times.
✓ Branch 61 → 67 taken 1 time.
✓ Branch 65 → 66 taken 5 times.
✓ Branch 65 → 67 taken 1 time.
✓ Branch 68 → 69 taken 5 times.
✓ Branch 68 → 70 taken 21 times.
|
34 | before == QLatin1Char('(') || before == QLatin1Char('[') || before == QLatin1Char('"'))) |
| 28 | 5 | return {}; | |
| 29 | 21 | const int lineStart = int(text.lastIndexOf(QLatin1Char('\n'), at)) + 1; | |
| 30 |
4/4✓ Branch 73 → 74 taken 21 times.
✓ Branch 76 → 77 taken 21 times.
✓ Branch 78 → 79 taken 1 time.
✓ Branch 78 → 80 taken 20 times.
|
21 | if (text.mid(lineStart).startsWith(QLatin1Char('>'))) |
| 31 | 1 | return {}; // a quoted line | |
| 32 | // Below the signature separator: a line that is exactly "-- " before the "@". | ||
| 33 | 20 | int lineBegin = 0; | |
| 34 |
2/2✓ Branch 93 → 81 taken 4 times.
✓ Branch 93 → 94 taken 19 times.
|
23 | while (lineBegin < lineStart) { |
| 35 | 4 | const int lineEnd = int(text.indexOf(QLatin1Char('\n'), lineBegin)); | |
| 36 |
2/4✓ Branch 84 → 85 taken 4 times.
✗ Branch 84 → 94 not taken.
✓ Branch 85 → 86 taken 4 times.
✗ Branch 85 → 94 not taken.
|
4 | if (lineEnd < 0 || lineEnd >= lineStart) |
| 37 | break; | ||
| 38 |
3/3✓ Branch 87 → 88 taken 4 times.
✓ Branch 90 → 91 taken 1 time.
✓ Branch 90 → 92 taken 3 times.
|
4 | if (text.mid(lineBegin, lineEnd - lineBegin) == QLatin1String("-- ")) |
| 39 | 1 | return {}; | |
| 40 | 3 | lineBegin = lineEnd + 1; | |
| 41 | } | ||
| 42 | 19 | return {at, fragment}; | |
| 43 | 51 | } | |
| 44 | |||
| 45 | } // namespace MentionRule | ||
| 46 |