tor-browser

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

anytrans.h (3894B)


      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-2007, International Business Machines Corporation
      6 * and others.  All Rights Reserved.
      7 ***********************************************************************
      8 * Date        Name        Description
      9 * 06/06/2002  aliu        Creation.
     10 ***********************************************************************
     11 */
     12 #ifndef _ANYTRANS_H_
     13 #define _ANYTRANS_H_
     14 
     15 #include "unicode/utypes.h"
     16 
     17 #if !UCONFIG_NO_TRANSLITERATION
     18 
     19 #include "unicode/translit.h"
     20 #include "unicode/uscript.h"
     21 #include "uhash.h"
     22 
     23 U_NAMESPACE_BEGIN
     24 
     25 /**
     26 * A transliterator named Any-T or Any-T/V, where T is the target
     27 * script and V is the optional variant, that uses multiple
     28 * transliterators, all going to T or T/V, all with script sources.
     29 * The target must be a script.  It partitions text into runs of the
     30 * same script, and then based on the script of each run,
     31 * transliterates from that script to the given target or
     32 * target/variant.  Adjacent COMMON or INHERITED script characters are
     33 * included in each run.
     34 *
     35 * @author Alan Liu
     36 */
     37 class AnyTransliterator : public Transliterator {
     38 
     39    /**
     40     * Cache mapping UScriptCode values to Transliterator*.
     41     */
     42    UHashtable* cache;
     43 
     44    /**
     45     * The target or target/variant string.
     46     */
     47    UnicodeString target;
     48 
     49    /**
     50     * The target script code.  Never USCRIPT_INVALID_CODE.
     51     */
     52    UScriptCode targetScript;
     53 
     54 public:
     55 
     56    /**
     57     * Destructor.
     58     */
     59    virtual ~AnyTransliterator();
     60 
     61    /**
     62     * Copy constructor.
     63     */
     64    AnyTransliterator(const AnyTransliterator&);
     65 
     66    /**
     67     * Transliterator API.
     68     */
     69    virtual AnyTransliterator* clone() const override;
     70 
     71    /**
     72     * Implements {@link Transliterator#handleTransliterate}.
     73     */
     74    virtual void handleTransliterate(Replaceable& text, UTransPosition& index,
     75                                     UBool incremental) const override;
     76 
     77    /**
     78     * ICU "poor man's RTTI", returns a UClassID for the actual class.
     79     */
     80    virtual UClassID getDynamicClassID() const override;
     81 
     82    /**
     83     * ICU "poor man's RTTI", returns a UClassID for this class.
     84     */
     85    U_I18N_API static UClassID U_EXPORT2 getStaticClassID();
     86 
     87 private:
     88 
     89    /**
     90     * Private constructor
     91     * @param id the ID of the form S-T or S-T/V, where T is theTarget
     92     * and V is theVariant.  Must not be empty.
     93     * @param theTarget the target name.  Must not be empty, and must
     94     * name a script corresponding to theTargetScript.
     95     * @param theVariant the variant name, or the empty string if
     96     * there is no variant
     97     * @param theTargetScript the script code corresponding to
     98     * theTarget.
     99     * @param ec error code, fails if the internal hashtable cannot be
    100     * allocated
    101     */
    102    AnyTransliterator(const UnicodeString& id,
    103                      const UnicodeString& theTarget,
    104                      const UnicodeString& theVariant,
    105                      UScriptCode theTargetScript,
    106                      UErrorCode& ec);
    107 
    108    /**
    109     * Returns a transliterator from the given source to our target or
    110     * target/variant.  Returns nullptr if the source is the same as our
    111     * target script, or if the source is USCRIPT_INVALID_CODE.
    112     * Caches the result and returns the same transliterator the next
    113     * time.  The caller does NOT own the result and must not delete
    114     * it.
    115     */
    116    Transliterator* getTransliterator(UScriptCode source) const;
    117 
    118    /**
    119     * Registers standard transliterators with the system.  Called by
    120     * Transliterator during initialization.
    121     */
    122    static void registerIDs();
    123 
    124    friend class Transliterator; // for registerIDs()
    125 };
    126 
    127 U_NAMESPACE_END
    128 
    129 #endif /* #if !UCONFIG_NO_TRANSLITERATION */
    130 
    131 #endif