KiCad PCB EDA Suite
PAGE_LAYOUT_READER_PARSER Class Reference

Class PAGE_LAYOUT_READER_PARSER holds data and functions pertinent to parsing a S-expression file for a WORKSHEET_LAYOUT. More...

Inheritance diagram for PAGE_LAYOUT_READER_PARSER:
PAGE_LAYOUT_READER_LEXER DSNLEXER

Public Member Functions

 PAGE_LAYOUT_READER_PARSER (const char *aLine, const wxString &aSource)
 
void Parse (WORKSHEET_LAYOUT *aLayout)
 
TB_READER_T::T NextTok ()
 Function NextTok returns the next token found in the input file or T_EOF when reaching the end of file. More...
 
TB_READER_T::T NeedSYMBOL ()
 Function NeedSYMBOL calls NextTok() and then verifies that the token read in satisfies bool IsSymbol(). More...
 
TB_READER_T::T NeedSYMBOLorNUMBER ()
 Function NeedSYMBOLorNUMBER calls NextTok() and then verifies that the token read in satisfies bool IsSymbol() or tok==T_NUMBER. More...
 
TB_READER_T::T CurTok ()
 Function CurTok returns whatever NextTok() returned the last time it was called. More...
 
TB_READER_T::T PrevTok ()
 Function PrevTok returns whatever NextTok() returned the 2nd to last time it was called. More...
 
bool SyncLineReaderWith (DSNLEXER &aLexer)
 Useable only for DSN lexers which share the same LINE_READER Synchronizes the pointers handling the data read by the LINE_READER Allows 2 DNSLEXER to share the same current line, when switching from a DNSLEXER to an other DNSLEXER. More...
 
void SetSpecctraMode (bool aMode)
 Function SetSpecctraMode changes the behavior of this lexer into or out of "specctra mode". More...
 
void PushReader (LINE_READER *aLineReader)
 Function PushReader manages a stack of LINE_READERs in order to handle nested file inclusion. More...
 
LINE_READERPopReader ()
 Function PopReader deletes the top most LINE_READER from an internal stack of LINE_READERs and in the case of FILE_LINE_READER this means the associated FILE is closed. More...
 
int NeedNUMBER (const char *aExpectation)
 Function NeedNUMBER calls NextTok() and then verifies that the token read is type DSN_NUMBER. More...
 
char SetStringDelimiter (char aStringDelimiter)
 Function SetStringDelimiter changes the string delimiter from the default " to some other character and returns the old value. More...
 
bool SetSpaceInQuotedTokens (bool val)
 Function SetSpaceInQuotedTokens changes the setting controlling whether a space in a quoted string is a terminator. More...
 
bool SetCommentsAreTokens (bool val)
 Function SetCommentsAreTokens changes the handling of comments. More...
 
wxArrayString * ReadCommentLines ()
 Function ReadCommentLines checks the next sequence of tokens and reads them into a wxArrayString if they are comments. More...
 
void Expecting (int aTok)
 Function Expecting throws an IO_ERROR exception with an input file specific error message. More...
 
void Expecting (const char *aTokenList)
 Function Expecting throws an IO_ERROR exception with an input file specific error message. More...
 
void Unexpected (int aTok)
 Function Unexpected throws an IO_ERROR exception with an input file specific error message. More...
 
void Unexpected (const char *aToken)
 Function Unexpected throws an IO_ERROR exception with an input file specific error message. More...
 
void Duplicate (int aTok)
 Function Duplicate throws an IO_ERROR exception with a message saying specifically that aTok is a duplicate of one already seen in current context. More...
 
void NeedLEFT ()
 Function NeedLEFT calls NextTok() and then verifies that the token read in is a DSN_LEFT. More...
 
void NeedRIGHT ()
 Function NeedRIGHT calls NextTok() and then verifies that the token read in is a DSN_RIGHT. More...
 
const char * GetTokenText (int aTok)
 Function GetTokenText returns the C string representation of a DSN_T value. More...
 
wxString GetTokenString (int aTok)
 Function GetTokenString returns a quote wrapped wxString representation of a token value. More...
 
const char * CurText ()
 Function CurText returns a pointer to the current token's text. More...
 
const std::string & CurStr ()
 Function CurStr returns a reference to current token in std::string form. More...
 
wxString FromUTF8 ()
 Function FromUTF8 returns the current token text as a wxString, assuming that the input byte stream is UTF8 encoded. More...
 
int CurLineNumber ()
 Function CurLineNumber returns the current line number within my LINE_READER. More...
 
const char * CurLine ()
 Function CurLine returns the current line of text, from which the CurText() would return its token. More...
 
const wxString & CurSource ()
 Function CurFilename returns the current LINE_READER source. More...
 
int CurOffset ()
 Function CurOffset returns the byte offset within the current line, using a 1 based index. More...
 

Static Public Member Functions

static const char * TokenName (TB_READER_T::T aTok)
 Function TokenName returns the name of the token in ASCII form. More...
 
static bool IsSymbol (int aTok)
 Function IsSymbol tests a token to see if it is a symbol. More...
 
static const char * Syntax (int aTok)
 

Protected Types

typedef std::vector< LINE_READER * > READER_STACK
 

Protected Member Functions

void init ()
 
int readLine ()
 
int findToken (const std::string &aToken)
 Function findToken takes aToken string and looks up the string in the keywords table. More...
 
bool isStringTerminator (char cc)
 

Protected Attributes

bool iOwnReaders
 on readerStack, should I delete them? More...
 
const char * start
 
const char * next
 
const char * limit
 
char dummy [1]
 when there is no reader. More...
 
READER_STACK readerStack
 all the LINE_READERs by pointer. More...
 
LINE_READERreader
 no ownership. ownership is via readerStack, maybe, if iOwnReaders More...
 
bool specctraMode
 if true, then: 1) stringDelimiter can be changed 2) Kicad quoting protocol is not in effect 3) space_in_quoted_tokens is functional else not. More...
 
char stringDelimiter
 
bool space_in_quoted_tokens
 blank spaces within quoted strings More...
 
bool commentsAreTokens
 true if should return comments as tokens More...
 
int prevTok
 curTok from previous NextTok() call. More...
 
int curOffset
 offset within current line of the current token More...
 
int curTok
 the current token obtained on last NextTok() More...
 
std::string curText
 the text of the current token More...
 
unsigned keywordCount
 count of keywords table More...
 
KEYWORD_MAP keyword_hash
 fast, specialized "C string" hashtable More...
 

Private Member Functions

int parseInt (int aMin, int aMax)
 Function parseInt parses an integer and constrains it between two values. More...
 
double parseDouble ()
 Function parseDouble parses a double. More...
 
void parseSetup (WORKSHEET_LAYOUT *aLayout)
 
void parseGraphic (WORKSHEET_DATAITEM *aItem)
 parse a graphic item starting by "(line" or "(rect" and read parameters. More...
 
void parseText (WORKSHEET_DATAITEM_TEXT *aItem)
 parse a text item starting by "(tbtext" and read parameters. More...
 
void parsePolygon (WORKSHEET_DATAITEM_POLYPOLYGON *aItem)
 parse a polygon item starting by "( polygon" and read parameters. More...
 
void parsePolyOutline (WORKSHEET_DATAITEM_POLYPOLYGON *aItem)
 parse a list of corners starting by "( pts" and read coordinates. More...
 
void parseBitmap (WORKSHEET_DATAITEM_BITMAP *aItem)
 parse a bitmap item starting by "( bitmap" and read parameters. More...
 
void parseCoordinate (POINT_COORD &aCoord)
 
void readOption (WORKSHEET_DATAITEM *aItem)
 
void readPngdata (WORKSHEET_DATAITEM_BITMAP *aItem)
 

Detailed Description

Class PAGE_LAYOUT_READER_PARSER holds data and functions pertinent to parsing a S-expression file for a WORKSHEET_LAYOUT.

Definition at line 47 of file page_layout_reader.cpp.

Member Typedef Documentation

typedef std::vector<LINE_READER*> DSNLEXER::READER_STACK
protectedinherited

Definition at line 89 of file dsnlexer.h.

Constructor & Destructor Documentation

PAGE_LAYOUT_READER_PARSER::PAGE_LAYOUT_READER_PARSER ( const char *  aLine,
const wxString &  aSource 
)

Definition at line 107 of file page_layout_reader.cpp.

107  :
108  PAGE_LAYOUT_READER_LEXER( aLine, aSource )
109 {
110 }
PAGE_LAYOUT_READER_LEXER(const std::string &aSExpression, const wxString &aSource=wxEmptyString)
Constructor ( const std::string&, const wxString& )

Member Function Documentation

const char* DSNLEXER::CurLine ( )
inlineinherited

Function CurLine returns the current line of text, from which the CurText() would return its token.

Definition at line 517 of file dsnlexer.h.

Referenced by DSNLEXER::Duplicate(), DSNLEXER::Expecting(), CLIPBOARD_IO::Load(), PCB_IO::Load(), DSNLEXER::NeedNUMBER(), DSNLEXER::NextTok(), and DSNLEXER::Unexpected().

518  {
519  return (const char*)(*reader);
520  }
int DSNLEXER::CurLineNumber ( )
inlineinherited

Function CurLineNumber returns the current line number within my LINE_READER.

Definition at line 507 of file dsnlexer.h.

References LINE_READER::LineNumber().

Referenced by DSNLEXER::Duplicate(), DSNLEXER::Expecting(), CLIPBOARD_IO::Load(), PCB_IO::Load(), DSNLEXER::NeedNUMBER(), DSNLEXER::NextTok(), SYMBOL_LIB_TABLE::Parse(), FP_LIB_TABLE::Parse(), KICAD_NETLIST_PARSER::parseComponent(), and DSNLEXER::Unexpected().

508  {
509  return reader->LineNumber();
510  }
virtual unsigned LineNumber() const
Function Line Number returns the line number of the last line read from this LINE_READER.
Definition: richio.h:159
LINE_READER * reader
no ownership. ownership is via readerStack, maybe, if iOwnReaders
Definition: dsnlexer.h:92
int DSNLEXER::CurOffset ( )
inlineinherited

Function CurOffset returns the byte offset within the current line, using a 1 based index.

Returns
int - a one based index into the current line.

Definition at line 538 of file dsnlexer.h.

Referenced by DSNLEXER::Duplicate(), DSNLEXER::Expecting(), CLIPBOARD_IO::Load(), PCB_IO::Load(), DSNLEXER::NeedNUMBER(), DSNLEXER::NextTok(), KICAD_NETLIST_PARSER::parseComponent(), and DSNLEXER::Unexpected().

539  {
540  return curOffset + 1;
541  }
int curOffset
offset within current line of the current token
Definition: dsnlexer.h:106
const wxString& DSNLEXER::CurSource ( )
inlineinherited

Function CurFilename returns the current LINE_READER source.

Returns
const wxString& - the source of the lines of text, e.g. a filename or "clipboard".

Definition at line 528 of file dsnlexer.h.

References LINE_READER::GetSource().

Referenced by DSNLEXER::Duplicate(), DSNLEXER::Expecting(), CLIPBOARD_IO::Load(), PCB_IO::Load(), DSNLEXER::NeedNUMBER(), DSNLEXER::NextTok(), KICAD_NETLIST_PARSER::parseComponent(), and DSNLEXER::Unexpected().

529  {
530  return reader->GetSource();
531  }
LINE_READER * reader
no ownership. ownership is via readerStack, maybe, if iOwnReaders
Definition: dsnlexer.h:92
virtual const wxString & GetSource() const
Function GetSource returns the name of the source of the lines in an abstract sense.
Definition: richio.h:130
const std::string& DSNLEXER::CurStr ( )
inlineinherited

Function CurStr returns a reference to current token in std::string form.

Definition at line 488 of file dsnlexer.h.

References DSNLEXER::curText.

Referenced by PCB_PLOT_PARAMS_PARSER::Parse(), and readPngdata().

489  {
490  return curText;
491  }
std::string curText
the text of the current token
Definition: dsnlexer.h:109
const char* DSNLEXER::CurText ( )
inlineinherited

Function CurText returns a pointer to the current token's text.

Definition at line 479 of file dsnlexer.h.

