145 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			145 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#ifndef EMITTERMANIP_H_62B23520_7C8E_11DE_8A39_0800200C9A66
							 | 
						||
| 
								 | 
							
								#define EMITTERMANIP_H_62B23520_7C8E_11DE_8A39_0800200C9A66
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if defined(_MSC_VER) ||                                            \
							 | 
						||
| 
								 | 
							
								    (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \
							 | 
						||
| 
								 | 
							
								     (__GNUC__ >= 4))  // GCC supports "pragma once" correctly since 3.4
							 | 
						||
| 
								 | 
							
								#pragma once
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <string>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace YAML {
							 | 
						||
| 
								 | 
							
								enum EMITTER_MANIP {
							 | 
						||
| 
								 | 
							
								  // general manipulators
							 | 
						||
| 
								 | 
							
								  Auto,
							 | 
						||
| 
								 | 
							
								  TagByKind,
							 | 
						||
| 
								 | 
							
								  Newline,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // output character set
							 | 
						||
| 
								 | 
							
								  EmitNonAscii,
							 | 
						||
| 
								 | 
							
								  EscapeNonAscii,
							 | 
						||
| 
								 | 
							
								  EscapeAsJson,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // string manipulators
							 | 
						||
| 
								 | 
							
								  // Auto, // duplicate
							 | 
						||
| 
								 | 
							
								  SingleQuoted,
							 | 
						||
| 
								 | 
							
								  DoubleQuoted,
							 | 
						||
| 
								 | 
							
								  Literal,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // null manipulators
							 | 
						||
| 
								 | 
							
								  LowerNull,
							 | 
						||
| 
								 | 
							
								  UpperNull,
							 | 
						||
| 
								 | 
							
								  CamelNull,
							 | 
						||
| 
								 | 
							
								  TildeNull,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // bool manipulators
							 | 
						||
| 
								 | 
							
								  YesNoBool,      // yes, no
							 | 
						||
| 
								 | 
							
								  TrueFalseBool,  // true, false
							 | 
						||
| 
								 | 
							
								  OnOffBool,      // on, off
							 | 
						||
| 
								 | 
							
								  UpperCase,      // TRUE, N
							 | 
						||
| 
								 | 
							
								  LowerCase,      // f, yes
							 | 
						||
| 
								 | 
							
								  CamelCase,      // No, Off
							 | 
						||
| 
								 | 
							
								  LongBool,       // yes, On
							 | 
						||
| 
								 | 
							
								  ShortBool,      // y, t
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // int manipulators
							 | 
						||
| 
								 | 
							
								  Dec,
							 | 
						||
| 
								 | 
							
								  Hex,
							 | 
						||
| 
								 | 
							
								  Oct,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // document manipulators
							 | 
						||
| 
								 | 
							
								  BeginDoc,
							 | 
						||
| 
								 | 
							
								  EndDoc,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // sequence manipulators
							 | 
						||
| 
								 | 
							
								  BeginSeq,
							 | 
						||
| 
								 | 
							
								  EndSeq,
							 | 
						||
| 
								 | 
							
								  Flow,
							 | 
						||
| 
								 | 
							
								  Block,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // map manipulators
							 | 
						||
| 
								 | 
							
								  BeginMap,
							 | 
						||
| 
								 | 
							
								  EndMap,
							 | 
						||
| 
								 | 
							
								  Key,
							 | 
						||
| 
								 | 
							
								  Value,
							 | 
						||
| 
								 | 
							
								  // Flow, // duplicate
							 | 
						||
| 
								 | 
							
								  // Block, // duplicate
							 | 
						||
| 
								 | 
							
								  // Auto, // duplicate
							 | 
						||
| 
								 | 
							
								  LongKey
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct _Indent {
							 | 
						||
| 
								 | 
							
								  _Indent(int value_) : value(value_) {}
							 | 
						||
| 
								 | 
							
								  int value;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline _Indent Indent(int value) { return _Indent(value); }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct _Alias {
							 | 
						||
| 
								 | 
							
								  _Alias(const std::string& content_) : content(content_) {}
							 | 
						||
| 
								 | 
							
								  std::string content;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline _Alias Alias(const std::string& content) { return _Alias(content); }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct _Anchor {
							 | 
						||
| 
								 | 
							
								  _Anchor(const std::string& content_) : content(content_) {}
							 | 
						||
| 
								 | 
							
								  std::string content;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline _Anchor Anchor(const std::string& content) { return _Anchor(content); }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct _Tag {
							 | 
						||
| 
								 | 
							
								  struct Type {
							 | 
						||
| 
								 | 
							
								    enum value { Verbatim, PrimaryHandle, NamedHandle };
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  explicit _Tag(const std::string& prefix_, const std::string& content_,
							 | 
						||
| 
								 | 
							
								                Type::value type_)
							 | 
						||
| 
								 | 
							
								      : prefix(prefix_), content(content_), type(type_) {}
							 | 
						||
| 
								 | 
							
								  std::string prefix;
							 | 
						||
| 
								 | 
							
								  std::string content;
							 | 
						||
| 
								 | 
							
								  Type::value type;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline _Tag VerbatimTag(const std::string& content) {
							 | 
						||
| 
								 | 
							
								  return _Tag("", content, _Tag::Type::Verbatim);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline _Tag LocalTag(const std::string& content) {
							 | 
						||
| 
								 | 
							
								  return _Tag("", content, _Tag::Type::PrimaryHandle);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline _Tag LocalTag(const std::string& prefix, const std::string content) {
							 | 
						||
| 
								 | 
							
								  return _Tag(prefix, content, _Tag::Type::NamedHandle);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline _Tag SecondaryTag(const std::string& content) {
							 | 
						||
| 
								 | 
							
								  return _Tag("", content, _Tag::Type::NamedHandle);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct _Comment {
							 | 
						||
| 
								 | 
							
								  _Comment(const std::string& content_) : content(content_) {}
							 | 
						||
| 
								 | 
							
								  std::string content;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline _Comment Comment(const std::string& content) { return _Comment(content); }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct _Precision {
							 | 
						||
| 
								 | 
							
								  _Precision(int floatPrecision_, int doublePrecision_)
							 | 
						||
| 
								 | 
							
								      : floatPrecision(floatPrecision_), doublePrecision(doublePrecision_) {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  int floatPrecision;
							 | 
						||
| 
								 | 
							
								  int doublePrecision;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline _Precision FloatPrecision(int n) { return _Precision(n, -1); }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline _Precision DoublePrecision(int n) { return _Precision(-1, n); }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline _Precision Precision(int n) { return _Precision(n, n); }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif  // EMITTERMANIP_H_62B23520_7C8E_11DE_8A39_0800200C9A66
							 |