KiCad PCB EDA Suite
BOM_GENERATOR_HANDLER Class Reference

Bill of material output generator. More...

#include <bom_plugins.h>

Public Member Functions

 BOM_GENERATOR_HANDLER (const wxString &aFile)
 
bool IsOk ()
 Return true if the plugin is ready to work, i.e. More...
 
const wxString & GetInfo () const
 Return plugin description stored in the plugin header file (if available). More...
 
const wxFileName & GetFile () const
 Return the file name of the plugin. More...
 
wxString GetStoredPath () const
 
wxFileName FindFilePath () const
 Returns the calculated path to the plugin: if the path is already absolute and exists, just return it. More...
 
const wxString & GetName () const
 Return the customisable plugin name. More...
 
void SetName (const wxString &aName)
 Set the customisable plugin name. More...
 
const wxString & GetCommand () const
 Return the command to execute the plugin. More...
 
void SetCommand (const wxString &aCommand)
 Set the command to execute the plugin. More...
 
wxArrayString & Options ()
 Accessor to array of options. More...
 

Static Public Member Functions

static bool IsValidGenerator (const wxString &aFile)
 Return true if a file name matches a recognized plugin format. More...
 

Protected Member Functions

wxString readHeader (const wxString &aEndSection)
 Read the plugin file header. More...
 

Static Protected Member Functions

static wxString getOutputExtension (const wxString &aHeader)
 Extracts the output BOM file's extension, including the '. More...
 

Protected Attributes

bool m_isOk
 Path to the plugin. More...
 
wxFileName m_file
 Path to the plugin stored in config (can be absolute or just a filename) More...
 
const wxString m_storedPath
 User customisable name. More...
 
wxString m_name
 Command to execute the plugin. More...
 
wxString m_cmd
 Description of the plugin (normally from the plugin header) More...
 
wxString m_info
 Plugin specific options. More...
 
wxArrayString m_options
 

Detailed Description

Bill of material output generator.

A Material output generator is an external application called by Eeschema to create a BOM from our intermediate XML netlist. A generator can be a script or an executable that can read the intermediate XML netlist file and generates a output (the BOM file)

Definition at line 45 of file bom_plugins.h.

Constructor & Destructor Documentation

◆ BOM_GENERATOR_HANDLER()

BOM_GENERATOR_HANDLER::BOM_GENERATOR_HANDLER ( const wxString &  aFile)
Parameters
aFileis path to the plugin file.

Definition at line 35 of file bom_plugins.cpp.

