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 #include "SkLanguage.h"
     10 
     11 #ifdef SK_BUILD_FOR_ANDROID // currently only for Android
     12 
     13 #include "SkTDict.h"
     14 #include "SkThread.h"
     15 #include <cstring>
     16 
     17 SkLanguage SkLanguage::getParent() const {
     18     SkASSERT(fInfo != NULL);
     19     const char* tag = fInfo->fTag.c_str();
     20     SkASSERT(tag != NULL);
     21 
     22     // strip off the rightmost "-.*"
     23     char* parentTagEnd = strrchr(tag, '-');
     24     if (parentTagEnd == NULL) {
     25         return SkLanguage("");
     26     }
     27     size_t parentTagLen = parentTagEnd - tag;
     28     char parentTag[parentTagLen + 1];
     29     strncpy(parentTag, tag, parentTagLen);
     30     parentTag[parentTagLen] = '\0';
     31     return SkLanguage(parentTag);
     32 }
     33 
     34 SK_DECLARE_STATIC_MUTEX(gGetInfoMutex);
     35 const SkLanguageInfo* SkLanguage::getInfo(const char* tag) {
     36     SkAutoMutexAcquire lock(gGetInfoMutex);
     37 
     38     static const size_t kDictSize = 128;
     39     static SkTDict<SkLanguageInfo*> tagToInfo(kDictSize);
     40 
     41     // try a lookup
     42     SkLanguageInfo* info;
     43     if (tagToInfo.find(tag, &info)) {
     44         return info;
     45     }
     46 
     47     // no match - add this language
     48     info = new SkLanguageInfo(tag);
     49     tagToInfo.set(tag, info);
     50     return info;
     51 }
     52 
     53 #endif
     54