/src/syntax-highlighting/src/lib/worddelimiters.cpp
Line | Count | Source |
1 | | /* |
2 | | SPDX-FileCopyrightText: 2020 Jonathan Poelen <jonathan.poelen@gmail.com> |
3 | | |
4 | | SPDX-License-Identifier: MIT |
5 | | */ |
6 | | |
7 | | #include "worddelimiters_p.h" |
8 | | |
9 | | using namespace KSyntaxHighlighting; |
10 | | |
11 | | WordDelimiters::WordDelimiters() |
12 | 5.51M | : asciiDelimiters{} |
13 | 5.51M | { |
14 | 154M | for (const char *p = "\t !%&()*+,-./:;<=>?[\\]^{|}~"; *p; ++p) { |
15 | 148M | asciiDelimiters.set(*p); |
16 | 148M | } |
17 | 5.51M | } |
18 | | |
19 | | WordDelimiters::WordDelimiters(QStringView str) |
20 | 12 | : asciiDelimiters{} |
21 | 12 | { |
22 | 12 | append(str); |
23 | 12 | } |
24 | | |
25 | | bool WordDelimiters::contains(QChar c) const |
26 | 0 | { |
27 | 0 | if (c.unicode() < 128) { |
28 | 0 | return asciiDelimiters.test(c.unicode()); |
29 | 0 | } |
30 | | // perf tells contains is MUCH faster than binary search here, very short array |
31 | 0 | return notAsciiDelimiters.contains(c); |
32 | 0 | } |
33 | | |
34 | | void WordDelimiters::append(QStringView s) |
35 | 28 | { |
36 | 88 | for (QChar c : s) { |
37 | 88 | if (c.unicode() < 128) { |
38 | 84 | asciiDelimiters.set(c.unicode()); |
39 | 84 | } else { |
40 | 4 | notAsciiDelimiters.append(c); |
41 | 4 | } |
42 | 88 | } |
43 | 28 | } |
44 | | |
45 | | void WordDelimiters::remove(QStringView s) |
46 | 16 | { |
47 | 28 | for (QChar c : s) { |
48 | 28 | if (c.unicode() < 128) { |
49 | 28 | asciiDelimiters.set(c.unicode(), false); |
50 | 28 | } else { |
51 | 0 | notAsciiDelimiters.remove(c); |
52 | 0 | } |
53 | 28 | } |
54 | 16 | } |