packages feed

hsc3-db-0.12: sclang/Build.sc

+ Symbol {
	toUpper {
		^this.asString.toUpper.asSymbol;
	}
}

+ Object {
	findMethodR { |n|
		/* ^this.class.findMethod(n); */
		var m = this.findMethod(n);
		var p = this.superclass;
		if (m.notNil,{
			^m;
		},{
			if (p.notNil,{
				^p.findMethodR(n);
			},{
				^nil
			});
		});
	}
	supportsRate { |r|
		^(this.class.findMethodR(r) != nil);
	}
	supportedRates {
		^['ar','kr','dr','ir','new'].select({|r| this.supportsRate(r)});
	}
	inputNames { |r|
		var n = this.class.findMethodR(r).argNames;
		var x = ['this','mul','add','numChannels','numChans'];
		^n.reject({|e| x.includes(e)});
	}
	inputDefault { |r,nm|
		var m = this.class.findMethodR(r);
		var n = m.argNames;
		var i = n.detectIndex({|e| e == nm});
		^m.prototypeFrame[i];
	}
	inputDefaults { |r|
		var n = this.inputNames(r);
		^n.collect({|e| e.inputDefault});
	}
	numberOfOutputs { |r|
		var nc_i = this.numberOfChannelsInput;
		if(nc_i==nil) {
			var n = this.new.init.size;
			if(n==0) {^['fixed',1]} {^['fixed',n]};
		} {
			^['variable',nc_i]
		}
	}
	ugenDB {
		var nm = this.name.asString;
		var rr = this.supportedRates;
		var rd = (audio: 'AR',control: 'KR',scalar: 'IR',demand: 'DR');
		var dr = rd.at(this.new.rate);
		var ft = this.isFilter.asArray;
		var r = rr[0];
		var n_a = this.inputNames(r);
		var nc_i = this.numberOfChannelsInput;
		//var n = if(nc_i==nil) {^n_a} {n_a.removeAt(nc_i);^n_a};
		var n = n_a;
		var ix_r = this.inputReordering;
		var ix_f = {|ix| if (ix_r == nil) {ix} {ix_r[ix]}};
		var i_e = this.enumerationInputs;
		var nn = n.collect({|e,ix| [[ix,ix_f.value(ix)]
                                   ,e.asString
			                       ,this.inputDefault(r,e)
		                           ,i_e.at(ix)]});
		var mi = this.flattensMCE;
		var o = this.numberOfOutputs;
		var h_m = SCDoc.documents.at("Classes/"++nm);
		var h = if(h_m==nil) {"No summary"} {h_m.summary};
		^[nm,rr,dr,ft,nn,mi,o,h]
	}
	ugenDBHaskell {
		var db = this.ugenDB;
		var nm = db[0].asCompileString;
		var rr = db[1].reject({|e| e == 'new'}).collect({|e| e.toUpper});
		var dr = db[2].asString;
		var ft = if (db[3] == []) {
			"Nothing"
		} {
			"(Just" + db[3].asString ++ ")"
		};
		var ii = db[4].collect({|e|
			var ix = "(" ++ e[0][0].asString ++ "," ++ e[0][1].asString ++ ")";
			var nm = e[1];
			var df = if (e[2] == nil) {0.0} {e[2]};
			var en = if (e[3] == nil) {
				"Nothing"
			} {
				"(Just" + e[3].asString.asCompileString ++ ")"
			};
			"I" + ix + nm.asCompileString + "(" ++ df ++ ")" + en;
		}).join(",");
		var mi = if (db[5] == nil)
		            {"Nothing"}
		            {"(Just" + db[5].asString ++ ")"};
		var o_b = ('fixed':'Left','variable':'Right').at(db[6][0]);
		var o_n = db[6][1].asString;
		var o = "(" ++ o_b + o_n ++ ")";
		var h = db[7].asCompileString;
		^"U" + nm + rr.asString + dr + ft + "[" + ii + "]" + mi + o + h;
	}
}

+ Object {
	allSubClassesOf {
		var u = this.subclasses;
		if(u.size == 0)
		{^[]}
		{^u ++ u.collect({|e| e.allSubClassesOf}).flatten}
	}
}