Обговорення категорії:Сторінки підручника

Матеріал з 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 "$_ ";
	}
   }

}

Особисті інструменти