Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Обсуждение форума > Небольшой глюк при вставке кода.


Автор: korob2001 17.4.2006, 08:39
Привет!
Обнаружил такой недочёт, раньше его не было.
Допустим я вставляю такой код:
Код

#!/usr/bin/perl -w
use strict;

my %hash = <<HASH =~ /\S*?(?:\s|\n)+/g;
key1 value1
key2 value2
key3 value3
key4 value4
key5 value2
HASH

# Сортируем и выводим содержимое хеша
foreach my $key ( sort { $hash{$a} cmp $hash{$b} || $a cmp $b } keys %hash ) {
        print "$key => $hash{$key}";
}

Обратите внимение на первую и последнюю строки, они пустые.  Вставлял так:
Код

{code=perl}
#!/usr/bin/perl -w
use strict;

my %hash = <<HASH =~ /\S*?(?:\s|\n)+/g;
key1 value1
key2 value2
key3 value3
key4 value4
key5 value2
HASH

# Сортируем и выводим содержимое хеша
foreach my $key ( sort { $hash{$a} cmp $hash{$b} || $a cmp $b } keys %hash ) {
        print "$key => $hash{$key}";
}
{/code}

Конечно если сделать вот так:
Код

{code=perl}#!/usr/bin/perl -w
use strict;

my %hash = <<HASH =~ /\S*?(?:\s|\n)+/g;
key1 value1
key2 value2
key3 value3
key4 value4
key5 value2
HASH

# Сортируем и выводим содержимое хеша
foreach my $key ( sort { $hash{$a} cmp $hash{$b} || $a cmp $b } keys %hash ) {
        print "$key => $hash{$key}";
}{/code}

То всё работает. Другими словами, нужно обрезать символ перевода строки который идёт сразу же после тега {code}, а так же перед тегом {/code}, так как это было раньше.
Или это сделано с какой-то целью?
ИМХО: было намного удобнее, так как новый вариант удобен лишь в том случае, если ты написал код, потом выделяешь его и затем жмёшь кнопку "код". Я лично делаю всегда так, пишу код в редакторе, затем копирую его в буфер, после жму кнопку "код", разеляю тэги {code}{/code} символом перевода строки и вставляю код между ними. Получается примерно такая конструкция:
{code}\n
# Здесь код
\n{/code} 

Автор: Girder 17.4.2006, 08:51
Код
#!/usr/bin/perl -w
use strict;
my %hash = <<HASH =~ /\S*?(?:\s|\n)+/g;
key1 value1
key2 value2
key3 value3
key4 value4
key5 value2
HASH
# Сортируем и выводим содержимое хеша
foreach my $key ( sort { $hash{$a} cmp $hash{$b} || $a cmp $b } keys %hash ) {
        print "$key => $hash{$key}";
}


Цитата(korob2001 @  17.4.2006,  09:39 Найти цитируемый пост)
То всё работает. Другими словами, нужно обрезать символ перевода строки который идёт сразу же после тега {code}, а так же перед тегом {/code}, так как это было раньше.
Енто было всегда и уже обсуждалось!

Добавлено @ 08:51 
Как видеш... дополнительных строк нету! 

Автор: korob2001 17.4.2006, 09:40
Да нет, ты похоже не понял.
Допустим код из 2-х строк.

#!/usr/bin/perl
print "Hello\n";

Жму кнопку "КОД", появились 2 тэга {code}{/code}, форматирую их таким образом:
{code}

{/code}

Меду ними вставляю, код

{code}
#!/usr/bin/perl
print "Hello\n";
{/code}

Получаю 4 строки.

И похоже не один я так делаю, вот посмотри посты всех участников:
http://forum.vingrad.ru/index.php?showtopic=91598&st=15

Там только один, мой, пост, с нормальной нумерацией строк, так как я удалил символы перевода строки в вручную, т.е. сделал так:
{code}#!/usr/bin/perl
print "Hello\n";{/code}

Но это не очень хорошо читается при форматировании.
У всех остальных первоя строка кода пустая и последняя тоже. Причину я указал выше.

ЗЫ: раньше этого не было.   

Автор: Girder 17.4.2006, 10:00
Цитата(korob2001 @  17.4.2006,  10:40 Найти цитируемый пост)
Да нет, ты похоже не понял.
Отлично все понял.

http://forum.vingrad.ru/index.php?showtopic=78217&view=findpost&p=616882
Хотя... для quote было сделанно... можно тогда и для code сделать(и т.п.)

НО! Если чел напишет вот так... триметься не будет!
[cоde]
vvv
vv
[/cоde]

PS: Просто будет сразу оформляться типо так(при нажатии на енту кнопку):
[cоde]vvv
vv[/cоde]
  

Автор: korob2001 17.4.2006, 10:21
Можно удалять символы перевода строки после {code} и перед {/code}, перед занесением поста в базу. Выводить  в HTML без изменения, т.е. так как хранится базе (без \n), но если пост выводится в textarea, то нужно вставить два символа перевода строки после {code} и перед {/code}. 

Автор: sergejzr 17.4.2006, 13:07
Код

#!/usr/bin/perl
print "Hello\n";


Добавлено @ 13:09 
А почему больше пустые они не обрезаются? Я просто не помню, яваскриптом мы это раньше делали, или в PHP. Но мы точно обрезали их и это было правильно smile
PS: Наверное всётаки скриптом, потому что при редактировании должно также отображаться, как и при вводе. Надо глянуть.. 

Автор: sergejzr 17.4.2006, 13:34
А, понял. Все комменты вырезаются сейчас, а скрипту они нужны.
Лучше их в кодах оставлять..  

Автор: R.M. 17.4.2006, 13:55
Цитата(Girder @  17.4.2006,  09:51 Найти цитируемый пост)
Енто было всегда и уже обсуждалось!

Небыло раньше такова smile  smile  

Автор: Girder 17.4.2006, 14:29
Цитата(sergej.z @  17.4.2006,  14:34 Найти цитируемый пост)
Лучше их в кодах оставлять.. 

Серж пусть коменты режуться все...

PS: Скриптом отделим...

Добавлено @ 14:30 
Цитата(Куксикус @  17.4.2006,  14:55 Найти цитируемый пост)
Небыло раньше такова
А ты по ссылке ходил?
  

Автор: sergejzr 17.4.2006, 14:42
Ты ведь код и так спецобрабатываешь? Там комменты вначале и в конце. Отделяют голову от контента, итд. определяют начало и конец. Их лучше отавить. 

Автор: R.M. 18.4.2006, 15:22
Girder, 
Цитата(Girder @  17.4.2006,  15:29 Найти цитируемый пост)
А ты по ссылке ходил?

А ссылку ты дал на тему про цитату а не про код. Возможно конечно было но почему это никто не заметил тогда?  smile  Да нет быть такова неможет 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)