Làm cách nào để chuyển đổi trang người dùng Linux sang HTML mà không cần sử dụng?


11

Tôi muốn chuyển đổi một số trang người dùng Linux sang HTML mà không cần sử dụng. Định kiến ​​của tôi chống lại sự cố là do một số vấn đề kết xuất PNG mà nó mang lại cho tôi dường như được bản địa hóa cho Sabayon (vì những vấn đề này dường như không xảy ra trên các máy ảo VirtualBox của tôi cho các bản phát hành khác). Tôi nhận ra đây là một lỗi, nhưng một giải pháp dường như không có trong tương lai gần, vì vậy tôi muốn hỏi liệu có cách nào khác để chuyển đổi trang người dùng Linux sang HTML không. Sử dụng các trang HTML tại http://linux.die.net/man không phải là một giải pháp chấp nhận được vì một số trang người đàn ông tôi quan tâm không có ở đó (ví dụ: emerge(1)không có ở đó).


Tại sao bạn không sử dụng troff? Nó là miễn phí.
schily 2/12/2015

Tôi không biết làm thế nào, tôi đã học cách sử dụng groff bằng cách đọc một số câu trả lời trên trang web này và các trang web liên quan. Nếu bạn viết ra một câu trả lời liên quan đến troff tôi sẽ có thể chấp nhận nó, tùy thuộc vào chất lượng của các câu trả lời khác cho câu hỏi này.
BH2017

tại sao không gửi báo cáo lỗi cho sabayon và yêu cầu họ sửa lỗi?
cas

@cas Liên kết đầu tiên (các vấn đề kết xuất PNG) là báo cáo lỗi Sabayon tôi đã gửi trong khoảng thời gian tôi hỏi câu hỏi này.
BH2017

hãy thử tìm và sửa nguồn của warning: can't find font `b'tin nhắn - đó có thể là nguyên nhân vì các tệp png được tạo có xu hướng chỉ là văn bản ở định dạng đồ họa. có thể là một gói phông chữ bị thiếu cần được cài đặt.
cas

Câu trả lời:


10

Có rất nhiều lựa chọn thay thế như roffit , troff , man2html . Ngoài ra còn có các trình duyệt manpage trực tuyến dựa trên perl, như manServer .

pandocMặc dù vậy, yêu thích của tôi là mặc dù đáng buồn là nó dường như không hỗ trợ đầu vào ROFF theo mặc định (mặc dù bạn có thể sử dụng nó nếu bạn cần xâu chuỗi nhiều bộ lọc chuyển đổi lại với nhau.

ví dụ man2html:

zcat /usr/share/man/man1/dd.1.gz \ 
    | man2html \
    | sudo tee /var/www/html/dd.html

ví dụ roffit:

git clone git://github.com/bagder/roffit.git
cd roffit
zcat /usr/share/man/man1/dd.1.gz \
    | perl roffit \
    | sudo tee /var/www/html/dd-roffit.html

Các công cụ khác:


À, tôi nên làm rõ Tôi không chỉ quan tâm đến tên của các chương trình, tôi quan tâm chính xác đến cách sử dụng chúng để chuyển đổi các trang man sang HTML. Vì vậy, vui lòng chọn ít nhất một trong các chương trình này và chỉ cho tôi cách chuyển đổi trang man sang HTML với nó.
BH2017

Cảm ơn đã chỉnh sửa, tốt hơn nhiều! Tôi có một vài câu hỏi mặc dù. Tại sao bạn lại chuyển hướng stderr sang tệp html trong man2htmlví dụ? Và tại sao chuyển hướng đến một tập tin trong /var/www/html? Không cần máy chủ web, chỉ cần chuyển hướng đến một tệp cục bộ và bạn có thể trỏ trình duyệt của mình đến đó. Ngoài ra, bạn đã kiểm tra man2htmlđầu ra của bạn ? Tôi đã thử nó trên Arch của tôi và nó không tạo ra đầu ra được định dạng.
terdon

Không cần phải chuyển hướng stderr, bỏ qua điều đó :-). Tôi đã chuyển hướng nó đến / var / www / html để tôi có thể xem kết quả trong các thử nghiệm của mình (Tôi đang sử dụng một hệ thống từ xa qua ssh). Bạn không cần phải - sử dụng trình duyệt cục bộ hoạt động tốt. Tôi đã kiểm tra cả hai - và chúng có vẻ ổn trên hệ thống của tôi. Không kiểm tra xem họ có thể tạo ra PNG (hoặc bất cứ vấn đề gì xảy ra với Arch không).
Criveti Mihai

Tôi thích câu trả lời này Tôi nghĩ rằng cuối cùng tôi sẽ chấp nhận nó, nhưng có một vấn đề cuối cùng với câu trả lời này. Xem Sabayon sử dụng các trang theo .bz2định dạng thay vì .gz, vì vậy bạn có thể viết lại câu trả lời của mình cho phù hợp không? Giống như sửa đổi các dòng zcat với các dòng sẽ hoạt động với các trang man được nén bzip2.
BH2017

man2html cần đầu ra nroff và không hoạt động trong đầu vào trodd Ví dụ của bạn sai.
schily

6

Bit đầu tiên này là một sự lột xác không biết xấu hổ từ trang web chính thức :

mandoclà bộ công cụ biên dịch mdoc, roffngôn ngữ macro được lựa chọn cho các trang hướng dẫn BSD và manngôn ngữ lịch sử chiếm ưu thế cho hướng dẫn sử dụng UNIX. Nó nhỏ, được cấp phép ISO C, ISC và khá nhanh. Thành phần chính của bộ công cụ là mandocchương trình tiện ích, dựa trên libmandoctrình biên dịch xác thực, để định dạng đầu ra cho các thiết bị đầu cuối UNIX (có hỗ trợ các ngôn ngữ ký tự rộng) , XHTML, HTML, PostScript và PDF.

mandocđã được phát triển chủ yếu trên OpenBSD và là một dự án OpenBSD và BSD.lv. Chúng tôi cố gắng hỗ trợ tất cả các hệ điều hành miễn phí quan tâm, đặc biệt là FreeBSD, NetBSD, DragonFly, illumos, Minix 3 và GNU / Linux, cũng như tất cả các hệ thống chạy pkgsrchệ thống xây dựng gói di động. Để hỗ trợ mandocphát triển, hãy xem xét quyên góp cho nền tảng OpenBSD.

pacmanthông báo cho tôi mdocmlkích thước gói được cài đặt cục bộ của tôi là 3,28mb và bao gồm các /usr/bintệp nhị phân được định vị sau :

/usr/bin/demandoc
/usr/bin/makewhatis
/usr/bin/mandoc
/usr/bin/mapropos
/usr/bin/mman
/usr/bin/mwhatis

Với nó tôi có thể làm:

mman -Thtml mman >/tmp/html
firefox file:///tmp/html

nhập mô tả hình ảnh ở đây

Bạn có thể áp dụng bảng định kiểu của riêng bạn như bạn muốn. Tất cả các tài liệu là trực tuyến , là tốt. Và tất cả điều đó, như tôi nghĩ, cũng được biên soạn mandoc.


Dự án đã được đổi tên thành mandoc.
Franklin Yu

5

Đầ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 man2htmllà 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ì troffhoặ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 manmandocmacro, 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à man2htmlchươ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 troffmacro. 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 M2thanh ghi bằng phương tiện mà bạn có thể viết mã phát hiện ra nó đang chạy man2htmlvà 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 .M2SSlệ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.txrchươ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à nroffchú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, < bcó nghĩa blà một biến siêu cú pháp. >> a bcó nghĩa alà một cú pháp cụ thể, bên cạnh đó là cú pháp siêu cú pháp bmà không có bất kỳ khoảng trắng can thiệp nào, và <> a b cphương tiện blà một cú pháp cú pháp giòn giã giữa acchữ.

Phiên bản cải tiến của tôi man2htmlhiể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 man2htmlhiểu.


1

Vì OpenSolaris được cung cấp dưới dạng OSS, nên có miễn phí troff.

Một tập hợp các nguồn được chuyển ở đây:

http://heirloom.sourceforge.net/doctools.html

nhưng Heirloom là một dự án đã chết kể từ ngày tận thế. Năm 2007 bạn có thể muốn kiểm tra

https://github.com/nt-roff/heirloom-doctools

nơi một số người tiếp tục dự án gia truyền đã chết.

Cùng với man2html, troff cho phép bạn tự động tạo các trang man html đẹp.

Xem ví dụ: trang man SchilliX:

http://schillix.sourceforge.net/man/

với Schily Bourne Shell:

http://schillix.sourceforge.net/man/man1/bosh.1.html

Tôi hài lòng với điều này và với các tùy chọn phù hợp, bạn có được các trang man được liên kết với các tài liệu khác từ cùng một nhóm. Tôi sử dụng ví dụ lệnh này:

soelim sh.1 | tbl | nroff -u1 -Tlp -man - | col -x | \
                        (sed -e 's/XXX/sh.1/g' ../conf/pre.html; \
                        man2html  -cgiurl '../man$section$subsection/$title.$section$subsection.html' -compress -nodepage; \
                        cat ../conf/post.html) | \
                        egrep -v 'HTML|BODY'> sh.1.html

đó là một phần của hệ thống tạo tập tin trong các công cụ schily. Lưu ý các tập tin ../conf/pre.html../conf/post.htmltừ hệ thống makefiles schily cần thiết cho tiêu đề và những người khác. Bạn có thể muốn thay đổi bốn nhu cầu này của bạn.

Một cải tiến man2thmllà một phần của các công cụ schily (xem dưới cùng của boshtrang man).

BTW: một thông tin hài hước: toàn bộ troffmã nguồn cộng với tất cả các nguồn cho tất cả các chương trình trợ giúp như soelim, tbl... cộng với mannguồn chương trình chỉ bằng một nửa mã bạn cần cho mandocchương trình và mandocchỉ có một tblhỗ trợ rất hạn chế phá vỡ hầu hết người Solaris trang.

Nếu bạn cần hỗ trợ cho mandoccác nguồn troff được định dạng từ FreeBSD và tương tự, tôi đã tạo một bộ macro mandoc hoạt động cho troff. Kiểm tra các nguồn SchilliX tại: https://sourceforge.net/p/schillix-on/schillix-on/ci/default/tree/usr/src/cmd/troff/troff.d/tmac.d/ Mã được đề cập là trong các tập tin andocdoc*.

Các mannguồn chương trình trong SchilliX-ON đã được thay đổi thành cuộc gọi nroff -mandocthay vì nroff -man.


Ah, bạn đánh tôi với nó! Tôi chỉ cần cài đặt heirloom-doctoolslà tốt. Phải mân mê mk.config:-).
Criveti Mihai

0

Các vấn đề của OP với các tệp PNG phù hợp với trải nghiệm của tôi khi sử dụng groff cho trang thủ công của xterm và tài liệu trình tự điều khiển. Vấn đề là groff đang cố gắng kết xuất các bảng dưới dạng hình ảnh được cắt từ tệp PDF và nó đã bị lỗi trong vài năm. Mặc dù tôi đã sử dụng tập lệnh Perl man2html từ những năm 1990 cho tài liệu ncurses, nhưng đối với các chương trình khác, tôi thấy đơn giản hơn khi tạo các tệp quảng cáo html và pdf bằng cách sử dụng groff. Tệp PDF hoạt động tốt; các tập tin html thì không.

Đồng thời, kịch bản Perl có vấn đề riêng của nó.

Vì cả hai đều không biến mất (và vì các giải pháp thay thế được đề xuất không phải là một sự cải thiện, do thêm phụ thuộc hoặc đưa ra các hạn chế khác), tôi đã giải quyết vấn đề bằng cách cải thiện man2html (trên hết những thay đổi mà tôi đã thực hiện trong quá trình một số năm) và thêm tùy chọn tập lệnh cấu hình mới cho mỗi chương trình để cho phép sử dụng groff làm trình chuyển đổi mặc định sang trình chuyển đổi html, nhưng sử dụng man2html khi tôi đặt tùy chọn. Làm xong việc này, tôi đã xóa tất cả các tệp html được tạo ra trong năm nay khỏi trang web của mình . Có một trang "man2html" trên trang web ghi lại điều này; kịch bản thực tế có sẵn trên trang kịch bản linh tinh của tôi .

Một số đề xuất và nhận xét dường như không nhận thấy rằng có (ít nhất) hai chương trình có tên man2html:

  • tập lệnh Perl của Earl Hood (được liên kết bởi @ criveti-mihai ) và
  • một chương trình C ban đầu được viết bởi Richard Verhoeven (và được giả sử trong ví dụ được đưa ra bởi @ criveti-mihai ).

Chương trình C thực hiện định dạng riêng của nó, không phụ thuộc vào nroff / groff / bất cứ điều gì. Nó có thể đọc một trang man từ đầu vào tiêu chuẩn, hoặc như một tập tin thực tế (trong số những thứ khác - xem trang hướng dẫn của nó ). Đưa ra một trang hướng dẫn cú pháp nroff "foo.1", bạn có thể định dạng nó bằng bất kỳ lệnh nào sau đây:

man2html - <foo.1 >foo.1.html
cat foo.1 |man2html - >foo.1.html
man2html foo.1 >foo.1.html

Tập lệnh Perl đọc các trang thủ công được định dạng , ví dụ: từ nroff(câu hỏi của OP là trình bao bọc cho groff). Bạn có thể sử dụng nó như thế này:

nroff -man foo.1 |man2html >foo.1.html

Tôi đã điều tra bằng cách sử dụng chương trình C thay thế cho tập lệnh Perl, nhưng đã loại bỏ nó vì

  • nó không làm tốt công việc định dạng đầu ra. Trong một kiểm tra nhanh với tệp terminfo.5 của ncurses, tôi có thể thấy các lỗi trong định dạng đầu ra.
  • chương trình C có một khái niệm tích hợp về các macro manpage không bao gồm các trường hợp khác nhau (bao gồm cả việc viết các macro mới) mà tôi cần cho các trang hướng dẫn trên trang web của mình.

Ngẫu nhiên, nó xử lý nhiều chuyển hướng được sử dụng trong tệp này (đây là một vấn đề với troff kế thừa - lý do các hướng dẫn cài đặt của ncurses đã khuyên sử dụng groff trong 20 năm qua).


Như đã đề cập trước đây: man2htmllấy đầu ra nroff làm đầu vào, do đó bạn không thể cung cấp cho nó một tệp nguồn trang man làm đầu vào.
schily

1
@shily Điều đó phụ thuộc vào việc man2htmlbạn đang nói về điều gì.
Kaz

> chương trình C có một khái niệm tích hợp về các macro manpage không bao gồm các trường hợp khác nhau (bao gồm viết các macro mới) mà tôi cần cho các trang hướng dẫn trên trang web của mình. Nhìn vào đây: kylheku.com/cgit/man/log
Kaz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.