Home | History | Annotate | Download | only in core
      1 
      2 /*
      3  * Copyright 2012 The Android Open Source Project
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 
     10 #ifndef SkLanguage_DEFINED
     11 #define SkLanguage_DEFINED
     12 
     13 #include "SkTypes.h"
     14 
     15 #ifdef SK_BUILD_FOR_ANDROID
     16 
     17 #include "SkString.h"
     18 
     19 struct SkLanguageInfo {
     20     SkLanguageInfo(const char* tag) : fTag(tag) { }
     21     SkString fTag; //! BCP 47 language identifier
     22 };
     23 
     24 /** \class SkLanguage
     25 
     26     The SkLanguage class represents a human written language, and is used by
     27     text draw operations to determine which glyph to draw when drawing
     28     characters with variants (ie Han-derived characters).
     29 */
     30 class SkLanguage {
     31 public:
     32     SkLanguage() : fInfo(getInfo("")) { }
     33     SkLanguage(const char* tag) : fInfo(getInfo(tag)) { }
     34     SkLanguage(const SkLanguage& b) : fInfo(b.fInfo) { }
     35 
     36     /** Gets a BCP 47 language identifier for this SkLanguage.
     37         @return a BCP 47 language identifier representing this language
     38     */
     39     const SkString& getTag() const { return fInfo->fTag; }
     40 
     41     /** Performs BCP 47 fallback to return an SkLanguage one step more general.
     42         @return an SkLanguage one step more general
     43     */
     44     SkLanguage getParent() const;
     45 
     46     bool operator==(const SkLanguage& b) const {
     47         return fInfo == b.fInfo;
     48     }
     49     bool operator!=(const SkLanguage& b) const {
     50         return fInfo != b.fInfo;
     51     }
     52     bool operator<(const SkLanguage& b) const {
     53         return fInfo < b.fInfo;
     54     }
     55     bool operator>(const SkLanguage& b) const {
     56         return fInfo > b.fInfo;
     57     }
     58     SkLanguage& operator=(const SkLanguage& b) {
     59         fInfo = b.fInfo;
     60         return *this;
     61     }
     62 
     63 private:
     64     const SkLanguageInfo* fInfo;
     65 
     66     static const SkLanguageInfo* getInfo(const char* tag);
     67 };
     68 
     69 #endif // #ifdef SK_BUILD_FOR_ANDROID
     70 #endif // #ifndef SkLanguage_DEFINED
     71