Đầu tiên, cần lưu ý rằng có nhiều hơn một chương trình được gọi man2html
.
Một tiện ích được gọi man2html
là bản gốc chương trình C được viết vào cuối những năm 1990 bởi Richard Verhoeven tại Đại học Công nghệ Eindhoven vào cuối những năm 1990. Chương trình này có nội bộ kỳ quặc. Tuy nhiên, nó có lợi thế là nó hoạt động với nguồn trang man thô, thay vì troff
hoặc nroff
đầu ra. Chương trình này đã được thêm vào bộ người đàn ông Frederico Lucifredi's.
Chương trình hiểu được ngữ nghĩa của man
và mandoc
macro, và kết quả đầu ra một cấu trúc HTML hợp lý. Chẳng hạn, khi bạn sử dụng các đoạn được thụt lề, như thế này:
.IP từ
Định nghĩa của
từ.
.RS
chương trình sẽ đưa ra một danh sách định nghĩa HTML.
Tôi duy trì một trang người rất lớn (hầu hết là một megabyte nguồn và dài gần 400 trang, khi được chuyển đổi thành cỡ chữ PDF theo groff
):
$ ls -l txr.1
-rw-rw-r-- 1 kaz kaz 980549 ngày 3 tháng 1 11:38 txr.1
Khi tôi cần chuyển đổi nó thành HTML, khoảng năm năm trước, điều duy nhất tôi thấy đã làm một công việc hợp lý là man2html
chương trình C, cộng với xử lý hậu kỳ của đầu ra của nó thành "mùa để nếm thử".
Cuối cùng, tôi muốn có một tài liệu HTML chất lượng tốt hơn nhiều, vì vậy tôi bắt đầu viết troff
macro. Những hạn chế của chương trình C trở nên rõ ràng một cách đau đớn, vì vậy tôi đã rẽ nhánh nó. Trên trang git của tôi, bạn có thể tìm thấy một git repo với 30 bản vá cho man2html . Các bản vá này sửa một số lỗi và tăng cường chương trình với khả năng cải tiến nhiều để giải thích các macro troff, điều kiện, vòng lặp và các cấu trúc khác. Tôi cũng đã thêm một M2
thanh ghi bằng phương tiện mà bạn có thể viết mã phát hiện ra nó đang chạy man2html
và có thể làm một số điều khác biệt (cuộn xuống để lấy ví dụ). Đồng thời, tôi đã thêm một .M2SS
lệnh cho phép bạn phát ra phần tiêu đề HTML tùy chỉnh.
Trang chủ lớn của tôi được lưu trữ ở đây . Chương trình này được sản xuất với man2html
, được xử lý hậu kỳ bởi genman.txr
chương trình của tôi , sắp xếp lại các phần và thêm siêu liên kết trong toàn bộ tài liệu. Nó cũng viết lại các liên kết nội bộ trong mục lục thành các URL ổn định (dựa trên băm thay vì liệt kê tùy ý) và làm cho mục lục có thể thu gọn thông qua một số Javascript.
Các lệnh chính xác được sử dụng bởi my Makefile
:
man2html txr.1 | ./txr genman.txr -> txr-manpage.html
tbl txr.1 | pdfroff -man --no-toc -> txr-manpage.pdf
Để biết ví dụ về cách đầu ra khác nhau có điều kiện giữa HTML và nroff
chúng ta có thể xem xét một phần của man
đầu ra:
9.19.4 Cấu trúc macro
Cú pháp:
(làm tắc nghẽn {<name> | (<name> <arg> *)} <super>
<trình xác định vị trí> *)
Macro cấu trúc xác định một kiểu cấu trúc mới và các thanh ghi
nó dưới <name>, phải là một biểu tượng ràng buộc, theo
các chức năng ràng buộc. Tương tự, tên của mọi <slot> phải
cũng là một biểu tượng ràng buộc.
Ở trên, lưu ý cách các tham số được ký hiệu trong <angle>
<brackets>
. Trong phiên bản HTML, chúng xuất hiện in nghiêng .
Phần cú pháp xuất hiện trong mã nguồn như thế này:
.coNP Macro @ khử
.synb
.mets (hủy cấu trúc >> {name | >> (tên << arg *)} <super
.mets \ \ << trình xác định vị trí *)
.
đó là tất cả các macro tùy chỉnh được xác định trong cùng một tài liệu. Theo .mets
, < b
có nghĩa b
là một biến siêu cú pháp. >> a b
có nghĩa a
là một cú pháp cụ thể, bên cạnh đó là cú pháp siêu cú pháp b
mà không có bất kỳ khoảng trắng can thiệp nào, và <> a b c
phương tiện b
là một cú pháp cú pháp giòn giã giữa a
và c
chữ.
Phiên bản cải tiến của tôi man2html
hiểu được macro khá phức tạp thực hiện các quy ước đánh dấu này.
Ngoài ra, lưu ý cách hướng dẫn sử dụng các phần được đánh số tự động: tất cả đều được thực hiện bằng mã troff, điều này man2html
hiểu.
troff
? Nó là miễn phí.