// Copyright 2020 The Chromium Authors. All rights reserved. // Copyright 2014 Blake Embrey (hello@blakeembrey.com) // Use of this source code is governed by an MIT-style license that can be // found in the LICENSE file or at https://opensource.org/licenses/MIT. #include "third_party/liburlpattern/utils.h" namespace liburlpattern { namespace { constexpr absl::string_view kRegexpSpecialCharacters(".+*?^${}()[]|/\\"); constexpr absl::string_view kPatternSpecialCharacters("+*?:{}()\\"); void EscapeStringAndAppendInternal(absl::string_view input, std::string& append_target, absl::string_view special_chars) { for (auto& c : input) { if (special_chars.find(c) != std::string::npos) append_target += '\\'; append_target += c; } } } // namespace size_t EscapedRegexpStringLength(absl::string_view input) { size_t count = input.size(); for (auto& c : input) { if (kRegexpSpecialCharacters.find(c) != std::string::npos) count += 1; } return count; } void EscapeRegexpStringAndAppend(absl::string_view input, std::string& append_target) { return EscapeStringAndAppendInternal(input, append_target, kRegexpSpecialCharacters); } void EscapePatternStringAndAppend(absl::string_view input, std::string& append_target) { return EscapeStringAndAppendInternal(input, append_target, kPatternSpecialCharacters); } std::string EscapeRegexpString(absl::string_view input) { std::string result; result.reserve(EscapedRegexpStringLength(input)); EscapeRegexpStringAndAppend(input, result); return result; } } // namespace liburlpattern