UNPKG

jungle-organic

Version:

The organic programming framework

63 lines (47 loc) 2.05 kB
namespace Jungle { export interface IOLinkSpec{ ports:IO.PortSpec[]; linkFunciton:(a,b)=>void; links:string[] } export class LinkForm extends BaseForm{ parse(formObj:FormSpec):{iospec:IOLinkSpec, contextspec:ContextSpec} { var ctxdeclare = formObj.x || ""; this.preparator = formObj.p || function(x){}; var links = formObj.link || []; var linkf = formObj.lf || function(a, b){} var ports = formObj.port || []; var context = {}; var specialInHook; var specialOutHook; var portlabels:IO.PortSpec[] = []; var labels = {}; var contextprops:PropertySpec[] = [] //create port intermediate representation var linkPortRegex = /^(_?)([a-zA-Z](?:\w*[a-zA-Z])?)(_?)$/ for (let i = 0; i < ports.length; i++) { let pmatch = ports[i].match(linkPortRegex); if(pmatch){ let inp = pmatch[1], label = pmatch[2], out = pmatch[3]; if(inp){ portlabels.push({label:label, direction:IO.Orientation.INPUT}) } if(out){ portlabels.push({label:label, direction:IO.Orientation.OUTPUT}) } } } //Forbid the use of underscores var linkPropRegex = /^[a-zA-Z](?:\w*[a-zA-Z])?$/; for (var k in formObj){ if(GForm.RFormProps.indexOf(k) > -1) continue; if(k.match(linkPropRegex)){ contextprops.push({key:k, type:CTXPropertyTypes.NORMAL, value:formObj[k]}) }else{ throw new Error("Invalid property for link context, use ports") } } return {iospec:{ports:portlabels, links:links, linkFunciton:linkf}, contextspec:{properties:contextprops, declaration:ctxdeclare}} } } }