Source code

Revision control

Copy as Markdown

// Copyright (C) 2019 Alexey Edelev <semlanik@gmail.com>, Tatyana Borisova <tanusshhka@mail.ru>
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "baseprinter.h"
#include "utils.h"
#include "commontemplates.h"
#include <google/protobuf/io/printer.h>
using namespace ::google::protobuf;
using namespace ::google::protobuf::io;
using namespace ::qtprotoccommon;
BasePrinter::BasePrinter(std::shared_ptr<Printer> printer) : m_printer(std::move(printer)) { }
BasePrinter::~BasePrinter() = default;
void BasePrinter::printPublicBlock()
{
m_printer->Print(CommonTemplates::PublicBlockTemplate());
}
void BasePrinter::printPrivateBlock()
{
m_printer->Print(CommonTemplates::PrivateBlockTemplate());
}
void BasePrinter::printCommentsImpl(std::string comments)
{
utils::trim(comments);
if (!comments.empty()) {
const bool isSingleLine = !utils::contains(comments, '\n');
// Prepend a spacing if the comment does not start with a special character that is handled
// by the documentation tool, like qdoc or doxygen.
if (comments[0] != '!' && comments[0] != '*') {
comments = " " + comments;
if (!isSingleLine)
comments = "\n" + comments;
}
// We print all comments using multi-line semantic.
m_printer->Print("\n/*");
if (!isSingleLine) {
// Align all comment lines by adding asterisks at the beginning of the line.
comments = utils::replace(comments, "\n", "\n *");
if (!utils::endsWith(comments, '\n'))
comments += "\n";
}
// Print() treats '$' as variable syntax; "$$" emits a literal one.
m_printer->Print(utils::replace(utils::escapeBlockComment(comments), "$", "$$").c_str());
m_printer->Print(" */");
}
}
void BasePrinter::Indent()
{
// The protoc printer prints 2 spaces, so we call it twice
m_printer->Indent();
m_printer->Indent();
}
void BasePrinter::Outdent()
{
m_printer->Outdent();
m_printer->Outdent();
}