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