| Index: compiled/filter/RegExpFilter.cpp |
| diff --git a/compiled/filter/RegExpFilter.cpp b/compiled/filter/RegExpFilter.cpp |
| index e66b6602c011c584464d29f6fee520dadd71b460..646c9ea9d581d3ebb924e742f0c4fb686448be19 100644 |
| --- a/compiled/filter/RegExpFilter.cpp |
| +++ b/compiled/filter/RegExpFilter.cpp |
| @@ -52,28 +52,28 @@ namespace |
| }; |
| const StringMap<int> typeMap { |
| - {u"other"_str, TYPE_OTHER}, |
| - {u"script"_str, TYPE_SCRIPT}, |
| - {u"image"_str, TYPE_IMAGE}, |
| - {u"stylesheet"_str, TYPE_STYLESHEET}, |
| - {u"object"_str, TYPE_OBJECT}, |
| - {u"subdocument"_str, TYPE_SUBDOCUMENT}, |
| - {u"document"_str, TYPE_DOCUMENT}, |
| - {u"websocket"_str, TYPE_WEBSOCKET}, |
| - {u"webrtc"_str, TYPE_WEBRTC}, |
| - {u"xbl"_str, TYPE_OTHER}, // Backwards compat |
| - {u"ping"_str, TYPE_PING}, |
| - {u"xmlhttprequest"_str, TYPE_XMLHTTPREQUEST}, |
| - {u"object-subrequest"_str, TYPE_OBJECT_SUBREQUEST}, |
| - {u"dtd"_str, TYPE_OTHER}, // Backwards compat |
| - {u"media"_str, TYPE_MEDIA}, |
| - {u"font"_str, TYPE_FONT}, |
| - {u"background"_str, TYPE_IMAGE}, // Backwards compat |
| - |
| - {u"popup"_str, TYPE_POPUP}, |
| - {u"genericblock"_str, TYPE_GENERICBLOCK}, |
| - {u"generichide"_str, TYPE_GENERICHIDE}, |
| - {u"elemhide"_str, TYPE_ELEMHIDE}, |
| + {ABP_TEXT("other"_str), TYPE_OTHER}, |
| + {ABP_TEXT("script"_str), TYPE_SCRIPT}, |
| + {ABP_TEXT("image"_str), TYPE_IMAGE}, |
| + {ABP_TEXT("stylesheet"_str), TYPE_STYLESHEET}, |
| + {ABP_TEXT("object"_str), TYPE_OBJECT}, |
| + {ABP_TEXT("subdocument"_str), TYPE_SUBDOCUMENT}, |
| + {ABP_TEXT("document"_str), TYPE_DOCUMENT}, |
| + {ABP_TEXT("websocket"_str), TYPE_WEBSOCKET}, |
| + {ABP_TEXT("webrtc"_str), TYPE_WEBRTC}, |
| + {ABP_TEXT("xbl"_str), TYPE_OTHER}, // Backwards compat |
| + {ABP_TEXT("ping"_str), TYPE_PING}, |
| + {ABP_TEXT("xmlhttprequest"_str), TYPE_XMLHTTPREQUEST}, |
| + {ABP_TEXT("object-subrequest"_str), TYPE_OBJECT_SUBREQUEST}, |
| + {ABP_TEXT("dtd"_str), TYPE_OTHER}, // Backwards compat |
| + {ABP_TEXT("media"_str), TYPE_MEDIA}, |
| + {ABP_TEXT("font"_str), TYPE_FONT}, |
| + {ABP_TEXT("background"_str), TYPE_IMAGE}, // Backwards compat |
| + |
| + {ABP_TEXT("popup"_str), TYPE_POPUP}, |
| + {ABP_TEXT("genericblock"_str), TYPE_GENERICBLOCK}, |
| + {ABP_TEXT("generichide"_str), TYPE_GENERICHIDE}, |
| + {ABP_TEXT("elemhide"_str), TYPE_ELEMHIDE}, |
| }; |
| const int defaultTypeMask = INT_MAX & ~(TYPE_DOCUMENT | TYPE_ELEMHIDE | |
| @@ -86,47 +86,47 @@ namespace |
| // Note: This doesn't remove trailing wildcards, otherwise the result should |
| // be identical to Filter.toRegExp(). |
| OwnedString result; |
| - String::value_type prevChar = u'*'; |
| + String::value_type prevChar = ABP_TEXT('*'); |
| for (String::size_type i = 0; i < source.length(); ++i) |
| { |
| String::value_type currChar = source[i]; |
| switch (currChar) |
| { |
| - case u'*': |
| - if (prevChar != u'*') |
| - result.append(u".*"_str); |
| + case ABP_TEXT('*'): |
| + if (prevChar != ABP_TEXT('*')) |
| + result.append(ABP_TEXT(".*"_str)); |
| break; |
| - case u'^': |
| - result.append(u"(?:[\\x00-\\x24\\x26-\\x2C\\x2F\\x3A-\\x40\\x5B-\\x5E\\x60\\x7B-\\x7F]|$)"_str); |
| + case ABP_TEXT('^'): |
| + result.append(ABP_TEXT("(?:[\\x00-\\x24\\x26-\\x2C\\x2F\\x3A-\\x40\\x5B-\\x5E\\x60\\x7B-\\x7F]|$)"_str)); |
| break; |
| - case u'|': |
| + case ABP_TEXT('|'): |
| if (i == 0) |
| { |
| // Anchor at expression start, maybe extended anchor? |
| - if (i + 1 < source.length() && source[i + 1] == u'|') |
| + if (i + 1 < source.length() && source[i + 1] == ABP_TEXT('|')) |
| { |
| - result.append(u"^[\\w\\-]+:\\/+(?!\\/)(?:[^\\/]+\\.)?"_str); |
| + result.append(ABP_TEXT("^[\\w\\-]+:\\/+(?!\\/)(?:[^\\/]+\\.)?"_str)); |
| ++i; |
| } |
| else |
| - result.append(u'^'); |
| + result.append(ABP_TEXT('^')); |
| } |
| else if (i == source.length() - 1) |
| { |
| // Anchor at expression end, ignore if following separator placeholder |
| - if (prevChar != u'^') |
| - result.append(u'$'); |
| + if (prevChar != ABP_TEXT('^')) |
| + result.append(ABP_TEXT('$')); |
| } |
| else |
| { |
| // Not actually an anchor, escape it |
| - result.append(u"\\|"_str); |
| + result.append(ABP_TEXT("\\|"_str)); |
| } |
| break; |
| default: |
| - if (!(currChar >= u'a' && currChar <= u'z') && |
| - !(currChar >= u'A' && currChar <= u'Z') && |
| - !(currChar >= u'0' && currChar <= u'9') && |
| + if (!(currChar >= ABP_TEXT('a') && currChar <= ABP_TEXT('z')) && |
| + !(currChar >= ABP_TEXT('A') && currChar <= ABP_TEXT('Z')) && |
| + !(currChar >= ABP_TEXT('0') && currChar <= ABP_TEXT('9')) && |
| currChar < 128) |
| { |
| result.append(u'\\'); |
| @@ -147,7 +147,7 @@ namespace |
| String::size_type len = text.length(); |
| String::size_type pos; |
| for (pos = 0; pos < len; pos++) |
| - if (text[pos] == ' ') |
| + if (text[pos] == ABP_TEXT(' ')) |
| break; |
| if (pos >= len) |
| @@ -157,7 +157,7 @@ namespace |
| String::size_type delta = 1; |
| for (pos = pos + 1; pos < len; pos++) |
| { |
| - if (text[pos] == ' ') |
| + if (text[pos] == ABP_TEXT(' ')) |
| delta++; |
| else |
| text[pos - delta] = text[pos]; |
| @@ -172,7 +172,7 @@ namespace |
| return; |
| bool reverse = false; |
| - if (text[optionStart] == u'~') |
| + if (text[optionStart] == ABP_TEXT('~')) |
| { |
| reverse = true; |
| optionStart++; |
| @@ -182,10 +182,10 @@ namespace |
| for (size_t i = 0; i < name.length(); ++i) |
| { |
| char16_t currChar = name[i]; |
| - if (currChar >= u'A' && currChar <= u'Z') |
| - name[i] = currChar + u'a' - u'A'; |
| - else if (currChar == u'_') |
| - name[i] = u'-'; |
| + if (currChar >= ABP_TEXT('A') && currChar <= ABP_TEXT('Z')) |
| + name[i] = currChar + ABP_TEXT('a') - ABP_TEXT('A'); |
| + else if (currChar == ABP_TEXT('_')) |
| + name[i] = ABP_TEXT('-'); |
| } |
| auto it = typeMap.find(name); |
| @@ -198,7 +198,7 @@ namespace |
| else |
| data.mContentType |= it->second; |
| } |
| - else if (name.equals(u"domain"_str)) |
| + else if (name.equals(ABP_TEXT("domain"_str))) |
| { |
| if (valueStart >= 0 && valueEnd > valueStart) |
| { |
| @@ -207,7 +207,7 @@ namespace |
| DependentString(text, valueStart, valueEnd - valueStart).toLower(); |
| } |
| } |
| - else if (name.equals(u"sitekey"_str)) |
| + else if (name.equals(ABP_TEXT("sitekey"_str))) |
| { |
| if (valueStart >= 0 && valueEnd > valueStart) |
| { |
| @@ -215,14 +215,14 @@ namespace |
| data.mSitekeysEnd = valueEnd; |
| } |
| } |
| - else if (name.equals(u"match-case"_str)) |
| + else if (name.equals(ABP_TEXT("match-case"_str))) |
| data.mMatchCase = !reverse; |
| - else if (name.equals(u"third-party"_str)) |
| + else if (name.equals(ABP_TEXT("third-party"_str))) |
| data.mThirdParty = reverse ? TrippleState::NO : TrippleState::YES; |
| - else if (name.equals(u"collapse"_str)) |
| + else if (name.equals(ABP_TEXT("collapse"_str))) |
| data.mCollapse = !reverse; |
| else |
| - error.reset(u"filter_unknown_option"_str); |
| + error.reset(ABP_TEXT("filter_unknown_option"_str)); |
| } |
| void ParseOptions(String& text, DependentString& error, RegExpFilterData& data, |
| @@ -245,21 +245,21 @@ namespace |
| int optionEnd = -1; |
| int valueStart = -1; |
| - StringScanner scanner(text, optionStart, u','); |
| + StringScanner scanner(text, optionStart, ABP_TEXT(',')); |
| bool done = false; |
| while (!done) |
| { |
| done = scanner.done(); |
| switch (scanner.next()) |
| { |
| - case u'=': |
| + case ABP_TEXT('='): |
| if (optionEnd < 0) |
| { |
| optionEnd = scanner.position(); |
| valueStart = optionEnd + 1; |
| } |
| break; |
| - case u',': |
| + case ABP_TEXT(','): |
| if (optionEnd < 0) |
| optionEnd = scanner.position(); |
| ParseOption(text, error, data, optionStart, optionEnd, valueStart, |
| @@ -298,13 +298,13 @@ Filter::Type RegExpFilter::Parse(DependentString& text, DependentString& error, |
| Filter::Type type = Type::BLOCKING; |
| data.mPatternStart = 0; |
| - if (text.length() >= 2 && text[0] == u'@' && text[1] == u'@') |
| + if (text.length() >= 2 && text[0] == ABP_TEXT('@') && text[1] == ABP_TEXT('@')) |
| { |
| type = Type::WHITELIST; |
| data.mPatternStart = 2; |
| } |
| - data.mPatternEnd = text.find(u'$', data.mPatternStart); |
| + data.mPatternEnd = text.find(ABP_TEXT('$'), data.mPatternStart); |
| if (data.mPatternEnd == text.npos) |
| data.mPatternEnd = text.length(); |
| @@ -313,14 +313,14 @@ Filter::Type RegExpFilter::Parse(DependentString& text, DependentString& error, |
| return Type::INVALID; |
| if (data.mPatternEnd - data.mPatternStart >= 2 && |
| - text[data.mPatternStart] == u'/' && |
| - text[data.mPatternEnd - 1] == u'/') |
| + text[data.mPatternStart] == ABP_TEXT('/') && |
| + text[data.mPatternEnd - 1] == ABP_TEXT('/')) |
| { |
| data.SetRegExp(GenerateRegExp(DependentString(text, data.mPatternStart + 1, |
| data.mPatternEnd - data.mPatternStart - 2), data.mMatchCase)); |
| if (data.mRegexpId == -1) |
| { |
| - error.reset(u"filter_invalid_regexp"_str); |
| + error.reset(ABP_TEXT("filter_invalid_regexp"_str)); |
| return Type::INVALID; |
| } |
| } |
| @@ -330,13 +330,13 @@ Filter::Type RegExpFilter::Parse(DependentString& text, DependentString& error, |
| void RegExpFilter::ParseSitekeys(const String& sitekeys) const |
| { |
| - StringScanner scanner(sitekeys, 0, u'|'); |
| + StringScanner scanner(sitekeys, 0, ABP_TEXT('|')); |
| size_t start = 0; |
| bool done = false; |
| while (!done) |
| { |
| done = scanner.done(); |
| - if (scanner.next() == u'|') |
| + if (scanner.next() == ABP_TEXT('|')) |
| { |
| if (scanner.position() > start) |
| AddSitekey(DependentString(sitekeys, start, scanner.position() - start)); |
| @@ -353,7 +353,7 @@ void RegExpFilter::GenerateCustomBindings() |
| { |
| std::string type(item.first.length(), '\0'); |
| for (String::size_type i = 0; i < item.first.length(); i++) |
| - type[i] = (item.first[i] == '-' ? '_' : toupper(item.first[i])); |
| + type[i] = item.first[i] == ABP_TEXT('-') ? '_' : toupper(item.first[i]); |
| printf(" %s: %i,\n", type.c_str(), item.second); |
| } |
| printf("};\n"); |
| @@ -363,7 +363,7 @@ RegExpFilter::DomainMap* RegExpFilter::GetDomains() const |
| { |
| if (!mData.DomainsParsingDone()) |
| { |
| - ParseDomains(mData.GetDomainsSource(mText), u'|'); |
| + ParseDomains(mData.GetDomainsSource(mText), ABP_TEXT('|')); |
| mData.SetDomainsParsingDone(); |
| } |
| return ActiveFilter::GetDomains(); |