30#include <wx/translation.h>
44 std::vector<wxString> subNodeChildrenToCount = { wxT(
"LIBRARY" ), wxT(
"PARTS" ),
58 for( ; cNode; cNode = cNode->
GetNext() )
60 if( cNode->GetName() == wxT(
"HEADER" ) )
71 wxASSERT_MSG(
true, wxT(
"Unknown File Resolution" ) );
75 else if( cNode->GetName() == wxT(
"ASSIGNMENTS" ) )
79 else if( cNode->GetName() == wxT(
"LIBRARY" ) )
83 else if( cNode->GetName() == wxT(
"DEFAULTS" ) )
89 else if( cNode->GetName() == wxT(
"PARTS" ) )
93 else if( cNode->GetName() == wxT(
"SHEETS" ) )
97 else if( cNode->GetName() == wxT(
"SCHEMATIC" ) )
101 else if( cNode->GetName() == wxT(
"DISPLAY" ) )
107 for( ; subNode; subNode = subNode->
GetNext() )
109 if( subNode->GetName() == wxT(
"ATTRCOLORS" ) )
113 else if( subNode->GetName() == wxT(
"SCMITEMCOLORS" ) )
117 for( ; sub2Node; sub2Node = sub2Node->
GetNext() )
119 if( sub2Node->GetName() == wxT(
"SYMCOL" ) )
123 for( ; sub3Node; sub3Node = sub3Node->
GetNext() )
125 if( sub3Node->GetName() == wxT(
"PARTNAMECOL" ) )
154 const wxString& aShapeStr )
156 if( aShapeStr == wxT(
"ANNULUS" ) )
158 else if( aShapeStr == wxT(
"BOX" ) )
160 else if( aShapeStr == wxT(
"BULLET" ) )
162 else if( aShapeStr == wxT(
"ROUND" ) )
164 else if( aShapeStr == wxT(
"CROSS" ) )
166 else if( aShapeStr == wxT(
"DIAMOND" ) )
168 else if( aShapeStr == wxT(
"FINGER" ) )
170 else if( aShapeStr == wxT(
"OCTAGON" ) )
172 else if( aShapeStr == wxT(
"PLUS" ) )
174 else if( aShapeStr == wxT(
"POINTER" ) )
176 else if( aShapeStr == wxT(
"RECTANGLE" ) )
178 else if( aShapeStr == wxT(
"ROUNDED" ) )
180 else if( aShapeStr == wxT(
"SQUARE" ) )
182 else if( aShapeStr == wxT(
"STAR" ) )
184 else if( aShapeStr == wxT(
"TRIANGLE" ) )
199 wxCHECK( IsTermShape( aNode ), );
235 wxASSERT_MSG(
false,
"Unknown terminal shape type" );
241 if( aNode->
GetChildren()->GetName() == wxT(
"ORIENT" ) )
257 wxCHECK( aNode->GetName() == wxT(
"TERMINALCODE" ), );
263 wxString location = wxString::Format(
"TERMINALCODE -> %s", Name );
265 for( ; cNode; cNode = cNode->
GetNext() )
267 wxString cNodeName = cNode->GetName();
270 Shape.Parse( cNode, aContext );
271 else if( cNodeName == wxT(
"FILLED" ) )
281 wxCHECK( aNode->GetName() == wxT(
"CODEDEFS" ), );
285 for( ; cNode; cNode = cNode->
GetNext() )
287 wxString nodeName = cNode->GetName();
289 if( ParseSubNode( cNode, aContext ) )
293 else if( nodeName == wxT(
"TERMINALCODE" ) )
296 termcode.
Parse( cNode, aContext );
297 TerminalCodes.insert( std::make_pair( termcode.
ID, termcode ) );
309 wxCHECK( aNode->GetName() == wxT(
"ASSIGNMENTS" ), );
312 bool settingsParsed =
false;
314 for( ; cNode; cNode = cNode->
GetNext() )
316 if( cNode->GetName() == wxT(
"CODEDEFS" ) )
318 Codedefs.Parse( cNode, aContext );
320 else if( cNode->GetName() == wxT(
"SETTINGS" ) )
322 settingsParsed =
true;
323 Settings.Parse( cNode, aContext );
325 else if( cNode->GetName() == wxT(
"GRIDS" ) )
327 Grids.Parse( cNode, aContext );
329 else if( cNode->GetName() == wxT(
"NETCLASSEDITATTRIBSETTINGS" ) )
331 NetclassEditAttributeSettings =
true;
333 else if( cNode->GetName() == wxT(
"SPCCLASSEDITATTRIBSETTINGS" ) )
335 SpacingclassEditAttributeSettings =
true;
343 if( !settingsParsed )
350 wxCHECK( aNode->GetName() == wxT(
"TERMINAL" ), );
356 wxString location = wxString::Format(
"TERMINAL %ld",
ID );
361 for( ; cNode; cNode = cNode->
GetNext() )
363 wxString cNodeName = cNode->GetName();
365 if( cNodeName == wxT(
"ORIENT" ) )
367 else if( cNodeName == wxT(
"PT" ) )
368 Position.Parse( cNode, aContext );
377 wxCHECK( aNode->GetName() == wxT(
"PINLABELLOC" )
378 || aNode->GetName() == wxT(
"PINNUMNAMELOC" ), );
386 for( ; cNode; cNode = cNode->
GetNext() )
388 if( ParseSubNode( cNode, aContext ) )
401 wxCHECK( aNode->GetName() == wxT(
"SYMDEF" ), );
403 ParseIdentifiers( aNode, aContext );
407 for( ; cNode; cNode = cNode->
GetNext() )
409 wxString cNodeName = cNode->GetName();
411 if( ParseSubNode( cNode, aContext ) )
415 else if( cNodeName == wxT(
"TERMINAL" ) )
418 term.
Parse( cNode, aContext );
419 Terminals.insert( std::make_pair( term.
ID, term ) );
421 else if( cNodeName == wxT(
"PINLABELLOC" ) )
424 loc.
Parse( cNode, aContext );
425 PinLabelLocations.insert( std::make_pair( loc.
TerminalID, loc ) );
427 else if( cNodeName == wxT(
"PINNUMNAMELOC" ) )
430 loc.
Parse( cNode, aContext );
431 PinNumberLocations.insert( std::make_pair( loc.
TerminalID, loc ) );
446 wxCHECK( aNode->GetName() == wxT(
"LIBRARY" ), );
450 for( ; cNode; cNode = cNode->
GetNext() )
452 wxString cNodeName = cNode->GetName();
454 if( cNodeName == wxT(
"SYMDEF" ) )
457 symdef.
Parse( cNode, aContext );
458 SymbolDefinitions.insert( std::make_pair( symdef.
ID, symdef ) );
460 else if( cNodeName == wxT(
"HIERARCHY" ) )
480 wxCHECK( aNode->GetName() == wxT(
"SHEETS" ), );
484 for( ; cNode; cNode = cNode->
GetNext() )
486 if( cNode->GetName() == wxT(
"SHEET" ) )
490 SheetNames.insert( std::make_pair(
id,
name ) );
491 SheetOrder.push_back(
id );
503 wxCHECK( aNode->GetName() == wxT(
"COMP" ), );
509 for( ; cNode; cNode = cNode->
GetNext() )
511 if( cNode->GetName() == wxT(
"READONLY" ) )
515 else if( cNode->GetName() == wxT(
"ATTRLOC" ) )
517 AttrLoc.Parse( cNode, aContext );
530 wxCHECK( aNode->GetName() == wxT(
"PARTREF" ), );
536 for( ; cNode; cNode = cNode->
GetNext() )
538 if( cNode->GetName() == wxT(
"READONLY" ) )
542 else if( cNode->GetName() == wxT(
"ATTRLOC" ) )
544 AttrLoc.Parse( cNode, aContext );
557 wxCHECK( aNode->GetName() == wxT(
"TERMATTR" ), );
563 for( ; cNode; cNode = cNode->
GetNext() )
565 if( cNode->GetName() == wxT(
"ATTR" ) )
568 val.
Parse( cNode, aContext );
569 Attributes.push_back( val );
581 wxCHECK( aNode->GetName() == wxT(
"SYMPINNAME" ) || aNode->GetName() == wxT(
"SYMPINLABEL" ), );
588 for( ; cNode; cNode = cNode->
GetNext() )
590 if( cNode->GetName() == wxT(
"ATTRLOC" ) )
592 AttrLoc.Parse( cNode, aContext );
605 wxCHECK( aNode->GetName() == wxT(
"PINNUM" ), );
612 for( ; cNode; cNode = cNode->
GetNext() )
614 if( cNode->GetName() == wxT(
"ATTRLOC" ) )
616 AttrLoc.Parse( cNode, aContext );
629 wxCHECK( aNode->GetName() == wxT(
"SYMBOLVARIANT" ), );
633 for( ; cNode; cNode = cNode->
GetNext() )
635 wxString cNodeName = cNode->GetName();
637 if( cNodeName == wxT(
"SIGNALREF" ) )
639 Type = TYPE::SIGNALREF;
642 else if( cNodeName == wxT(
"GLOBALSIGNAL" ) )
644 Type = TYPE::GLOBALSIGNAL;
647 else if( cNodeName == wxT(
"TESTPOINT" ) )
649 Type = TYPE::TESTPOINT;
662 wxCHECK( aNode->GetName() == wxT(
"SIGNALREFERENCELINK" ), );
670 for( ; cNode; cNode = cNode->
GetNext() )
672 if( ParseSubNode( cNode, aContext ) )
674 else if( cNode->GetName() == wxT(
"SIGREFTEXT" ) )
687 wxCHECK( aNode->GetName() == wxT(
"SYMBOL" ), );
694 bool originParsed =
false;
695 wxString location = wxString::Format(
"SYMBOL -> %s",
ID );
697 for( ; cNode; cNode = cNode->
GetNext() )
699 wxString cNodeName = cNode->GetName();
701 if( !originParsed && cNodeName == wxT(
"PT" ) )
703 Origin.Parse( cNode, aContext );
706 else if( cNodeName == wxT(
"COMP" ) )
708 ComponentRef.Parse( cNode, aContext );
711 else if( cNodeName == wxT(
"PARTREF" ) )
713 PartRef.Parse( cNode, aContext );
716 else if( cNodeName == wxT(
"PARTNAMENOTVISIBLE" ) )
718 PartNameVisible =
false;
720 else if( cNodeName == wxT(
"VSYMMASTER" ) )
725 else if( cNodeName == wxT(
"GROUPREF" ) )
729 else if( cNodeName == wxT(
"REUSEBLOCKREF" ) )
731 ReuseBlockRef.Parse( cNode, aContext );
733 else if( cNodeName == wxT(
"SIGNALREFERENCELINK" ) )
735 SigRefLink.Parse( cNode, aContext );
737 else if( cNodeName == wxT(
"ORIENT" ) )
741 else if( cNodeName == wxT(
"MIRROR" ) )
745 else if( cNodeName == wxT(
"FIX" ) )
749 else if( cNodeName == wxT(
"SCALE" ) )
754 else if( cNodeName == wxT(
"READABILITY" ) )
758 else if( cNodeName == wxT(
"GATE" ) )
762 else if( cNodeName == wxT(
"SYMBOLVARIANT" ) )
764 IsSymbolVariant =
true;
765 SymbolVariant.Parse( cNode, aContext );
767 else if( cNodeName == wxT(
"TERMATTR" ) )
770 termattr.
Parse( cNode, aContext );
771 TerminalAttributes.insert( std::make_pair( termattr.
TerminalID, termattr ) );
773 else if( cNodeName == wxT(
"SYMPINLABEL" ) )
776 sympinname.
Parse( cNode, aContext );
777 PinLabels.insert( std::make_pair( sympinname.
TerminalID, sympinname ) );
779 else if( cNodeName == wxT(
"SYMPINNAME" ) )
782 sympinname.
Parse( cNode, aContext );
783 PinNames.insert( std::make_pair( sympinname.
TerminalID, sympinname ) );
785 else if( cNodeName == wxT(
"PINNUM" ) )
788 pinNum.
Parse( cNode, aContext );
789 PinNumbers.insert( std::make_pair( pinNum.
TerminalID, pinNum ) );
791 else if( cNodeName == wxT(
"ATTR" ) )
794 attrVal.
Parse( cNode, aContext );
795 AttributeValues.insert( std::make_pair( attrVal.
AttributeID, attrVal ) );
810 wxCHECK( aNode->GetName() == wxT(
"SIGLOC" ), );
817 for( ; cNode; cNode = cNode->
GetNext() )
819 if( ParseSubNode( cNode, aContext ) )
832 wxCHECK( aNode->GetName() == wxT(
"BUS" ), );
840 for( ; cNode; cNode = cNode->
GetNext() )
842 wxString cNodeName = cNode->GetName();
844 if( SHAPE::IsShape( cNode ) )
846 Shape.Parse( cNode, aContext );
848 else if( cNodeName == wxT(
"BUSNAME" ) )
856 if( subNode->GetName() == wxT(
"SIGLOC" ) )
858 BusLabel.Parse( subNode, aContext );
877 wxCHECK( aNode->GetName() == wxT(
"BLOCK" ), );
884 for( ; cNode; cNode = cNode->
GetNext() )
886 wxString cNodeName = cNode->GetName();
888 if( cNodeName == wxT(
"CLONE" ) )
892 else if( cNodeName == wxT(
"PARENT" ) )
897 else if( cNodeName == wxT(
"CHILD" ) )
902 else if( cNodeName == wxT(
"BLOCKNAME" ) )
909 if( subNode->GetName() == wxT(
"ATTRLOC" ) )
911 BlockLabel.Parse( subNode, aContext );
912 HasBlockLabel =
true;
920 else if( cNodeName == wxT(
"TERMINAL" ) )
923 term.
Parse( cNode, aContext );
924 Terminals.insert( std::make_pair( term.
ID, term ) );
926 else if( cNodeName == wxT(
"FIGURE" ) )
929 figure.
Parse( cNode, aContext );
930 Figures.insert( std::make_pair( figure.
ID, figure ) );
942 wxASSERT( aNode->GetName() == wxT(
"TERM" ) );
951 for( ; cNode; cNode = cNode->
GetNext() )
953 wxString cNodeName = cNode->GetName();
955 if( cNodeName == wxT(
"SIGLOC" ) )
957 NetLabel.Parse( cNode, aContext );
970 wxASSERT( aNode->GetName() == wxT(
"BUSTERM" ) );
977 bool firstPointParsed =
false;
978 bool secondPointParsed =
false;
980 for( ; cNode; cNode = cNode->
GetNext() )
982 wxString cNodeName = cNode->GetName();
984 if( cNodeName == wxT(
"SIGLOC" ) )
986 NetLabel.Parse( cNode, aContext );
989 else if( cNodeName == wxT(
"PT" ) )
991 if( !firstPointParsed )
993 FirstPoint.Parse( cNode, aContext );
994 firstPointParsed =
true;
996 else if( !secondPointParsed )
998 SecondPoint.Parse( cNode, aContext );
999 secondPointParsed =
true;
1012 if( !firstPointParsed || !secondPointParsed )
1019 wxASSERT( aNode->GetName() == wxT(
"BLOCKTERM" ) );
1027 for( ; cNode; cNode = cNode->
GetNext() )
1029 wxString cNodeName = cNode->GetName();
1031 if( cNodeName == wxT(
"SIGLOC" ) )
1033 NetLabel.Parse( cNode, aContext );
1046 ParseIdentifiers( aNode, aContext );
1051 for( ; cNode; cNode = cNode->
GetNext() )
1053 wxString cNodeName = cNode->GetName();
1055 if( ParseSubNode( cNode, aContext ) )
1059 else if( cNodeName == wxT(
"PATH" ) )
1063 else if( cNodeName == wxT(
"GROUPREF" ) )
1067 else if( cNodeName == wxT(
"REUSEBLOCKREF" ) )
1069 ReuseBlockRef.Parse( cNode, aContext );
1071 else if( cNodeName == wxT(
"CONLINECODE" ) )
1085 ParseIdentifiers( aNode, aContext );
1090 for( ; cNode; cNode = cNode->
GetNext() )
1092 wxString cNodeName = cNode->GetName();
1094 if( cNodeName == wxT(
"JPT" ) )
1097 jpt.
Parse( cNode, aContext );
1098 Junctions.insert( std::make_pair( jpt.
ID, jpt ) );
1100 else if( ParseSubNode( cNode, aContext ) )
1104 else if( cNodeName == wxT(
"TERM" ) )
1107 pin.Parse( cNode, aContext );
1108 Terminals.insert( std::make_pair(
pin.ID,
pin ) );
1110 else if( cNodeName == wxT(
"BUSTERM" ) )
1113 bt.
Parse( cNode, aContext );
1114 BusTerminals.insert( std::make_pair( bt.
ID, bt ) );
1116 else if( cNodeName == wxT(
"BLOCKTERM" ) )
1119 bt.
Parse( cNode, aContext );
1120 BlockTerminals.insert( std::make_pair( bt.
ID, bt ) );
1122 else if( cNodeName == wxT(
"DANGLER" ) )
1125 dang.
Parse( cNode, aContext );
1126 Danglers.insert( std::make_pair( dang.
ID, dang ) );
1128 else if( cNodeName == wxT(
"CONN" ) )
1131 conn.
Parse( cNode, aContext );
1132 Connections.push_back( conn );
1144 wxCHECK( aNode->GetName() == wxT(
"SCHEMATIC" ), );
1148 for( ; cNode; cNode = cNode->
GetNext() )
1150 wxString cNodeName = cNode->GetName();
1152 if( cNodeName == wxT(
"GROUP" ) )
1155 group.Parse( cNode, aContext );
1156 Groups.insert( std::make_pair(
group.ID,
group ) );
1158 else if( cNodeName == wxT(
"REUSEBLOCK" ) )
1161 reuseblock.
Parse( cNode, aContext );
1162 ReuseBlocks.insert( std::make_pair( reuseblock.
ID, reuseblock ) );
1164 else if( cNodeName == wxT(
"FIGURE" ) )
1167 figure.
Parse( cNode, aContext );
1168 Figures.insert( std::make_pair( figure.
ID, figure ) );
1170 else if( cNodeName == wxT(
"SYMBOL" ) )
1173 sym.
Parse( cNode, aContext );
1174 Symbols.insert( std::make_pair( sym.
ID, sym ) );
1176 else if( cNodeName == wxT(
"BUS" ) )
1179 bus.
Parse( cNode, aContext );
1180 Buses.insert( std::make_pair( bus.
ID, bus ) );
1182 else if( cNodeName == wxT(
"BLOCK" ) )
1185 block.
Parse( cNode, aContext );
1186 Blocks.insert( std::make_pair( block.
ID, block ) );
1188 else if( cNodeName == wxT(
"NET" ) )
1191 net.
Parse( cNode, aContext );
1192 Nets.insert( std::make_pair( net.
ID, net ) );
1194 else if( cNodeName == wxT(
"TEXT" ) )
1197 txt.
Parse( cNode, aContext );
1198 Texts.insert( std::make_pair( txt.
ID, txt ) );
1200 else if( cNodeName == wxT(
"DOCSYMBOL" ) )
1203 docsym.
Parse( cNode, aContext );
1204 DocumentationSymbols.insert( std::make_pair( docsym.
ID, docsym ) );
1206 else if( cNodeName == wxT(
"VHIERARCHY" ) )
1208 VariantHierarchy.Parse( cNode, aContext );
1222 ParseIdentifiers( aNode, aContext );
1229 for( ; cNode; cNode = cNode->
GetNext() )
1231 if( ParseSubNode( cNode, aContext ) )
1235 else if( cNode->GetName() == wxT(
"SIGLOC" ) )
1237 NetLabel.Parse( cNode, aContext );
1251 wxASSERT( aNode->GetName() == wxT(
"DANGLER" ) );
1258 bool positionParsed =
false;
1260 for( ; cNode; cNode = cNode->
GetNext() )
1262 wxString cNodeName = cNode->GetName();
1264 if( cNodeName == wxT(
"SIGLOC" ) )
1266 NetLabel.Parse( cNode, aContext );
1269 else if( !positionParsed && cNodeName == wxT(
"PT" ) )
1271 Position.Parse( cNode, aContext );
1272 positionParsed =
true;
constexpr double SCH_IU_PER_MM
#define THROW_MISSING_NODE_IO_ERROR(nodename, location)
#define THROW_UNKNOWN_NODE_IO_ERROR(nodename, location)
#define THROW_MISSING_PARAMETER_IO_ERROR(param, location)
static const long UNDEFINED_VALUE
static void CheckNoNextNodes(XNODE *aNode)
static XNODE * LoadArchiveFile(const wxString &aFileName, const wxString &aFileTypeIdentifier, PROGRESS_REPORTER *aProgressReporter=nullptr)
Reads a CADSTAR Archive file (S-parameter format)
wxString LAYER_ID
ID of a Sheet (if schematic) or board Layer (if PCB)
static wxString GetXmlAttributeIDString(XNODE *aNode, unsigned int aID, bool aIsRequired=true)
void checkPoint()
Updates m_progressReporter or throws if user cancelled.
static READABILITY ParseReadability(XNODE *aNode)
static std::vector< POINT > ParseAllChildPoints(XNODE *aNode, PARSER_CONTEXT *aContext, bool aTestAllChildNodes=false, int aExpectedNumPoints=UNDEFINED_VALUE)
if no children are present, it just returns an empty vector (without throwing an exception)
static long GetXmlAttributeIDLong(XNODE *aNode, unsigned int aID, bool aIsRequired=true)
static long GetNumberOfStepsForReporting(XNODE *aRootNode, std::vector< wxString > aSubNodeChildrenToCount)
PROGRESS_REPORTER * m_progressReporter
ASSIGNMENTS_SCM Assignments
CADSTAR_SCHEMATIC Schematic
@ UNDEFINED
Only used for error checking (not a real shape)
@ ROUNDED_RECT
Keyword "ROUNDED".
int KiCadUnitDivider
Use this value to convert units in this CSA file to KiCad units.
PARTNAMECOL SymbolPartNameColor
static TERMINAL_SHAPE_TYPE ParseTermShapeType(const wxString &aShapeStr)
void Parse()
Parses the file.
virtual void BeginPhase(int aPhase)=0
Initialize the aPhase virtual zone of the dialog progress bar.
virtual void SetMaxProgress(int aMaxProgress)=0
Fix the value that gives the 100 percent progress bar length (inside the current virtual zone).
Hold an XML or S-expression element.
XNODE * GetChildren() const
This file contains miscellaneous commonly used macros and functions.
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
DOCUMENTATION_SYMBOL_ID ID
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
NETELEMENT_ID ID
First character is "J".
std::function< void()> CheckPointCallback
Callback function to report progress.
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
< "BLOCKTERM" nodename (represents a connection to a block)
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
NETELEMENT_ID ID
First four characters "BLKT".
< "BUSTERM" nodename (represents a connection to a bus)
NETELEMENT_ID ID
First two characters "BT".
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
< "DANGLER" nodename (represents a dangling wire)
NETELEMENT_ID ID
First character "D".
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
< "TERM" nodename (represents a pin in a SCH symbol)
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
static bool IsTermShape(XNODE *aNode)
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override