filter_reader.cpp
This commit is contained in:
parent
2a60327545
commit
2dd1287141
|
@ -111,7 +111,7 @@ void DSNLEXER::PushReader( LINE_READER* aLineReader )
|
||||||
{
|
{
|
||||||
readerStack.push_back( aLineReader );
|
readerStack.push_back( aLineReader );
|
||||||
reader = aLineReader;
|
reader = aLineReader;
|
||||||
start = (char*) (*reader);
|
start = (const char*) (*reader);
|
||||||
|
|
||||||
// force a new readLine() as first thing.
|
// force a new readLine() as first thing.
|
||||||
limit = start;
|
limit = start;
|
||||||
|
@ -127,7 +127,7 @@ bool DSNLEXER::PopReader()
|
||||||
readerStack.pop_back();
|
readerStack.pop_back();
|
||||||
|
|
||||||
reader = readerStack.back();
|
reader = readerStack.back();
|
||||||
start = (char*) (*reader);
|
start = (const char*) (*reader);
|
||||||
|
|
||||||
// force a new readLine() as first thing.
|
// force a new readLine() as first thing.
|
||||||
limit = start;
|
limit = start;
|
||||||
|
@ -336,8 +336,8 @@ static inline bool isSpace( int cc )
|
||||||
|
|
||||||
int DSNLEXER::NextTok() throw( IO_ERROR )
|
int DSNLEXER::NextTok() throw( IO_ERROR )
|
||||||
{
|
{
|
||||||
char* cur = next;
|
const char* cur = next;
|
||||||
char* head = cur;
|
const char* head = cur;
|
||||||
|
|
||||||
prevTok = curTok;
|
prevTok = curTok;
|
||||||
|
|
||||||
|
|
|
@ -107,12 +107,12 @@ unsigned FILE_LINE_READER::ReadLine() throw( IO_ERROR )
|
||||||
length = 0;
|
length = 0;
|
||||||
line[0] = 0;
|
line[0] = 0;
|
||||||
|
|
||||||
// fgets always put a terminating nul at end of its read.
|
// fgets always puts a terminating nul at end of its read.
|
||||||
while( fgets( line + length, capacity - length, fp ) )
|
while( fgets( line + length, capacity - length, fp ) )
|
||||||
{
|
{
|
||||||
length += strlen( line + length );
|
length += strlen( line + length );
|
||||||
|
|
||||||
if( length == maxLineLength )
|
if( length >= maxLineLength )
|
||||||
THROW_IO_ERROR( _("Line length exceeded") );
|
THROW_IO_ERROR( _("Line length exceeded") );
|
||||||
|
|
||||||
// a normal line breaks here, once through while loop
|
// a normal line breaks here, once through while loop
|
||||||
|
@ -122,11 +122,9 @@ unsigned FILE_LINE_READER::ReadLine() throw( IO_ERROR )
|
||||||
expandCapacity( capacity * 2 );
|
expandCapacity( capacity * 2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if( length ) RHH: this may now refer to a non-existent line but
|
// lineNum is incremented even if there was no line read, because this
|
||||||
* that leads to better error reporting on unexpected end of file.
|
// leads to better error reporting when we hit an end of file.
|
||||||
*/
|
++lineNum;
|
||||||
|
|
||||||
++lineNum;
|
|
||||||
|
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,7 +91,7 @@ int WinEDA_CvpcbFrame::ReadSchematicNetlist()
|
||||||
char alim[1024];
|
char alim[1024];
|
||||||
int idx, jj, k, l;
|
int idx, jj, k, l;
|
||||||
char cbuffer[BUFFER_CHAR_SIZE]; /* temporary storage */
|
char cbuffer[BUFFER_CHAR_SIZE]; /* temporary storage */
|
||||||
char* ptchar;
|
char* ptchar;
|
||||||
COMPONENT* Cmp;
|
COMPONENT* Cmp;
|
||||||
FILE* source;
|
FILE* source;
|
||||||
|
|
||||||
|
@ -114,8 +114,11 @@ int WinEDA_CvpcbFrame::ReadSchematicNetlist()
|
||||||
}
|
}
|
||||||
|
|
||||||
// FILE_LINE_READER will close the file.
|
// FILE_LINE_READER will close the file.
|
||||||
FILE_LINE_READER netlistReader( source, m_NetlistFileName.GetFullPath(), BUFFER_CHAR_SIZE );
|
FILE_LINE_READER netlistReader( source, m_NetlistFileName.GetFullPath() );
|
||||||
char* Line = netlistReader;
|
|
||||||
|
// hopes netlistReader's line buffer does not move. It won't unless you encounter
|
||||||
|
// a line larger than LINE_READER_LINE_INITIAL_SIZE = 5000
|
||||||
|
const char* Line = netlistReader.Line();
|
||||||
|
|
||||||
/* Read the file header (must be "( { OrCAD PCB" or "({ OrCAD PCB" )
|
/* Read the file header (must be "( { OrCAD PCB" or "({ OrCAD PCB" )
|
||||||
* or "# EESchema Netlist"
|
* or "# EESchema Netlist"
|
||||||
|
@ -194,11 +197,11 @@ int WinEDA_CvpcbFrame::ReadSchematicNetlist()
|
||||||
|
|
||||||
/* idx points the component value.
|
/* idx points the component value.
|
||||||
* Read value */
|
* Read value */
|
||||||
ptchar = strstr( &Line[idx], " " ); // Search end of value field (space)
|
ptchar = strstr( (char*) &Line[idx], " " ); // Search end of value field (space)
|
||||||
if( ptchar == 0 )
|
if( ptchar == 0 )
|
||||||
{
|
{
|
||||||
wxString msg;
|
wxString msg;
|
||||||
msg.Printf( _( "Netlist error: %s" ), Line );
|
msg.Printf( _( "Netlist error: %s" ), (const wxChar*) CONV_FROM_UTF8( Line ) );
|
||||||
DisplayError( this, msg );
|
DisplayError( this, msg );
|
||||||
k = 0;
|
k = 0;
|
||||||
}
|
}
|
||||||
|
@ -213,7 +216,7 @@ int WinEDA_CvpcbFrame::ReadSchematicNetlist()
|
||||||
}
|
}
|
||||||
cbuffer[jj] = 0;
|
cbuffer[jj] = 0;
|
||||||
// Copy footprint name:
|
// Copy footprint name:
|
||||||
if( m_isEESchemaNetlist && (strnicmp( cbuffer, "$noname", 7 ) != 0) )
|
if( m_isEESchemaNetlist && strnicmp( cbuffer, "$noname", 7 ) != 0 )
|
||||||
Cmp->m_Module = CONV_FROM_UTF8(cbuffer);
|
Cmp->m_Module = CONV_FROM_UTF8(cbuffer);
|
||||||
|
|
||||||
if( (Line[++idx] == '(') && (Line[k - 1] == ')' ) )
|
if( (Line[++idx] == '(') && (Line[k - 1] == ')' ) )
|
||||||
|
@ -271,7 +274,7 @@ int WinEDA_CvpcbFrame::ReadSchematicNetlist()
|
||||||
|
|
||||||
int ReadFootprintFilterList( FILE_LINE_READER& aNetlistReader, COMPONENT_LIST& aComponentsList )
|
int ReadFootprintFilterList( FILE_LINE_READER& aNetlistReader, COMPONENT_LIST& aComponentsList )
|
||||||
{
|
{
|
||||||
char* Line = aNetlistReader;
|
const char* Line = aNetlistReader;
|
||||||
wxString CmpRef;
|
wxString CmpRef;
|
||||||
COMPONENT* Cmp = NULL;
|
COMPONENT* Cmp = NULL;
|
||||||
|
|
||||||
|
|
|
@ -77,9 +77,9 @@ enum DSN_SYNTAX_T {
|
||||||
class DSNLEXER
|
class DSNLEXER
|
||||||
{
|
{
|
||||||
bool iOwnReaders; ///< on readerStack, should I delete them?
|
bool iOwnReaders; ///< on readerStack, should I delete them?
|
||||||
char* start;
|
const char* start;
|
||||||
char* next;
|
const char* next;
|
||||||
char* limit;
|
const char* limit;
|
||||||
|
|
||||||
typedef std::vector<LINE_READER*> READER_STACK;
|
typedef std::vector<LINE_READER*> READER_STACK;
|
||||||
|
|
||||||
|
|
|
@ -205,8 +205,14 @@ protected:
|
||||||
|
|
||||||
wxString source; ///< origin of text lines, e.g. filename or "clipboard"
|
wxString source; ///< origin of text lines, e.g. filename or "clipboard"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function expandCapacity
|
||||||
|
* will exand the capacity of @a line up to maxLineLength but not greater, so
|
||||||
|
* be careful about making assumptions of @a capacity after calling this.
|
||||||
|
*/
|
||||||
void expandCapacity( unsigned newsize );
|
void expandCapacity( unsigned newsize );
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -238,11 +244,20 @@ public:
|
||||||
* of lines of text. The returned string is useful for reporting error
|
* of lines of text. The returned string is useful for reporting error
|
||||||
* messages.
|
* messages.
|
||||||
*/
|
*/
|
||||||
const wxString& GetSource() const
|
virtual const wxString& GetSource() const
|
||||||
{
|
{
|
||||||
return source;
|
return source;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function Line
|
||||||
|
* returns a pointer to the last line that was read in.
|
||||||
|
*/
|
||||||
|
virtual char* Line() const
|
||||||
|
{
|
||||||
|
return line;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Operator char*
|
* Operator char*
|
||||||
* is a casting operator that returns a char* pointer to the start of the
|
* is a casting operator that returns a char* pointer to the start of the
|
||||||
|
@ -250,7 +265,7 @@ public:
|
||||||
*/
|
*/
|
||||||
operator char* () const
|
operator char* () const
|
||||||
{
|
{
|
||||||
return line;
|
return Line();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -258,7 +273,7 @@ public:
|
||||||
* returns the line number of the last line read from this LINE_READER. Lines
|
* returns the line number of the last line read from this LINE_READER. Lines
|
||||||
* start from 1.
|
* start from 1.
|
||||||
*/
|
*/
|
||||||
unsigned LineNumber() const
|
virtual unsigned LineNumber() const
|
||||||
{
|
{
|
||||||
return lineNum;
|
return lineNum;
|
||||||
}
|
}
|
||||||
|
@ -267,7 +282,7 @@ public:
|
||||||
* Function Length
|
* Function Length
|
||||||
* returns the number of bytes in the last line read from this LINE_READER.
|
* returns the number of bytes in the last line read from this LINE_READER.
|
||||||
*/
|
*/
|
||||||
unsigned Length() const
|
virtual unsigned Length() const
|
||||||
{
|
{
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,6 +85,7 @@ add_executable( test_sch_lib_table
|
||||||
sch_lib_table_keywords.cpp
|
sch_lib_table_keywords.cpp
|
||||||
sch_lib.cpp
|
sch_lib.cpp
|
||||||
sch_lpid.cpp
|
sch_lpid.cpp
|
||||||
|
filter_reader.cpp
|
||||||
sch_dir_lib_source.cpp
|
sch_dir_lib_source.cpp
|
||||||
sch_part.cpp
|
sch_part.cpp
|
||||||
sweet_keywords.cpp
|
sweet_keywords.cpp
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
|
||||||
|
|
||||||
|
#include <richio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class FILTER_READER
|
||||||
|
* reads lines of text from another LINE_READER, but only returns non-comment
|
||||||
|
* lines and non-blank lines from its ReadLine() function.
|
||||||
|
*/
|
||||||
|
class FILTER_READER : public LINE_READER
|
||||||
|
{
|
||||||
|
LINE_READER& reader;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor ( LINE_READER& )
|
||||||
|
* does not take ownership over @a aReader, so will not destroy it.
|
||||||
|
*/
|
||||||
|
FILTER_READER( LINE_READER& aReader ) :
|
||||||
|
reader( aReader )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned ReadLine() throw( IO_ERROR )
|
||||||
|
{
|
||||||
|
unsigned ret;
|
||||||
|
|
||||||
|
while( ( ret = reader.ReadLine() ) != 0 )
|
||||||
|
{
|
||||||
|
if( !strchr( "#\n\r", reader[0] ) )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
const wxString& GetSource() const
|
||||||
|
{
|
||||||
|
return reader.GetSource();
|
||||||
|
}
|
||||||
|
|
||||||
|
char* Line() const
|
||||||
|
{
|
||||||
|
return reader.Line();
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned LineNumber() const
|
||||||
|
{
|
||||||
|
return reader.LineNumber();
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned Length() const
|
||||||
|
{
|
||||||
|
return reader.Length();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue