// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/shared/ui/util/attributed_string_util.h"
NSAttributedString* AttributedStringCopyWithAttributes(
NSAttributedString* attributedString,
NSLineBreakMode lineBreakMode,
NSTextAlignment textAlignment,
BOOL forceLeftToRight) {
NSMutableAttributedString* textCopy = [attributedString mutableCopy];
NSMutableParagraphStyle* textStyle =
[[NSParagraphStyle defaultParagraphStyle] mutableCopy];
textStyle.lineBreakMode = lineBreakMode;
textStyle.alignment = textAlignment;
textStyle.lineBreakStrategy = NSLineBreakStrategyHangulWordPriority;
if (forceLeftToRight) {
textStyle.baseWritingDirection = NSWritingDirectionLeftToRight;
}
[textCopy addAttribute:NSParagraphStyleAttributeName
value:textStyle
range:NSMakeRange(0, attributedString.length)];
return textCopy;
}
NSInteger NumberOfLinesOfAttributedString(NSAttributedString* attributedString,
CGFloat limitedWidth) {
NSAttributedString* wrappingString = AttributedStringCopyWithAttributes(
attributedString, NSLineBreakByWordWrapping, NSTextAlignmentNatural, NO);
const CGSize wrappingStringSize =
[wrappingString boundingRectWithSize:CGSizeMake(limitedWidth, FLT_MAX)
options:NSStringDrawingUsesLineFragmentOrigin
context:nil]
.size;
const NSInteger numberOfLines =
round(wrappingStringSize.height / wrappingString.size.height);
return numberOfLines;
}
NSAttributedString* NSAttributedStringFromUILabel(UILabel* label) {
NSShadow* shadow = [[NSShadow alloc] init];
shadow.shadowColor = label.shadowColor;
shadow.shadowOffset = label.shadowOffset;
NSMutableParagraphStyle* paragraphStyle =
[[NSMutableParagraphStyle alloc] init];
paragraphStyle.alignment = label.textAlignment;
paragraphStyle.lineBreakMode = label.lineBreakMode;
NSAttributedString* attributedText = [[NSAttributedString alloc]
initWithString:label.text
attributes:@{
NSFontAttributeName : label.font,
NSForegroundColorAttributeName : label.textColor,
NSShadowAttributeName : shadow,
NSParagraphStyleAttributeName : paragraphStyle
}];
return attributedText;
}