569 lines
15 KiB
C++
569 lines
15 KiB
C++
/*
|
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
|
*
|
|
* Copyright (C) 2018 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
|
* Copyright (C) 2008 Wayne Stambaugh <stambaughw@gmail.com>
|
|
* Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, you may find one here:
|
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
* or you may search the http://www.gnu.org website for the version 2 license,
|
|
* or you may write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|
*/
|
|
|
|
/**
|
|
* @file wildcards_and_files_ext.cpp
|
|
* Definition of file extensions used in Kicad.
|
|
*/
|
|
#include <regex>
|
|
#include <wildcards_and_files_ext.h>
|
|
#include <wx/filedlg.h>
|
|
#include <wx/regex.h>
|
|
#include <wx/translation.h>
|
|
#include <regex>
|
|
|
|
bool compareFileExtensions( const std::string& aExtension,
|
|
const std::vector<std::string>& aReference, bool aCaseSensitive )
|
|
{
|
|
// Form the regular expression string by placing all possible extensions into it as alternatives
|
|
std::string regexString = "(";
|
|
bool first = true;
|
|
|
|
for( const std::string& ext : aReference )
|
|
{
|
|
// The | separate goes between the extensions
|
|
if( !first )
|
|
regexString += "|";
|
|
else
|
|
first = false;
|
|
|
|
regexString += ext;
|
|
}
|
|
|
|
regexString += ")";
|
|
|
|
// Create the regex and see if it matches
|
|
std::regex extRegex( regexString, aCaseSensitive ? std::regex::ECMAScript : std::regex::icase );
|
|
return std::regex_match( aExtension, extRegex );
|
|
}
|
|
|
|
|
|
wxString formatWildcardExt( const wxString& aWildcard )
|
|
{
|
|
wxString wc;
|
|
#if defined( __WXGTK__ )
|
|
|
|
for( const auto& ch : aWildcard )
|
|
{
|
|
if( wxIsalpha( ch ) )
|
|
wc += wxString::Format( "[%c%c]", wxTolower( ch ), wxToupper( ch ) );
|
|
else
|
|
wc += ch;
|
|
}
|
|
|
|
return wc;
|
|
#else
|
|
wc = aWildcard;
|
|
|
|
return wc;
|
|
#endif
|
|
}
|
|
|
|
|
|
wxString AddFileExtListToFilter( const std::vector<std::string>& aExts )
|
|
{
|
|
if( aExts.size() == 0 )
|
|
{
|
|
// The "all files" wildcard is different on different systems
|
|
wxString filter;
|
|
filter << wxS( " (" ) << wxFileSelectorDefaultWildcardStr << wxS( ")|" )
|
|
<< wxFileSelectorDefaultWildcardStr;
|
|
return filter;
|
|
}
|
|
|
|
wxString files_filter = wxS( " (" );
|
|
|
|
// Add extensions to the info message:
|
|
for( const std::string& ext : aExts )
|
|
{
|
|
if( files_filter.length() > 2 )
|
|
files_filter << wxS( "; " );
|
|
|
|
files_filter << "*." << ext;
|
|
}
|
|
|
|
files_filter << wxS( ")|*." );
|
|
|
|
// Add extensions to the filter list, using a formatted string (GTK specific):
|
|
bool first = true;
|
|
|
|
for( const std::string& ext : aExts )
|
|
{
|
|
if( !first )
|
|
files_filter << wxS( ";*." );
|
|
|
|
first = false;
|
|
|
|
files_filter << formatWildcardExt( ext );
|
|
}
|
|
|
|
return files_filter;
|
|
}
|
|
|
|
const std::string BackupFileSuffix( "-bak" );
|
|
const std::string LockFilePrefix( "~" );
|
|
const std::string LockFileExtension( "lck" );
|
|
|
|
const std::string KiCadSymbolLibFileExtension( "kicad_sym" );
|
|
const std::string SchematicSymbolFileExtension( "sym" );
|
|
const std::string LegacySymbolLibFileExtension( "lib" );
|
|
const std::string LegacySymbolDocumentFileExtension( "dcm" );
|
|
const std::string LtspiceSymbolExtension( "asy" );
|
|
|
|
const std::string VrmlFileExtension( "wrl" );
|
|
|
|
const std::string ProjectFileExtension( "kicad_pro" );
|
|
const std::string LegacyProjectFileExtension( "pro" );
|
|
const std::string ProjectLocalSettingsFileExtension( "kicad_prl" );
|
|
const std::string LegacySchematicFileExtension( "sch" );
|
|
const std::string EagleSchematicFileExtension( "sch" );
|
|
const std::string CadstarSchematicFileExtension( "csa" );
|
|
const std::string CadstarPartsLibraryFileExtension( "lib" );
|
|
const std::string KiCadSchematicFileExtension( "kicad_sch" );
|
|
const std::string SpiceFileExtension( "cir" );
|
|
const std::string LtspiceSchematicExtension( "asc" );
|
|
const std::string CadstarNetlistFileExtension( "frp" );
|
|
const std::string OrCadPcb2NetlistFileExtension( "net" );
|
|
const std::string NetlistFileExtension( "net" );
|
|
const std::string AllegroNetlistFileExtension( "txt" );
|
|
const std::string FootprintAssignmentFileExtension( "cmp" );
|
|
const std::string GerberFileExtension( "gbr" );
|
|
const std::string GerberJobFileExtension( "gbrjob" );
|
|
const std::string HtmlFileExtension( "html" );
|
|
const std::string EquFileExtension( "equ" );
|
|
const std::string HotkeyFileExtension( "hotkeys" );
|
|
const std::string DatabaseLibraryFileExtension( "kicad_dbl" );
|
|
|
|
const std::string ArchiveFileExtension( "zip" );
|
|
|
|
const std::string LegacyPcbFileExtension( "brd" );
|
|
const std::string EaglePcbFileExtension( "brd" );
|
|
const std::string CadstarPcbFileExtension( "cpa" );
|
|
const std::string KiCadPcbFileExtension( "kicad_pcb" );
|
|
const std::string DrawingSheetFileExtension( "kicad_wks" );
|
|
const std::string DesignRulesFileExtension( "kicad_dru" );
|
|
|
|
const std::string PdfFileExtension( "pdf" );
|
|
const std::string MacrosFileExtension( "mcr" );
|
|
const std::string DrillFileExtension( "drl" );
|
|
const std::string SVGFileExtension( "svg" );
|
|
const std::string ReportFileExtension( "rpt" );
|
|
const std::string FootprintPlaceFileExtension( "pos" );
|
|
|
|
const std::string KiCadFootprintLibPathExtension( "pretty" ); // this is a directory
|
|
const std::string LegacyFootprintLibPathExtension( "mod" ); // this is a file
|
|
const std::string AltiumFootprintLibPathExtension( "PcbLib" ); // this is a file
|
|
const std::string CadstarFootprintLibPathExtension( "cpa" ); // this is a file
|
|
const std::string EagleFootprintLibPathExtension( "lbr" ); // this is a file
|
|
const std::string GedaPcbFootprintLibFileExtension( "fp" ); // this is a file
|
|
|
|
const std::string KiCadFootprintFileExtension( "kicad_mod" );
|
|
const std::string SpecctraDsnFileExtension( "dsn" );
|
|
const std::string SpecctraSessionFileExtension( "ses" );
|
|
const std::string IpcD356FileExtension( "d356" );
|
|
const std::string WorkbookFileExtension( "wbk" );
|
|
|
|
const std::string PngFileExtension( "png" );
|
|
const std::string JpegFileExtension( "jpg" );
|
|
const std::string TextFileExtension( "txt" );
|
|
const std::string MarkdownFileExtension( "md" );
|
|
const std::string CsvFileExtension( "csv" );
|
|
const std::string XmlFileExtension( "xml" );
|
|
const std::string JsonFileExtension( "json" );
|
|
|
|
const std::string StepFileExtension( "step" );
|
|
const std::string StepFileAbrvExtension( "stp" );
|
|
const std::string GltfBinaryFileExtension( "glb" );
|
|
|
|
const wxString GerberFileExtensionsRegex( "(gbr|gko|pho|(g[tb][alops])|(gm?\\d\\d*)|(gp[tb]))" );
|
|
|
|
|
|
bool IsGerberFileExtension( const wxString& ext )
|
|
{
|
|
static wxRegEx gerberRE( GerberFileExtensionsRegex, wxRE_ICASE );
|
|
|
|
return gerberRE.Matches( ext );
|
|
}
|
|
|
|
|
|
wxString AllFilesWildcard()
|
|
{
|
|
return _( "All files" ) + AddFileExtListToFilter( {} );
|
|
}
|
|
|
|
|
|
wxString SchematicSymbolFileWildcard()
|
|
{
|
|
return _( "KiCad drawing symbol files" ) + AddFileExtListToFilter( { "sym" } );
|
|
}
|
|
|
|
|
|
wxString KiCadSymbolLibFileWildcard()
|
|
{
|
|
return _( "KiCad symbol library files" )
|
|
+ AddFileExtListToFilter( { KiCadSymbolLibFileExtension } );
|
|
}
|
|
|
|
|
|
wxString LegacySymbolLibFileWildcard()
|
|
{
|
|
return _( "KiCad legacy symbol library files" ) + AddFileExtListToFilter( { "lib" } );
|
|
}
|
|
|
|
|
|
wxString DatabaseLibFileWildcard()
|
|
{
|
|
return _( "KiCad database library files" )
|
|
+ AddFileExtListToFilter( { DatabaseLibraryFileExtension } );
|
|
}
|
|
|
|
|
|
wxString AllSymbolLibFilesWildcard()
|
|
{
|
|
return _( "All symbol library files" )
|
|
+ AddFileExtListToFilter( { KiCadSymbolLibFileExtension,
|
|
DatabaseLibraryFileExtension,
|
|
"lib" } );
|
|
}
|
|
|
|
|
|
wxString ProjectFileWildcard()
|
|
{
|
|
return _( "KiCad project files" ) + AddFileExtListToFilter( { ProjectFileExtension } );
|
|
}
|
|
|
|
|
|
wxString LegacyProjectFileWildcard()
|
|
{
|
|
return _( "KiCad legacy project files" )
|
|
+ AddFileExtListToFilter( { LegacyProjectFileExtension } );
|
|
}
|
|
|
|
|
|
wxString AllProjectFilesWildcard()
|
|
{
|
|
return _( "All KiCad project files" )
|
|
+ AddFileExtListToFilter( { ProjectFileExtension, LegacyProjectFileExtension } );
|
|
}
|
|
|
|
|
|
wxString AllSchematicFilesWildcard()
|
|
{
|
|
return _( "All KiCad schematic files" )
|
|
+ AddFileExtListToFilter( { KiCadSchematicFileExtension, LegacySchematicFileExtension } );
|
|
}
|
|
|
|
|
|
wxString LegacySchematicFileWildcard()
|
|
{
|
|
return _( "KiCad legacy schematic files" )
|
|
+ AddFileExtListToFilter( { LegacySchematicFileExtension } );
|
|
}
|
|
|
|
|
|
wxString KiCadSchematicFileWildcard()
|
|
{
|
|
return _( "KiCad s-expression schematic files" )
|
|
+ AddFileExtListToFilter( { KiCadSchematicFileExtension } );
|
|
}
|
|
|
|
|
|
wxString AltiumSchematicFileWildcard()
|
|
{
|
|
return _( "Altium schematic files" ) + AddFileExtListToFilter( { "SchDoc" } );
|
|
}
|
|
|
|
|
|
wxString CadstarPartsLibraryFileWildcard()
|
|
{
|
|
return _( "CADSTAR Parts Library files" )
|
|
+ AddFileExtListToFilter( { CadstarPartsLibraryFileExtension } );
|
|
}
|
|
|
|
|
|
wxString CadstarSchematicArchiveFileWildcard()
|
|
{
|
|
return _( "CADSTAR Schematic Archive files" ) + AddFileExtListToFilter( { "csa" } );
|
|
}
|
|
|
|
|
|
wxString CadstarArchiveFilesWildcard()
|
|
{
|
|
return _( "CADSTAR Archive files" ) + AddFileExtListToFilter( { "csa", "cpa" } );
|
|
}
|
|
|
|
|
|
wxString EagleSchematicFileWildcard()
|
|
{
|
|
return _( "Eagle XML schematic files" ) + AddFileExtListToFilter( { "sch" } );
|
|
}
|
|
|
|
|
|
wxString LtspiceSchematicFileWildcard()
|
|
{
|
|
return _( "LTspice schematic files" ) + AddFileExtListToFilter( { "asc" } );
|
|
}
|
|
|
|
|
|
wxString EagleFilesWildcard()
|
|
{
|
|
return _( "Eagle XML files" ) + AddFileExtListToFilter( { "sch", "brd" } );
|
|
}
|
|
|
|
|
|
wxString OrCadPcb2NetlistFileWildcard()
|
|
{
|
|
return _( "OrcadPCB2 netlist files" )
|
|
+ AddFileExtListToFilter( { OrCadPcb2NetlistFileExtension } );
|
|
}
|
|
|
|
|
|
wxString NetlistFileWildcard()
|
|
{
|
|
return _( "KiCad netlist files" ) + AddFileExtListToFilter( { "net" } );
|
|
}
|
|
|
|
|
|
wxString AllegroNetlistFileWildcard()
|
|
{
|
|
return _( "Allegro netlist files" )
|
|
+ AddFileExtListToFilter( { AllegroNetlistFileExtension } );
|
|
}
|
|
|
|
|
|
wxString PcbFileWildcard()
|
|
{
|
|
return _( "KiCad printed circuit board files" )
|
|
+ AddFileExtListToFilter( { KiCadPcbFileExtension } );
|
|
}
|
|
|
|
|
|
wxString KiCadFootprintLibFileWildcard()
|
|
{
|
|
return _( "KiCad footprint files" ) + AddFileExtListToFilter( { KiCadFootprintFileExtension } );
|
|
}
|
|
|
|
|
|
wxString KiCadFootprintLibPathWildcard()
|
|
{
|
|
return _( "KiCad footprint library paths" )
|
|
+ AddFileExtListToFilter( { KiCadFootprintLibPathExtension } );
|
|
}
|
|
|
|
|
|
wxString DrawingSheetFileWildcard()
|
|
{
|
|
return _( "Drawing sheet files" )
|
|
+ AddFileExtListToFilter( { DrawingSheetFileExtension } );
|
|
}
|
|
|
|
|
|
// Wildcard for cvpcb symbol to footprint link file
|
|
wxString FootprintAssignmentFileWildcard()
|
|
{
|
|
return _( "KiCad symbol footprint link files" )
|
|
+ AddFileExtListToFilter( { FootprintAssignmentFileExtension } );
|
|
}
|
|
|
|
|
|
// Wildcard for reports and fabrication documents
|
|
wxString DrillFileWildcard()
|
|
{
|
|
return _( "Drill files" )
|
|
+ AddFileExtListToFilter( { DrillFileExtension, "nc", "xnc", "txt" } );
|
|
}
|
|
|
|
|
|
wxString SVGFileWildcard()
|
|
{
|
|
return _( "SVG files" ) + AddFileExtListToFilter( { SVGFileExtension } );
|
|
}
|
|
|
|
|
|
wxString HtmlFileWildcard()
|
|
{
|
|
return _( "HTML files" ) + AddFileExtListToFilter( { "htm", "html" } );
|
|
}
|
|
|
|
|
|
wxString CsvFileWildcard()
|
|
{
|
|
return _( "CSV Files" ) + AddFileExtListToFilter( { CsvFileExtension } );
|
|
}
|
|
|
|
|
|
wxString PdfFileWildcard()
|
|
{
|
|
return _( "Portable document format files" ) + AddFileExtListToFilter( { "pdf" } );
|
|
}
|
|
|
|
|
|
wxString PSFileWildcard()
|
|
{
|
|
return _( "PostScript files" ) + AddFileExtListToFilter( { "ps" } );
|
|
}
|
|
|
|
|
|
wxString JsonFileWildcard()
|
|
{
|
|
return _( "Json files" ) + AddFileExtListToFilter( { JsonFileExtension } );
|
|
}
|
|
|
|
|
|
wxString ReportFileWildcard()
|
|
{
|
|
return _( "Report files" ) + AddFileExtListToFilter( { ReportFileExtension } );
|
|
}
|
|
|
|
|
|
wxString FootprintPlaceFileWildcard()
|
|
{
|
|
return _( "Component placement files" ) + AddFileExtListToFilter( { "pos" } );
|
|
}
|
|
|
|
|
|
wxString Shapes3DFileWildcard()
|
|
{
|
|
return _( "VRML and X3D files" ) + AddFileExtListToFilter( { "wrl", "x3d" } );
|
|
}
|
|
|
|
|
|
wxString IDF3DFileWildcard()
|
|
{
|
|
return _( "IDFv3 footprint files" ) + AddFileExtListToFilter( { "idf" } );
|
|
}
|
|
|
|
|
|
wxString TextFileWildcard()
|
|
{
|
|
return _( "Text files" ) + AddFileExtListToFilter( { "txt" } );
|
|
}
|
|
|
|
|
|
wxString ModLegacyExportFileWildcard()
|
|
{
|
|
return _( "Legacy footprint export files" ) + AddFileExtListToFilter( { "emp" } );
|
|
}
|
|
|
|
|
|
wxString ErcFileWildcard()
|
|
{
|
|
return _( "Electrical rule check file" ) + AddFileExtListToFilter( { "erc" } );
|
|
}
|
|
|
|
|
|
wxString SpiceLibraryFileWildcard()
|
|
{
|
|
return _( "Spice library file" ) + AddFileExtListToFilter( { "lib", "mod" } );
|
|
}
|
|
|
|
|
|
wxString SpiceNetlistFileWildcard()
|
|
{
|
|
return _( "SPICE netlist file" ) + AddFileExtListToFilter( { "cir" } );
|
|
}
|
|
|
|
|
|
wxString CadstarNetlistFileWildcard()
|
|
{
|
|
return _( "CadStar netlist file" ) + AddFileExtListToFilter( { "frp" } );
|
|
}
|
|
|
|
|
|
wxString EquFileWildcard()
|
|
{
|
|
return _( "Symbol footprint association files" ) + AddFileExtListToFilter( { "equ" } );
|
|
}
|
|
|
|
|
|
wxString ZipFileWildcard()
|
|
{
|
|
return _( "Zip file" ) + AddFileExtListToFilter( { "zip" } );
|
|
}
|
|
|
|
|
|
wxString GencadFileWildcard()
|
|
{
|
|
return _( "GenCAD 1.4 board files" ) + AddFileExtListToFilter( { "cad" } );
|
|
}
|
|
|
|
|
|
wxString DxfFileWildcard()
|
|
{
|
|
return _( "DXF Files" ) + AddFileExtListToFilter( { "dxf" } );
|
|
}
|
|
|
|
|
|
wxString GerberJobFileWildcard()
|
|
{
|
|
return _( "Gerber job file" ) + AddFileExtListToFilter( { GerberJobFileExtension } );
|
|
}
|
|
|
|
|
|
wxString SpecctraDsnFileWildcard()
|
|
{
|
|
return _( "Specctra DSN file" )
|
|
+ AddFileExtListToFilter( { SpecctraDsnFileExtension } );
|
|
}
|
|
|
|
|
|
wxString SpecctraSessionFileWildcard()
|
|
{
|
|
return _( "Specctra Session file" )
|
|
+ AddFileExtListToFilter( { SpecctraSessionFileExtension } );
|
|
}
|
|
|
|
|
|
wxString IpcD356FileWildcard()
|
|
{
|
|
return _( "IPC-D-356 Test Files" )
|
|
+ AddFileExtListToFilter( { IpcD356FileExtension } );
|
|
}
|
|
|
|
|
|
wxString WorkbookFileWildcard()
|
|
{
|
|
return _( "Workbook file" )
|
|
+ AddFileExtListToFilter( { WorkbookFileExtension } );
|
|
}
|
|
|
|
|
|
wxString PngFileWildcard()
|
|
{
|
|
return _( "PNG file" ) + AddFileExtListToFilter( { "png" } );
|
|
}
|
|
|
|
|
|
wxString JpegFileWildcard()
|
|
{
|
|
return _( "Jpeg file" ) + AddFileExtListToFilter( { "jpg", "jpeg" } );
|
|
}
|
|
|
|
|
|
wxString HotkeyFileWildcard()
|
|
{
|
|
return _( "Hotkey file" ) + AddFileExtListToFilter( { HotkeyFileExtension } );
|
|
}
|