Referenced by DSN::SPECCTRA_DB::doANCESTOR(), DSN::SPECCTRA_DB::doCIRCLE(), DSN::SPECCTRA_DB::doCLASS(), DSN::SPECCTRA_DB::doCLASSES(), DSN::SPECCTRA_DB::doCOMP_ORDER(), DSN::SPECCTRA_DB::doCOMPONENT(), DSN::SPECCTRA_DB::doCONNECT(), DSN::SPECCTRA_DB::doCONTROL(), DSN::SPECCTRA_DB::doFROMTO(), DSN::SPECCTRA_DB::doGRID(), DSN::SPECCTRA_DB::doHISTORY(), DSN::SPECCTRA_DB::doIMAGE(), DSN::SPECCTRA_DB::doKEEPOUT(), DSN::SPECCTRA_DB::doLAYER(), DSN::SPECCTRA_DB::doLAYER_RULE(), DSN::SPECCTRA_DB::doLIBRARY(), DSN::SPECCTRA_DB::doNET(), DSN::SPECCTRA_DB::doNET_OUT(), DSN::SPECCTRA_DB::doNETWORK(), DSN::SPECCTRA_DB::doPADSTACK(), DSN::SPECCTRA_DB::doPARSER(), DSN::SPECCTRA_DB::doPATH(), DSN::SPECCTRA_DB::doPCB(), DSN::SPECCTRA_DB::doPIN(), DSN::SPECCTRA_DB::doPLACE(), DSN::SPECCTRA_DB::doPROPERTIES(), DSN::SPECCTRA_DB::doQARC(), DSN::SPECCTRA_DB::doRECTANGLE(), DSN::SPECCTRA_DB::doREGION(), DSN::SPECCTRA_DB::doRESOLUTION(), DSN::SPECCTRA_DB::doROUTE(), DSN::SPECCTRA_DB::doRULE(), DSN::SPECCTRA_DB::doSESSION(), DSN::SPECCTRA_DB::doSHAPE(), DSN::SPECCTRA_DB::doSPECCTRA_LAYER_PAIR(), DSN::SPECCTRA_DB::doSTRINGPROP(), DSN::SPECCTRA_DB::doSTRUCTURE(), DSN::SPECCTRA_DB::doSTRUCTURE_OUT(), DSN::SPECCTRA_DB::doSUPPLY_PIN(), DSN::SPECCTRA_DB::doTOKPROP(), DSN::SPECCTRA_DB::doTOPOLOGY(), DSN::SPECCTRA_DB::doVIA(), DSN::SPECCTRA_DB::doWAS_IS(), DSN::SPECCTRA_DB::doWINDOW(), DSN::SPECCTRA_DB::doWIRE(), DSN::SPECCTRA_DB::doWIRE_VIA(), DSN::SPECCTRA_DB::doWIRING(), PCAD2KICAD::LoadInputFile(), PCB_PLOT_PARAMS_PARSER::Parse(), Parse(), TEMPLATE_FIELDNAME::Parse(), TEMPLATES::Parse(), parseBitmap(), KICAD_NETLIST_PARSER::parseComponent(), parseCoordinate(), PCB_PLOT_PARAMS_PARSER::parseDouble(), parseDouble(), parseGraphic(), PCB_PARSER::parseHex(), PCB_PLOT_PARAMS_PARSER::parseInt(), parseInt(), PCB_PARSER::parseInt(), KICAD_NETLIST_PARSER::parseLibPartList(), KICAD_NETLIST_PARSER::parseNet(), BOM_CFG_READER_PARSER::parsePlugin(), parsePolygon(), parsePolyOutline(), parseSetup(), parseText(), DSN::SPECCTRA_DB::readCOMPnPIN(), readOption(), readPngdata(), DSN::SPECCTRA_DB::readTIME(), scanAtom(), and scanList().

480  {
481  return curText.c_str();
482  }
std::string curText
the text of the current token
Definition: dsnlexer.h:109
TB_READER_T::T PAGE_LAYOUT_READER_LEXER::CurTok ( )
inlineinherited

Function CurTok returns whatever NextTok() returned the last time it was called.

Definition at line 199 of file page_layout_reader_lexer.h.

References DSNLEXER::CurTok().

200  {
201  return (TB_READER_T::T) DSNLEXER::CurTok();
202  }
int CurTok()
Function CurTok returns whatever NextTok() returned the last time it was called.
Definition: dsnlexer.h:320
T
enum T contains all this lexer's tokens.
void DSNLEXER::Duplicate ( int  aTok)
inherited

Function Duplicate throws an IO_ERROR exception with a message saying specifically that aTok is a duplicate of one already seen in current context.

Parameters
aTokis the token/keyword type which was not expected at the current input location.
Exceptions
IO_ERRORwith the location within the input file of the problem.

Definition at line 377 of file dsnlexer.cpp.

References DSNLEXER::CurLine(), DSNLEXER::CurLineNumber(), DSNLEXER::CurOffset(), DSNLEXER::CurSource(), Format(), DSNLEXER::GetTokenString(), and THROW_PARSE_ERROR.

Referenced by SYMBOL_LIB_TABLE::Parse(), FP_LIB_TABLE::Parse(), and LIB_TABLE_ROW::Parse().

378 {
379  wxString errText = wxString::Format(
380  _("%s is a duplicate"), GetTokenString( aTok ).GetData() );
382 }
const wxString & CurSource()
Function CurFilename returns the current LINE_READER source.
Definition: dsnlexer.h:528
#define THROW_PARSE_ERROR(aProblem, aSource, aInputLine, aLineNumber, aByteIndex)
Definition: ki_exception.h:133
int CurOffset()
Function CurOffset returns the byte offset within the current line, using a 1 based index...
Definition: dsnlexer.h:538
const char * CurLine()
Function CurLine returns the current line of text, from which the CurText() would return its token...
Definition: dsnlexer.h:517
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
int CurLineNumber()
Function CurLineNumber returns the current line number within my LINE_READER.
Definition: dsnlexer.h:507
wxString GetTokenString(int aTok)
Function GetTokenString returns a quote wrapped wxString representation of a token value...
Definition: dsnlexer.cpp:334
void DSNLEXER::Expecting ( int  aTok)
inherited

Function Expecting throws an IO_ERROR exception with an input file specific error message.

Parameters
aTokis the token/keyword type which was expected at the current input location.
Exceptions
IO_ERRORwith the location within the input file of the problem.

Definition at line 353 of file dsnlexer.cpp.

References DSNLEXER::CurLine(), DSNLEXER::CurLineNumber(), DSNLEXER::CurOffset(), DSNLEXER::CurSource(), Format(), GetChars(), DSNLEXER::GetTokenString(), and THROW_PARSE_ERROR.

Referenced by DSN::SPECCTRA_DB::doANCESTOR(), DSN::SPECCTRA_DB::doBOUNDARY(), DSN::SPECCTRA_DB::doCIRCLE(), DSN::SPECCTRA_DB::doCLASS(), DSN::SPECCTRA_DB::doCLASS_CLASS(), DSN::SPECCTRA_DB::doCLASSES(), DSN::SPECCTRA_DB::doCOMP_ORDER(), DSN::SPECCTRA_DB::doCOMPONENT(), DSN::SPECCTRA_DB::doCONNECT(), DSN::SPECCTRA_DB::doCONTROL(), DSN::SPECCTRA_DB::doFROMTO(), DSN::SPECCTRA_DB::doGRID(), DSN::SPECCTRA_DB::doHISTORY(), DSN::SPECCTRA_DB::doIMAGE(), DSN::SPECCTRA_DB::doKEEPOUT(), DSN::SPECCTRA_DB::doLAYER(), DSN::SPECCTRA_DB::doLAYER_NOISE_WEIGHT(), DSN::SPECCTRA_DB::doLAYER_RULE(), DSN::SPECCTRA_DB::doLIBRARY(), DSN::SPECCTRA_DB::doNET(), DSN::SPECCTRA_DB::doNET_OUT(), DSN::SPECCTRA_DB::doNETWORK(), DSN::SPECCTRA_DB::doPADSTACK(), DSN::SPECCTRA_DB::doPARSER(), DSN::SPECCTRA_DB::doPATH(), DSN::SPECCTRA_DB::doPCB(), DSN::SPECCTRA_DB::doPIN(), DSN::SPECCTRA_DB::doPLACE(), DSN::SPECCTRA_DB::doPLACEMENT(), DSN::SPECCTRA_DB::doPROPERTIES(), DSN::SPECCTRA_DB::doQARC(), DSN::SPECCTRA_DB::doRECTANGLE(), DSN::SPECCTRA_DB::doREGION(), DSN::SPECCTRA_DB::doRESOLUTION(), DSN::SPECCTRA_DB::doROUTE(), DSN::SPECCTRA_DB::doSESSION(), DSN::SPECCTRA_DB::doSHAPE(), DSN::SPECCTRA_DB::doSPECCTRA_LAYER_PAIR(), DSN::SPECCTRA_DB::doSTRUCTURE(), DSN::SPECCTRA_DB::doSTRUCTURE_OUT(), DSN::SPECCTRA_DB::doSUPPLY_PIN(), DSN::SPECCTRA_DB::doTOPOLOGY(), DSN::SPECCTRA_DB::doUNIT(), DSN::SPECCTRA_DB::doVIA(), DSN::SPECCTRA_DB::doWAS_IS(), DSN::SPECCTRA_DB::doWINDOW(), DSN::SPECCTRA_DB::doWIRE(), DSN::SPECCTRA_DB::doWIRE_VIA(), DSN::SPECCTRA_DB::doWIRING(), DSN::SPECCTRA_DB::LoadPCB(), DSN::SPECCTRA_DB::LoadSESSION(), DSNLEXER::NeedLEFT(), DSNLEXER::NeedRIGHT(), DSNLEXER::NeedSYMBOL(), DSNLEXER::NeedSYMBOLorNUMBER(), PCB_PLOT_PARAMS_PARSER::Parse(), SYMBOL_LIB_TABLE::Parse(), FP_LIB_TABLE::Parse(), TEMPLATE_FIELDNAME::Parse(), LIB_TABLE_ROW::Parse(), PCB_PLOT_PARAMS_PARSER::parseBool(), KICAD_NETLIST_PARSER::parseComponent(), PCB_PLOT_PARAMS_PARSER::parseDouble(), parseDouble(), PCB_PLOT_PARAMS_PARSER::parseInt(), parseInt(), KICAD_NETLIST_PARSER::parseLibPartList(), DSN::SPECCTRA_DB::readCOMPnPIN(), and DSN::SPECCTRA_DB::readTIME().

354 {
355  wxString errText = wxString::Format(
356  _("Expecting '%s'"), GetChars( GetTokenString( aTok ) ) );
358 }
const wxString & CurSource()
Function CurFilename returns the current LINE_READER source.
Definition: dsnlexer.h:528
#define THROW_PARSE_ERROR(aProblem, aSource, aInputLine, aLineNumber, aByteIndex)
Definition: ki_exception.h:133
int CurOffset()
Function CurOffset returns the byte offset within the current line, using a 1 based index...
Definition: dsnlexer.h:538
const char * CurLine()
Function CurLine returns the current line of text, from which the CurText() would return its token...
Definition: dsnlexer.h:517
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:92
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
int CurLineNumber()
Function CurLineNumber returns the current line number within my LINE_READER.
Definition: dsnlexer.h:507
wxString GetTokenString(int aTok)
Function GetTokenString returns a quote wrapped wxString representation of a token value...
Definition: dsnlexer.cpp:334
void DSNLEXER::Expecting ( const char *  aTokenList)
inherited

Function Expecting throws an IO_ERROR exception with an input file specific error message.

Parameters
aTokenListis the token/keyword type which was expected at the current input location, e.g. "pin|graphic|property"
Exceptions
IO_ERRORwith the location within the input file of the problem.

Definition at line 361 of file dsnlexer.cpp.

References DSNLEXER::CurLine(), DSNLEXER::CurLineNumber(), DSNLEXER::CurOffset(), DSNLEXER::CurSource(), Format(), GetChars(), and THROW_PARSE_ERROR.

362 {
363  wxString errText = wxString::Format(
364  _("Expecting '%s'"), GetChars( wxString::FromUTF8( text ) ) );
366 }
const wxString & CurSource()
Function CurFilename returns the current LINE_READER source.
Definition: dsnlexer.h:528
#define THROW_PARSE_ERROR(aProblem, aSource, aInputLine, aLineNumber, aByteIndex)
Definition: ki_exception.h:133
int CurOffset()
Function CurOffset returns the byte offset within the current line, using a 1 based index...
Definition: dsnlexer.h:538
const char * CurLine()
Function CurLine returns the current line of text, from which the CurText() would return its token...
Definition: dsnlexer.h:517
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:92
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
int CurLineNumber()
Function CurLineNumber returns the current line number within my LINE_READER.
Definition: dsnlexer.h:507
int DSNLEXER::findToken ( const std::string &  aToken)
inlineprotectedinherited

Function findToken takes aToken string and looks up the string in the keywords table.

Parameters
aTokenis a string to lookup in the keywords table.
Returns
int - with a value from the enum DSN_T matching the keyword text, or DSN_SYMBOL if aToken is not in the kewords table.

Definition at line 260 of file dsnlexer.cpp.

References DSN_SYMBOL, and DSNLEXER::keyword_hash.

Referenced by DSNLEXER::NextTok().

261 {
262  KEYWORD_MAP::const_iterator it = keyword_hash.find( tok.c_str() );
263  if( it != keyword_hash.end() )
264  return it->second;
265 
266  return DSN_SYMBOL; // not a keyword, some arbitrary symbol.
267 }
KEYWORD_MAP keyword_hash
fast, specialized "C string" hashtable
Definition: dsnlexer.h:113
wxString DSNLEXER::FromUTF8 ( )
inlineinherited

