blob: a8cb3bb5a595bd21d01f752a80eda921185e900d [file] [log] [blame]
// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "token_replacer.h"
TokenReplacer::TokenReplacer(const std::string& host,
const std::string& user,
const std::string& title,
const std::string& copies)
: title_(EscapeTitle(title)),
re_host_("(STATIONID|PJL(.+?HOSTID)) = GETMYHOST"),
host_replacement_(R"($1 = ")" + host + R"(")"),
// GEYMYUSERNAME is not a typo (see fax-pnh-filter)
re_user_("(PJL (SET USERNAME|(.+?USERID))) = GEYMYUSERNAME"),
user_replacement_(R"($1 = ")" + user + R"(")"),
re_title_("(PJL SET JOBNAME) = GETMYJOBNAME"),
title_replacement_(R"($1 = ")" + title_ + R"(")"),
re_copies_("(PJL SET QTY) = GETMYCOPIES"),
copies_replacement_("$1 = " + copies ) {}
const std::string TokenReplacer::TokenizeLine(std::string line) const {
line = std::regex_replace(line, re_host_, host_replacement_);
line = std::regex_replace(line, re_user_, user_replacement_);
line = std::regex_replace(line, re_title_, title_replacement_);
line = std::regex_replace(line, re_copies_, copies_replacement_);
return line;
}
std::string TokenReplacer::EscapeTitle(std::string title) {
// Replace each one or two backslash sequence with one backslash
std::regex slash(R"(\\{1,2})");
title = std::regex_replace(title, slash, R"(\)");
// Replace double-quotes with single-quotes
std::regex quote(R"(")");
title = std::regex_replace(title, quote, "'");
return title;
}