120 std::vector<std::reference_wrapper<const SIM_MODEL_PIN>> pins =
m_model.GetPins();
125 std::sort( pins.begin(), pins.end(),
128 return StrNumCmp( lhs.symbolPinNumber, rhs.symbolPinNumber, true ) < 0;
131 for(
const std::reference_wrapper<const SIM_MODEL_PIN>&
pin : pins )
133 std::string symbolPinNumber(
pin.get().symbolPinNumber.ToUTF8() );
135 if( symbolPinNumber !=
"" )
140 result.append( fmt::format(
"{}={}", symbolPinNumber,
pin.get().modelPinName ) );
185 tao::pegtl::string_input<> in( aParams,
"Sim.Params field" );
186 std::unique_ptr<tao::pegtl::parse_tree::node> root;
198 catch(
const tao::pegtl::parse_error& e )
203 std::string paramName;
204 bool isPrimaryValueSet =
false;
206 auto unescapeQuoted =
207 [](
const std::string& aString ) -> std::string
210 result.reserve( aString.size() );
212 for(
size_t i = 0; i < aString.size(); ++i )
214 if( aString[i] ==
'\\' && i + 1 < aString.size()
215 && ( aString[i + 1] ==
'"' || aString[i + 1] ==
'\\' ) )
217 result.push_back( aString[++i] );
221 result.push_back( aString[i] );
228 for(
const auto& node : root->children )
232 paramName = node->string();
236 wxASSERT( paramName !=
"" );
240 if(
m_model.GetParam( 0 ).Matches( paramName ) )
241 isPrimaryValueSet =
true;
245 wxASSERT( paramName !=
"" );
249 if(
m_model.GetParam( 0 ).Matches( paramName ) )
250 isPrimaryValueSet =
true;
254 std::string token = node->string();
264 return !
m_model.HasPrimaryValue() ||
m_model.HasAutofill() || isPrimaryValueSet;
273 tao::pegtl::string_input<> in( aPins,
"Sim.Pins field" );
274 std::unique_ptr<tao::pegtl::parse_tree::node> root;
284 for(
const auto& node : root->children )
286 std::string symbolPinNumber = node->children.at( 0 )->string();
287 std::string modelPinName = node->children.at( 1 )->string();
289 m_model.AssignSymbolPinNumberToModelPin( modelPinName, symbolPinNumber );
292 catch(
const tao::pegtl::parse_error& e )
wxString result
Test unit parsing edge cases and error handling.