2 * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #ifndef __UTILS_I18N_USEARCH_H__
18 #define __UTILS_I18N_USEARCH_H__
20 #include <utils_i18n_types.h>
23 * @file utils_i18n_usearch.h
25 * @brief utils_i18n_usearch
33 * @ingroup CAPI_BASE_UTILS_I18N_MODULE
34 * @defgroup CAPI_BASE_UTILS_I18N_USEARCH_MODULE Usearch
35 * @brief The Usearch module provides language-sensitive text searching based on the comparison rules defined in a ucollator data struct.
37 * @section CAPI_BASE_UTILS_I18N_USEARCH_MODULE_HEADER Required Header
38 * \#include <utils_i18n.h>
40 * @section CAPI_BASE_UTILS_I18N_USEARCH_MODULE_OVERVIEW Overview
41 * @details The Usearch module provides language-sensitive text searching based on the comparison rules defined in a ucollator data struct.
43 * @section CAPI_BASE_UTILS_I18N_USEARCH_MODULE_SAMPLE_CODE_1 Sample Code 1
44 * @brief Searches the pattern and gets the matched text.
46 char *string = "TIZEN";
48 i18n_uchar target[16] = {0,};
49 i18n_uchar pattern[16] = {0,};
50 i18n_uchar u_matched[16] = {0,};
52 i18n_usearch_h search = NULL;
54 int matched_text_len = 0;
56 i18n_error_code_e error_code;
58 i18n_ustring_from_UTF8( target, 16, NULL, string, -1, &error_code );
59 i18n_ustring_from_UTF8( pattern, 16, NULL, keyword, -1, &error_code );
62 i18n_usearch_create_new( pattern, -1, target, -1, "en_US", NULL, &search );
64 // gets the first index of the target that matches with the pattern
65 i18n_usearch_first( search, &pos );
66 dlog_print(DLOG_INFO, LOG_TAG, "the first index = %d", pos ); // The first index = 2
68 // gets the matched text
69 i18n_usearch_get_matched_text( search, u_matched, 16, &matched_text_len );
70 for ( i = 0; i < matched_text_len; i++) {
71 i18n_ustring_copy_au_n( tmp, &u_matched[i], 1 );
72 dlog_print(DLOG_INFO, LOG_TAG, "u_matched[%d] = %c", i, tmp[0] ); // u_matched[0] = Z, u_matched[1] = E
74 i18n_usearch_destroy( search );
79 * @addtogroup CAPI_BASE_UTILS_I18N_USEARCH_MODULE
84 * @brief Creates an #i18n_usearch_h using the argument locale language rule set.
85 * @details A collator will be created in the process, which will be owned by
86 * this search and will be deleted in i18n_usearch_destroy().
87 * @remarks Must release @a search_iter using i18n_usearch_destroy().
90 * @param[in] pattern The pattern for matching
91 * @param[in] pattern_len The length of the pattern, otherwise @c -1 for NULL-termination
92 * @param[in] text The text string
93 * @param[in] text_len The length of the text string, otherwise @c -1 for NULL-termination
94 * @param[in] locale The name of the locale for the rules to be used
95 * @param[in] break_iter An #i18n_ubreak_iterator_h that will be used to restrict the points at which matches are detected. If a match is found,\n
96 * but the match's start or end index is not a boundary as determined by the #i18n_ubreak_iterator_h,
97 * the match will be rejected and another will be searched for. If this parameter is @c NULL,\n
98 * no break detection is attempted.
99 * @param[out] search_iter The #i18n_usearch_h, otherwise @c NULL if there is an error
101 * @retval #I18N_ERROR_NONE Successful
102 * @retval #I18N_ERROR_INVALID_PARAMETER Invalid function parameter
104 int i18n_usearch_create_new ( const i18n_uchar *pattern, int32_t pattern_len, const i18n_uchar *text,
105 int32_t text_len, const char *locale, i18n_ubreak_iterator_h break_iter, i18n_usearch_h *search_iter);
108 * @brief Destroys and cleans up the i18n_usearch_h.
109 * @details If a collator is created in i18n_usearch_create_new(), it will be destroyed here.
110 * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
112 * @param[in] search_iter The i18n_usearch_h to clean up
114 * @retval #I18N_ERROR_NONE Successful
115 * @retval #I18N_ERROR_INVALID_PARAMETER Invalid function parameter
117 int i18n_usearch_destroy ( i18n_usearch_h search_iter );
120 * @brief Returns the text that matches by the most recent call to i18n_usearch_first(), or so on.
121 * @details If the iterator is not pointing at a valid match (e.g. just after
122 * construction or after #I18N_USEARCH_DONE has been returned, it returns
123 * an empty string. If the result is not large enough to store the matched text,
124 * the result will be filled with the partial text and an #I18N_ERROR_BUFFER_OVERFLOW
125 * will be returned in status. The result will be NULL-terminated whenever
126 * possible. If the buffer fits the matched text exactly, a NULL-termination
128 * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
130 * @param[in] search_iter The search iterator handle
131 * @param[out] result i18n_uchar The buffer to store the matched string
132 * @param[in] result_capacity The length of the result buffer
133 * @param[out] len_matched_text The exact length of the matched text, not counting the NULL-termination
135 * @retval #I18N_ERROR_NONE Successful
136 * @retval #I18N_ERROR_INVALID_PARAMETER Invalid function parameter
137 * @retval #I18N_ERROR_BUFFER_OVERFLOW A result would not fit in the supplied buffer
139 int i18n_usearch_get_matched_text ( const i18n_usearch_h search_iter, i18n_uchar *result, int32_t result_capacity, int32_t *len_matched_text );
142 * @brief Gets the collator used for the language rules.
143 * @details Deleting the returned i18n_ucollator_h before calling
144 * i18n_usearch_destroy() would cause the string search to fail.
145 * i18n_usearch_destroy() will delete the collator if this search owns it.
146 * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
148 * @param[in] search_iter The search iterator handle
149 * @param[out] collator The collator
151 * @retval #I18N_ERROR_NONE Successful
152 * @retval #I18N_ERROR_INVALID_PARAMETER Invalid function parameter
154 int i18n_usearch_get_collator ( const i18n_usearch_h search_iter, i18n_ucollator_h *collator );
157 * @brief Returns the first index at which the string text matches the search pattern.
158 * @details The iterator is adjusted so that its current index
159 * is the match position if one is found.
160 * If a match is not found, #I18N_USEARCH_DONE will be returned and
161 * the iterator will be adjusted to the index #I18N_USEARCH_DONE.
162 * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
164 * @param[in] search_iter The search iterator handle
165 * @param[out] index_first The character index of the first match,
166 * otherwise #I18N_USEARCH_DONE if there are no matches.
168 * @retval #I18N_ERROR_NONE Successful
169 * @retval #I18N_ERROR_INVALID_PARAMETER Invalid function parameter
171 int i18n_usearch_first ( i18n_usearch_h search_iter, int32_t *index_first );
182 #endif /* __UTILS_I18N_USEARCH_H__*/