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
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/compose/core/browser/compose_utils.h"
#include "base/strings/string_tokenizer.h"
#include "base/strings/string_util.h"
#include "base/third_party/icu/icu_utf.h"
namespace compose {
namespace {
std::string RemoveLastCharIfInvalid(std::string str) {
std::string trimmed_value;
base::TruncateUTF8ToByteSize(str, str.size(), &trimmed_value);
return trimmed_value;
}
const std::string kWhitespace = " ,.\r\n\t\f\v";
}
bool IsWordCountWithinBounds(const std::string& prompt,
unsigned int minimum,
unsigned int maximum) {
base::StringTokenizer tokenizer(
prompt, kWhitespace, base::StringTokenizer::WhitespacePolicy::kSkipOver);
unsigned int word_count = 0;
while (tokenizer.GetNext()) {
++word_count;
if (word_count > maximum) {
return false;
}
}
if (word_count < minimum) {
return false;
}
return true;
}
std::string GetTrimmedPageText(std::string inner_text,
int max_length,
int element_offset,
int header_length) {
std::string separator = "...\n";
max_length = max_length - separator.length();
header_length = std::min(int(inner_text.length()), header_length);
element_offset = std::min(int(inner_text.length()), element_offset);
int header_end = header_length;
int local_start = element_offset - (max_length - header_length);
int local_end = std::max(max_length, element_offset);
if (local_start <= header_end) {
local_end = std::min(int(inner_text.length()),
max_length + int(separator.length()));
if (local_end == int(inner_text.length())) {
return inner_text;
}
return inner_text.substr(0, local_end);
}
if (local_end >= int(inner_text.length())) {
local_end = inner_text.length();
}
std::string header =
RemoveLastCharIfInvalid(inner_text.substr(0, header_end));
std::string local = RemoveLastCharIfInvalid(
inner_text.substr(local_start, local_end - local_start));
return header.append(separator).append(local);
}
} // namespace compose
|