Function FromUTF8 returns the current token text as a wxString, assuming that the input byte stream is UTF8 encoded.

Definition at line 498 of file dsnlexer.h.

Referenced by Parse(), SYMBOL_LIB_TABLE::Parse(), FP_LIB_TABLE::Parse(), LIB_TABLE_ROW::Parse(), parseBitmap(), KICAD_NETLIST_PARSER::parseComponent(), parseGraphic(), BOM_CFG_READER_PARSER::parsePlugin(), parsePolygon(), parseText(), and DSNLEXER::ReadCommentLines().

499  {
500  return wxString::FromUTF8( curText.c_str() );
501  }
std::string curText
the text of the current token
Definition: dsnlexer.h:109
wxString DSNLEXER::GetTokenString ( int  aTok)
inherited

Function GetTokenString returns a quote wrapped wxString representation of a token value.

Definition at line 334 of file dsnlexer.cpp.

References DSNLEXER::GetTokenText().

Referenced by DSNLEXER::Duplicate(), DSNLEXER::Expecting(), DSN::SPECCTRA_DB::makeVIA(), and DSNLEXER::Unexpected().

335 {
336  wxString ret;
337 
338  ret << wxT("'") << wxString::FromUTF8( GetTokenText(aTok) ) << wxT("'");
339 
340  return ret;
341 }
const char * GetTokenText(int aTok)
Function GetTokenText returns the C string representation of a DSN_T value.
Definition: dsnlexer.cpp:315
const char * DSNLEXER::GetTokenText ( int  aTok)
inherited

Function GetTokenText returns the C string representation of a DSN_T value.

Definition at line 315 of file dsnlexer.cpp.

References DSNLEXER::keywordCount, DSNLEXER::keywords, KEYWORD::name, and DSNLEXER::Syntax().

Referenced by DSNLEXER::GetTokenString(), PCB_PARSER::parseBoardUnits(), and PCB_PARSER::parseDouble().

316 {
317  const char* ret;
318 
319  if( aTok < 0 )
320  {
321  return Syntax( aTok );
322  }
323  else if( (unsigned) aTok < keywordCount )
324  {
325  ret = keywords[aTok].name;
326  }
327  else
328  ret = "token too big";
329 
330  return ret;
331 }
const KEYWORD * keywords
table sorted by CMake for bsearch()
Definition: dsnlexer.h:111
const char * name
unique keyword.
Definition: dsnlexer.h:42
unsigned keywordCount
count of keywords table
Definition: dsnlexer.h:112
static const char * Syntax(int aTok)
Definition: dsnlexer.cpp:271
void DSNLEXER::init ( )
protectedinherited

Definition at line 44 of file dsnlexer.cpp.

References DSNLEXER::commentsAreTokens, DSNLEXER::curOffset, DSNLEXER::curTok, DSN_NONE, DSNLEXER::keyword_hash, DSNLEXER::keywordCount, DSNLEXER::keywords, KEYWORD::name, DSNLEXER::prevTok, DSNLEXER::space_in_quoted_tokens, DSNLEXER::specctraMode, DSNLEXER::stringDelimiter, and KEYWORD::token.

Referenced by DSNLEXER::DSNLEXER().

45 {
46  curTok = DSN_NONE;
47  prevTok = DSN_NONE;
48 
49  stringDelimiter = '"';
50 
51  specctraMode = false;
52  space_in_quoted_tokens = false;
53  commentsAreTokens = false;
54 
55  curOffset = 0;
56 
57 #if 1
58  if( keywordCount > 11 )
59  {
60  // resize the hashtable bucket count
61  keyword_hash.reserve( keywordCount );
62  }
63 
64  // fill the specialized "C string" hashtable from keywords[]
65  const KEYWORD* it = keywords;
66  const KEYWORD* end = it + keywordCount;
67 
68  for( ; it < end; ++it )
69  {
70  keyword_hash[it->name] = it->token;
71  }
72 #endif
73 }
int curOffset
offset within current line of the current token
Definition: dsnlexer.h:106
bool commentsAreTokens
true if should return comments as tokens
Definition: dsnlexer.h:103
const KEYWORD * keywords
table sorted by CMake for bsearch()
Definition: dsnlexer.h:111
const char * name
unique keyword.
Definition: dsnlexer.h:42
KEYWORD_MAP keyword_hash
fast, specialized "C string" hashtable
Definition: dsnlexer.h:113
bool space_in_quoted_tokens
blank spaces within quoted strings
Definition: dsnlexer.h:101
bool specctraMode
if true, then: 1) stringDelimiter can be changed 2) Kicad quoting protocol is not in effect 3) space_...
Definition: dsnlexer.h:94
int prevTok
curTok from previous NextTok() call.
Definition: dsnlexer.h:105
unsigned keywordCount
count of keywords table
Definition: dsnlexer.h:112
int curTok
the current token obtained on last NextTok()
Definition: dsnlexer.h:108
Struct KEYWORD holds a keyword string and its unique integer token.
Definition: dsnlexer.h:40
char stringDelimiter
Definition: dsnlexer.h:100
int token
a zero based index into an array of KEYWORDs
Definition: dsnlexer.h:43
bool DSNLEXER::isStringTerminator ( char  cc)
inlineprotectedinherited

Definition at line 147 of file dsnlexer.h.

Referenced by DSNLEXER::NextTok().

148  {
149  if( !space_in_quoted_tokens && cc==' ' )
150  return true;
151 
152  if( cc == stringDelimiter )
153  return true;
154 
155  return false;
156  }
bool space_in_quoted_tokens
blank spaces within quoted strings
Definition: dsnlexer.h:101
char stringDelimiter
Definition: dsnlexer.h:100
bool DSNLEXER::IsSymbol ( int  aTok)
staticinherited

Function IsSymbol tests a token to see if it is a symbol.

This means it cannot be a special delimiter character such as DSN_LEFT, DSN_RIGHT, DSN_QUOTE, etc. It may however, coincidentally match a keyword and still be a symbol.

Definition at line 344 of file dsnlexer.cpp.

References DSN_STRING, and DSN_SYMBOL.

Referenced by DSN::SPECCTRA_DB::doCLASS(), DSN::SPECCTRA_DB::doCLASSES(), DSN::SPECCTRA_DB::doCOMP_ORDER(), DSN::SPECCTRA_DB::doCOMPONENT(), DSN::SPECCTRA_DB::doFROMTO(), DSN::SPECCTRA_DB::doIMAGE(), DSN::SPECCTRA_DB::doKEEPOUT(), DSN::SPECCTRA_DB::doLAYER(), DSN::SPECCTRA_DB::doLAYER_RULE(), DSN::SPECCTRA_DB::doNET(), DSN::SPECCTRA_DB::doPADSTACK(), DSN::SPECCTRA_DB::doPATH(), DSN::SPECCTRA_DB::doPIN(), DSN::SPECCTRA_DB::doPLACE(), DSN::SPECCTRA_DB::doREGION(), DSN::SPECCTRA_DB::doSUPPLY_PIN(), DSN::SPECCTRA_DB::doVIA(), DSN::SPECCTRA_DB::doWIRE_VIA(), DSNLEXER::NeedSYMBOL(), DSNLEXER::NeedSYMBOLorNUMBER(), and DSN::SPECCTRA_DB::readCOMPnPIN().

345 {
346  // This is static and not inline to reduce code space.
347 
348  // if aTok is >= 0, then it is a coincidental match to a keyword.
349  return aTok==DSN_SYMBOL || aTok==DSN_STRING || aTok>=0;
350 }
void DSNLEXER::NeedLEFT ( )
inherited

Function NeedLEFT calls NextTok() and then verifies that the token read in is a DSN_LEFT.

If it is not, an IO_ERROR is thrown.

Exceptions
IO_ERROR,ifthe next token is not a DSN_LEFT

Definition at line 393 of file dsnlexer.cpp.

References DSN_LEFT, DSNLEXER::Expecting(), and DSNLEXER::NextTok().

Referenced by SYMBOL_LIB_TABLE::Parse(), FP_LIB_TABLE::Parse(), TEMPLATE_FIELDNAME::Parse(), and LIB_TABLE_ROW::Parse().

394 {
395  int tok = NextTok();
396  if( tok != DSN_LEFT )
397  Expecting( DSN_LEFT );
398 }
void Expecting(int aTok)
Function Expecting throws an IO_ERROR exception with an input file specific error message...
Definition: dsnlexer.cpp:353
int NextTok()
Function NextTok returns the next token found in the input file or DSN_EOF when reaching the end of f...
Definition: dsnlexer.cpp:540
int DSNLEXER::NeedNUMBER ( const char *  aExpectation)
inherited

Function NeedNUMBER calls NextTok() and then verifies that the token read is type DSN_NUMBER.

If not, and IO_ERROR is thrown using text from aExpectation.

Returns
int - the actual token read in.
Exceptions
IO_ERROR,ifthe next token does not satisfy the above test

Definition at line 427 of file dsnlexer.cpp.

References DSNLEXER::CurLine(), DSNLEXER::CurLineNumber(), DSNLEXER::CurOffset(), DSNLEXER::CurSource(), DSN_NUMBER, Format(), DSNLEXER::NextTok(), and THROW_PARSE_ERROR.

Referenced by PCB_PARSER::parseDouble(), and PCB_PARSER::parseInt().

428 {
429  int tok = NextTok();
430  if( tok != DSN_NUMBER )
431  {
432  wxString errText = wxString::Format(
433  _("need a NUMBER for '%s'"), wxString::FromUTF8( aExpectation ).GetData() );
435  }
436  return tok;
437 }
const wxString & CurSource()
Function CurFilename returns the current LINE_READER source.
Definition: dsnlexer.h:528
#define THROW_PARSE_ERROR(aProblem, aSource, aInputLine, aLineNumber, aByteIndex)
Definition: ki_exception.h:133
int CurOffset()
Function CurOffset returns the byte offset within the current line, using a 1 based index...
Definition: dsnlexer.h:538
const char * CurLine()
Function CurLine returns the current line of text, from which the CurText() would return its token...
Definition: dsnlexer.h:517
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
int NextTok()
Function NextTok returns the next token found in the input file or DSN_EOF when reaching the end of f...
Definition: dsnlexer.cpp:540
int CurLineNumber()
Function CurLineNumber returns the current line number within my LINE_READER.
Definition: dsnlexer.h:507
void DSNLEXER::NeedRIGHT ( )
inherited

Function NeedRIGHT calls NextTok() and then verifies that the token read in is a DSN_RIGHT.

If it is not, an IO_ERROR is thrown.

Exceptions
IO_ERROR,ifthe next token is not a DSN_RIGHT

Definition at line 401 of file dsnlexer.cpp.

References DSN_RIGHT, DSNLEXER::Expecting(), and DSNLEXER::NextTok().

Referenced by DSN::SPECCTRA_DB::doANCESTOR(), DSN::SPECCTRA_DB::doBOUNDARY(), DSN::SPECCTRA_DB::doCONTROL(), DSN::SPECCTRA_DB::doFROMTO(), DSN::SPECCTRA_DB::doHISTORY(), DSN::SPECCTRA_DB::doIMAGE(), DSN::SPECCTRA_DB::doKEEPOUT(), DSN::SPECCTRA_DB::doLAYER_RULE(), DSN::SPECCTRA_DB::doNET(), DSN::SPECCTRA_DB::doNET_OUT(), DSN::SPECCTRA_DB::doPADSTACK(), DSN::SPECCTRA_DB::doPARSER(), DSN::SPECCTRA_DB::doPATH(), DSN::SPECCTRA_DB::doPIN(), DSN::SPECCTRA_DB::doPLACE(), DSN::SPECCTRA_DB::doPLACEMENT(), DSN::SPECCTRA_DB::doPROPERTIES(), DSN::SPECCTRA_DB::doQARC(), DSN::SPECCTRA_DB::doRECTANGLE(), DSN::SPECCTRA_DB::doRESOLUTION(), DSN::SPECCTRA_DB::doSESSION(), DSN::SPECCTRA_DB::doSHAPE(), DSN::SPECCTRA_DB::doSPECCTRA_LAYER_PAIR(), DSN::SPECCTRA_DB::doSTRINGPROP(), DSN::SPECCTRA_DB::doSUPPLY_PIN(), DSN::SPECCTRA_DB::doTOKPROP(), DSN::SPECCTRA_DB::doUNIT(), DSN::SPECCTRA_DB::doWAS_IS(), DSN::SPECCTRA_DB::doWIRE(), DSN::SPECCTRA_DB::doWIRE_VIA(), PCB_PLOT_PARAMS_PARSER::Parse(), SYMBOL_LIB_TABLE::Parse(), FP_LIB_TABLE::Parse(), TEMPLATE_FIELDNAME::Parse(), LIB_TABLE_ROW::Parse(), KICAD_NETLIST_PARSER::Parse(), parseBitmap(), KICAD_NETLIST_PARSER::parseComponent(), parseGraphic(), KICAD_NETLIST_PARSER::parseLibPartList(), KICAD_NETLIST_PARSER::parseNet(), BOM_CFG_READER_PARSER::parsePlugin(), parsePolygon(), parsePolyOutline(), parseSetup(), parseText(), and readPngdata().

