diff options
Diffstat (limited to 'src/libs/3rdparty/yaml-cpp/src/tag.cpp')
-rw-r--r-- | src/libs/3rdparty/yaml-cpp/src/tag.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/libs/3rdparty/yaml-cpp/src/tag.cpp b/src/libs/3rdparty/yaml-cpp/src/tag.cpp new file mode 100644 index 00000000000..51435520e46 --- /dev/null +++ b/src/libs/3rdparty/yaml-cpp/src/tag.cpp @@ -0,0 +1,49 @@ +#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)) { + 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"); +} +} |