/* * Copyright (c) 2018-2020, Andreas Kling * Copyright (c) 2020, Fei Wu * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include namespace AK { enum class CaseSensitivity { CaseInsensitive, CaseSensitive, }; enum class TrimMode { Left, Right, Both }; struct MaskSpan { size_t start; size_t length; bool operator==(const MaskSpan& other) const { return start == other.start && length == other.length; } bool operator!=(const MaskSpan& other) const { return !(*this == other); } }; namespace StringUtils { bool matches(const StringView& str, const StringView& mask, CaseSensitivity = CaseSensitivity::CaseInsensitive, Vector* match_spans = nullptr); template Optional convert_to_int(const StringView&); template Optional convert_to_uint(const StringView&); template Optional convert_to_uint_from_hex(const StringView&); bool equals_ignoring_case(const StringView&, const StringView&); bool ends_with(const StringView& a, const StringView& b, CaseSensitivity); bool starts_with(const StringView&, const StringView&, CaseSensitivity); bool contains(const StringView&, const StringView&, CaseSensitivity); bool is_whitespace(const StringView&); StringView trim_whitespace(const StringView&, TrimMode mode); Optional find(const StringView& haystack, const StringView& needle); String to_snakecase(const StringView&); } } using AK::CaseSensitivity; using AK::TrimMode;