diff options
Diffstat (limited to 'cpp/src/format_element.h')
-rw-r--r-- | cpp/src/format_element.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/cpp/src/format_element.h b/cpp/src/format_element.h new file mode 100644 index 0000000..e37a188 --- /dev/null +++ b/cpp/src/format_element.h @@ -0,0 +1,70 @@ +// Copyright (C) 2014 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// An object representing a token in a formatting string. This may be a +// placeholder for a field in the address data such as ADMIN_AREA, a literal +// string such as " ", or a newline. + +#ifndef I18N_ADDRESSINPUT_FORMAT_ELEMENT_H_ +#define I18N_ADDRESSINPUT_FORMAT_ELEMENT_H_ + +#include <libaddressinput/address_field.h> + +#include <iosfwd> +#include <string> + +namespace i18n { +namespace addressinput { + +class FormatElement { + public: + // Builds a format element to represent |field|. + explicit FormatElement(AddressField field); + + // Builds an element representing a literal string |literal|. + explicit FormatElement(const std::string& literal); + + // Builds a newline element. + FormatElement(); + + // Returns true if this element represents a field element. + bool IsField() const { return literal_.empty(); } + + // Returns true if this element represents a new line. + bool IsNewline() const { return literal_ == "\n"; } + + AddressField GetField() const { return field_; } + const std::string& GetLiteral() const { return literal_; } + + bool operator==(const FormatElement& other) const; + + private: + // The field this element represents. Should only be used if |literal| is an + // empty string. + AddressField field_; + + // The literal string for this element. This will be "\n" if this is a + // newline - but IsNewline() is preferred to determine this. If empty, then + // this FormatElement represents an address field. + std::string literal_; +}; + +} // namespace addressinput +} // namespace i18n + +// Produces human-readable output in logging, for example in unit tests. +std::ostream& operator<<(std::ostream& o, + const i18n::addressinput::FormatElement& field); + +#endif // I18N_ADDRESSINPUT_FORMAT_ELEMENT_H_ |