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 }