move PCB_PARSER into PCB_IO as a member
This commit is contained in:
parent
484eb55ae8
commit
5634bc3381
|
@ -204,12 +204,14 @@ public:
|
||||||
*
|
*
|
||||||
* @param aKeywordTable is an array of KEYWORDS holding \a aKeywordCount. This
|
* @param aKeywordTable is an array of KEYWORDS holding \a aKeywordCount. This
|
||||||
* token table need not contain the lexer separators such as '(' ')', etc.
|
* token table need not contain the lexer separators such as '(' ')', etc.
|
||||||
|
*
|
||||||
* @param aKeywordCount is the count of tokens in aKeywordTable.
|
* @param aKeywordCount is the count of tokens in aKeywordTable.
|
||||||
|
*
|
||||||
* @param aLineReader is any subclassed instance of LINE_READER, such as
|
* @param aLineReader is any subclassed instance of LINE_READER, such as
|
||||||
* STRING_LINE_READER or FILE_LINE_READER.
|
* STRING_LINE_READER or FILE_LINE_READER. No ownership is taken.
|
||||||
*/
|
*/
|
||||||
DSNLEXER( const KEYWORD* aKeywordTable, unsigned aKeywordCount,
|
DSNLEXER( const KEYWORD* aKeywordTable, unsigned aKeywordCount,
|
||||||
LINE_READER* aLineReader );
|
LINE_READER* aLineReader = NULL );
|
||||||
|
|
||||||
virtual ~DSNLEXER();
|
virtual ~DSNLEXER();
|
||||||
|
|
||||||
|
|
|
@ -241,11 +241,12 @@ void FP_CACHE::Load()
|
||||||
|
|
||||||
// reader now owns fp, will close on exception or return
|
// reader now owns fp, will close on exception or return
|
||||||
FILE_LINE_READER reader( fp, fpFileName );
|
FILE_LINE_READER reader( fp, fpFileName );
|
||||||
PCB_PARSER parser( &reader );
|
|
||||||
|
m_owner->m_parser->SetLineReader( &reader );
|
||||||
|
|
||||||
std::string name = TO_UTF8( fpFileName );
|
std::string name = TO_UTF8( fpFileName );
|
||||||
|
|
||||||
m_modules.insert( name, new FP_CACHE_ITEM( (MODULE*) parser.Parse(), fpFileName ) );
|
m_modules.insert( name, new FP_CACHE_ITEM( (MODULE*) m_owner->m_parser->Parse(), fpFileName ) );
|
||||||
|
|
||||||
} while( dir.GetNext( &fpFileName ) );
|
} while( dir.GetNext( &fpFileName ) );
|
||||||
|
|
||||||
|
@ -339,9 +340,9 @@ BOARD_ITEM* PCB_IO::Parse( const wxString& aClipboardSourceInput ) throw( IO_ERR
|
||||||
|
|
||||||
STRING_LINE_READER reader( input, wxT( "clipboard" ) );
|
STRING_LINE_READER reader( input, wxT( "clipboard" ) );
|
||||||
|
|
||||||
PCB_PARSER parser( &reader );
|
m_parser->SetLineReader( &reader );
|
||||||
|
|
||||||
return parser.Parse();
|
return m_parser->Parse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1466,7 +1467,8 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const
|
||||||
|
|
||||||
PCB_IO::PCB_IO() :
|
PCB_IO::PCB_IO() :
|
||||||
m_cache( 0 ),
|
m_cache( 0 ),
|
||||||
m_ctl( 0 )
|
m_ctl( 0 ),
|
||||||
|
m_parser( new PCB_PARSER() )
|
||||||
{
|
{
|
||||||
init( 0 );
|
init( 0 );
|
||||||
m_out = &m_sf;
|
m_out = &m_sf;
|
||||||
|
@ -1475,7 +1477,8 @@ PCB_IO::PCB_IO() :
|
||||||
|
|
||||||
PCB_IO::PCB_IO( int aControlFlags ) :
|
PCB_IO::PCB_IO( int aControlFlags ) :
|
||||||
m_cache( 0 ),
|
m_cache( 0 ),
|
||||||
m_ctl( aControlFlags )
|
m_ctl( aControlFlags ),
|
||||||
|
m_parser( new PCB_PARSER() )
|
||||||
{
|
{
|
||||||
init( 0 );
|
init( 0 );
|
||||||
m_out = &m_sf;
|
m_out = &m_sf;
|
||||||
|
@ -1485,6 +1488,7 @@ PCB_IO::PCB_IO( int aControlFlags ) :
|
||||||
PCB_IO::~PCB_IO()
|
PCB_IO::~PCB_IO()
|
||||||
{
|
{
|
||||||
delete m_cache;
|
delete m_cache;
|
||||||
|
delete m_parser;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1499,9 +1503,11 @@ BOARD* PCB_IO::Load( const wxString& aFileName, BOARD* aAppendToMe, PROPERTIES*
|
||||||
}
|
}
|
||||||
|
|
||||||
FILE_LINE_READER reader( file.fp(), aFileName );
|
FILE_LINE_READER reader( file.fp(), aFileName );
|
||||||
PCB_PARSER parser( &reader, aAppendToMe );
|
|
||||||
|
|
||||||
BOARD* board = dynamic_cast<BOARD*>( parser.Parse() );
|
m_parser->SetLineReader( &reader );
|
||||||
|
m_parser->SetBoard( aAppendToMe );
|
||||||
|
|
||||||
|
BOARD* board = dynamic_cast<BOARD*>( m_parser->Parse() );
|
||||||
wxASSERT( board );
|
wxASSERT( board );
|
||||||
|
|
||||||
// Give the filename to the board if it's new
|
// Give the filename to the board if it's new
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
class BOARD;
|
class BOARD;
|
||||||
class BOARD_ITEM;
|
class BOARD_ITEM;
|
||||||
class FP_CACHE;
|
class FP_CACHE;
|
||||||
|
class PCB_PARSER;
|
||||||
|
|
||||||
|
|
||||||
/** Current s-expression file format version. 2 was the last legacy format version. */
|
/** Current s-expression file format version. 2 was the last legacy format version. */
|
||||||
|
@ -47,6 +48,8 @@ class FP_CACHE;
|
||||||
*/
|
*/
|
||||||
class PCB_IO : public PLUGIN
|
class PCB_IO : public PLUGIN
|
||||||
{
|
{
|
||||||
|
friend class FP_CACHE;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -133,6 +136,7 @@ protected:
|
||||||
STRING_FORMATTER m_sf;
|
STRING_FORMATTER m_sf;
|
||||||
OUTPUTFORMATTER* m_out; ///< output any Format()s to this, no ownership
|
OUTPUTFORMATTER* m_out; ///< output any Format()s to this, no ownership
|
||||||
int m_ctl;
|
int m_ctl;
|
||||||
|
PCB_PARSER* m_parser;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -51,6 +51,15 @@
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
void PCB_PARSER::init()
|
||||||
|
{
|
||||||
|
m_layerMap.clear();
|
||||||
|
|
||||||
|
// @todo add default layernames here.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
double PCB_PARSER::parseDouble() throw( IO_ERROR )
|
double PCB_PARSER::parseDouble() throw( IO_ERROR )
|
||||||
{
|
{
|
||||||
char* tmp;
|
char* tmp;
|
||||||
|
|
|
@ -66,6 +66,15 @@ class PCB_PARSER : public PCB_LEXER
|
||||||
BOARD* m_board;
|
BOARD* m_board;
|
||||||
LAYER_HASH_MAP m_layerMap; //< Map layer name to it's index saved in BOARD::m_Layer.
|
LAYER_HASH_MAP m_layerMap; //< Map layer name to it's index saved in BOARD::m_Layer.
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function init
|
||||||
|
* clears and re-establishes m_layerMap with the default layer names.
|
||||||
|
* m_layerMap will have some of its entries overwritten whenever a (new) board
|
||||||
|
* is encountered.
|
||||||
|
*/
|
||||||
|
void init();
|
||||||
|
|
||||||
void parseHeader() throw( IO_ERROR, PARSE_ERROR );
|
void parseHeader() throw( IO_ERROR, PARSE_ERROR );
|
||||||
void parseGeneralSection() throw( IO_ERROR, PARSE_ERROR );
|
void parseGeneralSection() throw( IO_ERROR, PARSE_ERROR );
|
||||||
void parsePAGE_INFO() throw( IO_ERROR, PARSE_ERROR );
|
void parsePAGE_INFO() throw( IO_ERROR, PARSE_ERROR );
|
||||||
|
@ -204,13 +213,35 @@ class PCB_PARSER : public PCB_LEXER
|
||||||
|
|
||||||
bool parseBool() throw( PARSE_ERROR );
|
bool parseBool() throw( PARSE_ERROR );
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PCB_PARSER( LINE_READER* aReader, BOARD* aBoard = NULL ) :
|
|
||||||
|
PCB_PARSER( LINE_READER* aReader = NULL ) :
|
||||||
PCB_LEXER( aReader ),
|
PCB_LEXER( aReader ),
|
||||||
m_board( aBoard )
|
m_board( 0 )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Functoin SetLineReader
|
||||||
|
* sets @a aLineReader into the parser, and returns the previous one, if any.
|
||||||
|
* @param aReader is what to read from for tokens, no ownership is received.
|
||||||
|
* @return LINE_READER* - previous LINE_READER or NULL if none.
|
||||||
|
*/
|
||||||
|
LINE_READER* SetLineReader( LINE_READER* aReader )
|
||||||
|
{
|
||||||
|
LINE_READER* ret = PopReader();
|
||||||
|
PushReader( aReader );
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetBoard( BOARD* aBoard )
|
||||||
|
{
|
||||||
|
init();
|
||||||
|
m_board = aBoard;
|
||||||
|
}
|
||||||
|
|
||||||
BOARD_ITEM* Parse() throw( IO_ERROR, PARSE_ERROR );
|
BOARD_ITEM* Parse() throw( IO_ERROR, PARSE_ERROR );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue