Обговорення категорії:Сторінки підручника
Матеріал з docs.linux.org.ua — збірника документації з Unix/Linux українською мовою.
Нище приведені програми входять в збірку wiki2man, але тут бувають їх свіжіші версії.
Wiki to File
#!/bin/bash
# 20070831 wiki2file hse@ukr.net tech JaFd http://wiki2man.sourceforge.net
# Distributed under the terms of the GNU General Public License v3 or later
version=0.2.8-rc1
version() {
echo "
wiki2file-$version
Copyright (C) 2005 - 2006 hse@ukr.net tech JaFd http://wiki2man.sourceforge.net
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
"
}
usage() {
echo "
This script automate man pages wiki sources download from such wiki servers:
DLOU (--language=uk)
http://docs.linux.org.ua/index.php/Man:Contents
RGWC (--language=ru-gentoo-wiki)
http://ru.gentoo-wiki.com/Страницы_MAN
over HTTP protocol and save it as local file.
You can easier add support of new wiki servers!!!
$ wiki2file [--language=<language>] [--wikimandir=<wikimandir>] [--url=<URL>]
[--email=<E-mail>] --build --help --version
Options:
-l --language=<language>
Language of manual pages, may be additional information. (uk)
--language=new_wiki - print instruction how to add support of
new wiki servers.
-d --wikimandir=<wikimandir>
Directory with wiki formated manual pages. (~/doc/uk)
-u --url=<URL>
URL of wiki server from which building manpages archive.
(http://docs.linux.org.ua/dlou/index.php/Man_Contents)
-m --email=<E-mail>
E-mail addres of person which maintainer manual pages on the wiki.
(docs@linux.org.ua)
-b --build=<yes>
Build manpages package.
-h --help
Print this help and exit.
-v --version
Print version and exit.
"
}
checkutilities() {
Mesg="$1"
shift
while [ $# != 0 ]
do
if ( ! which "${1}" >/dev/null 2>&1 )
then
echo "Cannot find: $1
$Mesg"
return 0
fi
shift
done
return 1
}
# Checking system:
if ( checkutilities "Where am I?" awk cat cp date echo grep ls mail mkdir rm )
then
exit 1
fi
# Edit to suite yours configuration:
# Local charset
local_charset=utf8
# HTTP browser
lynx='lynx -dump -cookie_file=~/.lynx_cookies -assume_charset '$local_charset' -assume_local_charset \
'$local_charset' -display_charset '$local_charset
########### RUSSIAN
# Language
lang='ru-gentoo-wiki'
# Location of wiki formated man pages:
wikimandir=~/doc/ru
########### UKRAINIAN
# Language
lang='uk'
# Location of wiki formated man pages:
wikimandir=~/doc/uk
# Configuration from command line:
build=''
while [ $# != 0 ]
do
argument="$1"
name=`echo "${argument}" |awk -F'=' '{print $1}'`
argument=${argument##*=}
if [[ "$name" == -[ldumbhv] ]] && [[ "$argument" == "$name" ]]
then
argument="$2";
shift;
fi
case "$name" in
'-l'|'--language' )
lang="$argument"
;;
'-d'|'--wikimandir' )
wikimandir="$argument"
;;
'-u'|'--url' )
url="$argument"
;;
'-m'|'--email' )
email="$argument"
;;
'-b'|'--build' )
build='yes'
;;
'-h'|'--help' )
usage
exit 0
;;
'-v'|'--version' )
version
exit 0
;;
* )
usage
exit 1
;;
esac
shift
done
# Create if needed output dir:
mkdir -p $wikimandir/
case "$lang" in
'ru-gentoo-wiki' )
# Information:
url='http://ru.gentoo-wiki.com/Страницы_MAN'
email='docs@linux.org.ru'
# url:
link='http://ru.gentoo-wiki.com'
# page:
page='%D0%A1%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_MAN'
page='Страницы_MAN'
# Create list of man pages:
$lynx "$link/$page" |grep 'http://ru.gentoo-wiki.com/MAN_' |awk -F'http://ru.gentoo-wiki.com/MAN_' '{print $2}' \
> $wikimandir/manlist
page='index.php?title=MAN_'
symbol='_' # abs_1
CASE='SHOT' # abs_1
;;
'uk' )
# Information:
url='http://docs.linux.org.ua/dlou/index.php/Man_Contents'
email='docs@linux.org.ua'
# url:
link='http://docs.linux.org.ua'
# page:
page='dlou/index.php/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D1%96%D1%8F:'
page=$page'%D0%A1%D1%82%D0%BE%D1%80%D1%96%D0%BD%D0%BA%D0%B8_'
page=$page'%D0%BF%D1%96%D0%B4%D1%80%D1%83%D1%87%D0%BD%D0%B8%D0%BA%D0%B0'
page='dlou/index.php/Категорія:Сторінки підручника'
# Create list of man pages:
$lynx "$link/$page" > $wikimandir/manpage
grep 'http://docs.linux.org.ua/dlou/index.php/Man:Man' $wikimandir/manpage |awk '{print $2}' |awk -F':' '{print $3}' \
|sed 's/Man/man/' > $wikimandir/manlis
page='dlou/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D1%96%D1%8F:'
page=$page'%D0%A1%D1%82%D0%BE%D1%80%D1%96%D0%BD%D0%BA%D0%B8_'
page=$page'%D0%BF%D1%96%D0%B4%D1%80%D1%83%D1%87%D0%BD%D0%B8%D0%BA%D0%B0&from='
for i in `grep "$page" $wikimandir/manpage |awk '{print $2}'`
do
$lynx "$i" |grep 'http://docs.linux.org.ua/dlou/index.php/Man:Man' |awk '{print $2}' |awk -F':' '{print $3}' \
|sed 's/Man/man/' >> $wikimandir/manlis
done
cat $wikimandir/manlis |uniq -u > $wikimandir/manlist
rm $wikimandir/manlis $wikimandir/manpage
page='dlou/index.php?title=Man:Man'
symbol='.' # man1/abs.1
CASE='FULL' # man1/abs.1
;;
'new_wiki' )
echo "
# For adding new wiki server support you must fill out next fields
# in source of this script.
# Information:
url='<URL of manual pages site>'
email='<E-mail>'
# url:
link='<URL wiki server>'
# page:
page='<Page with manual pages list on wiki server>'
# Create list of man pages ( list like 'man1/abs.1' or 'abs.1'):
$lynx "$link/$page" |grep '???' |awk ??? |sed ??? > $wikimandir/manlist
page='<Page for edit manual pages on wiki server>' # May be need change $page defined above.
symbol='?' # abs.1 -> symbol='.'; abs_1 -> symbol='_'
CASE='SHOT' # abs.1
CASE='FULL' # man1/abs.1
# Send filled out this form to wiki2man mailing list to include your server
# support in future release.
"
exit 0
;;
* )
echo "Only 'ru-gentoo-wiki', 'uk' and 'new_wiki' are supported '--language' for now!"
exit 1
;;
esac
# http://ru.gentoo-wiki.com/index.php/MAN_awk_1
# http://docs.linux.org.ua/index.php/Man:Man3/abs.3
# Download wiki formated man pages to local file:
for i in `cat $wikimandir/manlist`
do
N=${i##*${symbol}}
if [[ "$CASE" == 'FULL' ]]
then
if [[ "$N" == "$i" ]]
then
N=`echo $i |awk -F'/' '{print $1}' |awk -F'man' '{print $2}'`
j=`echo $i |awk -F'/' '{print $2}'`
mkdir -p $wikimandir/man$N
echo -n "Download to: $wikimandir/man$N/$j ..."
wget -q -c -N -O $wikimandir/man$N/$j "${link}/${page}${N}/${j}&action=raw" #&
echo ' OK!'
else
j=`echo $i |awk -F'/' '{print $2}' |awk -F"${symbol}${N}" '{print $1}'`
mkdir -p $wikimandir/man$N
echo -n "Download to: $wikimandir/man$N/$j.$N ..."
wget -q -c -N -O $wikimandir/man$N/$j.$N "${link}/${page}${N}/${j}${symbol}${N}&action=raw" #&
echo ' OK!'
fi
else
j=`echo $i |awk -F"${symbol}${N}" '{print $1}'`
mkdir -p $wikimandir/man$N
echo -n "Download to: $wikimandir/man$N/$j.$N ..."
wget -q -c -N -O $wikimandir/man$N/$j.$N "${link}/${page}${j}${symbol}${N}&action=raw" #&
echo ' OK!'
fi
done
# Making manual pages package:
if [[ "$build" == 'yes' ]]
then
makeman -l $lang -d $wikimandir -u $url -m $email
fi
exit 0
Groff to Wiki
Ще один скрипт (навпаки - groff to wiki) Tech 09:53, 1 вересень 2007 (EEST)
#!/usr/bin/perl
# g2w: groff-to-wiki translator
# Author: Vitaliy Tsybulyak tech(at)oboz.com.ua
# Distributed under the terms of the GNU General Public License v3
use strict;
use warnings;
use POSIX qw(locale_h);
setlocale(LC_CTYPE, "uk_UA.koi8-u");
setlocale(LC_ALL, "uk_UA.koi8-u");
my $def = 0; # a wiki definition ;foo:bar
my $pre = 0; # preformatted text
while (<>) {
chomp;
s/\s+$//; # remove trailing spaces
s/</</g;
s/>/>/g;
s/\\-/-/g; # replace \- with -
s/\\e/\\/g; # replace \e with \
s/\\fB([^\\]+)\\f[PR]/<b>$1<\/b>/g; # bold attribute
s/\\fI([^\\]+)\\f[PR]/<i>$1<\/i>/g; # italic attribute
# make a link to another manpage
s/^\.BR ([a-z_0-9.]+) \(([1-8])\)/[[Man:Man$2\/$1.$2|<b>$1<\/b>($2)]]/;
if(/^\.sp/) {
print "\n\n";
next;
#s/^\.sp/\n\n/;
}
next if (/^(\.RS|\.RE)/);
s/^\.ti .*$/ /;
if (/^\.TP/) {
$def = 1;
print "\n\n;";
next;
}
if (/^\.IP/) {
print "\n* ";
next;
}
if (/^\.nf/) {
$pre = 1;
next;
} elsif (/^\.fi/) {
$pre = 0;
next;
}
if ($pre) {
s/^/ /; # just add 4 spaces; will print the line later
}
# 6 cases: .BI .IB .BR .RB .RI .IR
if (/^\.BI/) {
my $b = 0;
s/^\.BI\s+//;
while (/([^" ]+)|"([^"]+)"/gc) {
if ($b == 0) {
if ($1) {
print "<b>$1</b>";
$b = 1;
} elsif ($2) {
print "<b>$2</b>";
$b = 1;
}
} elsif ($b == 1) {
if ($1) {
print "<i>$1</i>";
$b = 0;
} elsif ($2) {
print "<i>$2</i>";
$b = 0;
}
}
}
if ($def) {
print ": ";
$def = 0;
} elsif ($pre) {
print "\n";
} else {
print " ";
}
} elsif (/^\.IB/) {
my $b = 1;
s/^\.IB\s+//;
while (/([^" ]+)|"([^"]+)"/gc) {
if ($b == 0) {
if ($1) {
print "<b>$1</b>";
$b = 1;
} elsif ($2) {
print "<b>$2</b>";
$b = 1;
}
} elsif ($b == 1) {
if ($1) {
print "<i>$1</i>";
$b = 0;
} elsif ($2) {
print "<i>$2</i>";
$b = 0;
}
}
}
if ($def) {
print ": ";
$def = 0;
} elsif ($pre) {
print "\n";
} else {
print " ";
}
} elsif (/^\.BR/) {
my $b = 0;
s/^\.BR\s+//;
while (/([^" ]+)|"([^"]+)"/gc) {
if ($b == 0) {
if ($1) {
print "<b>$1</b>";
$b = 1;
} elsif ($2) {
print "<b>$2</b>";
$b = 1;
}
} elsif ($b == 1) {
if ($1) {
print "$1";
$b = 0;
} elsif ($2) {
print "$2";
$b = 0;
}
}
}
if ($def) {
print ": ";
$def = 0;
} elsif ($pre) {
print "\n";
} else {
print " ";
}
} elsif (/^\.RB/) {
my $b = 1;
s/^\.RB\s+//;
while (/([^" ]+)|"([^"]+)"/gc) {
if ($b == 0) {
if ($1) {
print "<b>$1</b>";
$b = 1;
} elsif ($2) {
print "<b>$2</b>";
$b = 1;
}
} elsif ($b == 1) {
if ($1) {
print "$1";
$b = 0;
} elsif ($2) {
print "$2";
$b = 0;
}
}
}
if ($def) {
print ": ";
$def = 0;
} elsif ($pre) {
print "\n";
} else {
print " ";
}
} elsif (/^\.RI/) {
my $r = 0;
s/^\.RI\s+//;
while (/([^" ]+)|"([^"]+)"/gc) {
if ($r == 0) {
if ($1) {
print "$1";
$r = 1;
} elsif ($2) {
print "$2";
$r = 1;
}
} elsif ($r == 1) {
if ($1) {
print "<i>$1</i>";
$r = 0;
} elsif ($2) {
print "<i>$2</i>";
$r = 0;
}
}
}
if ($def) {
print ": ";
$def = 0;
} elsif ($pre) {
print "\n";
} else {
print " ";
}
} elsif (/^\.IR/) {
my $r = 1;
s/^\.IR\s+//;
while (/([^" ]+)|"([^"]+)"/gc) {
if ($r == 0) {
if ($1) {
print "$1";
$r = 1;
} elsif ($2) {
print "$2";
$r = 1;
}
} elsif ($r == 1) {
if ($1) {
print "<i>$1</i>";
$r = 0;
} elsif ($2) {
print "<i>$2</i>";
$r = 0;
}
}
}
if ($def) {
print ": ";
$def = 0;
} elsif ($pre) {
print "\n";
} else {
print " ";
}
} elsif (/^\.B /) {
s/^\.B\s+//;
print "<b>$_</b>";
if ($def) {
print ": ";
$def = 0;
} elsif ($pre) {
print "\n";
} else {
print " ";
}
} elsif (/^\.I /) {
s/^\.I\s+//;
print "<i>$_</i>";
if ($def) {
print ": ";
$def = 0;
} elsif ($pre) {
print "\n";
} else {
print " ";
}
} elsif (/^\.SH /) {
s/^\.SH\s+//;
s/"//g;
print "\n==";
my @line = split(//,$_);
print $line[0];
shift @line;;
foreach (@line) {
tr/АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ/абвгґдеєжзиіїйклмнопрстуфхцчшщьюя/;
print;
}
print "==\n";
next;
} elsif (/^\.SS /) {
s/^\.SS\s+//;
s/"//g;
print "\n=== $_ ===\n";
} elsif (/^\.PP?/) {
print "\n\n";
} elsif (/^\.TH /) {
s/^\.TH\s+//;
print "\n<!-- $_ -->\n";
} elsif (/^\.br/) {
print "\n<br>\n";
} elsif (/^\.\\"/) {
s/^\.\\"//;
print "\n<!-- $_ -->\n";
next;
} elsif (/^\\"/) {
next;
} elsif (/^\.PD/) {
next;
} else {
if ($def) {
print "$_: ";
$def = 0;
} elsif ($pre) {
print "$_\n";
} else {
print "$_ ";
}
}
}

