|
|
//Run this block to set up, then get yersel down to line 194 ish
|
|
|
(
|
|
|
~processLink = { |node|
|
|
|
var l = node.text;
|
|
|
|
|
|
var result = case
|
|
|
{"^http".matchRegexp(l)} {l}
|
|
|
{"^Classes/Buffer".matchRegexp(l)} {"|buffer|"}
|
|
|
{"^Classes/Fluid.*".matchRegexp(l)} {":fluid-obj:`"++l.findRegexp("^Classes/(Fluid.*)").last[1]++"`"}
|
|
|
{"^Guides/Fluid.*".matchRegexp(l)} {":fluid-topic:`"++l.findRegexp("^Guides/(Fluid.*)").last[1]++"`"};
|
|
|
result ?? {result = "`"++l++"`"};
|
|
|
result
|
|
|
};
|
|
|
|
|
|
~processList = {|node,indent|
|
|
|
var ind = "".catList(indent.collect{" "});
|
|
|
var result = "";
|
|
|
node.children.do{|i|
|
|
|
var itemText = "".catList(i.findChild(\PROSE).children.collect{|child| child.text});
|
|
|
result = result ++ ind ++ "* " ++ itemText ++ "\n";
|
|
|
};
|
|
|
result
|
|
|
};
|
|
|
|
|
|
~processTable = { |node, indent|
|
|
|
var ind = "".catList(indent.collect{" "});
|
|
|
var result;
|
|
|
var longestCell = 0;
|
|
|
var rows = node.children.collect{|row|
|
|
|
row.children.collect{|col|
|
|
|
var cell = "".catList(col.findChild(\PROSE).children.collect{|child|child.text});
|
|
|
longestCell = longestCell.max(cell.size);
|
|
|
cell
|
|
|
}
|
|
|
};
|
|
|
|
|
|
var divider = "".catList(longestCell.collect{"="});
|
|
|
var nCols = rows.collect{|col| col.size}.maxItem;
|
|
|
var head = nCols.collect{divider}.join(" ");
|
|
|
result = ind ++ head ++ "\n";
|
|
|
rows.do{|r| result = result ++ ind ++ r.join(" ") ++ "\n"};
|
|
|
result = result ++ ind ++ head ++ "\n";
|
|
|
result
|
|
|
};
|
|
|
|
|
|
~rstify = { |node, indent = 0|
|
|
|
var result;
|
|
|
var ind = indent.collect(" ").join("");
|
|
|
switch(node.id,
|
|
|
\CODE, {result = "`"++node.text++"`"},
|
|
|
\STRONG, {result = "**"++node.text++"**"},
|
|
|
\EMPHASIS, {result = "*"++node.text++"*" },
|
|
|
\LIST, {result = ~processList.value(node,indent + 1)},
|
|
|
\TEXT, {result = node.text },
|
|
|
\LINK, {result = ~processLink.value(node)},
|
|
|
\TABLE, {result = ~processTable.value(node,indent + 1)},
|
|
|
\PROSE, {
|
|
|
if(node.children.size > 0)
|
|
|
{ result = ind ++ node.children.collect{|n|~rstify.value(n,indent)}.join("")}
|
|
|
{ result = ""}
|
|
|
}
|
|
|
);
|
|
|
result
|
|
|
};
|
|
|
|
|
|
~boilerplate = {|stream|
|
|
|
stream << "# Part of the Fluid Corpus Manipulation Project (http://www.flucoma.org/)\n"
|
|
|
<< "# Copyright 2017-2019 University of Huddersfield.\n"
|
|
|
<< "# Licensed under the BSD-3 License.\n"
|
|
|
<< "# See license.md file in the project root for full license information.\n"
|
|
|
<< "# This project has received funding from the European Research Council (ERC)\n"
|
|
|
<< "# under the European Union’s Horizon 2020 research and innovation programme\n"
|
|
|
<< "# (grant agreement No 725899).\n"
|
|
|
<< "---\n";
|
|
|
};
|
|
|
|
|
|
~metadata = { |d, stream|
|
|
|
var title = d.findChild(\TITLE);
|
|
|
var digest = d.findChild(\SUMMARY);
|
|
|
var categories = d.findChild(\CATEGORIES);
|
|
|
var related = d.findChild(\RELATED);
|
|
|
stream << "digest: " << digest.text << "\n";
|
|
|
stream << "sc-categries: ";
|
|
|
categories !? {
|
|
|
var c = categories.children.collect{|child| child.text};
|
|
|
stream << c.join(", ");
|
|
|
};
|
|
|
stream << "\n";
|
|
|
stream << "sc-related: ";
|
|
|
related !? {
|
|
|
var r = related.children.collect{|child| child.text};
|
|
|
stream << r.join(", ");
|
|
|
};
|
|
|
stream << "\n";
|
|
|
stream << "see-also: \n"; //placeholder
|
|
|
};
|
|
|
|
|
|
~objectdesc = { |d, stream|
|
|
|
var desc = d.findChild(\BODY).findChild(\DESCRIPTION);
|
|
|
stream << "description: |\n";
|
|
|
desc.children.do{|p| //expecting each child to be a prose block?
|
|
|
stream << ~rstify.value(p,2);
|
|
|
stream << "\n\n";
|
|
|
};
|
|
|
// stream << "\n";
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
~params = { |d, stream|
|
|
|
var args = d.findChild(\ARGUMENTS);
|
|
|
var valid = args.children.collect{|a| a.text.asSymbol}.difference([\server,\in,\trig,\action]).size;
|
|
|
if(valid > 0)
|
|
|
{
|
|
|
stream << "parameters:\n";
|
|
|
args.children.do{|a|
|
|
|
var p = a.findChild(\PROSE);
|
|
|
[\server,\in,\trig,\action].indexOf(a.text.asSymbol) ?? {
|
|
|
stream << " " << a.text << ":\n description: |\n";
|
|
|
stream << ~rstify.value(p,6);
|
|
|
stream << "\n";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
|
|
|
~messages = { |d, stream|
|
|
|
var messageNodes = d.findChild(\BODY).findChild(\INSTANCEMETHODS);
|
|
|
messageNodes !? {
|
|
|
stream << "messages: \n";
|
|
|
messageNodes.children.do {|method|
|
|
|
var names = method.findChild(\METHODNAMES);
|
|
|
var messageDesc = method.findChild(\METHODBODY) !? (_.findChild(\PROSE));
|
|
|
var messageArgs = method.findChild(\METHODBODY) !? (_.findChild(\ARGUMENTS));
|
|
|
|
|
|
names !? {
|
|
|
names.children.collect{|child|child.text}.do{|name|
|
|
|
stream << " " << name << ":\n";
|
|
|
stream << " " << "description: |\n";
|
|
|
stream << ~rstify.value(messageDesc,6) << "\n";
|
|
|
stream << " args:\n";
|
|
|
messageArgs !? {
|
|
|
messageArgs.children.do{|a|
|
|
|
var argName = a.text;
|
|
|
stream << " - name: " << argName << "\n";
|
|
|
stream << " " << "description: |\n";
|
|
|
stream << ~rstify.value(a.findChild(\PROSE),8) << "\n";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
|
|
|
~locateParamsMethod = { |class|
|
|
|
var method = case
|
|
|
{class.superclasses.indexOf(FluidManipulationClient).notNil}{"*new"}
|
|
|
{"^FluidBuf.*".matchRegexp(class.name.asString)}{"*process"}
|
|
|
{"^Fluid.*".matchRegexp(class.name.asString)}{
|
|
|
case
|
|
|
{class.respondsTo(\ar)}{"*ar"}
|
|
|
{class.respondsTo(\kr)}{"*kr"}
|
|
|
};
|
|
|
SCDoc.getMethodDoc(class.name, method).findChild(\METHODBODY);
|
|
|
};
|
|
|
|
|
|
~examplecode = { |d,stream|
|
|
|
var eg = d.findChild(\BODY).findChild(\EXAMPLES);
|
|
|
|
|
|
eg !? {
|
|
|
eg.children.do{|node|
|
|
|
switch(node.id,
|
|
|
\CODEBLOCK,{ stream << "::\n " << node.text << "\n" },
|
|
|
\PROSE,{ stream << ~rstify.value(node) << "\n" }
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
|
|
|
~schelp2yaml={|class,outpath|
|
|
|
var className = class.name;
|
|
|
var fileName = className.asString.findRegexp("Fluid(.*)").last[1];
|
|
|
var helpSourcePath = SCDoc.documents["Classes"+/+className].fullPath;
|
|
|
var f = File.open(outpath+/+fileName++".yaml","w");
|
|
|
var d = SCDoc.parseFileFull(helpSourcePath);
|
|
|
var m = ~locateParamsMethod.value(class);
|
|
|
~boilerplate.value(f);
|
|
|
~metadata.value(d.findChild(\HEADER),f);
|
|
|
~objectdesc.value(d,f);
|
|
|
~params.value(m,f);
|
|
|
~messages.value(d,f);
|
|
|
// ~examplecode.value(d,f);
|
|
|
f.close;
|
|
|
("Written" + outpath+/+fileName++".yaml").postln;
|
|
|
};
|
|
|
)
|
|
|
//Conviniences for batch-getting our classes by species
|
|
|
~allFluid = Class.allClasses.select({|x| "^Fluid.*".matchRegexp(x.name.asString)})
|
|
|
~fluidnrt = ~allFluid.select{|x| "FluidBuf.*".matchRegexp(x.name.asString)};
|
|
|
~manip = ~allFluid.select{|x| x.superclasses.indexOf(FluidManipulationClient) != nil} ;
|
|
|
~rt = ~allFluid.difference(~fluidnrt).difference(~manip);
|
|
|
|
|
|
//Make yaml files like this
|
|
|
~schelp2yaml.value(FluidKMeans,"/tmp") ;
|
|
|
|
|
|
(
|
|
|
[FluidKDTree,
|
|
|
FluidKMeans,
|
|
|
FluidKNNClassifier,
|
|
|
FluidKNNRegressor,
|
|
|
FluidNormalize,
|
|
|
FluidStandardize,
|
|
|
FluidPCA].do{|class| ~schelp2yaml.value(class,"/tmp") };
|
|
|
)
|
|
|
|
|
|
//The Misssing Ones:
|
|
|
(
|
|
|
[
|
|
|
FluidBufFlatten,
|
|
|
// FluidNNDSVD,
|
|
|
FluidBufNMFCross,
|
|
|
FluidAudioTransport,
|
|
|
FluidBufAudioTransport,
|
|
|
FluidDataSet,
|
|
|
FluidLabelSet,
|
|
|
FluidKDTree,
|
|
|
FluidKMeans,
|
|
|
FluidKNNClassifier,
|
|
|
FluidKNNRegressor,
|
|
|
FluidNormalize,
|
|
|
FluidStandardize,
|
|
|
FluidPCA,
|
|
|
FluidMDS,
|
|
|
FluidDataSetQuery,
|
|
|
FluidMLPRegressor
|
|
|
].do{|class| ~schelp2yaml.value(class,"/tmp") };
|
|
|
)
|
|
|
|
|
|
(
|
|
|
[FluidDataSet,FluidDataSetQuery,FluidKDTree,FluidKMeans,FluidKNNClassifier,FluidKNNRegressor,FluidMDS,FluidMLPRegressor,FluidNormalize,FluidPCA,FluidStandardize].do{|class| class.postln;~schelp2yaml.value(class,"/tmp") };
|
|
|
)
|