eXorithm – Execute Algorithm: View / Run Algorithm indefinite_article

Logo Beta

function indefinite_article ($word$explicit_a$explicit_an
{
  // adapted from http://search.cpan.org/~dconway/Lingua-EN-Inflect/
  
  # HANDLE SPECIAL CASES
  if (preg_match'/^'implode'|'$explicit_a).'/i'$word)) return "a $word"
  if (preg_match'/^'implode'|'$explicit_an).'/i'$word)) return "an $word"
  
  # HANDLE ABBREVIATIONS
  if (preg_match'/^((?!FJO|[HLMNS]Y.|RY[EO]|SQU|(F[LR]?|[HL]|MN?|N|RH?|S[CHKLMNPTVW]?|X(YL)?)[AEIOU])[FHLMNRSX][A-Z])/'$word)) return "an $word"
  if (preg_match'/^[aefhilmnorsx]$/i'$word)) return "an $word"
  if (preg_match'/^[aefhilmnorsx][.-]/i'$word)) return "an $word"
  if (preg_match'/^[bcdgjkpqtuvwyz]$/i'$word)) return "a $word"
  if (preg_match'/^[bcdgjkpqtuvwyz][.-]/i'$word)) return "a $word"
  
  # HANDLE ORDINAL FORMS
  if (preg_match'/^[bcdgjkpqtuvwyz]-?th$/i'$word)) return "a $word"
  if (preg_match'/^[aefhilmnorsx]-?th$/i'$word)) return "an $word"
  
  # HANDLE CONSONANTS
  if (preg_match'/^[^aeiouy]/i'$word)) return "a $word"
  
  # HANDLE SPECIAL VOWEL-FORMS
  if (preg_match'/^e[uw]/i'$word)) return "a $word"
  if (preg_match'/^onc?eb/i'$word)) return "a $word"
  if (preg_match'/^uni([^nmd]|mo)/i'$word)) return "a $word"
  if (preg_match'/^ut[th]/i'$word)) return "an $word"
  if (preg_match'/^u[bcfhjkqrst][aeiou]/i'$word)) return "a $word"
  
  # HANDLE SPECIAL CAPITALS
  if (preg_match'/^U[NK][AIEO]?/'$word)) return "a $word"
  
  # HANDLE VOWELS
  if (preg_match'/^[aeiou]/i'$word)) return "an $word"
  
  # HANDLE y... (BEFORE CERTAIN CONSONANTS IMPLIES (UNNATURALIZED) "i.." SOUND)
  if (preg_match'/^(y(b[lor]|cl[ea]|fere|gg|p[ios]|rou|tt))/i'$word)) return "an $word"
  
  # OTHERWISE, GUESS "a"
  return "a $word"