lilalo
diff l3-frontend @ 88:385499ec544a
Начал работу над текстовым представлением +
редактором журнала.
Пока что в textarea выводится текстовое представление.
Редактировать можно, но сохранять пока нельзя.
Пытался сделать автоматическое позиционирование курсора
на нужную строку.
Во-первых, не работает в Konqueror и с этим, я так понимаю,
ничего пока сделать нельзя.
Во-вторых, неверно вычисляется строка на которую нужно
позиционировать курсор.
Это, я думаю, можно подправить.
Потом, что-то намутил с utf8. Надо будет более детально
это рассмотреть
редактором журнала.
Пока что в textarea выводится текстовое представление.
Редактировать можно, но сохранять пока нельзя.
Пытался сделать автоматическое позиционирование курсора
на нужную строку.
Во-первых, не работает в Konqueror и с этим, я так понимаю,
ничего пока сделать нельзя.
Во-вторых, неверно вычисляется строка на которую нужно
позиционировать курсор.
Это, я думаю, можно подправить.
Потом, что-то намутил с utf8. Надо будет более детально
это рассмотреть
author | devi |
---|---|
date | Thu Mar 02 00:06:54 2006 +0200 (2006-03-02) |
parents | c70be67ed3d4 |
children | 62001c1e3295 |
line diff
1.1 --- a/l3-frontend Tue Feb 28 13:11:26 2006 +0200 1.2 +++ b/l3-frontend Thu Mar 02 00:06:54 2006 +0200 1.3 @@ -3,7 +3,7 @@ 1.4 use IO::Socket; 1.5 use lib '.'; 1.6 use l3config; 1.7 -use locale; 1.8 +use utf8; 1.9 1.10 our @Command_Lines; 1.11 our @Command_Lines_Index; 1.12 @@ -41,12 +41,13 @@ 1.13 1.14 sub minutes_passed; 1.15 1.16 -sub print_all; 1.17 -sub print_command_lines; 1.18 -sub print_files; 1.19 -sub print_stat; 1.20 -sub print_header; 1.21 -sub print_footer; 1.22 +sub print_all_txt; 1.23 +sub print_all_html; 1.24 +sub print_command_lines_html; 1.25 +sub print_files_html; 1.26 +sub print_stat_html; 1.27 +sub print_header_html; 1.28 +sub print_footer_html; 1.29 1.30 main(); 1.31 1.32 @@ -64,7 +65,7 @@ 1.33 load_sessions_from_xml($Config{"backend_datafile"}); 1.34 sort_command_lines; 1.35 process_command_lines; 1.36 - print_all($Config{"output"}); 1.37 + print_all_txt($Config{"output"}); 1.38 close_mywi_socket; 1.39 } 1.40 1.41 @@ -420,9 +421,9 @@ 1.42 $$cl=0; 1.43 } 1.44 } 1.45 - if ($$cl->{"class"} == "note") { 1.46 + if ($$cl->{"class"} eq "note") { 1.47 my $note_html = $$cl->{note}; 1.48 - $note_html = join ("\n", map ("<p>$_</p>", split (/-\n/, $note))); 1.49 + $note_html = join ("\n", map ("<p>$_</p>", split (/-\n/, $note_html))); 1.50 $note_html =~ s@(http:[a-zA-Z.0-9/?\_%-]*)@<a href='$1'>$1</a>@g; 1.51 $note_html =~ s@(www\.[a-zA-Z.0-9/?\_%-]*)@<a href='$1'>$1</a>@g; 1.52 $$cl->{"note_html"} = $note_html; 1.53 @@ -439,7 +440,7 @@ 1.54 Разобранный lab-скрипт должен находиться в массиве @Command_Lines 1.55 =cut 1.56 1.57 -sub print_command_lines 1.58 +sub print_command_lines_html 1.59 { 1.60 1.61 my @toc; # Оглавление 1.62 @@ -706,7 +707,7 @@ 1.63 } 1.64 1.65 ############# 1.66 -# print_all 1.67 +# make_new_entries_table 1.68 # 1.69 # Напечатать таблицу неизвестных команд 1.70 # 1.71 @@ -757,7 +758,7 @@ 1.72 } 1.73 1.74 ############# 1.75 -# print_all 1.76 +# minutes_passed 1.77 # 1.78 # 1.79 # 1.80 @@ -809,23 +810,238 @@ 1.81 } 1.82 1.83 ############# 1.84 -# print_all 1.85 +# print_all_txt 1.86 # 1.87 -# 1.88 +# Вывести журнал в текстовом формате 1.89 # 1.90 # In: $_[0] output_filename 1.91 # Out: 1.92 1.93 +sub print_all_txt 1.94 +{ 1.95 1.96 -sub print_all 1.97 + my $output_filename=$_[0]; 1.98 + my $note_number=0; 1.99 + 1.100 + my $result = q(); 1.101 + my $this_day_resut = q(); 1.102 + 1.103 + my $cl; 1.104 + my $last_tty=""; 1.105 + my $last_session=""; 1.106 + my $last_day=q(); 1.107 + my $last_wday=q(); 1.108 + my $in_range=0; 1.109 + 1.110 + my $current_command=0; 1.111 + 1.112 + my $cursor_position = 0; 1.113 + 1.114 + 1.115 + if ($Config{filter}) { 1.116 + # Инициализация фильтра 1.117 + for (split /&/,$Config{filter}) { 1.118 + my ($var, $val) = split /=/; 1.119 + $filter{$var} = $val || ""; 1.120 + } 1.121 + } 1.122 + 1.123 + 1.124 +COMMAND_LINE: 1.125 + for my $k (@Command_Lines_Index) { 1.126 + 1.127 + my $cl=$Command_Lines[$Command_Lines_Index[$current_command++]]; 1.128 + next unless $cl; 1.129 + 1.130 + 1.131 +# Пропускаем строки, которые противоречат фильтру 1.132 +# Если у нас недостаточно информации о том, подходит строка под фильтр или нет, 1.133 +# мы её выводим 1.134 + 1.135 + for my $filter_key (keys %filter) { 1.136 + next COMMAND_LINE 1.137 + if defined($cl->{local_session_id}) 1.138 + && defined($Sessions{$cl->{local_session_id}}->{$filter_key}) 1.139 + && $Sessions{$cl->{local_session_id}}->{$filter_key} ne $filter{$filter_key}; 1.140 + } 1.141 + 1.142 +# Пропускаем строки, выходящие за границу "signature", 1.143 +# при условии, что границы указаны 1.144 +# Пропускаем неправильные/прерванные/другие команды 1.145 + if ($Config{"from"} && $cl->{"cline"} =~ /$Config{"signature"}\s*$Config{"from"}/) { 1.146 + $in_range=1; 1.147 + next; 1.148 + } 1.149 + if ($Config{"to"} && $cl->{"cline"} =~ /$Config{"signature"}\s*$Config{"to"}/) { 1.150 + $in_range=0; 1.151 + next; 1.152 + } 1.153 + next if ($Config{"from"} && $Config{"to"} && !$in_range) 1.154 + || ($Config{"skip_empty"} =~ /^y/i && $cl->{"cline"} =~ /^\s*$/ ) 1.155 + || ($Config{"skip_wrong"} =~ /^y/i && $cl->{"err"} != 0) 1.156 + || ($Config{"skip_interrupted"} =~ /^y/i && $cl->{"err"} == 130); 1.157 + 1.158 + 1.159 +# 1.160 +## 1.161 +## Начинается собственно вывод 1.162 +## 1.163 +# 1.164 + 1.165 +### Сначала обрабатываем границы разделов 1.166 +### Если тип команды "note", это граница 1.167 + 1.168 + if ($cl->{class} eq "note") { 1.169 + $this_day_result .= " === ".$cl->{note_title}." === \n" if $cl->{note_title}; 1.170 + $this_day_result .= $cl->{note}."\n"; 1.171 + next; 1.172 + } 1.173 + 1.174 + my ($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime($cl->{time}); 1.175 + 1.176 + # Добавляем спереди 0 для удобочитаемости 1.177 + $min = "0".$min if $min =~ /^.$/; 1.178 + $hour = "0".$hour if $hour =~ /^.$/; 1.179 + $sec = "0".$sec if $sec =~ /^.$/; 1.180 + 1.181 + $class=$cl->{"class"}; 1.182 + 1.183 +# DAY CHANGE 1.184 + if ( $last_day ne $day) { 1.185 + if ($last_day) { 1.186 + $result .= "== ".$Day_Name[$last_wday]." == \n"; 1.187 + $result .= $this_day_result; 1.188 + } 1.189 + $last_day = $day; 1.190 + $last_wday = $wday; 1.191 + $this_day_result = q(); 1.192 + } 1.193 + 1.194 +# CONSOLE CHANGE 1.195 + if ($cl->{"tty"} && $last_tty ne $cl->{"tty"} && 0) { 1.196 + my $tty = $cl->{"tty"}; 1.197 + $this_day_result .= " #l3: ------- другая консоль ----\n"; 1.198 + $last_tty=$cl->{"tty"}; 1.199 + } 1.200 + 1.201 +# Session change 1.202 + if ( $last_session ne $cl->{"local_session_id"}) { 1.203 + $this_day_result .= "# ------------------------------------------------------------" 1.204 + . " l3: local_session_id=".$cl->{"local_session_id"} 1.205 + . " ---------------------------------- \n"; 1.206 + $last_session=$cl->{"local_session_id"}; 1.207 + } 1.208 + 1.209 +# TIME 1.210 + my @nl_counter = split (/\n/, $result); 1.211 + $cursor_position=length($result) - @nl_counter; 1.212 + 1.213 + if ($Config{"show_time"} =~ /^y/i) { 1.214 + $this_day_result .= "$hour:$min:$sec" 1.215 + } 1.216 + 1.217 +# COMMAND 1.218 + $this_day_result .= " ".$cl->{"prompt"}.$cl->{"cline"}."\n"; 1.219 + if ($cl->{"err"}) { 1.220 + $this_day_result .= " #l3: err=".$cl->{'err'}."\n"; 1.221 + } 1.222 + 1.223 +# OUTPUT 1.224 + my $last_command = $cl->{"last_command"}; 1.225 + if (!( 1.226 + $Config{"suppress_editors"} =~ /^y/i && grep ($_ eq $last_command, @{$Config{"editors"}}) || 1.227 + $Config{"suppress_pagers"} =~ /^y/i && grep ($_ eq $last_command, @{$Config{"pagers"}}) || 1.228 + $Config{"suppress_terminal"}=~ /^y/i && grep ($_ eq $last_command, @{$Config{"terminal"}}) 1.229 + )) { 1.230 + my $output = $cl->{short_output}; 1.231 + if ($output) { 1.232 + $output =~ s/^/ |/mg; 1.233 + } 1.234 + $this_day_result .= $output; 1.235 + } 1.236 + 1.237 +# DIFF 1.238 + if ( $Config{"show_diffs"} =~ /^y/i && $cl->{"diff"}) { 1.239 + my $diff = $cl->{"diff"}; 1.240 + $diff =~ s/^/ |/mg; 1.241 + $this_day_result .= $diff; 1.242 + }; 1.243 +# SHOT 1.244 + if ($Config{"show_screenshots"} =~ /^y/i && $cl->{"screenshot"}) { 1.245 + $this_day_result .= " #l3: screenshot=".$cl->{'screenshot'}."\n"; 1.246 + } 1.247 + 1.248 +#NOTES 1.249 + if ( $Config{"show_notes"} =~ /^y/i && $cl->{"note"}) { 1.250 + my $note=$cl->{"note"}; 1.251 + $note =~ s/\n/\n#^/msg; 1.252 + $this_day_result .= "#^ == ".$cl->{note_title}." ==\n" if $cl->{note_title}; 1.253 + $this_day_result .= "#^ ".$note."\n"; 1.254 + } 1.255 + 1.256 + } 1.257 + last: { 1.258 + $result .= "== ".$Day_Name[$last_wday]." == \n"; 1.259 + $result .= $this_day_result; 1.260 + } 1.261 + 1.262 + 1.263 + 1.264 + 1.265 + my $SetCursorPosition_JS = <<JS; 1.266 +function setCursorPosition(oInput,oStart,oEnd) { 1.267 + oInput.focus(); 1.268 + if( oInput.setSelectionRange ) { 1.269 + oInput.setSelectionRange(oStart,oEnd); 1.270 + } else if( oInput.createTextRange ) { 1.271 + var range = oInput.createTextRange(); 1.272 + range.collapse(true); 1.273 + range.moveEnd('character',oEnd); 1.274 + range.moveStart('character',oStart); 1.275 + range.select(); 1.276 + } 1.277 +} 1.278 +JS 1.279 + 1.280 + if ($output_filename eq "-") { 1.281 + print 1.282 + "<html>" 1.283 + ."<script>" 1.284 + .$SetCursorPosition_JS 1.285 + ."</script>" 1.286 + ."<body onLoad='setCursorPosition(document.all.mytextarea, $cursor_position, $cursor_position+10)'>" 1.287 + ."<textarea rows='30' cols='100' wrap='off' id='mytextarea'>$result</textarea>" 1.288 + ."</body>" 1.289 + ."</html>" 1.290 + ; 1.291 + } 1.292 + else { 1.293 + open(OUT, ">", $output_filename) 1.294 + or die "Can't open $output_filename for writing\n"; 1.295 + print OUT "<pre>$result</pre>"; 1.296 + close(OUT); 1.297 + } 1.298 +} 1.299 + 1.300 + 1.301 +############# 1.302 +# print_all_html 1.303 +# 1.304 +# 1.305 +# 1.306 +# In: $_[0] output_filename 1.307 +# Out: 1.308 + 1.309 + 1.310 +sub print_all_html 1.311 { 1.312 my $output_filename=$_[0]; 1.313 1.314 my $result; 1.315 - my ($command_lines,$toc) = print_command_lines; 1.316 - my $files_section = print_files; 1.317 + my ($command_lines,$toc) = print_command_lines_html; 1.318 + my $files_section = print_files_html; 1.319 1.320 - $result = print_header($toc); 1.321 + $result = print_header_html($toc); 1.322 1.323 1.324 # $result.= join " <br/>", keys %Sessions; 1.325 @@ -839,7 +1055,7 @@ 1.326 $result.= "<h2 id='stat'>Статистика</h2>" . print_stat; 1.327 $result.= "<h2 id='help'>Справка</h2>" . $Html_Help . "<br/>"; 1.328 $result.= "<h2 id='about'>О программе</h2>". $Html_About. "<br/>"; 1.329 - $result.= print_footer; 1.330 + $result.= print_footer_html; 1.331 1.332 if ($output_filename eq "-") { 1.333 print $result; 1.334 @@ -853,14 +1069,14 @@ 1.335 } 1.336 1.337 ############# 1.338 -# print_header 1.339 +# print_header_html 1.340 # 1.341 # 1.342 # 1.343 # In: $_[0] Содержание 1.344 # Out: Распечатанный заголовок 1.345 1.346 -sub print_header 1.347 +sub print_header_html 1.348 { 1.349 my $toc = $_[0]; 1.350 my $course_name = $Config{"course-name"}; 1.351 @@ -978,14 +1194,14 @@ 1.352 1.353 1.354 ############# 1.355 -# print_footer 1.356 +# print_footer_html 1.357 # 1.358 # 1.359 # 1.360 # 1.361 # 1.362 1.363 -sub print_footer 1.364 +sub print_footer_html 1.365 { 1.366 return "</body>\n</html>\n"; 1.367 } 1.368 @@ -994,14 +1210,14 @@ 1.369 1.370 1.371 ############# 1.372 -# print_stat 1.373 +# print_stat_html 1.374 # 1.375 # 1.376 # 1.377 # In: 1.378 # Out: 1.379 1.380 -sub print_stat 1.381 +sub print_stat_html 1.382 { 1.383 %StatNames = ( 1.384 FirstCommand => "Время первой команды журнала", 1.385 @@ -1106,7 +1322,7 @@ 1.386 } 1.387 1.388 1.389 -sub print_files 1.390 +sub print_files_html 1.391 { 1.392 my $result = qq(); 1.393 my @toc;