402 {
403  int tok = NextTok();
404  if( tok != DSN_RIGHT )
405  Expecting( DSN_RIGHT );
406 }
void Expecting(int aTok)
Function Expecting throws an IO_ERROR exception with an input file specific error message...
Definition: dsnlexer.cpp:353
int NextTok()
Function NextTok returns the next token found in the input file or DSN_EOF when reaching the end of f...
Definition: dsnlexer.cpp:540
TB_READER_T::T PAGE_LAYOUT_READER_LEXER::NeedSYMBOL ( )
inlineinherited

Function NeedSYMBOL calls NextTok() and then verifies that the token read in satisfies bool IsSymbol().

If not, an IO_ERROR is thrown.

Returns
int - the actual token read in.
Exceptions
IO_ERROR,ifthe next token does not satisfy IsSymbol()

Definition at line 177 of file page_layout_reader_lexer.h.

References DSNLEXER::NeedSYMBOL().

178  {
180  }
int NeedSYMBOL()
Function NeedSYMBOL calls NextTok() and then verifies that the token read in satisfies bool IsSymbol(...
Definition: dsnlexer.cpp:409
T
enum T contains all this lexer's tokens.
TB_READER_T::T PAGE_LAYOUT_READER_LEXER::NeedSYMBOLorNUMBER ( )
inlineinherited

Function NeedSYMBOLorNUMBER calls NextTok() and then verifies that the token read in satisfies bool IsSymbol() or tok==T_NUMBER.

If not, an IO_ERROR is thrown.

Returns
int - the actual token read in.
Exceptions
IO_ERROR,ifthe next token does not satisfy the above test

Definition at line 190 of file page_layout_reader_lexer.h.

References DSNLEXER::NeedSYMBOLorNUMBER().

Referenced by Parse(), parseBitmap(), parseGraphic(), parsePolygon(), parseText(), and readPngdata().

191  {
193  }
int NeedSYMBOLorNUMBER()
Function NeedSYMBOLorNUMBER calls NextTok() and then verifies that the token read in satisfies bool I...
Definition: dsnlexer.cpp:418
T
enum T contains all this lexer's tokens.
TB_READER_T::T PAGE_LAYOUT_READER_LEXER::NextTok ( )
inlineinherited

Function NextTok returns the next token found in the input file or T_EOF when reaching the end of file.

Users should wrap this function to return an enum to aid in grammar debugging while running under a debugger, but leave this lower level function returning an int (so the enum does not collide with another usage).

Returns
TB_READER_T::T - the type of token found next.
Exceptions
IO_ERROR- only if the LINE_READER throws it.

Definition at line 164 of file page_layout_reader_lexer.h.

References DSNLEXER::NextTok().

Referenced by Parse(), parseBitmap(), parseCoordinate(), parseDouble(), parseGraphic(), parseInt(), parsePolygon(), parsePolyOutline(), parseSetup(), parseText(), readOption(), and readPngdata().

165  {
167  }
int NextTok()
Function NextTok returns the next token found in the input file or DSN_EOF when reaching the end of f...
Definition: dsnlexer.cpp:540
T
enum T contains all this lexer's tokens.
void PAGE_LAYOUT_READER_PARSER::Parse ( WORKSHEET_LAYOUT aLayout)

Definition at line 113 of file page_layout_reader.cpp.

References WORKSHEET_LAYOUT::Append(), DSNLEXER::CurText(), DSNLEXER::FromUTF8(), PAGE_LAYOUT_READER_LEXER::NeedSYMBOLorNUMBER(), PAGE_LAYOUT_READER_LEXER::NextTok(), parseBitmap(), parseGraphic(), parsePolygon(), parseSetup(), parseText(), TB_READER_T::T_bitmap, DSN::T_EOF, DSN::T_LEFT, TB_READER_T::T_line, TB_READER_T::T_page_layout, DSN::T_polygon, DSN::T_rect, DSN::T_RIGHT, TB_READER_T::T_setup, TB_READER_T::T_tbtext, DSNLEXER::Unexpected(), WORKSHEET_DATAITEM::WS_RECT, and WORKSHEET_DATAITEM::WS_SEGMENT.

Referenced by WORKSHEET_LAYOUT::SetDefaultLayout(), and WORKSHEET_LAYOUT::SetPageLayout().

114 {
115  T token;
116  WORKSHEET_DATAITEM * item;
117 
118  LOCALE_IO toggle;
119 
120  while( ( token = NextTok() ) != T_RIGHT )
121  {
122  if( token == T_EOF)
123  break;
124 
125  if( token == T_LEFT )
126  token = NextTok();
127 
128  if( token == T_page_layout )
129  continue;
130 
131  switch( token )
132  {
133  case T_setup: // Defines default values for graphic items
134  parseSetup( aLayout );
135  break;
136 
137  case T_line:
139  parseGraphic( item );
140  aLayout->Append( item );
141  break;
142 
143  case T_rect:
145  parseGraphic( item );
146  aLayout->Append( item );
147  break;
148 
149  case T_polygon:
150  item = new WORKSHEET_DATAITEM_POLYPOLYGON();
152  aLayout->Append( item );
153  break;
154 
155  case T_bitmap:
156  item = new WORKSHEET_DATAITEM_BITMAP( NULL );
158  aLayout->Append( item );
159  break;
160 
161  case T_tbtext:
163  item = new WORKSHEET_DATAITEM_TEXT( FromUTF8() );
165  aLayout->Append( item );
166  break;
167 
168  default:
169  Unexpected( CurText() );
170  break;
171  }
172  }
173 }
Class LOCALE_IO is a class that can be instantiated within a scope in which you are expecting excepti...
Definition: common.h:166
void parseText(WORKSHEET_DATAITEM_TEXT *aItem)
parse a text item starting by "(tbtext" and read parameters.
void Unexpected(int aTok)
Function Unexpected throws an IO_ERROR exception with an input file specific error message...
Definition: dsnlexer.cpp:369
wxString FromUTF8()
Function FromUTF8 returns the current token text as a wxString, assuming that the input byte stream i...
Definition: dsnlexer.h:498
void Append(WORKSHEET_DATAITEM *aItem)
Add an item to the list of items.
void parseBitmap(WORKSHEET_DATAITEM_BITMAP *aItem)
parse a bitmap item starting by "( bitmap" and read parameters.
TB_READER_T::T NeedSYMBOLorNUMBER()
Function NeedSYMBOLorNUMBER calls NextTok() and then verifies that the token read in satisfies bool I...
TB_READER_T::T NextTok()
Function NextTok returns the next token found in the input file or T_EOF when reaching the end of fil...
void parseGraphic(WORKSHEET_DATAITEM *aItem)
parse a graphic item starting by "(line" or "(rect" and read parameters.
T
enum T contains all this lexer's tokens.
const char * CurText()
Function CurText returns a pointer to the current token's text.
Definition: dsnlexer.h:479
void parsePolygon(WORKSHEET_DATAITEM_POLYPOLYGON *aItem)
parse a polygon item starting by "( polygon" and read parameters.
void parseSetup(WORKSHEET_LAYOUT *aLayout)
void PAGE_LAYOUT_READER_PARSER::parseBitmap ( WORKSHEET_DATAITEM_BITMAP aItem)
private

parse a bitmap item starting by "( bitmap" and read parameters.

Definition at line 334 of file page_layout_reader.cpp.

References DSNLEXER::CurText(), DSNLEXER::FromUTF8(), WORKSHEET_DATAITEM_BITMAP::m_ImageBitmap, WORKSHEET_DATAITEM::m_IncrementVector, WORKSHEET_DATAITEM::m_LineWidth, WORKSHEET_DATAITEM::m_Name, WORKSHEET_DATAITEM::m_Pos, WORKSHEET_DATAITEM::m_RepeatCount, DSNLEXER::NeedRIGHT(), PAGE_LAYOUT_READER_LEXER::NeedSYMBOLorNUMBER(), PAGE_LAYOUT_READER_LEXER::NextTok(), parseCoordinate(), parseDouble(), parseInt(), readOption(), readPngdata(), BITMAP_BASE::SetScale(), DSN::T_EOF, TB_READER_T::T_incrx, TB_READER_T::T_incry, DSN::T_LEFT, TB_READER_T::T_linewidth, TLIB_T::T_name, TB_READER_T::T_option, TB_READER_T::T_pngdata, TB_READER_T::T_pos, TB_READER_T::T_repeat, DSN::T_RIGHT, TB_READER_T::T_scale, DSNLEXER::Unexpected(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by Parse().

335 {
336  T token;
337  BITMAP_BASE* image = new BITMAP_BASE;
338  aItem->m_ImageBitmap = image;
339 
340  while( ( token = NextTok() ) != T_RIGHT )
341  {
342  if( token == T_EOF)
343  break;
344 
345  if( token == T_LEFT )
346  token = NextTok();
347 
348  switch( token )
349  {
350  case T_name:
352  aItem->m_Name = FromUTF8();
353  NeedRIGHT();
354  break;
355 
356  case T_pos:
357  parseCoordinate( aItem->m_Pos );
358  break;
359 
360  case T_repeat:
361  aItem->m_RepeatCount = parseInt( -1, 100 );
362  NeedRIGHT();
363  break;
364 
365  case T_incrx:
366  aItem->m_IncrementVector.x = parseDouble();
367  NeedRIGHT();
368  break;
369 
370  case T_incry:
371  aItem->m_IncrementVector.y = parseDouble();
372  NeedRIGHT();
373  break;
374 
375  case T_linewidth:
376  aItem->m_LineWidth = parseDouble();
377  NeedRIGHT();
378  break;
379 
380  case T_scale:
381  aItem->m_ImageBitmap->SetScale( parseDouble() );
382  NeedRIGHT();
383  break;
384 
385  case T_pngdata:
386  readPngdata( aItem );
387  break;
388 
389  case T_option:
390  readOption( aItem );
391  break;
392 
393  default:
394  Unexpected( CurText() );
395  break;
396  }
397  }
398 }
void parseCoordinate(POINT_COORD &aCoord)
int parseInt(int aMin, int aMax)
Function parseInt parses an integer and constrains it between two values.
void SetScale(double aScale)
void Unexpected(int aTok)
Function Unexpected throws an IO_ERROR exception with an input file specific error message...
Definition: dsnlexer.cpp:369
void readPngdata(WORKSHEET_DATAITEM_BITMAP *aItem)
double parseDouble()
Function parseDouble parses a double.
wxString FromUTF8()
Function FromUTF8 returns the current token text as a wxString, assuming that the input byte stream i...
Definition: dsnlexer.h:498
This class handle bitmap images in KiCad.
TB_READER_T::T NeedSYMBOLorNUMBER()
Function NeedSYMBOLorNUMBER calls NextTok() and then verifies that the token read in satisfies bool I...
TB_READER_T::T NextTok()
Function NextTok returns the next token found in the input file or T_EOF when reaching the end of fil...
T
enum T contains all this lexer's tokens.
void NeedRIGHT()
Function NeedRIGHT calls NextTok() and then verifies that the token read in is a DSN_RIGHT.
Definition: dsnlexer.cpp:401
const char * CurText()
Function CurText returns a pointer to the current token's text.
Definition: dsnlexer.h:479
void readOption(WORKSHEET_DATAITEM *aItem)
void PAGE_LAYOUT_READER_PARSER::parseCoordinate ( POINT_COORD aCoord)
private

Definition at line 692 of file page_layout_reader.cpp.

References DSNLEXER::CurText(), LB_CORNER, LT_CORNER, POINT_COORD::m_Anchor, POINT_COORD::m_Pos, PAGE_LAYOUT_READER_LEXER::NextTok(), parseDouble(), RB_CORNER, RT_CORNER, TB_READER_T::T_lbcorner, TB_READER_T::T_ltcorner, TB_READER_T::T_rbcorner, DSN::T_RIGHT, TB_READER_T::T_rtcorner, DSNLEXER::Unexpected(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by parseBitmap(), parseGraphic(), parsePolygon(), and parseText().

693 {
694  T token;
695 
696  aCoord.m_Pos.x = parseDouble();
697  aCoord.m_Pos.y = parseDouble();
698 
699  while( ( token = NextTok() ) != T_RIGHT )
700  {
701  switch( token )
702  {
703  case T_ltcorner:
704  aCoord.m_Anchor = LT_CORNER; // left top corner
705  break;
706 
707  case T_lbcorner:
708  aCoord.m_Anchor = LB_CORNER; // left bottom corner
709  break;
710 
711  case T_rbcorner:
712  aCoord.m_Anchor = RB_CORNER; // right bottom corner
713  break;
714 
715  case T_rtcorner:
716  aCoord.m_Anchor = RT_CORNER; // right top corner
717  break;
718 
719  default:
720  Unexpected( CurText() );
721  break;
722  }
723  }
724 }
void Unexpected(int aTok)
Function Unexpected throws an IO_ERROR exception with an input file specific error message...
Definition: dsnlexer.cpp:369
double parseDouble()
Function parseDouble parses a double.
TB_READER_T::T NextTok()
Function NextTok returns the next token found in the input file or T_EOF when reaching the end of fil...
T
enum T contains all this lexer's tokens.
const char * CurText()
Function CurText returns a pointer to the current token's text.
Definition: dsnlexer.h:479
double PAGE_LAYOUT_READER_PARSER::parseDouble ( )
private

Function parseDouble parses a double.

Returns
double - the parsed double.

Definition at line 744 of file page_layout_reader.cpp.

References DSNLEXER::CurText(), DSNLEXER::Expecting(), PAGE_LAYOUT_READER_LEXER::NextTok(), and DSN::T_NUMBER.

Referenced by parseBitmap(), parseCoordinate(), parseGraphic(), parsePolygon(), parsePolyOutline(), parseSetup(), and parseText().

745 {
746  T token = NextTok();
747 
748  if( token != T_NUMBER )
749  Expecting( T_NUMBER );
750 
751  double val = strtod( CurText(), NULL );
752 
753  return val;
754 }
TB_READER_T::T NextTok()
Function NextTok returns the next token found in the input file or T_EOF when reaching the end of fil...
void Expecting(int aTok)
Function Expecting throws an IO_ERROR exception with an input file specific error message...
Definition: dsnlexer.cpp:353
T
enum T contains all this lexer's tokens.
const char * CurText()
Function CurText returns a pointer to the current token's text.
Definition: dsnlexer.h:479
void PAGE_LAYOUT_READER_PARSER::parseGraphic ( WORKSHEET_DATAITEM aItem)
private

parse a graphic item starting by "(line" or "(rect" and read parameters.

Definition at line 467 of file page_layout_reader.cpp.

References DSNLEXER::CurText(), DSNLEXER::FromUTF8(), WORKSHEET_DATAITEM::m_End, WORKSHEET_DATAITEM::m_IncrementVector, WORKSHEET_DATAITEM::m_Info, WORKSHEET_DATAITEM::m_LineWidth, WORKSHEET_DATAITEM::m_Name, WORKSHEET_DATAITEM::m_Pos, WORKSHEET_DATAITEM::m_RepeatCount, DSNLEXER::NeedRIGHT(), PAGE_LAYOUT_READER_LEXER::NeedSYMBOLorNUMBER(), PAGE_LAYOUT_READER_LEXER::NextTok(), parseCoordinate(), parseDouble(), parseInt(), readOption(), DSN::T_comment, TLIB_T::T_end, DSN::T_EOF, TB_READER_T::T_incrx, TB_READER_T::T_incry, DSN::T_LEFT, TB_READER_T::T_linewidth, TLIB_T::T_name, TB_READER_T::T_option, TB_READER_T::T_repeat, DSN::T_RIGHT, TLIB_T::T_start, DSNLEXER::Unexpected(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by Parse().

468 {
469  T token;
470 
471  while( ( token = NextTok() ) != T_RIGHT )
472  {
473  if( token == T_EOF)
474  break;
475 
476  if( token == T_LEFT )
477  token = NextTok();
478  else
479  {
480  // If an other token than T_LEFT is read here, this is an error
481  // however, due to a old bug in kicad, the token T_end can be found
482  // without T_LEFT in a very few .wks files (perhaps only one in a demo).
483  // So this ugly hack disables the error detection.
484  if( token != T_end )
485  Unexpected( CurText() );
486  }
487 
488  switch( token )
489  {
490  case T_comment:
492  aItem->m_Info = FromUTF8();
493  NeedRIGHT();
494  break;
495 
496  case T_option:
497  readOption( aItem );
498  break;
499 
500  case T_name:
502  aItem->m_Name = FromUTF8();
503  NeedRIGHT();
504  break;
505 
506  case T_start:
507  parseCoordinate( aItem->m_Pos );
508  break;
509 
510  case T_end:
511  parseCoordinate( aItem->m_End );
512  break;
513 
514  case T_repeat:
515  aItem->m_RepeatCount = parseInt( -1, 100 );
516  NeedRIGHT();
517  break;
518 
519  case T_incrx:
520  aItem->m_IncrementVector.x = parseDouble();
521  NeedRIGHT();
522  break;
523 
524  case T_incry:
525  aItem->m_IncrementVector.y = parseDouble();
526  NeedRIGHT();
527  break;
528 
529  case T_linewidth:
530  aItem->m_LineWidth = parseDouble();
531  NeedRIGHT();
532  break;
533 
534  default:
535  Unexpected( CurText() );
536  break;
537  }
538  }
539 }
void parseCoordinate(POINT_COORD &aCoord)
int parseInt(int aMin, int aMax)
Function parseInt parses an integer and constrains it between two values.
void Unexpected(int aTok)
Function Unexpected throws an IO_ERROR exception with an input file specific error message...
Definition: dsnlexer.cpp:369
double parseDouble()
Function parseDouble parses a double.
wxString FromUTF8()
Function FromUTF8 returns the current token text as a wxString, assuming that the input byte stream i...
Definition: dsnlexer.h:498
TB_READER_T::T NeedSYMBOLorNUMBER()
Function NeedSYMBOLorNUMBER calls NextTok() and then verifies that the token read in satisfies bool I...
TB_READER_T::T NextTok()
Function NextTok returns the next token found in the input file or T_EOF when reaching the end of fil...
T
enum T contains all this lexer's tokens.
void NeedRIGHT()
Function NeedRIGHT calls NextTok() and then verifies that the token read in is a DSN_RIGHT.
Definition: dsnlexer.cpp:401
const char * CurText()
Function CurText returns a pointer to the current token's text.
Definition: dsnlexer.h:479
void readOption(WORKSHEET_DATAITEM *aItem)
int PAGE_LAYOUT_READER_PARSER::parseInt ( int  aMin,
int  aMax 
)
private

Function parseInt parses an integer and constrains it between two values.

Parameters
aMinis the smallest return value.
aMaxis the largest return value.
Returns
int - the parsed integer.

Definition at line 726 of file page_layout_reader.cpp.

References DSNLEXER::CurText(), DSNLEXER::Expecting(), PAGE_LAYOUT_READER_LEXER::NextTok(), and DSN::T_NUMBER.

Referenced by parseBitmap(), parseGraphic(), parsePolygon(), and parseText().

727 {
728  T token = NextTok();
729 
730  if( token != T_NUMBER )
731  Expecting( T_NUMBER );
732 
733  int val = atoi( CurText() );
734 
735  if( val < aMin )
736  val = aMin;
737  else if( val > aMax )
738  val = aMax;
739 
740  return val;
741 }
TB_READER_T::T NextTok()
Function NextTok returns the next token found in the input file or T_EOF when reaching the end of fil...
void Expecting(int aTok)
Function Expecting throws an IO_ERROR exception with an input file specific error message...
Definition: dsnlexer.cpp:353
T
enum T contains all this lexer's tokens.
const char * CurText()
Function CurText returns a pointer to the current token's text.
Definition: dsnlexer.h:479
void PAGE_LAYOUT_READER_PARSER::parsePolygon ( WORKSHEET_DATAITEM_POLYPOLYGON aItem)
private

parse a polygon item starting by "( polygon" and read parameters.

the list of corners included in this description is read by parsePolyOutline

Definition at line 231 of file page_layout_reader.cpp.

References WORKSHEET_DATAITEM_POLYPOLYGON::CloseContour(), DSNLEXER::CurText(), DSNLEXER::FromUTF8(), WORKSHEET_DATAITEM::m_IncrementVector, WORKSHEET_DATAITEM::m_Info, WORKSHEET_DATAITEM::m_LineWidth, WORKSHEET_DATAITEM::m_Name, WORKSHEET_DATAITEM_POLYPOLYGON::m_Orient, WORKSHEET_DATAITEM::m_Pos, WORKSHEET_DATAITEM::m_RepeatCount, DSNLEXER::NeedRIGHT(), PAGE_LAYOUT_READER_LEXER::NeedSYMBOLorNUMBER(), PAGE_LAYOUT_READER_LEXER::NextTok(), parseCoordinate(), parseDouble(), parseInt(), parsePolyOutline(), readOption(), WORKSHEET_DATAITEM_POLYPOLYGON::SetBoundingBox(), DSN::T_comment, DSN::T_EOF, TB_READER_T::T_incrx, TB_READER_T::T_incry, DSN::T_LEFT, TB_READER_T::T_linewidth, TLIB_T::T_name, TB_READER_T::T_option, TB_READER_T::T_pos, TB_READER_T::T_pts, TB_READER_T::T_repeat, DSN::T_RIGHT, DSN::T_rotate, DSNLEXER::Unexpected(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by Parse().

232 {
233  T token;
234 
235  while( ( token = NextTok() ) != T_RIGHT )
236  {
237  if( token == T_EOF)
238  break;
239 
240  if( token == T_LEFT )
241  token = NextTok();
242 
243  switch( token )
244  {
245  case T_comment:
247  aItem->m_Info = FromUTF8();
248  NeedRIGHT();
249  break;
250 
251  case T_pos:
252  parseCoordinate( aItem->m_Pos );
253  break;
254 
255  case T_name:
257  aItem->m_Name = FromUTF8();
258  NeedRIGHT();
259  break;
260 
261  case T_option:
262  readOption( aItem );
263  break;
264 
265  case T_pts:
266  parsePolyOutline( aItem );
267  aItem->CloseContour();
268  break;
269 
270  case T_rotate:
271  aItem->m_Orient = parseDouble();
272  NeedRIGHT();
273  break;
274 
275  case T_repeat:
276  aItem->m_RepeatCount = parseInt( -1, 100 );
277  NeedRIGHT();
278  break;
279 
280  case T_incrx:
281  aItem->m_IncrementVector.x = parseDouble();
282  NeedRIGHT();
283  break;
284 
285  case T_incry:
286  aItem->m_IncrementVector.y = parseDouble();
287  NeedRIGHT();
288  break;
289 
290  case T_linewidth:
291  aItem->m_LineWidth = parseDouble();
292  NeedRIGHT();
293  break;
294 
295  default:
296  Unexpected( CurText() );
297  break;
298  }
299  }
300 
301  aItem->SetBoundingBox();
302 }
void parseCoordinate(POINT_COORD &aCoord)
int parseInt(int aMin, int aMax)
Function parseInt parses an integer and constrains it between two values.
void SetBoundingBox()
calculate the bounding box of the set polygons
void Unexpected(int aTok)
Function Unexpected throws an IO_ERROR exception with an input file specific error message...
Definition: dsnlexer.cpp:369
double parseDouble()
Function parseDouble parses a double.
wxString FromUTF8()
Function FromUTF8 returns the current token text as a wxString, assuming that the input byte stream i...
Definition: dsnlexer.h:498
TB_READER_T::T NeedSYMBOLorNUMBER()
Function NeedSYMBOLorNUMBER calls NextTok() and then verifies that the token read in satisfies bool I...
TB_READER_T::T NextTok()
Function NextTok returns the next token found in the input file or T_EOF when reaching the end of fil...
void parsePolyOutline(WORKSHEET_DATAITEM_POLYPOLYGON *aItem)
parse a list of corners starting by "( pts" and read coordinates.
T
enum T contains all this lexer's tokens.
void CloseContour()
Closes the current contour, by storing the index of the last corner of the current polygon in m_polyI...
void NeedRIGHT()
Function NeedRIGHT calls NextTok() and then verifies that the token read in is a DSN_RIGHT.
Definition: dsnlexer.cpp:401
const char * CurText()
Function CurText returns a pointer to the current token's text.
Definition: dsnlexer.h:479
void readOption(WORKSHEET_DATAITEM *aItem)
void PAGE_LAYOUT_READER_PARSER::parsePolyOutline ( WORKSHEET_DATAITEM_POLYPOLYGON aItem)
private

parse a list of corners starting by "( pts" and read coordinates.

Definition at line 304 of file page_layout_reader.cpp.

References WORKSHEET_DATAITEM_POLYPOLYGON::AppendCorner(), DSNLEXER::CurText(), DSNLEXER::NeedRIGHT(), PAGE_LAYOUT_READER_LEXER::NextTok(), parseDouble(), DSN::T_EOF, DSN::T_LEFT, DSN::T_RIGHT, DSN::T_xy, DSNLEXER::Unexpected(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by parsePolygon().

305 {
306  DPOINT corner;
307  T token;
308 
309  while( ( token = NextTok() ) != T_RIGHT )
310  {
311  if( token == T_EOF)
312  break;
313 
314  if( token == T_LEFT )
315  token = NextTok();
316 
317  switch( token )
318  {
319  case T_xy:
320  corner.x = parseDouble();
321  corner.y = parseDouble();
322  aItem->AppendCorner( corner );
323  NeedRIGHT();
324  break;
325 
326  default:
327  Unexpected( CurText() );
328  break;
329  }
330  }
331 }
void Unexpected(int aTok)
Function Unexpected throws an IO_ERROR exception with an input file specific error message...
Definition: dsnlexer.cpp:369
void AppendCorner(const DPOINT &aCorner)
add a corner in corner list
double parseDouble()
Function parseDouble parses a double.
TB_READER_T::T NextTok()
Function NextTok returns the next token found in the input file or T_EOF when reaching the end of fil...
T
enum T contains all this lexer's tokens.
void NeedRIGHT()
Function NeedRIGHT calls NextTok() and then verifies that the token read in is a DSN_RIGHT.
Definition: dsnlexer.cpp:401
const char * CurText()
Function CurText returns a pointer to the current token's text.
Definition: dsnlexer.h:479
void PAGE_LAYOUT_READER_PARSER::parseSetup ( WORKSHEET_LAYOUT aLayout)
private

Definition at line 175 of file page_layout_reader.cpp.

References DSNLEXER::CurText(), WORKSHEET_DATAITEM::m_DefaultLineWidth, WORKSHEET_DATAITEM::m_DefaultTextSize, WORKSHEET_DATAITEM::m_DefaultTextThickness, DSNLEXER::NeedRIGHT(), PAGE_LAYOUT_READER_LEXER::NextTok(), parseDouble(), WORKSHEET_LAYOUT::SetBottomMargin(), WORKSHEET_LAYOUT::SetLeftMargin(), WORKSHEET_LAYOUT::SetRightMargin(), WORKSHEET_LAYOUT::SetTopMargin(), TB_READER_T::T_bottom_margin, DSN::T_EOF, DSN::T_LEFT, TB_READER_T::T_left_margin, TB_READER_T::T_linewidth, DSN::T_RIGHT, TB_READER_T::T_right_margin, TB_READER_T::T_textlinewidth, TB_READER_T::T_textsize, TB_READER_T::T_top_margin, DSNLEXER::Unexpected(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by Parse().

176 {
177  T token;
178  while( ( token = NextTok() ) != T_RIGHT )
179  {
180  if( token == T_EOF)
181  break;
182 
183  switch( token )
184  {
185  case T_LEFT:
186  break;
187 
188  case T_linewidth:
190  NeedRIGHT();
191  break;
192 
193  case T_textsize:
196  NeedRIGHT();
197  break;
198 
199  case T_textlinewidth:
201  NeedRIGHT();
202  break;
203 
204  case T_left_margin:
205  aLayout->SetLeftMargin( parseDouble() );
206  NeedRIGHT();
207  break;
208 
209  case T_right_margin:
210  aLayout->SetRightMargin( parseDouble() );
211  NeedRIGHT();
212  break;
213 
214  case T_top_margin:
215  aLayout->SetTopMargin( parseDouble() );
216  NeedRIGHT();
217  break;
218 
219  case T_bottom_margin:
220  aLayout->SetBottomMargin( parseDouble() );
221  NeedRIGHT();
222  break;
223 
224  default:
225  Unexpected( CurText() );
226  break;
227  }
228  }
229 }
void Unexpected(int aTok)
Function Unexpected throws an IO_ERROR exception with an input file specific error message...
Definition: dsnlexer.cpp:369
double parseDouble()
Function parseDouble parses a double.
void SetLeftMargin(double aMargin)
void SetTopMargin(double aMargin)
void SetBottomMargin(double aMargin)
TB_READER_T::T NextTok()
Function NextTok returns the next token found in the input file or T_EOF when reaching the end of fil...
static double m_DefaultTextThickness
T
enum T contains all this lexer's tokens.
void NeedRIGHT()
Function NeedRIGHT calls NextTok() and then verifies that the token read in is a DSN_RIGHT.
Definition: dsnlexer.cpp:401
const char * CurText()
Function CurText returns a pointer to the current token's text.
Definition: dsnlexer.h:479
void SetRightMargin(double aMargin)
void PAGE_LAYOUT_READER_PARSER::parseText ( WORKSHEET_DATAITEM_TEXT aItem)
private

parse a text item starting by "(tbtext" and read parameters.

Definition at line 542 of file page_layout_reader.cpp.

References DSNLEXER::CurText(), DSNLEXER::FromUTF8(), GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_HJUSTIFY_RIGHT, GR_TEXT_VJUSTIFY_BOTTOM, GR_TEXT_VJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_TOP, WORKSHEET_DATAITEM_TEXT::m_BoundingBoxSize, WORKSHEET_DATAITEM_TEXT::m_Hjustify, WORKSHEET_DATAITEM::m_IncrementLabel, WORKSHEET_DATAITEM::m_IncrementVector, WORKSHEET_DATAITEM::m_Info, WORKSHEET_DATAITEM::m_LineWidth, WORKSHEET_DATAITEM::m_Name, WORKSHEET_DATAITEM_TEXT::m_Orient, WORKSHEET_DATAITEM::m_Pos, WORKSHEET_DATAITEM::m_RepeatCount, WORKSHEET_DATAITEM_TEXT::m_TextSize, WORKSHEET_DATAITEM_TEXT::m_Vjustify, DSNLEXER::NeedRIGHT(), PAGE_LAYOUT_READER_LEXER::NeedSYMBOLorNUMBER(), PAGE_LAYOUT_READER_LEXER::NextTok(), parseCoordinate(), parseDouble(), parseInt(), readOption(), WORKSHEET_DATAITEM_TEXT::SetBold(), WORKSHEET_DATAITEM_TEXT::SetItalic(), TB_READER_T::T_bold, DSN::T_bottom, TLIB_T::T_center, DSN::T_comment, DSN::T_EOF, TB_READER_T::T_font, TB_READER_T::T_incrlabel, TB_READER_T::T_incrx, TB_READER_T::T_incry, TB_READER_T::T_italic, TB_READER_T::T_justify, DSN::T_LEFT, TB_READER_T::T_left, TB_READER_T::T_linewidth, TB_READER_T::T_maxheight, TB_READER_T::T_maxlen, TLIB_T::T_name, TB_READER_T::T_option, TB_READER_T::T_pos, TB_READER_T::T_repeat, DSN::T_RIGHT, TB_READER_T::T_right, DSN::T_rotate, TB_READER_T::T_size, DSN::T_top, DSNLEXER::Unexpected(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by Parse().

543 {
544  T token;
545 
546  while( ( token = NextTok() ) != T_RIGHT )
547  {
548  if( token == T_EOF)
549  break;
550 
551  if( token == T_LEFT )
552  token = NextTok();
553 
554  switch( token )
555  {
556  case T_comment:
558  aItem->m_Info = FromUTF8();
559  NeedRIGHT();
560  break;
561 
562  case T_option:
563  readOption( aItem );
564  break;
565 
566  case T_name:
568  aItem->m_Name = FromUTF8();
569  NeedRIGHT();
570  break;
571 
572  case T_pos:
573  parseCoordinate( aItem->m_Pos );
574  break;
575 
576  case T_repeat:
577  aItem->m_RepeatCount = parseInt( -1, 100 );
578  NeedRIGHT();
579  break;
580 
581  case T_incrx:
582  aItem->m_IncrementVector.x = parseDouble();
583  NeedRIGHT();
584  break;
585 
586  case T_incry:
587  aItem->m_IncrementVector.y = parseDouble();
588  NeedRIGHT();
589  break;
590 
591  case T_incrlabel:
592  aItem->m_IncrementLabel = parseInt(INT_MIN, INT_MAX);
593  NeedRIGHT();
594  break;
595 
596  case T_maxlen:
597  aItem->m_BoundingBoxSize.x = parseDouble();
598  NeedRIGHT();
599  break;
600 
601  case T_maxheight:
602  aItem->m_BoundingBoxSize.y = parseDouble();
603  NeedRIGHT();
604  break;
605 
606  case T_font:
607  while( ( token = NextTok() ) != T_RIGHT )
608  {
609  if( token == T_EOF)
610  break;
611 
612  switch( token )
613  {
614  case T_LEFT:
615  break;
616 
617  case T_bold:
618  aItem->SetBold( true );
619  break;
620 
621  case T_italic:
622  aItem->SetItalic( true );
623  break;
624 
625  case T_size:
626  aItem->m_TextSize.x = parseDouble();
627  aItem->m_TextSize.y = parseDouble();
628  NeedRIGHT();
629  break;
630 
631  case T_linewidth:
632  aItem->m_LineWidth = parseDouble();
633  NeedRIGHT();
634  break;
635 
636  default:
637  Unexpected( CurText() );
638  break;
639  }
640  }
641  break;
642 
643  case T_justify:
644  while( ( token = NextTok() ) != T_RIGHT )
645  {
646  if( token == T_EOF)
647  break;
648 
649  switch( token )
650  {
651  case T_center:
654  break;
655 
656  case T_left:
658  break;
659 
660  case T_right:
662  break;
663 
664  case T_top:
666  break;
667 
668  case T_bottom:
670  break;
671 
672  default:
673  Unexpected( CurText() );
674  break;
675  }
676  }
677  break;
678 
679  case T_rotate:
680  aItem->m_Orient = parseDouble();
681  NeedRIGHT();
682  break;
683 
684  default:
685  Unexpected( CurText() );
686  break;
687  }
688  }
689 }
void parseCoordinate(POINT_COORD &aCoord)
int parseInt(int aMin, int aMax)
Function parseInt parses an integer and constrains it between two values.
void Unexpected(int aTok)
Function Unexpected throws an IO_ERROR exception with an input file specific error message...
Definition: dsnlexer.cpp:369
double parseDouble()
Function parseDouble parses a double.
wxString FromUTF8()
Function FromUTF8 returns the current token text as a wxString, assuming that the input byte stream i...
Definition: dsnlexer.h:498
void SetItalic(bool aState)
Function SetItalic Toggles on/off the italic option flag.
TB_READER_T::T NeedSYMBOLorNUMBER()
Function NeedSYMBOLorNUMBER calls NextTok() and then verifies that the token read in satisfies bool I...
TB_READER_T::T NextTok()
Function NextTok returns the next token found in the input file or T_EOF when reaching the end of fil...
T
enum T contains all this lexer's tokens.
void SetBold(bool aState)
Function SetBold Toggles on/off the bold option flag.
void NeedRIGHT()
Function NeedRIGHT calls NextTok() and then verifies that the token read in is a DSN_RIGHT.
Definition: dsnlexer.cpp:401
const char * CurText()
Function CurText returns a pointer to the current token's text.
Definition: dsnlexer.h:479
void readOption(WORKSHEET_DATAITEM *aItem)
LINE_READER * DSNLEXER::PopReader ( )
inherited

Function PopReader deletes the top most LINE_READER from an internal stack of LINE_READERs and in the case of FILE_LINE_READER this means the associated FILE is closed.

The most recently used former LINE_READER on the stack becomes the current LINE_READER and its previous position in its input stream and the its latest line number should pertain. PopReader always starts reading from a new line upon returning to the previous LINE_READER. A pop is only possible if there are at least 2 LINE_READERs on the stack, since popping the last one is not supported.

Returns
LINE_READER* - is the one that was in use before the pop, or NULL if there was not at least two readers on the stack and therefore the pop failed.

Definition at line 204 of file dsnlexer.cpp.

References DSNLEXER::dummy, DSNLEXER::limit, LINE_READER::Line(), DSNLEXER::next, DSNLEXER::reader, DSNLEXER::readerStack, and DSNLEXER::start.

Referenced by DSN::SPECCTRA_DB::LoadPCB(), DSN::SPECCTRA_DB::LoadSESSION(), and PCB_PARSER::SetLineReader().

205 {
206  LINE_READER* ret = 0;
207 
208  if( readerStack.size() )
209  {
210  ret = reader;
211  readerStack.pop_back();
212 
213  if( readerStack.size() )
214  {
215  reader = readerStack.back();
216  start = reader->Line();
217 
218  // force a new readLine() as first thing.
219  limit = start;
220  next = start;
221  }
222  else
223  {
224  reader = 0;
225  start = dummy;
226  limit = dummy;
227  }
228  }
229  return ret;
230 }
Class LINE_READER is an abstract class from which implementation specific LINE_READERs may be derived...
Definition: richio.h:81
const char * next
Definition: dsnlexer.h:85
const char * limit
Definition: dsnlexer.h:86
char * Line() const
Function Line returns a pointer to the last line that was read in.
Definition: richio.h:139
READER_STACK readerStack
all the LINE_READERs by pointer.
Definition: dsnlexer.h:91
LINE_READER * reader
no ownership. ownership is via readerStack, maybe, if iOwnReaders
Definition: dsnlexer.h:92
const char * start
Definition: dsnlexer.h:84
char dummy[1]
when there is no reader.
Definition: dsnlexer.h:87
TB_READER_T::T PAGE_LAYOUT_READER_LEXER::PrevTok ( )
inlineinherited

Function PrevTok returns whatever NextTok() returned the 2nd to last time it was called.

Definition at line 208 of file page_layout_reader_lexer.h.

References DSNLEXER::PrevTok().

209  {
211  }
int PrevTok()
Function PrevTok returns whatever NextTok() returned the 2nd to last time it was called.
Definition: dsnlexer.h:329
T
enum T contains all this lexer's tokens.
void DSNLEXER::PushReader ( LINE_READER aLineReader)
inherited

Function PushReader manages a stack of LINE_READERs in order to handle nested file inclusion.

This function pushes aLineReader onto the top of a stack of LINE_READERs and makes it the current LINE_READER with its own GetSource(), line number and line text. A grammar must be designed such that the "include" token (whatever its various names), and any of its parameters are not followed by anything on that same line, because PopReader always starts reading from a new line upon returning to the original LINE_READER.

Definition at line 192 of file dsnlexer.cpp.

References DSNLEXER::limit, DSNLEXER::next, DSNLEXER::reader, DSNLEXER::readerStack, and DSNLEXER::start.

Referenced by DSNLEXER::DSNLEXER(), DSN::SPECCTRA_DB::LoadPCB(), DSN::SPECCTRA_DB::LoadSESSION(), and PCB_PARSER::SetLineReader().

193 {
194  readerStack.push_back( aLineReader );
195  reader = aLineReader;
196  start = (const char*) (*reader);
197 
198  // force a new readLine() as first thing.
199  limit = start;
200  next = start;
201 }
const char * next
Definition: dsnlexer.h:85
const char * limit
Definition: dsnlexer.h:86
READER_STACK readerStack
all the LINE_READERs by pointer.
Definition: dsnlexer.h:91
LINE_READER * reader
no ownership. ownership is via readerStack, maybe, if iOwnReaders
Definition: dsnlexer.h:92
const char * start
Definition: dsnlexer.h:84
wxArrayString * DSNLEXER::ReadCommentLines ( )
inherited

Function ReadCommentLines checks the next sequence of tokens and reads them into a wxArrayString if they are comments.

Reading continues until a non-comment token is encountered, and such last read token remains as CurTok() and as CurText(). No push back or "un get" mechanism is used for this support. Upon return you simply avoid calling NextTok() for the next token, but rather CurTok().

Returns
wxArrayString* - heap allocated block of comments, or NULL if none; caller owns the allocation and must delete if not NULL.

Definition at line 811 of file dsnlexer.cpp.

References DSN_COMMENT, DSNLEXER::FromUTF8(), DSNLEXER::NextTok(), and DSNLEXER::SetCommentsAreTokens().

812 {
813  wxArrayString* ret = 0;
814  bool cmt_setting = SetCommentsAreTokens( true );
815  int tok = NextTok();
816 
817  if( tok == DSN_COMMENT )
818  {
819  ret = new wxArrayString();
820 
821  do
822  {
823  ret->Add( FromUTF8() );
824  }
825  while( ( tok = NextTok() ) == DSN_COMMENT );
826  }
827 
828  SetCommentsAreTokens( cmt_setting );
829 
830  return ret;
831 }
bool SetCommentsAreTokens(bool val)
Function SetCommentsAreTokens changes the handling of comments.
Definition: dsnlexer.h:372
wxString FromUTF8()
Function FromUTF8 returns the current token text as a wxString, assuming that the input byte stream i...
Definition: dsnlexer.h:498
int NextTok()
Function NextTok returns the next token found in the input file or DSN_EOF when reaching the end of f...
Definition: dsnlexer.cpp:540
int DSNLEXER::readLine ( )
inlineprotectedinherited

Definition at line 117 of file dsnlexer.h.

References LINE_READER::Length(), LINE_READER::Line(), LINE_READER::ReadLine(), and DSNLEXER::start.

Referenced by DSNLEXER::NextTok().

118  {
119  if( reader )
120  {
121  reader->ReadLine();
122 
123  unsigned len = reader->Length();
124 
125  // start may have changed in ReadLine(), which can resize and
126  // relocate reader's line buffer.
127  start = reader->Line();
128 
129  next = start;
130  limit = next + len;
131 
132  return len;
133  }
134  return 0;
135  }
const char * next
Definition: dsnlexer.h:85
const char * limit
Definition: dsnlexer.h:86
char * Line() const
Function Line returns a pointer to the last line that was read in.
Definition: richio.h:139
unsigned Length() const
Function Length returns the number of bytes in the last line read from this LINE_READER.
Definition: richio.h:168
LINE_READER * reader
no ownership. ownership is via readerStack, maybe, if iOwnReaders
Definition: dsnlexer.h:92
const char * start
Definition: dsnlexer.h:84
virtual char * ReadLine()=0
Function ReadLine reads a line of text into the buffer and increments the line number counter...
void PAGE_LAYOUT_READER_PARSER::readOption ( WORKSHEET_DATAITEM aItem)
private

Definition at line 440 of file page_layout_reader.cpp.

References DSNLEXER::CurText(), PAGE_LAYOUT_READER_LEXER::NextTok(), WORKSHEET_DATAITEM::SetPage1Option(), DSN::T_EOF, TB_READER_T::T_notonpage1, TB_READER_T::T_page1only, DSN::T_RIGHT, and DSNLEXER::Unexpected().

Referenced by parseBitmap(), parseGraphic(), parsePolygon(), and parseText().

441 {
442  T token;
443 
444  while( ( token = NextTok() ) != T_RIGHT )
445  {
446  if( token == T_EOF)
447  break;
448 
449  switch( token )
450  {
451  case T_page1only:
452  aItem->SetPage1Option( 1 );
453  break;
454 
455  case T_notonpage1:
456  aItem->SetPage1Option( -1 );
457  break;
458 
459  default:
460  Unexpected( CurText() );
461  break;
462  }
463  }
464 }
void Unexpected(int aTok)
Function Unexpected throws an IO_ERROR exception with an input file specific error message...
Definition: dsnlexer.cpp:369
TB_READER_T::T NextTok()
Function NextTok returns the next token found in the input file or T_EOF when reaching the end of fil...
T
enum T contains all this lexer's tokens.
void SetPage1Option(int aChoice)
Set the option for page 1.
const char * CurText()
Function CurText returns a pointer to the current token's text.
Definition: dsnlexer.h:479
void PAGE_LAYOUT_READER_PARSER::readPngdata ( WORKSHEET_DATAITEM_BITMAP aItem)
private

Definition at line 400 of file page_layout_reader.cpp.

References DSNLEXER::CurStr(), DSNLEXER::CurText(), BITMAP_BASE::LoadData(), WORKSHEET_DATAITEM_BITMAP::m_ImageBitmap, DSNLEXER::NeedRIGHT(), PAGE_LAYOUT_READER_LEXER::NeedSYMBOLorNUMBER(), PAGE_LAYOUT_READER_LEXER::NextTok(), TB_READER_T::T_data, DSN::T_EOF, DSN::T_LEFT, DSN::T_RIGHT, and DSNLEXER::Unexpected().

Referenced by parseBitmap().

401 {
402  std::string tmp;
403  T token;
404 
405  while( ( token = NextTok() ) != T_RIGHT )
406  {
407  if( token == T_EOF)
408  break;
409 
410  if( token == T_LEFT )
411  token = NextTok();
412 
413  switch( token )
414  {
415  case T_data:
417  tmp += CurStr();
418  tmp += "\n";
419  NeedRIGHT();
420  break;
421 
422  default:
423  Unexpected( CurText() );
424  break;
425  }
426  }
427 
428  tmp += "EndData";
429 
430  wxString msg;
431  STRING_LINE_READER str_reader( tmp, wxT("Png kicad_wks data") );
432 
433  if( ! aItem->m_ImageBitmap->LoadData( str_reader, msg ) )
434  {
435  wxLogMessage(msg);
436  }
437 }
void Unexpected(int aTok)
Function Unexpected throws an IO_ERROR exception with an input file specific error message...
Definition: dsnlexer.cpp:369
const std::string & CurStr()
Function CurStr returns a reference to current token in std::string form.
Definition: dsnlexer.h:488
TB_READER_T::T NeedSYMBOLorNUMBER()
Function NeedSYMBOLorNUMBER calls NextTok() and then verifies that the token read in satisfies bool I...
TB_READER_T::T NextTok()
Function NextTok returns the next token found in the input file or T_EOF when reaching the end of fil...
bool LoadData(LINE_READER &aLine, wxString &aErrorMsg)
Load an image data saved by SaveData (png, in Hexadecimal form)
T
enum T contains all this lexer's tokens.
void NeedRIGHT()
Function NeedRIGHT calls NextTok() and then verifies that the token read in is a DSN_RIGHT.
Definition: dsnlexer.cpp:401
Class STRING_LINE_READER is a LINE_READER that reads from a multiline 8 bit wide std::string.
Definition: richio.h:254
const char * CurText()
Function CurText returns a pointer to the current token's text.
Definition: dsnlexer.h:479
bool DSNLEXER::SetCommentsAreTokens ( bool  val)
inlineinherited

Function SetCommentsAreTokens changes the handling of comments.

If set true, comments are returns as single line strings with a terminating newline, else they are consumed by the lexer and not returned.

Definition at line 372 of file dsnlexer.h.

References DSNLEXER::commentsAreTokens.

Referenced by DSNLEXER::ReadCommentLines().

373  {
374  bool old = commentsAreTokens;
375  commentsAreTokens = val;
376  return old;
377  }
bool commentsAreTokens
true if should return comments as tokens
Definition: dsnlexer.h:103
bool DSNLEXER::SetSpaceInQuotedTokens ( bool  val)
inlineinherited

Function SetSpaceInQuotedTokens changes the setting controlling whether a space in a quoted string is a terminator.

Parameters
valIf true, means

Definition at line 358 of file dsnlexer.h.

References DSNLEXER::space_in_quoted_tokens.

Referenced by DSN::SPECCTRA_DB::doPARSER().

359  {
360  bool old = space_in_quoted_tokens;
361  if( specctraMode )
363  return old;
364  }
bool space_in_quoted_tokens
blank spaces within quoted strings
Definition: dsnlexer.h:101
bool specctraMode
if true, then: 1) stringDelimiter can be changed 2) Kicad quoting protocol is not in effect 3) space_...
Definition: dsnlexer.h:94
void DSNLEXER::SetSpecctraMode ( bool  aMode)
inherited

Function SetSpecctraMode changes the behavior of this lexer into or out of "specctra mode".

If specctra mode, then: 1) stringDelimiter can be changed 2) Kicad quoting protocol is not in effect 3) space_in_quoted_tokens is functional else none of the above are true. The default mode is non-specctra mode, meaning: 1) stringDelimiter cannot be changed 2) Kicad quoting protocol is in effect 3) space_in_quoted_tokens is not functional

