From 2a8e27ff02cb3ccccbd951616b3009be55cc216c Mon Sep 17 00:00:00 2001 From: andre ebersold Date: Tue, 18 Jun 2024 15:48:29 +0200 Subject: [PATCH] Parse Elements stops at SPEC-OBJECTS. To be continued so tha all elements will be parsed --- setupenv.bat | 5 + src/xml/reqif/parsers.h.inc | 2 +- src/xml/reqif/reqif_elements_parser.cpp | 294 +++++++++++++++++++++--- 3 files changed, 274 insertions(+), 27 deletions(-) create mode 100644 setupenv.bat diff --git a/setupenv.bat b/setupenv.bat new file mode 100644 index 0000000..86856f5 --- /dev/null +++ b/setupenv.bat @@ -0,0 +1,5 @@ +SET MSVCPATH="c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvars64.bat" + +%MSVCPATH% + +set PATH=%PATH%;c:\Tools\wxWidgets\lib\vc14x_x64_dll diff --git a/src/xml/reqif/parsers.h.inc b/src/xml/reqif/parsers.h.inc index edd6145..2ed2251 100644 --- a/src/xml/reqif/parsers.h.inc +++ b/src/xml/reqif/parsers.h.inc @@ -50,7 +50,7 @@ SIMPLE_PARSER(SPEC-RELATION-TYPE,RelationTypeParser) COMPLEX_PARSER(SPEC-OBJECTS,SpecObjectsParser) COMPLEX_PARSER(SPEC-OBJECT,SpecObjectParser) -COMPLEX_PARSER(VALUES,ValuesParser) +COMPLEX_PARSER(VALUES,SpecObjectValuesParser) COMPLEX_PARSER(ATTRIBUTE-VALUE-DATE,AttributeValueParser) //COMPLEX_PARSER(ATTRIBUTE-VALUE-STRING,AttributeValueParser) //COMPLEX_PARSER(ATTRIBUTE-VALUE-XHTML,AttributeValueParser) diff --git a/src/xml/reqif/reqif_elements_parser.cpp b/src/xml/reqif/reqif_elements_parser.cpp index eed7e4a..af33855 100644 --- a/src/xml/reqif/reqif_elements_parser.cpp +++ b/src/xml/reqif/reqif_elements_parser.cpp @@ -381,7 +381,7 @@ cls::cls(antcc::project *_project,::reqif::Element *_elt) \ ); \ if (_elt == NULL) \ { \ - ANTCC_PARSER_ERROR("%s(%0x)::%s is NULL unsuported!!!" \ + ANTCC_PARSER_ERROR("%s(%0x)::%s element is NULL unsuported!!!" \ ,#cls \ ,this \ ,#cls \ @@ -466,7 +466,7 @@ cls::cls(antcc::project *_project,::reqif::Element *_elt) \ ); \ if (_elt == NULL) \ { \ - ANTCC_PARSER_ERROR("%s(%0x)::%s is NULL unsuported!!!" \ + ANTCC_PARSER_ERROR("%s(%0x)::%s is element NULL unsuported!!!" \ ,#cls \ ,this \ ,#cls \ @@ -550,7 +550,7 @@ cls::cls(antcc::project *_project,::reqif::Element *_elt) \ ); \ if (_elt == NULL) \ { \ - ANTCC_PARSER_DEBUG("%s(%0x)::%s is NULL unsuported!!!" \ + ANTCC_PARSER_DEBUG("%s(%0x)::%s element is NULL unsuported!!!" \ ,#cls \ ,this \ ,#cls \ @@ -576,40 +576,50 @@ bool cls::AttributeImpl(const std::string &ns,const std::string &name,const std: //Project Parser Impl ROOT_PARSER(ReqifParser, { -if (name == "THE-HEADER" && ns.empty()) -{ + if (name == "THE-HEADER" && ! ns.empty()) + { s.m_parser = SHARED_PTR(new ReqifHeaderParser(m_Project , ::reqif::ElementFactory::get().orderElement(name.c_str()) )); -} else if (name == "TOOL-EXTENSION" && ns.empty()) -{ + } else if (name == "TOOL-EXTENSION" && ! ns.empty()) + { s.m_parser = SHARED_PTR(new DescriptionParser(m_Project , NULL) ); -} else if (name == "CORE-CONTENT" && ns.empty()) -{ + } else if (name == "CORE-CONTENT" && ! ns.empty()) + { s.m_parser = SHARED_PTR(new CoreContentParser(m_Project , ::reqif::ElementFactory::get().orderElement(name.c_str()) ) ); -} else -{ - return false; -} -return true; - + } else + { + if (! ns.empty() ) + { + std::cout<<"ReqifParser name "<post(m_result); + return true; + } else if (name == "CORE-CONTENT" && ! ns.empty()) + { + return true; + } else if (name == "TOOL-EXTENSIONS" && ! ns.empty()) + { + return true; } - return true; + return false; } , { @@ -623,7 +633,7 @@ return l_ok; // Target Parser Implementation COMPLEX_PARSER(ReqifHeaderParser, { - if (name == "REQ-IF-HEADER" && ns.empty()) + if (name == "REQ-IF-HEADER" && ! ns.empty()) { s.m_parser = SHARED_PTR(new DescriptionParser(m_Project , ::reqif::ElementFactory::get().orderElement(name.c_str()) @@ -662,6 +672,23 @@ COMPLEX_PARSER(ReqifHeaderParser, // DescriptionParser Implementation COMPLEX_PARSER(CoreContentParser, { + if (name == "REQ-IF-CONTENT" && ! ns.empty()) + { + s.m_parser = SHARED_PTR(new ReqifContentParser(m_Project + , ::reqif::ElementFactory::get().orderElement(name.c_str()) + )); + } else if (name == "exec" && ns.empty()) + { + s.m_parser = SHARED_PTR(new DescriptionParser(m_Project + , ::reqif::ElementFactory::get().orderElement(name.c_str()) + )); + } + else + { + s.m_parser = SHARED_PTR(new DescriptionParser(m_Project + , ::reqif::ElementFactory::get().orderElement(name.c_str()) + )); + } return true; } @@ -670,6 +697,10 @@ COMPLEX_PARSER(CoreContentParser, ANTCC_PARSER_DEBUG_TASK("CoreContentParser end %s size=%u" ,name.c_str() ,m_context.size()); + if (name == "REQ-IF-CONTENT" && ! ns.empty()) + { + return true; + } return true; } , @@ -684,7 +715,7 @@ COMPLEX_PARSER(CoreContentParser, // Exec Parser Implementation COMPLEX_PARSER(ReqifContentParser, { - if (name == "DATATYPES" && ns.empty()) + if (name == "DATATYPES" && !ns.empty()) { ANTCC_PARSER_DEBUG("ReqifContentParser ignore %s size=%u" ,name.c_str() @@ -692,16 +723,34 @@ COMPLEX_PARSER(ReqifContentParser, s.m_parser = SHARED_PTR(new DatatypesParser(m_Project , ::reqif::ElementFactory::get().orderElement(name.c_str()) )); + return true; } - else if (name == "SPEC-TYPES" && ns.empty()) - { - } else + else if (name == "SPEC-TYPES" && ! ns.empty()) { s.m_parser = SHARED_PTR(new TypeParser(m_Project , ::reqif::ElementFactory::get().orderElement(name.c_str()) )); + return true; + } else if (name == "SPEC-OBJECTS" && ! ns.empty()) + { + s.m_parser = SHARED_PTR(new SpecObjectsParser(m_Project + , ::reqif::ElementFactory::get().orderElement(name.c_str()) + )); + return true; + } else if (name == "SPEC-RELATIONS" && ! ns.empty()) + { + return true; + } else if (name == "SPECIFICATIONS" && ! ns.empty()) + { + return true; + } else if (name == "SPEC-RELATION-GROUPS" && ! ns.empty()) + { + return true; + } else + { + ANTCC_PARSER_ERROR("ReqifContentParser::startElement unsupported Element %s",name.c_str()); } - return true; + return false; } , @@ -709,6 +758,9 @@ COMPLEX_PARSER(ReqifContentParser, ANTCC_PARSER_DEBUG_TASK("ReqifParser end %s size=%u" ,name.c_str() ,m_context.size()); + if (name == "DATATYPES" && !ns.empty()) + { + } return true; } , @@ -722,10 +774,24 @@ COMPLEX_PARSER(ReqifContentParser, // Datypesarser Implementation COMPLEX_PARSER(DatatypesParser, { - s.m_parser = SHARED_PTR(new DatatypeParser(m_Project + if ( (name == "DATATYPE-DEFINITION-STRING" + || !name.compare("DATATYPE-DEFINITION-XHTML") + || !name.compare("DATATYPE-DEFINITION-DATE") + || !name.compare( "DATATYPE-DEFINITION-REAL") + || !name.compare("DATATYPE-DEFINITION-BOOLEAN") + || !name.compare("DATATYPE-DEFINITION-ENUMERATION") + || !name.compare("DATATYPE-DEFINITION-INTEGER") + ) && !ns.empty()) + { + ANTCC_PARSER_DEBUG("ReqifContentParser ignore %s size=%u" + ,name.c_str() + ,m_context.size()); + s.m_parser = SHARED_PTR(new DatatypeParser(m_Project , ::reqif::ElementFactory::get().orderElement(name.c_str()) )); - return true; + return true; + } + return false; } , @@ -747,12 +813,27 @@ COMPLEX_PARSER(DatatypesParser, COMPLEX_PARSER(TypeParser, { // Not sure that I need sub element for the Type parser - if (name == "include" && ns.empty()) + if (name == "RELATION-GROUP-TYPE" && ! ns.empty()) { s.m_parser = SHARED_PTR(new TypeParser(m_Project , ::reqif::ElementFactory::get().orderElement(name.c_str()) )); return true; + } else if (name == "SPEC-OBJECT-TYPE" && ! ns.empty()) + { + s.m_parser = SHARED_PTR(new SpecObjectTypeParser(m_Project + , ::reqif::ElementFactory::get().orderElement(name.c_str()) + )); + return true; + } else if (name == "SPEC-RELATION-TYPE" && ! ns.empty()) + { + return true; + } else if (name == "SPECIFICAITON-TYPE" && ! ns.empty()) + { + s.m_parser = SHARED_PTR(new DescriptionParser(m_Project + , ::reqif::ElementFactory::get().orderElement(name.c_str()) + )); + return true; } return false; @@ -797,6 +878,167 @@ COMPLEX_PARSER(SpecObjectTypeParser, return l_ok; }) +// Spec Objects Type Parser Implementation + +// Spec Objects Type Parser Implementation +COMPLEX_PARSER(SpecObjectsParser, + { + // Not sure that I need sub element for the Type parser + if (name == "SPEC-OBJECT" && ! ns.empty()) + { + s.m_parser = SHARED_PTR(new SpecObjectParser(m_Project + , ::reqif::ElementFactory::get().orderElement(name.c_str()) + )); + return true; + } else { + ANTCC_PARSER_ERROR("SpecObjectsParser:startElement unsupported Element %s",name.c_str()); + } + return false; + + } + , + { + ANTCC_PARSER_DEBUG_TASK("SpecObjectsParser end %s size=%u" + ,name.c_str() + ,m_context.size()); + return true; + } + , + { + ANTCC_PARSER_DEBUG_TASK("SpecObjectsParser Attribute: %s-> %s" + ,name.c_str() + ,val.c_str()); + return l_ok; + }) + + + + + +COMPLEX_PARSER(SpecObjectParser, + { + // Not sure that I need sub element for the Type parser + if (name == "ALTERNATIVE-ID" && ! ns.empty()) + { + s.m_parser = SHARED_PTR(new TypeParser(m_Project + , ::reqif::ElementFactory::get().orderElement(name.c_str()) + )); + return true; + } else if (name == "VALUES" && ! ns.empty()) + { + s.m_parser = SHARED_PTR(new SpecObjectValuesParser(m_Project + , ::reqif::ElementFactory::get().orderElement(name.c_str()) + )); + return true; + } else if (name == "TYPE" && ! ns.empty()) + { + s.m_parser = SHARED_PTR(new DatatypeRefParser(m_Project + , ::reqif::ElementFactory::get().orderElement(name.c_str()) + )); + return true; + } else { + ANTCC_PARSER_ERROR("SpecObjectParser:startElement unsupported Element %s",name.c_str()); + } + return false; + + } + , + { + ANTCC_PARSER_DEBUG_TASK("SpecObjectParser end %s size=%u" + ,name.c_str() + ,m_context.size()); + return true; + } + , + { + ANTCC_PARSER_DEBUG_TASK("SpecObjectsParser Attribute: %s-> %s" + ,name.c_str() + ,val.c_str()); + return l_ok; + }) + +/* SPEC OBJECT VALUES Parser */ +COMPLEX_PARSER(SpecObjectValuesParser, + { + // Not sure that I need sub element for the Type parser + if ( (name == "ATTRIBUTE-VALUE-BOOLEAN" + || name == "ATTRIBUTE-VALUE-DATE" + || name == "ATTRIBUTE-VALUE-ENUMERATION" + || name == "ATTRIBUTE-VALUE-INTEGER" + || name == "ATTRIBUTE-VALUE-REAL" + || name == "ATTRIBUTE-VALUE-XHTML" + || name == "ATTRIBUTE-VALUE-STRING" ) + && ! ns.empty()) + { + s.m_parser = SHARED_PTR(new AttributeValueParser(m_Project + , ::reqif::ElementFactory::get().orderElement(name.c_str()) + )); + return true; + } else { + ANTCC_PARSER_ERROR("SpecObjectValuesParser:startElement unsupported Element %s",name.c_str()); + } + return false; + + } + , + { + ANTCC_PARSER_DEBUG_TASK("SpecObjectValuesParser end %s size=%u" + ,name.c_str() + ,m_context.size()); + return true; + } + , + { + ANTCC_PARSER_DEBUG_TASK("SpecObjectsParser Attribute: %s-> %s" + ,name.c_str() + ,val.c_str()); + return l_ok; + }) + +// Attribute Value Parser Implementation +COMPLEX_PARSER(AttributeValueParser, + { + if ( name == "DEFINITION" + && ! ns.empty()) + { + s.m_parser = SHARED_PTR(new DatatypeRefParser(m_Project + , ::reqif::ElementFactory::get().orderElement(name.c_str()) + )); + return true; + }else if ( name == "THE-VALUE" + && ! ns.empty()) + { + s.m_parser = SHARED_PTR(new DatatypeRefParser(m_Project + , ::reqif::ElementFactory::get().orderElement(name.c_str()) + )); + return true; + } else { + ANTCC_PARSER_ERROR("AttributeValuesParser:startElement unsupported Element %s",name.c_str()); + } + return false; + + } + , + { + ANTCC_PARSER_DEBUG_TASK("AttributeValueParser end %s size=%u" + ,name.c_str() + ,m_context.size()); + return true; + } + , + { + l_ok = false; + ANTCC_PARSER_DEBUG_TASK("AttributeValueParser Attribute: %s-> %s" + ,name.c_str() + ,val.c_str()); + if (name == "THE-VALUE") { + l_ok = true; + } + return l_ok; + }) + + + // Spec Object Type Parser Implementation COMPLEX_PARSER(SpecAttributesParser, { -- 2.30.2