CADSTAR Schematic Archive Importer: Parse missing TERMATTR node

This commit is contained in:
Roberto Fernandez Bautista 2020-11-15 14:42:01 +00:00 committed by jean-pierre charras
parent 8633410bec
commit 73ad503db3
2 changed files with 44 additions and 4 deletions

View File

@ -455,7 +455,7 @@ void CADSTAR_SCH_ARCHIVE_PARSER::COMP::Parse( XNODE* aNode )
}
else
{
THROW_UNKNOWN_NODE_IO_ERROR( cNode->GetName(), wxT( "ATTR" ) );
THROW_UNKNOWN_NODE_IO_ERROR( cNode->GetName(), aNode->GetName() );
}
}
}
@ -482,7 +482,31 @@ void CADSTAR_SCH_ARCHIVE_PARSER::PARTREF::Parse( XNODE* aNode )
}
else
{
THROW_UNKNOWN_NODE_IO_ERROR( cNode->GetName(), wxT( "ATTR" ) );
THROW_UNKNOWN_NODE_IO_ERROR( cNode->GetName(), aNode->GetName() );
}
}
}
void CADSTAR_SCH_ARCHIVE_PARSER::TERMATTR::Parse( XNODE* aNode )
{
wxCHECK( aNode->GetName() == wxT( "TERMATTR" ), /* void */ );
TerminalID = GetXmlAttributeIDLong( aNode, 0 );
XNODE* cNode = aNode->GetChildren();
bool attrParsed = false;
for( ; cNode; cNode = cNode->GetNext() )
{
if( !attrParsed && cNode->GetName() == wxT( "ATTR" ) )
{
Value.Parse( cNode );
attrParsed = true;
}
else
{
THROW_UNKNOWN_NODE_IO_ERROR( cNode->GetName(), aNode->GetName() );
}
}
}
@ -506,7 +530,7 @@ void CADSTAR_SCH_ARCHIVE_PARSER::SYMPINNAME_LABEL::Parse( XNODE* aNode )
}
else
{
THROW_UNKNOWN_NODE_IO_ERROR( cNode->GetName(), wxT( "ATTR" ) );
THROW_UNKNOWN_NODE_IO_ERROR( cNode->GetName(), aNode->GetName() );
}
}
}
@ -530,7 +554,7 @@ void CADSTAR_SCH_ARCHIVE_PARSER::SYMBOL::PIN_NUM::Parse( XNODE* aNode )
}
else
{
THROW_UNKNOWN_NODE_IO_ERROR( cNode->GetName(), wxT( "ATTR" ) );
THROW_UNKNOWN_NODE_IO_ERROR( cNode->GetName(), aNode->GetName() );
}
}
}
@ -666,6 +690,12 @@ void CADSTAR_SCH_ARCHIVE_PARSER::SYMBOL::Parse( XNODE* aNode )
IsSymbolVariant = true;
SymbolVariant.Parse( cNode );
}
else if( cNodeName == wxT( "TERMATTR" ) )
{
TERMATTR termattr;
termattr.Parse( cNode );
TerminalAttributes.insert( std::make_pair( termattr.TerminalID, termattr ) );
}
else if( cNodeName == wxT( "SYMPINLABEL" ) )
{
SYMPINNAME_LABEL sympinname;

View File

@ -194,6 +194,15 @@ public:
};
struct TERMATTR
{
TERMINAL_ID TerminalID;
ATTRIBUTE_VALUE Value;
void Parse( XNODE* aNode );
};
struct SYMPINNAME_LABEL
{
TERMINAL_ID TerminalID;
@ -269,6 +278,7 @@ public:
SYMBOL_ID VariantParentSymbolID = wxEmptyString;
VARIANT_ID VariantID = wxEmptyString;
std::map<TERMINAL_ID, TERMATTR> TerminalAttributes;
std::map<TERMINAL_ID, SYMPINNAME_LABEL> PinLabels;
std::map<TERMINAL_ID, SYMPINNAME_LABEL> PinNames;
std::map<TERMINAL_ID, PIN_NUM> PinNumbers;