1725b3e03acb91dc69296554932624b36612bd189Billy Hewlett 2725b3e03acb91dc69296554932624b36612bd189Billy Hewlett/* 3725b3e03acb91dc69296554932624b36612bd189Billy Hewlett * Copyright 2012 The Android Open Source Project 4725b3e03acb91dc69296554932624b36612bd189Billy Hewlett * 5725b3e03acb91dc69296554932624b36612bd189Billy Hewlett * Use of this source code is governed by a BSD-style license that can be 6725b3e03acb91dc69296554932624b36612bd189Billy Hewlett * found in the LICENSE file. 7725b3e03acb91dc69296554932624b36612bd189Billy Hewlett */ 8725b3e03acb91dc69296554932624b36612bd189Billy Hewlett 9725b3e03acb91dc69296554932624b36612bd189Billy Hewlett#include "SkLanguage.h" 10725b3e03acb91dc69296554932624b36612bd189Billy Hewlett 11725b3e03acb91dc69296554932624b36612bd189Billy Hewlett#ifdef SK_BUILD_FOR_ANDROID // currently only for Android 12725b3e03acb91dc69296554932624b36612bd189Billy Hewlett 13725b3e03acb91dc69296554932624b36612bd189Billy Hewlett#include "SkTDict.h" 14725b3e03acb91dc69296554932624b36612bd189Billy Hewlett#include "SkThread.h" 15725b3e03acb91dc69296554932624b36612bd189Billy Hewlett#include <cstring> 16725b3e03acb91dc69296554932624b36612bd189Billy Hewlett 17725b3e03acb91dc69296554932624b36612bd189Billy HewlettSkLanguage SkLanguage::getParent() const { 18725b3e03acb91dc69296554932624b36612bd189Billy Hewlett SkASSERT(fInfo != NULL); 19725b3e03acb91dc69296554932624b36612bd189Billy Hewlett SkASSERT(fInfo->fTag != NULL); 20725b3e03acb91dc69296554932624b36612bd189Billy Hewlett const char* tag = fInfo->fTag.c_str(); 21725b3e03acb91dc69296554932624b36612bd189Billy Hewlett SkASSERT(tag != NULL); 22725b3e03acb91dc69296554932624b36612bd189Billy Hewlett 23725b3e03acb91dc69296554932624b36612bd189Billy Hewlett // strip off the rightmost "-.*" 24725b3e03acb91dc69296554932624b36612bd189Billy Hewlett char* parentTagEnd = strrchr(tag, '-'); 25725b3e03acb91dc69296554932624b36612bd189Billy Hewlett if (parentTagEnd == NULL) { 26725b3e03acb91dc69296554932624b36612bd189Billy Hewlett return SkLanguage(""); 27725b3e03acb91dc69296554932624b36612bd189Billy Hewlett } 28725b3e03acb91dc69296554932624b36612bd189Billy Hewlett size_t parentTagLen = parentTagEnd - tag; 29725b3e03acb91dc69296554932624b36612bd189Billy Hewlett char parentTag[parentTagLen + 1]; 30725b3e03acb91dc69296554932624b36612bd189Billy Hewlett strncpy(parentTag, tag, parentTagLen); 31725b3e03acb91dc69296554932624b36612bd189Billy Hewlett parentTag[parentTagLen] = '\0'; 32725b3e03acb91dc69296554932624b36612bd189Billy Hewlett return SkLanguage(parentTag); 33725b3e03acb91dc69296554932624b36612bd189Billy Hewlett} 34725b3e03acb91dc69296554932624b36612bd189Billy Hewlett 35725b3e03acb91dc69296554932624b36612bd189Billy HewlettSK_DECLARE_STATIC_MUTEX(gGetInfoMutex); 36725b3e03acb91dc69296554932624b36612bd189Billy Hewlettconst SkLanguageInfo* SkLanguage::getInfo(const char* tag) { 37725b3e03acb91dc69296554932624b36612bd189Billy Hewlett SkAutoMutexAcquire lock(gGetInfoMutex); 38725b3e03acb91dc69296554932624b36612bd189Billy Hewlett 39725b3e03acb91dc69296554932624b36612bd189Billy Hewlett static const size_t kDictSize = 128; 40725b3e03acb91dc69296554932624b36612bd189Billy Hewlett static SkTDict<SkLanguageInfo*> tagToInfo(kDictSize); 41725b3e03acb91dc69296554932624b36612bd189Billy Hewlett 42725b3e03acb91dc69296554932624b36612bd189Billy Hewlett // try a lookup 43725b3e03acb91dc69296554932624b36612bd189Billy Hewlett SkLanguageInfo* info; 44725b3e03acb91dc69296554932624b36612bd189Billy Hewlett if (tagToInfo.find(tag, &info)) { 45725b3e03acb91dc69296554932624b36612bd189Billy Hewlett return info; 46725b3e03acb91dc69296554932624b36612bd189Billy Hewlett } 47725b3e03acb91dc69296554932624b36612bd189Billy Hewlett 48725b3e03acb91dc69296554932624b36612bd189Billy Hewlett // no match - add this language 49725b3e03acb91dc69296554932624b36612bd189Billy Hewlett info = new SkLanguageInfo(tag); 50725b3e03acb91dc69296554932624b36612bd189Billy Hewlett tagToInfo.set(tag, info); 51725b3e03acb91dc69296554932624b36612bd189Billy Hewlett return info; 52725b3e03acb91dc69296554932624b36612bd189Billy Hewlett} 53725b3e03acb91dc69296554932624b36612bd189Billy Hewlett 54725b3e03acb91dc69296554932624b36612bd189Billy Hewlett#endif 55