summaryrefslogtreecommitdiffstats
path: root/external_libs/yaml-cpp/src/scantag.cpp
diff options
context:
space:
mode:
authorDan Klein <danklei@cisco.com>2015-08-26 15:05:58 +0300
committerDan Klein <danklei@cisco.com>2015-08-26 15:05:58 +0300
commitfc46f2618332037a8c1b58fbce5d616033bff1c9 (patch)
treebdb7ffdb92732438d540ef06622e570a3c60a8f4 /external_libs/yaml-cpp/src/scantag.cpp
parentcecaf28ab61882d323cb5f3d813518523f7e836b (diff)
Rearranged files and external libraries in two different locations, one for cpp (trex-core/external_libs) and one for python (trex-core/scripts/external_libs)
Diffstat (limited to 'external_libs/yaml-cpp/src/scantag.cpp')
-rw-r--r--external_libs/yaml-cpp/src/scantag.cpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/external_libs/yaml-cpp/src/scantag.cpp b/external_libs/yaml-cpp/src/scantag.cpp
new file mode 100644
index 00000000..b71cbcc4
--- /dev/null
+++ b/external_libs/yaml-cpp/src/scantag.cpp
@@ -0,0 +1,84 @@
+#include "scanner.h"
+#include "regex.h"
+#include "exp.h"
+#include "yaml-cpp/exceptions.h"
+
+namespace YAML
+{
+ const std::string ScanVerbatimTag(Stream& INPUT)
+ {
+ std::string tag;
+
+ // eat the start character
+ INPUT.get();
+
+ while(INPUT) {
+ if(INPUT.peek() == Keys::VerbatimTagEnd) {
+ // eat the end character
+ INPUT.get();
+ return tag;
+ }
+
+ int n = Exp::URI().Match(INPUT);
+ if(n <= 0)
+ break;
+
+ tag += INPUT.get(n);
+ }
+
+ throw ParserException(INPUT.mark(), ErrorMsg::END_OF_VERBATIM_TAG);
+ }
+
+ const std::string ScanTagHandle(Stream& INPUT, bool& canBeHandle)
+ {
+ std::string tag;
+ canBeHandle = true;
+ Mark firstNonWordChar;
+
+ while(INPUT) {
+ if(INPUT.peek() == Keys::Tag) {
+ if(!canBeHandle)
+ throw ParserException(firstNonWordChar, ErrorMsg::CHAR_IN_TAG_HANDLE);
+ break;
+ }
+
+ int n = 0;
+ if(canBeHandle) {
+ n = Exp::Word().Match(INPUT);
+ if(n <= 0) {
+ canBeHandle = false;
+ firstNonWordChar = INPUT.mark();
+ }
+ }
+
+ if(!canBeHandle)
+ n = Exp::Tag().Match(INPUT);
+
+ if(n <= 0)
+ break;
+
+ tag += INPUT.get(n);
+ }
+
+ return tag;
+ }
+
+ const std::string ScanTagSuffix(Stream& INPUT)
+ {
+ std::string tag;
+
+ while(INPUT) {
+ int n = Exp::Tag().Match(INPUT);
+ if(n <= 0)
+ break;
+
+ tag += INPUT.get(n);
+ }
+
+ if(tag.empty())
+ throw ParserException(INPUT.mark(), ErrorMsg::TAG_WITH_NO_SUFFIX);
+
+ return tag;
+ }
+}
+