Definition at line 153 of file dsnlexer.cpp.

References DSNLEXER::space_in_quoted_tokens, DSNLEXER::specctraMode, and DSNLEXER::stringDelimiter.

Referenced by DSN::SPECCTRA_DB::SPECCTRA_DB().

154 {
155  specctraMode = aMode;
156  if( aMode )
157  {
158  // specctra mode defaults, some of which can still be changed in this mode.
159  space_in_quoted_tokens = true;
160  }
161  else
162  {
163  space_in_quoted_tokens = false;
164  stringDelimiter = '"';
165  }
166 }
bool space_in_quoted_tokens
blank spaces within quoted strings
Definition: dsnlexer.h:101
bool specctraMode
if true, then: 1) stringDelimiter can be changed 2) Kicad quoting protocol is not in effect 3) space_...
Definition: dsnlexer.h:94
char stringDelimiter
Definition: dsnlexer.h:100
char DSNLEXER::SetStringDelimiter ( char  aStringDelimiter)
inlineinherited

Function SetStringDelimiter changes the string delimiter from the default " to some other character and returns the old value.

Parameters
aStringDelimiterThe character in lowest 8 bits.
Returns
int - The old delimiter in the lowest 8 bits.

Definition at line 344 of file dsnlexer.h.

References DSNLEXER::stringDelimiter.

