void NETLIST_READER_KICAD_PARSER::ParseNet( BOARD * aBrd ) throw( IO_ERROR, PARSE_ERROR ) { /* Parses a section like * (net (code 20) (name /PC-A0) * (node (ref BUS1) (pin 62)) * (node (ref U3) (pin 3)) * (node (ref U9) (pin M6))) */ wxString code; wxString name; wxString cmpref; wxString pin; int nodecount = 0; std::vector<D_PAD*> padList; // The token net was read, so the next data is (code <number>) while( (token = NextTok()) != T_RIGHT ) { if( token == T_LEFT ) token = NextTok(); switch( token ) { case T_code: NeedSYMBOLorNUMBER(); code = FROM_UTF8( CurText() ); NeedRIGHT(); break; case T_name: NeedSYMBOLorNUMBER(); name = FROM_UTF8( CurText() ); NeedRIGHT(); if( name.IsEmpty() ) // Give a dummy net name like N-000109 name = wxT("N-00000") + code; break; case T_node: while( (token = NextTok()) != T_RIGHT ) { if( token == T_LEFT ) token = NextTok(); switch( token ) { case T_ref: NeedSYMBOLorNUMBER(); cmpref = FROM_UTF8( CurText() ); NeedRIGHT(); break; case T_pin: NeedSYMBOLorNUMBER(); pin = FROM_UTF8( CurText() ); NeedRIGHT(); break; default: SkipCurrent(); break; } } netlist_reader->SetPadsNetName( cmpref, pin, name, padList ); nodecount++; break; default: SkipCurrent(); break; } } // When there is only one item in net, clear pad netname // Remember one can have more than one pad in list, because a footprint // can have many pads with the same pad name if( nodecount < 2 ) for( unsigned ii = 0; ii < padList.size(); ii++ ) padList[ii]->SetNetname( wxEmptyString ); }