28 #include <google/protobuf/io/printer.h>
29 #include <google/protobuf/descriptor.h>
33 #include "generatoroptions.h"
34 #include "generatorcommon.h"
36 namespace google {
namespace protobuf {
37 class FieldDescriptor;
39 class MethodDescriptor;
42 namespace QtProtobuf {
45 using PropertyMap = std::map<std::string, std::string>;
55 BasePrinter(
const std::shared_ptr<::google::protobuf::io::Printer> &printer);
56 virtual ~BasePrinter() =
default;
58 void printPublicBlock();
59 void printPrivateBlock();
60 void printSignalsBlock();
63 void printComments(T *descriptor) {
64 if (!GeneratorOptions::instance().generateComments()) {
68 ::google::protobuf::SourceLocation loc;
69 descriptor->GetSourceLocation(&loc);
71 utils::trim(loc.leading_comments);
72 if (loc.leading_comments.size() > 0) {
73 auto firstEntry = loc.leading_comments.find(
'\n');
74 bool isSingleLine = firstEntry == std::string::npos;
76 if (loc.leading_comments[0] !=
'!' && loc.leading_comments[0] !=
'*' && loc.leading_comments[0] !=
' ') {
77 loc.leading_comments =
" " + loc.leading_comments;
79 loc.leading_comments =
"\n" + loc.leading_comments;
82 mPrinter->Print(
"\n/*");
84 mPrinter->Print(loc.leading_comments.c_str());
86 utils::replace(loc.leading_comments,
"\n",
"\n *");
87 mPrinter->Print(loc.leading_comments.c_str());
88 if (loc.leading_comments[loc.leading_comments.size() - 1] !=
'\n') {
89 mPrinter->Print(
"\n");
92 mPrinter->Print(
" */");
107 std::shared_ptr<::google::protobuf::io::Printer> mPrinter;
108 std::vector<std::string> mNamespaces;