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 The 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, see <https://www.gnu.org/licenses/>.
20 */
21
26#include <regex>
28#include <wx/filedlg.h>
29#include <wx/regex.h>
30#include <wx/translation.h>
31#include <regex>
32
33bool compareFileExtensions( const std::string& aExtension,
34 const std::vector<std::string>& aReference, bool aCaseSensitive )
35{
36 // Form the regular expression string by placing all possible extensions into it as alternatives
37 std::string regexString = "(";
38 bool first = true;
39
40 for( const std::string& ext : aReference )
41 {
42 // The | separate goes between the extensions
43 if( !first )
44 regexString += "|";
45 else
46 first = false;
47
48 regexString += ext;
49 }
50
51 regexString += ")";
52
53 // Create the regex and see if it matches
54 std::regex extRegex( regexString, aCaseSensitive ? std::regex::ECMAScript : std::regex::icase );
55 return std::regex_match( aExtension, extRegex );
56}
57
58
59wxString formatWildcardExt( const wxString& aWildcard )
60{
61 wxString wc;
62#if defined( __WXGTK__ )
63
64 for( const auto& ch : aWildcard )
65 {
66 if( wxIsalpha( ch ) )
67 wc += wxString::Format( "[%c%c]", wxTolower( ch ), wxToupper( ch ) );
68 else
69 wc += ch;
70 }
71
72 return wc;
73#else
74 wc = aWildcard;
75
76 return wc;
77#endif
78}
79
80
81wxString AddFileExtListToFilter( const std::vector<std::string>& aExts )
82{
83 if( aExts.size() == 0 )
84 {
85 // The "all files" wildcard is different on different systems
86 wxString filter;
87 filter << wxS( " (" ) << wxFileSelectorDefaultWildcardStr << wxS( ")|" )
88 << wxFileSelectorDefaultWildcardStr;
89 return filter;
90 }
91
92 wxString files_filter = wxS( " (" );
93
94 // Add extensions to the info message:
95 for( const std::string& ext : aExts )
96 {
97 if( files_filter.length() > 2 )
98 files_filter << wxS( "; " );
99
100 files_filter << "*." << ext;
101 }
102
103 files_filter << wxS( ")|*." );
104
105 // Add extensions to the filter list, using a formatted string (GTK specific):
106 bool first = true;
107
108 for( const std::string& ext : aExts )
109 {
110 if( !first )
111 files_filter << wxS( ";*." );
112
113 first = false;
114
115 files_filter << formatWildcardExt( ext );
116 }
117
118 return files_filter;
119}
120
121const std::string FILEEXT::BackupFileSuffix( "-bak" );
122const std::string FILEEXT::LockFilePrefix( "~" );
123const std::string FILEEXT::LockFileExtension( "lck" );
124
125const std::string FILEEXT::KiCadSymbolLibFileExtension( "kicad_sym" );
126const std::string FILEEXT::SchematicSymbolFileExtension( "sym" );
127const std::string FILEEXT::LegacySymbolLibFileExtension( "lib" );
128const std::string FILEEXT::LegacySymbolDocumentFileExtension( "dcm" );
129
130const std::string FILEEXT::VrmlFileExtension( "wrl" );
131
132const std::string FILEEXT::ProjectFileExtension( "kicad_pro" );
133const std::string FILEEXT::LegacyProjectFileExtension( "pro" );
134const std::string FILEEXT::ProjectLocalSettingsFileExtension( "kicad_prl" );
135const std::string FILEEXT::LegacySchematicFileExtension( "sch" );
136const std::string FILEEXT::CadstarSchematicFileExtension( "csa" );
137const std::string FILEEXT::CadstarPartsLibraryFileExtension( "lib" );
138const std::string FILEEXT::KiCadSchematicFileExtension( "kicad_sch" );
139const std::string FILEEXT::SpiceFileExtension( "cir" );
140const std::string FILEEXT::SpiceModelFileExtension( "model" );
141const std::string FILEEXT::SpiceSubcircuitFileExtension( "sub" );
142const std::string FILEEXT::IbisFileExtension( "ibs" );
143const std::string FILEEXT::CadstarNetlistFileExtension( "frp" );
144const std::string FILEEXT::OrCadPcb2NetlistFileExtension( "net" );
145const std::string FILEEXT::NetlistFileExtension( "net" );
146const std::string FILEEXT::AllegroNetlistFileExtension( "txt" );
147const std::string FILEEXT::PADSNetlistFileExtension( "asc" );
148const std::string FILEEXT::FootprintAssignmentFileExtension( "cmp" );
149const std::string FILEEXT::GerberFileExtension( "gbr" );
150const std::string FILEEXT::GerberJobFileExtension( "gbrjob" );
151const std::string FILEEXT::HtmlFileExtension( "html" );
152const std::string FILEEXT::EquFileExtension( "equ" );
153const std::string FILEEXT::HotkeyFileExtension( "hotkeys" );
154const std::string FILEEXT::DatabaseLibraryFileExtension( "kicad_dbl" );
155const std::string FILEEXT::HTTPLibraryFileExtension( "kicad_httplib" );
156const std::string FILEEXT::KiCadJobSetFileExtension( "kicad_jobset" );
157
158const std::string FILEEXT::ArchiveFileExtension( "zip" );
159
160const std::string FILEEXT::LegacyPcbFileExtension( "brd" );
161const std::string FILEEXT::EaglePcbFileExtension( "brd" );
162const std::string FILEEXT::CadstarPcbFileExtension( "cpa" );
163const std::string FILEEXT::KiCadPcbFileExtension( "kicad_pcb" );
164const std::string FILEEXT::DrawingSheetFileExtension( "kicad_wks" );
165const std::string FILEEXT::DesignRulesFileExtension( "kicad_dru" );
166
167const std::string FILEEXT::PdfFileExtension( "pdf" );
168const std::string FILEEXT::MacrosFileExtension( "mcr" );
169const std::string FILEEXT::DrillFileExtension( "drl" );
170const std::string FILEEXT::SVGFileExtension( "svg" );
171const std::string FILEEXT::ReportFileExtension( "rpt" );
172const std::string FILEEXT::FootprintPlaceFileExtension( "pos" );
173
174const std::string FILEEXT::KiCadFootprintLibPathExtension( "pretty" ); // this is a directory
175const std::string FILEEXT::LegacyFootprintLibPathExtension( "mod" ); // this is a file
176const std::string FILEEXT::AltiumFootprintLibPathExtension( "PcbLib" ); // this is a file
177const std::string FILEEXT::CadstarFootprintLibPathExtension( "cpa" ); // this is a file
178const std::string FILEEXT::EagleFootprintLibPathExtension( "lbr" ); // this is a file
179const std::string FILEEXT::GedaPcbFootprintLibFileExtension( "fp" ); // this is a file
180
181const std::string FILEEXT::KiCadFootprintFileExtension( "kicad_mod" );
182const std::string FILEEXT::SpecctraDsnFileExtension( "dsn" );
183const std::string FILEEXT::SpecctraSessionFileExtension( "ses" );
184const std::string FILEEXT::IpcD356FileExtension( "d356" );
185const std::string FILEEXT::Ipc2581FileExtension( "xml" );
186const std::string FILEEXT::WorkbookFileExtension( "wbk" );
187
188const std::string FILEEXT::KiCadDesignBlockLibPathExtension( "kicad_blocks" ); // this is a directory
189const std::string FILEEXT::KiCadDesignBlockPathExtension( "kicad_block" ); // this is a directory
190
191const std::string FILEEXT::PngFileExtension( "png" );
192const std::string FILEEXT::JpegFileExtension( "jpg" );
193const std::string FILEEXT::TextFileExtension( "txt" );
194const std::string FILEEXT::MarkdownFileExtension( "md" );
195const std::string FILEEXT::CsvFileExtension( "csv" );
196const std::string FILEEXT::TsvFileExtension( "tsv" );
197const std::string FILEEXT::XmlFileExtension( "xml" );
198const std::string FILEEXT::JsonFileExtension( "json" );
199const std::string FILEEXT::PythonFileExtension( "py" );
200
201const std::string FILEEXT::StepFileExtension( "step" );
202const std::string FILEEXT::StepZFileAbrvExtension( "stpz" );
203const std::string FILEEXT::StepFileAbrvExtension( "stp" );
204const std::string FILEEXT::GltfBinaryFileExtension( "glb" );
205const std::string FILEEXT::BrepFileExtension( "brep" );
206const std::string FILEEXT::XaoFileExtension( "xao" );
207const std::string FILEEXT::PlyFileExtension( "ply" );
208const std::string FILEEXT::StlFileExtension( "stl" );
209const std::string FILEEXT::U3DFileExtension( "u3d" );
210const std::string FILEEXT::IdfV3BoardFileExtension( "emn" );
211const std::string FILEEXT::IdfV3LibraryFileExtension( "emp" );
212
213const std::string FILEEXT::GencadFileExtension( "cad" );
214
215const wxString FILEEXT::GerberFileExtensionsRegex( "(gbr|gko|pho|(g[tb][alops])|(gm?\\d\\d*)|(gp[tb]))" );
216
217const std::string FILEEXT::FootprintLibraryTableFileName( "fp-lib-table" );
218const std::string FILEEXT::SymbolLibraryTableFileName( "sym-lib-table" );
219const std::string FILEEXT::DesignBlockLibraryTableFileName( "design-block-lib-table" );
220
221const std::string FILEEXT::KiCadUriPrefix( "kicad-embed" );
222
223
224bool FILEEXT::IsGerberFileExtension( const wxString& ext )
225{
226 static wxRegEx gerberRE( GerberFileExtensionsRegex, wxRE_ICASE );
227
228 return gerberRE.Matches( ext );
229}
230
231
233{
234 return _( "All files" ) + AddFileExtListToFilter( {} );
235}
236
237
239{
240 return _( "KiCad symbol library files" )
242}
243
244
246{
247 return _( "KiCad project files" ) + AddFileExtListToFilter( { ProjectFileExtension } );
248}
249
250
252{
253 return _( "KiCad legacy project files" )
255}
256
257
259{
260 return _( "All KiCad project files" )
262}
263
264
266{
267 return _( "All KiCad schematic files" )
269}
270
271
273{
274 return _( "KiCad legacy schematic files" )
276}
277
278
280{
281 return _( "KiCad s-expression schematic files" )
283}
284
285
287{
288 return _( "Altium Project files" ) + AddFileExtListToFilter( { "PrjPcb" } );
289}
290
291
293{
294 return _( "CADSTAR Archive files" ) + AddFileExtListToFilter( { "csa", "cpa" } );
295}
296
297
299{
300 return _( "Eagle XML files" ) + AddFileExtListToFilter( { "sch", "brd" } );
301}
302
303
305{
306 return _( "P-CAD ASCII files" ) + AddFileExtListToFilter( { "sch", "pcb" } );
307}
308
309
311{
312 return _( "PADS ASCII files" ) + AddFileExtListToFilter( { "asc", "txt" } );
313}
314
315
317{
318 return _( "gEDA / Lepton EDA project files" ) + AddFileExtListToFilter( { "prj", "sch", "pcb" } );
319}
320
321
323{
324 return _( "OrcadPCB2 netlist files" )
326}
327
328
330{
331 return _( "KiCad netlist files" ) + AddFileExtListToFilter( { "net" } );
332}
333
334
336{
337 return _( "Allegro netlist files" )
339}
340
341
343{
344 return _( "PADS netlist files" ) + AddFileExtListToFilter( { PADSNetlistFileExtension } );
345}
346
347
349{
350 return _( "EasyEDA (JLCEDA) Std backup archive" ) + AddFileExtListToFilter( { "zip" } );
351}
352
353
355{
356 return _( "EasyEDA (JLCEDA) Pro files" ) + AddFileExtListToFilter( { "epro", "epro2", "zip" } );
357}
358
359
361{
362 return _( "DipTrace files" ) + AddFileExtListToFilter( { "dch", "dip" } );
363}
364
365
367{
368 return _( "Easy-PC / DesignSpark PCB files" ) + AddFileExtListToFilter( { "prj", "sch", "pcb" } );
369}
370
371
373{
374 return _( "OrCAD Capture schematic files" ) + AddFileExtListToFilter( { "dsn" } );
375}
376
377
379{
380 return _( "Allegro PCB files" ) + AddFileExtListToFilter( { "brd" } );
381}
382
383
385{
386 return _( "KiCad printed circuit board files" )
388}
389
390
392{
393 return _( "KiCad footprint files" ) + AddFileExtListToFilter( { KiCadFootprintFileExtension } );
394}
395
396
398{
399 return _( "KiCad footprint library paths" )
401}
402
403
405{
406 return _( "KiCad design block path" )
408}
409
410
412{
413 return _( "KiCad design block library paths" )
415}
416
417
419{
420 return _( "Drawing sheet files" )
422}
423
424
425// Wildcard for cvpcb symbol to footprint link file
427{
428 return _( "KiCad symbol footprint link files" )
430}
431
432
433// Wildcard for reports and fabrication documents
435{
436 return _( "Drill files" )
437 + AddFileExtListToFilter( { DrillFileExtension, "nc", "xnc", "txt" } );
438}
439
440
442{
443 return _( "SVG files" ) + AddFileExtListToFilter( { SVGFileExtension } );
444}
445
446
448{
449 return _( "HTML files" ) + AddFileExtListToFilter( { "htm", "html" } );
450}
451
452
454{
455 return _( "CSV Files" ) + AddFileExtListToFilter( { CsvFileExtension } );
456}
457
458
460{
461 return _( "CSV/TSV Files" ) + AddFileExtListToFilter( { CsvFileExtension, TsvFileExtension } );
462}
463
464
466{
467 return _( "Portable document format files" ) + AddFileExtListToFilter( { "pdf" } );
468}
469
470
472{
473 return _( "PostScript files" ) + AddFileExtListToFilter( { "ps" } );
474}
475
476
478{
479 return _( "Json files" ) + AddFileExtListToFilter( { JsonFileExtension } );
480}
481
482
484{
485 return _( "Report files" ) + AddFileExtListToFilter( { ReportFileExtension } );
486}
487
488
490{
491 return _( "Component placement files" ) + AddFileExtListToFilter( { "pos" } );
492}
493
494
496{
497 return _( "VRML and X3D files" ) + AddFileExtListToFilter( { "wrl", "x3d" } );
498}
499
500
502{
503 return _( "IDFv3 footprint files" ) + AddFileExtListToFilter( { "idf" } );
504}
505
506
508{
509 return _( "Text files" ) + AddFileExtListToFilter( { "txt" } );
510}
511
512
514{
515 return _( "Legacy footprint export files" ) + AddFileExtListToFilter( { "emp" } );
516}
517
518
520{
521 return _( "Electrical rule check file" ) + AddFileExtListToFilter( { "erc" } );
522}
523
524
526{
527 return _( "SPICE library file" ) + AddFileExtListToFilter( { "lib", "mod" } );
528}
529
530
532{
533 return _( "SPICE netlist file" ) + AddFileExtListToFilter( { "cir" } );
534}
535
536
538{
539 return _( "CadStar netlist file" ) + AddFileExtListToFilter( { "frp" } );
540}
541
542
544{
545 return _( "Symbol footprint association files" ) + AddFileExtListToFilter( { "equ" } );
546}
547
548
550{
551 return _( "Zip file" ) + AddFileExtListToFilter( { "zip" } );
552}
553
554
556{
557 return _( "GenCAD 1.4 board files" ) + AddFileExtListToFilter( { GencadFileExtension } );
558}
559
560
562{
563 return _( "DXF Files" ) + AddFileExtListToFilter( { "dxf" } );
564}
565
566
568{
569 return _( "Gerber job file" ) + AddFileExtListToFilter( { GerberJobFileExtension } );
570}
571
572
574{
575 return _( "Specctra DSN file" )
577}
578
579
581{
582 return _( "Specctra Session file" )
584}
585
586
588{
589 return _( "IPC-D-356 Test Files" )
591}
592
593
595{
596 return _( "Workbook file" )
598}
599
600
602{
603 return _( "PNG file" ) + AddFileExtListToFilter( { "png" } );
604}
605
606
608{
609 return _( "Jpeg file" ) + AddFileExtListToFilter( { "jpg", "jpeg" } );
610}
611
612
614{
615 return _( "Image files" ) + AddFileExtListToFilter( { "png", "jpg", "jpeg", "bmp", "gif" } );
616}
617
618
620{
621 return _( "Hotkey file" ) + AddFileExtListToFilter( { HotkeyFileExtension } );
622}
623
624
626{
627 return _( "KiCad jobset files" ) + AddFileExtListToFilter( { KiCadJobSetFileExtension } );
628}
#define _(s)
static const std::string CadstarNetlistFileExtension
static const std::string LegacySchematicFileExtension
static const std::string KiCadDesignBlockLibPathExtension
static const std::string HtmlFileExtension
static const wxString GerberFileExtensionsRegex
static const std::string BrepFileExtension
static const std::string CadstarPartsLibraryFileExtension
static const std::string NetlistFileExtension
static const std::string KiCadDesignBlockPathExtension
static const std::string SymbolLibraryTableFileName
static const std::string JpegFileExtension
static const std::string GerberJobFileExtension
static const std::string StepFileAbrvExtension
static const std::string IdfV3LibraryFileExtension
static const std::string GerberFileExtension
static const std::string XaoFileExtension
static const std::string WorkbookFileExtension
static const std::string ReportFileExtension
static const std::string GltfBinaryFileExtension
static const std::string EquFileExtension
static const std::string LockFileExtension
static const std::string ProjectFileExtension
static const std::string PngFileExtension
static const std::string FootprintPlaceFileExtension
static const std::string JsonFileExtension
static const std::string AltiumFootprintLibPathExtension
static const std::string LegacyPcbFileExtension
static const std::string SchematicSymbolFileExtension
static const std::string XmlFileExtension
static const std::string IdfV3BoardFileExtension
static const std::string LegacyProjectFileExtension
static const std::string ProjectLocalSettingsFileExtension
static const std::string EagleFootprintLibPathExtension
static const std::string KiCadSchematicFileExtension
static const std::string OrCadPcb2NetlistFileExtension
static const std::string LegacySymbolLibFileExtension
static const std::string KiCadUriPrefix
static const std::string DesignBlockLibraryTableFileName
static const std::string LockFilePrefix
static const std::string CsvFileExtension
static const std::string KiCadSymbolLibFileExtension
static const std::string U3DFileExtension
static const std::string TsvFileExtension
static const std::string SpiceFileExtension
static const std::string PdfFileExtension
static const std::string TextFileExtension
static const std::string Ipc2581FileExtension
static const std::string FootprintLibraryTableFileName
static const std::string PADSNetlistFileExtension
static const std::string GencadFileExtension
static const std::string StlFileExtension
static const std::string DrawingSheetFileExtension
static const std::string BackupFileSuffix
static const std::string IbisFileExtension
static const std::string IpcD356FileExtension
static const std::string KiCadJobSetFileExtension
static const std::string CadstarFootprintLibPathExtension
static const std::string GedaPcbFootprintLibFileExtension
static const std::string DatabaseLibraryFileExtension
static const std::string LegacyFootprintLibPathExtension
static const std::string CadstarSchematicFileExtension
static const std::string PlyFileExtension
static const std::string PythonFileExtension
static const std::string SpecctraDsnFileExtension
static const std::string StepFileExtension
static const std::string LegacySymbolDocumentFileExtension
static const std::string KiCadFootprintLibPathExtension
static const std::string FootprintAssignmentFileExtension
static const std::string SVGFileExtension
static const std::string EaglePcbFileExtension
static const std::string StepZFileAbrvExtension
static const std::string SpecctraSessionFileExtension
static const std::string HTTPLibraryFileExtension
static const std::string DrillFileExtension
static const std::string SpiceSubcircuitFileExtension
static const std::string MacrosFileExtension
static const std::string HotkeyFileExtension
static const std::string CadstarPcbFileExtension
static const std::string SpiceModelFileExtension
static const std::string DesignRulesFileExtension
static const std::string VrmlFileExtension
static const std::string MarkdownFileExtension
static const std::string KiCadFootprintFileExtension
static const std::string ArchiveFileExtension
static const std::string AllegroNetlistFileExtension
static const std::string KiCadPcbFileExtension
static wxString ProjectFileWildcard()
static wxString SpiceNetlistFileWildcard()
static wxString PngFileWildcard()
static wxString HotkeyFileWildcard()
static wxString EasyEdaArchiveWildcard()
static wxString ModLegacyExportFileWildcard()
static wxString FootprintPlaceFileWildcard()
static wxString GedaProjectFilesWildcard()
static wxString ErcFileWildcard()
static wxString JpegFileWildcard()
static wxString OrCadPcb2NetlistFileWildcard()
static wxString AllFilesWildcard()
static wxString AllegroNetlistFileWildcard()
static wxString CadstarArchiveFilesWildcard()
static wxString SpecctraSessionFileWildcard()
static wxString TextFileWildcard()
static wxString CadstarNetlistFileWildcard()
static wxString KiCadDesignBlockLibPathWildcard()
static wxString EasyEdaProFileWildcard()
static wxString LegacySchematicFileWildcard()
static wxString OrCadSchematicFilesWildcard()
static wxString DxfFileWildcard()
static wxString PdfFileWildcard()
static wxString KiCadDesignBlockPathWildcard()
static wxString PADSProjectFilesWildcard()
static wxString SVGFileWildcard()
static wxString PADSNetlistFileWildcard()
static bool IsGerberFileExtension(const wxString &ext)
static wxString SpiceLibraryFileWildcard()
static wxString GerberJobFileWildcard()
static wxString JsonFileWildcard()
static wxString ImageFileWildcard()
static wxString PcbFileWildcard()
static wxString KiCadSymbolLibFileWildcard()
static wxString KiCadFootprintLibFileWildcard()
static wxString KiCadFootprintLibPathWildcard()
static wxString NetlistFileWildcard()
static wxString PSFileWildcard()
static wxString EquFileWildcard()
static wxString AllSchematicFilesWildcard()
static wxString IDF3DFileWildcard()
static wxString HtmlFileWildcard()
static wxString SpecctraDsnFileWildcard()
static wxString DrawingSheetFileWildcard()
static wxString DrillFileWildcard()
static wxString FootprintAssignmentFileWildcard()
static wxString EasyPcFilesWildcard()
static wxString AltiumProjectFilesWildcard()
static wxString CsvTsvFileWildcard()
static wxString Shapes3DFileWildcard()
static wxString EagleFilesWildcard()
static wxString JobsetFileWildcard()
static wxString LegacyProjectFileWildcard()
static wxString IpcD356FileWildcard()
static wxString CsvFileWildcard()
static wxString AllegroPcbFilesWildcard()
static wxString AllProjectFilesWildcard()
static wxString KiCadSchematicFileWildcard()
static wxString GencadFileWildcard()
static wxString ReportFileWildcard()
static wxString ZipFileWildcard()
static wxString WorkbookFileWildcard()
static wxString PcadFilesWildcard()
static wxString DipTraceFilesWildcard()
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 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...
Definition of file extensions used in Kicad.
KICOMMON_API wxString AddFileExtListToFilter(const std::vector< std::string > &aExts)
Build the wildcard extension file dialog wildcard filter to add to the base message dialog.