tor-browser

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

funcrepl.h (3107B)


      1 // © 2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 /*
      4 **********************************************************************
      5 *   Copyright (c) 2002-2011, International Business Machines Corporation
      6 *   and others.  All Rights Reserved.
      7 **********************************************************************
      8 *   Date        Name        Description
      9 *   02/04/2002  aliu        Creation.
     10 **********************************************************************
     11 */
     12 
     13 #ifndef FUNCREPL_H
     14 #define FUNCREPL_H
     15 
     16 #include "unicode/utypes.h"
     17 
     18 #if !UCONFIG_NO_TRANSLITERATION
     19 
     20 #include "unicode/unifunct.h"
     21 #include "unicode/unirepl.h"
     22 
     23 U_NAMESPACE_BEGIN
     24 
     25 class Transliterator;
     26 
     27 /**
     28 * A replacer that calls a transliterator to generate its output text.
     29 * The input text to the transliterator is the output of another
     30 * UnicodeReplacer object.  That is, this replacer wraps another
     31 * replacer with a transliterator.
     32 *
     33 * @author Alan Liu
     34 */
     35 class FunctionReplacer : public UnicodeFunctor, public UnicodeReplacer {
     36 
     37 private:
     38 
     39    /**
     40     * The transliterator.  Must not be null.  OWNED.
     41     */
     42    Transliterator* translit;
     43 
     44    /**
     45     * The replacer object.  This generates text that is then
     46     * processed by 'translit'.  Must not be null.  OWNED.
     47     */
     48    UnicodeFunctor* replacer;
     49 
     50 public:
     51 
     52    /**
     53     * Construct a replacer that takes the output of the given
     54     * replacer, passes it through the given transliterator, and emits
     55     * the result as output.
     56     */
     57    FunctionReplacer(Transliterator* adoptedTranslit,
     58                     UnicodeFunctor* adoptedReplacer);
     59 
     60    /**
     61     * Copy constructor.
     62     */
     63    FunctionReplacer(const FunctionReplacer& other);
     64 
     65    /**
     66     * Destructor
     67     */
     68    virtual ~FunctionReplacer();
     69 
     70    /**
     71     * Implement UnicodeFunctor
     72     */
     73    virtual FunctionReplacer* clone() const override;
     74 
     75    /**
     76     * UnicodeFunctor API.  Cast 'this' to a UnicodeReplacer* pointer
     77     * and return the pointer.
     78     */
     79    virtual UnicodeReplacer* toReplacer() const override;
     80 
     81    /**
     82     * UnicodeReplacer API
     83     */
     84    virtual int32_t replace(Replaceable& text,
     85                            int32_t start,
     86                            int32_t limit,
     87                            int32_t& cursor) override;
     88 
     89    /**
     90     * UnicodeReplacer API
     91     */
     92    virtual UnicodeString& toReplacerPattern(UnicodeString& rule,
     93                                             UBool escapeUnprintable) const override;
     94 
     95    /**
     96     * Implement UnicodeReplacer
     97     */
     98    virtual void addReplacementSetTo(UnicodeSet& toUnionTo) const override;
     99 
    100    /**
    101     * UnicodeFunctor API
    102     */
    103    virtual void setData(const TransliterationRuleData*) override;
    104 
    105    /**
    106     * ICU "poor man's RTTI", returns a UClassID for the actual class.
    107     */
    108    virtual UClassID getDynamicClassID() const override;
    109 
    110    /**
    111     * ICU "poor man's RTTI", returns a UClassID for this class.
    112     */
    113    static UClassID U_EXPORT2 getStaticClassID();
    114 };
    115 
    116 U_NAMESPACE_END
    117 
    118 #endif /* #if !UCONFIG_NO_TRANSLITERATION */
    119 #endif
    120 
    121 //eof