File indexing completed on 2024-05-12 04:02:21

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 WordDelimiters::WordDelimiters(QStringView str)
0020     : asciiDelimiters{}
0021 {
0022     append(str);
0023 }
0024 
0025 bool WordDelimiters::contains(QChar c) const
0026 {
0027     if (c.unicode() < 128) {
0028         return asciiDelimiters.test(c.unicode());
0029     }
0030     // perf tells contains is MUCH faster than binary search here, very short array
0031     return notAsciiDelimiters.contains(c);
0032 }
0033 
0034 void WordDelimiters::append(QStringView s)
0035 {
0036     for (QChar c : s) {
0037         if (c.unicode() < 128) {
0038             asciiDelimiters.set(c.unicode());
0039         } else {
0040             notAsciiDelimiters.append(c);
0041         }
0042     }
0043 }
0044 
0045 void WordDelimiters::remove(QStringView s)
0046 {
0047     for (QChar c : s) {
0048         if (c.unicode() < 128) {
0049             asciiDelimiters.set(c.unicode(), false);
0050         } else {
0051             notAsciiDelimiters.remove(c);
0052         }
0053     }
0054 }