igor@66: #!/usr/bin/perl igor@66: igor@66: our $change_matix = ''; igor@66: igor@66: our $change_matrix = ' igor@66: um über mit von vom nach zum zur in an auf igor@66: der das des dem den ein einer einem einen eines igor@66: '; igor@66: igor@66: our $change_matrix = ' igor@66: router network ip route igor@66: '; igor@66: igor@66: if (open(FILE, $ARGV[0])) { igor@66: local $/; igor@66: $change_matrix = <FILE>; igor@66: } igor@66: shift @ARGV; igor@66: igor@66: my $BaseURL = $ARGV[0]; igor@66: shift; igor@66: igor@66: my $Subdir = $ARGV[0]; igor@66: shift; igor@66: igor@66: my $StateFile = $ARGV[0]; igor@66: shift; igor@66: igor@66: sub load_state() igor@66: { igor@66: my %state; igor@66: my $entries = 0; igor@66: if (open(FILE, "$StateFile")) { igor@66: while(<FILE>) { igor@66: chomp; igor@66: my ($k,$v) = split /\s+/, $_, 2; igor@66: $state{$k} = $v; igor@66: $entries += 1; igor@66: } igor@66: } igor@66: $state{"ENTRIES"} = $entries; igor@66: return \%state; igor@66: } igor@66: igor@66: @colors = qw(ccccff 7aedaa ddeecc ffccee); igor@66: igor@66: our %change_matrix; igor@66: our %color; igor@66: our $dropdown_number = 0; igor@66: igor@66: $i = 0; igor@66: for (split /\n/, $change_matrix){ igor@66: next if /^\s*$/; igor@66: my @words = sort(split /\s+/); igor@66: for my $kw (@words) { igor@66: $change_matrix{$kw} = [ "???", @words ]; igor@66: $color{$kw} = $colors[$i%@colors]; igor@66: } igor@66: # uppercase igor@66: for (@words) { igor@66: s/(.)(.*)/\U$1\E$2/; igor@66: } igor@66: for my $kw (@words) { igor@66: $change_matrix{$kw} = [ "???", @words ]; igor@66: $color{$kw} = $colors[$i%@colors]; igor@66: } igor@66: $i += 1; igor@66: }; igor@66: igor@66: #for (keys(%change_matrix)) { igor@66: # print "$_ => ".join(", ", @{$change_matrix{$_}})."\n"; igor@66: # print "$_ => ".$color{$_}."\n"; igor@66: #} igor@66: our $CorrectAnswers = 0; igor@66: igor@66: sub generate_drop_down($$) igor@66: { igor@66: my $word = $_[0]; igor@66: my %state = %{$_[1]}; igor@66: igor@66: my $name = "dropdown$dropdown_number"; igor@66: my $value = $state{$name}; igor@66: $dropdown_number += 1; igor@66: my @variants = @{$change_matrix{$word}}; igor@66: $options = join("", map {my $selected = ""; $selected='selected="selected"' if $_ eq $value; "<option value=$_ $selected>$_</option>"} @variants); igor@66: my $color = $color{$word}; igor@66: if ($word eq $value) { igor@66: $color = "ffffff"; igor@66: $CorrectAnswers += 1; igor@66: } igor@66: if ($color) { igor@66: $color = "background:#$color"; igor@66: } igor@66: my $disabled = ""; igor@66: if ($value eq $word) { igor@66: $disabled = "disabled"; igor@66: } igor@66: my $onchange = "onchange='javascript:myAlert(\"$name\", this.form.$name, \"$word\")'"; igor@66: return "<form style='display:inline!important;'><select name='$name' $value $disabled $onchange style='font-size:80%; $color'>".$options."</select></form>"; igor@66: } igor@66: sub highlight_word($$$) igor@66: { igor@66: my $tag = $_[0]; igor@66: my $text = $_[1]; igor@66: my $state = $_[2]; igor@66: igor@66: if ($tag=~/^<[aA]/) { igor@66: return $tag.$text; igor@66: } igor@66: my $re = join("|", keys(%change_matrix)); igor@66: $text =~ s@(^|[;> ])($re)(?=([ <]|$))@"$1".generate_drop_down($2, $state)@egms; igor@66: return $tag.$text; igor@66: } igor@66: igor@66: my $state = load_state(); igor@66: #my %a = %{$state}; igor@66: #print join(", ", keys(%a)),"\n"; igor@66: igor@66: $jquery = "<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js'></script>"; igor@66: local $/; igor@66: $text = <>; igor@66: $text =~ s@(<a.*?>)(.*?)(</a>)@$2@g; igor@66: $text =~ s@(.*)(<body[^>]*>)@$2@ims; igor@66: my $before_body = $1; igor@66: $text =~ s@(</body[^>]*>)@<script type='text/javascript'>memo_init();</script>$1@ims; igor@66: $text =~ s/(<.*?>)([^<]*)(?=<)/highlight_word($1, $2, $state)/egms; igor@66: $text = $before_body.$text; igor@66: igor@66: my $wrong_answers = $$state{"ENTRIES"} - $CorrectAnswers; igor@66: $info_div = " igor@66: <div style=' igor@66: position:fixed; igor@66: bottom:0; igor@66: right:0; igor@66: color:white; igor@66: background-color:green; igor@66: font-size:70%; igor@66: padding:5pt; igor@66: z-index:1000; igor@66: border-top-left-radius: igor@66: 5pt;-moz-border-radius-topleft:5pt; igor@66: '> igor@66: <span id='wrong_answers' style='color:#ff2222;'>$wrong_answers</span> igor@66: <span id='correct_answers'>$CorrectAnswers</span> igor@66: <span id='yet_to_answer'>$dropdown_number</span> igor@66: </div>"; igor@66: igor@66: $text =~ s@(<body[^>]*>)@<script type="text/javascript">var memo_subdir="$Subdir";</script><script type="text/javascript" src="http://xgu.ru/memo_files/memo.js"></script>$jquery$1$info_div@i; igor@66: $text =~ s@(<head[^>]*>)@$1<base href="$BaseURL">@i; igor@66: print $text;