25#include <fmt/format.h>
36#include <pcb_calculator_datafile_lexer.h>
41using namespace PCBCALC_DATA_T;
46 return PCB_CALCULATOR_DATAFILE_LEXER::TokenName( aTok );
67 datafile_parser.
Parse( datafile );
73 wxString msg = ioe.
What();
76 msg +=
_(
"Data file error.");
94 auto datafile = std::make_unique<PCB_CALCULATOR_DATAFILE>( &
m_RegulatorList );
100 int nestlevel = datafile->WriteHeader( &formatter );
102 datafile->Format( &formatter, nestlevel );
105 formatter.
Print( nestlevel,
")\n" );
125 "normal",
"3terminal"
132 aFormatter->
Print( nestlevel++,
"(datafile\n");
133 aFormatter->
Print( nestlevel++,
"(version 2)\n" );
134 aFormatter->
Print( nestlevel++,
"(date %s)\n",
136 aFormatter->
Print( nestlevel++,
"(tool %s)\n",
137 aFormatter->
Quotew(
Pgm().App().GetAppName() +
144 int aNestLevel )
const
154 aFormatter->
Print( aNestLevel + 1,
"%s", fmt::format(
"({} {:g})\n",
getTokenName( T_reg_vref_min ),
156 aFormatter->
Print( aNestLevel + 1,
"%s", fmt::format(
"({} {:g})\n",
getTokenName( T_reg_vref_typ ),
158 aFormatter->
Print( aNestLevel + 1,
"%s", fmt::format(
"({} {:g})\n",
getTokenName( T_reg_vref_max ),
163 aFormatter->
Print( aNestLevel + 1,
"%s", fmt::format(
"({} {:g})\n",
getTokenName( T_reg_iadj_typ ),
165 aFormatter->
Print( aNestLevel + 1,
"%s", fmt::format(
"({} {:g})\n",
getTokenName( T_reg_iadj_max ),
171 aFormatter->
Print( aNestLevel,
")\n" );
174 aFormatter->
Print( --aNestLevel,
")\n" );
180 aParser->
Parse(
this );
185 PCB_CALCULATOR_DATAFILE_LEXER( aReader )
191 const wxString& aSource ) :
192 PCB_CALCULATOR_DATAFILE_LEXER( aLine, aSource )
201 while( ( token = NextTok() ) != T_EOF)
203 if( token == T_LEFT )
207 if( token == T_regulators )
221 double vrefmin, vreftyp, vrefmax = 0.0;
222 double iadjtyp, iadjmax = 0.0;
224 auto parseToken = [&]()
229 if( token != T_NUMBER )
230 Expecting( T_NUMBER );
232 wxString
text = CurText();
233 text.Trim(
true ).Trim(
false );
235 text.ToCDouble( &val );
242 while( ( token = NextTok() ) != T_RIGHT )
247 if( token == T_LEFT )
250 if( token == T_regulator )
263 while( ( token = NextTok() ) != T_RIGHT )
268 if( token == T_LEFT )
275 vreftyp = parseToken();
280 case T_reg_vref_min: vrefmin = parseToken();
break;
281 case T_reg_vref_typ: vreftyp = parseToken();
break;
282 case T_reg_vref_max: vrefmax = parseToken();
break;
286 iadjtyp = parseToken();
290 case T_reg_iadj_typ: iadjtyp = parseToken();
break;
291 case T_reg_iadj_max: iadjmax = parseToken();
break;
298 else if( strcasecmp( CurText(),
regtype_str[1] ) == 0 )
301 Unexpected( CurText() );
307 Unexpected( CurText() );
312 if( !
name.IsEmpty() )
315 type, iadjtyp, iadjmax );
wxString GetBuildVersion()
Get the full KiCad version string.
A LINE_READER that reads from an open file.
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
virtual const wxString What() const
A composite of Problem() and Where()
An abstract class from which implementation specific LINE_READERs may be derived to read single lines...
wxChoice * m_choiceRegulatorSelector
bool m_RegulatorListChanged
REGULATOR_LIST m_RegulatorList
const wxString GetDataFilename()
void SelectLastSelectedRegulator()
If m_lastSelectedRegulatorName is empty, just calls RegulatorPageUpdate()
Parser for PCB_CALCULATOR_DATAFILE.
PCB_CALCULATOR_DATAFILE_PARSER(LINE_READER *aReader)
void Parse(PCB_CALCULATOR_DATAFILE *aDataList)
void ParseRegulatorDescr(PCB_CALCULATOR_DATAFILE *aDataList)
PCB_CALCULATOR_DATAFILE handles data to calculate regulators parameters.
void Parse(PCB_CALCULATOR_DATAFILE_PARSER *aParser)
void Format(OUTPUTFORMATTER *aFormatter, int aNestLevel) const
int WriteHeader(OUTPUTFORMATTER *aFormatter) const
PCB_CALCULATOR_DATAFILE(REGULATOR_LIST *aList)
wxArrayString GetRegList() const
void Add(REGULATOR_DATA *aItem)
std::vector< REGULATOR_DATA * > m_List
Contains structures for storage of regulator data.
static const char * regtype_str[]
static const char * getTokenName(T aTok)
static const char * getTokenName(T aTok)
This file contains miscellaneous commonly used macros and functions.
PGM_BASE & Pgm()
The global program "get" accessor.
wxString From_UTF8(const char *cstring)
wxString GetISO8601CurrentDateTime()