PageRenderTime 52ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 0ms

/helpers/inflect.php

https://github.com/MilkZoft/zan
PHP | 60 lines | 60 code | 0 blank | 0 comment | 1 complexity | b888e866ff7ba3f119029377ca0b8897 MD5 | raw file
Possible License(s): LGPL-2.1
  1. <?php
  2. if (!defined("ACCESS")) {
  3. die("Error: You don't have permission to access here...");
  4. }
  5. if (!function_exists("pluralize")) {
  6. function pluralize($word) {
  7. $uncountable = array("sheep", "fish", "deer", "series", "species", "money", "rice", "information", "equipment");
  8. $irregular = array("move" => "moves", "foot" => "feet", "goose" => "geese", "sex" => "sexes", "child" => "children", "man" => "men", "tooth" => "teeth", "person" => "people");
  9. $plural = array("/(quiz)$/i" => "$1zes", "/^(ox)$/i" => "$1en", "/([m|l])ouse$/i" => "$1ice", "/(matr|vert|ind)ix|ex$/i" => "$1ices", "/(x|ch|ss|sh)$/i" => "$1es", "/([^aeiouy]|qu)y$/i" => "$1ies", "/(hive)$/i" => "$1s", "/(?:([^f])fe|([lr])f)$/i" => "$1$2ves", "/(shea|lea|loa|thie)f$/i" => "$1ves", "/sis$/i" => "ses", "/([ti])um$/i"=> "$1a", "/(tomat|potat|ech|her|vet)o$/i" => "$1oes", "/(bu)s$/i" => "$1ses", "/(alias)$/i" => "$1es", "/(octop)us$/i" => "$1i", "/(ax|test)is$/i" => "$1es", "/(us)$/i" => "$1es", "/s$/i" => "s", "/$/" => "s");
  10. if (in_array(strtolower($word), $uncountable)) {
  11. return $word;
  12. }
  13. foreach ($irregular as $pattern => $result) {
  14. $pattern = "/$pattern$/i";
  15. if (preg_match($pattern, $word)) {
  16. return preg_replace($pattern, $result, $word);
  17. }
  18. }
  19. foreach ($plural as $pattern => $result) {
  20. if (preg_match($pattern, $word)) {
  21. return preg_replace($pattern, $result, $word);
  22. }
  23. }
  24. return $word;
  25. }
  26. }
  27. if (!function_exists("singularize")) {
  28. function singularize($word) {
  29. $uncountable = array("sheep", "fish", "deer", "series", "species", "money", "rice", "information", "equipment");
  30. $irregular = array("move" => "moves", "foot" => "feet", "goose" => "geese", "sex" => "sexes", "child" => "children", "man" => "men", "tooth" => "teeth", "person" => "people");
  31. $singular = array("/(quiz)zes$/i" => "$1", "/(matr)ices$/i" => "$1ix", "/(vert|ind)ices$/i" => "$1ex", "/^(ox)en$/i" => "$1", "/(alias)es$/i" => "$1", "/(octop|vir)i$/i" => "$1us", "/(cris|ax|test)es$/i" => "$1is", "/(shoe)s$/i" => "$1", "/(o)es$/i" => "$1", "/(bus)es$/i" => "$1", "/([m|l])ice$/i" => "$1ouse", "/(x|ch|ss|sh)es$/i" => "$1", "/(m)ovies$/i" => "$1ovie", "/(s)eries$/i" => "$1eries", "/([^aeiouy]|qu)ies$/i" => "$1y", "/([lr])ves$/i" => "$1f", "/(tive)s$/i" => "$1", "/(hive)s$/i" => "$1", "/(li|wi|kni)ves$/i" => "$1fe", "/(shea|loa|lea|thie)ves$/i" => "$1f", "/(^analy)ses$/i" => "$1sis", "/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i" => "$1$2sis", "/([ti])a$/i" => "$1um", "/(n)ews$/i" => "$1ews", "/(h|bl)ouses$/i" => "$1ouse", "/(corpse)s$/i" => "$1", "/(us)es$/i" => "$1", "/s$/i" => "");
  32. if (in_array(strtolower($word), $uncountable)) {
  33. return $word;
  34. }
  35. foreach ($irregular as $result => $pattern) {
  36. $pattern = "/$pattern$/i";
  37. if (preg_match($pattern, $word)) {
  38. return preg_replace($pattern, $result, $word);
  39. }
  40. }
  41. foreach ($singular as $pattern => $result) {
  42. if (preg_match($pattern, $word)) {
  43. return preg_replace($pattern, $result, $word);
  44. }
  45. }
  46. return $word;
  47. }
  48. }