<?php
/* ПРИШЛО ВРЕМЯ МОРФОЛОГИЧЕСКОГО АНАЛИЗА */
function first_letter_smart($text){return $text;}
// Имя
function get_given_name($given_name, $case, $gender){
$given_name=mb_strtolower($given_name);
switch($case){
case 1:return first_letter_smart($given_name);
case 2:return first_letter_smart(get_given_name_2($given_name, $gender));
case 3:return first_letter_smart(get_given_name_3($given_name, $gender));
default: return '';
}
}
// Отчество
function get_father_name($father_name, $case, $gender){
$father_name=mb_strtolower($father_name);
switch($case){
case 1:return first_letter_smart($father_name);
case 2:return first_letter_smart(get_father_name_2($father_name, $gender));
case 3:return first_letter_smart(get_father_name_3($father_name, $gender));
default: return '';
}
}
// Фамилия
function get_second_name($second_name, $case, $gender){
$second_name=mb_strtolower($second_name);
switch($case){
case 1:return first_letter_smart($second_name);
case 2:return first_letter_smart(get_second_name_2($second_name, $gender));
case 3:return first_letter_smart(get_second_name_3($second_name, $gender));
default: return '';
}
}
/* Более тонко */
// Имя (род. падеж)
function get_given_name_2($given_name, $gender){
if ($gender==1){
if (preg_match('_[цкнгшщзхфвпрлджчсмтб]$_ui', $given_name)){
return $given_name.'а';
}
if (preg_match('_^([а-яё]+)й$_ui', $given_name, $a)){
return $a[1].'я';
}
if (preg_match('_^([а-яё]+)я$_ui', $given_name, $a)){
return $a[1].'и';
}
if (preg_match('_^([а-яё]+)([лнр])а$_ui', $given_name, $a)){
return $a[1].$a[2].'ы';
}
if (preg_match('_^([а-яё]+)ль$_ui', $given_name, $a)){
return $a[1].'ля';
}
}
if ($gender==0){
if (preg_match('_^([а-яё]+)я$_ui', $given_name, $a)){
return $a[1].'и';
}
if (preg_match('_^([а-яё]+)([лнр])а$_ui', $given_name, $a)){
return $a[1].$a[2].'ы';
}
if (preg_match('_^([а-яё]+)а$_ui', $given_name, $a)){
return $a[1].'и';
}
return $given_name;
}
}
// Отчество (род. падеж)
function get_father_name_2($father_name, $gender){
if ($gender==1){
if (preg_match('_ич$_ui', $father_name, $a)){
return $father_name.'а';
}else{
// -оглы
return $father_name;
}
}
if ($gender==0){
if (preg_match('_^([а-яё]+)на$_ui', $father_name, $a)){
return $a[1].'ны';
}else{
return $father_name;
}
}
}
// Фамилия (род. падеж)
function get_second_name_2($second_name, $gender){
if ($gender==1){
if (preg_match('_[цкнгшщзхфвпрлджчсмтб]$_ui', $second_name)){
return $second_name.'а';
}
if (preg_match('_о$_ui', $second_name)){
return $second_name;
}
if (preg_match('_^([а-яё]+)[ыи]й$_ui', $second_name, $a)){
return $a[1].'ого';
}
return $second_name;
}
if ($gender==0){
if (preg_match('_[цкнгшщзхфвпрлджчсмтбо]$_ui', $second_name)){
return $second_name;
}
if (preg_match('_^([а-яё]+)а$_ui', $second_name, $a)){
return $a[1].'ой';
}
}
}
/* Дательный падеж */
// Имя (дат. падеж)
function get_given_name_3($given_name, $gender){
if ($gender==1){
if (preg_match('_[цкнгшщзхфвпрлджчсмтб]$_ui', $given_name)){
return $given_name.'у';
}
if (preg_match('_^([а-яё]+)й$_ui', $given_name, $a)){
return $a[1].'ю';
}
if (preg_match('_^([а-яё]+)я$_ui', $given_name, $a)){
return $a[1].'е';
}
if (preg_match('_^([а-яё]+)([лнр])а$_ui', $given_name, $a)){
return $a[1].$a[2].'е';
}
if (preg_match('_^([а-яё]+)ль$_ui', $given_name, $a)){
return $a[1].'лю';
}
}
if ($gender==0){
if (preg_match('_^([а-яё]+)я$_ui', $given_name, $a)){
return $a[1].'е';
}
if (preg_match('_^([а-яё]+)([лнр])а$_ui', $given_name, $a)){
return $a[1].$a[2].'е';
}
if (preg_match('_^([а-яё]+)а$_ui', $given_name, $a)){
return $a[1].'е';
}
return $given_name;
}
}
// Отчество (дат. падеж)
function get_father_name_3($father_name, $gender){
if ($gender==1){
if (preg_match('_ич$_ui', $father_name, $a)){
return $father_name.'у';
}else{
// -оглы
return $father_name;
}
}
if ($gender==0){
if (preg_match('_^([а-яё]+)на$_ui', $father_name, $a)){
return $a[1].'не';
}else{
return $father_name;
}
}
}
// Фамилия (дат. падеж)
function get_second_name_3($second_name, $gender){
if ($gender==1){
if (preg_match('_[цкнгшщзхфвпрлджчсмтб]$_ui', $second_name)){
return $second_name.'у';
}
if (preg_match('_о$_ui', $second_name)){
return $second_name;
}
if (preg_match('_^([а-яё]+)[ыи]й$_ui', $second_name, $a)){
return $a[1].'ому';
}
return $second_name;
}
if ($gender==0){
if (preg_match('_[цкнгшщзхфвпрлджчсмтбо]$_ui', $second_name)){
return $second_name;
}
if (preg_match('_^([а-яё]+)а$_ui', $second_name, $a)){
return $a[1].'ой';
}
}
}
?>
Comments