File indexing completed on 2024-05-12 15:50:07

0001 /*
0002     SPDX-FileCopyrightText: 2020 Jonathan Poelen <jonathan.poelen@gmail.com>
0003 
0004     SPDX-License-Identifier: MIT
0005 */
0006 
0007 #include "worddelimiters_p.h"
0008 
0009 using namespace KSyntaxHighlighting;
0010 
0011 WordDelimiters::WordDelimiters()
0012     : asciiDelimiters{}
0013 {
0014     for (const char *p = "\t !%&()*+,-./:;<=>?[\\]^{|}~"; *p; ++p) {
0015         asciiDelimiters.set(*p);
0016     }
0017 }
0018 
0019 bool WordDelimiters::contains(QChar c) const
0020 {
0021     if (c.unicode() < 128) {
0022         return asciiDelimiters.test(c.unicode());
0023     }
0024     // perf tells contains is MUCH faster than binary search here, very short array
0025     return notAsciiDelimiters.contains(c);
0026 }
0027 
0028 void WordDelimiters::append(QStringView s)
0029 {
0030     for (QChar c : s) {
0031         if (c.unicode() < 128) {
0032             asciiDelimiters.set(c.unicode());
0033         } else {
0034             notAsciiDelimiters.append(c);
0035         }
0036     }
0037 }
0038 
0039 void WordDelimiters::remove(QStringView s)
0040 {
0041     for (QChar c : s) {
0042         if (c.unicode() < 128) {
0043             asciiDelimiters.set(c.unicode(), false);
0044         } else {
0045             notAsciiDelimiters.remove(c);
0046         }
0047     }
0048 }