30#include <unordered_map>
34#include "pw_result/result.h"
35#include "pw_span/span.h"
36#include "pw_stream/stream.h"
37#include "pw_tokenizer/internal/decode.h"
38#include "pw_tokenizer/token_database.h"
39#include "pw_tokenizer/tokenize.h"
41namespace pw::tokenizer {
49using DomainTokenEntriesMap = std::unordered_map<
51 std::unordered_map<uint32_t, std::vector<TokenizedStringEntry>>>;
66 bool ok()
const {
return ok_; }
69 const std::vector<DecodedFormatString>&
matches()
const {
return matches_; }
71 const uint32_t& token()
const {
return token_; }
76 const std::string&
BestString()
const {
return best_string_; }
84 std::string best_string_;
87 std::vector<DecodedFormatString> matches_;
101 : database_(std::move(database)) {}
122 std::string_view domain = kDefaultDomain)
const {
128 std::string_view domain = kDefaultDomain)
const {
134 std::string_view domain = kDefaultDomain)
const {
135 return Detokenize(encoded.data(), encoded.size(), domain);
141 std::string_view domain = kDefaultDomain)
const {
142 return Detokenize(
span(
static_cast<const std::byte*
>(encoded), size_bytes),
150 std::string_view domain = kDefaultDomain)
const {
157 std::string_view domain = kDefaultDomain)
const {
163 std::string_view encoded,
164 std::string_view domain = kDefaultDomain)
const {
172 std::string_view domain = kDefaultDomain)
const {
174 span(
static_cast<const std::byte*
>(encoded), size_bytes), domain);
191 return DetokenizeTextRecursive(text, kMaxDecodePasses);
210 const DomainTokenEntriesMap& database()
const {
return database_; }
213 Token token, std::string_view domain)
const;
219 static constexpr unsigned kMaxDecodePasses = 4;
221 std::string DetokenizeTextRecursive(std::string_view text,
222 unsigned max_passes)
const;
227 std::string_view domain,
228 bool recursion)
const;
230 DomainTokenEntriesMap database_;
Definition: span_impl.h:235
Definition: detokenize.h:55
const std::vector< DecodedFormatString > & matches() const
Returns the strings that matched the token, with the best matches first.
Definition: detokenize.h:69
bool ok() const
True the message decoded successfully and unambiguously.
Definition: detokenize.h:66
std::string BestStringWithErrors() const
const std::string & BestString() const
Definition: detokenize.h:76
Definition: detokenize.h:92
DetokenizedString Detokenize(const span< const std::byte > &encoded, std::string_view domain=kDefaultDomain) const
Definition: detokenize.h:121
DetokenizedString Detokenize(const span< const uint8_t > &encoded, std::string_view domain=kDefaultDomain) const
Overload of Detokenize for span<const uint8_t>.
Definition: detokenize.h:127
std::string DetokenizeText(std::string_view text) const
Definition: detokenize.h:190
static Result< Detokenizer > FromElfFile(stream::SeekableReader &stream)
static Result< Detokenizer > FromCsv(std::string_view csv)
Constructs a detokenizer from a CSV database.
DetokenizedString RecursiveDetokenize(const span< const std::byte > &encoded, std::string_view domain=kDefaultDomain) const
Definition: detokenize.h:148
DetokenizedString DetokenizeBase64Message(std::string_view text) const
static Result< Detokenizer > FromElfSection(span< const uint8_t > elf_section)
Overload of FromElfSection for a uint8_t span.
Definition: detokenize.h:108
std::string DecodeOptionallyTokenizedData(span< const std::byte > optionally_tokenized_data) const
Detokenizer(const TokenDatabase &database)
DetokenizedString Detokenize(const void *encoded, size_t size_bytes, std::string_view domain=kDefaultDomain) const
Overload of Detokenize for a pointer and length.
Definition: detokenize.h:139
Detokenizer(DomainTokenEntriesMap &&database)
Constructs a detokenizer by directly passing the parsed database.
Definition: detokenize.h:100
DetokenizedString Detokenize(std::string_view encoded, std::string_view domain=kDefaultDomain) const
Overload of Detokenize for std::string_view.
Definition: detokenize.h:133
DetokenizedString RecursiveDetokenize(const span< const uint8_t > &encoded, std::string_view domain=kDefaultDomain) const
Overload of Detokenize for span<const uint8_t>.
Definition: detokenize.h:155
static Result< Detokenizer > FromElfSection(span< const std::byte > elf_section)
DetokenizedString RecursiveDetokenize(const void *encoded, size_t size_bytes, std::string_view domain=kDefaultDomain) const
Overload of Detokenize for a pointer and length.
Definition: detokenize.h:169
DetokenizedString RecursiveDetokenize(std::string_view encoded, std::string_view domain=kDefaultDomain) const
Overload of Detokenize for std::string_view.
Definition: detokenize.h:162
Definition: token_database.h:77
std::pair< FormatString, uint32_t > TokenizedStringEntry
Token database entry.
Definition: detokenize.h:48