From 5d4da5ede9fd3ac2dc083850aa2f8cb6a6ba7862 Mon Sep 17 00:00:00 2001 From: Dick Hollenbeck Date: Sat, 10 Nov 2012 00:39:18 -0600 Subject: [PATCH] switch to new s-expression format for footprint exports, use english layernames for naked footprints, dodge conflict with pythons HAVE_GETC_UNLOCKED --- CMakeModules/PerformFeatureChecks.cmake | 2 +- CMakeModules/config.h.cmake | 8 ++++---- common/richio.cpp | 2 +- pcbnew/class_board_item.cpp | 9 ++++----- pcbnew/kicad_plugin.cpp | 14 +++++++++++--- pcbnew/kicad_plugin.h | 14 +++++++++----- pcbnew/librairi.cpp | 2 +- pcbnew/scripting/pcbnew.i | 22 +++++++++++----------- 8 files changed, 42 insertions(+), 31 deletions(-) diff --git a/CMakeModules/PerformFeatureChecks.cmake b/CMakeModules/PerformFeatureChecks.cmake index 63395dc356..846c36ffce 100644 --- a/CMakeModules/PerformFeatureChecks.cmake +++ b/CMakeModules/PerformFeatureChecks.cmake @@ -80,7 +80,7 @@ macro(perform_feature_checks) # Check for Posix getc_unlocked() for improved performance over getc(). Fall back to # getc() on platforms where getc_unlocked() doesn't exist. - check_symbol_exists(getc_unlocked "stdio.h" HAVE_GETC_UNLOCKED) + check_symbol_exists(getc_unlocked "stdio.h" HAVE_FGETC_NOLOCK) # Generate config.h. configure_file(${PROJECT_SOURCE_DIR}/CMakeModules/config.h.cmake diff --git a/CMakeModules/config.h.cmake b/CMakeModules/config.h.cmake index 35e6e097de..6882ff1108 100644 --- a/CMakeModules/config.h.cmake +++ b/CMakeModules/config.h.cmake @@ -1,4 +1,4 @@ -/* Do not modify this file, it was automatically generated by CMake. */ +// Do not modify this file, it was automatically generated by CMake. #ifndef CONFIG_H_ #define CONFIG_H_ @@ -50,10 +50,10 @@ #define strnicmp _strnicmp #endif -/* Use Posix getc_unlocked() instead of getc() when it's available. */ -#cmakedefine HAVE_GETC_UNLOCKED +// Use Posix getc_unlocked() instead of getc() when it's available. +#cmakedefine HAVE_FGETC_NOLOCK -/* Warning!!! Using wxGraphicContext for rendering is experimental. */ +// Warning!!! Using wxGraphicContext for rendering is experimental. #cmakedefine USE_WX_GRAPHICS_CONTEXT 1 #cmakedefine USE_IMAGES_IN_MENUS 1 diff --git a/common/richio.cpp b/common/richio.cpp index d184e5258a..3b307d3b04 100644 --- a/common/richio.cpp +++ b/common/richio.cpp @@ -30,7 +30,7 @@ // Fall back to getc() when getc_unlocked() is not available on the target platform. -#if !defined( HAVE_GETC_UNLOCKED ) +#if !defined( HAVE_FGETC_NOLOCK ) #define getc_unlocked getc #endif diff --git a/pcbnew/class_board_item.cpp b/pcbnew/class_board_item.cpp index 5a73cf1abd..15621107c9 100644 --- a/pcbnew/class_board_item.cpp +++ b/pcbnew/class_board_item.cpp @@ -76,14 +76,13 @@ BOARD* BOARD_ITEM::GetBoard() const wxString BOARD_ITEM::GetLayerName() const { - wxString layerName; - BOARD* board = GetBoard(); + BOARD* board = GetBoard(); - if( board != NULL ) + if( board ) return board->GetLayerName( m_Layer ).Trim(); - // If no parent, return the default layer for the object. - return BOARD::GetDefaultLayerName( m_Layer, true ); + // If no parent, return the untranslated layer name. + return BOARD::GetDefaultLayerName( m_Layer, false ); } diff --git a/pcbnew/kicad_plugin.cpp b/pcbnew/kicad_plugin.cpp index c233eb8878..6013f48660 100644 --- a/pcbnew/kicad_plugin.cpp +++ b/pcbnew/kicad_plugin.cpp @@ -388,7 +388,15 @@ void PCB_IO::Format( BOARD_ITEM* aItem, int aNestLevel ) const void PCB_IO::formatLayer( const BOARD_ITEM* aItem ) const { - m_out->Print( 0, " (layer %s)", m_out->Quotew( aItem->GetLayerName() ).c_str() ); + if( m_ctl & CTL_UNTRANSLATED_LAYERS ) + { + int layer = aItem->GetLayer(); + + // English layer names should never need quoting. + m_out->Print( 0, " (layer %s)", TO_UTF8( BOARD::GetDefaultLayerName( layer, false ) ) ); + } + else + m_out->Print( 0, " (layer %s)", m_out->Quotew( aItem->GetLayerName() ).c_str() ); } @@ -1048,7 +1056,7 @@ void PCB_IO::format( D_PAD* aPad, int aNestLevel ) const { if( layerMask & 1 ) { - if( m_board ) + if( m_board && !(m_ctl & CTL_UNTRANSLATED_LAYERS) ) layerName = m_board->GetLayerName( layer ); else // from FootprintSave() @@ -1061,7 +1069,7 @@ void PCB_IO::format( D_PAD* aPad, int aNestLevel ) const m_out->Print( 0, ")\n" ); // Unconnected pad is default net so don't save it. - if( !(m_ctl & CTL_CLIPBOARD) && aPad->GetNet() != 0 ) + if( !(m_ctl & CTL_OMIT_NETS) && aPad->GetNet() != 0 ) { m_out->Print( aNestLevel+1, "(net %d %s)\n", aPad->GetNet(), m_out->Quotew( aPad->GetNetname() ).c_str() ); diff --git a/pcbnew/kicad_plugin.h b/pcbnew/kicad_plugin.h index 7a52ae27d7..4a710ea6b8 100644 --- a/pcbnew/kicad_plugin.h +++ b/pcbnew/kicad_plugin.h @@ -33,11 +33,16 @@ class FP_CACHE; class PCB_PARSER; -/** Current s-expression file format version. 2 was the last legacy format version. */ -#define SEXPR_BOARD_FILE_VERSION 3 +/// Current s-expression file format version. 2 was the last legacy format version. +#define SEXPR_BOARD_FILE_VERSION 3 -/** Format output for the clipboard instead of a file. */ -#define CTL_CLIPBOARD (1 << 0) +/// Format output for the clipboard instead of a file. +#define CTL_UNTRANSLATED_LAYERS (1 << 0) + +#define CTL_OMIT_NETS (1 << 1) + +/// Format output for the clipboard instead of a file +#define CTL_CLIPBOARD (CTL_UNTRANSLATED_LAYERS | CTL_OMIT_NETS) /** @@ -50,7 +55,6 @@ class PCB_IO : public PLUGIN { friend class FP_CACHE; - public: //-------------------------------------------------------------- diff --git a/pcbnew/librairi.cpp b/pcbnew/librairi.cpp index 490f552860..c9ae4dfa90 100644 --- a/pcbnew/librairi.cpp +++ b/pcbnew/librairi.cpp @@ -240,7 +240,7 @@ void FOOTPRINT_EDIT_FRAME::Export_Module( MODULE* aModule, bool aCreateSysLib ) try { -#if 0 // This *.kicad_mod export works fine. It is the import which is still broken. +#if 1 // This *.kicad_mod export works fine. It is the import which is still broken. // The function PCB_PARSER::Parse() fails with due to the m_layerName[] table // being empty. diff --git a/pcbnew/scripting/pcbnew.i b/pcbnew/scripting/pcbnew.i index 9484ab890f..a4489a1e2f 100644 --- a/pcbnew/scripting/pcbnew.i +++ b/pcbnew/scripting/pcbnew.i @@ -40,7 +40,7 @@ %ignore D_PAD::m_PadSketchModePenSize; // rename the Add method of classes to Add native, so we will handle -// the Add method in python +// the Add method in python %rename(AddNative) *::Add; @@ -50,16 +50,16 @@ } catch( IO_ERROR e ) { - char ExceptionError[256]; - sprintf(ExceptionError, "%s\n", TO_UTF8(e.errorText) ); - PyErr_SetString(PyExc_IOError,ExceptionError); + std::string str = TO_UTF8( e.errorText ); + str += '\n'; + PyErr_SetString( PyExc_IOError, str.c_str() ); return NULL; } catch( std::exception &e ) { - char ExceptionError[256]; - sprintf( ExceptionError, "%s\n", e.what() ); - PyErr_SetString(PyExc_IOError,ExceptionError); + std::string str = e.what(); + str += '\n'; + PyErr_SetString( PyExc_IOError, str.c_str() ); return NULL; } catch( ... ) @@ -72,14 +72,14 @@ // this is what it must be included in the wrapper .cxx code to compile -%{ +%{ #include #include #include #include #include #include - #include + #include #include #include #include @@ -99,7 +99,7 @@ #include #include #include - + BOARD *GetBoard(); /* get current editor board */ %} @@ -151,4 +151,4 @@ %include "plugins.i" %include "units.i" - +