Doxygen vs phpDocumentor, часть 2. INPUT_FILTER

Источник: http://skn.livejournal.com/

Недавно опять вернувшись к проблеме выбора между doxygen'ом и phpDocumentor'ом (Doxygen vs phpDocumentor) решил написать для доксигена свой INPUT_FILTER. В прошлый раз как-то не стал изучать детально этот вопрос, просто порывшись в инете и не найдя ни одного фильтра для PHP забил на это.

Написал... классно получилось:) По сути фильтр решает все проблемы использования доксигена для php, которые я описывал ранее.

Фильтр делает следующие преобразования:

Заменяет self и parent на имена классов, т.к. доксиген их не понимает.
По тэгу @var прописывает типы у свойств и констант классов.
< ?
/**
* foo
* @var array
*/
public $foo;
//----------------------------------------------------------->
/**
* foo
*/
public array $foo;
?>

По описанию функции прописывает возвращаемый тип (тэг @return)
и типы параметров (@param). Если не задан return, то прописывает void.
< ?
/**
* Foo.
* @param string[] $bar1 Desciption...
* @param array $bar2 Desciption...
* @return array Desciption...
*/
public function foo($bar1, $bar2)
//----------------------------------------------------------->
/**
* Foo.
* @param $bar1 Desciption...
* @param $bar2 Desciption...
* @return Desciption...
*/
public function array foo(string[] $bar1, array $bar2)
?>

Заменяет ZendStudio-описание класса объекта на строку кода: "Type Object;" - определение переменной в Си.
В результате чего доксиген начинает прослеживать обращение к методам объектов заданных не явно (как альтернатива рефлексии:)).
< ?
/* @var $oMyVar My_Class */
//----------------------------------------------------------->
My_Class $MyVar;
?>

Убивает у всех переменных бакс (если DoxyphpConfig::$baks true).
Доксиген начинает понимать ссылки на св-ва класса (а с баксом обламывается).
Плюс документация получается красивше, т.к. $ в заточенном под Си доксигене выделяется отдельно от переменной.
Заменяет определение глобальных констант в стиле PHP (define)
на стиль Си: "const CONST = VALUE;" Т.к. define доксиген не понимает и соответственно
не видит объявленные константы.
Проставляет у всех переменных при присваивание значения префикс ("LN::").
Чтоб доксиген не воспринимал их как глобальные и не делал перекрестные ссылки.
Заменяет тэг package на addtogroup. Чтоб при обработке кода заточенного
под phpDocumentor доксиген не делал namespace из пакета (эт я для тестов натравливал фильтр на пакеты пира:)).
Заменяет "abstract class" на "class", т.к. доксиген абстрактные классы
обзывает протоколом и не прослеживает наследование для них.

Пример:
Имеем код
док phpDocumentor 1.3.1
док doxygen 1.5.2+graphviz
док doxygen 1.5.2+graphviz+doxyphp

В конфиге доксигена следует указать:
INPUT_FILTER = "/usr/bin/php doxyphp.php"
FILTER_SOURCE_FILES = YES

Тестировалось всё на php5.

Оставить комментарий

You must be авторизироватся для добавления комментария.