Revision 3 (by ahitrov@rambler.ru, 2010/03/24 15:19:32) The CORE
<% $body %>
<%args>

	$doc	=> undef
	$field	=> 'body'
	$text	=> undef
	$imagefield	=> 'pictures'
	$imageclass	=> ''
	$rel		=> undef
	$target		=> undef
	$onclick	=> undef

</%args>
<%init>

  return	unless ref $doc || $text;
  use locale;
  my $body = $text || $doc->$field;
  $body =~ s/\r//sgi;
  $body =~ s/[\n\t\ ]*$//sgi;
  if ($body !~ /(<br|<p)/i) {
        $body =~ s/([^\n])\n([^\n])/$1<br>\n$2/gi;
        $body =~ s/\n{2,}/<\/p>\n\n<p>/gi;
  }
  $body =~ s/\[br\]/<br>/gi;
  if ( ref $doc ) {
	my $iclass = $imageclass ? ' class="'.$imageclass.'"' : '';
	while ( $body =~ /\[%\ *(\w+)\ *%\]/gi ){
		my $img_id = $1;
		my $images = $doc->get_image($img_id);
		if ( !(ref $images && exists $images->{filename} ) && $img_id =~ /^([a-z]+)_(\d+)$/i ) {
			my $iid = $2;
			$images = $doc->get_image($1);
			$images = exists $images->{"image_$iid"} ? $images->{"image_$iid"} : undef;
		}
		if ( !(ref $images && exists $images->{filename}) && $imagefield && $img_id =~ /^$imagefield\_(\d+)$/ ) {
			$images = $doc->get_image($imagefield);
			my $iid = $img_id;
			$iid =~ s/$imagefield/image/;
			$images = exists $images->{$iid} ? $images->{$iid} : undef;
		}
		my $IMG = '';
		if ( ref $images && exists $images->{filename} ) {
			if ( $rel || $target || $onclick ) {
				my ($a1,$a2) = defined $rel ? ('<a href="'.$images->{filename}.'" target="_blank" rel="'.$rel.'">','</a>') 
						: defined $onclick ? ('<a href="'.$images->{filename}.'" target="_blank" onclick="'.$onclick.'(\''.$images->{filename}.'\')">','</a>')
						: defined $target ? ('<a href="'.$images->{filename}.'" target="'.$target.'">','</a>')
						: ('','');
				$IMG = $a1.'<img src="'.$images->{mini}{filename}.'" width="'.$images->{mini}{width}.'" height="'.$images->{mini}{height}.'" border="0"'.$iclass.'>'.$a2;
			} else {
				$IMG = '<img src="'.$images->{filename}.'" width="'.$images->{width}.'" height="'.$images->{height}.'" border="0"'.$iclass.'>';
			}
			$body =~ s/\[%\ *$img_id\ *%\]/$IMG/si;
		}
	}
  }

</%init>

Небольшая справка по веткам

cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.

koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.

utf8 – актуальная ветка, заточенная под UTF-8.

Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.