mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-05-13 20:55:32 +08:00
Summary: Surprisingly, we have some significant amount of text measuring requests where the string is empty. So, there is no need to go to platform specific layer to find that the size of those strings is zero. Reviewed By: mdvacca Differential Revision: D14297315 fbshipit-source-id: bf84cf27d5c0893262e8b27da8ff42fc77bcd6c5
120 lines
2.8 KiB
C++
120 lines
2.8 KiB
C++
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#include "AttributedString.h"
|
|
|
|
#include <react/debug/DebugStringConvertibleItem.h>
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
using Fragment = AttributedString::Fragment;
|
|
using Fragments = AttributedString::Fragments;
|
|
|
|
#pragma mark - Fragment
|
|
|
|
bool Fragment::operator==(const Fragment &rhs) const {
|
|
return std::tie(string, textAttributes, shadowView, parentShadowView) ==
|
|
std::tie(
|
|
rhs.string,
|
|
rhs.textAttributes,
|
|
rhs.shadowView,
|
|
rhs.parentShadowView);
|
|
}
|
|
|
|
bool Fragment::operator!=(const Fragment &rhs) const {
|
|
return !(*this == rhs);
|
|
}
|
|
|
|
#pragma mark - AttributedString
|
|
|
|
void AttributedString::appendFragment(const Fragment &fragment) {
|
|
ensureUnsealed();
|
|
|
|
if (fragment.string.empty()) {
|
|
return;
|
|
}
|
|
|
|
fragments_.push_back(fragment);
|
|
}
|
|
|
|
void AttributedString::prependFragment(const Fragment &fragment) {
|
|
ensureUnsealed();
|
|
|
|
if (fragment.string.empty()) {
|
|
return;
|
|
}
|
|
|
|
fragments_.insert(fragments_.begin(), fragment);
|
|
}
|
|
|
|
void AttributedString::appendAttributedString(
|
|
const AttributedString &attributedString) {
|
|
ensureUnsealed();
|
|
fragments_.insert(
|
|
fragments_.end(),
|
|
attributedString.fragments_.begin(),
|
|
attributedString.fragments_.end());
|
|
}
|
|
|
|
void AttributedString::prependAttributedString(
|
|
const AttributedString &attributedString) {
|
|
ensureUnsealed();
|
|
fragments_.insert(
|
|
fragments_.begin(),
|
|
attributedString.fragments_.begin(),
|
|
attributedString.fragments_.end());
|
|
}
|
|
|
|
const std::vector<Fragment> &AttributedString::getFragments() const {
|
|
return fragments_;
|
|
}
|
|
|
|
std::string AttributedString::getString() const {
|
|
auto string = std::string{};
|
|
for (const auto &fragment : fragments_) {
|
|
string += fragment.string;
|
|
}
|
|
return string;
|
|
}
|
|
|
|
bool AttributedString::isEmpty() const {
|
|
return fragments_.empty();
|
|
}
|
|
|
|
bool AttributedString::operator==(const AttributedString &rhs) const {
|
|
return fragments_ == rhs.fragments_;
|
|
}
|
|
|
|
bool AttributedString::operator!=(const AttributedString &rhs) const {
|
|
return !(*this == rhs);
|
|
}
|
|
|
|
#pragma mark - DebugStringConvertible
|
|
|
|
#if RN_DEBUG_STRING_CONVERTIBLE
|
|
SharedDebugStringConvertibleList AttributedString::getDebugChildren() const {
|
|
auto list = SharedDebugStringConvertibleList{};
|
|
|
|
for (auto &&fragment : fragments_) {
|
|
auto propsList =
|
|
fragment.textAttributes.DebugStringConvertible::getDebugProps();
|
|
|
|
list.push_back(std::make_shared<DebugStringConvertibleItem>(
|
|
"Fragment",
|
|
fragment.string,
|
|
SharedDebugStringConvertibleList(),
|
|
propsList));
|
|
}
|
|
|
|
return list;
|
|
}
|
|
#endif
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|