Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 344 | Blame | Last modification | View Log | RSS feed

<?php
// Encodage : UTF-8
// +-------------------------------------------------------------------------------------------------------------------+
/**
* Découpage des citations bibliographiques.
*
* Description : classe permettant de découper les citations.
* 
//Auteur original :
* @author       Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright    Tela-Botanica 1999-2009
* @licence              GPL v3 & CeCILL v2
* @version              $Id: DecoupageCitation.class.php 1873 2009-03-31 10:07:24Z Jean-Pascal MILCENT $
*/
// +-------------------------------------------------------------------------------------------------------------------+
class DecoupageCitation extends Decoupage {

        private $expression_principale = array();
        private $expression_page = array();

        function DecoupageCitation()
        {       
                parent::__construct();

                // Biblio
                $this->expression_principale[1] = '/^(?:, |)(?:('.$this->Com.')|)(?:('.$this->In.'), |)(?:'.$this->Bib.'|)(?: ('.$this->Inf.')|)$/u';
                // Biblio à exclure
                $this->expression_principale[2] = '/^,? ('.$this->HomCourt.')$/u';
                
                // Biblio : abréviation publi et précision (volume, tome, édition...)
                $this->expression_ref[1] = '/^([^,$]+)(.*)$/u';//
                
                // Pages début et fin
                $this->expression_page[1] = '/^(\d+)-(\d+)$/u';//
                // Page unique
                $this->expression_page[2] = '/^(\d+)(?:\.|)$/u';//
                
        }
        
        public function decouper($citation)
    {
        $aso_nom_decompo = array(       'num_nomenc' => '', 'num_taxo' => '',   
                                                                        'in_auteur' => '', 'abreviation' => '', 'precision' => '', 
                                                                        'annee' => '', 'source_biblio_exclure' => '',
                                                                        'info_combinaison' => '', 'page_debut' => null,'page_fin' => null,
                                                                        'page_erreur_mark' => '', 'page_erreur_notes' => '');
        $aso_nom_decompo['citation_complete'] = $citation;
                while ($citation != '') {
                        $morceau = array();
                        if (preg_match($this->expression_principale[1], $citation, $morceau)) {// Biblio
                                $aso_nom_decompo['info_combinaison'] = $morceau[1];
                                $aso_nom_decompo['in_auteur'] = $morceau[2];
                                $aso_publi = $this->decouperPubli($morceau[3]);
                                $aso_nom_decompo['abreviation'] = $aso_publi['abreviation'];
                                $aso_nom_decompo['precision'] = $aso_publi['precision'];
                                $aso_nom_decompo['pages'] = $morceau[4];
                                $aso_pages = $this->decouperPages($morceau[4]);
                                $aso_nom_decompo['page_debut'] = $aso_pages['page_debut'];
                                $aso_nom_decompo['page_fin'] = $aso_pages['page_fin'];
                                $aso_nom_decompo['page_erreur_mark'] = $aso_pages['erreur_mark'];
                                $aso_nom_decompo['page_erreur_notes'] = $aso_pages['erreur_notes'];
                                $aso_nom_decompo['annee'] = $morceau[5];
                                $citation = $morceau[6];
                        } else if (preg_match($this->expression_principale[2], $citation, $morceau)) {// Nom d'sp.
                                $aso_nom_decompo['source_biblio_exclure'] = $morceau[1];
                                $citation = $morceau[2];
                        } else {// Erreurs
                                $aso_nom_decompo['erreur_mark'] = 'erreur';
                                $aso_nom_decompo['erreur_notes'] = $citation;
                                $citation = '';
                        }
                }
                return $aso_nom_decompo;
    }
        
        public function decouperPubli($ref)
        {
                $ref = trim($ref);
                $aso_ref = array('abreviaton' => null,'precision' => null, 'erreur_mark' => '', 'erreur_notes' => '');
                if (preg_match($this->expression_ref[1], $ref, $morceau)) {
                         $aso_ref['abreviation'] = $morceau[1];
                         $aso_ref['precision'] = preg_replace('/^\s*,\s*/', '', $morceau[2]);
                } else {// Erreurs
                        $aso_ref['erreur_mark'] = 'erreur';
                        $aso_ref['erreur_notes'] = $ref;
                }
                return $aso_ref;
        }
        
        public function decouperPages($pages)
        {
                $pages = trim($pages);
                $aso_pages = array('page_debut' => null,'page_fin' => null, 'erreur_mark' => '', 'erreur_notes' => '');
                if (preg_match($this->expression_page[1], $pages, $morceau)) {
                         $aso_pages['page_debut'] = $morceau[1];
                         $aso_pages['page_fin'] = $morceau[2];
                } else if (preg_match($this->expression_page[2], $pages, $morceau)) {
                        $aso_pages['page_debut'] = $morceau[1];
                } else {// Erreurs
                        $aso_pages['erreur_mark'] = 'erreur';
                        $aso_pages['erreur_notes'] = $pages;
                }
                return $aso_pages;
        }
}
?>