KiCad PCB EDA Suite
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-2022 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" );
126
127const std::string KiCadSymbolLibFileExtension( "kicad_sym" );
128const std::string SchematicSymbolFileExtension( "sym" );
129const std::string LegacySymbolLibFileExtension( "lib" );
130const std::string LegacySymbolDocumentFileExtension( "dcm" );
131
132const std::string VrmlFileExtension( "wrl" );
133
134const std::string ProjectFileExtension( "kicad_pro" );
135const std::string LegacyProjectFileExtension( "pro" );
136const std::string ProjectLocalSettingsFileExtension( "kicad_prl" );
137const std::string LegacySchematicFileExtension( "sch" );
138const std::string EagleSchematicFileExtension( "sch" );
139const std::string CadstarSchematicFileExtension( "csa" );
140const std::string KiCadSchematicFileExtension( "kicad_sch" );
141const std::string SpiceFileExtension( "cir" );
142const std::string CadstarNetlistFileExtension( "frp" );
143const std::string OrCadPcb2NetlistFileExtension( "net" );
144const std::string NetlistFileExtension( "net" );
145const std::string FootprintAssignmentFileExtension( "cmp" );
146const std::string GerberFileExtension( "gbr" );
147const std::string GerberJobFileExtension( "gbrjob" );
148const std::string HtmlFileExtension( "html" );
149const std::string EquFileExtension( "equ" );
150const std::string HotkeyFileExtension( "hotkeys" );
151const std::string DatabaseLibraryFileExtension( "kicad_dbl" );
152
153const std::string ArchiveFileExtension( "zip" );
154
155const std::string LegacyPcbFileExtension( "brd" );
156const std::string EaglePcbFileExtension( "brd" );
157const std::string CadstarPcbFileExtension( "cpa" );
158const std::string KiCadPcbFileExtension( "kicad_pcb" );
159const std::string DrawingSheetFileExtension( "kicad_wks" );
160const std::string DesignRulesFileExtension( "kicad_dru" );
161
162const std::string PdfFileExtension( "pdf" );
163const std::string MacrosFileExtension( "mcr" );
164const std::string DrillFileExtension( "drl" );
165const std::string SVGFileExtension( "svg" );
166const std::string ReportFileExtension( "rpt" );
167const std::string FootprintPlaceFileExtension( "pos" );
168
169const std::string KiCadFootprintLibPathExtension( "pretty" ); // this is a directory
170const std::string LegacyFootprintLibPathExtension( "mod" ); // this is a file
171const std::string AltiumFootprintLibPathExtension( "PcbLib" ); // this is a file
172const std::string EagleFootprintLibPathExtension( "lbr" ); // this is a file
173const std::string GedaPcbFootprintLibFileExtension( "fp" ); // this is a file
174
175const std::string KiCadFootprintFileExtension( "kicad_mod" );
176const std::string SpecctraDsnFileExtension( "dsn" );
177const std::string SpecctraSessionFileExtension( "ses" );
178const std::string IpcD356FileExtension( "d356" );
179const std::string WorkbookFileExtension( "wbk" );
180
181const std::string PngFileExtension( "png" );
182const std::string JpegFileExtension( "jpg" );
183const std::string TextFileExtension( "txt" );
184const std::string MarkdownFileExtension( "md" );
185const std::string CsvFileExtension( "csv" );
186const std::string XmlFileExtension( "xml" );
187
188const wxString GerberFileExtensionsRegex( "(gbr|gko|pho|(g[tb][alops])|(gm?\\d\\d*)|(gp[tb]))" );
189
190
191bool IsGerberFileExtension( const wxString& ext )
192{
193 static wxRegEx gerberRE( GerberFileExtensionsRegex, wxRE_ICASE );
194
195 return gerberRE.Matches( ext );
196}
197
198
200{
201 return _( "All files" ) + AddFileExtListToFilter( {} );
202}
203
204
206{
207 return _( "KiCad drawing symbol files" ) + AddFileExtListToFilter( { "sym" } );
208}
209
210
212{
213 return _( "KiCad symbol library files" )
215}
216
217
219{
220 return _( "KiCad legacy symbol library files" ) + AddFileExtListToFilter( { "lib" } );
221}
222
223
225{
226 return _( "KiCad database library files" )
228}
229
230
232{
233 return _( "All KiCad symbol library files" )
236 "lib" } );
237}
238
239
241{
242 return _( "KiCad project files" ) + AddFileExtListToFilter( { ProjectFileExtension } );
243}
244
245
247{
248 return _( "KiCad legacy project files" )
250}
251
252
254{
255 return _( "All KiCad project files" )
257}
258
259
261{
262 return _( "All KiCad schematic files" )
264}
265
266
268{
269 return _( "KiCad legacy schematic files" )
271}
272
273
275{
276 return _( "KiCad s-expression schematic files" )
278}
279
280
282{
283 return _( "Altium schematic files" ) + AddFileExtListToFilter( { "SchDoc" } );
284}
285
286
288{
289 return _( "CADSTAR Schematic Archive files" ) + AddFileExtListToFilter( { "csa" } );
290}
291
292
294{
295 return _( "CADSTAR Archive files" ) + AddFileExtListToFilter( { "csa", "cpa" } );
296}
297
298
300{
301 return _( "Eagle XML schematic files" ) + AddFileExtListToFilter( { "sch" } );
302}
303
304
306{
307 return _( "Eagle XML files" ) + AddFileExtListToFilter( { "sch", "brd" } );
308}
309
310
312{
313 return _( "OrcadPCB2 netlist files" )
315}
316
317
319{
320 return _( "KiCad netlist files" ) + AddFileExtListToFilter( { "net" } );
321}
322
323
325{
326 return _( "KiCad printed circuit board files" ) + AddFileExtListToFilter( { "brd" } );
327}
328
329
331{
332 return _( "Eagle ver. 6.x XML PCB files" ) + AddFileExtListToFilter( { "brd" } );
333}
334
336{
337 return _( "CADSTAR PCB Archive files" ) + AddFileExtListToFilter( { "cpa" } );
338}
339
341{
342 return _( "P-Cad 200x ASCII PCB files" ) + AddFileExtListToFilter( { "pcb" } );
343}
344
346{
347 return _( "Altium Designer PCB files" ) + AddFileExtListToFilter( { "PcbDoc" } );
348}
349
351{
352 return _( "Altium Circuit Studio PCB files" ) + AddFileExtListToFilter( { "CSPcbDoc" } );
353}
354
356{
357 return _( "Altium Circuit Maker PCB files" ) + AddFileExtListToFilter( { "CMPcbDoc" } );
358}
359
361{
362 return _( "Fabmaster PCB files" ) + AddFileExtListToFilter( { "txt", "fab" } );
363}
364
366{
367 return _( "KiCad printed circuit board files" ) +
369}
370
371
373{
374 return _( "KiCad footprint files" )
376}
377
378
380{
381 return _( "KiCad footprint library paths" )
383}
384
385
387{
388 return _( "Legacy footprint library files" ) + AddFileExtListToFilter( { "mod" } );
389}
390
391
393{
394 return _( "Altium PCB footprint library files" ) + AddFileExtListToFilter( { "PcbLib" } );
395}
396
397
399{
400 return _( "Eagle ver. 6.x XML library files" ) + AddFileExtListToFilter( { "lbr" } );
401}
402
403
405{
406 return _( "Geda PCB footprint library files" ) + AddFileExtListToFilter( { "fp" } );
407}
408
409
411{
412 return _( "Drawing sheet files" )
414}
415
416
417// Wildcard for cvpcb symbol to footprint link file
419{
420 return _( "KiCad symbol footprint link files" )
422}
423
424
425// Wildcard for reports and fabrication documents
427{
428 return _( "Drill files" )
429 + AddFileExtListToFilter( { DrillFileExtension, "nc", "xnc", "txt" } );
430}
431
432
434{
435 return _( "SVG files" ) + AddFileExtListToFilter( { SVGFileExtension } );
436}
437
438
440{
441 return _( "HTML files" ) + AddFileExtListToFilter( { "htm", "html" } );
442}
443
444
446{
447 return _( "CSV Files" ) + AddFileExtListToFilter( { CsvFileExtension } );
448}
449
450
452{
453 return _( "Portable document format files" ) + AddFileExtListToFilter( { "pdf" } );
454}
455
456
458{
459 return _( "PostScript files" ) + AddFileExtListToFilter( { "ps" } );
460}
461
462
464{
465 return _( "Report files" ) + AddFileExtListToFilter( { "rpt" } );
466}
467
468
470{
471 return _( "Component placement files" ) + AddFileExtListToFilter( { "pos" } );
472}
473
474
476{
477 return _( "VRML and X3D files" ) + AddFileExtListToFilter( { "wrl", "x3d" } );
478}
479
480
482{
483 return _( "IDFv3 footprint files" ) + AddFileExtListToFilter( { "idf" } );
484}
485
486
488{
489 return _( "Text files" ) + AddFileExtListToFilter( { "txt" } );
490}
491
492
494{
495 return _( "Legacy footprint export files" ) + AddFileExtListToFilter( { "emp" } );
496}
497
498
500{
501 return _( "Electrical rule check file" ) + AddFileExtListToFilter( { "erc" } );
502}
503
504
506{
507 return _( "Spice library file" ) + AddFileExtListToFilter( { "lib", "mod" } );
508}
509
510
512{
513 return _( "SPICE netlist file" ) + AddFileExtListToFilter( { "cir" } );
514}
515
516
518{
519 return _( "CadStar netlist file" ) + AddFileExtListToFilter( { "frp" } );
520}
521
522
524{
525 return _( "Symbol footprint association files" ) + AddFileExtListToFilter( { "equ" } );
526}
527
528
530{
531 return _( "Zip file" ) + AddFileExtListToFilter( { "zip" } );
532}
533
534
536{
537 return _( "GenCAD 1.4 board files" ) + AddFileExtListToFilter( { "cad" } );
538}
539
540
542{
543 return _( "DXF Files" ) + AddFileExtListToFilter( { "dxf" } );
544}
545
546
548{
549 return _( "Gerber job file" ) + AddFileExtListToFilter( { GerberJobFileExtension } );
550}
551
552
554{
555 return _( "Specctra DSN file" )
557}
558
559
561{
562 return _( "Specctra Session file" )
564}
565
566
568{
569 return _( "IPC-D-356 Test Files" )
571}
572
573
575{
576 return _( "Workbook file" )
578}
579
580
582{
583 return _( "PNG file" ) + AddFileExtListToFilter( { "png" } );
584}
585
586
588{
589 return _( "Jpeg file" ) + AddFileExtListToFilter( { "jpg", "jpeg" } );
590}
591
592
594{
595 return _( "Hotkey file" ) + AddFileExtListToFilter( { HotkeyFileExtension } );
596}
#define _(s)
wxString AddFileExtListToFilter(const std::vector< std::string > &aExts)
Build the wildcard extension file dialog wildcard filter to add to the base message dialog.
wxString formatWildcardExt(const wxString &aWildcard)
Format wildcard extension to support case sensitive file dialogs.
bool IsGerberFileExtension(const wxString &ext)
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...
wxString KiCadSchematicFileWildcard()
wxString IDF3DFileWildcard()
wxString NetlistFileWildcard()
wxString SpecctraDsnFileWildcard()
wxString EagleFootprintLibPathWildcard()
wxString DatabaseLibFileWildcard()
wxString ErcFileWildcard()
wxString DxfFileWildcard()
wxString AllProjectFilesWildcard()
wxString IpcD356FileWildcard()
wxString LegacyProjectFileWildcard()
wxString ProjectFileWildcard()
wxString SpiceLibraryFileWildcard()
wxString KiCadFootprintLibPathWildcard()
wxString LegacyPcbFileWildcard()
wxString SchematicSymbolFileWildcard()
wxString FootprintPlaceFileWildcard()
wxString TextFileWildcard()
wxString LegacySymbolLibFileWildcard()
wxString DrillFileWildcard()
wxString AltiumFootprintLibPathWildcard()
wxString EagleFilesWildcard()
wxString SVGFileWildcard()
wxString CadstarPcbArchiveFileWildcard()
wxString SpecctraSessionFileWildcard()
wxString EquFileWildcard()
wxString ReportFileWildcard()
wxString LegacySchematicFileWildcard()
wxString Shapes3DFileWildcard()
wxString FootprintAssignmentFileWildcard()
wxString AltiumDesignerPcbFileWildcard()
wxString PCadPcbFileWildcard()
wxString PdfFileWildcard()
wxString WorkbookFileWildcard()
wxString ModLegacyExportFileWildcard()
wxString OrCadPcb2NetlistFileWildcard()
wxString EaglePcbFileWildcard()
wxString FabmasterPcbFileWildcard()
wxString AltiumCircuitMakerPcbFileWildcard()
wxString CadstarNetlistFileWildcard()
wxString KiCadFootprintLibFileWildcard()
wxString PngFileWildcard()
wxString CadstarSchematicArchiveFileWildcard()
wxString DrawingSheetFileWildcard()
wxString HtmlFileWildcard()
wxString AllSchematicFilesWildcard()
wxString AltiumSchematicFileWildcard()
wxString LegacyFootprintLibPathWildcard()
wxString AltiumCircuitStudioPcbFileWildcard()
wxString PSFileWildcard()
wxString CadstarArchiveFilesWildcard()
wxString HotkeyFileWildcard()
wxString AllFilesWildcard()
wxString SpiceNetlistFileWildcard()
wxString PcbFileWildcard()
wxString GedaPcbFootprintLibFileWildcard()
wxString GerberJobFileWildcard()
wxString GencadFileWildcard()
wxString EagleSchematicFileWildcard()
wxString KiCadSymbolLibFileWildcard()
wxString ZipFileWildcard()
wxString AllSymbolLibFilesWildcard()
wxString JpegFileWildcard()
wxString CsvFileWildcard()
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200
const std::string SpecctraSessionFileExtension("ses")
const std::string TextFileExtension("txt")
const std::string JpegFileExtension("jpg")
const std::string DatabaseLibraryFileExtension("kicad_dbl")
const std::string ProjectFileExtension("kicad_pro")
const std::string KiCadSymbolLibFileExtension("kicad_sym")
const std::string OrCadPcb2NetlistFileExtension("net")
const std::string PdfFileExtension("pdf")
const std::string ReportFileExtension("rpt")
const std::string CadstarPcbFileExtension("cpa")
const std::string WorkbookFileExtension("wbk")
const wxString GerberFileExtensionsRegex("(gbr|gko|pho|(g[tb][alops])|(gm?\\d\\d*)|(gp[tb]))")
const std::string GedaPcbFootprintLibFileExtension("fp")
const std::string HtmlFileExtension("html")
const std::string SpecctraDsnFileExtension("dsn")
const std::string EaglePcbFileExtension("brd")
const std::string KiCadSchematicFileExtension("kicad_sch")
const std::string GerberJobFileExtension("gbrjob")
const std::string KiCadPcbFileExtension("kicad_pcb")
const std::string EagleSchematicFileExtension("sch")
const std::string MarkdownFileExtension("md")
const std::string CsvFileExtension("csv")
const std::string SchematicSymbolFileExtension("sym")
const std::string IpcD356FileExtension("d356")
const std::string BackupFileSuffix("-bak")
const std::string HotkeyFileExtension("hotkeys")
const std::string VrmlFileExtension("wrl")
const std::string ProjectLocalSettingsFileExtension("kicad_prl")
const std::string AltiumFootprintLibPathExtension("PcbLib")
const std::string FootprintPlaceFileExtension("pos")
const std::string NetlistFileExtension("net")
const std::string ArchiveFileExtension("zip")
const std::string EquFileExtension("equ")
const std::string GerberFileExtension("gbr")
const std::string LegacySchematicFileExtension("sch")
const std::string PngFileExtension("png")
const std::string SpiceFileExtension("cir")
const std::string LegacySymbolLibFileExtension("lib")
const std::string KiCadFootprintLibPathExtension("pretty")
const std::string CadstarNetlistFileExtension("frp")
const std::string DrillFileExtension("drl")
const std::string KiCadFootprintFileExtension("kicad_mod")
const std::string DrawingSheetFileExtension("kicad_wks")
const std::string CadstarSchematicFileExtension("csa")
const std::string XmlFileExtension("xml")
const std::string DesignRulesFileExtension("kicad_dru")
const std::string LegacySymbolDocumentFileExtension("dcm")
const std::string EagleFootprintLibPathExtension("lbr")
const std::string FootprintAssignmentFileExtension("cmp")
const std::string SVGFileExtension("svg")
const std::string LegacyPcbFileExtension("brd")
const std::string MacrosFileExtension("mcr")
const std::string LegacyFootprintLibPathExtension("mod")
const std::string LegacyProjectFileExtension("pro")
Definition of file extensions used in Kicad.