36  : m_storedPath( aFile )
37 {
38  m_isOk = false;
39  m_file = wxFileName( aFile );
40 
41  if( !wxFile::Exists( m_file.GetFullPath() ) )
42  m_file = FindFilePath();
43 
44  if( !wxFile::Exists( m_file.GetFullPath() ) )
45  {
46  m_info.Printf( _("Script file:\n%s\nnot found. Script not available."), aFile );
47  return;
48  }
49 
50  m_isOk = true;
51 
52  m_name = m_file.GetName();
53  wxString extension = m_file.GetExt().Lower();
54 
55  // Important note:
56  // On Windows the right command command to run a python script is:
57  // python <script_path>/script.py
58  // and *not* python <script_path>\script.py
59  // Otherwise the script does not find some auxiliary pythons scripts needed by this script
60  if( extension == "xsl" )
61  {
62  m_info = readHeader( "-->" );
63  m_cmd = wxString::Format( "xsltproc -o \"%%O%s\" \"%s\" \"%%I\"",
64  getOutputExtension( m_info ), m_file.GetFullPath() );
65  }
66  else if( extension == "py" )
67  {
68  m_info = readHeader( "\"\"\"" );
69 #ifdef __WINDOWS__
70  m_cmd = wxString::Format( "python \"%s/%s\" \"%%I\" \"%%O%s\"",
71  m_file.GetPath(), m_file.GetFullName(),
73 #else
74  wxString interpreter = wxString::FromUTF8Unchecked( PYTHON_EXECUTABLE );
75 
76  if( interpreter.IsEmpty() )
77  interpreter = wxT( "python" );
78 
79  m_cmd = wxString::Format( "%s \"%s\" \"%%I\" \"%%O%s\"", interpreter, m_file.GetFullPath(),
81 #endif
82  }
83 #ifdef __WINDOWS__
84  else if( extension == "pyw" )
85  {
86  m_info = readHeader( "\"\"\"" );
87  m_cmd = wxString::Format( "pythonw \"%s/%s\" \"%%I\" \"%%O%s\"",
88  m_file.GetPath(), m_file.GetFullName(),
90  }
91 #endif /* __WINDOWS__ */
92  else // fallback
93  {
94  m_cmd = m_file.GetFullPath();
95  }
96 
97  wxLogTrace( BOM_TRACE, "%s: extracted command line %s", m_name, m_cmd );
98 }
wxString readHeader(const wxString &aEndSection)
Read the plugin file header.
wxFileName m_file
Path to the plugin stored in config (can be absolute or just a filename)
Definition: bom_plugins.h:155
wxString m_cmd
Description of the plugin (normally from the plugin header)
Definition: bom_plugins.h:164
const wxChar BOM_TRACE[]
Definition: bom_plugins.cpp:32
wxFileName FindFilePath() const
Returns the calculated path to the plugin: if the path is already absolute and exists,...
#define _(s)
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
static wxString getOutputExtension(const wxString &aHeader)
Extracts the output BOM file's extension, including the '.
wxString m_name
Command to execute the plugin.
Definition: bom_plugins.h:161
const wxString m_storedPath
User customisable name.
Definition: bom_plugins.h:158
wxString m_info
Plugin specific options.
Definition: bom_plugins.h:167
bool m_isOk
Path to the plugin.
Definition: bom_plugins.h:152

References _, BOM_TRACE, FindFilePath(), Format(), getOutputExtension(), m_cmd, m_file, m_info, m_isOk, m_name, and readHeader().

Member Function Documentation

◆ FindFilePath()

wxFileName BOM_GENERATOR_HANDLER::FindFilePath ( ) const

Returns the calculated path to the plugin: if the path is already absolute and exists, just return it.

Otherwise if the path is just a filename, look for that file in the user and system plugin directories and return the first one found. If neither is found, just return m_file.

Returns
the full path to the plugin

Definition at line 170 of file bom_plugins.cpp.

171 {
172  if( m_file.IsAbsolute() && m_file.Exists( wxFILE_EXISTS_REGULAR ) )
173  {
174  wxLogTrace( BOM_TRACE, "%s found directly", m_file.GetFullPath() );
175  return m_file;
176  }
177 
178  wxFileName test( PATHS::GetUserPluginsPath(), m_file.GetName(), m_file.GetExt() );
179 
180  if( test.Exists( wxFILE_EXISTS_REGULAR ) )
181  {
182  wxLogTrace( BOM_TRACE, "%s found in user plugins path %s", m_file.GetFullName(),
184  return test;
185  }
186 
187  test = wxFileName( PATHS::GetStockPluginsPath(), m_file.GetName(), m_file.GetExt() );
188 
189  if( test.Exists( wxFILE_EXISTS_REGULAR ) )
190  {
191  wxLogTrace( BOM_TRACE, "%s found in stock plugins path %s", m_file.GetFullName(),
193  return test;
194  }
195 
196  wxLogTrace( BOM_TRACE, "Could not find %s (checked %s, %s)", m_file.GetFullName(),
198 
199  return m_file;
200 }
wxFileName m_file
Path to the plugin stored in config (can be absolute or just a filename)
Definition: bom_plugins.h:155
const wxChar BOM_TRACE[]
Definition: bom_plugins.cpp:32
static wxString GetUserPluginsPath()
Gets the user path for plugins.
Definition: paths.cpp:53
static wxString GetStockPluginsPath()
Gets the stock (install) plugins path.
Definition: paths.cpp:212

References BOM_TRACE, PATHS::GetStockPluginsPath(), PATHS::GetUserPluginsPath(), and m_file.

Referenced by BOM_GENERATOR_HANDLER(), and DIALOG_BOM::pluginInit().

◆ GetCommand()

const wxString& BOM_GENERATOR_HANDLER::GetCommand ( ) const
inline

Return the command to execute the plugin.

Definition at line 114 of file bom_plugins.h.

115  {
116  return m_cmd;
117  }
wxString m_cmd
Description of the plugin (normally from the plugin header)
Definition: bom_plugins.h:164

References m_cmd.

Referenced by DIALOG_BOM::pluginInit().

◆ GetFile()

const wxFileName& BOM_GENERATOR_HANDLER::GetFile ( ) const
inline

Return the file name of the plugin.

Definition at line 76 of file bom_plugins.h.

77  {
78  return m_file;
79  }
wxFileName m_file
Path to the plugin stored in config (can be absolute or just a filename)
Definition: bom_plugins.h:155

References m_file.

Referenced by DIALOG_BOM::pluginInit().

◆ GetInfo()

const wxString& BOM_GENERATOR_HANDLER::GetInfo ( ) const
inline

Return plugin description stored in the plugin header file (if available).

Definition at line 68 of file bom_plugins.h.

69  {
70  return m_info;
71  }
wxString m_info
Plugin specific options.
Definition: bom_plugins.h:167

References m_info.

Referenced by DIALOG_BOM::pluginInit().

◆ GetName()

const wxString& BOM_GENERATOR_HANDLER::GetName ( void  ) const
inline

Return the customisable plugin name.

Definition at line 96 of file bom_plugins.h.

97  {
98  return m_name;
99  }
wxString m_name
Command to execute the plugin.
Definition: bom_plugins.h:161

References m_name.

Referenced by DIALOG_BOM::pluginInit().

◆ getOutputExtension()

wxString BOM_GENERATOR_HANDLER::getOutputExtension ( const wxString &  aHeader)
staticprotected

Extracts the output BOM file's extension, including the '.

', from the plugin file header. If the output extension cannot be determined from the plugin header, returns wxEmptyString.

Parameters
aHeaderis the plugin file's header, as returned by readHeader()true if the plugin is working (i.e. if the plugin file exists and was read

Definition at line 149 of file bom_plugins.cpp.

150 {
151  // search header for extension after %O (extension includes '.')
152  // looks for output argument of the form `"%O.extension"`
153  const wxString outputarg( "\"%O" );
154 
155  int strstart = aHeader.Find( outputarg );
156 
157  if( strstart == wxNOT_FOUND )
158  return wxEmptyString;
159 
160  strstart += outputarg.Length();
161  int strend = aHeader.find( "\"", strstart );
162 
163  if( strend == wxNOT_FOUND )
164  return wxEmptyString;
165 
166  return aHeader.SubString( strstart, strend - 1 );
167 }

Referenced by BOM_GENERATOR_HANDLER().

◆ GetStoredPath()

wxString BOM_GENERATOR_HANDLER::GetStoredPath ( ) const
inline

Definition at line 81 of file bom_plugins.h.

81 { return m_storedPath; }
const wxString m_storedPath
User customisable name.
Definition: bom_plugins.h:158

References m_storedPath.

◆ IsOk()

bool BOM_GENERATOR_HANDLER::IsOk ( )
inline

Return true if the plugin is ready to work, i.e.

if the plugin file is found and readable.

Definition at line 56 of file bom_plugins.h.

56 { return m_isOk; }
bool m_isOk
Path to the plugin.
Definition: bom_plugins.h:152

References m_isOk.

Referenced by DIALOG_BOM::pluginInit().

◆ IsValidGenerator()

bool BOM_GENERATOR_HANDLER::IsValidGenerator ( const wxString &  aFile)
static

Return true if a file name matches a recognized plugin format.

Parameters
aFileis path to the plugin file.

Definition at line 101 of file bom_plugins.cpp.

102 {
103  wxFileName fn( aFile );
104  wxString ext = fn.GetExt().Lower();
105 
106  for( const auto& pluginExt : { "xsl", "py", "pyw" } )
107  {
108  if( pluginExt == ext )
109  return true;
110  }
111 
112  return false;
113 }

◆ Options()

wxArrayString& BOM_GENERATOR_HANDLER::Options ( )
inline

Accessor to array of options.

Definition at line 130 of file bom_plugins.h.

131  {
132  return m_options;
133  }
wxArrayString m_options
Definition: bom_plugins.h:170

References m_options.

Referenced by DIALOG_BOM::pluginInit().

◆ readHeader()

wxString BOM_GENERATOR_HANDLER::readHeader ( const wxString &  aEndSection)
protected

Read the plugin file header.

Parameters
aEndSectionis a string marking end of the header.

Definition at line 116 of file bom_plugins.cpp.

117 {
118  if( aEndSection.IsEmpty() )
119  return wxEmptyString;
120 
121  wxFFile fdata( m_file.GetFullPath(), "rb" ); // dtor will close the file
122  wxString data;
123 
124  if( !fdata.ReadAll( &data ) )
125  return wxEmptyString;
126 
127  const wxString header( "@package" );
128 
129  // Extract substring between @package and endsection
130  int strstart = data.Find( header );
131 
132  if( strstart == wxNOT_FOUND )
133  return wxEmptyString;
134 
135  strstart += header.Length();
136  int strend = data.find( aEndSection, strstart );
137 
138  if( strend == wxNOT_FOUND )
139  return wxEmptyString;
140 
141  // Remove empty line if any
142  while( data[strstart] < ' ' )
143  strstart++;
144 
145  return data.SubString( strstart, strend - 1 );
146 }
wxFileName m_file
Path to the plugin stored in config (can be absolute or just a filename)
Definition: bom_plugins.h:155

References m_file.

Referenced by BOM_GENERATOR_HANDLER().

◆ SetCommand()

void BOM_GENERATOR_HANDLER::SetCommand ( const wxString &  aCommand)
inline

Set the command to execute the plugin.

Definition at line 122 of file bom_plugins.h.

123  {
124  m_cmd = aCommand;
125  }
wxString m_cmd
Description of the plugin (normally from the plugin header)
Definition: bom_plugins.h:164

References m_cmd.

◆ SetName()

void BOM_GENERATOR_HANDLER::SetName ( const wxString &  aName)
inline

Set the customisable plugin name.

Parameters
aNameis the new name.

Definition at line 106 of file bom_plugins.h.

107  {
108  m_name = aName;
109  }
wxString m_name
Command to execute the plugin.
Definition: bom_plugins.h:161

References m_name.

Member Data Documentation

◆ m_cmd

wxString BOM_GENERATOR_HANDLER::m_cmd
protected

Description of the plugin (normally from the plugin header)

Definition at line 164 of file bom_plugins.h.

Referenced by BOM_GENERATOR_HANDLER(), GetCommand(), and SetCommand().

◆ m_file

wxFileName BOM_GENERATOR_HANDLER::m_file
protected

Path to the plugin stored in config (can be absolute or just a filename)

Definition at line 155 of file bom_plugins.h.

Referenced by BOM_GENERATOR_HANDLER(), FindFilePath(), GetFile(), and readHeader().

◆ m_info

wxString BOM_GENERATOR_HANDLER::m_info
protected

Plugin specific options.

Definition at line 167 of file bom_plugins.h.

Referenced by BOM_GENERATOR_HANDLER(), and GetInfo().

◆ m_isOk

bool BOM_GENERATOR_HANDLER::m_isOk
protected

Path to the plugin.

Definition at line 152 of file bom_plugins.h.

Referenced by BOM_GENERATOR_HANDLER(), and IsOk().

◆ m_name

wxString BOM_GENERATOR_HANDLER::m_name
protected

Command to execute the plugin.

Definition at line 161 of file bom_plugins.h.

Referenced by BOM_GENERATOR_HANDLER(), GetName(), and SetName().

◆ m_options

wxArrayString BOM_GENERATOR_HANDLER::m_options
protected

Definition at line 170 of file bom_plugins.h.

Referenced by Options().

◆ m_storedPath

const wxString BOM_GENERATOR_HANDLER::m_storedPath
protected

User customisable name.

Definition at line 158 of file bom_plugins.h.

Referenced by GetStoredPath().


The documentation for this class was generated from the following files: