New file |
0,0 → 1,106 |
<?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; |
} |
} |
?> |