⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usearch.h

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 H
📖 第 1 页 / 共 2 页
字号:
/************************************************************************   Copyright (C) 2001-2005 IBM and others. All rights reserved.***********************************************************************   Date        Name        Description*  06/28/2001   synwee      Creation.***********************************************************************/#ifndef USEARCH_H#define USEARCH_H#include "unicode/utypes.h"#if !UCONFIG_NO_COLLATION#include "unicode/ucol.h"#include "unicode/ucoleitr.h"#include "unicode/ubrk.h"/** * \file * \brief C API: StringSearch * * C Apis for an engine that provides language-sensitive text searching based  * on the comparison rules defined in a <tt>UCollator</tt> data struct, * see <tt>ucol.h</tt>. This ensures that language eccentricity can be  * handled, e.g. for the German collator, characters &szlig; and SS will be matched  * if case is chosen to be ignored.  * See the <a href="http://dev.icu-project.org/cgi-bin/viewcvs.cgi/~checkout~/icuhtml/design/collation/ICU_collation_design.htm"> * "ICU Collation Design Document"</a> for more information. * <p>  * The algorithm implemented is a modified form of the Boyer Moore's search. * For more information  see  * <a href="http://icu.sourceforge.net/docs/papers/efficient_text_searching_in_java.html"> * "Efficient Text Searching in Java"</a>, published in <i>Java Report</i>  * in February, 1999, for further information on the algorithm. * <p> * There are 2 match options for selection:<br> * Let S' be the sub-string of a text string S between the offsets start and  * end <start, end>. * <br> * A pattern string P matches a text string S at the offsets <start, end>  * if * <pre>  * option 1. Some canonical equivalent of P matches some canonical equivalent  *           of S' * option 2. P matches S' and if P starts or ends with a combining mark,  *           there exists no non-ignorable combining mark before or after S'  *           in S respectively.  * </pre> * Option 2. will be the default. * <p> * This search has APIs similar to that of other text iteration mechanisms  * such as the break iterators in <tt>ubrk.h</tt>. Using these  * APIs, it is easy to scan through text looking for all occurances of  * a given pattern. This search iterator allows changing of direction by  * calling a <tt>reset</tt> followed by a <tt>next</tt> or <tt>previous</tt>.  * Though a direction change can occur without calling <tt>reset</tt> first,   * this operation comes with some speed penalty. * Generally, match results in the forward direction will match the result  * matches in the backwards direction in the reverse order * <p> * <tt>usearch.h</tt> provides APIs to specify the starting position  * within the text string to be searched, e.g. <tt>usearch_setOffset</tt>, * <tt>usearch_preceding</tt> and <tt>usearch_following</tt>. Since the  * starting position will be set as it is specified, please take note that  * there are some dangerous positions which the search may render incorrect  * results: * <ul> * <li> The midst of a substring that requires normalization. * <li> If the following match is to be found, the position should not be the *      second character which requires to be swapped with the preceding  *      character. Vice versa, if the preceding match is to be found,  *      position to search from should not be the first character which  *      requires to be swapped with the next character. E.g certain Thai and *      Lao characters require swapping. * <li> If a following pattern match is to be found, any position within a  *      contracting sequence except the first will fail. Vice versa if a  *      preceding pattern match is to be found, a invalid starting point  *      would be any character within a contracting sequence except the last. * </ul> * <p> * A breakiterator can be used if only matches at logical breaks are desired. * Using a breakiterator will only give you results that exactly matches the * boundaries given by the breakiterator. For instance the pattern "e" will * not be found in the string "\u00e9" if a character break iterator is used. * <p> * Options are provided to handle overlapping matches.  * E.g. In English, overlapping matches produces the result 0 and 2  * for the pattern "abab" in the text "ababab", where else mutually  * exclusive matches only produce the result of 0. * <p> * Though collator attributes will be taken into consideration while  * performing matches, there are no APIs here for setting and getting the  * attributes. These attributes can be set by getting the collator * from <tt>usearch_getCollator</tt> and using the APIs in <tt>ucol.h</tt>. * Lastly to update String Search to the new collator attributes,  * usearch_reset() has to be called. * <p>  * Restriction: <br> * Currently there are no composite characters that consists of a * character with combining class > 0 before a character with combining  * class == 0. However, if such a character exists in the future, the  * search mechanism does not guarantee the results for option 1. *  * <p> * Example of use:<br> * <pre><code> * char *tgtstr = "The quick brown fox jumped over the lazy fox"; * char *patstr = "fox"; * UChar target[64]; * UChar pattern[16]; * UErrorCode status = U_ZERO_ERROR; * u_uastrcpy(target, tgtstr); * u_uastrcpy(pattern, patstr); * * UStringSearch *search = usearch_open(pattern, -1, target, -1, "en_US",  *                                  &status); * if (U_SUCCESS(status)) { *     for (int pos = usearch_first(search, &status);  *                                      pos != USEARCH_DONE;  *                                      pos = usearch_next(search, &status)) { *         printf("Found match at %d pos, length is %d\n", pos,  *                                        usearch_getMatchLength(search)); *     } * } * </code></pre> * @stable ICU 2.4 *//*** DONE is returned by previous() and next() after all valid matches have * been returned, and by first() and last() if there are no matches at all.* @stable ICU 2.4*/#define USEARCH_DONE -1/*** Data structure for searching* @stable ICU 2.4*/struct UStringSearch;/*** Data structure for searching* @stable ICU 2.4*/typedef struct UStringSearch UStringSearch;/*** @stable ICU 2.4*/typedef enum {    /** Option for overlapping matches */    USEARCH_OVERLAP,    /**     Option for canonical matches. option 1 in header documentation.    The default value will be USEARCH_OFF    */    USEARCH_CANONICAL_MATCH,    USEARCH_ATTRIBUTE_COUNT} USearchAttribute;/*** @stable ICU 2.4*/typedef enum {    /** default value for any USearchAttribute */    USEARCH_DEFAULT = -1,    /** value for USEARCH_OVERLAP and USEARCH_CANONICAL_MATCH */    USEARCH_OFF,     /** value for USEARCH_OVERLAP and USEARCH_CANONICAL_MATCH */    USEARCH_ON,    USEARCH_ATTRIBUTE_VALUE_COUNT} USearchAttributeValue;/* open and close ------------------------------------------------------ *//*** Creating a search iterator data struct using the argument locale language* rule set. A collator will be created in the process, which will be owned by* this search and will be deleted in <tt>usearch_close</tt>.* @param pattern for matching* @param patternlength length of the pattern, -1 for null-termination* @param text text string* @param textlength length of the text string, -1 for null-termination* @param locale name of locale for the rules to be used* @param breakiter A BreakIterator that will be used to restrict the points*                  at which matches are detected. If a match is found, but *                  the match's start or end index is not a boundary as *                  determined by the <tt>BreakIterator</tt>, the match will *                  be rejected and another will be searched for. *                  If this parameter is <tt>NULL</tt>, no break detection is *                  attempted.* @param status for errors if it occurs. If pattern or text is NULL, or if*               patternlength or textlength is 0 then an *               U_ILLEGAL_ARGUMENT_ERROR is returned.* @return search iterator data structure, or NULL if there is an error.* @stable ICU 2.4*/U_STABLE UStringSearch * U_EXPORT2 usearch_open(const UChar          *pattern,                                               int32_t         patternlength,                                         const UChar          *text,                                               int32_t         textlength,                                        const char           *locale,                                              UBreakIterator *breakiter,                                              UErrorCode     *status);/*** Creating a search iterator data struct using the argument collator language* rule set. Note, user retains the ownership of this collator, thus the * responsibility of deletion lies with the user.* NOTE: string search cannot be instantiated from a collator that has * collate digits as numbers (CODAN) turned on.* @param pattern for matching* @param patternlength length of the pattern, -1 for null-termination* @param text text string* @param textlength length of the text string, -1 for null-termination* @param collator used for the language rules* @param breakiter A BreakIterator that will be used to restrict the points*                  at which matches are detected. If a match is found, but *                  the match's start or end index is not a boundary as *                  determined by the <tt>BreakIterator</tt>, the match will *                  be rejected and another will be searched for. *                  If this parameter is <tt>NULL</tt>, no break detection is *                  attempted.* @param status for errors if it occurs. If collator, pattern or text is NULL, *               or if patternlength or textlength is 0 then an *               U_ILLEGAL_ARGUMENT_ERROR is returned.* @return search iterator data structure, or NULL if there is an error.* @stable ICU 2.4*/U_STABLE UStringSearch * U_EXPORT2 usearch_openFromCollator(                                         const UChar *pattern,                                                int32_t         patternlength,                                         const UChar          *text,                                                int32_t         textlength,                                         const UCollator      *collator,                                               UBreakIterator *breakiter,                                               UErrorCode     *status);/*** Destroying and cleaning up the search iterator data struct.* If a collator is created in <tt>usearch_open</tt>, it will be destroyed here.* @param searchiter data struct to clean up* @stable ICU 2.4*/U_STABLE void U_EXPORT2 usearch_close(UStringSearch *searchiter);/* get and set methods -------------------------------------------------- *//*** Sets the current position in the text string which the next search will * start from. Clears previous states. * This method takes the argument index and sets the position in the text * string accordingly without checking if the index is pointing to a * valid starting point to begin searching. * Search positions that may render incorrect results are highlighted in the* header comments* @param strsrch search iterator data struct* @param position position to start next search from. If position is less*          than or greater than the text range for searching, *          an U_INDEX_OUTOFBOUNDS_ERROR will be returned* @param status error status if any.* @stable ICU 2.4*/U_STABLE void U_EXPORT2 usearch_setOffset(UStringSearch *strsrch,                                         int32_t    position,                                        UErrorCode    *status);/*** Return the current index in the string text being searched.* If the iteration has gone past the end of the text (or past the beginning * for a backwards search), <tt>USEARCH_DONE</tt> is returned.* @param strsrch search iterator data struct* @see #USEARCH_DONE* @stable ICU 2.4*/U_STABLE int32_t U_EXPORT2 usearch_getOffset(const UStringSearch *strsrch);    /*** Sets the text searching attributes located in the enum USearchAttribute* with values from the enum USearchAttributeValue.* <tt>USEARCH_DEFAULT</tt> can be used for all attributes for resetting.* @param strsrch search iterator data struct* @param attribute text attribute to be set* @param value text attribute value* @param status for errors if it occurs* @see #usearch_getAttribute* @stable ICU 2.4*/U_STABLE void U_EXPORT2 usearch_setAttribute(UStringSearch         *strsrch,                                            USearchAttribute       attribute,                                           USearchAttributeValue  value,                                           UErrorCode            *status);/**    * Gets the text searching attributes.* @param strsrch search iterator data struct* @param attribute text attribute to be retrieve* @return text attribute value* @see #usearch_setAttribute* @stable ICU 2.4*/U_STABLE USearchAttributeValue U_EXPORT2 usearch_getAttribute(                                         const UStringSearch    *strsrch,                                               USearchAttribute  attribute);/*** Returns the index to the match in the text string that was searched.* This call returns a valid result only after a successful call to * <tt>usearch_first</tt>, <tt>usearch_next</tt>, <tt>usearch_previous</tt>, * or <tt>usearch_last</tt>.* Just after construction, or after a searching method returns * <tt>USEARCH_DONE</tt>, this method will return <tt>USEARCH_DONE</tt>.* <p>* Use <tt>usearch_getMatchedLength</tt> to get the matched string length.* @param strsrch search iterator data struct* @return index to a substring within the text string that is being *         searched.* @see #usearch_first* @see #usearch_next* @see #usearch_previous

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -