Subversion Repositories eFlore/Applications.cel

Rev

Rev 2459 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
448 david 1
<?php
2462 jpm 2
// declare(encoding='UTF-8');
448 david 3
/**
2462 jpm 4
 * Classe abstraite mettant en comun des expressions régulière pour le découpage des noms latins.
5
 *
6
 * @internal   Mininum PHP version : 5.2
7
 * @category   CEL
8
 * @package    Services
9
 * @subpackage Bibliothèques
10
 * @version    0.1
11
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
12
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
13
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
14
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
15
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
16
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
17
 */
448 david 18
abstract class Decoupage {
2462 jpm 19
 
20
	protected $min = '[a-z\x{E0}-\x{FF}\x{153}]';// Lettres minuscules : a à z et &#224; à &#255 et &#339;
448 david 21
	protected $maj = "[A-Z'\x{C0}-\x{DF}\x{152}]";// Lettres majuscules : A à Z, ' et &#192; à &#223; et &#338;
22
	protected $hyb = '[+xX]';
2462 jpm 23
 
448 david 24
	protected $SupraSp;// Nom de type suprasp.
25
	protected $GenHy;// Hybride intergénérique
26
	protected $Gen;// Genre
27
	protected $Dou = '(?:\(\?\)|\?)';// Doute
28
	protected $Epi_cv;// Epithete de cultivar
29
	protected $Epi_nn_hy = '(?:nsp\.|)';// Epithète non nommé hybride
30
	protected $Epi_nn = '(?:sp\.[1-9]?|spp\.|)';// Epithète non nommé
31
	protected $Epi;// Epithete
32
	//------------------------------------------------------------------------------------------------------------//
33
	protected $Ran_ig = '[Ss]ect\.|subg(?:en|)\.|ser\.|subser\.';// Rang taxonomique infragénérique de type : sous-genre
34
	protected $Ran_ig_gr = 'gr\.';// Rang taxonomique infragénérique de type : groupe
35
	protected $Ran_ig_agg = 'agg\.';// Rang taxonomique infragénérique de type : aggrégat
36
	protected $Ran_bo_i1 = 'subsp\.';// Rang taxonomique infraspécifique de niveau 1
37
	protected $Ran_bo_i2 = 'var\.|subvar\.';// Rang taxonomique infraspécifique de niveau 2
38
	protected $Ran_bo_i3 = 'f\.|fa\.|fa|forma';// Rang taxonomique infraspécifique de niveau 3
39
	protected $Ran_bo_i4 = 'race|prole|proles|prol\.';// Rang taxonomique infraspécifique de niveau 4
40
	protected $Ran_bo;// Rang taxonomique infraspécifique botanique non hybride
41
	protected $Ran_hy_i1 = 'n-subsp\.|\[subsp\.\]|\[n-subsp\.\]';// Rang taxonomique infraspécifique hybride de niveau 1
42
	protected $Ran_hy_i2 = '\[var\.\]|n-var\.|\[n-var\.\]';// Rang taxonomique infraspécifique hybride de niveau 2
43
	protected $Ran_hy_i3 = '';// Rang taxonomique infraspécifique hybride de niveau 3
44
	protected $Ran_hy_i4 = 'n-proles\.';// Rang taxonomique infraspécifique hybride de niveau 4
45
	protected $Ran_hy;// Rang taxonomique infraspécifique hybridre
46
	protected $Ran_ht = 'convar\.|[cC]v\.';// Rang taxonomique horticole
47
	protected $Ran;// Rang taxonomique infraspécifique non hybride, hybride et horticole
48
	//------------------------------------------------------------------------------------------------------------//
49
	protected $Ini;// Initiale de prénoms
50
	protected $Pre;// Prénoms
51
	protected $Par = '(?i:de|des|le|la|de la|von|van|st\.|el)';// Particules
52
	protected $ParSsEs = "(?i:st\.-|d)";// Particules sans espace après
53
	protected $Nom; // Abreviation d'un nom d'auteur. Le "f." c'est pour "filius" et c'est collé au nom
54
	protected $NomSpe = '(?:[A-Z]\. (?:DC\.|St\.-Hil\.))|\(?hort\.\)?|al\.';// Prénom + nom spéciaux : "hort." est utilisé comme un nom d'auteur mais cela signifie "des jardins". "DC." est une exception deux majuscule suivi d'un point.
55
	protected $Int;// Intitulé d'auteurs (Prénom + Nom)
56
	//------------------------------------------------------------------------------------------------------------//
57
	protected $AutNo;// Intitulé auteur sans "ex", ni "&", ni "et", ni parenthèses
58
	protected $AutNoTa;// Intitulé auteur sans "ex", ni "&", ni "et" mais avec parenthèses possible pour la nomenclature
59
	protected $AutEx;// Intitulé auteur avec "ex"
60
	protected $et = '(?:&|et)';
61
	protected $AutExEt;// Intitulé auteur avec "ex" et "&" ou "et"
62
	protected $AutEt;// Intitulé auteur avec "&" ou "et" et sans parenthèse spécifique à la nomenclature
63
	protected $AutEtTa;// Intitulé auteur avec "&" ou "et" et avec ou sans parenthèse spécifique à la nomenclature
64
	protected $AutBib;// Intitulés auteurs pour la biblio
65
	protected $AutInc = 'AUTEUR\?';// Intitulé auteur spéciaux pouvant être trouvés entre parenthèses
66
	protected $AutSpe;// Intitulé auteur spéciaux pouvant être trouvés entre parenthèses
67
	protected $AutSpeSe;// Intitulé auteur spéciaux type "sensu"
68
	protected $AutSpeTa;// Intitulé auteur spéciaux propre à la nomenclature
69
	protected $Aut;// Tous les intitulés auteurs possibles
70
	protected $Auteur;// Tous les intitulés auteurs possibles
71
	//------------------------------------------------------------------------------------------------------------//
72
	protected $ComEmend;// Commentaires nomenclaturaux
73
	protected $ComPp = 'p\.p\.';// Commentaires nomenclaturaux
74
	protected $Com;// Intitulé auteur spéciaux type "sensu"
75
	protected $ComNom = '\(?(?:hort\. non .*|sensu .*|auct\..*|comb\.\s*(?:nov\.|ined\.)|comb?\.\s*nov\.\s*provis\.|stat\.\s*provis\.|nov\.\s*stat\.|stat\.\s*nov\.|p\.p\.|emend\.)\)?';
76
	//------------------------------------------------------------------------------------------------------------//
77
	protected $In;// In auteur
78
	protected $AneMoCo = 'janvier|fevrier|mars|avril|mai|juin|juillet|ao\x{FB}t|septembre|octobre|novembre|decembre'; //Mois devant l'année
79
	protected $AneMoAb = 'janv\.|f[e\x{E9}]v\.|sept\.|oct\.|d\x{E9}c\.'; //Mois devant l'année
80
	protected $AneBaSi = '(?:\d{4}|\d{4} ?\?|DATE \?)';// Date
81
	protected $AneBaCo = '(?:\d{4}-\d{4}|\d{4}-\d{2})';// Date
82
	protected $AneDo = '\?';// Doute
83
	protected $AneBa;// Date
84
	protected $AneSpe;// Date
85
	protected $Ane;// Date
86
	//------------------------------------------------------------------------------------------------------------//
2462 jpm 87
	// Spécial BDNFF :
88
	protected $Date = ' \[.*\]';
448 david 89
	protected $Num = '[0-9]|3\*|4\*';# Gestion des numéros de flore
90
	protected $NumAuteur;# Gestion des numéros de flore mélangés ou pas au nom d'auteur
2462 jpm 91
 
448 david 92
	//------------------------------------------------------------------------------------------------------------//
93
	protected $BibBa;// Biblio de base : \x{B0} = ° \x{AB}\x{BB} = «» \x{26} = &
94
	protected $Bib;// Biblio de taxon
95
	protected $BibAu = '.+';// Biblio supplémentaire
96
	//------------------------------------------------------------------------------------------------------------//
97
	protected $ErrDet;// Biblio à exclure base
98
	//------------------------------------------------------------------------------------------------------------//
99
	protected $HomNon = 'non';// Homonymes à exclure : négation
100
	protected $HomBa;// Homonymes à exclure base
101
	protected $Hom;// Homonymes à exclure avec non et nec
102
	protected $HomCourt;// Homonymes à exclure avec non et nec avec expression régulière plus courte!
103
	//------------------------------------------------------------------------------------------------------------//
104
	protected $Inf = '.*';// Informations supplémentaires
2462 jpm 105
 
106
	public function __construct() {
448 david 107
		//mb_internal_encoding('UTF-8');
108
		//mb_regex_encoding('UTF-8');
109
		//setlocale(LC_ALL, 'fr-fr');
2462 jpm 110
 
448 david 111
		$this->SupraSp = '(?:'.$this->maj.$this->min.'+|'.$this->maj.$this->min.'+-'.$this->maj.$this->min.'+)';// Nom de type suprasp.
112
		$this->GenHy = "[Xx] $this->SupraSp";// Hybride intergénérique
113
		$this->Gen = "$this->SupraSp|$this->GenHy";
114
		$this->Epi_cv = "$this->maj.(?:$this->min|-)+";// Epithete de cultivar
115
		$this->Epi_nn = $this->Epi_nn.$this->Epi_nn_hy;
116
		$this->Epi = "(?:(?:$this->min|-|')+|$this->Epi_nn)";// Epithete
2462 jpm 117
 
118
		$this->Ran_ig = $this->Ran_ig.'|'.$this->Ran_ig_gr;
448 david 119
		$this->Ran_bo = "$this->Ran_bo_i1|$this->Ran_bo_i2|$this->Ran_bo_i3|$this->Ran_bo_i4";// Rang taxonomique infraspécifique botanique non hybride
120
		$this->Ran_hy = "$this->Ran_hy_i1|$this->Ran_hy_i2|$this->Ran_hy_i3|$this->Ran_hy_i4";// Rang taxonomique infraspécifique hybridre
121
		$this->Ran = "(?:$this->Ran_ig|$this->Ran_bo|$this->Ran_hy|$this->Ran_ht)";// Rang taxonomique infraspécifique non hybride, hybride et horticole
2462 jpm 122
 
123
		$this->Ini = '(?:'.$this->maj.'[.]|'.$this->maj.$this->min.'+[.]?)';// Initiale de prénoms
448 david 124
		$this->Pre = $this->Ini.'{1,3}|'.$this->Ini.'[\- ]'.$this->Ini;// Prénoms
125
		$this->Nom = '(?:'.$this->maj."'".$this->maj.'|'.$this->maj.'|'.$this->maj.$this->min."+'".$this->min.'+)'.$this->min.'*[.]?(?: ?f\.|)';
126
		$this->Int = "(?:(?:$this->Pre ?|)(?:$this->Par |$this->ParSsEs|)(?:$this->Nom|$this->Nom".'[\- .]'."$this->Nom)|$this->NomSpe)";// Intitulé d'auteurs (Prénom + Nom)
2462 jpm 127
 
448 david 128
		$this->AutNo = "$this->Int";// Intitulé auteur sans "ex", ni "&", ni "et", ni parenthèses
129
		$this->AutNoTa = "$this->AutNo|$this->NomSpe $this->Int|\($this->Int\) $this->Int";// Intitulé auteur sans "ex", ni "&", ni "et" mais avec parenthèses possible pour la nomenclature
130
		$this->AutEx = "\($this->Int\) $this->Int ex $this->Int|\($this->Int ex $this->Int\) $this->Int|$this->Int ex $this->Int";// Intitulé auteur avec "ex"
131
		$this->AutExEt = "$this->Int $this->et $this->Int ex $this->Int|$this->Int $this->et $this->Int ex $this->Int $this->et $this->Int|$this->Int ex $this->Int $this->et $this->Int|\($this->Int ex $this->Int $this->et $this->Int\) $this->Int|\($this->Int ex $this->Int\) $this->Int $this->et $this->Int|\($this->Int $this->et $this->Int\) $this->Int ex $this->Int|$this->NomSpe $this->Int ex $this->Int";// Intitulé auteur avec "ex" et "&" ou "et"
132
		$this->AutEt = "$this->Int $this->et $this->Int";// Intitulé auteur avec "&" ou "et" et sans parenthèse spécifique à la nomenclature
133
		$this->AutEtTa = "\($this->Int\) $this->Int $this->et $this->Int|\($this->Int $this->et $this->Int\) $this->Int|$this->AutEt";// Intitulé auteur avec "&" ou "et" et avec ou sans parenthèse spécifique à la nomenclature
134
		$this->AutBib = "(?:$this->AutNo|$this->AutEt)";// Intitulés auteurs pour la biblio
135
		$this->AutSpe = "(?:sensu |)auct\.|auct\. mult\.|$this->AutInc";// Intitulé auteur spéciaux pouvant être trouvés entre parenthèses
136
		$this->AutSpeSe = "sensu $this->AutBib";// Intitulé auteur spéciaux type "sensu"
137
		$this->AutSpeTa = "$this->AutSpe|\((?:$this->AutSpe)\)|$this->AutSpeSe";// Intitulé auteur spéciaux propre à la nomenclature
138
		$this->Aut = "(?:$this->AutExEt|$this->AutEx|$this->AutEtTa|$this->AutSpeTa|$this->AutNoTa)";// Tous les intitulés auteurs possibles
139
		$this->Auteur = $this->Int.'|'.$this->Int.' '.$this->et.' '.$this->Int.'|(?:'.$this->Int.', )+'.$this->Int.' '.$this->et.' '.$this->Int;// Intitulé auteur avec "&" ou "et";
2462 jpm 140
 
448 david 141
		$this->ComEmend = "emend\. $this->AutBib";// Commentaires nomenclaturaux
142
		$this->Com = "$this->ComEmend|$this->ComPp";// Intitulé auteur spéciaux type "sensu"
2462 jpm 143
 
448 david 144
		$this->In = "[iI]n $this->AutBib";// In auteur
145
		$this->AneBa = "$this->AneBaSi|$this->AneBaCo";// Date
146
		$this->AneSpe = "(?:$this->AneBa ?\[$this->AneBa\]|(?:$this->AneMoCo|$this->AneMoAb) $this->AneBaSi|$this->AneBaSi $this->AneBaSi)";// Date
147
		$this->Ane = "$this->AneBa||$this->AneDo|$this->AneSpe";// Date
2462 jpm 148
 
448 david 149
		$this->BibBa = "(?:$this->maj$this->min*[.]?|in|hort\.)(?:$this->min*[.]?|[\d\/\- ,()'\x{B0}\x{26}\x{AB}\x{BB}[\]?])*";// Biblio de base : \x{B0} = ° \x{AB}\x{BB} = «» \x{26} = &
150
		$this->Bib = "([^:]+):(.+?)\(($this->Ane)\)";// Biblio de taxon
2462 jpm 151
 
448 david 152
		$this->ErrDet = "($this->AutSpe,? non $this->Aut): ($this->Bib;?)+";// Biblio à exclure base
2462 jpm 153
 
448 david 154
		$this->HomBa = "$this->Aut \($this->Ane\)";// Homonymes à exclure base
155
		$this->Hom = "$this->HomNon $this->HomBa(?: nec $this->HomBa)*?";// Homonymes à exclure avec non et nec
156
		$this->HomCourt = "$this->HomNon .+?(?: nec .+?)*?";// Homonymes à exclure avec non et nec avec expression régulière plus courte!
2462 jpm 157
 
448 david 158
		$this->NumAuteur = $this->Num.'|(?:(?:'.$this->Num.'|'.$this->Auteur.'), )+(?:'.$this->Num.'|'.$this->Auteur.')';# Gestion des numéros de flore mélangés ou pas au nom d'auteur
159
	}
2462 jpm 160
}