Loading CHANGELOG.txt +14 −0 Original line number Original line Diff line number Diff line Loading @@ -4,6 +4,20 @@ KiCad ChangeLog 2010 Please add newer entries at the top, list the date and your name with Please add newer entries at the top, list the date and your name with email address. email address. 2010-Aug-8 UPDATE Dick Hollenbeck <dick@softplc.com> ================================================================================ ++CMakeModules: Revise TokenList2DsnLexer.cmake to make an entire derived lexer class that returns the proper enum type for superior debugging. ++eeschema * netform.cpp now outputs the allowed footprint filters for a given library component. * There is an auto-generated class called NETLIST_LEXER which is defined in from netlist.keywords by TokenList2DsnLexer.cmake into netlist_lexer.h, that may be the basis of loading a S-expression form of the generic netlist format which is written from netform.cpp. 2010-Aug-7 UPDATE Dick Hollenbeck <dick@softplc.com> 2010-Aug-7 UPDATE Dick Hollenbeck <dick@softplc.com> ================================================================================ ================================================================================ ++common ++common Loading CMakeModules/TokenList2DsnLexer.cmake +115 −15 Original line number Original line Diff line number Diff line Loading @@ -82,18 +82,17 @@ get_filename_component( result "${inputFile}" NAME_WE ) message( STATUS "Extracted file name ${result} from path ${inputFile}" ) message( STATUS "Extracted file name ${result} from path ${inputFile}" ) # Create include and source file name from the list file name. # Create include and source file name from the list file name. set( includeFileName "${outputPath}/${result}_keywords.h" ) set( includeFileName "${outputPath}/${result}_lexer.h" ) set( sourceFileName "${outputPath}/${result}_keywords.cpp" ) set( sourceFileName "${outputPath}/${result}_keywords.cpp" ) # Create tag for generating header file. # Create tag for generating header file. string( TOUPPER "${result}" fileNameTag ) string( TOUPPER "${result}" RESULT ) set( headerTag "_${fileNameTag}_H_" ) set( headerTag "_${RESULT}_H_" ) set( includeFileHeader set( includeFileHeader " " /* /* Do not modify this file it was automatically generated by the * Do not modify this file it was automatically generated by the TokenList2DsnLexer CMake * TokenList2DsnLexer CMake script. * script. */ */ #ifndef ${headerTag} #ifndef ${headerTag} Loading Loading @@ -124,18 +123,17 @@ enum ${enum} { set( sourceFileHeader set( sourceFileHeader " " /* /* Do not modify this file it was automatically generated by the * Do not modify this file it was automatically generated by the TokenList2DsnLexer CMake * TokenList2DsnLexer CMake script. * script. * * * Include this file in your lexer class to provide the keywords for you DSN lexer. * Include this file in your lexer class to provide the keywords for * your DSN lexer. */ */ #include \"fctsys.h\" #include \"fctsys.h\" #include \"macros.h\" #include \"macros.h\" #include \"${result}_keywords.h\" #include \"${result}_lexer.h\" namespace DSN { namespace DSN { Loading Loading @@ -209,18 +207,120 @@ extern const unsigned ${result}_keyword_count; } // End namespace DSN } // End namespace DSN using namespace DSN; // enum ${enum} is in this namespace class ${RESULT}_LEXER : public DSNLEXER { public: /** * Constructor ${RESULT}_LEXER * @param aClipboartTxt is std::string (8 bit) text possibly from the * clipboard that you want to parse. */ ${RESULT}_LEXER( const std::string& aClipboardTxt ) : DSNLEXER( aClipboardTxt, DSN::${result}_keywords, DSN::${result}_keyword_count ) { } /** * Constructor ${RESULT}_LEXER * takes @a aFile already opened for reading and @a aFilename as parameters. * The opened file is not closed by this class, and is assumed to be positioned * at the beginning of the file for purposes of accurate line number reporting * in error messages. * @param aFile is a FILE already opened for reading. * @param aFilename is the name of the opened file, needed for error reporting. */ ${RESULT}_LEXER( FILE* aFile, const wxString& aFilename ) : DSNLEXER( aFile, aFilename, DSN::${result}_keywords, DSN::${result}_keyword_count ) { } /** * 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). * @return ${enum} - the type of token found next. * @throw IOError - only if the LINE_READER throws it. */ ${enum} NextTok() throw (IOError) { return (${enum}) DSNLEXER::NextTok(); } /** * Function NeedSYMBOL * calls NextTok() and then verifies that the token read in * satisfies bool IsSymbol(). * If not, an IOError is thrown. * @return int - the actual token read in. * @throw IOError, if the next token does not satisfy IsSymbol() */ ${enum} NeedSYMBOL() throw( IOError ) { return (${enum}) DSNLEXER::NeedSYMBOL(); } /** * Function NeedSYMBOLorNUMBER * calls NextTok() and then verifies that the token read in * satisfies bool IsSymbol() or tok==T_NUMBER. * If not, an IOError is thrown. * @return int - the actual token read in. * @throw IOError, if the next token does not satisfy the above test */ ${enum} NeedSYMBOLorNUMBER() throw( IOError ) { return (${enum}) DSNLEXER::NeedSYMBOLorNUMBER(); } /** * Function CurTok * returns whatever NextTok() returned the last time it was called. */ ${enum} CurTok() { return (${enum}) DSNLEXER::CurTok(); } /** * Function PrevTok * returns whatever NextTok() returned the 2nd to last time it was called. */ ${enum} PrevTok() { return (${enum}) DSNLEXER::PrevTok(); } }; // example usage /** * Class ${RESULT}_PARSER * holds data and functions pertinent to parsing a S-expression file . * class ${RESULT}_PARSER : public ${RESULT}_LEXER { }; */ #endif // End ${headerTag} #endif // ${headerTag} " " ) ) file( APPEND "${sourceFileName}" file( APPEND "${sourceFileName}" "}; "}; const unsigned ${result}_keyword_count = DIM( ${result}_keywords ); const unsigned ${result}_keyword_count = DIM( ${result}_keywords ); } // End namespace DSN } // End namespace DSN " " ) ) common/CMakeLists.txt +14 −0 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,7 @@ set(COMMON_SRCS gr_basic.cpp gr_basic.cpp hotkeys_basic.cpp hotkeys_basic.cpp msgpanel.cpp msgpanel.cpp netlist_keywords.cpp newstroke_font.cpp newstroke_font.cpp ../pcbnew/class_drc_item.cpp ../pcbnew/class_drc_item.cpp projet_config.cpp projet_config.cpp Loading Loading @@ -91,6 +92,19 @@ set(PCB_COMMON_SRCS add_library(pcbcommon ${PCB_COMMON_SRCS}) add_library(pcbcommon ${PCB_COMMON_SRCS}) # auto-generate netlist_lexer.h and netlist_keywords.cpp add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/netlist_lexer.h ${CMAKE_CURRENT_SOURCE_DIR}/netlist_keywords.cpp COMMAND ${CMAKE_COMMAND} -Denum=NL_T -DinputFile=${CMAKE_CURRENT_SOURCE_DIR}/netlist.keywords -P ${CMAKE_MODULE_PATH}/TokenList2DsnLexer.cmake DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/netlist.keywords COMMENT "creating ${CMAKE_CURRENT_SOURCE_DIR}/netlist_{lexer.h,keywords.cpp} from ${CMAKE_CURRENT_SOURCE_DIR}/netlist.keywords" ) # The dsntest may not build properly using MS Visual Studio. # The dsntest may not build properly using MS Visual Studio. if(NOT MSVC) if(NOT MSVC) # This one gets made only when testing. # This one gets made only when testing. Loading eeschema/netlist.keywords→common/netlist.keywords +2 −0 Original line number Original line Diff line number Diff line Loading @@ -10,6 +10,8 @@ export field field fields fields footprint footprint footprints fp lib lib libpart libpart libraries libraries Loading common/richio.cpp +3 −3 Original line number Original line Diff line number Diff line Loading @@ -204,14 +204,14 @@ int OUTPUTFORMATTER::Print( int nestLevel, const char* fmt, ... ) throw( IOError } } //-----<STRINGFORMATTER>---------------------------------------------------- //-----<STRING_FORMATTER>---------------------------------------------------- void STRINGFORMATTER::write( const char* aOutBuf, int aCount ) throw( IOError ) void STRING_FORMATTER::write( const char* aOutBuf, int aCount ) throw( IOError ) { { mystring.append( aOutBuf, aCount ); mystring.append( aOutBuf, aCount ); } } void STRINGFORMATTER::StripUseless() void STRING_FORMATTER::StripUseless() { { std::string copy = mystring; std::string copy = mystring; Loading Loading
CHANGELOG.txt +14 −0 Original line number Original line Diff line number Diff line Loading @@ -4,6 +4,20 @@ KiCad ChangeLog 2010 Please add newer entries at the top, list the date and your name with Please add newer entries at the top, list the date and your name with email address. email address. 2010-Aug-8 UPDATE Dick Hollenbeck <dick@softplc.com> ================================================================================ ++CMakeModules: Revise TokenList2DsnLexer.cmake to make an entire derived lexer class that returns the proper enum type for superior debugging. ++eeschema * netform.cpp now outputs the allowed footprint filters for a given library component. * There is an auto-generated class called NETLIST_LEXER which is defined in from netlist.keywords by TokenList2DsnLexer.cmake into netlist_lexer.h, that may be the basis of loading a S-expression form of the generic netlist format which is written from netform.cpp. 2010-Aug-7 UPDATE Dick Hollenbeck <dick@softplc.com> 2010-Aug-7 UPDATE Dick Hollenbeck <dick@softplc.com> ================================================================================ ================================================================================ ++common ++common Loading
CMakeModules/TokenList2DsnLexer.cmake +115 −15 Original line number Original line Diff line number Diff line Loading @@ -82,18 +82,17 @@ get_filename_component( result "${inputFile}" NAME_WE ) message( STATUS "Extracted file name ${result} from path ${inputFile}" ) message( STATUS "Extracted file name ${result} from path ${inputFile}" ) # Create include and source file name from the list file name. # Create include and source file name from the list file name. set( includeFileName "${outputPath}/${result}_keywords.h" ) set( includeFileName "${outputPath}/${result}_lexer.h" ) set( sourceFileName "${outputPath}/${result}_keywords.cpp" ) set( sourceFileName "${outputPath}/${result}_keywords.cpp" ) # Create tag for generating header file. # Create tag for generating header file. string( TOUPPER "${result}" fileNameTag ) string( TOUPPER "${result}" RESULT ) set( headerTag "_${fileNameTag}_H_" ) set( headerTag "_${RESULT}_H_" ) set( includeFileHeader set( includeFileHeader " " /* /* Do not modify this file it was automatically generated by the * Do not modify this file it was automatically generated by the TokenList2DsnLexer CMake * TokenList2DsnLexer CMake script. * script. */ */ #ifndef ${headerTag} #ifndef ${headerTag} Loading Loading @@ -124,18 +123,17 @@ enum ${enum} { set( sourceFileHeader set( sourceFileHeader " " /* /* Do not modify this file it was automatically generated by the * Do not modify this file it was automatically generated by the TokenList2DsnLexer CMake * TokenList2DsnLexer CMake script. * script. * * * Include this file in your lexer class to provide the keywords for you DSN lexer. * Include this file in your lexer class to provide the keywords for * your DSN lexer. */ */ #include \"fctsys.h\" #include \"fctsys.h\" #include \"macros.h\" #include \"macros.h\" #include \"${result}_keywords.h\" #include \"${result}_lexer.h\" namespace DSN { namespace DSN { Loading Loading @@ -209,18 +207,120 @@ extern const unsigned ${result}_keyword_count; } // End namespace DSN } // End namespace DSN using namespace DSN; // enum ${enum} is in this namespace class ${RESULT}_LEXER : public DSNLEXER { public: /** * Constructor ${RESULT}_LEXER * @param aClipboartTxt is std::string (8 bit) text possibly from the * clipboard that you want to parse. */ ${RESULT}_LEXER( const std::string& aClipboardTxt ) : DSNLEXER( aClipboardTxt, DSN::${result}_keywords, DSN::${result}_keyword_count ) { } /** * Constructor ${RESULT}_LEXER * takes @a aFile already opened for reading and @a aFilename as parameters. * The opened file is not closed by this class, and is assumed to be positioned * at the beginning of the file for purposes of accurate line number reporting * in error messages. * @param aFile is a FILE already opened for reading. * @param aFilename is the name of the opened file, needed for error reporting. */ ${RESULT}_LEXER( FILE* aFile, const wxString& aFilename ) : DSNLEXER( aFile, aFilename, DSN::${result}_keywords, DSN::${result}_keyword_count ) { } /** * 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). * @return ${enum} - the type of token found next. * @throw IOError - only if the LINE_READER throws it. */ ${enum} NextTok() throw (IOError) { return (${enum}) DSNLEXER::NextTok(); } /** * Function NeedSYMBOL * calls NextTok() and then verifies that the token read in * satisfies bool IsSymbol(). * If not, an IOError is thrown. * @return int - the actual token read in. * @throw IOError, if the next token does not satisfy IsSymbol() */ ${enum} NeedSYMBOL() throw( IOError ) { return (${enum}) DSNLEXER::NeedSYMBOL(); } /** * Function NeedSYMBOLorNUMBER * calls NextTok() and then verifies that the token read in * satisfies bool IsSymbol() or tok==T_NUMBER. * If not, an IOError is thrown. * @return int - the actual token read in. * @throw IOError, if the next token does not satisfy the above test */ ${enum} NeedSYMBOLorNUMBER() throw( IOError ) { return (${enum}) DSNLEXER::NeedSYMBOLorNUMBER(); } /** * Function CurTok * returns whatever NextTok() returned the last time it was called. */ ${enum} CurTok() { return (${enum}) DSNLEXER::CurTok(); } /** * Function PrevTok * returns whatever NextTok() returned the 2nd to last time it was called. */ ${enum} PrevTok() { return (${enum}) DSNLEXER::PrevTok(); } }; // example usage /** * Class ${RESULT}_PARSER * holds data and functions pertinent to parsing a S-expression file . * class ${RESULT}_PARSER : public ${RESULT}_LEXER { }; */ #endif // End ${headerTag} #endif // ${headerTag} " " ) ) file( APPEND "${sourceFileName}" file( APPEND "${sourceFileName}" "}; "}; const unsigned ${result}_keyword_count = DIM( ${result}_keywords ); const unsigned ${result}_keyword_count = DIM( ${result}_keywords ); } // End namespace DSN } // End namespace DSN " " ) )
common/CMakeLists.txt +14 −0 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,7 @@ set(COMMON_SRCS gr_basic.cpp gr_basic.cpp hotkeys_basic.cpp hotkeys_basic.cpp msgpanel.cpp msgpanel.cpp netlist_keywords.cpp newstroke_font.cpp newstroke_font.cpp ../pcbnew/class_drc_item.cpp ../pcbnew/class_drc_item.cpp projet_config.cpp projet_config.cpp Loading Loading @@ -91,6 +92,19 @@ set(PCB_COMMON_SRCS add_library(pcbcommon ${PCB_COMMON_SRCS}) add_library(pcbcommon ${PCB_COMMON_SRCS}) # auto-generate netlist_lexer.h and netlist_keywords.cpp add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/netlist_lexer.h ${CMAKE_CURRENT_SOURCE_DIR}/netlist_keywords.cpp COMMAND ${CMAKE_COMMAND} -Denum=NL_T -DinputFile=${CMAKE_CURRENT_SOURCE_DIR}/netlist.keywords -P ${CMAKE_MODULE_PATH}/TokenList2DsnLexer.cmake DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/netlist.keywords COMMENT "creating ${CMAKE_CURRENT_SOURCE_DIR}/netlist_{lexer.h,keywords.cpp} from ${CMAKE_CURRENT_SOURCE_DIR}/netlist.keywords" ) # The dsntest may not build properly using MS Visual Studio. # The dsntest may not build properly using MS Visual Studio. if(NOT MSVC) if(NOT MSVC) # This one gets made only when testing. # This one gets made only when testing. Loading
eeschema/netlist.keywords→common/netlist.keywords +2 −0 Original line number Original line Diff line number Diff line Loading @@ -10,6 +10,8 @@ export field field fields fields footprint footprint footprints fp lib lib libpart libpart libraries libraries Loading
common/richio.cpp +3 −3 Original line number Original line Diff line number Diff line Loading @@ -204,14 +204,14 @@ int OUTPUTFORMATTER::Print( int nestLevel, const char* fmt, ... ) throw( IOError } } //-----<STRINGFORMATTER>---------------------------------------------------- //-----<STRING_FORMATTER>---------------------------------------------------- void STRINGFORMATTER::write( const char* aOutBuf, int aCount ) throw( IOError ) void STRING_FORMATTER::write( const char* aOutBuf, int aCount ) throw( IOError ) { { mystring.append( aOutBuf, aCount ); mystring.append( aOutBuf, aCount ); } } void STRINGFORMATTER::StripUseless() void STRING_FORMATTER::StripUseless() { { std::string copy = mystring; std::string copy = mystring; Loading