mirror of
https://github.com/jbeder/yaml-cpp.git
synced 2025-09-09 04:41:16 +00:00

* Add compilation flags: -Wshadow -Weffc++ -pedantic -pedantic-errors * Delete implicit copy & move constructors & assignment operators in classes with pointer data members. * An exception to the above: Add default copy & move constructors & assignment operators for the Binary class. * Convert boolean RegEx operators to binary operators. * Initialize all members in all classes in ctors. * Let default ctor delegate to the converting ctor in Binary and RegEx * Don't change any tests except regex_test (as a result of the change to binary operators). Note: https://bugzilla.redhat.com/show_bug.cgi?id=1544675 makes -Weffc++ report a false positive in "include/yaml-cpp/node/impl.h".
51 lines
1.2 KiB
C++
51 lines
1.2 KiB
C++
#include <cassert>
|
|
#include <stdexcept>
|
|
|
|
#include "directives.h" // IWYU pragma: keep
|
|
#include "tag.h"
|
|
#include "token.h"
|
|
|
|
namespace YAML {
|
|
Tag::Tag(const Token& token)
|
|
: type(static_cast<TYPE>(token.data)), handle{}, value{} {
|
|
switch (type) {
|
|
case VERBATIM:
|
|
value = token.value;
|
|
break;
|
|
case PRIMARY_HANDLE:
|
|
value = token.value;
|
|
break;
|
|
case SECONDARY_HANDLE:
|
|
value = token.value;
|
|
break;
|
|
case NAMED_HANDLE:
|
|
handle = token.value;
|
|
value = token.params[0];
|
|
break;
|
|
case NON_SPECIFIC:
|
|
break;
|
|
default:
|
|
assert(false);
|
|
}
|
|
}
|
|
|
|
const std::string Tag::Translate(const Directives& directives) {
|
|
switch (type) {
|
|
case VERBATIM:
|
|
return value;
|
|
case PRIMARY_HANDLE:
|
|
return directives.TranslateTagHandle("!") + value;
|
|
case SECONDARY_HANDLE:
|
|
return directives.TranslateTagHandle("!!") + value;
|
|
case NAMED_HANDLE:
|
|
return directives.TranslateTagHandle("!" + handle + "!") + value;
|
|
case NON_SPECIFIC:
|
|
// TODO:
|
|
return "!";
|
|
default:
|
|
assert(false);
|
|
}
|
|
throw std::runtime_error("yaml-cpp: internal error, bad tag type");
|
|
}
|
|
} // namespace YAML
|