79 lines
1.3 KiB
Bash
Executable File
79 lines
1.3 KiB
Bash
Executable File
#!/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"
|