| Index: content/child/dwrite_font_proxy/dwrite_localized_strings_win.cc
|
| diff --git a/content/child/dwrite_font_proxy/dwrite_localized_strings_win.cc b/content/child/dwrite_font_proxy/dwrite_localized_strings_win.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..27f8fa4648fa509872f60f8d7f399373bdac96a2
|
| --- /dev/null
|
| +++ b/content/child/dwrite_font_proxy/dwrite_localized_strings_win.cc
|
| @@ -0,0 +1,91 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "content/child/dwrite_font_proxy/dwrite_localized_strings_win.h"
|
| +
|
| +#include "base/logging.h"
|
| +
|
| +namespace content {
|
| +
|
| +DWriteLocalizedStrings::DWriteLocalizedStrings() = default;
|
| +
|
| +DWriteLocalizedStrings::~DWriteLocalizedStrings() = default;
|
| +
|
| +HRESULT DWriteLocalizedStrings::FindLocaleName(const WCHAR* locale_name,
|
| + UINT32* index,
|
| + BOOL* exists) {
|
| + for (size_t n = 0; n < strings_.size(); ++n) {
|
| + if (_wcsicmp(strings_[n].first.data(), locale_name) == 0) {
|
| + *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;
|
| + // string16::size does not count the null terminator as part of the string,
|
| + // but GetLocaleName requires the caller to reserve space for the null
|
| + // terminator, so we need to ensure |size| is greater than the count of
|
| + // characters.
|
| + if (size <= strings_[index].first.size())
|
| + return E_INVALIDARG;
|
| + wcsncpy(locale_name, strings_[index].first.c_str(), size);
|
| + return S_OK;
|
| +}
|
| +
|
| +HRESULT DWriteLocalizedStrings::GetLocaleNameLength(UINT32 index,
|
| + UINT32* length) {
|
| + if (index >= strings_.size())
|
| + return E_INVALIDARG;
|
| + // Oddly, GetLocaleNameLength requires the length to not count the null
|
| + // terminator, even though GetLocaleName requires the output to be null
|
| + // terminated.
|
| + *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;
|
| + // string16::size does not count the null terminator as part of the string,
|
| + // but GetString requires the caller to reserve space for the null terminator,
|
| + // so we need to ensure |size| is greater than the count of characters.
|
| + if (size <= strings_[index].second.size())
|
| + return E_INVALIDARG;
|
| + wcsncpy(string_buffer, strings_[index].second.c_str(), size);
|
| + return S_OK;
|
| +}
|
| +
|
| +HRESULT DWriteLocalizedStrings::GetStringLength(UINT32 index, UINT32* length) {
|
| + if (index >= strings_.size())
|
| + return E_INVALIDARG;
|
| + // Oddly, GetStringLength requires the length to not count the null
|
| + // terminator, even though GetString requires the output to be null
|
| + // terminated.
|
| + *length = strings_[index].second.size();
|
| + return S_OK;
|
| +}
|
| +
|
| +HRESULT DWriteLocalizedStrings::RuntimeClassInitialize(
|
| + std::vector<std::pair<base::string16, base::string16>>* strings) {
|
| + strings_.swap(*strings);
|
| + return S_OK;
|
| +}
|
| +
|
| +} // namespace content
|
|
|