1e9297d28Sopenharmony_ci/* 2e9297d28Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3e9297d28Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e9297d28Sopenharmony_ci * you may not use this file except in compliance with the License. 5e9297d28Sopenharmony_ci * You may obtain a copy of the License at 6e9297d28Sopenharmony_ci * 7e9297d28Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e9297d28Sopenharmony_ci * 9e9297d28Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e9297d28Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e9297d28Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e9297d28Sopenharmony_ci * See the License for the specific language governing permissions and 13e9297d28Sopenharmony_ci * limitations under the License. 14e9297d28Sopenharmony_ci */ 15e9297d28Sopenharmony_ci 16e9297d28Sopenharmony_ci#ifndef FONT_CONFIG_H 17e9297d28Sopenharmony_ci#define FONT_CONFIG_H 18e9297d28Sopenharmony_ci 19e9297d28Sopenharmony_ci#include <string> 20e9297d28Sopenharmony_ci#include <vector> 21e9297d28Sopenharmony_ci#include <include/core/SkString.h> 22e9297d28Sopenharmony_ci#include <map> 23e9297d28Sopenharmony_ci 24e9297d28Sopenharmony_cistruct cJSON; 25e9297d28Sopenharmony_cinamespace OHOS { 26e9297d28Sopenharmony_cinamespace Rosen { 27e9297d28Sopenharmony_cinamespace TextEngine { 28e9297d28Sopenharmony_ciclass FontConfig { 29e9297d28Sopenharmony_cipublic: 30e9297d28Sopenharmony_ci explicit FontConfig(const char* fname = nullptr); 31e9297d28Sopenharmony_ci virtual ~FontConfig() = default; 32e9297d28Sopenharmony_ci virtual void Dump() const; 33e9297d28Sopenharmony_ci std::vector<std::string> GetFontSet() const; 34e9297d28Sopenharmony_ci 35e9297d28Sopenharmony_ciprotected: 36e9297d28Sopenharmony_ci int ParseConfig(const char* fname); 37e9297d28Sopenharmony_ci int ParseFont(const cJSON* root); 38e9297d28Sopenharmony_ci cJSON* CheckConfigFile(const char* fname) const; 39e9297d28Sopenharmony_ci static char* GetFileData(const char* fname, int& size); 40e9297d28Sopenharmony_ci 41e9297d28Sopenharmony_ciprivate: 42e9297d28Sopenharmony_ci std::vector<std::string> fontSet_; 43e9297d28Sopenharmony_ci std::string rootPath_; 44e9297d28Sopenharmony_ci}; 45e9297d28Sopenharmony_ci 46e9297d28Sopenharmony_citypedef struct AdjustInfo { 47e9297d28Sopenharmony_ci int origValue; 48e9297d28Sopenharmony_ci int newValue; 49e9297d28Sopenharmony_ci} AdjustInfo; 50e9297d28Sopenharmony_ciusing AdjustSet = std::vector<AdjustInfo>; 51e9297d28Sopenharmony_ci 52e9297d28Sopenharmony_citypedef struct AliasInfo { 53e9297d28Sopenharmony_ci std::string familyName; 54e9297d28Sopenharmony_ci int weight; 55e9297d28Sopenharmony_ci} AliasInfo; 56e9297d28Sopenharmony_ciusing AliasSet = std::vector<AliasInfo>; 57e9297d28Sopenharmony_ci 58e9297d28Sopenharmony_citypedef struct FallbackInfo { 59e9297d28Sopenharmony_ci std::string familyName; 60e9297d28Sopenharmony_ci std::string font; 61e9297d28Sopenharmony_ci} FallbackInfo; 62e9297d28Sopenharmony_ciusing FallbackInfoSet = std::vector<FallbackInfo>; 63e9297d28Sopenharmony_ci 64e9297d28Sopenharmony_citypedef struct FallbackGroup { 65e9297d28Sopenharmony_ci std::string groupName; 66e9297d28Sopenharmony_ci FallbackInfoSet fallbackInfoSet; 67e9297d28Sopenharmony_ci} FallbackGroup; 68e9297d28Sopenharmony_ciusing FallbackGroupSet = std::vector<FallbackGroup>; 69e9297d28Sopenharmony_ci 70e9297d28Sopenharmony_citypedef struct FontGenericInfo { 71e9297d28Sopenharmony_ci std::string familyName; 72e9297d28Sopenharmony_ci AliasSet aliasSet; 73e9297d28Sopenharmony_ci AdjustSet adjustSet; 74e9297d28Sopenharmony_ci} FontGenericInfo; 75e9297d28Sopenharmony_ciusing GenericSet = std::vector<FontGenericInfo>; 76e9297d28Sopenharmony_ci 77e9297d28Sopenharmony_citypedef struct FontConfigJsonInfo { 78e9297d28Sopenharmony_ci std::vector<std::string> fontDirSet; 79e9297d28Sopenharmony_ci GenericSet genericSet; 80e9297d28Sopenharmony_ci FallbackGroupSet fallbackGroupSet; 81e9297d28Sopenharmony_ci} FontConfigJsonInfo; 82e9297d28Sopenharmony_ci 83e9297d28Sopenharmony_ciusing FontFileMap = std::map<std::string, std::string>; 84e9297d28Sopenharmony_ci 85e9297d28Sopenharmony_ciclass FontConfigJson : public FontConfig { 86e9297d28Sopenharmony_cipublic: 87e9297d28Sopenharmony_ci FontConfigJson() = default; 88e9297d28Sopenharmony_ci int ParseFile(const char* fname = nullptr); 89e9297d28Sopenharmony_ci int ParseFontFileMap(const char* fname = nullptr); 90e9297d28Sopenharmony_ci int ParseInstallConfig(const char* fname, std::vector<std::string>& fontPathList); 91e9297d28Sopenharmony_ci std::shared_ptr<FontConfigJsonInfo> GetFontConfigJsonInfo() 92e9297d28Sopenharmony_ci { 93e9297d28Sopenharmony_ci return fontPtr; 94e9297d28Sopenharmony_ci } 95e9297d28Sopenharmony_ci std::shared_ptr<FontFileMap> GetFontFileMap() 96e9297d28Sopenharmony_ci { 97e9297d28Sopenharmony_ci return fontFileMap; 98e9297d28Sopenharmony_ci } 99e9297d28Sopenharmony_ci // for test 100e9297d28Sopenharmony_ci void Dump() const override; 101e9297d28Sopenharmony_ci 102e9297d28Sopenharmony_ciprivate: 103e9297d28Sopenharmony_ci int ParseConfigList(const char* fname); 104e9297d28Sopenharmony_ci int ParseConfigListPath(const char* fname); 105e9297d28Sopenharmony_ci int ParseGeneric(const cJSON* root, const char* key); 106e9297d28Sopenharmony_ci int ParseAlias(const cJSON* root, FontGenericInfo &genericInfo); 107e9297d28Sopenharmony_ci int ParseAdjust(const cJSON* root, FontGenericInfo &genericInfo); 108e9297d28Sopenharmony_ci int ParseFallback(const cJSON* root, const char* key); 109e9297d28Sopenharmony_ci int ParseFontMap(const cJSON* root, const char* key); 110e9297d28Sopenharmony_ci int ParseDir(const cJSON* root); 111e9297d28Sopenharmony_ci void AnalyseFontDir(const cJSON* root); 112e9297d28Sopenharmony_ci int ParseAdjustArr(const cJSON* arr, FontGenericInfo &genericInfo); 113e9297d28Sopenharmony_ci int ParseAliasArr(const cJSON* arr, FontGenericInfo &genericInfo); 114e9297d28Sopenharmony_ci int ParseInstallFont(const cJSON* root, std::vector<std::string>& fontPathList); 115e9297d28Sopenharmony_ci void DumpFontDir() const; 116e9297d28Sopenharmony_ci void DumpGeneric() const; 117e9297d28Sopenharmony_ci void DumpForbak() const; 118e9297d28Sopenharmony_ci void DumpAlias(const AliasSet &aliasSet) const; 119e9297d28Sopenharmony_ci void DumpAjdust(const AdjustSet &adjustSet) const; 120e9297d28Sopenharmony_ci void DumpFontFileMap() const; 121e9297d28Sopenharmony_ci 122e9297d28Sopenharmony_ci std::shared_ptr<FontConfigJsonInfo> fontPtr = nullptr; 123e9297d28Sopenharmony_ci std::shared_ptr<FontFileMap> fontFileMap = nullptr; 124e9297d28Sopenharmony_ci}; 125e9297d28Sopenharmony_ci} // namespace TextEngine 126e9297d28Sopenharmony_ci} // namespace Rosen 127e9297d28Sopenharmony_ci} // namespace OHOS 128e9297d28Sopenharmony_ci#endif /* FONT_CONFIG_H */ 129