Files
crosslangextras/Tesses.CrossLang.Documentation/src/main.tcross

83 lines
1.8 KiB
Plaintext

var fns = [];
func Crawl(c,name)
{
if(TypeOf(c) == "Dictionary")
{
each(var item : Dictionary.Items(c))
{
Crawl(item.Value,name.Count == 0 ? item.Key : $"{name}.{item.Key}");
}
}
else if(TypeOf(c) == "ExternalMethod")
{
fns.Add({
Name = name,
Documentation = c.Documentation,
Arguments = c.Arguments
});
}
}
func main(args)
{
var md = "";
if(args.Count == 2)
{
var strm = FS.Local.OpenFile(args[1],"rb");
var package = VM.LoadExecutable(strm);
strm.Close();
md = $"# {package.Name} Documentation\n";
each(var fn : package.Functions)
{
var fnName = "";
for(var i = 0; i < fn.FunctionNameParts.Count; i++)
{
if(i > 0) fnName += ".";
fnName += fn.FunctionNameParts[i];
}
fns.Add({
Arguments=package.Chunks[i].Arguments,
Documentation=fn.Documentation,
Name=fnName
});
}
}
else
{
md = "# CrossLang Runtime Documentation\n";
var dict = {};
var rEnv = VM.CreateEnvironment(dict);
rEnv.RegisterEverything();
Crawl(dict,"");
}
each(var item : fns)
{
md += "```go\n";
if(item.Documentation.Count > 0)
{
md += "/^ ";
md += item.Documentation.Replace(",","");
md += " ^/\n";
}
md += "func ";
md += item.Name;
md += "(";
for(var i = 0; i < item.Arguments.Count; i++)
{
if(i > 0) md += ", ";
md += item.Arguments[i];
}
md += ");\n";
md += "```\n\n";
}
Console.WriteLine(md);
}