Index: src/core/SkPaintOptionsAndroid.cpp |
diff --git a/src/core/SkPaintOptionsAndroid.cpp b/src/core/SkPaintOptionsAndroid.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..606a5d6b8b7cedf5d4a39f1300ee3b7254308409 |
--- /dev/null |
+++ b/src/core/SkPaintOptionsAndroid.cpp |
@@ -0,0 +1,53 @@ |
+ |
+/* |
+ * Copyright 2012 The Android Open Source Project |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "SkPaintOptionsAndroid.h" |
+ |
+#ifdef SK_BUILD_FOR_ANDROID // currently only for Android |
+ |
+#include "SkTDict.h" |
+#include "SkThread.h" |
+#include <cstring> |
+ |
+SkLanguage SkLanguage::getParent() const { |
+ SkASSERT(fInfo != NULL); |
+ const char* tag = fInfo->fTag.c_str(); |
+ SkASSERT(tag != NULL); |
+ |
+ // strip off the rightmost "-.*" |
+ char* parentTagEnd = strrchr(tag, '-'); |
+ if (parentTagEnd == NULL) { |
+ return SkLanguage(""); |
+ } |
+ size_t parentTagLen = parentTagEnd - tag; |
+ char parentTag[parentTagLen + 1]; |
+ strncpy(parentTag, tag, parentTagLen); |
+ parentTag[parentTagLen] = '\0'; |
+ return SkLanguage(parentTag); |
+} |
+ |
+SK_DECLARE_STATIC_MUTEX(gGetInfoMutex); |
+const SkLanguageInfo* SkLanguage::getInfo(const char* tag) { |
+ SkAutoMutexAcquire lock(gGetInfoMutex); |
+ |
+ static const size_t kDictSize = 128; |
+ static SkTDict<SkLanguageInfo*> tagToInfo(kDictSize); |
+ |
+ // try a lookup |
+ SkLanguageInfo* info; |
+ if (tagToInfo.find(tag, &info)) { |
+ return info; |
+ } |
+ |
+ // no match - add this language |
+ info = new SkLanguageInfo(tag); |
+ tagToInfo.set(tag, info); |
+ return info; |
+} |
+ |
+#endif |