tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

unifilt.h (4091B)


      1 // © 2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 /*
      4 **********************************************************************
      5 * Copyright (C) 1999-2010, International Business Machines Corporation and others.
      6 * All Rights Reserved.
      7 **********************************************************************
      8 *   Date        Name        Description
      9 *   11/17/99    aliu        Creation.
     10 **********************************************************************
     11 */
     12 #ifndef UNIFILT_H
     13 #define UNIFILT_H
     14 
     15 #include "unicode/utypes.h"
     16 
     17 #if U_SHOW_CPLUSPLUS_API
     18 
     19 #include "unicode/unifunct.h"
     20 #include "unicode/unimatch.h"
     21 
     22 /**
     23 * \file 
     24 * \brief C++ API: Unicode Filter
     25 */
     26 
     27 U_NAMESPACE_BEGIN
     28 
     29 /**
     30 * U_ETHER is used to represent character values for positions outside
     31 * a range.  For example, transliterator uses this to represent
     32 * characters outside the range contextStart..contextLimit-1.  This
     33 * allows explicit matching by rules and UnicodeSets of text outside a
     34 * defined range.
     35 * @stable ICU 3.0
     36 */
     37 #define U_ETHER ((char16_t)0xFFFF)
     38 
     39 /**
     40 *
     41 * <code>UnicodeFilter</code> defines a protocol for selecting a
     42 * subset of the full range (U+0000 to U+10FFFF) of Unicode characters.
     43 * Currently, filters are used in conjunction with classes like
     44 * {@link Transliterator} to only process selected characters through a
     45 * transformation.
     46 *
     47 * <p>Note: UnicodeFilter currently stubs out two pure virtual methods
     48 * of its base class, UnicodeMatcher.  These methods are toPattern()
     49 * and matchesIndexValue().  This is done so that filter classes that
     50 * are not actually used as matchers -- specifically, those in the
     51 * UnicodeFilterLogic component, and those in tests -- can continue to
     52 * work without defining these methods.  As long as a filter is not
     53 * used in an RBT during real transliteration, these methods will not
     54 * be called.  However, this breaks the UnicodeMatcher base class
     55 * protocol, and it is not a correct solution.
     56 *
     57 * <p>In the future we may revisit the UnicodeMatcher / UnicodeFilter
     58 * hierarchy and either redesign it, or simply remove the stubs in
     59 * UnicodeFilter and force subclasses to implement the full
     60 * UnicodeMatcher protocol.
     61 *
     62 * @see UnicodeFilterLogic
     63 * @stable ICU 2.0
     64 */
     65 class U_COMMON_API UnicodeFilter : public UnicodeFunctor, public UnicodeMatcher {
     66 
     67 public:
     68    /**
     69     * Destructor
     70     * @stable ICU 2.0
     71     */
     72    virtual ~UnicodeFilter();
     73 
     74    /**
     75     * Clones this object polymorphically.
     76     * The caller owns the result and should delete it when done.
     77     * @return clone, or nullptr if an error occurred
     78     * @stable ICU 2.4
     79     */
     80    virtual UnicodeFilter* clone() const override = 0;
     81 
     82    /**
     83     * Returns <tt>true</tt> for characters that are in the selected
     84     * subset.  In other words, if a character is <b>to be
     85     * filtered</b>, then <tt>contains()</tt> returns
     86     * <b><tt>false</tt></b>.
     87     * @stable ICU 2.0
     88     */
     89    virtual UBool contains(UChar32 c) const = 0;
     90 
     91    /**
     92     * UnicodeFunctor API.  Cast 'this' to a UnicodeMatcher* pointer
     93     * and return the pointer.
     94     * @stable ICU 2.4
     95     */
     96    virtual UnicodeMatcher* toMatcher() const override;
     97 
     98    /**
     99     * Implement UnicodeMatcher API.
    100     * @stable ICU 2.4
    101     */
    102    virtual UMatchDegree matches(const Replaceable& text,
    103                                 int32_t& offset,
    104                                 int32_t limit,
    105                                 UBool incremental) override;
    106 
    107    /**
    108     * UnicodeFunctor API.  Nothing to do.
    109     * @stable ICU 2.4
    110     */
    111    virtual void setData(const TransliterationRuleData*) override;
    112 
    113    /**
    114     * ICU "poor man's RTTI", returns a UClassID for this class.
    115     *
    116     * @stable ICU 2.2
    117     */
    118    static UClassID U_EXPORT2 getStaticClassID();
    119 
    120 protected:
    121 
    122    /*
    123     * Since this class has pure virtual functions,
    124     * a constructor can't be used.
    125     * @stable ICU 2.0
    126     */
    127 /*    UnicodeFilter();*/
    128 };
    129 
    130 /*inline UnicodeFilter::UnicodeFilter() {}*/
    131 
    132 U_NAMESPACE_END
    133 
    134 #endif /* U_SHOW_CPLUSPLUS_API */
    135 
    136 #endif