Referenced by DSN::SPECCTRA_DB::doFROMTO(), and DSN::SPECCTRA_DB::doPARSER().

345  {
346  int old = stringDelimiter;
347  if( specctraMode )
348  stringDelimiter = aStringDelimiter;
349  return old;
350  }
bool specctraMode
if true, then: 1) stringDelimiter can be changed 2) Kicad quoting protocol is not in effect 3) space_...
Definition: dsnlexer.h:94
char stringDelimiter
Definition: dsnlexer.h:100
bool DSNLEXER::SyncLineReaderWith ( DSNLEXER aLexer)
inherited

Useable only for DSN lexers which share the same LINE_READER Synchronizes the pointers handling the data read by the LINE_READER Allows 2 DNSLEXER to share the same current line, when switching from a DNSLEXER to an other DNSLEXER.

Parameters
aLexer= the model
Returns
true if the sync can be made ( at least the same line reader )

Definition at line 169 of file dsnlexer.cpp.

References DSNLEXER::curOffset, DSNLEXER::curText, DSNLEXER::limit, DSNLEXER::next, DSNLEXER::reader, and DSNLEXER::start.

Referenced by PCB_PARSER::parseSetup().

170 {
171  // Synchronize the pointers handling the data read by the LINE_READER
172  // only if aLexer shares the same LINE_READER, because only in this case
173  // the char buffer is be common
174 
175  if( reader != aLexer.reader )
176  return false;
177 
178  // We can synchronize the pointers which handle the data currently read
179  start = aLexer.start;
180  next = aLexer.next;
181  limit = aLexer.limit;
182 
183  // Sync these parameters is not mandatory, but could help
184  // for instance in debug
185  curText = aLexer.curText;
186  curOffset = aLexer.curOffset;
187 
188  return true;
189 }
int curOffset
offset within current line of the current token
Definition: dsnlexer.h:106
const char * next
Definition: dsnlexer.h:85
const char * limit
Definition: dsnlexer.h:86
LINE_READER * reader
no ownership. ownership is via readerStack, maybe, if iOwnReaders
Definition: dsnlexer.h:92
const char * start
Definition: dsnlexer.h:84
std::string curText
the text of the current token
Definition: dsnlexer.h:109
const char * DSNLEXER::Syntax ( int  aTok)
staticinherited

