2020-11-04 22:39:24 +00:00
|
|
|
// Run this in a Chrome developer console.
|
|
|
|
const builtins = $$("a#toc-Builtin-Functions+ul > li").map(element => {
|
|
|
|
const anchor = element.querySelector("a").getAttribute("href");
|
|
|
|
const code = $(`${anchor}+pre > code`).textContent.replace(/(\r\n|\n|\r)/gm, "");
|
|
|
|
|
|
|
|
var curr_paragraph = $(`${anchor}+pre+p`);
|
|
|
|
var doc = "";
|
|
|
|
var first = true;
|
|
|
|
|
|
|
|
while (curr_paragraph.nodeName == "P" || curr_paragraph.nodeName == "PRE") {
|
|
|
|
if (curr_paragraph.innerHTML == "See also:")
|
|
|
|
break;
|
|
|
|
|
|
|
|
if (!first) {
|
|
|
|
doc += "\n";
|
|
|
|
} else {
|
|
|
|
first = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (curr_paragraph.nodeName == "PRE") {
|
|
|
|
doc += "```zig\n";
|
|
|
|
curr_paragraph.childNodes[0].childNodes.forEach(elem => {
|
|
|
|
doc += elem.textContent;
|
|
|
|
});
|
|
|
|
doc += "\n```";
|
|
|
|
} else {
|
|
|
|
curr_paragraph.childNodes.forEach(elem => {
|
2021-07-09 16:45:00 +01:00
|
|
|
if (elem.nodeName == "CODE") {
|
|
|
|
console.log(elem.innerHTML);
|
|
|
|
doc += "`" + elem.innerHTML.replaceAll(/<span .+?>(.+?)<\/span>/gm, "$1") + "`";
|
|
|
|
} else
|
|
|
|
doc += elem.textContent.replace(/(\s\s+)/gm, " ");
|
2020-11-04 22:39:24 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
curr_paragraph = curr_paragraph.nextElementSibling;
|
|
|
|
}
|
|
|
|
return { "name": anchor.substring(1), "code": code, "documentation": doc };
|
|
|
|
});
|
|
|
|
|
|
|
|
// Take output and paste into a .zig file
|
|
|
|
console.log(
|
|
|
|
`const Builtin = struct {
|
|
|
|
name: []const u8,
|
|
|
|
signature: []const u8,
|
|
|
|
snippet: []const u8,
|
|
|
|
documentation: []const u8,
|
2021-04-02 18:49:01 +01:00
|
|
|
arguments: []const []const u8,
|
2020-11-04 22:39:24 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
pub const builtins = [_]Builtin{` +
|
|
|
|
'\n' + builtins.map(builtin => {
|
|
|
|
// Make a snippet
|
|
|
|
const first_paren_idx = builtin.code.indexOf('(');
|
|
|
|
var snippet = builtin.code.substr(0, first_paren_idx + 1);
|
|
|
|
var rest = builtin.code.substr(first_paren_idx + 1);
|
2021-04-02 18:49:01 +01:00
|
|
|
var args = [];
|
2020-11-04 22:39:24 +00:00
|
|
|
|
|
|
|
if (rest[0] == ')') {
|
|
|
|
snippet += ')';
|
|
|
|
} else {
|
|
|
|
snippet += "${1:"
|
2021-04-02 18:49:01 +01:00
|
|
|
args.push("");
|
2020-11-04 22:39:24 +00:00
|
|
|
|
|
|
|
var arg_idx = 2;
|
|
|
|
var paren_depth = 1;
|
|
|
|
var skip_space = false;
|
|
|
|
for (const char of rest) {
|
|
|
|
if (char == '(') {
|
|
|
|
paren_depth += 1;
|
|
|
|
} else if (char == ')') {
|
|
|
|
paren_depth -= 1;
|
|
|
|
if (paren_depth == 0) {
|
|
|
|
snippet += "})";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
} else if (char == '"') {
|
|
|
|
snippet += "\\\"";
|
2021-04-02 18:49:01 +01:00
|
|
|
args[args.length - 1] += "\\\"";
|
2020-11-04 22:39:24 +00:00
|
|
|
continue;
|
|
|
|
} else if (char == ',' && paren_depth == 1) {
|
|
|
|
snippet += "}, ${" + arg_idx + ':';
|
|
|
|
arg_idx += 1;
|
2021-04-02 18:49:01 +01:00
|
|
|
args.push("");
|
2020-11-04 22:39:24 +00:00
|
|
|
skip_space = true;
|
|
|
|
continue;
|
|
|
|
} else if (char == ' ' && skip_space) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
snippet += char;
|
2021-04-02 18:49:01 +01:00
|
|
|
args[args.length - 1] += char;
|
2020-11-04 22:39:24 +00:00
|
|
|
skip_space = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return ` .{
|
|
|
|
.name = "@${builtin.name}",
|
|
|
|
.signature = "${builtin.code.replaceAll('"', "\\\"")}",
|
|
|
|
.snippet = "${snippet}",
|
|
|
|
.documentation =
|
2021-04-02 18:49:01 +01:00
|
|
|
\\\\${builtin.documentation.split('\n').join("\n \\\\")}
|
|
|
|
,
|
|
|
|
.arguments = &.{${args.map(x => "\n \"" + x + "\"").join(",") + ((args.length > 0) ? ",\n " : "")}},
|
|
|
|
},`;
|
2020-11-04 22:39:24 +00:00
|
|
|
}).join('\n') + "\n};\n"
|
|
|
|
);
|