diff --git a/src/yaml/SConscript b/src/yaml/SConscript index c38096b..e7aeeb2 100644 --- a/src/yaml/SConscript +++ b/src/yaml/SConscript @@ -8,6 +8,7 @@ Import('env') files = [ 'parsers.cc', 'object_parser.cc', + 'scalarMappingParser.cc', 'scene_parser.cc', ] diff --git a/src/yaml/scalarMappingParser.cc b/src/yaml/scalarMappingParser.cc new file mode 100644 index 0000000..9e8c05f --- /dev/null +++ b/src/yaml/scalarMappingParser.cc @@ -0,0 +1,76 @@ +/* scalarMappingParser.cc + * vim: set tw=80: + * Eryn Wells + */ +/** + * Implementation of ScalarMappingParser. + */ + +#include +#include + +#include "scalarMappingParser.hh" + + +namespace yaml { + +ScalarMappingParser::ScalarMappingParser(Scene& scene, + ParserStack& parsers) + : Parser(scene, parsers), + mShouldExpectKey(true) +{ } + + +ScalarMappingParser::~ScalarMappingParser() +{ } + + +void +ScalarMappingParser::HandleEvent(yaml_event_t& event) +{ + if (mShouldExpectKey && event.type == YAML_SCALAR_EVENT) { + HandleKeyEvent(std::string((char*)event.data.scalar.value, + event.data.scalar.length)); + } + else { + HandleValueEvent(event); + } +} + +#pragma mark key/value handling + +void +ScalarMappingParser::HandleKeyEvent(const std::string& key) +{ + printf("%s: key = %s\n", __PRETTY_FUNCTION__, key.c_str()); + assert(false); +} + + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-parameter" + +void +ScalarMappingParser::HandleValueEvent(yaml_event_t& event) +{ + assert(false); +} + +#pragma clang diagnostic pop + + +void +ScalarMappingParser::SetShouldExpectKey(bool shouldExpectKey) +{ + mShouldExpectKey = shouldExpectKey; +} + + +bool +ScalarMappingParser::GetShouldExpectKey() + const +{ + return mShouldExpectKey; +} + +} /* namespace yaml */ diff --git a/src/yaml/scalarMappingParser.hh b/src/yaml/scalarMappingParser.hh new file mode 100644 index 0000000..fb4771d --- /dev/null +++ b/src/yaml/scalarMappingParser.hh @@ -0,0 +1,44 @@ +/* scalarMappingParser.hh + * vim: set tw=80: + * Eryn Wells + */ +/** + * Declares a yaml::ScalarMappingParser. + */ + + +#ifndef __YAML_SCALARMAPPINGPARSER_HH__ +#define __YAML_SCALARMAPPINGPARSER_HH__ + +#include +#include +#include + +#include "yaml/parsers.hh" + + +namespace yaml { + +struct ScalarMappingParser + : public Parser +{ + ScalarMappingParser(Scene& scene, ParserStack& parsers); + virtual ~ScalarMappingParser(); + + void HandleEvent(yaml_event_t& event); + +protected: + virtual void HandleKeyEvent(const std::string& key); + virtual void HandleValueEvent(yaml_event_t& event); + + void SetShouldExpectKey(bool shouldExpectKey); + bool GetShouldExpectKey() const; + +private: + /** Subclasses set this to `true` when they're finished parsing the value. */ + bool mShouldExpectKey; +}; + +} /* namespace yaml */ + +#endif /* __YAML_SCALARMAPPINGPARSER_HH__ */