Changeset 75043 in spip-zone


Ignore:
Timestamp:
Aug 28, 2013, 5:35:30 PM (8 years ago)
Author:
marcimat@…
Message:

Permettre de redéfinir de répertoire de sortie, lorsque les sources parsées sont un plugin SPIP, retrouver des informations dans le paquet.xml ou le fichier de langue du paquet pour générer la commande de titre, et la présentation du sommaire.

Location:
_galaxie_/code.spip.net/autodoc/trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • _galaxie_/code.spip.net/autodoc/trunk/installation.md

    r74973 r75043  
    108108                <chemin   value="autodoc/" />
    109109                <proposer value="oui" />
    110                 <introduction value="Documentation automatique du code PHP de SPIP." />
    111                 <presentation value="Cette documentation est extraite automatiquement à partir du code source
    112                         PHP de la version en développement de SPIP." />
     110                <titre        value="Documentation du code de SPIP." />
     111                <introduction value="Documentation du code PHP de SPIP." />
     112                <presentation value="Cette documentation est extraite du code source PHP de la version en développement de SPIP." />
    113113        </options>
    114114
     
    124124      un site SPIP ayant activé le plugin Zora Docblock (préfixe zoradocblock), qui permet de gérer
    125125      ces demandes d'amélioration.
     126- titre :
     127      si présent, définit le titre affiché dans l'entête de page par ce texte.
    126128- description :
    127129      si présent, ajoute cette information sur le sommaire de la documentation automatique générée.
  • _galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Helpers/Command/FromDirectory.php

    r74978 r75043  
    2424            ->setName('from:directory')
    2525            ->setDescription("Exécuter l'autodoc sur un répertoire donné")
     26            ->setHelp("Si le répertoire cible est un plugin SPIP, certaines informations seront extraites du paquet.xml et du fichier de langue.")
    2627            ->addArgument('directory', InputArgument::REQUIRED, "Chemin du répertoire. <comment>Exemple : '/home/user/www/spip/plugins/fabrique'</comment>")
    2728            ->addOption('prefixe', 'p', InputOption::VALUE_OPTIONAL, 'Préfixe servant au stockage des données', 'default')
     29            ->addOption('sortie', 's', InputOption::VALUE_OPTIONAL, "Répertoire (relatif ou absolu) recevant le HTML généré. <comment>Défaut : 'work/output/{prefixe}'</comment>")
    2830            ;
    2931    }
  • _galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Helpers/Command/FromPlugin.php

    r74978 r75043  
    2424        $this
    2525            ->setName('from:plugin')
    26             ->setDescription("Exécuter l'autodoc sur un plugin de la Zone")
     26            ->setDescription("Exécuter l'autodoc sur un plugin de la Zone.")
     27            ->setHelp("Certaines informations seront extraites du paquet.xml et du fichier de langue.")
    2728            ->addArgument('chemin', InputArgument::REQUIRED, "Chemin depuis _plugins_ du svn de la zone. <comment>Exemple : 'fabrique/trunk'</comment>")
    2829            ->addOption('prefixe', 'p', InputOption::VALUE_OPTIONAL, 'Préfixe servant au stockage des données', 'plugin')
     30            ->addOption('sortie', 's', InputOption::VALUE_OPTIONAL, "Répertoire recevant le HTML généré. Chemin absolu ou relatif au répertoire 'work'. <comment>Défaut : 'output/{prefixe}'</comment>")
    2931            ;
    3032    }
  • _galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Helpers/Command/FromSpip.php

    r74978 r75043  
    2626            ->setDescription("Exécuter l'autodoc sur le code de SPIP")
    2727            ->addArgument('chemin', InputArgument::OPTIONAL, "Chemin dans l'arborescence du svn du core. <comment>Exemple : 'spip' ou 'branches/spip-3.0'</comment>", 'spip')
    28             ->addOption('prefixe', 'p', InputOption::VALUE_OPTIONAL, 'Préfixe servant au stockage des données', 'spip')
     28            ->addOption('prefixe', 'p', InputOption::VALUE_OPTIONAL, "Préfixe servant au stockage des données", 'spip')
     29            ->addOption('sortie', 's', InputOption::VALUE_OPTIONAL, "Répertoire recevant le HTML généré. Chemin absolu ou relatif au répertoire 'work'. <comment>Défaut : 'output/{prefixe}'</comment>")
     30
     31#            ->addOption('titre', '', InputOption::VALUE_OPTIONAL, 'Titre du projet. Utilise le nom de la branche par défaut.')
     32#            ->addOption('description',  '', InputOption::VALUE_OPTIONAL, 'Description du projet. Prédéfini sur le titre par défaut.')
     33#            ->addOption('presentation', '', InputOption::VALUE_OPTIONAL, 'Présentation du projet. Vide par défaut.')
    2934            ;
    3035    }
  • _galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Helpers/Command/FromSvn.php

    r74978 r75043  
    2525            ->setName('from:svn')
    2626            ->setDescription("Exécuter l'autodoc sur une source SVN donnée")
     27            ->setHelp("Si le répertoire cible est un plugin SPIP, certaines informations seront extraites du paquet.xml et du fichier de langue.")
    2728            ->addArgument('source', InputArgument::REQUIRED, "URL de la source SVN. <comment>Exemple : 'svn://trac.rezo.net/spip/spip'</comment>")
    2829            ->addOption('prefixe', 'p', InputOption::VALUE_OPTIONAL, 'Préfixe servant au stockage des données', 'default')
     30            ->addOption('sortie', 's', InputOption::VALUE_OPTIONAL, "Répertoire recevant le HTML généré. Chemin absolu ou relatif au répertoire 'work'. <comment>Défaut : 'output/{prefixe}'</comment>")
    2931            ;
    3032    }
  • _galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Helpers/Command/FromZone.php

    r74978 r75043  
    2525            ->setName('from:zone')
    2626            ->setDescription("Exécuter l'autodoc sur un répertoire de la Zone")
     27            ->setHelp("Si le répertoire cible est un plugin SPIP, certaines informations seront extraites du paquet.xml et du fichier de langue.")
    2728            ->addArgument('chemin', InputArgument::REQUIRED, "Chemin dans l'arborescence du svn de la zone. <comment>Exemple : '_plugins_/fabrique/trunk'</comment>")
    2829            ->addOption('prefixe', 'p', InputOption::VALUE_OPTIONAL, 'Préfixe servant au stockage des données', 'plugin')
     30            ->addOption('sortie', 's', InputOption::VALUE_OPTIONAL, "Répertoire recevant le HTML généré. Chemin absolu ou relatif au répertoire 'work'. <comment>Défaut : 'output/{prefixe}'</comment>")
    2931            ;
    3032    }
  • _galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Helpers/Generator.php

    r74979 r75043  
    2222    private $files    = array();
    2323    private $options = array('dirs' => array()); // forcer des répertoires en dehors des options de ligne de commande
     24    private $commands = array(); // forcer des commandes spécifiques à phpdocumentor
    2425
    2526    /**
     
    5152     * Générer la documentation à partir du SVN de SPIP
    5253     *
     54     * Retrouve le nom de la version utilisée et s'en sert de titre.
     55     *
    5356     * @param string $chemin Chemin dans le svn
    5457    **/
    5558    public function generateFromSpip($chemin) {
    5659        $core = "svn://trac.rezo.net/spip/$chemin";
    57         return $this->generateFromSvn($core);
     60
     61        $prefixe = $this->input->getOption('prefixe');
     62        $ok =  $this->createDirectories($prefixe)
     63            && $this->getSvnSource($core);
     64
     65        if (!$ok) return false;
     66
     67
     68        $titre = "";
     69        if ($this->input->hasOption('titre')) {
     70            $titre = $this->input->getOption('titre');
     71        }
     72
     73        // retrouver la version de SPIP
     74        if (!$titre and file_exists($inc_version = $this->dirs['input'] . '/ecrire/inc_version.php')) {
     75            $inc_version = file_get_contents($inc_version);
     76            if (preg_match('/spip_version_branche = "([^"]+)";/', $inc_version, $res)) {
     77                $titre = "SPIP " . $res[1];
     78            }
     79        }
     80
     81        if ($titre) {
     82            $this->setCommand('title', $titre);
     83            $this->setOption('titre', $titre);
     84            $this->setOption('description', "Documentation du code PHP de " . $titre);
     85        }
     86
     87        return $this->generateFromDirectory($this->dirs['input'], true);
    5888    }
    5989
     
    100130        }
    101131        $ok =  $ok
     132            && $this->retrouverInfoPaquetXml()
    102133            && $this->prepareConfigXml();
    103134
     
    143174        $this->output->writeln("* Vérifier/créer les répertoires de travail dans <info>$_work</info>");
    144175
     176        # si un répertoire de sortie est indiqué, forcer son utilisation.
     177        if ($this->input->hasOption('sortie') and $dir_output = $this->input->getOption('sortie')) {
     178            $this->setOption('dirs/output', $dir_output);
     179        }
     180
    145181        foreach (array('output', 'input', 'log', 'cache') as $dir) {
    146182            // valeur par défaut, en fonction du préfixe
     
    148184
    149185            // valeur forcée dans certains cas
    150             if (isset($this->options['dirs'][$dir]) and $path = $this->options['dirs'][$dir]) {
     186            if ($path = $this->getOption("dirs/$dir")) {
    151187                $this->dirs[$dir] = $path;
    152188            }
     
    286322
    287323    /**
     324     * Obtient une option, soit de la ligne de commande, soit forcée par le générateur
     325     *
     326     * @param string $name Nom de l'option
     327     * @return mixed
     328    **/
     329    private function getOption($name, $default = null) {
     330        if (strpos($name, '/') === false) {
     331            if ($this->input->hasOption($name) and $valeur = $this->input->getOption($name)) {
     332                return $valeur;
     333            }
     334
     335            if (isset($this->options[$name]) and $this->options[$name]) {
     336                return $this->options[$name];
     337            }
     338
     339            return $default;
     340        }
     341
     342        $name = explode('/', $name);
     343        $pointeur = &$this->options;
     344        while (true) {
     345            $n = array_shift($name);
     346            if (!isset($pointeur[$n])) {
     347                return $default;
     348            }
     349            if (!count($name)) {
     350                return $pointeur[$n];
     351            }
     352            if (!is_array($pointeur[$n])) {
     353                return $default;
     354            }
     355            $pointeur = &$pointeur[$n];
     356        }
     357    }
     358
     359
     360    /**
     361     * Enregistre une option (forcée par le générateur)
     362     *
     363     * Permet d'enregistrer avec des chemins par /
     364     *
     365     * @example
     366     *      $this->setOption('dirs/output', $dir)
     367     *
     368     * @param string $name Nom de l'option
     369     * @param string $value Valeur de l'option
     370    **/
     371    private function setOption($name, $value) {
     372        $name = explode('/', $name);
     373        $n = array_shift($name);
     374        $pointeur = &$this->options;
     375        while ($name) {
     376            if (!is_array($pointeur[$n])) {
     377                $pointeur[$n] = array();
     378            }
     379            $pointeur = &$pointeur[$n];
     380            $n = array_shift($name);
     381        }
     382        $pointeur[$n] = $value;
     383    }
     384
     385    /**
     386     * Récupère une option de commande pour phpDocumentor
     387     *
     388     * @param string $command Nom de la commande
     389     * @return mixed
     390    **/
     391    private function getCommand($command) {
     392        if (isset($this->commands[$command])) {
     393            $val = $this->commands[$command];
     394            return " --$command=\"$val\"";
     395        }
     396        return null;
     397    }
     398
     399    /**
     400     * Enregistre une option de commande pour phpDocumentor
     401     *
     402     * @param string $command Nom de la commande
     403     * @param string $value Valeur de la commande
     404    **/
     405    private function setCommand($command, $value) {
     406        $this->commands[$command] = $value;
     407    }
     408
     409
     410
     411    /**
     412     * Retrouver des infos du paquet.xml si on le trouve
     413     *
     414     * Définir avec le titre, et une présentation (si ce n'est déjà fait).
     415     *
     416     * @return bool true si on a trouvé un paquet.xml
     417    **/
     418    private function retrouverInfoPaquetXml() {
     419        $source = $this->dirs['input'];
     420        $is_spip = false;
     421        if (!file_exists($paquet = $source . '/paquet.xml')) {
     422            $is_spip = true;
     423            if (!file_exists($paquet = $source . '/ecrire/paquet.xml')) {
     424                return false;
     425            }
     426        }
     427       
     428        $paquet = simplexml_load_file($paquet);
     429        if (!$paquet) return false;
     430
     431        $this->output->writeln("<comment>    > Paquet.xml trouvé.</comment>");
     432
     433        $nom     = (string)$paquet->nom;
     434        $version = (string)$paquet['version'];
     435        $prefixe = (string)$paquet['prefix'];
     436        $documentation = $developpement = $lien_plugins_spip = '';
     437
     438        if (isset($paquet['documentation'])) {
     439            $documentation = $paquet['documentation'];
     440        }
     441        if (isset($paquet['developpement'])) {
     442            $developpement = $paquet['developpement'];
     443        }
     444        if (!$is_spip) {
     445            $lien_plugins_spip = "http://plugins.spip.net/$prefixe.html";
     446
     447            // si le nom n'est pas renseigné, chercher dans la chaîne de langue.
     448            if (!$nom) {
     449                $langue = $source . "/lang/paquet-$prefixe"."_fr.php";
     450                if (file_exists($langue)) {
     451                    $GLOBALS['idx_lang'] = 'pour_autodoc';
     452                    defined('_ECRIRE_INC_VERSION') || define('_ECRIRE_INC_VERSION', 1);
     453                    @include $langue;
     454                    $infos = $GLOBALS['pour_autodoc'];
     455                    if (is_array($infos) and isset($infos["$prefixe" . "_nom"])) {
     456                        $nom = $infos["$prefixe" . "_nom"];
     457                    }
     458                }
     459            }
     460        }
     461
     462        if (!$this->getOption('titre') and $nom) {
     463            $this->setOption('titre', $nom);
     464        }
     465
     466        if (!$this->getOption('presentation')) {
     467
     468            if ($is_spip) {
     469                $presentation = "Cette documentation est issue du code source PHP de SPIP $version.&#13;&#10;&#13;&#10;";
     470            } else {
     471                $presentation = "Cette documentation est issue du code source PHP du plugin « ".$nom." », version $version.&#13;&#10;&#13;&#10;";
     472            }
     473
     474            if (!$is_spip OR $documentation OR $developpement) {
     475                if (!$is_spip) {
     476                    $presentation .= "- [Description dans l'annuaire des plugins]($lien_plugins_spip)&#13;&#10;";
     477                }
     478                if ($documentation) {
     479                    $presentation .= "- [Documentation]($documentation)&#13;&#10;";
     480                }
     481                if ($developpement) {
     482                    $presentation .= "- [Outil de développement]($developpement)&#13;&#10;";
     483                }
     484            }
     485            $this->setOption('presentation', $presentation);
     486        }
     487
     488        return true;
     489    }
     490
     491    /**
    288492     * Utilise le template de configuration phpdoc.xml en modifiant ses variables
    289493     * et l'enregistre pour qu'il soit utilisé par l'application
     
    303507            '@DIR_LOG@'    => $this->dirs['log'],
    304508            '@DIR_ROOT@'   => $this->dirs['root'],
     509
     510            '@OPT_TITRE@'         => $this->getOption('titre', ''),
     511            '@OPT_DESCRIPTION@'   => $this->getOption('description', ''),
     512            '@OPT_PRESENTATION@'  => $this->getOption('presentation', ''),
    305513        );
    306514
     
    329537        $command = "project:run --config=$conf --parseprivate";
    330538
     539        if ($title = $this->getCommand('title')) {
     540            $command .= $title;
     541        }
     542
    331543        $app = new Application();
    332544        $app->run_with_command($command);
  • _galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Helpers/phpdoc_helper.xml

    r74973 r75043  
    5151
    5252    <options>
    53         <description  value="Documentation du code PHP de SPIP." />
    54         <presentation value="Cette documentation est extraite à partir du code source de la version de développement." />
     53        <titre        value="@OPT_TITRE@" />
     54        <description  value="@OPT_DESCRIPTION@" />
     55        <presentation value="@OPT_PRESENTATION@" />
    5556<!--
    5657        <site         value="http://code.spip.net/" />
  • _galaxie_/code.spip.net/autodoc/trunk/templates/zora/content/sommaire.twig

    r74916 r75043  
    77
    88                {%- if (configuration.options.description.value) -%}
    9                         <div id="descriptif_site_spip" class='lead'><p>{{ configuration.options.description.value }}</p></div>
     9                        <div id="descriptif_site_spip" class='lead'>{{ configuration.options.description.value|markdown|raw }}</div>
    1010                {%- endif -%}
    1111
    1212                {%- if (configuration.options.presentation.value) -%}
    1313                        <div class="hero-unit item hentry">
    14                                 <div class="texte entry-content"><p>{{ configuration.options.presentation.value }}</p></div>
     14                                <div class="texte entry-content">{{ configuration.options.presentation.value|markdown|raw }}</div>
    1515                        </div>
    1616                {%- endif -%}
  • _galaxie_/code.spip.net/autodoc/trunk/templates/zora/css/perso.css

    r74892 r75043  
    262262    color:white;
    263263}
    264 .hero-unit a { color:#fefc08;}
    265 .hero-unit a:hover { color:#333;}
     264.hero-unit a { color:#fff; border-bottom:1px dotted #fff;}
     265.hero-unit a:hover { color:#fff; border-bottom:1px solid #fff; text-decoration:none;}
    266266
    267267/* décoration des tableaux */
  • _galaxie_/code.spip.net/autodoc/trunk/templates/zora/header/dist.twig

    r74883 r75043  
    11
    2 {%- set site   = configuration.options.site.value -%}
     2{%- set site    = configuration.options.site.value -%}
     3{%- set titre   = configuration.options.titre.value -%}
    34
    45<div class="heading row">
    56        <div class="titre span12">
    6                 <h1><a href="{{ site ? site : path( project ) }}"><span></span>Documentation du code de {{ project.name }}</a></h1>
     7                <h1><a href="{{ site ? site : path( project ) }}"><span></span>{{ titre ? titre : project.name }}</a></h1>
    78        </div>
    89</div>
Note: See TracChangeset for help on using the changeset viewer.