* @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; } } ?>