ajouter le support des articles
This commit is contained in:
		
							parent
							
								
									ee058e00cd
								
							
						
					
					
						commit
						75c06e7038
					
				| @ -28,17 +28,23 @@ use nulib\ValueException; | ||||
|  */ | ||||
| class Word { | ||||
|   /** @var bool le mot est-il féminin? */ | ||||
|   private $fem; | ||||
|   private bool $fem; | ||||
|   /** @var string article "aucun", "aucune" */ | ||||
|   private ?string $aucun; | ||||
|   /** @var string article "un", "une" */ | ||||
|   private ?string $un; | ||||
|   /** @var string article "le", "la", "l'" */ | ||||
|   private $le; | ||||
|   private ?string $le; | ||||
|   /** @var string article "ce", "cet", "cette" */ | ||||
|   private $ce; | ||||
|   private ?string $ce; | ||||
|   /** @var string article "de", "d'" */ | ||||
|   private ?string $de; | ||||
|   /** @var string article "du", "de la", "de l'" */ | ||||
|   private $du; | ||||
|   private ?string $du; | ||||
|   /** @var string article "au", "à la", "à l'" */ | ||||
|   private $au; | ||||
|   private ?string $au; | ||||
|   /** @var string le mot sans article */ | ||||
|   private $w; | ||||
|   private string $w; | ||||
| 
 | ||||
|   function __construct(string $spec, bool $adjective=false) { | ||||
|     if (preg_match('/^f([eé]m(inin)?)?\s*:\s*/iu', $spec, $ms)) { | ||||
| @ -57,28 +63,40 @@ class Word { | ||||
|       $fem = null; | ||||
|     } | ||||
|     if (preg_match('/^l\'\s*/i', $spec, $ms) && $fem !== null) { | ||||
|       $aucun = $fem? "aucune ": "aucun "; | ||||
|       $un = $fem? "une ": "un "; | ||||
|       $le = "l'"; | ||||
|       $ce = "cet "; | ||||
|       $de = "d'"; | ||||
|       $du = "de l'"; | ||||
|       $au = "à l'"; | ||||
|       $spec = substr($spec, strlen($ms[0])); | ||||
|     } elseif (preg_match('/^la\s+/i', $spec, $ms)) { | ||||
|       $fem = true; | ||||
|       $aucun = "aucune "; | ||||
|       $un = "une "; | ||||
|       $le = "la "; | ||||
|       $ce = "cette "; | ||||
|       $de = "de "; | ||||
|       $du = "de la "; | ||||
|       $au = "à la "; | ||||
|       $spec = substr($spec, strlen($ms[0])); | ||||
|     } elseif (preg_match('/^le\s+/i', $spec, $ms)) { | ||||
|       $fem = false; | ||||
|       $aucun = "aucun "; | ||||
|       $un = "un "; | ||||
|       $le = "le "; | ||||
|       $ce = "ce "; | ||||
|       $de = "de "; | ||||
|       $du = "du "; | ||||
|       $au = "au "; | ||||
|       $spec = substr($spec, strlen($ms[0])); | ||||
|     } else { | ||||
|       $aucun = null; | ||||
|       $un = null; | ||||
|       $le = null; | ||||
|       $ce = null; | ||||
|       $de = null; | ||||
|       $du = null; | ||||
|       $au = null; | ||||
|     } | ||||
| @ -86,13 +104,16 @@ class Word { | ||||
|       # si c'est un nom, il faut l'article et le genre
 | ||||
|       if ($fem === null) { | ||||
|         throw new ValueException("Vous devez spécifier le genre du nom"); | ||||
|       } elseif ($le === null || $du === null || $au === null) { | ||||
|       } elseif ($le === null) { | ||||
|         throw new ValueException("Vous devez spécifier l'article du nom"); | ||||
|       } | ||||
|     } | ||||
|     $this->fem = $fem; | ||||
|     $this->aucun = $aucun; | ||||
|     $this->un = $un; | ||||
|     $this->le = $le; | ||||
|     $this->ce = $ce; | ||||
|     $this->de = $de; | ||||
|     $this->du = $du; | ||||
|     $this->au = $au; | ||||
|     $this->w = $spec; | ||||
| @ -168,15 +189,25 @@ class Word { | ||||
|     return "$amount/$max ".$this->w($amount); | ||||
|   } | ||||
| 
 | ||||
|   function pronom(): string { | ||||
|     return $this->fem? "elle": "il"; | ||||
|   } | ||||
| 
 | ||||
|   function articleAucun(): ?string { | ||||
|     return $this->un; | ||||
|   } | ||||
| 
 | ||||
|   function articleUn(): ?string { | ||||
|     return $this->un; | ||||
|   } | ||||
| 
 | ||||
|   /** retourner le mot avec l'article indéfini et la quantité */ | ||||
|   function un(int $amount=1): string { | ||||
|     $abs_amount = abs($amount); | ||||
|     if ($abs_amount == 0) { | ||||
|       $aucun = $this->fem? "aucune ": "aucun "; | ||||
|       return $aucun.$this->w($amount); | ||||
|       return $this->aucun.$this->w($amount); | ||||
|     } elseif ($abs_amount == 1) { | ||||
|       $un = $this->fem? "une ": "un "; | ||||
|       return $un.$this->w($amount); | ||||
|       return $this->un.$this->w($amount); | ||||
|     } else { | ||||
|       return "les $amount ".$this->w($amount); | ||||
|     } | ||||
| @ -193,6 +224,10 @@ class Word { | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   function articleLe(): ?string { | ||||
|     return $this->le; | ||||
|   } | ||||
| 
 | ||||
|   function le(int $amount=1): string { | ||||
|     $abs_amount = abs($amount); | ||||
|     if ($abs_amount == 0) { | ||||
| @ -214,6 +249,10 @@ class Word { | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   function articleCe(): string { | ||||
|     return $this->ce; | ||||
|   } | ||||
| 
 | ||||
|   function ce(int $amount=1): string { | ||||
|     $abs_amount = abs($amount); | ||||
|     if ($abs_amount == 0) { | ||||
| @ -235,6 +274,18 @@ class Word { | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   function articleDe(): string { | ||||
|     return $this->de; | ||||
|   } | ||||
| 
 | ||||
|   function _de(int $amount=1): string { | ||||
|     return $this->de.$this->w($amount); | ||||
|   } | ||||
| 
 | ||||
|   function articleDu(): string { | ||||
|     return $this->du; | ||||
|   } | ||||
| 
 | ||||
|   function du(int $amount=1): string { | ||||
|     $abs_amount = abs($amount); | ||||
|     if ($abs_amount == 0) { | ||||
| @ -256,6 +307,10 @@ class Word { | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   function articleAu(): string { | ||||
|     return $this->au; | ||||
|   } | ||||
| 
 | ||||
|   function au(int $amount=1): string { | ||||
|     $abs_amount = abs($amount); | ||||
|     if ($abs_amount == 0) { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user