func parseSignalGraph(text, context string) (job *PasteJob, ok bool) { xmlsg := backend.XmlSignalGraph{} _, xmlerr := xmlsg.Read([]byte(text)) if xmlerr != nil { return } for _, l := range xmlsg.Libraries { _, err := global.LibraryMgr().Access(l.Name) if err != nil { fmt.Printf("parseSignalGraph error: referenced library %s not accessible.\n", l.Name) return } } var njob *NewElementJob njob = NewElementJobNew(context, eSignalGraph) job = PasteJobNew() job.context = context job.newElements = append(job.newElements, njob) for _, xmln := range xmlsg.ProcessingNodes { _, validNodeType := freesp.GetNodeTypeByName(xmln.NType) if !validNodeType { fmt.Printf("parseSignalGraph error: node type %s not registered.\n", xmln.NType) return } njob = NewElementJobNew(context, eNode) njob.input[iNodeName] = xmln.NName njob.input[iNodeTypeSelect] = xmln.NType pj := PasteJobNew() pj.newElements = append(pj.newElements, njob) job.children = append(job.children, pj) } for _, xmln := range xmlsg.InputNodes { if len(xmln.OutPort) == 0 { fmt.Printf("parseSignalGraph error: input node has no outports.\n") return } njob = NewElementJobNew(context, eInputNode) njob.input[iInputNodeName] = xmln.NName njob.input[iInputTypeSelect] = xmln.OutPort[0].PType // TODO pj := PasteJobNew() pj.newElements = append(pj.newElements, njob) job.children = append(job.children, pj) } for _, xmln := range xmlsg.OutputNodes { if len(xmln.InPort) == 0 { fmt.Printf("parseSignalGraph error: output node has no inports.\n") return } njob = NewElementJobNew(context, eOutputNode) njob.input[iOutputNodeName] = xmln.NName njob.input[iOutputTypeSelect] = xmln.InPort[0].PType // TODO pj := PasteJobNew() pj.newElements = append(pj.newElements, njob) job.children = append(job.children, pj) } ok = true return }