mirror of https://github.com/YosysHQ/yosys.git
parent
a955c42d6c
commit
11fe4d0862
|
@ -765,63 +765,6 @@ struct HelpPass : public Pass {
|
||||||
log(" help <celltype>+ .... print verilog code for given cell type\n");
|
log(" help <celltype>+ .... print verilog code for given cell type\n");
|
||||||
log("\n");
|
log("\n");
|
||||||
}
|
}
|
||||||
void escape_tex(std::string &tex)
|
|
||||||
{
|
|
||||||
for (size_t pos = 0; (pos = tex.find('_', pos)) != std::string::npos; pos += 2)
|
|
||||||
tex.replace(pos, 1, "\\_");
|
|
||||||
for (size_t pos = 0; (pos = tex.find('$', pos)) != std::string::npos; pos += 2)
|
|
||||||
tex.replace(pos, 1, "\\$");
|
|
||||||
}
|
|
||||||
void write_tex(FILE *f, std::string cmd, std::string title, std::string text)
|
|
||||||
{
|
|
||||||
size_t begin = text.find_first_not_of("\n"), end = text.find_last_not_of("\n");
|
|
||||||
if (begin != std::string::npos && end != std::string::npos && begin < end)
|
|
||||||
text = text.substr(begin, end-begin+1);
|
|
||||||
std::string cmd_unescaped = cmd;
|
|
||||||
escape_tex(cmd);
|
|
||||||
escape_tex(title);
|
|
||||||
fprintf(f, "\\section{%s -- %s}\n", cmd.c_str(), title.c_str());
|
|
||||||
fprintf(f, "\\label{cmd:%s}\n", cmd_unescaped.c_str());
|
|
||||||
fprintf(f, "\\begin{lstlisting}[numbers=left,frame=single]\n");
|
|
||||||
fprintf(f, "%s\n\\end{lstlisting}\n\n", text.c_str());
|
|
||||||
}
|
|
||||||
void escape_html(std::string &html)
|
|
||||||
{
|
|
||||||
size_t pos = 0;
|
|
||||||
while ((pos = html.find_first_of("<>&", pos)) != std::string::npos)
|
|
||||||
switch (html[pos]) {
|
|
||||||
case '<':
|
|
||||||
html.replace(pos, 1, "<");
|
|
||||||
pos += 4;
|
|
||||||
break;
|
|
||||||
case '>':
|
|
||||||
html.replace(pos, 1, ">");
|
|
||||||
pos += 4;
|
|
||||||
break;
|
|
||||||
case '&':
|
|
||||||
html.replace(pos, 1, "&");
|
|
||||||
pos += 5;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void write_html(FILE *idxf, std::string cmd, std::string title, std::string text)
|
|
||||||
{
|
|
||||||
FILE *f = fopen(stringf("cmd_%s.in", cmd.c_str()).c_str(), "wt");
|
|
||||||
fprintf(idxf, "<li><a href=\"cmd_%s.html\"> ", cmd.c_str());
|
|
||||||
|
|
||||||
escape_html(cmd);
|
|
||||||
escape_html(title);
|
|
||||||
escape_html(text);
|
|
||||||
|
|
||||||
fprintf(idxf, "%s</a> <span>%s</span></a>\n", cmd.c_str(), title.c_str());
|
|
||||||
|
|
||||||
fprintf(f, "@cmd_header %s@\n", cmd.c_str());
|
|
||||||
fprintf(f, "<h1>%s - %s</h1>\n", cmd.c_str(), title.c_str());
|
|
||||||
fprintf(f, "<pre>%s</pre>\n", text.c_str());
|
|
||||||
fprintf(f, "@footer@\n");
|
|
||||||
|
|
||||||
fclose(f);
|
|
||||||
}
|
|
||||||
void write_rst(std::string cmd, std::string title, std::string text)
|
void write_rst(std::string cmd, std::string title, std::string text)
|
||||||
{
|
{
|
||||||
FILE *f = fopen(stringf("docs/source/cmd/%s.rst", cmd.c_str()).c_str(), "wt");
|
FILE *f = fopen(stringf("docs/source/cmd/%s.rst", cmd.c_str()).c_str(), "wt");
|
||||||
|
@ -958,24 +901,6 @@ struct HelpPass : public Pass {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// this option is undocumented as it is for internal use only
|
// this option is undocumented as it is for internal use only
|
||||||
else if (args[1] == "-write-tex-command-reference-manual") {
|
|
||||||
FILE *f = fopen("command-reference-manual.tex", "wt");
|
|
||||||
fprintf(f, "%% Generated using the yosys 'help -write-tex-command-reference-manual' command.\n\n");
|
|
||||||
for (auto &it : pass_register) {
|
|
||||||
std::ostringstream buf;
|
|
||||||
log_streams.push_back(&buf);
|
|
||||||
it.second->help();
|
|
||||||
if (it.second->experimental_flag) {
|
|
||||||
log("\n");
|
|
||||||
log("WARNING: THE '%s' COMMAND IS EXPERIMENTAL.\n", it.first.c_str());
|
|
||||||
log("\n");
|
|
||||||
}
|
|
||||||
log_streams.pop_back();
|
|
||||||
write_tex(f, it.first, it.second->short_help, buf.str());
|
|
||||||
}
|
|
||||||
fclose(f);
|
|
||||||
}
|
|
||||||
// this option is undocumented as it is for internal use only
|
|
||||||
else if (args[1] == "-write-rst-command-reference-manual") {
|
else if (args[1] == "-write-rst-command-reference-manual") {
|
||||||
for (auto &it : pass_register) {
|
for (auto &it : pass_register) {
|
||||||
std::ostringstream buf;
|
std::ostringstream buf;
|
||||||
|
@ -990,23 +915,6 @@ struct HelpPass : public Pass {
|
||||||
write_rst(it.first, it.second->short_help, buf.str());
|
write_rst(it.first, it.second->short_help, buf.str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// this option is undocumented as it is for internal use only
|
|
||||||
else if (args[1] == "-write-web-command-reference-manual") {
|
|
||||||
FILE *f = fopen("templates/cmd_index.in", "wt");
|
|
||||||
for (auto &it : pass_register) {
|
|
||||||
std::ostringstream buf;
|
|
||||||
log_streams.push_back(&buf);
|
|
||||||
it.second->help();
|
|
||||||
if (it.second->experimental_flag) {
|
|
||||||
log("\n");
|
|
||||||
log("WARNING: THE '%s' COMMAND IS EXPERIMENTAL.\n", it.first.c_str());
|
|
||||||
log("\n");
|
|
||||||
}
|
|
||||||
log_streams.pop_back();
|
|
||||||
write_html(f, it.first, it.second->short_help, buf.str());
|
|
||||||
}
|
|
||||||
fclose(f);
|
|
||||||
}
|
|
||||||
else if (pass_register.count(args[1])) {
|
else if (pass_register.count(args[1])) {
|
||||||
pass_register.at(args[1])->help();
|
pass_register.at(args[1])->help();
|
||||||
if (pass_register.at(args[1])->experimental_flag) {
|
if (pass_register.at(args[1])->experimental_flag) {
|
||||||
|
|
Loading…
Reference in New Issue