wxArrayString ObjectBase::GetPropertyAsArrayString(const wxString& pname) { PProperty property = GetProperty( pname ); if (property) return property->GetValueAsArrayString(); else return wxArrayString(); }
bool TemplateParser::ParseForEach() { // Whitespaces at the very start are ignored ignore_whitespaces(); // parsing the property if (GetNextToken() == TOK_PROPERTY) { wxString propname = ParsePropertyName(); wxString inner_template = ExtractInnerTemplate(); PProperty property = m_obj->GetProperty(propname); wxString propvalue = property->GetValue(); // Property value must be an string using ',' as separator. // The template will be generated nesting as many times as // tokens were found in the property value. if (property->GetType() == PT_INTLIST || property->GetType() == PT_UINTLIST) { // For doing that we will use wxStringTokenizer class from wxWidgets wxStringTokenizer tkz( propvalue, wxT(",")); int i = 0; while (tkz.HasMoreTokens()) { wxString token; token = tkz.GetNextToken(); token.Trim(true); token.Trim(false); // Parsing the internal template { wxString code; PTemplateParser parser = CreateParser( this, inner_template ); parser->SetPredefined( token, wxString::Format( wxT("%i"), i++ ) ); code = parser->ParseTemplate(); m_out << wxT("\n") << code; } } } else if (property->GetType() == PT_STRINGLIST) { wxArrayString array = property->GetValueAsArrayString(); for ( unsigned int i = 0 ; i < array.Count(); i++ ) { wxString code; PTemplateParser parser = CreateParser(this,inner_template); parser->SetPredefined( ValueToCode( PT_WXSTRING_I18N, array[i] ), wxString::Format( wxT("%i"), i ) ); code = parser->ParseTemplate(); m_out << wxT("\n") << code; } } else wxLogError(wxT("Property type not compatible with \"foreach\" macro")); } return true; }