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