chromium/components/url_pattern_index/fuzzy_pattern_matching.h

// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// The separator placeholder '^' symbol is used in subpatterns to match any
// separator character, which is any ASCII symbol except letters, digits, and
// the following: '_', '-', '.', '%'. Note that the separator placeholder
// character '^' is itself a separator, as well as '\0'.
//
// In addition, a separator placeholder at the end of the pattern can be matched
// by the end of |text|. This should be handled by the clients using the
// following utility functions.
//
// We define a fuzzy occurrence as an occurrence of a |subpattern| in |text|
// such that all its non-placeholder characters are equal to the corresponding
// characters of the |text|, whereas each '^' placeholder can correspond to any
// type of separator in |text|.

#ifndef COMPONENTS_URL_PATTERN_INDEX_FUZZY_PATTERN_MATCHING_H_
#define COMPONENTS_URL_PATTERN_INDEX_FUZZY_PATTERN_MATCHING_H_

#include <stddef.h>

#include <string_view>

namespace url_pattern_index {

constexpr char kSeparatorPlaceholder =;

inline bool IsAscii(char c) {}

inline bool IsAlphaNumericAscii(char c) {}

// Returns whether |c| is a separator.
inline bool IsSeparator(char c) {}

// Returns whether |text| starts with a fuzzy occurrence of |subpattern|.
bool StartsWithFuzzy(std::string_view text, std::string_view subpattern);

// Returns whether |text| ends with a fuzzy occurrence of |subpattern|.
bool EndsWithFuzzy(std::string_view text, std::string_view subpattern);

// Returns the position of the leftmost fuzzy occurrence of a |subpattern| in
// the |text| starting no earlier than |from| the specified position.
size_t FindFuzzy(std::string_view text,
                 std::string_view subpattern,
                 size_t from = 0);

}  // namespace url_pattern_index

#endif  // COMPONENTS_URL_PATTERN_INDEX_FUZZY_PATTERN_MATCHING_H_