KiCad PCB EDA Suite
Loading...
Searching...
No Matches
wildcards_and_files_ext.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2018 Jean-Pierre Charras, jp.charras at wanadoo.fr
5 * Copyright (C) 2008 Wayne Stambaugh <[email protected]>
6 * Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, you may find one here:
20 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21 * or you may search the http://www.gnu.org website for the version 2 license,
22 * or you may write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 */
25
30#include <regex>
32#include <wx/filedlg.h>
33#include <wx/regex.h>
34#include <wx/translation.h>
35#include <regex>
36
37bool compareFileExtensions( const std::string& aExtension,
38 const std::vector<std::string>& aReference, bool aCaseSensitive )
39{
40 // Form the regular expression string by placing all possible extensions into it as alternatives
41 std::string regexString = "(";
42 bool first = true;
43
44 for( const std::string& ext : aReference )
45 {
46 // The | separate goes between the extensions
47 if( !first )
48 regexString += "|";
49 else
50 first = false;
51
52 regexString += ext;
53 }
54
55 regexString += ")";
56
57 // Create the regex and see if it matches
58 std::regex extRegex( regexString, aCaseSensitive ? std::regex::ECMAScript : std::regex::icase );
59 return std::regex_match( aExtension, extRegex );
60}
61
62
63wxString formatWildcardExt( const wxString& aWildcard )
64{
65 wxString wc;
66#if defined( __WXGTK__ )
67
68 for( const auto& ch : aWildcard )
69 {
70 if( wxIsalpha( ch ) )
71 wc += wxString::Format( "[%c%c]", wxTolower( ch ), wxToupper( ch ) );
72 else
73 wc += ch;
74 }
75
76 return wc;
77#else
78 wc = aWildcard;
79
80 return wc;
81#endif
82}
83
84
85wxString AddFileExtListToFilter( const std::vector<std::string>& aExts )
86{
87 if( aExts.size() == 0 )
88 {
89 // The "all files" wildcard is different on different systems
90 wxString filter;
91 filter << wxS( " (" ) << wxFileSelectorDefaultWildcardStr << wxS( ")|" )
92 << wxFileSelectorDefaultWildcardStr;
93 return filter;
94 }
95
96 wxString files_filter = wxS( " (" );
97
98 // Add extensions to the info message:
99 for( const std::string& ext : aExts )
100 {
101 if( files_filter.length() > 2 )
102 files_filter << wxS( "; " );
103
104 files_filter << "*." << ext;
105 }
106
107 files_filter << wxS( ")|*." );
108
109 // Add extensions to the filter list, using a formatted string (GTK specific):
110 bool first = true;
111
112 for( const std::string& ext : aExts )
113 {
114 if( !first )
115 files_filter << wxS( ";*." );
116
117 first = false;
118
119 files_filter << formatWildcardExt( ext );
120 }
121
122 return files_filter;
123}
124
125const std::string BackupFileSuffix( "-bak" );
126const std::string LockFilePrefix( "~" );
127const std::string LockFileExtension( "lck" );
128
129const std::string KiCadSymbolLibFileExtension( "kicad_sym" );
130const std::string SchematicSymbolFileExtension( "sym" );
131const std::string LegacySymbolLibFileExtension( "lib" );
132const std::string LegacySymbolDocumentFileExtension( "dcm" );
133
134const std::string VrmlFileExtension( "wrl" );
135
136const std::string ProjectFileExtension( "kicad_pro" );
137const std::string LegacyProjectFileExtension( "pro" );
138const std::string ProjectLocalSettingsFileExtension( "kicad_prl" );
139const std::string LegacySchematicFileExtension( "sch" );
140const std::string CadstarSchematicFileExtension( "csa" );
141const std::string CadstarPartsLibraryFileExtension( "lib" );
142const std::string KiCadSchematicFileExtension( "kicad_sch" );
143const std::string SpiceFileExtension( "cir" );
144const std::string CadstarNetlistFileExtension( "frp" );
145const std::string OrCadPcb2NetlistFileExtension( "net" );
146const std::string NetlistFileExtension( "net" );
147const std::string AllegroNetlistFileExtension( "txt" );
148const std::string FootprintAssignmentFileExtension( "cmp" );
149const std::string GerberFileExtension( "gbr" );
150const std::string GerberJobFileExtension( "gbrjob" );
151const std::string HtmlFileExtension( "html" );
152const std::string EquFileExtension( "equ" );
153const std::string HotkeyFileExtension( "hotkeys" );
154const std::string DatabaseLibraryFileExtension( "kicad_dbl" );
155const std::string HTTPLibraryFileExtension( "kicad_httplib" );
156
157const std::string ArchiveFileExtension( "zip" );
158
159const std::string LegacyPcbFileExtension( "brd" );
160const std::string EaglePcbFileExtension( "brd" );
161const std::string CadstarPcbFileExtension( "cpa" );
162const std::string KiCadPcbFileExtension( "kicad_pcb" );
163const std::string DrawingSheetFileExtension( "kicad_wks" );
164const std::string DesignRulesFileExtension( "kicad_dru" );
165
166const std::string PdfFileExtension( "pdf" );
167const std::string MacrosFileExtension( "mcr" );
168const std::string DrillFileExtension( "drl" );
169const std::string SVGFileExtension( "svg" );
170const std::string ReportFileExtension( "rpt" );
171const std::string FootprintPlaceFileExtension( "pos" );
172
173const std::string KiCadFootprintLibPathExtension( "pretty" ); // this is a directory
174const std::string LegacyFootprintLibPathExtension( "mod" ); // this is a file
175const std::string AltiumFootprintLibPathExtension( "PcbLib" ); // this is a file
176const std::string CadstarFootprintLibPathExtension( "cpa" ); // this is a file
177const std::string EagleFootprintLibPathExtension( "lbr" ); // this is a file
178const std::string GedaPcbFootprintLibFileExtension( "fp" ); // this is a file
179
180const std::string KiCadFootprintFileExtension( "kicad_mod" );
181const std::string SpecctraDsnFileExtension( "dsn" );
182const std::string SpecctraSessionFileExtension( "ses" );
183const std::string IpcD356FileExtension( "d356" );
184const std::string WorkbookFileExtension( "wbk" );
185
186const std::string PngFileExtension( "png" );
187const std::string JpegFileExtension( "jpg" );
188const std::string TextFileExtension( "txt" );
189const std::string MarkdownFileExtension( "md" );
190const std::string CsvFileExtension( "csv" );
191const std::string XmlFileExtension( "xml" );
192const std::string JsonFileExtension( "json" );
193
194const std::string StepFileExtension( "step" );
195const std::string StepFileAbrvExtension( "stp" );
196const std::string GltfBinaryFileExtension( "glb" );
197
198const wxString GerberFileExtensionsRegex( "(gbr|gko|pho|(g[tb][alops])|(gm?\\d\\d*)|(gp[tb]))" );
199
200
201bool IsGerberFileExtension( const wxString& ext )
202{
203 static wxRegEx gerberRE( GerberFileExtensionsRegex, wxRE_ICASE );
204
205 return gerberRE.Matches( ext );
206}
207
208
210{
211 return _( "All files" ) + AddFileExtListToFilter( {} );
212}
213
214
216{
217 return _( "KiCad symbol library files" )
219}
220
221
223{
224 return _( "KiCad project files" ) + AddFileExtListToFilter( { ProjectFileExtension } );
225}
226
227
229{
230 return _( "KiCad legacy project files" )
232}
233
234
236{
237 return _( "All KiCad project files" )
239}
240
241
243{
244 return _( "All KiCad schematic files" )
246}
247
248
250{
251 return _( "KiCad legacy schematic files" )
253}
254
255
257{
258 return _( "KiCad s-expression schematic files" )
260}
261
262
264{
265 return _( "CADSTAR Archive files" ) + AddFileExtListToFilter( { "csa", "cpa" } );
266}
267
268
270{
271 return _( "Eagle XML files" ) + AddFileExtListToFilter( { "sch", "brd" } );
272}
273
274
276{
277 return _( "OrcadPCB2 netlist files" )
279}
280
281
283{
284 return _( "KiCad netlist files" ) + AddFileExtListToFilter( { "net" } );
285}
286
287
289{
290 return _( "Allegro netlist files" )
292}
293
294
296{
297 return _( "EasyEDA (JLCEDA) Std backup archive" ) + AddFileExtListToFilter( { "zip" } );
298}
299
300
302{
303 return _( "EasyEDA (JLCEDA) Pro files" ) + AddFileExtListToFilter( { "epro", "zip" } );
304}
305
306
308{
309 return _( "KiCad printed circuit board files" )
311}
312
313
315{
316 return _( "KiCad footprint files" ) + AddFileExtListToFilter( { KiCadFootprintFileExtension } );
317}
318
319
321{
322 return _( "KiCad footprint library paths" )
324}
325
326
328{
329 return _( "Drawing sheet files" )
331}
332
333
334// Wildcard for cvpcb symbol to footprint link file
336{
337 return _( "KiCad symbol footprint link files" )
339}
340
341
342// Wildcard for reports and fabrication documents
344{
345 return _( "Drill files" )
346 + AddFileExtListToFilter( { DrillFileExtension, "nc", "xnc", "txt" } );
347}
348
349
351{
352 return _( "SVG files" ) + AddFileExtListToFilter( { SVGFileExtension } );
353}
354
355
357{
358 return _( "HTML files" ) + AddFileExtListToFilter( { "htm", "html" } );
359}
360
361
363{
364 return _( "CSV Files" ) + AddFileExtListToFilter( { CsvFileExtension } );
365}
366
367
369{
370 return _( "Portable document format files" ) + AddFileExtListToFilter( { "pdf" } );
371}
372
373
375{
376 return _( "PostScript files" ) + AddFileExtListToFilter( { "ps" } );
377}
378
379
381{
382 return _( "Json files" ) + AddFileExtListToFilter( { JsonFileExtension } );
383}
384
385
387{
388 return _( "Report files" ) + AddFileExtListToFilter( { ReportFileExtension } );
389}
390
391
393{
394 return _( "Component placement files" ) + AddFileExtListToFilter( { "pos" } );
395}
396
397
399{
400 return _( "VRML and X3D files" ) + AddFileExtListToFilter( { "wrl", "x3d" } );
401}
402
403
405{
406 return _( "IDFv3 footprint files" ) + AddFileExtListToFilter( { "idf" } );
407}
408
409
411{
412 return _( "Text files" ) + AddFileExtListToFilter( { "txt" } );
413}
414
415
417{
418 return _( "Legacy footprint export files" ) + AddFileExtListToFilter( { "emp" } );
419}
420
421
423{
424 return _( "Electrical rule check file" ) + AddFileExtListToFilter( { "erc" } );
425}
426
427
429{
430 return _( "Spice library file" ) + AddFileExtListToFilter( { "lib", "mod" } );
431}
432
433
435{
436 return _( "SPICE netlist file" ) + AddFileExtListToFilter( { "cir" } );
437}
438
439
441{
442 return _( "CadStar netlist file" ) + AddFileExtListToFilter( { "frp" } );
443}
444
445
447{
448 return _( "Symbol footprint association files" ) + AddFileExtListToFilter( { "equ" } );
449}
450
451
453{
454 return _( "Zip file" ) + AddFileExtListToFilter( { "zip" } );
455}
456
457
459{
460 return _( "GenCAD 1.4 board files" ) + AddFileExtListToFilter( { "cad" } );
461}
462
463
465{
466 return _( "DXF Files" ) + AddFileExtListToFilter( { "dxf" } );
467}
468
469
471{
472 return _( "Gerber job file" ) + AddFileExtListToFilter( { GerberJobFileExtension } );
473}
474
475
477{
478 return _( "Specctra DSN file" )
480}
481
482
484{
485 return _( "Specctra Session file" )
487}
488
489
491{
492 return _( "IPC-D-356 Test Files" )
494}
495
496
498{
499 return _( "Workbook file" )
501}
502
503
505{
506 return _( "PNG file" ) + AddFileExtListToFilter( { "png" } );
507}
508
509
511{
512 return _( "Jpeg file" ) + AddFileExtListToFilter( { "jpg", "jpeg" } );
513}
514
515
517{
518 return _( "Hotkey file" ) + AddFileExtListToFilter( { HotkeyFileExtension } );
519}
#define _(s)
const std::string KiCadFootprintLibPathExtension
const std::string SpiceFileExtension
const std::string DatabaseLibraryFileExtension
const std::string LegacyPcbFileExtension
const std::string EagleFootprintLibPathExtension
const std::string CadstarPcbFileExtension
const std::string SpecctraDsnFileExtension
const std::string CadstarNetlistFileExtension
const std::string PdfFileExtension
const std::string StepFileExtension
const std::string AltiumFootprintLibPathExtension
const std::string BackupFileSuffix
const std::string KiCadSymbolLibFileExtension
const std::string LegacySchematicFileExtension
const std::string SpecctraSessionFileExtension
const std::string FootprintAssignmentFileExtension
wxString AddFileExtListToFilter(const std::vector< std::string > &aExts)
Build the wildcard extension file dialog wildcard filter to add to the base message dialog.
const std::string WorkbookFileExtension
wxString formatWildcardExt(const wxString &aWildcard)
Format wildcard extension to support case sensitive file dialogs.
const std::string FootprintPlaceFileExtension
const std::string GerberJobFileExtension
const std::string LegacySymbolDocumentFileExtension
const std::string DrillFileExtension
const std::string LockFilePrefix
const std::string HotkeyFileExtension
const std::string JpegFileExtension
const wxString GerberFileExtensionsRegex
const std::string KiCadFootprintFileExtension
const std::string LegacyProjectFileExtension
const std::string MarkdownFileExtension
const std::string KiCadPcbFileExtension
bool IsGerberFileExtension(const wxString &ext)
const std::string LegacyFootprintLibPathExtension
const std::string ProjectLocalSettingsFileExtension
const std::string SVGFileExtension
const std::string TextFileExtension
const std::string StepFileAbrvExtension
const std::string ProjectFileExtension
const std::string CsvFileExtension
const std::string MacrosFileExtension
const std::string NetlistFileExtension
const std::string CadstarPartsLibraryFileExtension
const std::string OrCadPcb2NetlistFileExtension
const std::string EaglePcbFileExtension
const std::string DesignRulesFileExtension
bool compareFileExtensions(const std::string &aExtension, const std::vector< std::string > &aReference, bool aCaseSensitive)
Compare the given extension against the reference extensions to see if it matches any of the referenc...
const std::string AllegroNetlistFileExtension
const std::string HtmlFileExtension
const std::string XmlFileExtension
const std::string LockFileExtension
const std::string VrmlFileExtension
const std::string CadstarSchematicFileExtension
const std::string GltfBinaryFileExtension
const std::string PngFileExtension
const std::string IpcD356FileExtension
const std::string JsonFileExtension
const std::string EquFileExtension
const std::string GedaPcbFootprintLibFileExtension
const std::string KiCadSchematicFileExtension
const std::string ReportFileExtension
const std::string HTTPLibraryFileExtension
const std::string DrawingSheetFileExtension
const std::string GerberFileExtension
const std::string ArchiveFileExtension
const std::string SchematicSymbolFileExtension
const std::string LegacySymbolLibFileExtension
wxString KiCadSchematicFileWildcard()
wxString IDF3DFileWildcard()
wxString NetlistFileWildcard()
wxString SpecctraDsnFileWildcard()
wxString ErcFileWildcard()
wxString DxfFileWildcard()
wxString AllProjectFilesWildcard()
wxString IpcD356FileWildcard()
wxString LegacyProjectFileWildcard()
wxString EasyEdaProFileWildcard()
wxString ProjectFileWildcard()
wxString SpiceLibraryFileWildcard()
wxString KiCadFootprintLibPathWildcard()
wxString FootprintPlaceFileWildcard()
wxString EasyEdaArchiveWildcard()
wxString TextFileWildcard()
wxString DrillFileWildcard()
wxString EagleFilesWildcard()
wxString SVGFileWildcard()
wxString SpecctraSessionFileWildcard()
wxString EquFileWildcard()
wxString ReportFileWildcard()
wxString LegacySchematicFileWildcard()
wxString Shapes3DFileWildcard()
wxString FootprintAssignmentFileWildcard()
wxString PdfFileWildcard()
wxString WorkbookFileWildcard()
wxString ModLegacyExportFileWildcard()
wxString OrCadPcb2NetlistFileWildcard()
wxString CadstarNetlistFileWildcard()
wxString KiCadFootprintLibFileWildcard()
wxString PngFileWildcard()
wxString DrawingSheetFileWildcard()
wxString HtmlFileWildcard()
wxString AllSchematicFilesWildcard()
wxString PSFileWildcard()
wxString CadstarArchiveFilesWildcard()
wxString HotkeyFileWildcard()
wxString AllFilesWildcard()
wxString SpiceNetlistFileWildcard()
wxString PcbFileWildcard()
wxString JsonFileWildcard()
wxString AllegroNetlistFileWildcard()
wxString GerberJobFileWildcard()
wxString GencadFileWildcard()
wxString KiCadSymbolLibFileWildcard()
wxString ZipFileWildcard()
wxString JpegFileWildcard()
wxString CsvFileWildcard()
const std::string CadstarFootprintLibPathExtension("cpa")
Definition of file extensions used in Kicad.