#!/usr/local/bin/perl
# Copyright 1994-2000, Cunningham & Cunningham, Inc.
# in collaboration with Dave W. Smith
# Open Source for personal use only.
# ... and then only
# with the understanding that the owner(s) cannot be
# responsible for any behavior of the program or
# any damages that it may cause. See LICENSE.TXT


#use strict; # - ограничение на использование опасных операторов ???
# $|++;  # OUTPUT_AUTOFLUSH (if $| is non-zero)

# For Russian Language Page 
# Yevgeny Patarakin Update 2003


local $| = 1; 


#=== --- Additional Configuration
$WikiDB = "../db/pustwiki.txt";

# --- End of Additional Configuration

print "Content-type: text/html\n\n";

my $mark = "\263";
my $pomark = "\265";

# В классической английской манере
#my $link="$UpperLetter$LowerLetter+($UpperLetter$LowerLetter+)+";

#my $link = "$UpperRus$LowerRus+($UpperRus$LowerRus+)+";
my $link = "($AnyLetter+)($UnderLetter$AnyLetter+)+";

#==== -- Что у нас будет считаться линкой?
# Вот такая любая Большая - маленькая - Большая - Маленькая, но все русские
#== END Of Links description


# -v- moved out of substitution row for easier changes

my $SearchForm = <<EOF ;
 <form action=search.pl>
  <input type="text" size="40" name="search">
  <input type="submit" value="Search">
 </form>
EOF

######
open (TEXT,"$WikiDB") or die "Couldn't open for reading \n";

%kees = ();	
while (<TEXT>) {
       my ($name,$descript,$time) = split("#") ;
       push ( @{$kees{$name}},$descript) ;
		}
close TEXT ;

# Сначала необходимо конвертировать линку

my $query=&urldecode($ENV{'QUERY_STRING'}) ;


my $page = $query =~ /^(\S+\_\S+(\_\S+)?)$/
 ? $1
 : "Вики_Вики";  # 
 
my %par;
$par{page} = $page;
$par{title} = $page;
my ($body, $date) ;

# Если ссылка есть один из ключей хэша kees
# то надо достать последний элемент массива, связанного с этим ключом!
#    !!!!!

if ( exists($kees{$page} )) {
 $_ = pop (@{$kees{$page}}) ;
 
if ( /$mark/ ) {
  my %bla = split /$mark/, $_ ;
  $_ = $bla{text};  # convert hidden-field page to plain
  }  # if-part same as in edit
 $/ = $nl;

 $body = &FormatBody($_);
# Придется переделать, чтобы время добавлялось в момент обновления
# $date = &mdy (-M "../pages/$page");

 } else {
 $body = << "";
  "$page" пока еще не существует <BR>
  Воспользуйтесь кнопкой - <strong> Edit</strong> для того, чтобы создать ее.

}

$par{summary} = "Последние обновления $date" if $date;
$par{body} = $body;
#my $cb = "checked";
my $cb = " ";
$par{action} = << "";
 <form method=post action="edit.pl?$page">
 <input type=submit value=" Edit this page ">
 </form>

open (T, '../p_template.html') || die "template.html: $!";
undef $/;  # $nl still valid
$_ = <T>;
close (T);
s/\$(\w+)/defined($par{$1}) ? $par{$1} : ''/geo;
print;
$/ = $nl;

# ---

sub FormatBody {

local $_ = shift @_;
my ($InPlaceUrl, @InPlaceUrl);
my ($code, @code);
 @code= ();
 my $body = '';
 s/&/&amp;/g;
 s/</&lt;/g;
 s/>/&gt;/g;
s/----*/<hr><p>/g;
s/$pomark/ <br> /g;
s/(.)$/$1  /;
s/\*/ <br> -  /g; 
s/(http\:\/\/\S+)/<a href="$1">&gt;&gt; <\/a>/ig;
s/(mailto\:)(\S+)/<a href="$1$2">$2<\/a>/ig;
s/$pomark/<br> /g;
#==------- ВОТ ОНА ГДЕ - ПРОБЛЕМА-ТО!
 s/\s(\S+\_\S+(\_\S+)?)\s/&AsAnchor($1)/geo;	


# Выделения - работают
	s/'{3}(.*?)'{3}/<strong>$1<\/strong>/g;
	s/'{2}(.*?)'{2}/<em>$1<\/em>/g; 

   s/\[Search\]/$SearchForm/;  # добавить к странице строку поиска Работает
#s/\[?ISBN:?([0-9- xX]{10,})\]?/&BookLink($1)/igeo;  # На книжки 
#s/^\&gt;(.*)\z/<cite>\&gt;$1<\/cite>/g;  # special "> quoted"


return $_ ;
 }

sub AsAnchor {
 my $title = shift @_;
my $Aendkey;
my $Sendkey;
if (substr($title,-1) =~ /\"|\.|\,|\;|$pomark/) {$Aendkey = chop($title) }

exists($kees{$title} )
  ? " <a href=wiki.pl?$title>$title$Aendkey <\/a> "
  : " <a href=edit.pl?$title>?<\/a>$title$Aendkey ";
 }

sub InPlaceUrl {
 my $num = shift @_;
 my $ref = $InPlaceUrl[$num];
 $ref =~ s/^(javascript.{30}).*/$1 .../;
 $ref =~ /\.(gif|jpeg|jpg|png)$/i
  ? "<img src=\"$ref\">"
  : "<a href=\"$InPlaceUrl[$num]\">$ref<\/a>";
 }

sub BookLink {
 my $isbn = shift @_;
 local $_ = $isbn;
 s/[- ]//g;
 /^\d{9}.$/
  ? "<a href=\"http://www.amazon.com/exec/obidos/ISBN=$_/portlandpatternrA/\"><font size=-1>ISBN</font> $isbn</a> "
  : "ISBN $isbn ";
 }

sub mdy {
 my $time = shift @_;
 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($^T - ($time * 24 * 60 * 60));
 my $month = ('Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь',
  'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь')[$mon];
  $year += 1900 if $year < 1900;
 return "$month $mday, $year";
 }

# == --  Russian Subs

sub urldecode{
 local($val)=@_;
 $val=~s/\+/ /g;
 $val=~s/%([0-9a-hA-H]{2})/pack('C',hex($1))/ge;
 return $val;
 }

sub print_err{
 print "Content-Type: text/html\n\n";
 print "<HTML><HEAD><TITLE>Error!!</TITLE></HEAD>";
 print "<BODY><CENTER><H1>@_</H1>";
 print "</BODY></HTML>";
 exit;
 }

