blob: d0045dcdafdd5c2c13c12043b660af295192ebf1 [file] [log] [blame]
// Copyright 2013 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.
#ifndef IOS_CHROME_COMMON_STRING_UTIL_H_
#define IOS_CHROME_COMMON_STRING_UTIL_H_
#import <CoreGraphics/CoreGraphics.h>
#import <Foundation/Foundation.h>
#include <string>
#include <vector>
// Stores a string and a NSRange corresponding to the sub-string that was
// found between tag when looking for range with ParseStringWithTag.
struct StringWithTag {
NSString* string;
NSRange range;
};
// Stores a string and a list of NSRange corresponding to the sub-string
// that were found in tag when looking for range with ParseStringWithTags.
struct StringWithTags {
NSString* string;
std::vector<NSRange> ranges;
StringWithTags();
StringWithTags(NSString* string, std::vector<NSRange> ranges);
StringWithTags(const StringWithTags& other);
StringWithTags& operator=(const StringWithTags& other);
StringWithTags(StringWithTags&& other);
StringWithTags& operator=(StringWithTags&& other);
~StringWithTags();
};
// Parses a string with an embedded link inside, delineated by "BEGIN_LINK" and
// "END_LINK". Returns an attributed string with the text set as the parsed
// string with given |text_attributes| and the link range with
// |link_attributes|. The function asserts that there is one link.
NSAttributedString* AttributedStringFromStringWithLink(
NSString* text,
NSDictionary* text_attributes,
NSDictionary* link_attributes);
// Deprecated.
// Prefer |AttributedStringFromStringWithLink|. Do not use LabelLinkController.
// Parses a string with an embedded link inside, delineated by "BEGIN_LINK" and
// "END_LINK". Returns the string without the delimiters. The function
// asserts that there is at most one link.
StringWithTag ParseStringWithLink(NSString* text);
// Parses a string with embedded links inside, delineated by "BEGIN_LINK" and
// "END_LINK". Returns the string without the delimiters and a list of all
// ranges for text contained inside the tag delimiters.
StringWithTags ParseStringWithLinks(NSString* text);
// Parses a string with an embedded tag inside, delineated by |begin_tag| and
// |end_tag|. Returns the string without the delimiters. The function asserts
// that there is at most one tag.
StringWithTag ParseStringWithTag(NSString* text,
NSString* begin_tag,
NSString* end_tag);
// Parses a string with embedded tags inside, delineated by |begin_tag| and
// |end_tag|. Returns the string without the delimiters and a list of all ranges
// for text contained inside the tag delimiters.
StringWithTags ParseStringWithTags(NSString* text,
NSString* begin_tag,
NSString* end_tag);
// Utility method that returns an NSCharacterSet containing Unicode graphics
// and drawing characters (but not including the Braille Patterns characters).
NSCharacterSet* GraphicCharactersSet();
// Cleans an NSString by collapsing whitespace and removing leading and trailing
// spaces. If |removeGraphicChars| is true, unicode graphic characters will also
// be removed from the string.
NSString* CleanNSStringForDisplay(NSString* dirty, BOOL removeGraphicChars);
// Cleans a std::string identically to CleanNSStringForDisplay()
std::string CleanStringForDisplay(const std::string& dirty,
BOOL removeGraphicChars);
// Find the longest leading substring of |string| that, when rendered with
// |attributes|, will fit on a single line inside |targetWidth|. If |trailing|
// is YES, then find the trailing (instead of leading) substring.
NSString* SubstringOfWidth(NSString* string,
NSDictionary* attributes,
CGFloat targetWidth,
BOOL trailing);
#endif // IOS_CHROME_COMMON_STRING_UTIL_H_