13920e296Sopenharmony_ci/* 23920e296Sopenharmony_ci * Copyright (c) 2021-2024 Huawei Device Co., Ltd. 33920e296Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 43920e296Sopenharmony_ci * you may not use this file except in compliance with the License. 53920e296Sopenharmony_ci * You may obtain a copy of the License at 63920e296Sopenharmony_ci * 73920e296Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 83920e296Sopenharmony_ci * 93920e296Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 103920e296Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 113920e296Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 123920e296Sopenharmony_ci * See the License for the specific language governing permissions and 133920e296Sopenharmony_ci * limitations under the License. 143920e296Sopenharmony_ci */ 153920e296Sopenharmony_ci 163920e296Sopenharmony_ci#ifndef OHOS_RESTOOL_RESOURCE_UTIL_H 173920e296Sopenharmony_ci#define OHOS_RESTOOL_RESOURCE_UTIL_H 183920e296Sopenharmony_ci 193920e296Sopenharmony_ci#include <vector> 203920e296Sopenharmony_ci#include <cJSON.h> 213920e296Sopenharmony_ci#include "file_entry.h" 223920e296Sopenharmony_ci#include "resource_data.h" 233920e296Sopenharmony_ci 243920e296Sopenharmony_cinamespace OHOS { 253920e296Sopenharmony_cinamespace Global { 263920e296Sopenharmony_cinamespace Restool { 273920e296Sopenharmony_ciclass ResourceUtil { 283920e296Sopenharmony_cipublic: 293920e296Sopenharmony_ci /** 303920e296Sopenharmony_ci * @brief split the string with given splitter. 313920e296Sopenharmony_ci * @param str: input string. 323920e296Sopenharmony_ci * @param out: the array of strings computed by splitter. 333920e296Sopenharmony_ci * @param splitter: the split string. 343920e296Sopenharmony_ci */ 353920e296Sopenharmony_ci static void Split(const std::string &str, std::vector<std::string> &out, const std::string &splitter); 363920e296Sopenharmony_ci 373920e296Sopenharmony_ci /** 383920e296Sopenharmony_ci * @brief Replace sub-string in string 393920e296Sopenharmony_ci * @param sourceStr: The original string to operate on 403920e296Sopenharmony_ci * @param oldStr: The string to be replaced 413920e296Sopenharmony_ci * @param newStr: The new string used 423920e296Sopenharmony_ci */ 433920e296Sopenharmony_ci static void StringReplace(std::string &sourceStr, const std::string &oldStr, const std::string &newStr); 443920e296Sopenharmony_ci 453920e296Sopenharmony_ci /** 463920e296Sopenharmony_ci * @brief check file exist. 473920e296Sopenharmony_ci * @param path: file path. 483920e296Sopenharmony_ci * @return true if exist, other false. 493920e296Sopenharmony_ci */ 503920e296Sopenharmony_ci static bool FileExist(const std::string &path); 513920e296Sopenharmony_ci 523920e296Sopenharmony_ci /** 533920e296Sopenharmony_ci * @brief remove all files in the directory. 543920e296Sopenharmony_ci * @param path: input directory. 553920e296Sopenharmony_ci * @return true if remove success, other false. 563920e296Sopenharmony_ci */ 573920e296Sopenharmony_ci static bool RmoveAllDir(const std::string &path); 583920e296Sopenharmony_ci 593920e296Sopenharmony_ci /** 603920e296Sopenharmony_ci * @brief remove file. 613920e296Sopenharmony_ci * @param path: input file. 623920e296Sopenharmony_ci * @return true if remove success, other false. 633920e296Sopenharmony_ci */ 643920e296Sopenharmony_ci static bool RmoveFile(const std::string &path); 653920e296Sopenharmony_ci 663920e296Sopenharmony_ci /** 673920e296Sopenharmony_ci * @brief open json file. 683920e296Sopenharmony_ci * @param path: json file path. 693920e296Sopenharmony_ci * @param root: json root node 703920e296Sopenharmony_ci * @return true if open success, other false. 713920e296Sopenharmony_ci */ 723920e296Sopenharmony_ci static bool OpenJsonFile(const std::string &path, cJSON **root); 733920e296Sopenharmony_ci 743920e296Sopenharmony_ci /** 753920e296Sopenharmony_ci * @brief save json file. 763920e296Sopenharmony_ci * @param path: json file path. 773920e296Sopenharmony_ci * @param root: json root node 783920e296Sopenharmony_ci * @return true if save success, other false. 793920e296Sopenharmony_ci */ 803920e296Sopenharmony_ci static bool SaveToJsonFile(const std::string &path, const cJSON *root); 813920e296Sopenharmony_ci 823920e296Sopenharmony_ci /** 833920e296Sopenharmony_ci * @brief get resource type from directory. 843920e296Sopenharmony_ci * @param name: directory name. 853920e296Sopenharmony_ci * @return resource type. 863920e296Sopenharmony_ci */ 873920e296Sopenharmony_ci static ResType GetResTypeByDir(const std::string &name); 883920e296Sopenharmony_ci 893920e296Sopenharmony_ci /** 903920e296Sopenharmony_ci * @brief ResType to string 913920e296Sopenharmony_ci * @param type: ResType 923920e296Sopenharmony_ci * @return resource type string. 933920e296Sopenharmony_ci */ 943920e296Sopenharmony_ci static std::string ResTypeToString(ResType type); 953920e296Sopenharmony_ci 963920e296Sopenharmony_ci /** 973920e296Sopenharmony_ci * @brief get id name 983920e296Sopenharmony_ci * @param name; id name or file name 993920e296Sopenharmony_ci * @param type: ResType 1003920e296Sopenharmony_ci * @return return id name. 1013920e296Sopenharmony_ci */ 1023920e296Sopenharmony_ci static std::string GetIdName(const std::string &name, ResType type); 1033920e296Sopenharmony_ci 1043920e296Sopenharmony_ci /** 1053920e296Sopenharmony_ci * @brief compose multi strings to string 1063920e296Sopenharmony_ci * @param contents: multi strings 1073920e296Sopenharmony_ci * @param addNull: if true, string length contains '\0'. 1083920e296Sopenharmony_ci * @return return string, empty if error 1093920e296Sopenharmony_ci */ 1103920e296Sopenharmony_ci static std::string ComposeStrings(const std::vector<std::string> &contents, bool addNull = false); 1113920e296Sopenharmony_ci 1123920e296Sopenharmony_ci /** 1133920e296Sopenharmony_ci * @brief decompose string to multi strings 1143920e296Sopenharmony_ci * @param content: string 1153920e296Sopenharmony_ci * @return return string vector, empty if error 1163920e296Sopenharmony_ci */ 1173920e296Sopenharmony_ci static std::vector<std::string> DecomposeStrings(const std::string &content); 1183920e296Sopenharmony_ci 1193920e296Sopenharmony_ci /** 1203920e296Sopenharmony_ci * @brief string to ResType 1213920e296Sopenharmony_ci * @param type: string 1223920e296Sopenharmony_ci * @return return ResType 1233920e296Sopenharmony_ci */ 1243920e296Sopenharmony_ci static ResType GetResTypeFromString(const std::string &type); 1253920e296Sopenharmony_ci 1263920e296Sopenharmony_ci /** 1273920e296Sopenharmony_ci * @brief copy file 1283920e296Sopenharmony_ci * @param src: source file path 1293920e296Sopenharmony_ci * @param dst: destination file path 1303920e296Sopenharmony_ci * @return true if success, other false 1313920e296Sopenharmony_ci */ 1323920e296Sopenharmony_ci static bool CopyFileInner(const std::string &src, const std::string &dst); 1333920e296Sopenharmony_ci 1343920e296Sopenharmony_ci /** 1353920e296Sopenharmony_ci * @brief create directories 1363920e296Sopenharmony_ci * @param filePath: directory path 1373920e296Sopenharmony_ci * @return true if success, other false 1383920e296Sopenharmony_ci */ 1393920e296Sopenharmony_ci static bool CreateDirs(const std::string &filePath); 1403920e296Sopenharmony_ci 1413920e296Sopenharmony_ci /** 1423920e296Sopenharmony_ci * @brief ignore file or directory 1433920e296Sopenharmony_ci * @param filename: file or directory name 1443920e296Sopenharmony_ci * @param isFile: ture if is file, other false 1453920e296Sopenharmony_ci * @return true if ignore, other false 1463920e296Sopenharmony_ci */ 1473920e296Sopenharmony_ci static bool IsIgnoreFile(const std::string &filename, bool isFile); 1483920e296Sopenharmony_ci 1493920e296Sopenharmony_ci /** 1503920e296Sopenharmony_ci * @brief generate hash string 1513920e296Sopenharmony_ci * @param key: string 1523920e296Sopenharmony_ci * @return hash string 1533920e296Sopenharmony_ci */ 1543920e296Sopenharmony_ci static std::string GenerateHash(const std::string &key); 1553920e296Sopenharmony_ci 1563920e296Sopenharmony_ci /** 1573920e296Sopenharmony_ci * @brief get an absolute pathname 1583920e296Sopenharmony_ci * @param path pathname 1593920e296Sopenharmony_ci * @return absolut pathname 1603920e296Sopenharmony_ci */ 1613920e296Sopenharmony_ci static std::string RealPath(const std::string &path); 1623920e296Sopenharmony_ci 1633920e296Sopenharmony_ci /** 1643920e296Sopenharmony_ci * @brief check the directory is legal 1653920e296Sopenharmony_ci * @param path pathname 1663920e296Sopenharmony_ci * @return true is legal, other false; 1673920e296Sopenharmony_ci */ 1683920e296Sopenharmony_ci static bool IslegalPath(const std::string &path); 1693920e296Sopenharmony_ci 1703920e296Sopenharmony_ci /** 1713920e296Sopenharmony_ci * @brief get an keyParams for limitkey 1723920e296Sopenharmony_ci * @param keyParams 1733920e296Sopenharmony_ci * @return limitkey 1743920e296Sopenharmony_ci */ 1753920e296Sopenharmony_ci static std::string PaserKeyParam(const std::vector<KeyParam> &keyParams); 1763920e296Sopenharmony_ci 1773920e296Sopenharmony_ci /** 1783920e296Sopenharmony_ci * @brief Decimal to hexadecimal string 1793920e296Sopenharmony_ci * @param int32_t Decimal 1803920e296Sopenharmony_ci * @return Hexadecimal string 1813920e296Sopenharmony_ci */ 1823920e296Sopenharmony_ci static std::string DecToHexStr(const uint32_t id); 1833920e296Sopenharmony_ci 1843920e296Sopenharmony_ci /** 1853920e296Sopenharmony_ci * @brief Check hexadecimal string 1863920e296Sopenharmony_ci * @param string Hexadecimal string 1873920e296Sopenharmony_ci * @return ture Hexadecimal string is legal, other false; 1883920e296Sopenharmony_ci */ 1893920e296Sopenharmony_ci static bool CheckHexStr(const std::string &hex); 1903920e296Sopenharmony_ci 1913920e296Sopenharmony_ci /** 1923920e296Sopenharmony_ci * @brief get g_contentClusterMap key string 1933920e296Sopenharmony_ci * @return All restype string 1943920e296Sopenharmony_ci */ 1953920e296Sopenharmony_ci static std::string GetAllRestypeString(); 1963920e296Sopenharmony_ci 1973920e296Sopenharmony_ci /** 1983920e296Sopenharmony_ci * @brief get \base\element dir 1993920e296Sopenharmony_ci * @param string inputpath 2003920e296Sopenharmony_ci * @return resource\base\element dir 2013920e296Sopenharmony_ci */ 2023920e296Sopenharmony_ci static FileEntry::FilePath GetBaseElementPath(const std::string input); 2033920e296Sopenharmony_ci 2043920e296Sopenharmony_ci /** 2053920e296Sopenharmony_ci * @brief get main dir 2063920e296Sopenharmony_ci * @param string inputpath 2073920e296Sopenharmony_ci * @return main dir 2083920e296Sopenharmony_ci */ 2093920e296Sopenharmony_ci static FileEntry::FilePath GetMainPath(const std::string input); 2103920e296Sopenharmony_ci 2113920e296Sopenharmony_ci /** 2123920e296Sopenharmony_ci * @brief Gets the standard size of icons under different qualifier phrases 2133920e296Sopenharmony_ci * @param keyParams set of qualifiers 2143920e296Sopenharmony_ci * @param uint32_t index 2153920e296Sopenharmony_ci * @return standard size of the png 2163920e296Sopenharmony_ci */ 2173920e296Sopenharmony_ci static uint32_t GetNormalSize(const std::vector<KeyParam> &keyParams, uint32_t index); 2183920e296Sopenharmony_ci 2193920e296Sopenharmony_ci /** 2203920e296Sopenharmony_ci * @brief Check if the Unicode code belongs to the 15 plane or 16 plane 2213920e296Sopenharmony_ci * @param int unicode 2223920e296Sopenharmony_ci * @return ture Unicode code belongs to the 15 plane or 16 plane, other false; 2233920e296Sopenharmony_ci */ 2243920e296Sopenharmony_ci static bool isUnicodeInPlane15or16(int unicode); 2253920e296Sopenharmony_ci 2263920e296Sopenharmony_ci /** 2273920e296Sopenharmony_ci * @brief Remove spaces before and after strings 2283920e296Sopenharmony_ci * @param str input string 2293920e296Sopenharmony_ci */ 2303920e296Sopenharmony_ci static void RemoveSpaces(std::string &str); 2313920e296Sopenharmony_ci 2323920e296Sopenharmony_ci /** 2333920e296Sopenharmony_ci * @brief Check whether the value is int 2343920e296Sopenharmony_ci * @param snode cJSON node 2353920e296Sopenharmony_ci */ 2363920e296Sopenharmony_ci static bool IsIntValue(const cJSON *node); 2373920e296Sopenharmony_ci 2383920e296Sopenharmony_ci /** 2393920e296Sopenharmony_ci * @brief Check whether the resource name is valid 2403920e296Sopenharmony_ci * @param str resource name 2413920e296Sopenharmony_ci */ 2423920e296Sopenharmony_ci static bool IsValidName(const std::string &name); 2433920e296Sopenharmony_ci 2443920e296Sopenharmony_ci /** 2453920e296Sopenharmony_ci * @brief print warning msg 2463920e296Sopenharmony_ci * @param noBaseResource set of no base resources 2473920e296Sopenharmony_ci */ 2483920e296Sopenharmony_ci static void PrintWarningMsg(std::vector<std::pair<ResType, std::string>> &noBaseResource); 2493920e296Sopenharmony_ci 2503920e296Sopenharmony_ciprivate: 2513920e296Sopenharmony_ci enum class IgnoreType { 2523920e296Sopenharmony_ci IGNORE_FILE, 2533920e296Sopenharmony_ci IGNORE_DIR, 2543920e296Sopenharmony_ci IGNORE_ALL 2553920e296Sopenharmony_ci }; 2563920e296Sopenharmony_ci static const std::map<std::string, IgnoreType> IGNORE_FILE_REGEX; 2573920e296Sopenharmony_ci static std::string GetLocaleLimitkey(const KeyParam &KeyParam); 2583920e296Sopenharmony_ci static std::string GetDeviceTypeLimitkey(const KeyParam &KeyParam); 2593920e296Sopenharmony_ci static std::string GetResolutionLimitkey(const KeyParam &KeyParam); 2603920e296Sopenharmony_ci static std::string GetKeyParamValue(const KeyParam &KeyParam); 2613920e296Sopenharmony_ci}; 2623920e296Sopenharmony_ci} 2633920e296Sopenharmony_ci} 2643920e296Sopenharmony_ci} 2653920e296Sopenharmony_ci#endif 266