aboutsummaryrefslogtreecommitdiffstats
path: root/src/google/protobuf/text_format.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/google/protobuf/text_format.h')
-rw-r--r--src/google/protobuf/text_format.h247
1 files changed, 19 insertions, 228 deletions
diff --git a/src/google/protobuf/text_format.h b/src/google/protobuf/text_format.h
index 2954941..e78e104 100644
--- a/src/google/protobuf/text_format.h
+++ b/src/google/protobuf/text_format.h
@@ -1,6 +1,6 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc. All rights reserved.
-// https://developers.google.com/protocol-buffers/
+// http://code.google.com/p/protobuf/
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
@@ -38,14 +38,9 @@
#ifndef GOOGLE_PROTOBUF_TEXT_FORMAT_H__
#define GOOGLE_PROTOBUF_TEXT_FORMAT_H__
-#include <map>
-#include <memory>
#include <string>
-#include <vector>
-
-#include <google/protobuf/stubs/common.h>
-#include <google/protobuf/descriptor.h>
#include <google/protobuf/message.h>
+#include <google/protobuf/descriptor.h>
namespace google {
namespace protobuf {
@@ -87,41 +82,6 @@ class LIBPROTOBUF_EXPORT TextFormat {
int index,
string* output);
- // The default printer that converts scalar values from fields into
- // their string representation.
- // You can derive from this FieldValuePrinter if you want to have
- // fields to be printed in a different way and register it at the
- // Printer.
- class LIBPROTOBUF_EXPORT FieldValuePrinter {
- public:
- FieldValuePrinter();
- virtual ~FieldValuePrinter();
- virtual string PrintBool(bool val) const;
- virtual string PrintInt32(int32 val) const;
- virtual string PrintUInt32(uint32 val) const;
- virtual string PrintInt64(int64 val) const;
- virtual string PrintUInt64(uint64 val) const;
- virtual string PrintFloat(float val) const;
- virtual string PrintDouble(double val) const;
- virtual string PrintString(const string& val) const;
- virtual string PrintBytes(const string& val) const;
- virtual string PrintEnum(int32 val, const string& name) const;
- virtual string PrintFieldName(const Message& message,
- const Reflection* reflection,
- const FieldDescriptor* field) const;
- virtual string PrintMessageStart(const Message& message,
- int field_index,
- int field_count,
- bool single_line_mode) const;
- virtual string PrintMessageEnd(const Message& message,
- int field_index,
- int field_count,
- bool single_line_mode) const;
-
- private:
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FieldValuePrinter);
- };
-
// Class for those users which require more fine-grained control over how
// a protobuffer message is printed out.
class LIBPROTOBUF_EXPORT Printer {
@@ -130,20 +90,20 @@ class LIBPROTOBUF_EXPORT TextFormat {
~Printer();
// Like TextFormat::Print
- bool Print(const Message& message, io::ZeroCopyOutputStream* output) const;
+ bool Print(const Message& message, io::ZeroCopyOutputStream* output);
// Like TextFormat::PrintUnknownFields
bool PrintUnknownFields(const UnknownFieldSet& unknown_fields,
- io::ZeroCopyOutputStream* output) const;
+ io::ZeroCopyOutputStream* output);
// Like TextFormat::PrintToString
- bool PrintToString(const Message& message, string* output) const;
+ bool PrintToString(const Message& message, string* output);
// Like TextFormat::PrintUnknownFieldsToString
bool PrintUnknownFieldsToString(const UnknownFieldSet& unknown_fields,
- string* output) const;
+ string* output);
// Like TextFormat::PrintFieldValueToString
void PrintFieldValueToString(const Message& message,
const FieldDescriptor* field,
int index,
- string* output) const;
+ string* output);
// Adjust the initial indent level of all output. Each indent level is
// equal to two spaces.
@@ -157,20 +117,12 @@ class LIBPROTOBUF_EXPORT TextFormat {
single_line_mode_ = single_line_mode;
}
- bool IsInSingleLineMode() {
- return single_line_mode_;
- }
-
- // If use_field_number is true, uses field number instead of field name.
- void SetUseFieldNumber(bool use_field_number) {
- use_field_number_ = use_field_number;
- }
-
// Set true to print repeated primitives in a format like:
// field_name: [1, 2, 3, 4]
// instead of printing each value on its own line. Short format applies
// only to primitive values -- i.e. everything except strings and
- // sub-messages/groups.
+ // sub-messages/groups. Note that at present this format is not recognized
+ // by the parser.
void SetUseShortRepeatedPrimitives(bool use_short_repeated_primitives) {
use_short_repeated_primitives_ = use_short_repeated_primitives;
}
@@ -178,41 +130,11 @@ class LIBPROTOBUF_EXPORT TextFormat {
// Set true to output UTF-8 instead of ASCII. The only difference
// is that bytes >= 0x80 in string fields will not be escaped,
// because they are assumed to be part of UTF-8 multi-byte
- // sequences. This will change the default FieldValuePrinter.
- void SetUseUtf8StringEscaping(bool as_utf8);
-
- // Set the default FieldValuePrinter that is used for all fields that
- // don't have a field-specific printer registered.
- // Takes ownership of the printer.
- void SetDefaultFieldValuePrinter(const FieldValuePrinter* printer);
-
- // Sets whether we want to hide unknown fields or not.
- // Usually unknown fields are printed in a generic way that includes the
- // tag number of the field instead of field name. However, sometimes it
- // is useful to be able to print the message without unknown fields (e.g.
- // for the python protobuf version to maintain consistency between its pure
- // python and c++ implementations).
- void SetHideUnknownFields(bool hide) {
- hide_unknown_fields_ = hide;
- }
-
- // If print_message_fields_in_index_order is true, print fields of a proto
- // message using the order defined in source code instead of the field
- // number. By default, use the field number order.
- void SetPrintMessageFieldsInIndexOrder(
- bool print_message_fields_in_index_order) {
- print_message_fields_in_index_order_ =
- print_message_fields_in_index_order;
+ // sequences.
+ void SetUseUtf8StringEscaping(bool as_utf8) {
+ utf8_string_escaping_ = as_utf8;
}
- // Register a custom field-specific FieldValuePrinter for fields
- // with a particular FieldDescriptor.
- // Returns "true" if the registration succeeded, or "false", if there is
- // already a printer for that FieldDescriptor.
- // Takes ownership of the printer on successful registration.
- bool RegisterFieldValuePrinter(const FieldDescriptor* field,
- const FieldValuePrinter* printer);
-
private:
// Forward declaration of an internal class used to print the text
// output to the OutputStream (see text_format.cc for implementation).
@@ -221,26 +143,26 @@ class LIBPROTOBUF_EXPORT TextFormat {
// Internal Print method, used for writing to the OutputStream via
// the TextGenerator class.
void Print(const Message& message,
- TextGenerator& generator) const;
+ TextGenerator& generator);
// Print a single field.
void PrintField(const Message& message,
const Reflection* reflection,
const FieldDescriptor* field,
- TextGenerator& generator) const;
+ TextGenerator& generator);
// Print a repeated primitive field in short form.
void PrintShortRepeatedField(const Message& message,
const Reflection* reflection,
const FieldDescriptor* field,
- TextGenerator& generator) const;
+ TextGenerator& generator);
// Print the name of a field -- i.e. everything that comes before the
// ':' for a single name/value pair.
void PrintFieldName(const Message& message,
const Reflection* reflection,
const FieldDescriptor* field,
- TextGenerator& generator) const;
+ TextGenerator& generator);
// Outputs a textual representation of the value of the field supplied on
// the message supplied or the default value if not set.
@@ -248,30 +170,21 @@ class LIBPROTOBUF_EXPORT TextFormat {
const Reflection* reflection,
const FieldDescriptor* field,
int index,
- TextGenerator& generator) const;
+ TextGenerator& generator);
// Print the fields in an UnknownFieldSet. They are printed by tag number
// only. Embedded messages are heuristically identified by attempting to
// parse them.
void PrintUnknownFields(const UnknownFieldSet& unknown_fields,
- TextGenerator& generator) const;
+ TextGenerator& generator);
int initial_indent_level_;
bool single_line_mode_;
- bool use_field_number_;
-
bool use_short_repeated_primitives_;
- bool hide_unknown_fields_;
-
- bool print_message_fields_in_index_order_;
-
- scoped_ptr<const FieldValuePrinter> default_field_value_printer_;
- typedef map<const FieldDescriptor*,
- const FieldValuePrinter*> CustomPrinterMap;
- CustomPrinterMap custom_printers_;
+ bool utf8_string_escaping_;
};
// Parses a text-format protocol message from the given input stream to
@@ -294,71 +207,6 @@ class LIBPROTOBUF_EXPORT TextFormat {
const FieldDescriptor* field,
Message* message);
- // Interface that TextFormat::Parser can use to find extensions.
- // This class may be extended in the future to find more information
- // like fields, etc.
- class LIBPROTOBUF_EXPORT Finder {
- public:
- virtual ~Finder();
-
- // Try to find an extension of *message by fully-qualified field
- // name. Returns NULL if no extension is known for this name or number.
- virtual const FieldDescriptor* FindExtension(
- Message* message,
- const string& name) const = 0;
- };
-
- // A location in the parsed text.
- struct ParseLocation {
- int line;
- int column;
-
- ParseLocation() : line(-1), column(-1) {}
- ParseLocation(int line_param, int column_param)
- : line(line_param), column(column_param) {}
- };
-
- // Data structure which is populated with the locations of each field
- // value parsed from the text.
- class LIBPROTOBUF_EXPORT ParseInfoTree {
- public:
- ParseInfoTree();
- ~ParseInfoTree();
-
- // Returns the parse location for index-th value of the field in the parsed
- // text. If none exists, returns a location with line = -1. Index should be
- // -1 for not-repeated fields.
- ParseLocation GetLocation(const FieldDescriptor* field, int index) const;
-
- // Returns the parse info tree for the given field, which must be a message
- // type. The nested information tree is owned by the root tree and will be
- // deleted when it is deleted.
- ParseInfoTree* GetTreeForNested(const FieldDescriptor* field,
- int index) const;
-
- private:
- // Allow the text format parser to record information into the tree.
- friend class TextFormat;
-
- // Records the starting location of a single value for a field.
- void RecordLocation(const FieldDescriptor* field, ParseLocation location);
-
- // Create and records a nested tree for a nested message field.
- ParseInfoTree* CreateNested(const FieldDescriptor* field);
-
- // Defines the map from the index-th field descriptor to its parse location.
- typedef map<const FieldDescriptor*, vector<ParseLocation> > LocationMap;
-
- // Defines the map from the index-th field descriptor to the nested parse
- // info tree.
- typedef map<const FieldDescriptor*, vector<ParseInfoTree*> > NestedMap;
-
- LocationMap locations_;
- NestedMap nested_;
-
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ParseInfoTree);
- };
-
// For more control over parsing, use this class.
class LIBPROTOBUF_EXPORT Parser {
public:
@@ -380,43 +228,17 @@ class LIBPROTOBUF_EXPORT TextFormat {
error_collector_ = error_collector;
}
- // Set how parser finds extensions. If NULL (the default), the
- // parser will use the standard Reflection object associated with
- // the message being parsed.
- void SetFinder(Finder* finder) {
- finder_ = finder;
- }
-
- // Sets where location information about the parse will be written. If NULL
- // (the default), then no location will be written.
- void WriteLocationsTo(ParseInfoTree* tree) {
- parse_info_tree_ = tree;
- }
-
// Normally parsing fails if, after parsing, output->IsInitialized()
// returns false. Call AllowPartialMessage(true) to skip this check.
void AllowPartialMessage(bool allow) {
allow_partial_ = allow;
}
- // Allow field names to be matched case-insensitively.
- // This is not advisable if there are fields that only differ in case, or
- // if you want to enforce writing in the canonical form.
- // This is 'false' by default.
- void AllowCaseInsensitiveField(bool allow) {
- allow_case_insensitive_field_ = allow;
- }
-
// Like TextFormat::ParseFieldValueFromString
bool ParseFieldValueFromString(const string& input,
const FieldDescriptor* field,
Message* output);
-
- void AllowFieldNumber(bool allow) {
- allow_field_number_ = allow;
- }
-
private:
// Forward declaration of an internal class used to parse text
// representations (see text_format.cc for implementation).
@@ -429,44 +251,13 @@ class LIBPROTOBUF_EXPORT TextFormat {
ParserImpl* parser_impl);
io::ErrorCollector* error_collector_;
- Finder* finder_;
- ParseInfoTree* parse_info_tree_;
bool allow_partial_;
- bool allow_case_insensitive_field_;
- bool allow_unknown_field_;
- bool allow_unknown_enum_;
- bool allow_field_number_;
- bool allow_relaxed_whitespace_;
- bool allow_singular_overwrites_;
};
-
private:
- // Hack: ParseInfoTree declares TextFormat as a friend which should extend
- // the friendship to TextFormat::Parser::ParserImpl, but unfortunately some
- // old compilers (e.g. GCC 3.4.6) don't implement this correctly. We provide
- // helpers for ParserImpl to call methods of ParseInfoTree.
- static inline void RecordLocation(ParseInfoTree* info_tree,
- const FieldDescriptor* field,
- ParseLocation location);
- static inline ParseInfoTree* CreateNested(ParseInfoTree* info_tree,
- const FieldDescriptor* field);
-
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TextFormat);
};
-inline void TextFormat::RecordLocation(ParseInfoTree* info_tree,
- const FieldDescriptor* field,
- ParseLocation location) {
- info_tree->RecordLocation(field, location);
-}
-
-
-inline TextFormat::ParseInfoTree* TextFormat::CreateNested(
- ParseInfoTree* info_tree, const FieldDescriptor* field) {
- return info_tree->CreateNested(field);
-}
-
} // namespace protobuf
} // namespace google