Definition at line 271 of file dsnlexer.cpp.

References DSN_DASH, DSN_EOF, DSN_LEFT, DSN_NONE, DSN_NUMBER, DSN_QUOTE_DEF, DSN_RIGHT, DSN_STRING, DSN_STRING_QUOTE, and DSN_SYMBOL.

Referenced by DSNLEXER::GetTokenText(), DIALOG_BOM_CFG_LEXER::TokenName(), TEMPLATE_FIELDNAMES_LEXER::TokenName(), FP_LIB_TABLE_LEXER::TokenName(), LIB_TABLE_LEXER::TokenName(), PCB_PLOT_PARAMS_LEXER::TokenName(), CMP_LIBRARY_LEXER::TokenName(), NETLIST_LEXER::TokenName(), PAGE_LAYOUT_READER_LEXER::TokenName(), PCB_LEXER::TokenName(), and SPECCTRA_LEXER::TokenName().

272 {
273  const char* ret;
274 
275  switch( aTok )
276  {
277  case DSN_NONE:
278  ret = "NONE";
279  break;
280  case DSN_STRING_QUOTE:
281  ret = "string_quote"; // a special DSN syntax token, see specctra spec.
282  break;
283  case DSN_QUOTE_DEF:
284  ret = "quoted text delimiter";
285  break;
286  case DSN_DASH:
287  ret = "-";
288  break;
289  case DSN_SYMBOL:
290  ret = "symbol";
291  break;
292  case DSN_NUMBER:
293  ret = "number";
294  break;
295  case DSN_RIGHT:
296  ret = ")";
297  break;
298  case DSN_LEFT:
299  ret = "(";
300  break;
301  case DSN_STRING:
302  ret = "quoted string";
303  break;
304  case DSN_EOF:
305  ret = "end of input";
306  break;
307  default:
308  ret = "???";
309  }
310 
311  return ret;
312 }
const char * PAGE_LAYOUT_READER_LEXER::TokenName ( TB_READER_T::T  aTok)
staticinherited

