// 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/web/common/annotations_utils.h"
#import "base/apple/foundation_util.h"
#import "base/strings/sys_string_conversions.h"
namespace web {
// Annotation keys for annotation.
static const char kAnnotationsTextKey[] = "text";
static const char kAnnotationsStartKey[] = "start";
static const char kAnnotationsEndKey[] = "end";
static const char kAnnotationsTypeKey[] = "type";
NSString* const kMailtoPrefixUrl = @"mailto:";
web::TextAnnotation ConvertMatchToAnnotation(NSString* source,
NSRange range,
NSTextCheckingResult* data,
NSString* type) {
base::Value::Dict dict;
NSString* start = [source substringWithRange:range];
dict.Set(kAnnotationsStartKey, base::Value(static_cast<int>(range.location)));
dict.Set(kAnnotationsEndKey,
base::Value(static_cast<int>(range.location + range.length)));
dict.Set(kAnnotationsTextKey, base::Value(base::SysNSStringToUTF8(start)));
dict.Set(kAnnotationsTypeKey, base::Value(base::SysNSStringToUTF8(type)));
return std::make_pair(std::move(dict), data);
}
bool IsNSTextCheckingResultEmail(NSTextCheckingResult* result) {
return result.resultType == NSTextCheckingTypeLink &&
[result.URL.scheme isEqualToString:@"mailto"];
}
NSTextCheckingResult* MakeNSTextCheckingResultEmail(NSString* email,
NSRange range) {
NSString* mailto_email = [kMailtoPrefixUrl stringByAppendingString:email];
NSURL* email_url = [[NSURL alloc] initWithString:mailto_email];
return [NSTextCheckingResult linkCheckingResultWithRange:range URL:email_url];
}
} // namespace web