makedoc.awk
来自「gcc-you can use this code to learn somet」· AWK 代码 · 共 70 行
AWK
70 行
# Take apart bits of HTML and puts them back together again in new and# fascinating ways. Copyright (C) 2002 Free Software Foundation, Inc.# Contributed by Phil Edwards <pme@gcc.gnu.org>. Simple two-state automaton# inspired by Richard Henderson's gcc/mkmap-symver.awk.# 'file' is the name of the file on stdin# 'title' is the text to print at the start of the listBEGIN { state = "looking"; entries = 0; printf (" <li>%s\n", title); printf (" <ul>\n");}# Searching for the little table of contents at the top.state == "looking" && /^<h1>Contents/ { state = "entries"; next;}# Ignore everything else up to that point.state == "looking" { next;}# An entry in the table of contents. Pull that line apart.state == "entries" && /<li>/ { extract_info($0); next;}# End of the list. Don't bother reading the rest of the file. (It could# also contain more <li>'s, so that would be incorrect as well as wasteful.)state == "entries" && /^<\/ul>/ { exit;}END { for (i = 0; i < entries; i++) printf (" %s\n", entry[i]); printf (" </ul>\n </li>\n\n");}function extract_info(line) { # thistarget will be things like "#5" or "elsewhere.html" match(line,"href=\".*\""); thistarget = substr(line,RSTART+6,RLENGTH-7); # take apart the filename split(file,X,"/"); if (thistarget ~ /^#/) { # local name, use directory and filename target = file thistarget } else { # different file, only use directory target = X[1] "/" thistarget } # visible text gsub("</a></li>","",line); start = index(line,"\">") + 2; thistext = substr(line,start); # Assemble and store the HTML for later output. entry[entries++] = "<li><a href=\"" target "\">" thistext "</a></li>"}# vim:sw=2
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?