KiCad PCB EDA Suite
numEval Namespace Reference

Namespaces

 KIGFX
 
 numEval
 
 std
 

Template specialization to enable wxStrings for certain containers (e.g. unordered_map)


 

Classes

class  FILE_LINE_READER
 FILE_LINE_READER is a LINE_READER that reads from an open file. More...
 
class  FILE_OUTPUTFORMATTER
 FILE_OUTPUTFORMATTER may be used for text file output. More...
 
struct  FUTURE_FORMAT_ERROR
 Struct FUTURE_FORMAT_ERROR variant of PARSE_ERROR indicating that a syntax or related error was likely caused by a file generated by a newer version of KiCad than this. More...
 
class  INPUTSTREAM_LINE_READER
 INPUTSTREAM_LINE_READER is a LINE_READER that reads from a wxInputStream object. More...
 
class  IO_ERROR
 Struct IO_ERROR is a class used to hold an error message and may be used when throwing exceptions containing meaningful error messages. More...
 
class  KI_PARAM_ERROR
 KI_PARAM_ERROR is a class used to hold a translatable error message and may be used when throwing exceptions containing a translated error message. More...
 
class  KIID
 
class  KIID_PATH
 
class  LINE_READER
 LINE_READER is an abstract class from which implementation specific LINE_READERs may be derived to read single lines of text and manage a line number counter. More...
 
class  LOCALE_IO
 Instantiate the current locale within a scope in which you are expecting exceptions to be thrown. More...
 
class  NUMERIC_EVALUATOR
 
class  OUTPUTFORMATTER
 OUTPUTFORMATTER is an important interface (abstract class) used to output 8 bit text in a convenient way. More...
 
struct  PARSE_ERROR
 Struct PARSE_ERROR contains a filename or source description, a problem input line, a line number, a byte offset, and an error message which contains the the caller's report and his call site information: CPP source file, function, and line number. More...
 
class  STREAM_OUTPUTFORMATTER
 STREAM_OUTPUTFORMATTER implements OUTPUTFORMATTER to a wxWidgets wxOutputStream. More...
 
class  STRING_FORMATTER
 STRING_FORMATTER implements OUTPUTFORMATTER to a memory buffer. More...
 
class  STRING_LINE_READER
 STRING_LINE_READER is a LINE_READER that reads from a multiline 8 bit wide std::string. More...
 
struct  StructColors
 
struct  TokenType
 
class  UTF8
 UTF8 is an 8 bit string that is assuredly encoded in UTF8, and supplies special conversion support to and from wxString, to and from std::string, and has non-mutating iteration over unicode characters. More...
 
class  WX_FILENAME
 A wrapper around a wxFileName which is much more performant with a subset of the API. More...
 
union  YYMINORTYPE
 
struct  yyParser
 
struct  yyStackEntry
 

Typedefs

typedef uint32_t timestamp_t
 timestamp_t is our type to represent unique IDs for all kinds of elements; historically simply the timestamp when they were created. More...
 
typedef struct yyStackEntry yyStackEntry
 
typedef struct yyParser yyParser
 

Enumerations

enum  EDA_COLOR_T {
  UNSPECIFIED_COLOR = -1, BLACK = 0, DARKDARKGRAY, DARKGRAY,
  LIGHTGRAY, WHITE, LIGHTYELLOW, DARKBLUE,
  DARKGREEN, DARKCYAN, DARKRED, DARKMAGENTA,
  DARKBROWN, BLUE, GREEN, CYAN,
  RED, MAGENTA, BROWN, LIGHTBLUE,
  LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA,
  YELLOW, PUREBLUE, PUREGREEN, PURECYAN,
  PURERED, PUREMAGENTA, PUREYELLOW, NBCOLORS,
  HIGHLIGHT_FLAG = ( 1<<19 ), MASKCOLOR = 31
}
 The color enumeration. More...
 
enum  EDA_DATA_TYPE { EDA_DATA_TYPE::DISTANCE = 0, EDA_DATA_TYPE::AREA = 1, EDA_DATA_TYPE::VOLUME = 2 }
 The type of unit. More...
 
enum  EDA_UNITS {
  EDA_UNITS::INCHES = 0, EDA_UNITS::MILLIMETRES = 1, EDA_UNITS::UNSCALED = 2, EDA_UNITS::DEGREES = 3,
  EDA_UNITS::PERCENT = 4
}
 

Functions

bool IsUTF8 (const char *aString)
 Function IsUTF8 tests a c-string to see if it is UTF8 encoded. More...
 
int StrPrintf (std::string *aResult, const char *aFormat,...)
 Function StrPrintf is like sprintf() but the output is appended to a std::string instead of to a character array. More...
 
std::string StrPrintf (const char *format,...)
 Function StrPrintf is like sprintf() but the output is returned in a std::string instead of to a character array. More...
 
EDA_COLOR_T ColorFromInt (int aColor)
 Checked cast. Use only when necessary (usually I/O) More...
 
EDA_COLOR_T NextColor (EDA_COLOR_T &aColor)
 
EDA_COLOR_T ColorGetBase (EDA_COLOR_T aColor)
 Return only the plain color part. More...
 
EDA_COLOR_T ColorMix (EDA_COLOR_T aColor1, EDA_COLOR_T aColor2)
 Mix two colors in some way (hopefully like a logical OR) More...
 
void ColorTurnToDarkDarkGray (EDA_COLOR_T *aColor)
 Force the color part of a color to darkdarkgray. More...
 
void ColorChangeHighlightFlag (EDA_COLOR_T *aColor, bool flag)
 
void SetAlpha (EDA_COLOR_T *aColor, unsigned char aBlend)
 Function SetAlpha ORs in the alpha blend parameter in to a color index. More...
 
unsigned char GetAlpha (EDA_COLOR_T aColor)
 Function GetAlpha returns the alpha blend parameter from a color index. More...
 
void ColorApplyHighlightFlag (EDA_COLOR_T *aColor)
 Step a color to the highlighted version if the highlight flag is set. More...
 
EDA_COLOR_T ColorByName (const wxString &aName)
 Find a color by name. More...
 
EDA_COLOR_T ColorFindNearest (const wxColour &aColor)
 Find the nearest color match. More...
 
EDA_COLOR_T ColorFindNearest (int aR, int aG, int aB)
 Find the nearest color match. More...
 
bool ColorIsLight (EDA_COLOR_T aColor)
 Check if a color is light i.e. More...
 
const wxChar * ColorGetName (EDA_COLOR_T aColor)
 
void ColorSetBrush (wxBrush *aBrush, EDA_COLOR_T aColor)
 
wxColour MakeColour (EDA_COLOR_T aColor)
 Function MakeColour returns a wxWidgets wxColor from a KiCad color index with alpha value. More...
 
wxSize GetTextSize (const wxString &aSingleLine, wxWindow *aWindow)
 Return the size of aSingleLine of text when it is rendered in aWindow using whatever font is currently set in that window. More...
 
bool EnsureTextCtrlWidth (wxTextCtrl *aCtrl, const wxString *aString=NULL)
 Set the minimum pixel width on a text control in order to make a text string be fully visible within it. More...
 
void SelectReferenceNumber (wxTextEntry *aTextEntry)
 Select the number (or "?") in a reference for ease of editing. More...
 
int ProcessExecute (const wxString &aCommandLine, int aFlags=wxEXEC_ASYNC, wxProcess *callback=NULL)
 Run a command in a child process. More...
 
void wxStringSplit (const wxString &aText, wxArrayString &aStrings, wxChar aSplitter)
 Split aString to a string list separated at aSplitter. More...
 
wxString SearchHelpFileFullPath (const SEARCH_STACK &aSearchStack, const wxString &aBaseName)
 Return the help file's full path. More...
 
bool EnsureFileDirectoryExists (wxFileName *aTargetFullFileName, const wxString &aBaseFilename, REPORTER *aReporter=NULL)
 Make aTargetFullFileName absolute and create the path of this file if it doesn't yet exist. More...
 
const wxString PrePendPath (const wxString &aEnvVar, const wxString &aPriorityPath)
 Put aPriorityPath in front of all paths in the value of aEnvVar. More...
 
const wxString ExpandEnvVarSubstitutions (const wxString &aString)
 Replace any environment variable references with their values. More...
 
const wxString ResolveUriByEnvVars (const wxString &aUri)
 Replace any environment variables in file-path uris (leaving network-path URIs alone). More...
 
std::ostream & operator<< (std::ostream &out, const wxSize &size)
 Helper function to print the given wxSize to a stream. More...
 