Function TokenName returns the name of the token in ASCII form.

Definition at line 69 of file page_layout_reader_keywords.cpp.

References DSNLEXER::Syntax().

Referenced by getTokenName().

70 {
71  const char* ret;
72 
73  if( aTok < 0 )
74  ret = DSNLEXER::Syntax( aTok );
75  else if( (unsigned) aTok < keyword_count )
76  ret = keywords[aTok].name;
77  else
78  ret = "token too big";
79 
80  return ret;
81 }
static const KEYWORD keywords[]
Auto generated lexer keywords table and length:
static const unsigned keyword_count
const char * name
unique keyword.
Definition: dsnlexer.h:42
static const char * Syntax(int aTok)
Definition: dsnlexer.cpp:271
void DSNLEXER::Unexpected ( int  aTok)
inherited

Function Unexpected throws an IO_ERROR exception with an input file specific error message.

Parameters
aTokis the token/keyword type which was not expected at the current input location.
Exceptions
IO_ERRORwith the location within the input file of the problem.

Definition at line 369 of file dsnlexer.cpp.

References DSNLEXER::CurLine(), DSNLEXER::CurLineNumber(), DSNLEXER::CurOffset(), DSNLEXER::CurSource(), Format(), GetChars(), DSNLEXER::GetTokenString(), and THROW_PARSE_ERROR.

Referenced by DSN::SPECCTRA_DB::doANCESTOR(), DSN::SPECCTRA_DB::doBOUNDARY(), DSN::SPECCTRA_DB::doCLASS(), DSN::SPECCTRA_DB::doCLASS_CLASS(), DSN::SPECCTRA_DB::doCOMPONENT(), DSN::SPECCTRA_DB::doCONNECT(), DSN::SPECCTRA_DB::doCONTROL(), DSN::SPECCTRA_DB::doFROMTO(), DSN::SPECCTRA_DB::doGRID(), DSN::SPECCTRA_DB::doHISTORY(), DSN::SPECCTRA_DB::doIMAGE(), DSN::SPECCTRA_DB::doKEEPOUT(), DSN::SPECCTRA_DB::doLAYER(), DSN::SPECCTRA_DB::doLIBRARY(), DSN::SPECCTRA_DB::doNET(), DSN::SPECCTRA_DB::doNET_OUT(), DSN::SPECCTRA_DB::doNETWORK(), DSN::SPECCTRA_DB::doPADSTACK(), DSN::SPECCTRA_DB::doPARSER(), DSN::SPECCTRA_DB::doPCB(), DSN::SPECCTRA_DB::doPLACE(), DSN::SPECCTRA_DB::doPLACEMENT(), DSN::SPECCTRA_DB::doREGION(), DSN::SPECCTRA_DB::doROUTE(), DSN::SPECCTRA_DB::doRULE(), DSN::SPECCTRA_DB::doSESSION(), DSN::SPECCTRA_DB::doSHAPE(), DSN::SPECCTRA_DB::doSTRUCTURE(), DSN::SPECCTRA_DB::doSTRUCTURE_OUT(), DSN::SPECCTRA_DB::doSUPPLY_PIN(), DSN::SPECCTRA_DB::doTOKPROP(), DSN::SPECCTRA_DB::doTOPOLOGY(), DSN::SPECCTRA_DB::doVIA(), DSN::SPECCTRA_DB::doWAS_IS(), DSN::SPECCTRA_DB::doWINDOW(), DSN::SPECCTRA_DB::doWIRE(), DSN::SPECCTRA_DB::doWIRE_VIA(), DSN::SPECCTRA_DB::doWIRING(), PCB_PLOT_PARAMS_PARSER::Parse(), Parse(), SYMBOL_LIB_TABLE::Parse(), FP_LIB_TABLE::Parse(), TEMPLATES::Parse(), LIB_TABLE_ROW::Parse(), parseBitmap(), parseCoordinate(), parseGraphic(), BOM_CFG_READER_PARSER::parsePlugin(), parsePolygon(), parsePolyOutline(), parseSetup(), parseText(), readOption(), readPngdata(), Scan(), and scanList().

370 {
371  wxString errText = wxString::Format(
372  _("Unexpected '%s'"), GetChars( GetTokenString( aTok ) ) );
374 }
const wxString & CurSource()
Function CurFilename returns the current LINE_READER source.
Definition: dsnlexer.h:528
#define THROW_PARSE_ERROR(aProblem, aSource, aInputLine, aLineNumber, aByteIndex)
Definition: ki_exception.h:133
int CurOffset()
Function CurOffset returns the byte offset within the current line, using a 1 based index...
Definition: dsnlexer.h:538
const char * CurLine()
Function CurLine returns the current line of text, from which the CurText() would return its token...
Definition: dsnlexer.h:517
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:92
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
int CurLineNumber()
Function CurLineNumber returns the current line number within my LINE_READER.
Definition: dsnlexer.h:507
wxString GetTokenString(int aTok)
Function GetTokenString returns a quote wrapped wxString representation of a token value...
Definition: dsnlexer.cpp:334
void DSNLEXER::Unexpected ( const char *  aToken)
inherited

Function Unexpected throws an IO_ERROR exception with an input file specific error message.

Parameters
aTokenis the token which was not expected at the current input location.
Exceptions
IO_ERRORwith the location within the input file of the problem.

Definition at line 385 of file dsnlexer.cpp.

References DSNLEXER::CurLine(), DSNLEXER::CurLineNumber(), DSNLEXER::CurOffset(), DSNLEXER::CurSource(), Format(), GetChars(), and THROW_PARSE_ERROR.

386 {
387  wxString errText = wxString::Format(
388  _("Unexpected '%s'"), GetChars( wxString::FromUTF8( text ) ) );
390 }
const wxString & CurSource()
Function CurFilename returns the current LINE_READER source.
Definition: dsnlexer.h:528
#define THROW_PARSE_ERROR(aProblem, aSource, aInputLine, aLineNumber, aByteIndex)
Definition: ki_exception.h:133
int CurOffset()
Function CurOffset returns the byte offset within the current line, using a 1 based index...
Definition: dsnlexer.h:538
const char * CurLine()
Function CurLine returns the current line of text, from which the CurText() would return its token...
Definition: dsnlexer.h:517
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:92
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
int CurLineNumber()
Function CurLineNumber returns the current line number within my LINE_READER.
Definition: dsnlexer.h:507

Member Data Documentation

bool DSNLEXER::commentsAreTokens
protectedinherited

true if should return comments as tokens

Definition at line 103 of file dsnlexer.h.

Referenced by DSNLEXER::init(), DSNLEXER::NextTok(), and DSNLEXER::SetCommentsAreTokens().

int DSNLEXER::curOffset
protectedinherited

offset within current line of the current token

Definition at line 106 of file dsnlexer.h.

Referenced by DSNLEXER::init(), DSNLEXER::NextTok(), and DSNLEXER::SyncLineReaderWith().

std::string DSNLEXER::curText
protectedinherited

the text of the current token

Definition at line 109 of file dsnlexer.h.

Referenced by DSNLEXER::CurStr(), DSNLEXER::NextTok(), and DSNLEXER::SyncLineReaderWith().

int DSNLEXER::curTok
protectedinherited

the current token obtained on last NextTok()

Definition at line 108 of file dsnlexer.h.

Referenced by DSNLEXER::CurTok(), DSNLEXER::init(), and DSNLEXER::NextTok().

char DSNLEXER::dummy[1]
protectedinherited

when there is no reader.

Definition at line 87 of file dsnlexer.h.

Referenced by DSNLEXER::PopReader().

bool DSNLEXER::iOwnReaders
protectedinherited

on readerStack, should I delete them?

Definition at line 83 of file dsnlexer.h.

Referenced by DSN::SPECCTRA_DB::SPECCTRA_DB(), and DSNLEXER::~DSNLEXER().

KEYWORD_MAP DSNLEXER::keyword_hash
protectedinherited

fast, specialized "C string" hashtable

Definition at line 113 of file dsnlexer.h.

Referenced by DSNLEXER::findToken(), and DSNLEXER::init().

unsigned DSNLEXER::keywordCount
protectedinherited

count of keywords table

Definition at line 112 of file dsnlexer.h.

Referenced by DSNLEXER::GetTokenText(), and DSNLEXER::init().

const char* DSNLEXER::limit
protectedinherited
const char* DSNLEXER::next
protectedinherited
int DSNLEXER::prevTok
protectedinherited

curTok from previous NextTok() call.

Definition at line 105 of file dsnlexer.h.

Referenced by DSNLEXER::init(), DSNLEXER::NextTok(), and DSNLEXER::PrevTok().

LINE_READER* DSNLEXER::reader
protectedinherited

no ownership. ownership is via readerStack, maybe, if iOwnReaders

Definition at line 92 of file dsnlexer.h.

Referenced by PCB_PLOT_PARAMS_PARSER::GetReader(), DSNLEXER::PopReader(), DSNLEXER::PushReader(), and DSNLEXER::SyncLineReaderWith().

READER_STACK DSNLEXER::readerStack
protectedinherited

all the LINE_READERs by pointer.

Definition at line 91 of file dsnlexer.h.

Referenced by DSNLEXER::PopReader(), DSNLEXER::PushReader(), and DSNLEXER::~DSNLEXER().

bool DSNLEXER::space_in_quoted_tokens
protectedinherited

blank spaces within quoted strings

Definition at line 101 of file dsnlexer.h.

Referenced by DSNLEXER::init(), DSNLEXER::SetSpaceInQuotedTokens(), and DSNLEXER::SetSpecctraMode().

bool DSNLEXER::specctraMode
protectedinherited

if true, then: 1) stringDelimiter can be changed 2) Kicad quoting protocol is not in effect 3) space_in_quoted_tokens is functional else not.

Definition at line 94 of file dsnlexer.h.

Referenced by DSNLEXER::init(), DSNLEXER::NextTok(), and DSNLEXER::SetSpecctraMode().

const char* DSNLEXER::start
protectedinherited
char DSNLEXER::stringDelimiter
protectedinherited

The documentation for this class was generated from the following file: