<Попередній | зміст | Наступна>
groff
groff — це набір програм, що містять реалізацію troff GNU. Він також включає скрипт, який використовується для емуляції nroff та інших членів сімейства roff.
У той час як roff а його нащадки використовуються для створення форматованих документів, вони роблять це досить чужим для сучасних користувачів способом. Більшість документів сьогодні створюються за допомогою текстових процесорів, які можуть виконувати як композицію, так і макет документа за один крок. До появи графічного текстового процесора документи часто створювалися у двоетапний процес, який передбачав використання текстового редактора для створення композиції та процесора, наприклад, троф, щоб застосувати форматування. Інструкції для програми форматування були вбудовані в складений текст за допомогою мови розмітки. Сучасним аналогом такого процесу є веб-сторінка, яка складається за допомогою якогось текстового редактора, а потім відтворюється веб-браузером, використовуючи HTML як мову розмітки для опису остаточного макета сторінки.
Ми не збираємося покривати groff у повному обсязі, оскільки багато елементів його мови розмітки мають справу з досить загадковими деталями типографіки. Замість цього ми зосередимося на одному з них пакети макросів що залишається у широкому вжитку. Ці пакети макросів об’єднують багато своїх команд низького рівня в менший набір команд високого рівня, які дозволяють використовувати groff набагато простіше.
На мить розглянемо скромну man-сторінку. Воно живе в / usr / share / man каталог як a gzip стиснутий текстовий файл. Якби ми дослідили його нестиснений вміст, ми б побачили наступне (довідкова сторінка для ls у розділі 1 показано):
[me@linuxbox ~]$ zcat /usr/share/man/man1/ls.1.gz | голова
.\" НЕ ЗМІНЮЙТЕ ЦЕЙ ФАЙЛ! Він був згенерований help2man 1.35.
.TH LS "1" "Квітень 2008" "GNU coreutils 6.10" "Команди користувача"
.SH ІМ'Я
ls \- список вмісту каталогу
.SH СИНОПСИС
.B ls
[\fIOPTION\fR]... [\fIFILE\fR]...
.SH ОПИС
.\" Додайте будь-який додатковий опис тут
.PP
[me@linuxbox ~]$ zcat /usr/share/man/man1/ls.1.gz | голова
.\" НЕ ЗМІНЮЙТЕ ЦЕЙ ФАЙЛ! Він був згенерований help2man 1.35.
.TH LS "1" "Квітень 2008" "GNU coreutils 6.10" "Команди користувача"
.SH ІМ'Я
ls \- список вмісту каталогу
.SH СИНОПСИС
.B ls
[\fIOPTION\fR]... [\fIFILE\fR]...
.SH ОПИС
.\" Додайте будь-який додатковий опис тут
.PP

Порівняно зі сторінкою man у її звичайному вигляді, ми можемо побачити кореляцію між мовою розмітки та її результатами:
[me@linuxbox ~]$ чоловік лс | голова
LS(1) Команди користувача
LS(1)
[me@linuxbox ~]$ чоловік лс | голова
LS(1) Команди користувача
ІМ'Я
ІМ'Я
ls - список вмісту каталогу
ls - список вмісту каталогу
СИНТАКСИС
ls [ОПЦІЯ]... [ФАЙЛ]...
СИНТАКСИС
ls [ОПЦІЯ]... [ФАЙЛ]...
Причина, чому це цікаво, полягає в тому, що сторінки man відображаються за допомогою groff, використовуючи людина- док пакет макросів. Фактично, ми можемо моделювати людина команду з таким конвеєром:
[me@linuxbox ~]$ zcat /usr/share/man/man1/ls.1.gz | groff -mandoc -T ascii | голова
LS(1) Команди користувача LS(1)
ІМ'Я
ls - список вмісту каталогу
СИНТАКСИС
ls [ОПЦІЯ]... [ФАЙЛ]...
[me@linuxbox ~]$ zcat /usr/share/man/man1/ls.1.gz | groff -mandoc -T ascii | голова
LS(1) Команди користувача LS(1)
ІМ'Я
ls - список вмісту каталогу
СИНТАКСИС
ls [ОПЦІЯ]... [ФАЙЛ]...
Тут ми використовуємо groff програму з параметрами, встановленими для вказівки mandoc пакет макросів і вихідний драйвер для ASCII. groff може виробляти вихід у кількох форматах. Якщо формат не вказано, PostScript виводиться за замовчуванням:
[me@linuxbox ~]$ zcat /usr/share/man/man1/ls.1.gz | groff -mandoc | голова
%!PS-Adobe-3.0
%%Творець: groff версія 1.18.1
%%Дата створення: четвер, 5 лютого 13:44:37 2009 року
%%DocumentNeededResources: шрифт Times-Roman
%%+ шрифт Times-Bold
%%+ шрифт Times-Italic
%%DocumentSuppliedResources: групи процесів 1.18 1
%%Сторінок: 4
%%PageOrder: за зростанням
%%Орієнтація: портрет
[me@linuxbox ~]$ zcat /usr/share/man/man1/ls.1.gz | groff -mandoc | голова
%!PS-Adobe-3.0
%%Творець: groff версія 1.18.1
%%Дата створення: четвер, 5 лютого 13:44:37 2009 року
%%DocumentNeededResources: шрифт Times-Roman
%%+ шрифт Times-Bold
%%+ шрифт Times-Italic
%%DocumentSuppliedResources: групи процесів 1.18 1
%%Сторінок: 4
%%PageOrder: за зростанням
%%Орієнтація: портрет
Ми коротко згадали про PostScript у попередньому розділі, і знову в наступному розділі. PostScript — це мова опису сторінки, яка використовується для опису вмісту друкованої сторінки на пристрої, подібному до версталя. Якщо ми візьмемо результат нашої команди та збережемо його у файл (припускаючи, що ми використовуємо графічний робочий стіл із робочий стіл каталог):
[me@linuxbox ~]$ zcat /usr/share/man/man1/ls.1.gz | groff -mandoc >
~/Desktop/foo.ps
[me@linuxbox ~]$ zcat /usr/share/man/man1/ls.1.gz | groff -mandoc >
~/Desktop/foo.ps
На робочому столі має з'явитися значок вихідного файлу. Двічі клацнувши піктограму, програма перегляду сторінки має запуститися та відкрити файл у його відтвореному вигляді:

Малюнок 4: Перегляд результатів PostScript за допомогою засобу перегляду сторінок у GNOME
Те, що ми бачимо, — це гарно набрана сторінка керівництва ls! Фактично, можна перетворити файл Post-Script у PDF (Переносимий формат документа) файл за допомогою цієї команди:
[me@linuxbox ~]$ ps2pdf ~/Desktop/foo.ps ~/Desktop/ls.pdf
[me@linuxbox ~]$ ps2pdf ~/Desktop/foo.ps ~/Desktop/ls.pdf
Команда ps2pdf програма є частиною ghostscript пакет, який встановлюється на більшості систем Linux, які підтримують друк.
![]()
Порада: системи Linux часто містять багато програм командного рядка для форматування файлів
![]()
![]()
перетворення. Їх часто називають за умовою формат2формат. Спробуйте використати команду ls /usr/bin/*[[:alpha:]]2[[:alpha:]]* ідентифікувати їх. Також спробуйте шукати програми з іменем форматдоформат.
![]()
Для нашої останньої вправи с groff, ми знову відвідаємо нашого старого друга distros.txt ще раз. Цього разу ми скористаємося табл програма, яка використовується для форматування таблиць для набору нашого списку дистрибутивів Linux. Для цього ми скористаємося нашим раніше sed скрипт для додавання розмітки до текстового потоку, до якого ми будемо подаватися groff.
По-перше, нам потрібно змінити нашу sed скрипт для додавання необхідних елементів розмітки (званий запити in groff) що табл вимагає. Використовуючи текстовий редактор, ми змінимо distros.sed до наступного:
# скрипт sed для створення звіту про дистрибутиви Linux
1 я\
.TS\
центральна коробка;\ cb ss\
cb cb cb\ ln c.\
Звіт про розповсюдження Linux\
=\
# скрипт sed для створення звіту про дистрибутиви Linux
1 я\
.TS\
центральна коробка;\ cb ss\
cb cb cb\ ln c.\
Звіт про розповсюдження Linux\
=\
ІМ'Я
_
версія
Випущено\
ІМ'Я
_
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/
$ а\
.TE
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/
$ а\
.TE

Зауважте, що для належної роботи сценарію потрібно подбати про те, щоб слова «Назва версії випущено» розділялися символами табуляції, а не пробілами. Отриманий файл ми збережемо як distros-tbl.sed. табл використовує .TS та .TE запити на початок і завершення таблиці. Рядки, наступні за .TS запит визначає глобальні властивості таблиці, які, для нашого прикладу, відцентровані горизонтально на сторінці та оточені квадратом. Решта рядків визначення описують макет кожного рядка таблиці. Тепер, якщо ми знову запустимо наш конвеєр генерування звітів з новим sed сценарій, ми отримаємо наступне:
[me@linuxbox ~]$ сортування -k 1,1 -k 2n distros.txt | sed -f distros-tbl
.sed | groff -t -T ascii 2>/dev/null
+------------------------------+
| Звіт про розповсюдження Linux |
+------------------------------+
[me@linuxbox ~]$ сортування -k 1,1 -k 2n distros.txt | sed -f distros-tbl
.sed | groff -t -T ascii 2>/dev/null
+------------------------------+
| Звіт про розповсюдження Linux |
+------------------------------+

| Назва Версія Випущена |
+------------------------------+
|Федора | 5 | 2006-03-20 | | |
|Федора | 6 | 2006-10-24 | | |
|Федора | 7 | 2007-05-31 | | |
|Федора | 8 | 2007-11-08 | | |
|Федора | 9 | 2008-05-13 | | |
|Федора | 10 | 2008-11-25 | | |
|SUSE | 10.1 | 2006-05-11 | | |
|SUSE | 10.2 | 2006-12-07 | | |
|SUSE | 10.3 | 2007-10-04 | | |
|SUSE | 11.0 | 2008-06-19 | | |
|Ubuntu | 6.06 | 2006-06-01 | | |
|Ubuntu | 6.10 | 2006-10-26 | | |
|Ubuntu | 7.04 | 2007-04-19 | | |
|Ubuntu | 7.10 | 2007-10-18 | | |
|Ubuntu | 8.04 | 2008-04-24 | | |
|Ubuntu | 8.10 | 2008-10-30 | | |
+------------------------------+
Додавання -t варіант до groff інструктує його попередньо обробити текстовий потік за допомогою табл. Точно також -T Опція використовується для виводу в ASCII, а не на вихідний носій за замовчуванням, PostScript.
Формат виводу є найкращим, що ми можемо очікувати, якщо ми обмежені можливостями екрана терміналу або принтера в стилі друкарської машинки. Якщо вказати вихід PostScript і графічно переглянути вихід, ми отримаємо набагато більш задовільний результат:
[me@linuxbox ~]$ сортування -k 1,1 -k 2n distros.txt | sed -f distros-tbl
.sed | groff -t > ~/Desktop/foo.ps
[me@linuxbox ~]$ сортування -k 1,1 -k 2n distros.txt | sed -f distros-tbl
.sed | groff -t > ~/Desktop/foo.ps

Малюнок 5: Перегляд готової таблиці
документація