51d908e43659de80132e2097058bf157fc7b3cbe
[WebKit-https.git] / Source / WebCore / PAL / pal / spi / cocoa / DataDetectorsCoreSPI.h
1 /*
2  * Copyright (C) 2014-2016 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #pragma once
27
28 #if ENABLE(DATA_DETECTION)
29
30 typedef struct __DDResult *DDResultRef;
31
32 #if USE(APPLE_INTERNAL_SDK)
33
34 #import <DataDetectorsCore/DDBinderKeys_Private.h>
35 #import <DataDetectorsCore/DDScannerResult.h>
36 #import <DataDetectorsCore/DataDetectorsCore.h>
37
38 #if PLATFORM(IOS)
39 #import <DataDetectorsCore/DDOptionalSource.h>
40 #import <DataDetectorsCore/DDURLifier.h>
41 #endif // PLATFORM(IOS)
42
43 #else // !USE(APPLE_INTERNAL_SDK)
44
45 typedef enum {
46     DDScannerTypeStandard = 0,
47     DDScannerType1 = 1,
48     DDScannerType2 = 2,
49 } DDScannerType;
50
51 enum {
52     DDScannerCopyResultsOptionsNone = 0,
53     DDScannerCopyResultsOptionsNoOverlap = 1 << 0,
54     DDScannerCopyResultsOptionsCoalesceSignatures = 1 << 1,
55 };
56
57 typedef CFIndex DDScannerSource;
58
59 enum {
60     DDURLifierPhoneNumberDetectionNone = 0,
61     DDURLifierPhoneNumberDetectionRegular = 1 << 1,
62     DDURLifierPhoneNumberDetectionQuotedShorts = 1 << 2,
63     DDURLifierPhoneNumberDetectionUnquotedShorts = 1 << 3
64 };
65 typedef NSUInteger DDURLifierPhoneNumberDetectionTypes;
66
67 typedef enum __DDTextCoalescingType {
68     DDTextCoalescingTypeNone = 0,
69     DDTextCoalescingTypeSpace = 1,
70     DDTextCoalescingTypeTab = 2,
71     DDTextCoalescingTypeLineBreak = 3,
72     DDTextCoalescingTypeHardBreak = 4,
73 } DDTextCoalescingType;
74
75 typedef enum {
76     DDResultCategoryUnknown = 0,
77     DDResultCategoryLink = 1,
78     DDResultCategoryPhoneNumber = 2,
79     DDResultCategoryAddress = 3,
80     DDResultCategoryCalendarEvent = 4,
81     DDResultCategoryMisc = 5,
82 } DDResultCategory;
83
84 typedef enum __DDTextFragmentType {
85     DDTextFragmentTypeTrimWhiteSpace =  0x1,
86     DDTextFragmentTypeIgnoreCRLF =  0x2,
87 } DDTextFragmentMode;
88
89 extern CFStringRef const DDBinderHttpURLKey;
90 extern CFStringRef const DDBinderWebURLKey;
91 extern CFStringRef const DDBinderMailURLKey;
92 extern CFStringRef const DDBinderGenericURLKey;
93 extern CFStringRef const DDBinderEmailKey;
94 extern CFStringRef const DDBinderTrackingNumberKey;
95 extern CFStringRef const DDBinderFlightInformationKey;
96 extern CFStringRef const DDBinderParsecSourceKey;
97 extern CFStringRef const DDBinderSignatureBlockKey;
98 extern NSString * const DDURLScheme;
99
100 @interface DDScannerResult : NSObject <NSCoding, NSSecureCoding>
101 + (NSArray *)resultsFromCoreResults:(CFArrayRef)coreResults;
102 - (DDResultRef)coreResult;
103 @end
104
105 #define DDResultPropertyPassiveDisplay   (1 << 0)
106
107 #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101200
108 typedef struct __DDQueryOffset {
109     CFIndex queryIndex;
110     CFIndex offset;
111 } DDQueryOffset;
112 #else
113 typedef struct __DDQueryOffset {
114     CFIndex queryIndex:32;
115     CFIndex offset:32;
116 } DDQueryOffset;
117 #endif
118
119 typedef struct __DDQueryRange {
120     DDQueryOffset start;
121     DDQueryOffset end;
122 } DDQueryRange;
123
124 #endif // !USE(APPLE_INTERNAL_SDK)
125
126 #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101200
127 static_assert(sizeof(DDQueryOffset) == sizeof(CFIndex) * 2, "DDQueryOffset is no longer the size of two CFIndexes. Update the definition of DDQueryOffset in this file to match the new size.");
128 #else
129 static_assert(sizeof(DDQueryOffset) == 8, "DDQueryOffset is no longer 8 bytes. Update the definition of DDQueryOffset in this file to match the new size.");
130 #endif
131
132 typedef struct __DDScanQuery *DDScanQueryRef;
133 typedef struct __DDScanner *DDScannerRef;
134
135 typedef CFIndex DDScannerCopyResultsOptions;
136 typedef CFIndex DDScannerOptions;
137
138 enum {
139     DDScannerSourceSpotlight = 1<<1,
140 };
141
142 WTF_EXTERN_C_BEGIN
143
144 extern const DDScannerCopyResultsOptions DDScannerCopyResultsOptionsForPassiveUse;
145
146 DDScannerRef DDScannerCreate(DDScannerType, DDScannerOptions, CFErrorRef*);
147 DDScanQueryRef DDScanQueryCreate(CFAllocatorRef);
148 DDScanQueryRef DDScanQueryCreateFromString(CFAllocatorRef, CFStringRef, CFRange);
149 Boolean DDScannerScanQuery(DDScannerRef, DDScanQueryRef);
150 CFArrayRef DDScannerCopyResultsWithOptions(DDScannerRef, DDScannerCopyResultsOptions);
151 CFRange DDResultGetRange(DDResultRef);
152 CFStringRef DDResultGetType(DDResultRef);
153 DDResultCategory DDResultGetCategory(DDResultRef);
154 Boolean DDResultIsPastDate(DDResultRef, CFDateRef referenceDate, CFTimeZoneRef referenceTimeZone);
155 void DDScanQueryAddTextFragment(DDScanQueryRef, CFStringRef, CFRange, void *identifier, DDTextFragmentMode, DDTextCoalescingType);
156 void DDScanQueryAddSeparator(DDScanQueryRef, DDTextCoalescingType);
157 void DDScanQueryAddLineBreak(DDScanQueryRef);
158 void *DDScanQueryGetFragmentMetaData(DDScanQueryRef, CFIndex queryIndex);
159 bool DDResultHasProperties(DDResultRef, CFIndex propertySet);
160 CFArrayRef DDResultGetSubResults(DDResultRef);
161 DDQueryRange DDResultGetQueryRangeForURLification(DDResultRef);
162
163 WTF_EXTERN_C_END
164
165 #endif
166