Inital Commit
This commit is contained in:
78
tools/md2man
Executable file
78
tools/md2man
Executable file
@@ -0,0 +1,78 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
VERSION="v0.1"
|
||||
|
||||
file=$1
|
||||
[ -f "$file" ] || exit 1
|
||||
|
||||
name=$(basename "$file" .md)
|
||||
|
||||
awk -v name="$name" '
|
||||
BEGIN {
|
||||
print ".TH \"" toupper(name) "\" 1"
|
||||
in_name = 0
|
||||
}
|
||||
|
||||
function esc(s) {
|
||||
gsub(/\\/, "\\\\", s)
|
||||
gsub(/^\./, "\\&.", s)
|
||||
return s
|
||||
}
|
||||
|
||||
function fmt(s) {
|
||||
while (match(s, /`[^`]+`/)) {
|
||||
pre = substr(s, 1, RSTART-1)
|
||||
mid = substr(s, RSTART+1, RLENGTH-2)
|
||||
post = substr(s, RSTART+RLENGTH)
|
||||
s = pre "\\fB" mid "\\fR" post
|
||||
}
|
||||
return esc(s)
|
||||
}
|
||||
|
||||
{
|
||||
sub(/\r$/, "")
|
||||
|
||||
if ($0 ~ /^# /) {
|
||||
section = substr($0, 3)
|
||||
|
||||
if (toupper(section) == "NAME") {
|
||||
print ".SH NAME"
|
||||
in_name = 1
|
||||
} else {
|
||||
print ".SH " toupper(esc(section))
|
||||
in_name = 0
|
||||
}
|
||||
next
|
||||
}
|
||||
|
||||
if ($0 ~ /^$/) {
|
||||
print ".PP"
|
||||
next
|
||||
}
|
||||
|
||||
if (in_name) {
|
||||
split($0, a, " - ")
|
||||
if (length(a) > 1) {
|
||||
print "\\fB" esc(a[1]) "\\fR \\- " esc(a[2])
|
||||
} else {
|
||||
print "\\fB" esc($0) "\\fR"
|
||||
}
|
||||
next
|
||||
}
|
||||
|
||||
if ($0 ~ /^- /) {
|
||||
sub(/^- /, "")
|
||||
split($0, a, " ")
|
||||
print ".TP"
|
||||
print "\\fB" esc(a[1]) "\\fR"
|
||||
if (length(a) > 1) {
|
||||
print fmt(substr($0, length(a[1]) + 3))
|
||||
}
|
||||
next
|
||||
}
|
||||
|
||||
print fmt($0)
|
||||
}
|
||||
' "$file"
|
||||
Reference in New Issue
Block a user