- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
# save all blocks to %blocks. Replace first block with <block blockname />
sub _parse_block {
my $tag = $_[1];
last unless $_[0]=~s#($tag->[0]block +([^ /]*?) *$tag->[1])((.*?)$tag->[0]/?block$tag->[1])#
my($opentag,$source,$bname,$bcode, $retval) = ($1,$3, $2, $4, '');
if( $bcode =~m|$tag->[0]block +[^ /]*? *$tag->[1]|){
_parse_block($source, $tag);
$retval = $opentag.$source;
}else{
$retval = "$tag->[0]block $bname /$tag->[1]" unless exists $blocks{$bname};
$bcode=~s%$tag->[0](:? |/)*parent(:? |/)*$tag->[1]%$blocks{$bname}%g;
$blocks{$bname} = $bcode;
}
$retval;
#seg;
}
foreach my $tag( @{$self->{tag_symbols}} ){
_parse_block($code,$tag) while(1);
}
#if <blockmode> turned on, delete all data that not in blocks until </blockmode> or end of code
foreach my $tag( @{$self->{tag_symbols}} ){
$code=~s%$tag->[0] *blocks?(?:mode?)? *$tag->[1](.*?)(?:(?:$tag->[0] *\/ *blocks?(?:mode?)? *$tag->[1])|(';#end of code))%
$_ = $1; my $end_of_code = $2;
my $retval;
$retval .= $1 while( m/($tag->[0]block +[^ ]*? *\/.*?$tag->[1])/g );
$retval.$end_of_code;
%esg;
#
}
# replace <block blockname /> with a code block
foreach my $tag( @{$self->{tag_symbols}} ){
while($code=~s|$tag->[0]block +([A-zА-я0-9_-]*?) */.*?$tag->[1]|$blocks{$1}|eg){};
};
Кусок шаблонизатора. Парсинг вложенных тегов регулярками.
А вы бы за что?
то же /[A-zА-я]/ чего стоит...
с такими регулярками, можно было бы уже и сабрутин на-eval()-ить и закэшировать.
ЗЫ интересно какой редактор вот те `#seg;` и `%esg;` правильно вообще захайлайтит? надо будет в емаксе этот код открыть.
Хайлайтится с кастомными разделителями нормально нотпадом++, только код в замене не хайлайтится как код.
Вообще это мой старый код, он говно, стоило бы сделать на стеках, а не этой рекурсивной регуляркохуйне, но переписывать лень, оно просто работает.
kate (katepart) к примеру. Пруфпик: http://rghost.ru/42744334/image.png
Вы так говорите, будто vim находится примерно на том же уровне, что блокнот.
Другого знаешь? Говноблогер такой
Kakou ykpauHckuu TpaHcJIuT )))
ненавижу, когда букву щэ записывают через дуппель вэ
блядь
а где system("pause")?
Угадайте компилятор с одной попытки.
мой любимый
А компилятор, скорее всего, «Turbo C/C++» или «Borland C/C++».
В каком порядке следуют прототипы, всем насрать, они же друг на друга не ссылаются и к физическому порядку в библиотеке тоже не привязаны.
лол)
под dos нужен был специфичный API, но был и ansi.sys (для понимагния ESC кодов терминалав)
Винда свременная умеет только ConsoleAPI, но есть уже проект и
виндотерминала тоже
В conio/crt был gotoxy
ахахах, бивис
ты слышал?
Он сказал "иди ху"