95 lines
2.9 KiB
JavaScript
95 lines
2.9 KiB
JavaScript
|
// 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 => {
|
||
|
doc += elem.textContent.replace(/(\s\s+)/gm, " ");
|
||
|
});
|
||
|
}
|
||
|
|
||
|
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,
|
||
|
};
|
||
|
|
||
|
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);
|
||
|
|
||
|
if (rest[0] == ')') {
|
||
|
snippet += ')';
|
||
|
} else {
|
||
|
snippet += "${1:"
|
||
|
|
||
|
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 += "\\\"";
|
||
|
continue;
|
||
|
} else if (char == ',' && paren_depth == 1) {
|
||
|
snippet += "}, ${" + arg_idx + ':';
|
||
|
arg_idx += 1;
|
||
|
skip_space = true;
|
||
|
continue;
|
||
|
} else if (char == ' ' && skip_space) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
snippet += char;
|
||
|
skip_space = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return ` .{
|
||
|
.name = "@${builtin.name}",
|
||
|
.signature = "${builtin.code.replaceAll('"', "\\\"")}",
|
||
|
.snippet = "${snippet}",
|
||
|
.documentation =
|
||
|
\\\\${builtin.documentation.split('\n').join("\n \\\\") + '\n'} },`;
|
||
|
}).join('\n') + "\n};\n"
|
||
|
);
|