int StyleSheetParser::Parse(StyleSheetNode* node, Stream* _stream) { int rule_count = 0; line_number = 0; stream = _stream; stream_file_name = stream->GetSourceURL().GetURL().Replace("|", ":"); // Look for more styles while data is available while (FillBuffer()) { String style_names; while (FindToken(style_names, "{", true)) { // Read the attributes PropertyDictionary properties; if (!ReadProperties(properties)) { continue; } StringList style_name_list; StringUtilities::ExpandString(style_name_list, style_names); // Add style nodes to the root of the tree for (size_t i = 0; i < style_name_list.size(); i++) ImportProperties(node, style_name_list[i], properties, rule_count); rule_count++; } } return rule_count; }
const TCHAR* ImportObjectProperties( FImportObjectParams& InParams ) { FDefaultPropertiesContextSupplier Supplier; if ( InParams.LineNumber != INDEX_NONE ) { if ( InParams.SubobjectRoot == NULL ) { Supplier.PackageName = InParams.ObjectStruct->GetOwnerClass() ? InParams.ObjectStruct->GetOwnerClass()->GetOutermost()->GetName() : InParams.ObjectStruct->GetOutermost()->GetName(); Supplier.ClassName = InParams.ObjectStruct->GetOwnerClass() ? InParams.ObjectStruct->GetOwnerClass()->GetName() : FName(NAME_None).ToString(); Supplier.CurrentLine = InParams.LineNumber; ContextSupplier = &Supplier; //-V506 } else { if ( ContextSupplier != NULL ) { ContextSupplier->CurrentLine = InParams.LineNumber; } } InParams.Warn->SetContext(ContextSupplier); } if ( InParams.bShouldCallEditChange && InParams.SubobjectOuter != NULL ) { InParams.SubobjectOuter->PreEditChange(NULL); } FObjectInstancingGraph* CurrentInstanceGraph = InParams.InInstanceGraph; if ( InParams.SubobjectRoot != NULL && InParams.SubobjectRoot != UObject::StaticClass()->GetDefaultObject() ) { if ( CurrentInstanceGraph == NULL ) { CurrentInstanceGraph = new FObjectInstancingGraph; } CurrentInstanceGraph->SetDestinationRoot(InParams.SubobjectRoot); } FObjectInstancingGraph TempGraph; FObjectInstancingGraph& InstanceGraph = CurrentInstanceGraph ? *CurrentInstanceGraph : TempGraph; // Parse the object properties. const TCHAR* NewSourceText = ImportProperties( InParams.DestData, InParams.SourceText, InParams.ObjectStruct, InParams.SubobjectRoot, InParams.SubobjectOuter, InParams.Warn, InParams.Depth, InstanceGraph, InParams.ActorRemapper ); if ( InParams.SubobjectOuter != NULL ) { check(InParams.SubobjectRoot); // Update the object properties to point to the newly imported component objects. // Templates inside classes never need to have components instanced. if ( !InParams.SubobjectRoot->HasAnyFlags(RF_ClassDefaultObject) ) { UObject* SubobjectArchetype = InParams.SubobjectOuter->GetArchetype(); InParams.ObjectStruct->InstanceSubobjectTemplates(InParams.DestData, SubobjectArchetype, SubobjectArchetype->GetClass(), InParams.SubobjectOuter, &InstanceGraph); } if ( InParams.bShouldCallEditChange ) { // notify the object that it has just been imported InParams.SubobjectOuter->PostEditImport(); // notify the object that it has been edited InParams.SubobjectOuter->PostEditChange(); } InParams.SubobjectRoot->CheckDefaultSubobjects(); } if ( InParams.LineNumber != INDEX_NONE ) { if ( ContextSupplier == &Supplier ) { ContextSupplier = NULL; InParams.Warn->SetContext(NULL); } } // if we created the instance graph, delete it now if ( CurrentInstanceGraph != NULL && InParams.InInstanceGraph == NULL ) { delete CurrentInstanceGraph; CurrentInstanceGraph = NULL; } return NewSourceText; }