yaml-cpp/src/tag.cpp

60 lines
1.3 KiB
C++
Raw Normal View History

#include <cassert>
#include <stdexcept>
2014-03-23 07:46:04 +04:00
#include "directives.h" // IWYU pragma: keep
#include "tag.h"
#include "token.h"
2014-03-22 21:49:16 +04:00
namespace YAML {
Tag::Tag(const Token& token)
: type(static_cast<TYPE>(token.data)), handle{}, value{} {
2014-03-22 21:49:16 +04:00
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);
}
}
std::string Tag::Translate(const Directives& directives) {
std::string result;
2014-03-22 21:49:16 +04:00
switch (type) {
case VERBATIM:
result = value;
break;
2014-03-22 21:49:16 +04:00
case PRIMARY_HANDLE:
result = directives.TranslateTagHandle("!") + value;
break;
2014-03-22 21:49:16 +04:00
case SECONDARY_HANDLE:
result = directives.TranslateTagHandle("!!") + value;
break;
2014-03-22 21:49:16 +04:00
case NAMED_HANDLE:
result = directives.TranslateTagHandle("!" + handle + "!") + value;
break;
2014-03-22 21:49:16 +04:00
case NON_SPECIFIC:
// TODO:
result = "!";
break;
2014-03-22 21:49:16 +04:00
default:
assert(false);
throw std::runtime_error("yaml-cpp: internal error, bad tag type");
2014-03-22 21:49:16 +04:00
}
return result;
2014-03-22 21:49:16 +04:00
}
} // namespace YAML