1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/strings/string_util_win.h"
#include "base/ranges/algorithm.h"
#include "base/strings/string_util_impl_helpers.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
namespace base {
bool IsStringASCII(WStringPiece str) {
return internal::DoIsStringASCII(str.data(), str.length());
}
std::wstring ToLowerASCII(WStringPiece str) {
return internal::ToLowerASCIIImpl(str);
}
std::wstring ToUpperASCII(WStringPiece str) {
return internal::ToUpperASCIIImpl(str);
}
int CompareCaseInsensitiveASCII(WStringPiece a, WStringPiece b) {
return internal::CompareCaseInsensitiveASCIIT(a, b);
}
bool RemoveChars(WStringPiece input,
WStringPiece remove_chars,
std::wstring* output) {
return internal::ReplaceCharsT(input, remove_chars, WStringPiece(), output);
}
bool ReplaceChars(WStringPiece input,
WStringPiece replace_chars,
WStringPiece replace_with,
std::wstring* output) {
return internal::ReplaceCharsT(input, replace_chars, replace_with, output);
}
bool TrimString(WStringPiece input,
WStringPiece trim_chars,
std::wstring* output) {
return internal::TrimStringT(input, trim_chars, TRIM_ALL, output) !=
TRIM_NONE;
}
WStringPiece TrimString(WStringPiece input,
WStringPiece trim_chars,
TrimPositions positions) {
return internal::TrimStringPieceT(input, trim_chars, positions);
}
TrimPositions TrimWhitespace(WStringPiece input,
TrimPositions positions,
std::wstring* output) {
return internal::TrimStringT(input, WStringPiece(kWhitespaceWide), positions,
output);
}
WStringPiece TrimWhitespace(WStringPiece input, TrimPositions positions) {
return internal::TrimStringPieceT(input, WStringPiece(kWhitespaceWide),
positions);
}
std::wstring CollapseWhitespace(WStringPiece text,
bool trim_sequences_with_line_breaks) {
return internal::CollapseWhitespaceT(text, trim_sequences_with_line_breaks);
}
bool ContainsOnlyChars(WStringPiece input, WStringPiece characters) {
return input.find_first_not_of(characters) == StringPiece::npos;
}
bool EqualsASCII(WStringPiece str, StringPiece ascii) {
return ranges::equal(ascii, str);
}
bool StartsWith(WStringPiece str,
WStringPiece search_for,
CompareCase case_sensitivity) {
return internal::StartsWithT(str, search_for, case_sensitivity);
}
bool EndsWith(WStringPiece str,
WStringPiece search_for,
CompareCase case_sensitivity) {
return internal::EndsWithT(str, search_for, case_sensitivity);
}
void ReplaceFirstSubstringAfterOffset(std::wstring* str,
size_t start_offset,
WStringPiece find_this,
WStringPiece replace_with) {
internal::DoReplaceMatchesAfterOffset(
str, start_offset, internal::MakeSubstringMatcher(find_this),
replace_with, internal::ReplaceType::REPLACE_FIRST);
}
void ReplaceSubstringsAfterOffset(std::wstring* str,
size_t start_offset,
WStringPiece find_this,
WStringPiece replace_with) {
internal::DoReplaceMatchesAfterOffset(
str, start_offset, internal::MakeSubstringMatcher(find_this),
replace_with, internal::ReplaceType::REPLACE_ALL);
}
wchar_t* WriteInto(std::wstring* str, size_t length_with_null) {
return internal::WriteIntoT(str, length_with_null);
}
std::wstring JoinString(span<const std::wstring> parts,
WStringPiece separator) {
return internal::JoinStringT(parts, separator);
}
std::wstring JoinString(span<const WStringPiece> parts,
WStringPiece separator) {
return internal::JoinStringT(parts, separator);
}
std::wstring JoinString(std::initializer_list<WStringPiece> parts,
WStringPiece separator) {
return internal::JoinStringT(parts, separator);
}
std::wstring ReplaceStringPlaceholders(WStringPiece format_string,
const std::vector<std::wstring>& subst,
std::vector<size_t>* offsets) {
absl::optional<std::wstring> replacement =
internal::DoReplaceStringPlaceholders(
format_string, subst,
/*placeholder_prefix*/ L'$',
/*should_escape_multiple_placeholder_prefixes*/ true,
/*is_strict_mode*/ false, offsets);
DCHECK(replacement);
return replacement.value();
}
} // namespace base
|