?

Log in

No account? Create an account

Вт, 19 июн, 2007, 00:51
Doxygen vs phpDocumentor, часть 2. INPUT_FILTER

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

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

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

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

  3. По описанию функции прописывает возвращаемый тип (тэг @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)
    ?>

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

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


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

    Текущую версию doxyphp можно взять тут: doxyphp.tgz.
    В конфиге доксигена следует указать:
        INPUT_FILTER           = "/usr/bin/php doxyphp.php"
        FILTER_SOURCE_FILES    = YES
    Тестировалось всё на php5.
  • (Удалённый комментарий)

    Вт, 5 фев, 2008 15:11 (UTC)
    (Anonymous)

    Может кто знает? Возможно ли с помощью Doxygen извлечь следующую информацию из кода:
    имя класса->имя процедуры(метода)->имя переменной->область действия переменной(описывается в коде)?

    Вт, 19 июн, 2007 07:07 (UTC)
    murrid

    С Днем Рождения, Друг !

    P.S. - фильтр заценил, сильно!

    Вт, 5 фев, 2008 15:13 (UTC)
    (Anonymous)

    Может кто знает? Возможно ли с помощью Doxygen извлечь следующую информацию из кода:
    имя класса->имя процедуры(метода)->имя переменной->область действия переменной(описывается в коде)?

    Вт, 3 ноя, 2009 22:40 (UTC)
    (Anonymous)

    А где сейчас взять ваш фильтр? Домен где раньше он лежал больше не работает. Нет ли возможности выложить его-где-то в другом месте.

    Пн, 4 янв, 2010 20:38 (UTC)
    (Anonymous)

    К пхп 5.3 не пробовали написать фильтр? )

    Где сейчас можно взять ваш фильтр? по ссылке не отрывается...