146debc2cSopenharmony_ci/* 246debc2cSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 346debc2cSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 446debc2cSopenharmony_ci * you may not use this file except in compliance with the License. 546debc2cSopenharmony_ci * You may obtain a copy of the License at 646debc2cSopenharmony_ci * 746debc2cSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 846debc2cSopenharmony_ci * 946debc2cSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1046debc2cSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1146debc2cSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1246debc2cSopenharmony_ci * See the License for the specific language governing permissions and 1346debc2cSopenharmony_ci * limitations under the License. 1446debc2cSopenharmony_ci */ 1546debc2cSopenharmony_ci 1646debc2cSopenharmony_ci#ifndef PRINT_UTIL_H 1746debc2cSopenharmony_ci#define PRINT_UTIL_H 1846debc2cSopenharmony_ci 1946debc2cSopenharmony_ci#include <algorithm> 2046debc2cSopenharmony_ci#include <iostream> 2146debc2cSopenharmony_ci#include <sstream> 2246debc2cSopenharmony_ci#include <list> 2346debc2cSopenharmony_ci#include <vector> 2446debc2cSopenharmony_ci#include <string> 2546debc2cSopenharmony_ci#include <regex> 2646debc2cSopenharmony_ci 2746debc2cSopenharmony_ci#include "print_log.h" 2846debc2cSopenharmony_ci 2946debc2cSopenharmony_cinamespace OHOS::Print { 3046debc2cSopenharmony_ciconst uint32_t MAX_PRINTER_NAME_LENGTH = 127; 3146debc2cSopenharmony_ciconst uint32_t MIN_INT_LIST_STRLENGTH = 2; 3246debc2cSopenharmony_ciclass PrintUtil { 3346debc2cSopenharmony_cipublic: 3446debc2cSopenharmony_ci static std::string ParseListToString(const std::vector<std::string> &list); 3546debc2cSopenharmony_ci 3646debc2cSopenharmony_ci static std::string SplitStr(const std::string& str, char delimiter, int index); 3746debc2cSopenharmony_ci 3846debc2cSopenharmony_ci static std::string ToUpper(const std::string& str); 3946debc2cSopenharmony_ci 4046debc2cSopenharmony_ci static bool CheckContains(const std::string& str, const std::string& content); 4146debc2cSopenharmony_ci 4246debc2cSopenharmony_ci static std::string StandardizePrinterName(std::string printerName); 4346debc2cSopenharmony_ci 4446debc2cSopenharmony_ci static std::string RemoveUnderlineFromPrinterName(std::string printerName); 4546debc2cSopenharmony_ci 4646debc2cSopenharmony_ci static std::vector<uint32_t> Str2Vec(std::string str); 4746debc2cSopenharmony_ci 4846debc2cSopenharmony_ci static void Str2VecStr(std::string& str, std::vector<std::string>& vec); 4946debc2cSopenharmony_ci 5046debc2cSopenharmony_ci static bool startsWith(const std::string& str, const std::string& prefix); 5146debc2cSopenharmony_ci}; 5246debc2cSopenharmony_ci 5346debc2cSopenharmony_ciinline std::vector<uint32_t> PrintUtil::Str2Vec(std::string str) 5446debc2cSopenharmony_ci{ 5546debc2cSopenharmony_ci if (str.size() < MIN_INT_LIST_STRLENGTH) { 5646debc2cSopenharmony_ci return {}; 5746debc2cSopenharmony_ci } 5846debc2cSopenharmony_ci str.pop_back(); 5946debc2cSopenharmony_ci str.erase(str.begin()); 6046debc2cSopenharmony_ci std::vector<uint32_t> vec; 6146debc2cSopenharmony_ci std::istringstream is(str); 6246debc2cSopenharmony_ci std::string temp; 6346debc2cSopenharmony_ci while (getline(is, temp, ',')) { 6446debc2cSopenharmony_ci vec.push_back(stoi(temp)); 6546debc2cSopenharmony_ci } 6646debc2cSopenharmony_ci return vec; 6746debc2cSopenharmony_ci} 6846debc2cSopenharmony_ci 6946debc2cSopenharmony_ciinline void PrintUtil::Str2VecStr(std::string& str, std::vector<std::string>& vec) 7046debc2cSopenharmony_ci{ 7146debc2cSopenharmony_ci if (!str.empty()) { 7246debc2cSopenharmony_ci str.pop_back(); 7346debc2cSopenharmony_ci str.erase(str.begin()); 7446debc2cSopenharmony_ci std::istringstream is(str); 7546debc2cSopenharmony_ci std::string temp; 7646debc2cSopenharmony_ci while (getline(is, temp, ',')) { 7746debc2cSopenharmony_ci vec.push_back(temp); 7846debc2cSopenharmony_ci } 7946debc2cSopenharmony_ci } 8046debc2cSopenharmony_ci} 8146debc2cSopenharmony_ci 8246debc2cSopenharmony_ciinline std::string PrintUtil::ParseListToString(const std::vector<std::string> &list) 8346debc2cSopenharmony_ci{ 8446debc2cSopenharmony_ci std::string str; 8546debc2cSopenharmony_ci if (!list.empty()) { 8646debc2cSopenharmony_ci uint32_t count = 1; 8746debc2cSopenharmony_ci uint32_t size = list.size(); 8846debc2cSopenharmony_ci for (auto val: list) { 8946debc2cSopenharmony_ci str += val; 9046debc2cSopenharmony_ci if (count < size) { 9146debc2cSopenharmony_ci str += ","; 9246debc2cSopenharmony_ci } 9346debc2cSopenharmony_ci count ++; 9446debc2cSopenharmony_ci } 9546debc2cSopenharmony_ci } 9646debc2cSopenharmony_ci return str; 9746debc2cSopenharmony_ci} 9846debc2cSopenharmony_ci 9946debc2cSopenharmony_ciinline std::string PrintUtil::SplitStr(const std::string& str, char delimiter, int index) 10046debc2cSopenharmony_ci{ 10146debc2cSopenharmony_ci if (!str.empty()) { 10246debc2cSopenharmony_ci std::string token; 10346debc2cSopenharmony_ci std::istringstream tokenStream(str); 10446debc2cSopenharmony_ci int count = 0; 10546debc2cSopenharmony_ci while (std::getline(tokenStream, token, delimiter)) { 10646debc2cSopenharmony_ci if (count == index) { 10746debc2cSopenharmony_ci return token; 10846debc2cSopenharmony_ci } 10946debc2cSopenharmony_ci count ++; 11046debc2cSopenharmony_ci } 11146debc2cSopenharmony_ci } 11246debc2cSopenharmony_ci return str; 11346debc2cSopenharmony_ci} 11446debc2cSopenharmony_ci 11546debc2cSopenharmony_ciinline std::string PrintUtil::ToUpper(const std::string& val) 11646debc2cSopenharmony_ci{ 11746debc2cSopenharmony_ci std::string str = val; 11846debc2cSopenharmony_ci if (!str.empty()) { 11946debc2cSopenharmony_ci std::transform(str.begin(), str.end(), str.begin(), toupper); 12046debc2cSopenharmony_ci } 12146debc2cSopenharmony_ci return str; 12246debc2cSopenharmony_ci} 12346debc2cSopenharmony_ci 12446debc2cSopenharmony_ciinline bool PrintUtil::CheckContains(const std::string& str, const std::string& content) 12546debc2cSopenharmony_ci{ 12646debc2cSopenharmony_ci if (str.empty() || content.empty()) { 12746debc2cSopenharmony_ci return false; 12846debc2cSopenharmony_ci } 12946debc2cSopenharmony_ci 13046debc2cSopenharmony_ci return str.find(content) != std::string::npos; 13146debc2cSopenharmony_ci} 13246debc2cSopenharmony_ci 13346debc2cSopenharmony_ciinline std::string PrintUtil::StandardizePrinterName(std::string printerName) 13446debc2cSopenharmony_ci{ 13546debc2cSopenharmony_ci std::regex pattern("[ /#]"); 13646debc2cSopenharmony_ci std::string name = std::regex_replace(printerName, pattern, "_"); 13746debc2cSopenharmony_ci if (name.length() < MAX_PRINTER_NAME_LENGTH) { 13846debc2cSopenharmony_ci return name; 13946debc2cSopenharmony_ci } 14046debc2cSopenharmony_ci return name.substr(0, MAX_PRINTER_NAME_LENGTH - 1); 14146debc2cSopenharmony_ci} 14246debc2cSopenharmony_ci 14346debc2cSopenharmony_ciinline std::string PrintUtil::RemoveUnderlineFromPrinterName(std::string printerName) 14446debc2cSopenharmony_ci{ 14546debc2cSopenharmony_ci std::regex pattern("[_]"); 14646debc2cSopenharmony_ci std::string name = std::regex_replace(printerName, pattern, " "); 14746debc2cSopenharmony_ci if (name.length() < MAX_PRINTER_NAME_LENGTH) { 14846debc2cSopenharmony_ci return name; 14946debc2cSopenharmony_ci } 15046debc2cSopenharmony_ci return name.substr(0, MAX_PRINTER_NAME_LENGTH - 1); 15146debc2cSopenharmony_ci} 15246debc2cSopenharmony_ci 15346debc2cSopenharmony_ciinline bool PrintUtil::startsWith(const std::string& str, const std::string& prefix) 15446debc2cSopenharmony_ci{ 15546debc2cSopenharmony_ci if (str.length() < prefix.length()) { 15646debc2cSopenharmony_ci return false; 15746debc2cSopenharmony_ci } 15846debc2cSopenharmony_ci return str.compare(0, prefix.length(), prefix) == 0; 15946debc2cSopenharmony_ci} 16046debc2cSopenharmony_ci} // namespace OHOS::Print 16146debc2cSopenharmony_ci 16246debc2cSopenharmony_ci#endif // PRINT_UTIL_H