79 lines
1.6 KiB
Awk
79 lines
1.6 KiB
Awk
function append(line) {
|
|
if (doc) {
|
|
doc = doc "\n"
|
|
}
|
|
doc = doc line
|
|
}
|
|
|
|
function output(name) {
|
|
print name
|
|
print ""
|
|
print doc
|
|
exit
|
|
}
|
|
|
|
function reset() {
|
|
doc = ""
|
|
}
|
|
|
|
BEGIN {
|
|
RE_ANY = "(.*)"
|
|
RE_NAME = "([_A-Za-z][_0-9A-Za-z]*)"
|
|
RE_SPACE = "[[:space:]]"
|
|
RE_SPACES = RE_SPACE "*"
|
|
|
|
RE_BEGIN = "^"
|
|
RE_END = RE_SPACES "$"
|
|
RE_FUNC = RE_SPACES "\\(" RE_SPACES "\\)" RE_SPACES "{"
|
|
|
|
RE_ALIAS = RE_BEGIN "#\\(" RE_SPACES RE_NAME RE_END
|
|
RE_DOC = RE_BEGIN "#" RE_SPACE RE_ANY RE_END
|
|
RE_FUNCTION = RE_BEGIN RE_NAME RE_FUNC RE_END
|
|
RE_MODULE = RE_BEGIN "#." RE_SPACES RE_NAME RE_END
|
|
RE_SET = RE_BEGIN RE_NAME "=.*" RE_END
|
|
RE_SHEBANG = RE_BEGIN "#!" RE_SPACES RE_ANY RE_END
|
|
|
|
alias = 0
|
|
reset()
|
|
module = 0
|
|
}
|
|
|
|
{
|
|
# doc
|
|
if (match($0, RE_SHEBANG, m)) {
|
|
append(m[1])
|
|
} else if (match($0, RE_DOC, m)) {
|
|
append(m[1])
|
|
} else if (match($0, RE_ALIAS, m)) {
|
|
append(m[1])
|
|
if (m[1] == target) {
|
|
alias = 1
|
|
}
|
|
# not doc
|
|
} else if (match($0, RE_MODULE, m)) {
|
|
reset()
|
|
if (m[1] == target) {
|
|
module = 1
|
|
}
|
|
} else if (match($0, RE_SET, m)) {
|
|
if (m[1] == target) {
|
|
output(m[1])
|
|
} else {
|
|
reset()
|
|
}
|
|
} else if (match($0, RE_FUNCTION, m)) {
|
|
if (alias) {
|
|
output(target)
|
|
} else if (m[1] == target) {
|
|
output(target)
|
|
} else {
|
|
reset()
|
|
}
|
|
} else {
|
|
if (module) {
|
|
output(target)
|
|
} else {
|
|
reset()
|
|
}
|
|
}
|
|
}
|