// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ASH_INPUT_METHOD_TEXT_UTILS_H_
#define CHROME_BROWSER_ASH_INPUT_METHOD_TEXT_UTILS_H_
#include <limits>
#include <string>
#include "ui/gfx/range/range.h"
// TODO(crbug/1223213): Move these to a sandbox environment.
namespace ash {
namespace input_method {
constexpr uint32_t kUndefined = std::numeric_limits<uint32_t>::max();
struct Sentence {
Sentence();
Sentence(const gfx::Range& range, const std::u16string& text);
Sentence(const Sentence& other);
~Sentence();
bool operator==(const Sentence& other) const;
bool operator!=(const Sentence& other) const;
// The range of the sentence in the original text.
gfx::Range original_range;
std::u16string text;
};
// Find the index of the last sentence end before |pos|, returns |kUndefined| if
// not found.
uint32_t FindLastSentenceEnd(const std::u16string& text, uint32_t pos);
// Find the index of the first sentence end equal or after |pos|, returns
// |kUndefined| if not found.
uint32_t FindNextSentenceEnd(const std::u16string& text, uint32_t pos);
// Find the last sentence before cursor position |pos|.
Sentence FindLastSentence(const std::u16string& text, uint32_t pos);
// Find the sentence containing the cursor position |pos|.
Sentence FindCurrentSentence(const std::u16string& text, uint32_t pos);
} // namespace input_method
} // namespace ash
#endif // CHROME_BROWSER_ASH_INPUT_METHOD_TEXT_UTILS_H_