std::ostream & operator<< (std::ostream &out, const wxPoint &pt)
 Helper function to print the given wxPoint to a stream. More...
 
long long TimestampDir (const wxString &aDirPath, const wxString &aFilespec)
 A copy of ConvertFileTimeToWx() because wxWidgets left it as a static function private to src/common/filename.cpp. More...
 
int Mm2mils (double x)
 Convert mm to mils. More...
 
int Mils2mm (double x)
 Convert mils to mm. More...
 
std::string Double2Str (double aValue)
 Helper function Double2Str to print a float number without using scientific notation and no trailing 0 We want to avoid scientific notation in S-expr files (not easy to read) for floating numbers. More...
 
void StripTrailingZeros (wxString &aStringValue, unsigned aTrailingZeroAllowed=1)
 Function StripTrailingZeros Remove trailing 0 from a string containing a converted float number. More...
 
double To_User_Unit (EDA_UNITS aUnit, double aValue, bool aUseMils=false)
 Function To_User_Unit convert aValue in internal units to the appropriate user units defined by aUnit. More...
 
wxString AngleToStringDegrees (double aAngle)
 Function AngleToStringDegrees is a helper to convert the double aAngle (in internal unit) to a string in degrees. More...
 
wxString MessageTextFromValue (EDA_UNITS aUnits, double aValue, bool aUseMils=false, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
 Function MessageTextFromValue is a helper to convert the double length aValue to a string in inches, millimeters, or unscaled units. More...
 
wxString MessageTextFromValue (EDA_UNITS aUnits, int aValue, bool aUseMils=false, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
 
wxString MessageTextFromValue (EDA_UNITS aUnits, long long int aValue, bool aUseMils=false, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
 
wxString StringFromValue (EDA_UNITS aUnit, double aValue, bool aAddUnitSymbol=false, bool aUseMils=false)
 Function StringFromValue returns the string from aValue according to units (inch, mm ...) for display, and the initial unit for value. More...
 
double From_User_Unit (EDA_UNITS aUnit, double aValue, bool aUseMils=false)
 Return in internal units the value "val" given in a real unit such as "in", "mm" or "deg". More...
 
double DoubleValueFromString (EDA_UNITS aUnits, const wxString &aTextValue, bool aUseMils=false)
 Function DoubleValueFromString converts aTextValue to a double. More...
 
long long int ValueFromString (EDA_UNITS aUnits, const wxString &aTextValue, bool aUseMils=false)
 Function ValueFromString converts aTextValue in aUnits to internal units used by the application. More...
 
void FetchUnitsFromString (const wxString &aTextValue, EDA_UNITS &aUnits, bool &aUseMils)
 Function FetchUnitsFromString writes any unit info found in the string to aUnits and aUseMils. More...
 
wxString GetAbbreviatedUnitsLabel (EDA_UNITS aUnit, bool aUseMils=false, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
 Get the units string for a given units type. More...
 
std::string FormatInternalUnits (int aValue)
 Function FormatInternalUnits converts aValue from internal units to a string appropriate for writing to file. More...
 
std::string FormatAngle (double aAngle)
 Function FormatAngle converts aAngle from board units to a string appropriate for writing to file. More...
 
std::string FormatInternalUnits (const wxPoint &aPoint)
 
std::string FormatInternalUnits (const wxSize &aSize)
 
std::string FormatInternalUnits (const VECTOR2I &aPoint)
 
void ParseTrace (FILE *TraceFILE, char *zTracePrompt)
 
void * ParseAlloc (void *(*mallocProc)(size_t))
 
static void yy_destructor (yyParser *yypParser, YYCODETYPE yymajor, YYMINORTYPE *yypminor)
 
static int yy_pop_parser_stack (yyParser *pParser)
 
void ParseFree (void *p, void(*freeProc)(void *))
 
static int yy_find_shift_action (yyParser *pParser, YYCODETYPE iLookAhead)
 
static int yy_find_reduce_action (int stateno, YYCODETYPE iLookAhead)
 
static void yyStackOverflow (yyParser *yypParser, YYMINORTYPE *yypMinor)
 
static void yy_shift (yyParser *yypParser, int yyNewState, int yyMajor, YYMINORTYPE *yypMinor)
 
static void yy_accept (yyParser *)
 
static void yy_reduce (yyParser *yypParser, int yyruleno)
 
static void yy_parse_failed (yyParser *yypParser)
 
static void yy_syntax_error (yyParser *yypParser, int yymajor, YYMINORTYPE yyminor)
 
void Parse (void *yyp, int yymajor, ParseTOKENTYPE yyminor ParseARG_PDECL)
 

Variables

const StructColors g_ColorRefs [NBCOLORS]
 list of existing Colors More...
 
KIID niluuid
 
static const YYMINORTYPE yyzerominor = { 0 }
 
static const YYACTIONTYPE yy_action []
 
static const YYCODETYPE yy_lookahead []
 
static const signed char yy_shift_ofst []
 
static const signed char yy_reduce_ofst []
 
static const YYACTIONTYPE yy_default []
 
static FILE * yyTraceFILE = 0
 
static char * yyTracePrompt = 0
 
static const char *const yyTokenName []
 
static const char *const yyRuleName []
 
struct {
   YYCODETYPE   numEval::lhs
 
   unsigned char   numEval::nrhs
 
yyRuleInfo []
 

Typedef Documentation

◆ timestamp_t

typedef uint32_t numEval::timestamp_t

timestamp_t is our type to represent unique IDs for all kinds of elements; historically simply the timestamp when they were created.

Long term, this type might be renamed to something like unique_id_t (and then rename all the methods from {Get,Set}TimeStamp() to {Get,Set}Id()) ?

Definition at line 53 of file numeric_evaluator.cpp.

◆ yyParser

typedef struct yyParser numEval::yyParser

Definition at line 236 of file numeric_evaluator.cpp.

◆ yyStackEntry

Definition at line 218 of file numeric_evaluator.cpp.

Enumeration Type Documentation

◆ EDA_COLOR_T

The color enumeration.

Also contains a flag and the alpha value in the upper bits

Enumerator
UNSPECIFIED_COLOR 
BLACK 
DARKDARKGRAY 
DARKGRAY 
LIGHTGRAY 
WHITE 
LIGHTYELLOW 
DARKBLUE 
DARKGREEN 
DARKCYAN 
DARKRED 
DARKMAGENTA 
DARKBROWN 
BLUE 
GREEN 
CYAN 
RED 
MAGENTA 
BROWN 
LIGHTBLUE 
LIGHTGREEN 
LIGHTCYAN 
LIGHTRED 
LIGHTMAGENTA 
YELLOW 
PUREBLUE 
PUREGREEN 
PURECYAN 
PURERED 
PUREMAGENTA 
PUREYELLOW 
NBCOLORS 

Number of colors.

HIGHLIGHT_FLAG 
MASKCOLOR 

mask for color index into g_ColorRefs[]

Definition at line 43 of file numeric_evaluator.cpp.

47 {
48  struct lconv* lc = localeconv();
49  m_localeDecimalSeparator = *lc->decimal_point;
50 
51  m_parseError = false;
52  m_parseFinished = false;
53 
54  m_parser = numEval::ParseAlloc( malloc );
55 
56  switch( aUnits )
57  {
58  case EDA_UNITS::INCHES:
59  if( aUseMils )
60  m_defaultUnits = Unit::Mil;
61  else
62  m_defaultUnits = Unit::Inch;
63  break;
65  m_defaultUnits = Unit::Metric;
66  break;
67  default:m_defaultUnits = Unit::Metric;
68  break;
69  }
70 }
71 
72 
74 {
76 
77  // Allow explicit call to destructor
78  m_parser = nullptr;
79 
void ParseFree(void *p, void(*freeProc)(void *))
void * ParseAlloc(void *(*mallocProc)(size_t))

◆ EDA_DATA_TYPE

The type of unit.

Enumerator
DISTANCE 
AREA 
VOLUME 

Definition at line 177 of file numeric_evaluator.cpp.

177 {
178  Token retval;
179  size_t idx;
180 
181  retval.token = ENDS;
182  retval.value.dValue = 0;
#define ENDS

◆ EDA_UNITS

enum numEval::EDA_UNITS
strong
Enumerator
INCHES 
MILLIMETRES 
UNSCALED 
DEGREES 
PERCENT 

Definition at line 184 of file numeric_evaluator.cpp.

193  {

Function Documentation

◆ AngleToStringDegrees()

wxString numEval::AngleToStringDegrees ( double  aAngle)

Function AngleToStringDegrees is a helper to convert the double aAngle (in internal unit) to a string in degrees.

Definition at line 456 of file base_units.cpp.

457 {
458  wxString text;
459 
460  text.Printf( wxT( "%.3f" ), aAngle/10.0 );
461  StripTrailingZeros( text, 1 );
462 
463  return text;
464 }
void StripTrailingZeros(wxString &aStringValue, unsigned aTrailingZeroAllowed)
Function StripTrailingZeros Remove trailing 0 from a string containing a converted float number.
Definition: base_units.cpp:202

◆ ColorApplyHighlightFlag()

void numEval::ColorApplyHighlightFlag ( EDA_COLOR_T aColor)
inline

Step a color to the highlighted version if the highlight flag is set.

Definition at line 158 of file numeric_evaluator.cpp.

161 {
162  Clear();
163 
164  m_originalText = aString;

◆ ColorByName()

EDA_COLOR_T numEval::ColorByName ( const wxString &  aName)

Find a color by name.

Definition at line 72 of file colors.cpp.

73 {
74  // look for a match in the palette itself
75  for( EDA_COLOR_T trying = BLACK; trying < NBCOLORS; trying = NextColor(trying) )
76  {
77  if( 0 == aName.CmpNoCase( ColorGetName( trying ) ) )
78  return trying;
79  }
80 
81  // Not found, no idea...
82  return UNSPECIFIED_COLOR;
83 }
EDA_COLOR_T
NOTE: EDA_COLOR_T is deprecated and is kept around for compatibility with legacy canvas.
Definition: colors.h:42
const wxChar * ColorGetName(EDA_COLOR_T aColor)
Definition: colors.h:185
Definition: colors.h:45
Number of colors.
Definition: colors.h:75
EDA_COLOR_T NextColor(EDA_COLOR_T &aColor)
Definition: colors.h:87

◆ ColorChangeHighlightFlag()

void numEval::ColorChangeHighlightFlag ( EDA_COLOR_T aColor,
bool  flag 
)
inline

Definition at line 112 of file numeric_evaluator.cpp.

115  {
116  // Can be printed as a floating point
117  snprintf( m_token.token, m_token.OutLen, "%.10g", val );
118  }

◆ ColorFindNearest() [1/2]

EDA_COLOR_T numEval::ColorFindNearest ( const wxColour &  aColor)

Find the nearest color match.

Definition at line 96 of file colors.cpp.

97 {
98  return ColorFindNearest( aColor.Red(), aColor.Green(), aColor.Blue() );
99 }
EDA_COLOR_T ColorFindNearest(const wxColour &aColor)
Find the nearest color match.
Definition: colors.cpp:96

◆ ColorFindNearest() [2/2]

EDA_COLOR_T numEval::ColorFindNearest ( int  aR,
int  aG,
int  aB 
)

Find the nearest color match.

Parameters
aRis the red component of the color to be matched (in range 0-255)
aGis the green component of the color to be matched (in range 0-255)
aBis the blue component of the color to be matched (in range 0-255)

Definition at line 102 of file colors.cpp.

103 {
104  EDA_COLOR_T candidate = BLACK;
105 
106  /* Find the 'nearest' color in the palette. This is fun. There is
107  a gazilion of metrics for the color space and no one of the
108  useful one is in the RGB color space. Who cares, this is a CAD,
109  not a photosomething...
110 
111  I hereby declare that the distance is the sum of the square of the
112  component difference. Think about the RGB color cube. Now get the
113  euclidean distance, but without the square root... for ordering
114  purposes it's the same, obviously. Also each component can't be
115  less of the target one, since I found this currently work better...
116  */
117  int nearest_distance = 255 * 255 * 3 + 1; // Can't beat this
118 
119  for( EDA_COLOR_T trying = BLACK; trying < NBCOLORS; trying = NextColor(trying) )
120  {
121  const StructColors &c = g_ColorRefs[trying];
122  int distance = (aR - c.m_Red) * (aR - c.m_Red) +
123  (aG - c.m_Green) * (aG - c.m_Green) +
124  (aB - c.m_Blue) * (aB - c.m_Blue);
125 
126  if( distance < nearest_distance && c.m_Red >= aR &&
127  c.m_Green >= aG && c.m_Blue >= aB )
128  {
129  nearest_distance = distance;
130  candidate = trying;
131  }
132  }
133 
134  return candidate;
135 }
EDA_COLOR_T
NOTE: EDA_COLOR_T is deprecated and is kept around for compatibility with legacy canvas.
Definition: colors.h:42
unsigned char m_Red
Definition: colors.h:146
unsigned char m_Green
Definition: colors.h:145
unsigned char m_Blue
Definition: colors.h:144
const StructColors g_ColorRefs[NBCOLORS]
The predefined colors used in KiCad.
Definition: colors.cpp:37
static float distance(const SFVEC2UI &a, const SFVEC2UI &b)
Definition: colors.h:45
Number of colors.
Definition: colors.h:75
EDA_COLOR_T NextColor(EDA_COLOR_T &aColor)
Definition: colors.h:87

◆ ColorFromInt()

EDA_COLOR_T numEval::ColorFromInt ( int  aColor)
inline

Checked cast. Use only when necessary (usually I/O)

Definition at line 82 of file numeric_evaluator.cpp.

85 {
86  free( m_token.token );

◆ ColorGetBase()

EDA_COLOR_T numEval::ColorGetBase ( EDA_COLOR_T  aColor)
inline

Return only the plain color part.

Definition at line 97 of file numeric_evaluator.cpp.

101 {

◆ ColorGetName()

const wxChar* numEval::ColorGetName ( EDA_COLOR_T  aColor)
inline

Definition at line 186 of file numeric_evaluator.cpp.

193  {

◆ ColorIsLight()

bool numEval::ColorIsLight ( EDA_COLOR_T  aColor)

Check if a color is light i.e.

if black would be more readable than white on it

◆ ColorMix()

EDA_COLOR_T numEval::ColorMix ( EDA_COLOR_T  aColor1,
EDA_COLOR_T  aColor2 
)

Mix two colors in some way (hopefully like a logical OR)

◆ ColorSetBrush()

void numEval::ColorSetBrush ( wxBrush *  aBrush,
EDA_COLOR_T  aColor 
)
inline

Definition at line 193 of file numeric_evaluator.cpp.

193  {
194  return ( ch == m_localeDecimalSeparator || ch == '.' || ch == ',' );
195  };
196 
197  // Lambda: get value as string, store into clToken.token and update current index.
198  auto extractNumber = [ & ]() {
199  bool haveSeparator = false;

References NUMERIC_EVALUATOR::m_localeDecimalSeparator.

◆ ColorTurnToDarkDarkGray()

void numEval::ColorTurnToDarkDarkGray ( EDA_COLOR_T aColor)
inline

Force the color part of a color to darkdarkgray.

Definition at line 107 of file numeric_evaluator.cpp.

107 {
108  if( std::isnan( val ) )
109  {
110  // Naively printing this with %g produces "nan" on some platforms

◆ Double2Str()

std::string numEval::Double2Str ( double  aValue)

Helper function Double2Str to print a float number without using scientific notation and no trailing 0 We want to avoid scientific notation in S-expr files (not easy to read) for floating numbers.

So we cannot always just use the g or the f format to print a fp number this helper function uses the f format when needed, or g when f is not well working and then removes trailing 0

Definition at line 65 of file base_units.cpp.

66 {
67  char buf[50];
68  int len;
69 
70  if( aValue != 0.0 && fabs( aValue ) <= 0.0001 )
71  {
72  // For these small values, %f works fine,
73  // and %g gives an exponent
74  len = sprintf( buf, "%.16f", aValue );
75 
76  while( --len > 0 && buf[len] == '0' )
77  buf[len] = '\0';
78 
79  if( buf[len] == '.' )
80  buf[len] = '\0';
81  else
82  ++len;
83  }
84  else
85  {
86  // For these values, %g works fine, and sometimes %f
87  // gives a bad value (try aValue = 1.222222222222, with %.16f format!)
88  len = sprintf( buf, "%.16g", aValue );
89  }
90 
91  return std::string( buf, len );
92 }

◆ DoubleValueFromString()

double numEval::DoubleValueFromString ( EDA_UNITS  aUnits,
const wxString &  aTextValue,
bool  aUseMils = false 
)

Function DoubleValueFromString converts aTextValue to a double.

Parameters
aUnitsThe units of aTextValue.
aTextValueA reference to a wxString object containing the string to convert.
aUseMilsIndicates mils should be used for imperial units (inches).
Returns
A double representing that value in internal units

◆ EnsureFileDirectoryExists()

bool numEval::EnsureFileDirectoryExists ( wxFileName *  aTargetFullFileName,
const wxString &  aBaseFilename,
REPORTER aReporter = NULL 
)

Make aTargetFullFileName absolute and create the path of this file if it doesn't yet exist.

Parameters
aTargetFullFileNamethe wxFileName containing the full path and file name to modify. The path may be absolute or relative to aBaseFilename .
aBaseFilenamea full filename. Only its path is used to set the aTargetFullFileName path.
aReportera point to a REPORTER object use to show messages (can be NULL)
Returns
true if aOutputDir already exists or was successfully created.

Definition at line 552 of file common.cpp.

555 {
556  wxString msg;
557  wxString baseFilePath = wxFileName( aBaseFilename ).GetPath();
558 
559  // make aTargetFullFileName path, which is relative to aBaseFilename path (if it is not
560  // already an absolute path) absolute:
561  if( !aTargetFullFileName->MakeAbsolute( baseFilePath ) )
562  {
563  if( aReporter )
564  {
565  msg.Printf( _( "Cannot make path \"%s\" absolute with respect to \"%s\"." ),
566  aTargetFullFileName->GetPath(),
567  baseFilePath );
568  aReporter->Report( msg, RPT_SEVERITY_ERROR );
569  }
570 
571  return false;
572  }
573 
574  // Ensure the path of aTargetFullFileName exists, and create it if needed:
575  wxString outputPath( aTargetFullFileName->GetPath() );
576 
577  if( !wxFileName::DirExists( outputPath ) )
578  {
579  if( wxMkdir( outputPath ) )
580  {
581  if( aReporter )
582  {
583  msg.Printf( _( "Output directory \"%s\" created.\n" ), outputPath );
584  aReporter->Report( msg, RPT_SEVERITY_INFO );
585  return true;
586  }
587  }
588  else
589  {
590  if( aReporter )
591  {
592  msg.Printf( _( "Cannot create output directory \"%s\".\n" ), outputPath );
593  aReporter->Report( msg, RPT_SEVERITY_ERROR );
594  }
595 
596  return false;
597  }
598  }
599 
600  return true;
601 }
virtual REPORTER & Report(const wxString &aText, SEVERITY aSeverity=RPT_SEVERITY_UNDEFINED)=0
Function Report is a pure virtual function to override in the derived object.
#define _(s)
Definition: 3d_actions.cpp:33

◆ EnsureTextCtrlWidth()

bool numEval::EnsureTextCtrlWidth ( wxTextCtrl *  aCtrl,
const wxString *  aString = NULL 
)

Set the minimum pixel width on a text control in order to make a text string be fully visible within it.

The current font within the text control is considered. The text can come either from the control or be given as an argument. If the text control is larger than needed, then nothing is done.

Parameters
aCtrlthe text control to potentially make wider.
aStringthe text that is used in sizing the control's pixel width. If NULL, then the text already within the control is used.
Returns
bool - true if the aCtrl had its size changed, else false.

Definition at line 278 of file common.cpp.

279 {
280  wxWindow* window = aCtrl->GetParent();
281 
282  if( !window )
283  window = aCtrl;
284 
285  wxString ctrlText;
286 
287  if( !aString )
288  {
289  ctrlText = aCtrl->GetValue();
290  aString = &ctrlText;
291  }
292 
293  wxSize textz = GetTextSize( *aString, window );
294  wxSize ctrlz = aCtrl->GetSize();
295 
296  if( ctrlz.GetWidth() < textz.GetWidth() + 10 )
297  {
298  ctrlz.SetWidth( textz.GetWidth() + 10 );
299  aCtrl->SetSizeHints( ctrlz );
300  return true;
301  }
302 
303  return false;
304 }
wxSize GetTextSize(const wxString &aSingleLine, wxWindow *aWindow)
Return the size of aSingleLine of text when it is rendered in aWindow using whatever font is currentl...
Definition: common.cpp:263

◆ ExpandEnvVarSubstitutions()

const wxString numEval::ExpandEnvVarSubstitutions ( const wxString &  aString)

Replace any environment variable references with their values.

Parameters
aString= a string containing (perhaps) references to env var
Returns
a string where env var are replaced by their value

Definition at line 525 of file common.cpp.

526 {
527  // wxGetenv( wchar_t* ) is not re-entrant on linux.
528  // Put a lock on multithreaded use of wxGetenv( wchar_t* ), called from wxEpandEnvVars(),
529  static std::mutex getenv_mutex;
530 
531  std::lock_guard<std::mutex> lock( getenv_mutex );
532 
533  // We reserve the right to do this another way, by providing our own member function.
534  return KIwxExpandEnvVars( aString );
535 }
wxString KIwxExpandEnvVars(const wxString &str)
Definition: common.cpp:396

◆ FetchUnitsFromString()

void numEval::FetchUnitsFromString ( const wxString &  aTextValue,
EDA_UNITS aUnits,
bool &  aUseMils 
)

Function FetchUnitsFromString writes any unit info found in the string to aUnits and aUseMils.

◆ FormatAngle()

std::string numEval::FormatAngle ( double  aAngle)

Function FormatAngle converts aAngle from board units to a string appropriate for writing to file.

Note
Internal angles for board items can be either degrees or tenths of degree on how KiCad is built.
Parameters
aAngleA angle value to convert.
Returns
A std::string object containing the converted angle.

Definition at line 552 of file base_units.cpp.

553 {
554  char temp[50];
555  int len;
556 
557  len = snprintf( temp, sizeof(temp), "%.10g", aAngle / 10.0 );
558 
559  return std::string( temp, len );
560 }

◆ FormatInternalUnits() [1/4]

std::string numEval::FormatInternalUnits ( int  aValue)

Function FormatInternalUnits converts aValue from internal units to a string appropriate for writing to file.

Note
Internal units for board items can be either deci-mils or nanometers depending on how KiCad is built.
Parameters
aValueA coordinate value to convert.
Returns
A std::string object containing the converted value.

Definition at line 523 of file base_units.cpp.

524 {
525  char buf[50];
526  double engUnits = aValue;
527  int len;
528 
529  engUnits /= IU_PER_MM;
530 
531  if( engUnits != 0.0 && fabs( engUnits ) <= 0.0001 )
532  {
533  len = snprintf( buf, sizeof(buf), "%.10f", engUnits );
534 
535  while( --len > 0 && buf[len] == '0' )
536  buf[len] = '\0';
537 
538  if( buf[len] == '.' )
539  buf[len] = '\0';
540  else
541  ++len;
542  }
543  else
544  {
545  len = snprintf( buf, sizeof(buf), "%.10g", engUnits );
546  }
547 
548  return std::string( buf, len );
549 }

◆ FormatInternalUnits() [2/4]

std::string numEval::FormatInternalUnits ( const wxPoint aPoint)

Definition at line 563 of file base_units.cpp.

564 {
565  return FormatInternalUnits( aPoint.x ) + " " + FormatInternalUnits( aPoint.y );
566 }
std::string FormatInternalUnits(int aValue)
Function FormatInternalUnits converts aValue from internal units to a string appropriate for writing ...
Definition: base_units.cpp:523

◆ FormatInternalUnits() [3/4]

std::string numEval::FormatInternalUnits ( const wxSize &  aSize)

Definition at line 575 of file base_units.cpp.

576 {
577  return FormatInternalUnits( aSize.GetWidth() ) + " " + FormatInternalUnits( aSize.GetHeight() );
578 }
std::string FormatInternalUnits(int aValue)
Function FormatInternalUnits converts aValue from internal units to a string appropriate for writing ...
Definition: base_units.cpp:523

◆ FormatInternalUnits() [4/4]

std::string numEval::FormatInternalUnits ( const VECTOR2I aPoint)

Definition at line 569 of file base_units.cpp.

570 {
571  return FormatInternalUnits( aPoint.x ) + " " + FormatInternalUnits( aPoint.y );
572 }
std::string FormatInternalUnits(int aValue)
Function FormatInternalUnits converts aValue from internal units to a string appropriate for writing ...
Definition: base_units.cpp:523

◆ From_User_Unit()

double numEval::From_User_Unit ( EDA_UNITS  aUnit,
double  aValue,
bool  aUseMils = false 
)

Return in internal units the value "val" given in a real unit such as "in", "mm" or "deg".

◆ GetAbbreviatedUnitsLabel()

wxString numEval::GetAbbreviatedUnitsLabel ( EDA_UNITS  aUnit,
bool  aUseMils = false,
EDA_DATA_TYPE  aType = EDA_DATA_TYPE::DISTANCE 
)

Get the units string for a given units type.

Parameters
aUnits- The units requested.
aUseMils- Use mils for the unit
aType- The data type of the unit (e.g. distance, area, etc.)
Returns
The human readable units string.

◆ GetAlpha()

unsigned char numEval::GetAlpha ( EDA_COLOR_T  aColor)
inline

Function GetAlpha returns the alpha blend parameter from a color index.

Definition at line 136 of file numeric_evaluator.cpp.

138  {
139  m_parseFinished = true;
140  return true;

◆ GetTextSize()

wxSize numEval::GetTextSize ( const wxString &  aSingleLine,
wxWindow *  aWindow 
)

Return the size of aSingleLine of text when it is rendered in aWindow using whatever font is currently set in that window.

Definition at line 263 of file common.cpp.

264 {
265  wxCoord width;
266  wxCoord height;
267 
268  {
269  wxClientDC dc( aWindow );
270  dc.SetFont( aWindow->GetFont() );
271  dc.GetTextExtent( aSingleLine, &width, &height );
272  }
273 
274  return wxSize( width, height );
275 }

◆ IsUTF8()

bool numEval::IsUTF8 ( const char *  aString)

Function IsUTF8 tests a c-string to see if it is UTF8 encoded.

BTW an ASCII string is a valid UTF8 string.

Definition at line 185 of file utf8.cpp.

186 {
187  int len = strlen( aString );
188 
189  if( len )
190  {
191  const unsigned char* next = (unsigned char*) aString;
192  const unsigned char* end = next + len;
193 
194  while( next < end )
195  {
196  int charLen = UTF8::uni_forward( next, NULL );
197 
198  if( charLen == 0 )
199  return false;
200 
201  next += charLen;
202  }
203 
204  // uni_forward() should find the exact end if it is truly UTF8
205  if( next > end )
206  return false;
207  }
208 
209  return true;
210 }
CITER next(CITER it)
Definition: ptree.cpp:130
#define NULL
static int uni_forward(const unsigned char *aSequence, unsigned *aResult=NULL)
Function uni_forward advances over a single UTF8 encoded multibyte character, capturing the unicode c...
Definition: utf8.cpp:73

◆ MakeColour()

wxColour numEval::MakeColour ( EDA_COLOR_T  aColor)
inline

Function MakeColour returns a wxWidgets wxColor from a KiCad color index with alpha value.

Note that alpha support is not available on every wxWidgets platform. On such platform the behavior is the same as for wxALPHA_OPAQUE and that means the alpha value has no effect and will be ignored.

Returns
wxColour - given a KiCad color index with alpha value

Definition at line 209 of file numeric_evaluator.cpp.

226  {

◆ MessageTextFromValue() [1/3]

wxString numEval::MessageTextFromValue ( EDA_UNITS  aUnits,
double  aValue,
bool  aUseMils = false,
EDA_DATA_TYPE  aType = EDA_DATA_TYPE::DISTANCE 
)

Function MessageTextFromValue is a helper to convert the double length aValue to a string in inches, millimeters, or unscaled units.

Should be used only to display a coordinate in status, but not in dialogs, files, etc., because the mantissa of the number displayed has 4 digits max for readability. The actual internal value could need up to 8 digits to be printed.

Use StringFromValue() instead where precision matters.

Parameters
aUnitsThe units to show the value in. The unit string is added to the message text.
aValueThe double value to convert.
aUseMilsConvert inch values to mils if true.
aTypeType of the unit being used (e.g. distance, area, etc.)
Returns
The converted string for display in user interface elements.

◆ MessageTextFromValue() [2/3]

wxString numEval::MessageTextFromValue ( EDA_UNITS  aUnits,
int  aValue,
bool  aUseMils = false,
EDA_DATA_TYPE  aType = EDA_DATA_TYPE::DISTANCE 
)

◆ MessageTextFromValue() [3/3]

wxString numEval::MessageTextFromValue ( EDA_UNITS  aUnits,
long long int  aValue,
bool  aUseMils = false,
EDA_DATA_TYPE  aType = EDA_DATA_TYPE::DISTANCE 
)

◆ Mils2mm()

int numEval::Mils2mm ( double  x)
inline

Convert mils to mm.

Definition at line 55 of file numeric_evaluator.cpp.

57 {

◆ Mm2mils()

int numEval::Mm2mils ( double  x)
inline

Convert mm to mils.

Definition at line 52 of file numeric_evaluator.cpp.

◆ NextColor()

EDA_COLOR_T numEval::NextColor ( EDA_COLOR_T aColor)
inline

Definition at line 88 of file numeric_evaluator.cpp.

95 {

◆ operator<<() [1/2]

std::ostream& numEval::operator<< ( std::ostream &  out,
const wxSize &  size 
)

Helper function to print the given wxSize to a stream.

Used for debugging functions like EDA_ITEM::Show and also in unit testing fixtures.

Definition at line 681 of file common.cpp.

682 {
683  out << " width=\"" << size.GetWidth() << "\" height=\"" << size.GetHeight() << "\"";
684  return out;
685 }

◆ operator<<() [2/2]

std::ostream& numEval::operator<< ( std::ostream &  out,
const wxPoint pt 
)

Helper function to print the given wxPoint to a stream.

Used for debugging functions like EDA_ITEM::Show and also in unit testing fixtures.

Definition at line 688 of file common.cpp.

689 {
690  out << " x=\"" << pt.x << "\" y=\"" << pt.y << "\"";
691  return out;
692 }

◆ Parse()

void numEval::Parse ( void *  yyp,
int  yymajor,
ParseTOKENTYPE yyminor  ParseARG_PDECL 
)

◆ ParseAlloc()

void* numEval::ParseAlloc ( void *(*)(size_t)  mallocProc)

Definition at line 342 of file numeric_evaluator.cpp.

352  {
353  // Single char tokens
354  switch( ch )
355  {
356  case '+' :retval.token = PLUS; break;
357  case '-' :retval.token = MINUS; break;
#define MINUS
#define PLUS

◆ ParseFree()

void numEval::ParseFree ( void *  p,
void(*)(void *)  freeProc 
)

Definition at line 423 of file numeric_evaluator.cpp.

◆ ParseTrace()

void numEval::ParseTrace ( FILE *  TraceFILE,
char *  zTracePrompt 
)

Definition at line 262 of file numeric_evaluator.cpp.

270  {

◆ PrePendPath()

const wxString numEval::PrePendPath ( const wxString &  aEnvVar,
const wxString &  aPriorityPath 
)

Put aPriorityPath in front of all paths in the value of aEnvVar.

Definition at line 32 of file prependpath.cpp.

33 {
34  wxPathList paths;
35 
36  paths.AddEnvList( aEnvVar );
37  paths.Insert( aPriorityPath, 0 );
38 
39  return wxJoin( paths, wxPATH_SEP[0] );
40 }

◆ ProcessExecute()

int numEval::ProcessExecute ( const wxString &  aCommandLine,
int  aFlags = wxEXEC_ASYNC,
wxProcess *  callback = NULL 
)

Run a command in a child process.

Parameters
aCommandLineThe process and any arguments to it all in a single string.
aFlagsThe same args as allowed for wxExecute()
callbackwxProcess implementing OnTerminate to be run when the child process finishes
Returns
int - pid of process, 0 in case of error (like return values of wxExecute())

Definition at line 359 of file common.cpp.

360 {
361  return wxExecute( aCommandLine, aFlags, callback );
362 }

◆ ResolveUriByEnvVars()

const wxString numEval::ResolveUriByEnvVars ( const wxString &  aUri)

Replace any environment variables in file-path uris (leaving network-path URIs alone).

Definition at line 538 of file common.cpp.

539 {
540  // URL-like URI: return as is.
541  wxURL url( aUri );
542 
543  if( url.GetError() == wxURL_NOERR )
544  return aUri;
545 
546  // Otherwise, the path points to a local file. Resolve environment
547  // variables if any.
548  return ExpandEnvVarSubstitutions( aUri );
549 }
const wxString ExpandEnvVarSubstitutions(const wxString &aString)
Replace any environment variable references with their values.
Definition: common.cpp:525

◆ SearchHelpFileFullPath()

wxString numEval::SearchHelpFileFullPath ( const SEARCH_STACK aSearchStack,
const wxString &  aBaseName 
)

Return the help file's full path.

Return the KiCad help file with path and extension. Help files can be html (.html ext) or pdf (.pdf ext) files. A <BaseName>.html file is searched and if not found, <BaseName>.pdf file is searched in the same path. If the help file for the current locale is not found, an attempt to find the English version of the help file is made. Help file is searched in directories in this order: help/<canonical name> like help/en_GB help/<short name> like help/en help/en

Parameters
aSearchStackcontains some possible base dirs that may be above the the one actually holding aBaseName. These are starting points for nested searches.
aBaseNameis the name of the help file to search for,

without extension

.

Returns
wxEmptyString is returned if aBaseName is not found, else the full path & filename.

Definition at line 67 of file searchhelpfilefullpath.cpp.

68 {
69  wxArrayString subdirs;
70  wxArrayString altsubdirs;
71  SEARCH_STACK ss = aSStack;
72 
73  // It might already be in aSStack, but why depend on other code
74  // far away when it's so easy to add it again (to our copy) as the first place to look.
75 
76  // This is CMAKE_INSTALL_PREFIX unless DEFAULT_INSTALL_PATH was defined during
77  // build configuration:
78  ss.AddPaths( wxT( DEFAULT_INSTALL_PATH ), 0 );
79 
80 #if defined(__WXMAC__)
81  ss.AddPaths( GetOSXKicadMachineDataDir() );
82  ss.AddPaths( Pgm().GetExecutablePath(), 0 );
83 
84  // OS X packages can have the help files in
85  // /Library/Application\ Support/kicad/help,
86  // and in Contents/SharedSupport/help inside the
87  // bundle.
88  // Below we account for an international subdirectory.
89  subdirs.Add( "help" );
90  altsubdirs.Add( "Contents" );
91  altsubdirs.Add( "SharedSupport" );
92  altsubdirs.Add( "help" );
93 #endif
94 
95 #if ! defined(__WXMAC__) // && defined(__linux__)
96  // This is the executable path minus the trailing bin directory used on Windows and Linux.
97  wxFileName tmp( Pgm().GetExecutablePath(), wxEmptyString );
98  wxArrayString binDirs = tmp.GetDirs();
99 
100  if( !binDirs.IsEmpty() && binDirs[ binDirs.GetCount() - 1 ].CmpNoCase( wxT( "bin" ) ) == 0 )
101  tmp.RemoveLastDir();
102 
103  ss.AddPaths( tmp.GetPath(), 0 );
104 
105  // Based on kicad-doc.bzr/CMakeLists.txt, line 20, the help files are
106  // installed into "<CMAKE_INSTALL_PREFIX>/share/doc/kicad/help" for linux.
107  // This is ${KICAD_HELP} var in that CMakeLists.txt file.
108  // Below we account for an international subdirectory.
109  subdirs.Add( "share" );
110  subdirs.Add( "doc" );
111  subdirs.Add( "kicad" );
112  subdirs.Add( "help" );
113 
114  // Based on kicad-doc.bzr/CMakeLists.txt, line 35, the help files are
115  // installed into "<CMAKE_INSTALL_PREFIX>/doc/help" for Windows.
116  // This is ${KICAD_HELP} var in that CMakeLists.txt file.
117  // Below we account for an international subdirectory.
118  altsubdirs.Add( "doc" );
119  altsubdirs.Add( "help" );
120 #endif
121 
122  // If there's a KICAD environment variable set, always use that guy's path first.
123  if( !Pgm().GetKicadEnvVariable().IsEmpty() )
124  ss.AddPaths( Pgm().GetKicadEnvVariable(), 0 );
125 
126  /* Search for a help file.
127  * we *must* find a help file.
128  * so help is searched in directories in this order:
129  * help/<canonical name> like help/en_GB
130  * help/<short name> like help/en
131  * help/en
132  */
133 
134  wxLocale* i18n = Pgm().GetLocale();
135 
136  // We try to find help file in help/<canonical name>
137  // If fails, try to find help file in help/<short canonical name>
138  // If fails, try to find help file in help/en
139  wxArrayString locale_name_dirs;
140  locale_name_dirs.Add( i18n->GetCanonicalName() ); // canonical name like fr_FR
141 
142  // wxLocale::GetName() does not return always the short name
143  locale_name_dirs.Add( i18n->GetName().BeforeLast( '_' ) ); // short canonical name like fr
144  locale_name_dirs.Add( "en" ); // default (en)
145 
146 #if defined(DEBUG) && 1
147  ss.Show( wxString( __func__ ) );
148  wxLogTrace( tracePathsAndFiles, "%s: m_help_file:'%s'", __func__, aBaseName );
149 #endif
150 
151  wxLogTrace( tracePathsAndFiles, "Checking SEARCH_STACK for file %s", aBaseName );
152 
153  // Help files can be html (.html ext) or pdf (.pdf ext) files.
154  // Therefore, <BaseName>.html file is searched and if not found,
155  // <BaseName>.pdf file is searched in the same paths
156  wxString fn;
157 
158  for( unsigned ii = 0; ii < locale_name_dirs.GetCount(); ii++ )
159  {
160  subdirs.Add( locale_name_dirs[ii] );
161  altsubdirs.Add( locale_name_dirs[ii] );
162 
163  fn = FindFileInSearchPaths( ss, aBaseName + wxT( ".html" ), &altsubdirs );
164 
165  if( !fn.IsEmpty() )
166  {
167  // Prepend URI protocol since we will open in a browser
168  fn = wxT( "file://" ) + fn;
169  break;
170  }
171 
172  fn = FindFileInSearchPaths( ss, aBaseName + wxT( ".pdf" ), &altsubdirs );
173 
174  if( !fn.IsEmpty() )
175  break;
176 
177  fn = FindFileInSearchPaths( ss, aBaseName + wxT( ".html" ), &subdirs );
178 
179  if( !fn.IsEmpty() )
180  {
181  // Prepend URI protocol since we will open in a browser
182  fn = wxT( "file://" ) + fn;
183  break;
184  }
185 
186  fn = FindFileInSearchPaths( ss, aBaseName + wxT( ".pdf" ), &subdirs );
187 
188  if( !fn.IsEmpty() )
189  break;
190 
191  subdirs.RemoveAt( subdirs.GetCount() - 1 );
192  altsubdirs.RemoveAt( altsubdirs.GetCount() - 1 );
193  }
194 
195  return fn;
196 }
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:103
const wxChar *const tracePathsAndFiles
Flag to enable path and file name debug output.
SEARCH_STACK looks for files in a number of places.
Definition: search_stack.h:41
wxString FindFileInSearchPaths(const SEARCH_STACK &aStack, const wxString &aFilename, const wxArrayString *aSubdirs)
Function FindFileInSearchPaths looks in "this" for aFilename, but first modifies every search path by...
void AddPaths(const wxString &aPaths, int aIndex=-1)
Function AddPaths insert or append path(s)

Referenced by COMMON_CONTROL::ShowHelp().

◆ SelectReferenceNumber()

void numEval::SelectReferenceNumber ( wxTextEntry *  aTextEntry)

Select the number (or "?") in a reference for ease of editing.

Definition at line 307 of file common.cpp.

308 {
309  wxString ref = aTextEntry->GetValue();
310 
311  if( ref.find_first_of( '?' ) != ref.npos )
312  {
313  aTextEntry->SetSelection( ref.find_first_of( '?' ), ref.find_last_of( '?' ) + 1 );
314  }
315  else
316  {
317  wxString num = ref;
318 
319  while( !num.IsEmpty() && ( !isdigit( num.Last() ) || !isdigit( num.GetChar( 0 ) ) ) )
320  {
321  if( !isdigit( num.Last() ) )
322  num.RemoveLast();
323 
324  if( !isdigit( num.GetChar ( 0 ) ) )
325  num = num.Right( num.Length() - 1);
326  }
327 
328  aTextEntry->SetSelection( ref.Find( num ), ref.Find( num ) + num.Length() );
329 
330  if( num.IsEmpty() )
331  aTextEntry->SetSelection( -1, -1 );
332  }
333 }

◆ SetAlpha()

void numEval::SetAlpha ( EDA_COLOR_T aColor,
unsigned char  aBlend 
)
inline

Function SetAlpha ORs in the alpha blend parameter in to a color index.

Definition at line 124 of file numeric_evaluator.cpp.

129 {
130  // Feed parser token after token until end of input.

◆ StringFromValue()

wxString numEval::StringFromValue ( EDA_UNITS  aUnit,
double  aValue,
bool  aAddUnitSymbol = false,
bool  aUseMils = false 
)

Function StringFromValue returns the string from aValue according to units (inch, mm ...) for display, and the initial unit for value.

For readability, the mantissa has 3 or more digits (max 8 digits), the trailing 0 are removed if the mantissa has more than 3 digits and some trailing 0 This function should be used to display values in dialogs because a value entered in mm (for instance 2.0 mm) could need up to 8 digits mantissa if displayed in inch to avoid truncation or rounding made just by the printf function. otherwise the actual value is rounded when read from dialog and converted in internal units, and therefore modified.

Parameters
aUnit= display units (INCHES, MILLIMETRE ..)
aValue= value in Internal_Unit
aAddUnitSymbol= true to add symbol unit to the string value
aUseMilsIndicates mils should be used for imperial units (inches).
Returns
A wxString object containing value and optionally the symbol unit (like 2.000 mm)

◆ StripTrailingZeros()

void numEval::StripTrailingZeros ( wxString &  aStringValue,
unsigned  aTrailingZeroAllowed = 1 
)

Function StripTrailingZeros Remove trailing 0 from a string containing a converted float number.

The trailing 0 are removed if the mantissa has more than aTrailingZeroAllowed digits and some trailing 0

Definition at line 202 of file base_units.cpp.

203 {
204  struct lconv * lc = localeconv();
205  char sep = lc->decimal_point[0];
206  unsigned sep_pos = aStringValue.Find( sep );
207 
208  if( sep_pos > 0 )
209  {
210  // We want to keep at least aTrailingZeroAllowed digits after the separator
211  unsigned min_len = sep_pos + aTrailingZeroAllowed + 1;
212 
213  while( aStringValue.Len() > min_len )
214  {
215  if( aStringValue.Last() == '0' )
216  aStringValue.RemoveLast();
217  else
218  break;
219  }
220  }
221 }

◆ StrPrintf() [1/2]

int numEval::StrPrintf ( std::string *  aResult,
const char *  aFormat,
  ... 
)

Function StrPrintf is like sprintf() but the output is appended to a std::string instead of to a character array.

Parameters
aResultis the string to append to, previous text is not clear()ed.
aFormatis a printf() style format string.
Returns
int - the count of bytes appended to the result string, no terminating nul is included.

Definition at line 74 of file richio.cpp.

75 {
76  va_list args;
77 
78  va_start( args, format );
79  int ret = vprint( result, format, args );
80  va_end( args );
81 
82  return ret;
83 }
static int vprint(std::string *result, const char *format, va_list ap)
Definition: richio.cpp:38

Referenced by fmt_mask(), GITHUB_PLUGIN::FootprintDelete(), GITHUB_PLUGIN::FootprintSave(), PCB_IO::format(), FormatProbeItem(), GenCADLayerName(), GenCADLayerNameFlipped(), PCB_PARSER::init(), GENDRILL_WRITER_BASE::layerName(), KICAD_MANAGER_FRAME::OnImportEagleFiles(), SCH_EDIT_FRAME::OpenProjectFiles(), PCB_EDIT_FRAME::OpenProjectFiles(), GITHUB_GETLIBLIST::remoteGetJSON(), GITHUB_PLUGIN::remoteGetZip(), ReplaceIllegalFileNameChars(), SCH_EDIT_FRAME::SendCrossProbeNetName(), PCB_EDIT_FRAME::SendCrossProbeNetName(), and CVPCB_MAINFRAME::SendMessageToEESCHEMA().

◆ StrPrintf() [2/2]

std::string numEval::StrPrintf ( const char *  format,
  ... 
)

Function StrPrintf is like sprintf() but the output is returned in a std::string instead of to a character array.

Parameters
formatis a printf() style format string.
Returns
std::string - the result of the sprintf().

Definition at line 86 of file richio.cpp.

87 {
88  std::string ret;
89  va_list args;
90 
91  va_start( args, format );
92  int ignore = vprint( &ret, format, args );
93  (void) ignore;
94  va_end( args );
95 
96  return ret;
97 }
static int vprint(std::string *result, const char *format, va_list ap)
Definition: richio.cpp:38

◆ TimestampDir()

long long numEval::TimestampDir ( const wxString &  aDirPath,
const wxString &  aFilespec 
)

A copy of ConvertFileTimeToWx() because wxWidgets left it as a static function private to src/common/filename.cpp.

TimestampDir

This routine offers SIGNIFICANT performance benefits over using wxWidgets to gather timestamps from matching files in a directory.

Parameters
aDirPaththe directory to search
aFilespeca (wildcarded) file spec to match against
Returns
a hash of the last-mod-dates of all matching files in the directory

Definition at line 916 of file common.cpp.

917 {
918  long long timestamp = 0;
919 
920 #if defined( __WIN32__ )
921  // Win32 version.
922  // Save time by not searching for each path twice: once in wxDir.GetNext() and once in
923  // wxFileName.GetModificationTime(). Also cuts out wxWidgets' string-matching and case
924  // conversion by staying on the MSW side of things.
925  std::wstring filespec( aDirPath.t_str() );
926  filespec += '\\';
927  filespec += aFilespec.t_str();
928 
929  WIN32_FIND_DATA findData;
930  wxDateTime lastModDate;
931 
932  HANDLE fileHandle = ::FindFirstFile( filespec.data(), &findData );
933 
934  if( fileHandle != INVALID_HANDLE_VALUE )
935  {
936  do
937  {
938  ConvertFileTimeToWx( &lastModDate, findData.ftLastWriteTime );
939  timestamp += lastModDate.GetValue().GetValue();
940  }
941  while ( FindNextFile( fileHandle, &findData ) != 0 );
942  }
943 
944  FindClose( fileHandle );
945 #else
946  // POSIX version.
947  // Save time by not converting between encodings -- do everything on the file-system side.
948  std::string filespec( aFilespec.fn_str() );
949  std::string dir_path( aDirPath.fn_str() );
950 
951  DIR* dir = opendir( dir_path.c_str() );
952 
953  if( dir )
954  {
955  for( dirent* dir_entry = readdir( dir ); dir_entry; dir_entry = readdir( dir ) )
956  {
957  if( !matchWild( filespec.c_str(), dir_entry->d_name, true ) )
958  continue;
959 
960  std::string entry_path = dir_path + '/' + dir_entry->d_name;
961  struct stat entry_stat;
962 
963  if( wxCRT_Lstat( entry_path.c_str(), &entry_stat ) == 0 )
964  {
965  // Timestamp the source file, not the symlink
966  if( S_ISLNK( entry_stat.st_mode ) ) // wxFILE_EXISTS_SYMLINK
967  {
968  char buffer[ PATH_MAX + 1 ];
969  ssize_t pathLen = readlink( entry_path.c_str(), buffer, PATH_MAX );
970 
971  if( pathLen > 0 )
972  {
973  struct stat linked_stat;
974  buffer[ pathLen ] = '\0';
975  entry_path = dir_path + buffer;
976 
977  if( wxCRT_Lstat( entry_path.c_str(), &linked_stat ) == 0 )
978  {
979  entry_stat = linked_stat;
980  }
981  else
982  {
983  // if we couldn't lstat the linked file we'll have to just use
984  // the symbolic link info
985  }
986  }
987  }
988 
989  if( S_ISREG( entry_stat.st_mode ) ) // wxFileExists()
990  timestamp += entry_stat.st_mtime * 1000;
991  }
992  else
993  {
994  // if we couldn't lstat the file itself all we can do is use the name
995  timestamp += (signed) std::hash<std::string>{}( std::string( dir_entry->d_name ) );
996  }
997  }
998 
999  closedir( dir );
1000  }
1001 #endif
1002 
1003  return timestamp;
1004 }
bool matchWild(const char *pat, const char *text, bool dot_special)
A copy of wxMatchWild(), which wxWidgets attributes to Douglas A.
Definition: common.cpp:774

◆ To_User_Unit()

double numEval::To_User_Unit ( EDA_UNITS  aUnit,
double  aValue,
bool  aUseMils = false 
)

Function To_User_Unit convert aValue in internal units to the appropriate user units defined by aUnit.

Returns
The converted value, in double
Parameters
aUnitThe units to convert aValue to.
aValueThe value in internal units to convert.
aUseMilsIndicates mils should be used for imperial units (inches).

◆ ValueFromString()

long long int numEval::ValueFromString ( EDA_UNITS  aUnits,
const wxString &  aTextValue,
bool  aUseMils = false 
)

Function ValueFromString converts aTextValue in aUnits to internal units used by the application.

Parameters
aUnitsThe units of aTextValue.
aTextValueA reference to a wxString object containing the string to convert.
aUseMilsIndicates mils should be used for imperial units (inches).
Returns
The string from Value, according to units (inch, mm ...) for display,

◆ wxStringSplit()

void numEval::wxStringSplit ( const wxString &  aText,
wxArrayString &  aStrings,
wxChar  aSplitter 
)

Split aString to a string list separated at aSplitter.

Parameters
aTextis the text to split
aStringswill contain the splitted lines
aSplitteris the 'split' character

Definition at line 336 of file common.cpp.

337 {
338  wxString tmp;
339 
340  for( unsigned ii = 0; ii < aText.Length(); ii++ )
341  {
342  if( aText[ii] == aSplitter )
343  {
344  aStrings.Add( tmp );
345  tmp.Clear();
346  }
347 
348  else
349  tmp << aText[ii];
350  }
351 
352  if( !tmp.IsEmpty() )
353  {
354  aStrings.Add( tmp );
355  }
356 }

◆ yy_accept()

static void numEval::yy_accept ( yyParser yypParser)
static

Definition at line 832 of file numeric_evaluator.cpp.

◆ yy_destructor()

static void numEval::yy_destructor ( yyParser yypParser,
YYCODETYPE  yymajor,
YYMINORTYPE yypminor 
)
static

Definition at line 364 of file numeric_evaluator.cpp.

364  :m_parseError = true; break; /* invalid character */
365  }
366  m_token.pos++;
367  }
368 
369  return retval;
370 }
371 
372 void NUMERIC_EVALUATOR::SetVar( const wxString& aString, double aValue )
373 {
374  m_varMap[ aString ] = aValue;
375 }
376 
377 double NUMERIC_EVALUATOR::GetVar( const wxString& aString )
378 {
379  if( m_varMap[ aString ] )
380  return m_varMap[ aString ];
381  else
382  return 0.0;
383 }
std::map< wxString, double > m_varMap
void SetVar(const wxString &aString, double aValue)
double GetVar(const wxString &aString)

◆ yy_find_reduce_action()

static int numEval::yy_find_reduce_action ( int  stateno,
YYCODETYPE  iLookAhead 
)
static

Definition at line 519 of file numeric_evaluator.cpp.

◆ yy_find_shift_action()

static int numEval::yy_find_shift_action ( yyParser pParser,
YYCODETYPE  iLookAhead 
)
static

Definition at line 454 of file numeric_evaluator.cpp.

◆ yy_parse_failed()

static void numEval::yy_parse_failed ( yyParser yypParser)
static

Definition at line 796 of file numeric_evaluator.cpp.

◆ yy_pop_parser_stack()

static int numEval::yy_pop_parser_stack ( yyParser pParser)
static

Definition at line 393 of file numeric_evaluator.cpp.

◆ yy_reduce()

static void numEval::yy_reduce ( yyParser yypParser,
int  yyruleno 
)
static

Definition at line 641 of file numeric_evaluator.cpp.

◆ yy_shift()

static void numEval::yy_shift ( yyParser yypParser,
int  yyNewState,
int  yyMajor,
YYMINORTYPE yypMinor 
)
static

Definition at line 566 of file numeric_evaluator.cpp.

◆ yy_syntax_error()

static void numEval::yy_syntax_error ( yyParser yypParser,
int  yymajor,
YYMINORTYPE  yyminor 
)
static

Definition at line 815 of file numeric_evaluator.cpp.

◆ yyStackOverflow()

static void numEval::yyStackOverflow ( yyParser yypParser,
YYMINORTYPE yypMinor 
)
static

Definition at line 549 of file numeric_evaluator.cpp.

Variable Documentation

◆ g_ColorRefs

const StructColors numEval::g_ColorRefs[NBCOLORS]

list of existing Colors

list of existing Colors

Please: if you change a value, remember these values are carefully chosen to have good results in Pcbnew, that uses the ORed value of basic colors when displaying superimposed objects This list must have exactly NBCOLORS items

Definition at line 37 of file colors.cpp.

◆ lhs

◆ niluuid

KIID numEval::niluuid

◆ nrhs

unsigned char numEval::nrhs

Definition at line 614 of file numeric_evaluator.cpp.

◆ yy_action

const YYACTIONTYPE numEval::yy_action[]
static
Initial value:
= {
24, 9, 8, 23, 6, 7, 25, 28, 17, 16,
17, 4, 5, 4, 5, 3, 26, 22, 2, 22,
2, 9, 8, 23, 6, 7, 47, 17, 15, 19,
4, 5, 21, 20, 47, 26, 22, 2, 27, 10,
9, 8, 23, 6, 7, 46, 1, 18, 10, 23,
6, 7, 47, 47, 14, 13, 12, 11,
}

Definition at line 147 of file numeric_evaluator.cpp.

◆ yy_default

const YYACTIONTYPE numEval::yy_default[]
static
Initial value:
= {
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 39, 37, 36, 41, 40, 38, 29, 44,
43, 42, 34, 35, 33, 32, 31, 30,
}

Definition at line 178 of file numeric_evaluator.cpp.

◆ yy_lookahead

const YYCODETYPE numEval::yy_lookahead[]
static
Initial value:
= {
3, 4, 5, 6, 7, 8, 9, 0, 1, 17,
1, 4, 5, 4, 5, 2, 9, 10, 11, 10,
11, 4, 5, 6, 7, 8, 18, 1, 17, 12,
4, 5, 17, 17, 18, 9, 10, 11, 16, 17,
4, 5, 6, 7, 8, 14, 15, 16, 17, 6,
7, 8, 18, 18, 17, 17, 17, 17,
}

Definition at line 155 of file numeric_evaluator.cpp.

◆ yy_reduce_ofst

const signed char numEval::yy_reduce_ofst[]
static
Initial value:
= {
31, 22, 40, 39, 38, 37, 16, 15, 11, -8,
}

Definition at line 175 of file numeric_evaluator.cpp.

◆ yy_shift_ofst

const signed char numEval::yy_shift_ofst[]
static
Initial value:
= {
26, 7, 9, 9, 9, 9, 9, 9, 9, 9,
-3, 17, 36, 43, 43, 43, 43, 13,
}

Definition at line 167 of file numeric_evaluator.cpp.

◆ yyRuleInfo

const { ... } numEval::yyRuleInfo[]
Initial value:
= {
{ 14, 1 },
{ 15, 1 },
{ 15, 2 },
{ 16, 1 },
{ 16, 2 },
{ 16, 2 },
{ 17, 1 },
{ 17, 2 },
{ 17, 2 },
{ 17, 2 },
{ 17, 1 },
{ 17, 3 },
{ 17, 3 },
{ 17, 3 },
{ 17, 3 },
{ 17, 3 },
{ 17, 3 },
}

◆ yyRuleName

const char* const numEval::yyRuleName[]
static
Initial value:
= {
"main ::= in",
"in ::= stmt",
"in ::= in stmt",
"stmt ::= ENDS",
"stmt ::= expr ENDS",
"stmt ::= expr SEMCOL",
"expr ::= VALUE",
"expr ::= expr UNIT",
"expr ::= MINUS expr",
"expr ::= PLUS expr",
"expr ::= VAR",
"expr ::= VAR ASSIGN expr",
"expr ::= expr PLUS expr",
"expr ::= expr MINUS expr",
"expr ::= expr MULT expr",
"expr ::= expr DIVIDE expr",
"expr ::= PARENL expr PARENR",
}

Definition at line 285 of file numeric_evaluator.cpp.

◆ yyTokenName

const char* const numEval::yyTokenName[]
static
Initial value:
= {
"$", "VAR", "ASSIGN", "SEMCOL",
"PLUS", "MINUS", "UNIT", "DIVIDE",
"MULT", "ENDS", "VALUE", "PARENL",
"PARENR", "error", "main", "in",
"stmt", "expr",
}

Definition at line 273 of file numeric_evaluator.cpp.

◆ yyTraceFILE

FILE* numEval::yyTraceFILE = 0
static

Definition at line 240 of file numeric_evaluator.cpp.

◆ yyTracePrompt

char* numEval::yyTracePrompt = 0
static

Definition at line 241 of file numeric_evaluator.cpp.

◆ yyzerominor

const YYMINORTYPE numEval::yyzerominor = { 0 }
static

Definition at line 84 of file numeric_evaluator.cpp.