#include "content/child/dwrite_font_proxy/dwrite_localized_strings_win.h"
#include <stddef.h>
#include <string_view>
namespace content {
DWriteLocalizedStrings::DWriteLocalizedStrings() = default;
DWriteLocalizedStrings::~DWriteLocalizedStrings() = default;
HRESULT DWriteLocalizedStrings::FindLocaleName(const WCHAR* locale_name,
UINT32* index,
BOOL* exists) {
static_assert(sizeof(WCHAR) == sizeof(char16_t), "WCHAR should be UTF-16.");
const std::u16string_view locale_name_str(
reinterpret_cast<const char16_t*>(locale_name));
for (size_t n = 0; n < strings_.size(); ++n) {
if (strings_[n].first == locale_name_str) {
*index = n;
*exists = TRUE;
return S_OK;
}
}
*index = UINT_MAX;
*exists = FALSE;
return S_OK;
}
UINT32 DWriteLocalizedStrings::GetCount() {
return strings_.size();
}
HRESULT DWriteLocalizedStrings::GetLocaleName(UINT32 index,
WCHAR* locale_name,
UINT32 size) {
if (index >= strings_.size())
return E_INVALIDARG;
if (size <= strings_[index].first.size())
return E_INVALIDARG;
static_assert(sizeof(WCHAR) == sizeof(char16_t), "WCHAR should be UTF-16.");
strings_[index].first.copy(reinterpret_cast<char16_t*>(locale_name), size);
return S_OK;
}
HRESULT DWriteLocalizedStrings::GetLocaleNameLength(UINT32 index,
UINT32* length) {
if (index >= strings_.size())
return E_INVALIDARG;
*length = strings_[index].first.size();
return S_OK;
}
HRESULT DWriteLocalizedStrings::GetString(UINT32 index,
WCHAR* string_buffer,
UINT32 size) {
if (index >= strings_.size())
return E_INVALIDARG;
if (size <= strings_[index].second.size())
return E_INVALIDARG;
static_assert(sizeof(WCHAR) == sizeof(char16_t), "WCHAR should be UTF-16.");
strings_[index].second.copy(reinterpret_cast<char16_t*>(string_buffer), size);
return S_OK;
}
HRESULT DWriteLocalizedStrings::GetStringLength(UINT32 index, UINT32* length) {
if (index >= strings_.size())
return E_INVALIDARG;
*length = strings_[index].second.size();
return S_OK;
}
HRESULT DWriteLocalizedStrings::RuntimeClassInitialize(
std::vector<std::pair<std::u16string, std::u16string>>* strings) {
strings_.swap(*strings);
return S_OK;
}
}