Rev 202 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpclass Surligneur {private $texte = '';private $texteSansAccent = '';private $tags = array();private $nbreSurlignageMaxParMot = 1;private $nbreSurlignageCourant = 0;public function __construct($texte = null, $surlignageMaxParMot = null) {if (is_null($texte) == false) {$this->setTexte($texte);}if (is_null($surlignageMaxParMot) == false) {$this->setNbreMaxSurlignageParMot($surlignageMaxParMot);}}public function setTexte($txt) {$this->texte = $txt;}public function setNbreMaxSurlignageParMot($nbre) {$this->nbreSurlignageMaxParMot = $nbre;}public function surlignerMots($mots) {$this->verifierTableauDeMots($mots);$this->texte = preg_replace_callback('`<[^>]+>`', array($this, 'sauverTags'), $this->texte);foreach ($mots as $mot) {$this->initialiserNbreSurlignageCourant();$this->texte = $this->surlignerMot($mot);}$this->texte = preg_replace_callback('`<([0-9]+)>`', array($this, 'restaurerTags'), $this->texte);return $this->texte;}private function verifierTableauDeMots($mots) {if (is_array($mots) === false) {$message = "Surligneur::surlignerMots() n'accepte que les tableaux de mots en argument";throw new InvalidArgumentException($message);} else {if (count($mots) == 0) {$message = "Surligneur::surlignerMots() n'accepte que des tableaux contenant au moins un mot";throw new LengthException($message);}}}private function sauverTags($match) {$i = count($this->tags);$this->tags[$i] = $match[0];return '<'.$i.'>';}private function initialiserNbreSurlignageCourant() {$this->nbreSurlignageCourant = 0;}private function surlignerMot($mot) {$positionDebutMot = stripos($this->texte, $mot);$longueurMot = strlen($mot);$surlignage = $this->texte;if ($positionDebutMot !== false) {$this->nbreSurlignageCourant++;if ($this->nbreSurlignageCourant <= $this->nbreSurlignageMaxParMot) {$debut = substr($this->texte, 0, $positionDebutMot);$milieu = substr($this->texte, $positionDebutMot, $longueurMot);$this->texte = substr($this->texte, $positionDebutMot + $longueurMot);$fin = $this->surlignerMot($mot);$surlignage = $debut.$this->sauverTagSurlignage($milieu).$fin;}}return $surlignage;}private function sauverTagSurlignage($motTrouve) {$i = count($this->tags);$this->tags[$i] = '<span class="surlignage">'.$motTrouve.'</span>';return '<'.$i.'>';}private function restaurerTags($match) {return $this->tags[$match[1]];}}?>