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 );
|
||||
reader = aLineReader;
|
||||
start = (char*) (*reader);
|
||||
start = (const char*) (*reader);
|
||||
|
||||
// force a new readLine() as first thing.
|
||||
limit = start;
|
||||
|
@ -127,7 +127,7 @@ bool DSNLEXER::PopReader()
|
|||
readerStack.pop_back();
|
||||
|
||||
reader = readerStack.back();
|
||||
start = (char*) (*reader);
|
||||
start = (const char*) (*reader);
|
||||
|
||||
// force a new readLine() as first thing.
|
||||
limit = start;
|
||||
|
@ -336,8 +336,8 @@ static inline bool isSpace( int cc )
|
|||
|
||||
int DSNLEXER::NextTok() throw( IO_ERROR )
|
||||
{
|
||||
char* cur = next;
|
||||
char* head = cur;
|
||||
const char* cur = next;
|
||||
const char* head = cur;
|
||||
|
||||
prevTok = curTok;
|
||||
|
||||
|
|
|
@ -107,12 +107,12 @@ unsigned FILE_LINE_READER::ReadLine() throw( IO_ERROR )
|
|||
length = 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 ) )
|
||||
{
|
||||
length += strlen( line + length );
|
||||
|
||||
if( length == maxLineLength )
|
||||
if( length >= maxLineLength )
|
||||
THROW_IO_ERROR( _("Line length exceeded") );
|
||||
|
||||
// a normal line breaks here, once through while loop
|
||||
|
@ -122,10 +122,8 @@ unsigned FILE_LINE_READER::ReadLine() throw( IO_ERROR )
|
|||
expandCapacity( capacity * 2 );
|
||||
}
|
||||
|
||||
/* if( length ) RHH: this may now refer to a non-existent line but
|
||||
* that leads to better error reporting on unexpected end of file.
|
||||
*/
|
||||
|
||||
// lineNum is incremented even if there was no line read, because this
|
||||
// leads to better error reporting when we hit an end of file.
|
||||
++lineNum;
|
||||
|
||||
return length;
|
||||
|
|
|
@ -114,8 +114,11 @@ int WinEDA_CvpcbFrame::ReadSchematicNetlist()
|
|||
}
|
||||
|
||||
// FILE_LINE_READER will close the file.
|
||||
FILE_LINE_READER netlistReader( source, m_NetlistFileName.GetFullPath(), BUFFER_CHAR_SIZE );
|
||||
char* Line = netlistReader;
|
||||
FILE_LINE_READER netlistReader( source, m_NetlistFileName.GetFullPath() );
|
||||
|
||||
// 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" )
|
||||
* or "# EESchema Netlist"
|
||||
|
@ -194,11 +197,11 @@ int WinEDA_CvpcbFrame::ReadSchematicNetlist()
|
|||
|
||||
/* idx points the component 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 )
|
||||
{
|
||||
wxString msg;
|
||||
msg.Printf( _( "Netlist error: %s" ), Line );
|
||||
msg.Printf( _( "Netlist error: %s" ), (const wxChar*) CONV_FROM_UTF8( Line ) );
|
||||
DisplayError( this, msg );
|
||||
k = 0;
|
||||
}
|
||||
|
@ -213,7 +216,7 @@ int WinEDA_CvpcbFrame::ReadSchematicNetlist()
|
|||
}
|
||||
cbuffer[jj] = 0;
|
||||
// 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);
|
||||
|
||||
if( (Line[++idx] == '(') && (Line[k - 1] == ')' ) )
|
||||
|
@ -271,7 +274,7 @@ int WinEDA_CvpcbFrame::ReadSchematicNetlist()
|
|||
|
||||
int ReadFootprintFilterList( FILE_LINE_READER& aNetlistReader, COMPONENT_LIST& aComponentsList )
|
||||
{
|
||||
char* Line = aNetlistReader;
|
||||
const char* Line = aNetlistReader;
|
||||
wxString CmpRef;
|
||||
COMPONENT* Cmp = NULL;
|
||||
|
||||
|
|
|
@ -77,9 +77,9 @@ enum DSN_SYNTAX_T {
|
|||
class DSNLEXER
|
||||
{
|
||||
bool iOwnReaders; ///< on readerStack, should I delete them?
|
||||
char* start;
|
||||
char* next;
|
||||
char* limit;
|
||||
const char* start;
|
||||
const char* next;
|
||||
const char* limit;
|
||||
|
||||
typedef std::vector<LINE_READER*> READER_STACK;
|
||||
|
||||
|
|
|
@ -205,8 +205,14 @@ protected:
|
|||
|
||||
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 );
|
||||
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
|
@ -238,11 +244,20 @@ public:
|
|||
* of lines of text. The returned string is useful for reporting error
|
||||
* messages.
|
||||
*/
|
||||
const wxString& GetSource() const
|
||||
virtual const wxString& GetSource() const
|
||||
{
|
||||
return source;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function Line
|
||||
* returns a pointer to the last line that was read in.
|
||||
*/
|
||||
virtual char* Line() const
|
||||
{
|
||||
return line;
|
||||
}
|
||||
|
||||
/**
|
||||
* Operator char*
|
||||
* is a casting operator that returns a char* pointer to the start of the
|
||||
|
@ -250,7 +265,7 @@ public:
|
|||
*/
|
||||
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
|
||||
* start from 1.
|
||||
*/
|
||||
unsigned LineNumber() const
|
||||
virtual unsigned LineNumber() const
|
||||
{
|
||||
return lineNum;
|
||||
}
|
||||
|
@ -267,7 +282,7 @@ public:
|
|||
* Function Length
|
||||
* returns the number of bytes in the last line read from this LINE_READER.
|
||||
*/
|
||||
unsigned Length() const
|
||||
virtual unsigned Length() const
|
||||
{
|
||||
return length;
|
||||
}
|
||||
|
|
|
@ -85,6 +85,7 @@ add_executable( test_sch_lib_table
|
|||
sch_lib_table_keywords.cpp
|
||||
sch_lib.cpp
|
||||
sch_lpid.cpp
|
||||
filter_reader.cpp
|
||||
sch_dir_lib_source.cpp
|
||||
sch_part.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