• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 {
SkLanguageInfoSkLanguageInfo20     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:
SkLanguage()32     SkLanguage() : fInfo(getInfo("")) { }
SkLanguage(const char * tag)33     SkLanguage(const char* tag) : fInfo(getInfo(tag)) { }
SkLanguage(const SkLanguage & b)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     */
getTag()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