This commit is contained in:
Andriy Chaika 2011-06-28 11:51:03 +03:00
parent a2cec42571
commit 0a8dda9fa4
35 changed files with 22834 additions and 763 deletions

View File

@ -0,0 +1,875 @@
<?php
/*
* NCL NameCase Core
*
* Клас, которые содержит базовые функции склонения по падежам.
*
* @license Dual licensed under the MIT or GPL Version 2 licenses.
* @author Андрей Чайка http://seagull.net.ua/ bymer3@gmail.com
* @version 0.1.2 05.05.2011
*
*/
interface NCLNameCaseInterface
{
public function setFirstName($firstname="");
public function setSecondName($secondname="");
public function setFatherName($fathername="");
public function setGender($gender=0);
public function setFullName($secondName="", $firstName="", $fatherName="");
public function setName($firstname="");
public function setLastName($secondname="");
public function setSirname($secondname="");
public function genderAutoDetect();
public function splitFullName($fullname);
public function getFirstNameCase($number=null);
public function getSecondNameCase($number=null);
public function getFatherNameCase($number=null);
public function qFirstName($firstName, $CaseNumber=null, $gender=0);
public function qSecondName($secondName, $CaseNumber=null, $gender=0);
public function qFatherName($fatherName, $CaseNumber=null, $gender=0);
public function getFormattedArray($format);
public function getFormatted($caseNum=0, $format="S N F");
public function qFullName($secondName="", $firstName="", $fatherName="", $gender=0, $caseNum=0, $format="S N F");
public function getFirstNameRule();
public function getSecondNameRule();
public function q($fullname, $caseNum=null, $gender=null);
}
class NCL
{
/*
* @static integer
*/
static $MAN = 1;
/*
* @static integer
*/
static $WOMAN = 2;
/*
* @static integer
* Падежи
*/
static $IMENITLN = 0;
static $RODITLN = 1;
static $DATELN = 2;
static $VINITELN = 3;
static $TVORITELN = 4;
static $PREDLOGN = 5;
static $UaNazyvnyi = 0;
static $UaRodovyi = 1;
static $UaDavalnyi = 2;
static $UaZnahidnyi = 3;
static $UaOrudnyi = 4;
static $UaMiszevyi = 5;
static $UaKlychnyi = 6;
}
class NCLNameCaseCore extends NCL
{
/*
* Имя для склонения
* @var string
*/
protected $firstName = "";
/*
* Фамилия для склонения
* @var string
*/
protected $secondName = "";
/*
* Отчество для склонения
* @var string
*/
protected $fatherName = "";
/*
* @var integer
* Пол человека
* <li>0 - не известно</li>
* <li>1 - мужчина</li>
* <li>2 - женщина</li>
*/
protected $gender = 0;
/*
* @var array()
* Результат склонения имени
*/
protected $firstResult = array();
/*
* @var array()
* Результат склонения фамилии
*/
protected $secondResult = array();
/*
* @var array()
* Результат склонения отчества
*/
protected $fatherResult = array();
/*
* @var integer
* Номер правила по которому не склоняется имя/фамилия
*/
protected $error = "";
/*
* @var integer
* Номер правила по которому склоняется имя
*/
protected $frule = "";
/*
* @var integer
* Номер правила по которому не склоняется фамилия
*/
protected $srule = "";
protected function makeFirstTheSame()
{
$this->firstResult = array_fill(0, $this->CaseCount, $this->firstName);
}
/*
* Функция, которая ставит фамилию во всех падежах в форме именительного падежа.
*
* @return void
*/
protected function makeSecondTheSame()
{
$this->secondResult = array_fill(0, $this->CaseCount, $this->secondName);
}
/*
* Функция, которая ставит фамилию во всех падежах в форме именительного падежа.
*
* @return void
*/
protected function makeFatherTheSame()
{
$this->fatherResult = array_fill(0, $this->CaseCount, $this->fatherName);
}
/*
* Функция проверяет, входит ли буква в строку.
*
* @param $letter - буква
* @param $string - строка
*
* @return boolean
*/
protected function in($letter, $string)
{
if ($letter and mb_strpos($string, $letter) === false)
{
return false;
}
else
{
return true;
}
}
/*
* Функция дополняет переданое слово нужными окончаниями.
*
* @param $word (string) - слово
* @param $endings (array) - окончания
* @param $replaceLast (boolean) - убрать последнюю букву
* @param $replaceTwoLast (boolean) - убрать две последних буквы
*
* @return boolean
*/
protected function padeg($word, $endings, $replaceLast=false, $replaceTwoLast=false)
{
$result = array($word);
if ($replaceTwoLast == true)
{
//убираем последнею букву
$word = mb_substr($word, 0, mb_strlen($word, 'utf-8') - 2, 'utf-8');
}
elseif ($replaceLast == true)
{
//убираем последнею букву
$word = mb_substr($word, 0, mb_strlen($word, 'utf-8') - 1, 'utf-8');
}
$i = 0;
for ($i == 0; $i < ($this->CaseCount-1); $i++)
{
$result[$i + 1] = $word . $endings[$i];
}
return $result;
}
/*
* Установка имени
*
* @param $firstname
*
* @return void
*/
public function setFirstName($firstname="")
{
$this->firstName = $firstname;
}
/*
* Установка Фамилии
*
* @param $secondname
*
* @return void
*/
public function setSecondName($secondname="")
{
$this->secondName = $secondname;
}
/*
* Установка Отчества
*
* @param $secondname
*
* @return void
*/
public function setFatherName($fathername="")
{
$this->fatherName = $fathername;
}
/*
* Установка пола
*
* @param $gender
* - null - не определено
* - NCL::$MAN - мужчина
* - NCL::$WOMAN - женщина
* @return void
*/
public function setGender($gender=0)
{
$this->gender = $gender;
}
/*
* Установка Имени, Фамилии, Отчества
*
* @param $firstName - имя
* @param $secondName - фамилия
* @param $fatherName - отчество
*
* @return void
*/
public function setFullName($secondName="", $firstName="", $fatherName="")
{
$this->setFirstName($firstName);
$this->setSecondName($secondName);
$this->setFatherName($fatherName);
}
/*
* Установка имени
*
* @param $firstname
*
* @return void
*/
public function setName($firstname="")
{
$this->setFirstName($firstname);
}
/*
* Установка Фамилии
*
* @param $secondname
*
* @return void
*/
public function setLastName($secondname="")
{
$this->setSecondName($secondname);
}
/*
* Установка Фамилии
*
* @param $secondname
*
* @return void
*/
public function setSirname($secondname="")
{
$this->setSecondName($secondname);
}
/*
* Автоматическое определение пола
* Возвращает пол по ФИО
* @return integer
*/
public function genderAutoDetect()
{
$this->gender = null;
$this->genderDetect();
return $this->gender;
}
/*
* Разбиение фразы на слова и определение, где имя, где фамилия, где отчество
* @return string $format - формат имен и фамилий
*/
public function splitFullName($fullname)
{
$this->firstName = '';
$this->secondName = '';
$this->fatherName = '';
$this->gender = null;
$fullname = trim($fullname);
$list = explode(' ', $fullname);
$found = array();
$duplicate = array();
$c = count($list);
for ($i = 0; $i < $c; $i++)
{
if (trim($list[$i]))
{
$found[$i][0] = $this->detectNamePart($list[$i]);
$found[$i][1] = $list[$i];
if ($found[$i][0]=='N')
{
$this->firstName=$found[$i][1];
}
elseif ($found[$i][0]=='S')
{
$this->secondName=$found[$i][1];
}
elseif ($found[$i][0]=='F')
{
$this->fatherName=$found[$i][1];
}
}
}
$format = array();
foreach ($found as $value)
{
$format[]=$value;
}
if (count($format)==1)
{
return $format[0][0];
}
else
{
return $format;
}
}
/*
* Склонение имени
*
* @return boolean
*/
protected function FirstName()
{
$this->genderDetect();
if ($this->firstName)
{
if ($this->gender == 1)
{
$result = $this->manFirstName();
}
else
{
$result = $this->womanFirstName();
}
$this->firstResult[0]=$this->firstName;
return $result;
}
else
{
$this->firstResult = array_fill(0, $this->CaseCount, "");
return false;
}
}
/*
* Склонение фамилии
*
* @return boolean
*/
protected function SecondName()
{
$this->genderDetect();
if ($this->secondName)
{
if ($this->gender == 1)
{
$result = $this->manSecondName();
}
else
{
$result = $this->womanSecondName();
}
$this->secondResult[0]=$this->secondName;
return $result;
}
else
{
$this->secondResult = array_fill(0, $this->CaseCount, "");
return false;
}
}
/*
* Склонение отчеств
*
* @return boolean
*/
protected function FatherName()
{
$this->genderDetect();
if ($this->fatherName)
{
if ($this->gender == 1)
{
$result = $this->manFatherName();
}
else
{
$result = $this->womanFatherName();
}
$this->fatherResult[0]=$this->fatherName;
return $result;
}
else
{
$this->fatherResult = array_fill(0, $this->CaseCount, "");
return false;
}
}
/*
* Поставить имя в определенный падеж
*
* @return string
*/
public function getFirstNameCase($number=null)
{
if (!isset($this->firstResult[0]) or $this->firstResult[0] <> $this->firstName)
{
$this->FirstName();
}
if ($number < 0 or $number > ($this->CaseCount-1))
{
$number = null;
}
if (is_null($number))
{
//Возвращаем все падежи
return $this->firstResult;
}
else
{
return $this->firstResult[$number];
}
}
/*
* Поставить фамилию в определенный падеж
*
* @return string
*/
public function getSecondNameCase($number=null)
{
if (!isset($this->secondResult[0]) or $this->secondResult[0] <> $this->secondName)
{
$this->SecondName();
}
if ($number < 0 or $number > ($this->CaseCount-1))
{
$number = null;
}
if (is_null($number))
{
//Возвращаем все падежи
return $this->secondResult;
}
else
{
return $this->secondResult[$number];
}
}
/*
* Поставить отчество в определенный падеж
*
* @return string
*/
public function getFatherNameCase($number=null)
{
if (!isset($this->fatherResult[0]) or $this->fatherResult[0] <> $this->fatherName)
{
$this->FatherName();
}
if ($number < 0 or $number > ($this->CaseCount-1))
{
$number = null;
}
if (is_null($number))
{
//Возвращаем все падежи
return $this->fatherResult;
}
else
{
return $this->fatherResult[$number];
}
}
/*
* Поставить фамилию в определенный падеж
*
* @return string
*/
public function qFirstName($firstName, $CaseNumber=null, $gender=0)
{
$this->gender = $gender;
$this->firstName = $firstName;
return $this->getFirstNameCase($CaseNumber);
}
/*
* Поставить фамилию в определенный падеж
*
* @return string
*/
public function qSecondName($secondName, $CaseNumber=null, $gender=0)
{
$this->gender = $gender;
$this->secondName = $secondName;
return $this->getSecondNameCase($CaseNumber);
}
/*
* Поставить отчество в определенный падеж
*
* @return string
*/
public function qFatherName($fatherName, $CaseNumber=null, $gender=0)
{
$this->gender = $gender;
$this->fatherName = $fatherName;
return $this->getFatherNameCase($CaseNumber);
}
/*
* Склоняет во все падежи и форматирует по шаблону $format
* Шаблон $format
* S - Фамилия
* N - Имя
* F - Отчество
*
* @return array
*/
public function getFormattedArray($format)
{
if (is_array($format))
{
return $this->getFormattedArrayHard($format);
}
$length = mb_strlen($format);
$result = array();
$cases = array();
for ($i = 0; $i < $length; $i++)
{
$symbol = mb_substr($format, $i, 1);
if ($symbol == 'S')
{
$cases['S'] = $this->getSecondNameCase();
}
elseif ($symbol == 'N')
{
$cases['N'] = $this->getFirstNameCase();
}
elseif ($symbol == 'F')
{
$cases['F'] = $this->getFatherNameCase();
}
}
for ($curCase = 0; $curCase < $this->CaseCount; $curCase++)
{
$line = "";
for ($i = 0; $i < $length; $i++)
{
$symbol = mb_substr($format, $i, 1);
if ($symbol == 'S')
{
$line.=$cases['S'][$curCase];
}
elseif ($symbol == 'N')
{
$line.=$cases['N'][$curCase];
}
elseif ($symbol == 'F')
{
$line.=$cases['F'][$curCase];
}
else
{
$line.=$symbol;
}
}
$result[] = $line;
}
return $result;
}
public function getFormattedArrayHard($format)
{
$result = array();
$cases = array();
foreach ($format as $value)
{
$symbol = $value[0];
if ($symbol == 'S')
{
$this->setSecondName($value[1]);
$cases[] = array('S', $this->getSecondNameCase());
}
elseif ($symbol == 'N')
{
$this->setFirstName($value[1]);
$cases[] = array('N', $this->getFirstNameCase());
}
elseif ($symbol == 'F')
{
$this->setFatherName($value[1]);
$cases[] = array('F',$this->getFatherNameCase());
}
}
for ($curCase = 0; $curCase < $this->CaseCount; $curCase++)
{
$line = "";
foreach ($cases as $value)
{
$symbol = $value[0];
if ($symbol == 'S')
{
$line.=$value[1][$curCase].' ';
}
elseif ($symbol == 'N')
{
$line.=$value[1][$curCase].' ';
}
elseif ($symbol == 'F')
{
$line.=$value[1][$curCase].' ';
}
}
$result[] = trim($line);
}
return $result;
}
public function getFormattedHard($caseNum=0, $format=array())
{
$result = "";
foreach ($format as $value)
{
$symbol = $value[0];
if ($symbol == 'S')
{
$this->setSecondName($value[1]);
$result.=$this->getSecondNameCase($caseNum).' ';
}
elseif ($symbol == 'N')
{
$this->setFirstName($value[1]);
$result.=$this->getFirstNameCase($caseNum).' ';
}
elseif ($symbol == 'F')
{
$this->setFatherName($value[1]);
$result.=$this->getFatherNameCase($caseNum).' ';
}
}
return trim($result);
}
/*
* Склоняет в падеж $caseNum, и форматирует по шаблону $format
* Шаблон $format
* S - Фамилия
* N - Имя
* F - Отчество
*
* Например getFormatted(1, 'N F')
* Выведет имя и отчество в родительном падиже
*
* @return string
*/
public function getFormatted($caseNum=0, $format="S N F")
{
//Если не указан формат используем другую функцию
if (is_null($caseNum))
{
return $this->getFormattedArray($format);
}
//Если формат сложный
elseif (is_array($format))
{
return $this->getFormattedHard($caseNum, $format);
}
else
{
$length = mb_strlen($format);
$result = "";
for ($i = 0; $i < $length; $i++)
{
$symbol = mb_substr($format, $i, 1);
if ($symbol == 'S')
{
$result.=$this->getSecondNameCase($caseNum);
}
elseif ($symbol == 'N')
{
$result.=$this->getFirstNameCase($caseNum);
}
elseif ($symbol == 'F')
{
$result.=$this->getFatherNameCase($caseNum);
}
else
{
$result.=$symbol;
}
}
return $result;
}
}
/*
* Склоняет фамилию имя отчество в падеж $caseNum, и форматирует по шаблону $format
* Шаблон $format
* S - Фамилия
* N - Имя
* F - Отчество
*
* @return string
*/
public function qFullName($secondName="", $firstName="", $fatherName="", $gender=0, $caseNum=0, $format="S N F")
{
$this->gender = $gender;
$this->firstName = $firstName;
$this->secondName = $secondName;
$this->fatherName = $fatherName;
return $this->getFormatted($caseNum, $format);
}
public function getFirstNameRule()
{
return $this->frule;
}
public function getSecondNameRule()
{
return $this->srule;
}
/*
* Быстрое склонение имени. Передается один параметр строка, где может быть ФИО в любом виде. Есть необязательный параметр пол. И так ще необязательный параметр падеж. Если падеж указан, тогда возвращается строка в том падеже, если нет тогда все возможные падежи.
*
* @return string
*/
public function q($fullname, $caseNum=null, $gender=null)
{
$format = $this->splitFullName($fullname);
$this->gender = $gender;
$this->genderAutoDetect();
return $this->getFormatted($caseNum, $format);
}
}
?>

View File

@ -10,61 +10,16 @@
* @version 0.1.2 05.05.2011
*
*/
require_once dirname(__FILE__) . '/NCL.NameCase.core.php';
class NCLNameCaseRu
class NCLNameCaseRu extends NCLNameCaseCore implements NCLNameCaseInterface
{
/*
* Имя для склонения
* @var string
* @static string
* Количество падежов
*/
private $firstName = "";
/*
* Фамилия для склонения
* @var string
*/
private $secondName = "";
/*
* Отчество для склонения
* @var string
*/
private $fatherName = "";
/*
* @var integer
* Пол человека
* <li>0 - не известно</li>
* <li>1 - мужчина</li>
* <li>2 - женщина</li>
*/
private $gender = 0;
/*
* @static integer
*/
static $MAN = 1;
/*
* @static integer
*/
static $WOMAN = 2;
/*
* @static integer
* Падежи
*/
static $IMENITLN = 0;
static $RODITLN = 1;
static $DATELN = 2;
static $VINITELN = 3;
static $TVORITELN = 4;
static $PREDLOGN = 5;
protected $CaseCount = 6;
/*
* @static string
* Список гласных
@ -90,42 +45,6 @@ class NCLNameCaseRu
*/
private $ih = array('их', 'ых', 'ко');
/*
* @var array()
* Результат склонения имени
*/
private $firstResult = array();
/*
* @var array()
* Результат склонения фамилии
*/
private $secondResult = array();
/*
* @var array()
* Результат склонения отчества
*/
private $fatherResult = array();
/*
* @var integer
* Номер правила по которому не склоняется имя/фамилия
*/
private $error = "";
/*
* @var integer
* Номер правила по которому склоняется имя
*/
private $frule = "";
/*
* @var integer
* Номер правила по которому не склоняется фамилия
*/
private $srule = "";
/*
* Функция, которая склоняет имя записаное в $this->firstName, по правилам склонения мужских имен.
@ -133,7 +52,7 @@ class NCLNameCaseRu
* @return boolean
*/
private function manFirstName()
protected function manFirstName()
{
//Последний символ
$LastSymbol = mb_substr($this->firstName, -1, 1, 'utf-8');
@ -232,7 +151,7 @@ class NCLNameCaseRu
* @return boolean
*/
private function womanFirstName()
protected function womanFirstName()
{
//Последний символ
$LastSymbol = mb_substr($this->firstName, -1, 1, 'utf-8');
@ -320,7 +239,7 @@ class NCLNameCaseRu
* @return boolean
*/
private function manSecondName()
protected function manSecondName()
{
//Последний символ
$LastSymbol = mb_substr($this->secondName, -1, 1, 'utf-8');
@ -413,6 +332,12 @@ class NCLNameCaseRu
$this->srule = 301;
return true;
}
elseif ($this->in($LastSymbol, 'р'))
{
$this->secondResult = $this->padeg($this->secondName, array('а', 'у', 'а', 'ом', 'е'), false);
$this->srule = 302;
return true;
}
else
{
$this->secondResult = $this->padeg($this->secondName, array('а', 'у', 'а', 'ым', 'е'), false);
@ -467,7 +392,7 @@ class NCLNameCaseRu
* @return boolean
*/
private function womanSecondName()
protected function womanSecondName()
{
//Последний символ
$LastSymbol = mb_substr($this->secondName, -1, 1, 'utf-8');
@ -542,7 +467,7 @@ class NCLNameCaseRu
* @return boolean
*/
private function manFatherName()
protected function manFatherName()
{
//Проверяем действительно ли отчество
if ($this->fatherName == 'Ильич')
@ -568,7 +493,7 @@ class NCLNameCaseRu
* @return boolean
*/
private function womanFatherName()
protected function womanFatherName()
{
//Проверяем действительно ли отчество
if (mb_substr($this->fatherName, -2, 2, 'utf-8') == 'на')
@ -583,209 +508,12 @@ class NCLNameCaseRu
}
}
/*
* Функция, которая ставит имя во всех падежах в форме именительного падежа.
*
* @return void
*/
private function makeFirstTheSame()
{
$this->firstResult = array_fill(0, 6, $this->firstName);
}
/*
* Функция, которая ставит фамилию во всех падежах в форме именительного падежа.
*
* @return void
*/
private function makeSecondTheSame()
{
$this->secondResult = array_fill(0, 6, $this->secondName);
}
/*
* Функция, которая ставит фамилию во всех падежах в форме именительного падежа.
*
* @return void
*/
private function makeFatherTheSame()
{
$this->fatherResult = array_fill(0, 6, $this->fatherName);
}
/*
* Функция проверяет, входит ли буква в строку.
*
* @param $letter - буква
* @param $string - строка
*
* @return boolean
*/
private function in($letter, $string)
{
if ($letter and mb_strpos($string, $letter) === false)
{
return false;
}
else
{
return true;
}
}
/*
* Функция дополняет переданое слово нужными окончаниями.
*
* @param $word (string) - слово
* @param $endings (array) - окончания
* @param $replaceLast (boolean) - убрать последнюю букву
* @param $replaceTwoLast (boolean) - убрать две последних буквы
*
* @return boolean
*/
private function padeg($word, $endings, $replaceLast=false, $replaceTwoLast=false)
{
$result = array($word);
if ($replaceTwoLast == true)
{
//убираем последнею букву
$word = mb_substr($word, 0, mb_strlen($word, 'utf-8') - 2, 'utf-8');
}
elseif ($replaceLast == true)
{
//убираем последнею букву
$word = mb_substr($word, 0, mb_strlen($word, 'utf-8') - 1, 'utf-8');
}
$i = 0;
for ($i == 0; $i < 5; $i++)
{
$result[$i + 1] = $word . $endings[$i];
}
return $result;
}
/*
* Установка имени
*
* @param $firstname
*
* @return void
*/
public function setFirstName($firstname="")
{
$this->firstName = $firstname;
}
/*
* Установка Фамилии
*
* @param $secondname
*
* @return void
*/
public function setSecondName($secondname="")
{
$this->secondName = $secondname;
}
/*
* Установка Отчества
*
* @param $secondname
*
* @return void
*/
public function setFatherName($fathername="")
{
$this->fatherName = $fathername;
}
/*
* Установка пола
*
* @param $gender
* - null - не определено
* - NCLNameCaseRu::$MAN - мужчина
* - NCLNameCaseRu::$WOMAN - женщина
* @return void
*/
public function setGender($gender=0)
{
$this->gender = $gender;
}
/*
* Установка Имени, Фамилии, Отчества
*
* @param $firstName - имя
* @param $secondName - фамилия
* @param $fatherName - отчество
*
* @return void
*/
public function setFullName($secondName="", $firstName="", $fatherName="")
{
$this->setFirstName($firstName);
$this->setSecondName($secondName);
$this->setFatherName($fatherName);
}
/*
* Установка имени
*
* @param $firstname
*
* @return void
*/
public function setName($firstname="")
{
$this->setFirstName($firstname);
}
/*
* Установка Фамилии
*
* @param $secondname
*
* @return void
*/
public function setLastName($secondname="")
{
$this->setSecondName($secondname);
}
/*
* Установка Фамилии
*
* @param $secondname
*
* @return void
*/
public function setSirname($secondname="")
{
$this->setSecondName($secondname);
}
/*
* Автоматическое определение пола
* @return void
*/
private function genderDetect()
protected function genderDetect()
{
if (!$this->gender)
{
@ -795,12 +523,12 @@ class NCLNameCaseRu
$LastTwo = mb_substr($this->fatherName, -2, 2, 'utf-8');
if ($LastTwo == 'ич')
{
$this->gender = NCLNameCaseRu::$MAN; // мужчина
$this->gender = NCL::$MAN; // мужчина
return true;
}
if ($LastTwo == 'на')
{
$this->gender = NCLNameCaseRu::$WOMAN; // женщина
$this->gender = NCL::$WOMAN; // женщина
return true;
}
}
@ -891,34 +619,21 @@ class NCLNameCaseRu
//Теперь смотрим, кто больше набрал
if ($man > $woman)
{
$this->gender = NCLNameCaseRu::$MAN;
$this->gender = NCL::$MAN;
}
else
{
$this->gender = NCLNameCaseRu::$WOMAN;
$this->gender = NCL::$WOMAN;
}
}
}
/*
* Автоматическое определение пола
* Возвращает пол по ФИО
* @return integer
*/
public function genderAutoDetect()
{
$this->gender = null;
$this->genderDetect();
return $this->gender;
}
/*
* Определение текущее слово есть фамилией, именем или отчеством
* @return integer $number - 1-фамили 2-имя 3-отчество
*/
private function detectNamePart($namepart)
protected function detectNamePart($namepart)
{
$LastSymbol = mb_substr($namepart, -1, 1, 'utf-8');
$LastTwo = mb_substr($namepart, -2, 2, 'utf-8');
@ -949,7 +664,7 @@ class NCLNameCaseRu
}
//похоже на фамилию
if (in_array($LastTwo, array('ов', 'ин', 'ев', 'ёв', 'ый', 'ын', 'ой', 'ко', 'ук', 'як', 'ца', 'их', 'ик', 'ун', 'ок', 'ша', 'ая', 'га', 'ёк', 'аш', 'ив', 'юк', 'ус', 'це', 'ак', 'бр')))
if (in_array($LastTwo, array('ов', 'ин', 'ев', 'ёв', 'ый', 'ын', 'ой', 'ко', 'ук', 'як', 'ца', 'их', 'ик', 'ун', 'ок', 'ша', 'ая', 'га', 'ёк', 'аш', 'ив', 'юк', 'ус', 'це', 'ак', 'бр', 'яр')))
{
$second+=0.4;
}
@ -981,438 +696,6 @@ class NCLNameCaseRu
}
}
/*
* Разбиение фразы на слова и определение, где имя, где фамилия, где отчество
* @return string $format - формат имен и фамилий
*/
public function splitFullName($fullname)
{
$this->firstName = '';
$this->secondName = '';
$this->fatherName = '';
$this->gender = null;
$fullname = trim($fullname);
$list = explode(' ', $fullname);
$found = array();
$duplicate = array();
$c = count($list);
for ($i = 0; $i < $c; $i++)
{
if (trim($list[$i]))
{
$found[$i] = $this->detectNamePart($list[$i]);
}
}
$look = array('S' => false, 'F' => false, 'N' => false);
//Первая пробежка - ищем дупликаты
foreach ($found as $key => $letter)
{
if ($look[$letter]) //Если уже есть
{
$duplicate[$key] = $letter;
}
else
{
$look[$letter] = true;
}
}
//Вторая пробежка - тасуем дупликаты
foreach ($duplicate as $key => $letter)
{
if (!$look['S'])
{
$found[$key] = 'S';
}
elseif (!$look['F'])
{
$found[$key] = 'F';
}
elseif (!$look['N'])
{
$found[$key] = 'N';
}
else
{
$found[$key] = ''; //4 слова одно игнорируем
}
}
$format = '';
foreach ($found as $key => $letter)
{
if ($letter == 'S')
{
$this->secondName = $list[$key];
}
elseif ($letter == 'N')
{
$this->firstName = $list[$key];
}
elseif ($letter == 'F')
{
$this->fatherName = $list[$key];
}
$format.=$letter . ' ';
}
return trim($format);
}
/*
* Склонение имени
*
* @return boolean
*/
private function FirstName()
{
$this->genderDetect();
if ($this->firstName)
{
if ($this->gender == 1)
{
return $this->manFirstName();
}
else
{
return $this->womanFirstName();
}
}
else
{
$this->firstResult = array_fill(0, 6, "");
return false;
}
}
/*
* Склонение фамилии
*
* @return boolean
*/
private function SecondName()
{
$this->genderDetect();
if ($this->secondName)
{
if ($this->gender == 1)
{
return $this->manSecondName();
}
else
{
return $this->womanSecondName();
}
}
else
{
$this->secondResult = array_fill(0, 6, "");
return false;
}
}
/*
* Склонение отчеств
*
* @return boolean
*/
private function FatherName()
{
$this->genderDetect();
if ($this->fatherName)
{
if ($this->gender == 1)
{
return $this->manFatherName();
}
else
{
return $this->womanFatherName();
}
}
else
{
$this->fatherResult = array_fill(0, 6, "");
return false;
}
}
/*
* Поставить имя в определенный падеж
*
* @return string
*/
public function getFirstNameCase($number=null)
{
if (!isset($this->firstResult[0]) or $this->firstResult[0] <> $this->firstName)
{
$this->FirstName();
}
if ($number < 0 or $number > 5)
{
$number = null;
}
if (is_null($number))
{
//Возвращаем все падежи
return $this->firstResult;
}
else
{
return $this->firstResult[$number];
}
}
/*
* Поставить фамилию в определенный падеж
*
* @return string
*/
public function getSecondNameCase($number=null)
{
if (!isset($this->secondResult[0]) or $this->secondResult[0] <> $this->secondName)
{
$this->SecondName();
}
if ($number < 0 or $number > 5)
{
$number = null;
}
if (is_null($number))
{
//Возвращаем все падежи
return $this->secondResult;
}
else
{
return $this->secondResult[$number];
}
}
/*
* Поставить отчество в определенный падеж
*
* @return string
*/
public function getFatherNameCase($number=null)
{
if (!isset($this->fatherResult[0]) or $this->fatherResult[0] <> $this->fatherName)
{
$this->FatherName();
}
if ($number < 0 or $number > 5)
{
$number = null;
}
if (is_null($number))
{
//Возвращаем все падежи
return $this->fatherResult;
}
else
{
return $this->fatherResult[$number];
}
}
/*
* Поставить фамилию в определенный падеж
*
* @return string
*/
public function qFirstName($firstName, $CaseNumber=null, $gender=0)
{
$this->gender = $gender;
$this->firstName = $firstName;
return $this->getFirstNameCase($CaseNumber);
}
/*
* Поставить фамилию в определенный падеж
*
* @return string
*/
public function qSecondName($secondName, $CaseNumber=null, $gender=0)
{
$this->gender = $gender;
$this->secondName = $secondName;
return $this->getSecondNameCase($CaseNumber);
}
/*
* Поставить отчество в определенный падеж
*
* @return string
*/
public function qFatherName($fatherName, $CaseNumber=null, $gender=0)
{
$this->gender = $gender;
$this->fatherName = $fatherName;
return $this->getFatherNameCase($CaseNumber);
}
/*
* Склоняет во все падежи и форматирует по шаблону $format
* Шаблон $format
* S - Фамилия
* N - Имя
* F - Отчество
*
* @return array
*/
public function getFormattedArray($format)
{
$length = mb_strlen($format);
$result = array();
$cases=array();
for ($i = 0; $i < $length; $i++)
{
$symbol = mb_substr($format, $i, 1);
if ($symbol == 'S')
{
$cases['S']=$this->getSecondNameCase();
}
elseif ($symbol == 'N')
{
$cases['N']=$this->getFirstNameCase();
}
elseif ($symbol == 'F')
{
$cases['F']=$this->getFatherNameCase();
}
}
for ($curCase = 0; $curCase<6; $curCase++)
{
$line="";
for ($i = 0; $i < $length; $i++)
{
$symbol = mb_substr($format, $i, 1);
if ($symbol == 'S')
{
$line.=$cases['S'][$curCase];
}
elseif ($symbol == 'N')
{
$line.=$cases['N'][$curCase];
}
elseif ($symbol == 'F')
{
$line.=$cases['F'][$curCase];
}
else
{
$line.=$symbol;
}
}
$result[]=$line;
}
return $result;
}
/*
* Склоняет в падеж $caseNum, и форматирует по шаблону $format
* Шаблон $format
* S - Фамилия
* N - Имя
* F - Отчество
*
* Например getFormatted(1, 'N F')
* Выведет имя и отчество в родительном падиже
*
* @return string
*/
public function getFormatted($caseNum=0, $format="S N F")
{
if (is_null($caseNum))
{
return $this->getFormattedArray($format);
}
else
{
$length = mb_strlen($format);
$result = "";
for ($i = 0; $i < $length; $i++)
{
$symbol = mb_substr($format, $i, 1);
if ($symbol == 'S')
{
$result.=$this->getSecondNameCase($caseNum);
}
elseif ($symbol == 'N')
{
$result.=$this->getFirstNameCase($caseNum);
}
elseif ($symbol == 'F')
{
$result.=$this->getFatherNameCase($caseNum);
}
else
{
$result.=$symbol;
}
}
return $result;
}
}
/*
* Склоняет фамилию имя отчество в падеж $caseNum, и форматирует по шаблону $format
* Шаблон $format
* S - Фамилия
* N - Имя
* F - Отчество
*
* @return string
*/
public function qFullName($secondName="", $firstName="", $fatherName="", $gender=0, $caseNum=0, $format="S N F")
{
$this->gender = $gender;
$this->firstName = $firstName;
$this->secondName = $secondName;
$this->fatherName = $fatherName;
return $this->getFormatted($caseNum, $format);
}
public function getFirstNameRule()
{
return $this->frule;
}
public function getSecondNameRule()
{
return $this->srule;
}
/*
* Быстрое склонение имени. Передается один параметр строка, где может быть ФИО в любом виде. Есть необязательный параметр пол. И так ще необязательный параметр падеж. Если падеж указан, тогда возвращается строка в том падеже, если нет тогда все возможные падежи.
*
* @return string
*/
public function q($fullname, $caseNum=null, $gender=null)
{
$format = $this->splitFullName($fullname);
$this->gender = $gender;
$this->genderAutoDetect();
return $this->getFormatted($caseNum, $format);
}
}
?>

669
Library/NCL.NameCase.ua.php Normal file
View File

@ -0,0 +1,669 @@
<?php
/*
* NCL NameCase Ukranian Language
*
* Клас, которые позволяет склонять украинские Имена, Фамили Отчества по падежам.
*
* @license Dual licensed under the MIT or GPL Version 2 licenses.
* @author Андрей Чайка http://seagull.net.ua/ bymer3@gmail.com
* @version 0.1.2 05.05.2011
*
*/
require_once dirname(__FILE__) . '/NCL.NameCase.core.php';
class NCLNameCaseUa extends NCLNameCaseCore implements NCLNameCaseInterface
{
/*
* @static string
* Количество падежов
*/
protected $CaseCount = 7;
/*
* @static string
* Список гласных
*/
private $vowels = "аеиоуіїєюя";
/*
* @static string
* Список согласных
*/
private $consonant = "бвгджзйклмнпрстфхцчшщ";
/*
* @static string
* Шиплячі приголосні
*/
private $shyplyachi = "жчшщ";
private $neshyplyachi = "бвгдзклмнпрстфхц";
private $myaki = 'ьюяєї';
private $gubni = 'мвпбф';
/*
* Чергування г к х —» з ц с
*
* @return boolean
*/
private function inverseGKH($letter)
{
switch ($letter)
{
case 'г': return 'з';
case 'к': return 'ц';
case 'х': return 'с';
}
return $letter;
}
/*
* Чергування к —» ч
*
* @return boolean
*/
private function inverse2($letter)
{
switch ($letter)
{
case 'к': return 'ч';
case 'г': return 'ж';
}
return $letter;
}
/*
* Визначення групи для іменників 2-ї відміни
* 1 - тверда
* 2 - мішана
* 3 - м’яка
*
* Правило:
* Іменники з основою на твердий нешиплячий належать до твердої групи: береза, дорога, Дніпро, шлях, віз, село, яблуко.
* Іменники з основою на твердий шиплячий належать до мішаної групи: пожеж-а, пущ-а, тиш-а, алич-а, вуж, кущ, плющ, ключ, плече, прізвище.
* Іменники з основою на будь-який м'який чи пом'якше­ний належать до м'якої групи: земля [земл'а], зоря [зор'а], армія [арм'ійа], сім'я [с'імйа], серпень, фахівець, трамвай, су­зір'я [суз'ірйа], насіння [насін'н'а], узвишшя Іузвиш'ш'а
*
* @return integer
*/
private function detect2Group($word)
{
$osnova = $word;
$stack = array();
//Ріжемо слово поки не зустрінемо приголосний і записуемо в стек всі голосні які зустріли
while ($this->in(mb_substr($osnova, -1, 1, 'utf-8'), $this->vowels . 'ь'))
{
$stack[] = mb_substr($osnova, -1, 1, 'utf-8');
$osnova = mb_substr($osnova, 0, mb_strlen($osnova, 'utf-8') - 1, 'utf-8');
}
$stacksize = count($stack);
$Last = 'Z'; //нульове закінчення
if ($stacksize)
{
$Last = $stack[count($stack) - 1];
}
$osnovaEnd = mb_substr($osnova, -1, 1, 'utf-8');
if ($this->in($osnovaEnd, $this->neshyplyachi) and !$this->in($Last, $this->myaki))
{
return 1;
}
elseif ($this->in($osnovaEnd, $this->shyplyachi) and !$this->in($Last, $this->myaki))
{
return 2;
}
else
{
return 3;
}
}
/*
* Повертає перший з кінця голосний
*
* @return char
*/
private function FirstLastVowel($word, $vowels)
{
$length = mb_strlen($word, 'utf-8');
for ($i = $length - 1; $i > 0; $i--)
{
$char = mb_substr($word, $i, 1, 'utf-8');
if ($this->in($char, $vowels))
{
return $char;
}
}
}
/*
* Повертає основу слова
*
* @return boolean
*/
private function getOsnova($word)
{
$osnova = $word;
//Ріжемо слово поки не зустрінемо приголосний
while ($this->in(mb_substr($osnova, -1, 1, 'utf-8'), $this->vowels . 'ь'))
{
$osnova = mb_substr($osnova, 0, mb_strlen($osnova, 'utf-8') - 1, 'utf-8');
}
return $osnova;
}
/*
* Функция, которая склоняет имя записаное в $this->firstName, по правилам склонения мужских имен.
*
* @return boolean
*/
protected function manFirstName()
{
/*
Українські чоловічі та жіночі імена, що в називному відмінку однини закінчуються на -а (-я), відмінються як відповідні іменники І відміни
Примітка 1. Кінцеві приголосні основи г, к, х у жіночих іменах у давальному та місцевому відмінках однини перед закінченням -і змінюються на з, ц, с: Ольга - Ользі, Палажка - Палажці, Солоха - Солосі.
Примітка 2. У жіночих іменах типу Одарка, Параска в родовому відмінку множини в кінці основи між приголосними з'являється звук о: Одарок, Парасок */
//Последний символ
$LastSymbol = mb_substr($this->firstName, -1, 1, 'utf-8');
//Предпоследний символ
$BeforeLast = mb_substr($this->firstName, -2, 1, 'utf-8');
//Останні літера або а або я
if ($LastSymbol == 'а')
{
$this->firstResult = $this->padeg($this->firstName, array($BeforeLast . 'и', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'у', $BeforeLast . 'ою', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'о'), false, true);
$this->frule = 101;
return true;
}
elseif ($LastSymbol == 'я')
{
if ($BeforeLast == 'і')
{
$this->firstResult = $this->padeg($this->firstName, array('ї', 'ї', 'ю', 'єю', 'ї', 'є'), true);
$this->frule = 103;
return true;
}
else
{
$this->firstResult = $this->padeg($this->firstName, array($BeforeLast . 'і', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'ю', $BeforeLast . 'ею', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'е'), false, true);
$this->frule = 102;
return true;
}
}
//Примітка 2. Імена, що в називному відмінку закінчуються на -р, у родовому мають закінчення -а: Віктор - Віктора, Макар - Макара, але: Ігор - Ігоря, Лазар - Лазаря.
elseif ($LastSymbol == 'р')
{
if ($this->firstName == 'Ігор' or $this->firstName == 'Лазар')
{
$this->firstResult = $this->padeg($this->firstName, array('я', 'еві', 'я', 'ем', 'еві', 'е'));
$this->frule = 201;
return true;
}
else
{
$osnova = $this->firstName;
if (mb_substr($osnova, -2, 1, 'utf-8') == 'і')
{
$osnova = mb_substr($osnova, 0, mb_strlen($osnova, 'utf-8') - 2, 'utf-8') . 'о' . mb_substr($osnova, -1, 1, 'utf-8');
}
$this->firstResult = $this->padeg($osnova, array('а', 'ові', 'а', 'ом', 'ові', 'е'));
$this->frule = 202;
return true;
}
}
//2. Українські чоловічі імена, що в називному відмінку однини закінчуються на приголосний та -о , відмінюються як відповідні іменники ІІ відміни.
elseif ($this->in($LastSymbol, $this->consonant . 'оь'))
{
$group = $this->detect2Group($this->firstName);
$osnova = $this->getOsnova($this->firstName);
//В іменах типу Антін, Нестір, Нечипір, Прокіп, Сидір, Тиміш, Федір голосний і виступає тільки в називному відмінку, у непрямих - о: Антона, Антонові
//Чергування іо всередині
$osLast = mb_substr($osnova, -1, 1, 'utf-8');
if ($osLast != 'й' and mb_substr($osnova, -2, 1, 'utf-8') == 'і' and !in_array(mb_substr(mb_strtolower($osnova, 'utf-8'), -4, 4, 'utf-8'), array('світ', 'цвіт')) and !in_array($this->firstName, array('Гліб')))
{
$osnova = mb_substr($osnova, 0, mb_strlen($osnova, 'utf-8') - 2, 'utf-8') . 'о' . mb_substr($osnova, -1, 1, 'utf-8');
}
//Випадання букви е при відмінюванні слів типу Орел
if (mb_substr($osnova, 0, 1, 'utf-8') == 'О' and $this->FirstLastVowel($osnova, $this->vowels . 'гк') == 'е' and $BeforeLast . $LastSymbol != 'сь')
{
$delim = mb_strrpos($osnova, 'е', null, 'utf-8');
$osnova = mb_substr($osnova, 0, $delim, 'utf-8') . mb_substr($osnova, $delim + 1, mb_strlen($osnova, 'utf-8') - $delim, 'utf-8');
}
if ($group == 1)
{
//Тверда група
$this->firstResult = $this->padeg($osnova, array($osLast . 'а', $osLast . 'ові', $osLast . 'а', $osLast . 'ом', $osLast . 'ові', $this->inverse2($osLast) . 'е'), true);
$this->frule = 301;
return true;
}
if ($group == 2)
{
//Мішана група
$this->firstResult = $this->padeg($osnova, array('а', 'еві', 'а', 'ем', 'еві', 'е'));
$this->frule = 302;
return true;
}
if ($group == 3)
{
//М’яка група
//Соловей
if (mb_substr($this->firstName, -3, 2, 'utf-8') == 'ве')
{
$osnova = mb_substr($this->firstName, 0, mb_strlen($this->firstName, 'utf-8') - 2, 'utf-8') . '`';
$this->firstResult = $this->padeg($osnova, array('я', 'єві', 'я', 'єм', 'єві', 'ю'));
$this->frule = 305;
return true;
}
elseif ($BeforeLast == 'і' or $LastSymbol == 'й')
{
$this->firstResult = $this->padeg($this->firstName, array('я', 'єві', 'я', 'єм', 'єві', 'ю'), true);
$this->frule = 304;
return true;
}
else
{
$this->firstResult = $this->padeg($osnova, array('я', 'еві', 'я', 'ем', 'еві', 'ю'));
$this->frule = 303;
return true;
}
}
}
else
{
$this->makeFirstTheSame();
}
}
/*
* Функция, которая склоняет имя записаное в $this->firstName, по правилам склонения женских имен.
*
* @return boolean
*/
protected function womanFirstName()
{
/*
Українські чоловічі та жіночі імена, що в називному відмінку однини закінчуються на -а (-я), відмінються як відповідні іменники І відміни
Примітка 1. Кінцеві приголосні основи г, к, х у жіночих іменах у давальному та місцевому відмінках однини перед закінченням -і змінюються на з, ц, с: Ольга - Ользі, Палажка - Палажці, Солоха - Солосі.
Примітка 2. У жіночих іменах типу Одарка, Параска в родовому відмінку множини в кінці основи між приголосними з'являється звук о: Одарок, Парасок */
//Последний символ
$LastSymbol = mb_substr($this->firstName, -1, 1, 'utf-8');
//Предпоследний символ
$BeforeLast = mb_substr($this->firstName, -2, 1, 'utf-8');
//Якщо закінчується на ніга -» нога
if (mb_substr($this->firstName, -4, 4, 'utf-8') == 'ніга')
{
$osnova = mb_substr($this->firstName, 0, mb_strlen($this->firstName, 'utf-8')-3, 'utf-8').'о';
$this->firstResult = $this->padeg($osnova, array('ги', 'зі', 'гу', 'гою', 'зі', 'го'));
$this->frule = 101;
return true;
}
//Останні літера або а або я
elseif ($LastSymbol == 'а')
{
$this->firstResult = $this->padeg($this->firstName, array($BeforeLast . 'и', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'у', $BeforeLast . 'ою', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'о'), false, true);
$this->frule = 101;
return true;
}
elseif ($LastSymbol == 'я')
{
if ($this->in($BeforeLast, $this->vowels))
{
$this->firstResult = $this->padeg($this->firstName, array('ї', 'ї', 'ю', 'єю', 'ї', 'є'), true);
$this->frule = 103;
return true;
}
else
{
$this->firstResult = $this->padeg($this->firstName, array($BeforeLast . 'і', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'ю', $BeforeLast . 'ею', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'е'), false, true);
$this->frule = 102;
return true;
}
}
//2. Українські жіночі імена, що в називному відмінку однини закінчуються на приголосний, відмінюються як відповідні іменники ІІІ відміни
elseif ($this->in($LastSymbol, $this->consonant . 'ь'))
{
$osnova = $this->getOsnova($this->firstName);
$apostrof = '';
$duplicate='';
$osLast = mb_substr($osnova, -1, 1, 'utf-8');
$osBeforeLast = mb_substr($osnova, -2, 1, 'utf-8');
//Чи треба ставити апостроф
if ($this->in($osLast, 'мвпбф') and ($this->in($BeforeLast, $this->vowels)))
{
$apostrof = '`';
}
//Чи треба подвоювати
if ($this->in($osLast, 'дтзсцлн'))
{
$duplicate=$osLast;
}
if ($LastSymbol == 'ь')
{
$this->firstResult = $this->padeg($osnova, array('і', 'і', 'ь', $duplicate.$apostrof. 'ю', 'і', 'е'));
$this->frule = 402;
return true;
}
else
{
$this->firstResult = $this->padeg($osnova, array('і', 'і', '', $duplicate.$apostrof. 'ю', 'і', 'е'));
$this->frule = 401;
return true;
}
}
else
{
$this->makeFirstTheSame();
}
}
/*
* Функция, которая склоняет фамилию записаное в $this->secondName, по правилам склонения мужских фамилий.
*
* @return boolean
*/
protected function manSecondName()
{
/*
Українські чоловічі та жіночі імена, що в називному відмінку однини закінчуються на -а (-я), відмінються як відповідні іменники І відміни
Примітка 1. Кінцеві приголосні основи г, к, х у жіночих іменах у давальному та місцевому відмінках однини перед закінченням -і змінюються на з, ц, с: Ольга - Ользі, Палажка - Палажці, Солоха - Солосі.
Примітка 2. У жіночих іменах типу Одарка, Параска в родовому відмінку множини в кінці основи між приголосними з'являється звук о: Одарок, Парасок */
//Последний символ
$LastSymbol = mb_substr($this->secondName, -1, 1, 'utf-8');
//Предпоследний символ
$BeforeLast = mb_substr($this->secondName, -2, 1, 'utf-8');
//Якщо закінчується на ий
if($BeforeLast.$LastSymbol=='ий' or $BeforeLast.$LastSymbol=='ой')
{
$this->secondResult = $this->padeg($this->secondName, array('ого', 'ому', 'ого', 'им', 'ому', 'ий'),true,true);
$this->srule = 9;
return true;
}
//Останні літера або а або я
elseif ($LastSymbol == 'а')
{
$this->secondResult = $this->padeg($this->secondName, array($BeforeLast . 'и', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'у', $BeforeLast . 'ою', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'о'), false, true);
$this->srule = 101;
return true;
}
elseif ($LastSymbol == 'я')
{
if ($BeforeLast == 'і')
{
$this->secondResult = $this->padeg($this->secondName, array('ї', 'ї', 'ю', 'єю', 'ї', 'є'), true);
$this->srule = 103;
return true;
}
else
{
$this->secondResult = $this->padeg($this->secondName, array($BeforeLast . 'і', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'ю', $BeforeLast . 'ею', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'е'), false, true);
$this->srule = 102;
return true;
}
}
//Примітка 2. Імена, що в називному відмінку закінчуються на -р, у родовому мають закінчення -а: Віктор - Віктора, Макар - Макара, але: Ігор - Ігоря, Лазар - Лазаря.
elseif ($LastSymbol == 'р')
{
if ($this->secondName == 'Ігор' or $this->secondName == 'Лазар')
{
$this->secondResult = $this->padeg($this->secondName, array('я', 'еві', 'я', 'ем', 'еві', 'е'));
$this->srule = 201;
return true;
}
else
{
$osnova = $this->secondName;
if (mb_substr($osnova, -2, 1, 'utf-8') == 'і')
{
$osnova = mb_substr($osnova, 0, mb_strlen($osnova, 'utf-8') - 2, 'utf-8') . 'о' . mb_substr($osnova, -1, 1, 'utf-8');
}
$this->secondResult = $this->padeg($osnova, array('а', 'ові', 'а', 'ом', 'ові', 'е'));
$this->srule = 202;
return true;
}
}
//2. Українські чоловічі імена, що в називному відмінку однини закінчуються на приголосний та -о , відмінюються як відповідні іменники ІІ відміни.
elseif ($this->in($LastSymbol, $this->consonant . 'оь'))
{
$group = $this->detect2Group($this->secondName);
$osnova = $this->getOsnova($this->secondName);
//В іменах типу Антін, Нестір, Нечипір, Прокіп, Сидір, Тиміш, Федір голосний і виступає тільки в називному відмінку, у непрямих - о: Антона, Антонові
//Чергування іо всередині
$osLast = mb_substr($osnova, -1, 1, 'utf-8');
if ($osLast != 'й' and mb_substr($osnova, -2, 1, 'utf-8') == 'і' and !in_array(mb_substr(mb_strtolower($osnova, 'utf-8'), -4, 4, 'utf-8'), array('світ', 'цвіт')) and !in_array($this->secondName, array('Гліб')))
{
$osnova = mb_substr($osnova, 0, mb_strlen($osnova, 'utf-8') - 2, 'utf-8') . 'о' . mb_substr($osnova, -1, 1, 'utf-8');
}
//Випадання букви е при відмінюванні слів типу Орел
if (mb_substr($osnova, 0, 1, 'utf-8') == 'О' and $this->FirstLastVowel($osnova, $this->vowels . 'гк') == 'е' and $BeforeLast . $LastSymbol != 'сь')
{
$delim = mb_strrpos($osnova, 'е', null, 'utf-8');
$osnova = mb_substr($osnova, 0, $delim, 'utf-8') . mb_substr($osnova, $delim + 1, mb_strlen($osnova, 'utf-8') - $delim, 'utf-8');
}
if ($group == 1)
{
//Слова що закінчуються на ок
if (mb_substr($this->secondName, -2, 2, 'utf-8')=='ок')
{
$this->secondResult = $this->padeg(mb_substr($this->secondName,0,(mb_strlen($this->secondName, 'utf-8')-2), 'utf-8'), array('ка', 'кові', 'ка', 'ком', 'кові', 'че'));
$this->srule = 30101;
return true;
}
//Російські прізвища на ов, ев, єв
elseif (in_array(mb_substr($this->secondName, -2, 2, 'utf-8'),array('ов','ев','єв')))
{
$this->secondResult = $this->padeg($osnova, array($osLast . 'а', $osLast . 'у', $osLast . 'а', $osLast . 'им', $osLast . 'у', $this->inverse2($osLast) . 'е'), true);
$this->srule = 30102;
return true;
}
//Російські прізвища на ін
elseif (in_array(mb_substr($this->secondName, -2, 2, 'utf-8'),array('ін')))
{
$this->secondResult = $this->padeg($this->secondName, array('а', 'у', 'а', 'ом', 'у', 'е'));
$this->srule = 30103;
return true;
}
else
{
//Тверда група
$this->secondResult = $this->padeg($osnova, array($osLast . 'а', $osLast . 'ові', $osLast . 'а', $osLast . 'ом', $osLast . 'ові', $this->inverse2($osLast) . 'е'), true);
$this->srule = 301;
return true;
}
}
if ($group == 2)
{
//Мішана група
$this->secondResult = $this->padeg($osnova, array('а', 'еві', 'а', 'ем', 'еві', 'е'));
$this->srule = 302;
return true;
}
if ($group == 3)
{
//М’яка група
//Соловей
if (mb_substr($this->secondName, -2, 2, 'utf-8') == 'ей' and $this->in(mb_substr($this->secondName, -3, 1, 'utf-8'),$this->gubni))
{
$osnova = mb_substr($this->secondName, 0, mb_strlen($this->secondName, 'utf-8') - 2, 'utf-8') . '';
$this->secondResult = $this->padeg($osnova, array('я', 'єві', 'я', 'єм', 'єві', 'ю'));
$this->srule = 305;
return true;
}
elseif ($BeforeLast == 'і' or $LastSymbol == 'й')
{
$this->secondResult = $this->padeg($this->secondName, array('я', 'єві', 'я', 'єм', 'єві', 'ю'), true);
$this->srule = 304;
return true;
}
//Слова що закінчуються на ець
elseif (mb_substr($this->secondName, -3, 3, 'utf-8')=='ець')
{
$this->secondResult = $this->padeg(mb_substr($this->secondName,0,(mb_strlen($this->secondName, 'utf-8')-3), 'utf-8').'ц', array('я', 'еві', 'я', 'ем', 'еві', 'ю'));
$this->srule = 305;
return true;
}
//Слова що закінчуються на єць яць
elseif (in_array(mb_substr($this->secondName, -3, 3, 'utf-8'),array('єць','яць')))
{
$this->secondResult = $this->padeg(mb_substr($this->secondName,0,(mb_strlen($this->secondName, 'utf-8')-3), 'utf-8').'йц', array('я', 'еві', 'я', 'ем', 'еві', 'ю'));
$this->srule = 306;
return true;
}
else
{
$this->secondResult = $this->padeg($osnova, array('я', 'еві', 'я', 'ем', 'еві', 'ю'));
$this->srule = 303;
return true;
}
}
}
elseif ($LastSymbol=='і')
{
$this->secondResult = $this->padeg($this->secondName, array('их', 'им', 'их', 'ими', 'их', 'і'), true);
$this->srule = 4;
return true;
}
else
{
$this->makeSecondTheSame();
}
}
/*
* Функция, которая склоняет фамилию записаное в $this->secondName, по правилам склонения женских фамилий.
*
* @return boolean
*/
protected function womanSecondName()
{
/*
Українські чоловічі та жіночі імена, що в називному відмінку однини закінчуються на -а (-я), відмінються як відповідні іменники І відміни
Примітка 1. Кінцеві приголосні основи г, к, х у жіночих іменах у давальному та місцевому відмінках однини перед закінченням -і змінюються на з, ц, с: Ольга - Ользі, Палажка - Палажці, Солоха - Солосі.
Примітка 2. У жіночих іменах типу Одарка, Параска в родовому відмінку множини в кінці основи між приголосними з'являється звук о: Одарок, Парасок */
//Последний символ
$LastSymbol = mb_substr($this->secondName, -1, 1, 'utf-8');
//Предпоследний символ
$BeforeLast = mb_substr($this->secondName, -2, 1, 'utf-8');
//Якщо закінчується на ніга -» нога
if (mb_substr($this->secondName, -4, 4, 'utf-8') == 'ніга')
{
$osnova = mb_substr($this->secondName, 0, mb_strlen($this->secondName, 'utf-8')-3, 'utf-8').'о';
$this->secondResult = $this->padeg($osnova, array('ги', 'зі', 'гу', 'гою', 'зі', 'го'));
$this->srule = 10101;
return true;
}
//Ті що на ськ
elseif ($LastSymbol == 'а' and (in_array(mb_substr($this->secondName, -3, 2, 'utf-8'),array('ов','ев','єв','ив','ьк','тн','рн'))))
{
$this->secondResult = $this->padeg($this->secondName, array($BeforeLast . 'ої', $BeforeLast . 'ій', $BeforeLast . 'у', $BeforeLast . 'ою', $BeforeLast . 'ій', $BeforeLast . 'о'), false, true);
$this->srule = 101;
return true;
}
//Останні літера або а або я
elseif ($LastSymbol == 'а')
{
$this->secondResult = $this->padeg($this->secondName, array($BeforeLast . 'и', $BeforeLast . 'і', $BeforeLast . 'у', $BeforeLast . 'ою', $BeforeLast . 'і', $BeforeLast . 'о'), false, true);
$this->srule = 101;
return true;
}
elseif ($LastSymbol == 'я')
{
if ($this->in($BeforeLast, $this->vowels))
{
$this->secondResult = $this->padeg($this->secondName, array('ї', 'ї', 'ю', 'єю', 'ї', 'є'), true);
$this->srule = 103;
return true;
}
else
{
$this->secondResult = $this->padeg($this->secondName, array($BeforeLast . 'і', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'ю', $BeforeLast . 'ею', $this->inverseGKH($BeforeLast) . 'і', $BeforeLast . 'е'), false, true);
$this->srule = 102;
return true;
}
}
else
{
$this->makeSecondTheSame();
}
}
/*
* Функция, которая склоняет отчество записаное в $this->secondName, по правилам склонения мужских отчеств.
*
* @return boolean
*/
protected function manFatherName()
{
$ending = mb_substr($this->fatherName, -2, 2, 'utf-8');
if ($ending == 'ич' or $ending== 'іч')
{
$this->fatherResult = $this->padeg($this->fatherName, array('а', 'у', 'а', 'ем', 'у', 'у'), false, false);
return true;
}
else
{
$this->makeFatherTheSame();
return false;
}
}
/*
* Функция, которая склоняет отчество записаное в $this->fatherName, по правилам склонения женских отчеств.
*
* @return boolean
*/
protected function womanFatherName()
{
if (mb_substr($this->fatherName, -3, 3, 'utf-8') == 'вна')
{
$this->fatherResult = $this->padeg($this->fatherName, array('и', 'і', 'у', 'ою', 'і', 'о'), true, false);
return true;
}
else
{
$this->makeFatherTheSame();
return false;
}
}
/*
* Автоматическое определение пола
* @return void
*/
protected function genderDetect()
{
//$this->gender = NCL::$MAN; // мужчина
return true;
}
/*
* Определение текущее слово есть фамилией, именем или отчеством
* @return integer $number - 1-фамили 2-имя 3-отчество
*/
protected function detectNamePart($namepart)
{
return 'N';
}
}
?>

View File

@ -0,0 +1,69 @@
<?php
require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ua.php';
class NCLNameCaseUaTest extends PHPUnit_Framework_TestCase
{
/**
* @var NCLNameCaseRu
*/
protected $object;
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
$this->object = new NCLNameCaseUa;
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown()
{
}
public function testFatherMan0()
{
$this->object->setFatherName('Олександрович');
$this->object->setGender(1);
$this->assertEquals(explode(',','Олександрович,Олександровича,Олександровичу,Олександровича,Олександровичем,Олександровичу,Олександровичу'), $this->object->getFatherNameCase());
}
public function testFatherMan1()
{
$this->object->setFatherName('Миколайович');
$this->object->setGender(1);
$this->assertEquals(explode(',','Миколайович,Миколайовича,Миколайовичу,Миколайовича,Миколайовичем,Миколайовичу,Миколайовичу'), $this->object->getFatherNameCase());
}
public function testFatherMan2()
{
$this->object->setFatherName('Кузьмич');
$this->object->setGender(1);
$this->assertEquals(explode(',','Кузьмич,Кузьмича,Кузьмичу,Кузьмича,Кузьмичем,Кузьмичу,Кузьмичу'), $this->object->getFatherNameCase());
}
public function testFatherMan3()
{
$this->object->setFatherName('Петрович');
$this->object->setGender(1);
$this->assertEquals(explode(',','Петрович,Петровича,Петровичу,Петровича,Петровичем,Петровичу,Петровичу'), $this->object->getFatherNameCase());
}
public function testFatherMan4()
{
$this->object->setFatherName('Ілліч');
$this->object->setGender(1);
$this->assertEquals(explode(',','Ілліч,Ілліча,Іллічу,Ілліча,Іллічем,Іллічу,Іллічу'), $this->object->getFatherNameCase());
}
}

View File

@ -0,0 +1,55 @@
<?php
require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ua.php';
class NCLNameCaseUaTest extends PHPUnit_Framework_TestCase
{
/**
* @var NCLNameCaseRu
*/
protected $object;
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
$this->object = new NCLNameCaseUa;
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown()
{
}
public function testFatherWoman0()
{
$this->object->setFatherName('Василівна');
$this->object->setGender(2);
$this->assertEquals(explode(',','Василівна,Василівни,Василівні,Василівну,Василівною,Василівні,Василівно'), $this->object->getFatherNameCase());
}
public function testFatherWoman1()
{
$this->object->setFatherName('Антонівна');
$this->object->setGender(2);
$this->assertEquals(explode(',','Антонівна,Антонівни,Антонівні,Антонівну,Антонівною,Антонівні,Антонівно'), $this->object->getFatherNameCase());
}
public function testFatherWoman2()
{
$this->object->setFatherName('Яківна');
$this->object->setGender(2);
$this->assertEquals(explode(',','Яківна,Яківни,Яківні,Яківну,Яківною,Яківні,Яківно'), $this->object->getFatherNameCase());
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,442 @@
<?php
require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ru.php';
class NCLNameCaseRuTest extends PHPUnit_Framework_TestCase
{
/**
* @var NCLNameCaseRu
*/
protected $object;
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
$this->object = new NCLNameCaseRu;
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown()
{
}
public function testSplDetect0()
{
$this->assertEquals('F-Александрович', $this->object->splitFullName('Александрович').'-Александрович');
}
public function testSplDetect1()
{
$this->assertEquals('F-Алексеевич', $this->object->splitFullName('Алексеевич').'-Алексеевич');
}
public function testSplDetect2()
{
$this->assertEquals('F-Анатольевич', $this->object->splitFullName('Анатольевич').'-Анатольевич');
}
public function testSplDetect3()
{
$this->assertEquals('F-Андреевич', $this->object->splitFullName('Андреевич').'-Андреевич');
}
public function testSplDetect4()
{
$this->assertEquals('F-Антонович', $this->object->splitFullName('Антонович').'-Антонович');
}
public function testSplDetect5()
{
$this->assertEquals('F-Аркадьевич', $this->object->splitFullName('Аркадьевич').'-Аркадьевич');
}
public function testSplDetect6()
{
$this->assertEquals('F-Богданович', $this->object->splitFullName('Богданович').'-Богданович');
}
public function testSplDetect7()
{
$this->assertEquals('F-Борисович', $this->object->splitFullName('Борисович').'-Борисович');
}
public function testSplDetect8()
{
$this->assertEquals('F-Валентинович', $this->object->splitFullName('Валентинович').'-Валентинович');
}
public function testSplDetect9()
{
$this->assertEquals('F-Валерьевич', $this->object->splitFullName('Валерьевич').'-Валерьевич');
}
public function testSplDetect10()
{
$this->assertEquals('F-Васильевич', $this->object->splitFullName('Васильевич').'-Васильевич');
}
public function testSplDetect11()
{
$this->assertEquals('F-Викторович', $this->object->splitFullName('Викторович').'-Викторович');
}
public function testSplDetect12()
{
$this->assertEquals('F-Владимирович', $this->object->splitFullName('Владимирович').'-Владимирович');
}
public function testSplDetect13()
{
$this->assertEquals('F-Вячеславович', $this->object->splitFullName('Вячеславович').'-Вячеславович');
}
public function testSplDetect14()
{
$this->assertEquals('F-Генадиевич', $this->object->splitFullName('Генадиевич').'-Генадиевич');
}
public function testSplDetect15()
{
$this->assertEquals('F-Георгиевич', $this->object->splitFullName('Георгиевич').'-Георгиевич');
}
public function testSplDetect16()
{
$this->assertEquals('F-Григорьевич', $this->object->splitFullName('Григорьевич').'-Григорьевич');
}
public function testSplDetect17()
{
$this->assertEquals('F-Данилович', $this->object->splitFullName('Данилович').'-Данилович');
}
public function testSplDetect18()
{
$this->assertEquals('F-Дмитриевич', $this->object->splitFullName('Дмитриевич').'-Дмитриевич');
}
public function testSplDetect19()
{
$this->assertEquals('F-Евгеньевич', $this->object->splitFullName('Евгеньевич').'-Евгеньевич');
}
public function testSplDetect20()
{
$this->assertEquals('F-Егорович', $this->object->splitFullName('Егорович').'-Егорович');
}
public function testSplDetect21()
{
$this->assertEquals('F-Ефимович', $this->object->splitFullName('Ефимович').'-Ефимович');
}
public function testSplDetect22()
{
$this->assertEquals('F-Иванович', $this->object->splitFullName('Иванович').'-Иванович');
}
public function testSplDetect23()
{
$this->assertEquals('F-Игоревич', $this->object->splitFullName('Игоревич').'-Игоревич');
}
public function testSplDetect24()
{
$this->assertEquals('F-Ильич', $this->object->splitFullName('Ильич').'-Ильич');
}
public function testSplDetect25()
{
$this->assertEquals('F-Иосифович', $this->object->splitFullName('Иосифович').'-Иосифович');
}
public function testSplDetect26()
{
$this->assertEquals('F-Кириллович', $this->object->splitFullName('Кириллович').'-Кириллович');
}
public function testSplDetect27()
{
$this->assertEquals('F-Константинович', $this->object->splitFullName('Константинович').'-Константинович');
}
public function testSplDetect28()
{
$this->assertEquals('F-Леонидович', $this->object->splitFullName('Леонидович').'-Леонидович');
}
public function testSplDetect29()
{
$this->assertEquals('F-Львович', $this->object->splitFullName('Львович').'-Львович');
}
public function testSplDetect30()
{
$this->assertEquals('F-Максимович', $this->object->splitFullName('Максимович').'-Максимович');
}
public function testSplDetect31()
{
$this->assertEquals('F-Матвеевич', $this->object->splitFullName('Матвеевич').'-Матвеевич');
}
public function testSplDetect32()
{
$this->assertEquals('F-Михайлович', $this->object->splitFullName('Михайлович').'-Михайлович');
}
public function testSplDetect33()
{
$this->assertEquals('F-Николаевич', $this->object->splitFullName('Николаевич').'-Николаевич');
}
public function testSplDetect34()
{
$this->assertEquals('F-Олегович', $this->object->splitFullName('Олегович').'-Олегович');
}
public function testSplDetect35()
{
$this->assertEquals('F-Павлович', $this->object->splitFullName('Павлович').'-Павлович');
}
public function testSplDetect36()
{
$this->assertEquals('F-Петрович', $this->object->splitFullName('Петрович').'-Петрович');
}
public function testSplDetect37()
{
$this->assertEquals('F-Платонович', $this->object->splitFullName('Платонович').'-Платонович');
}
public function testSplDetect38()
{
$this->assertEquals('F-Робертович', $this->object->splitFullName('Робертович').'-Робертович');
}
public function testSplDetect39()
{
$this->assertEquals('F-Романович', $this->object->splitFullName('Романович').'-Романович');
}
public function testSplDetect40()
{
$this->assertEquals('F-Семенович', $this->object->splitFullName('Семенович').'-Семенович');
}
public function testSplDetect41()
{
$this->assertEquals('F-Сергеевич', $this->object->splitFullName('Сергеевич').'-Сергеевич');
}
public function testSplDetect42()
{
$this->assertEquals('F-Степанович', $this->object->splitFullName('Степанович').'-Степанович');
}
public function testSplDetect43()
{
$this->assertEquals('F-Станиславович', $this->object->splitFullName('Станиславович').'-Станиславович');
}
public function testSplDetect44()
{
$this->assertEquals('F-Тарасович', $this->object->splitFullName('Тарасович').'-Тарасович');
}
public function testSplDetect45()
{
$this->assertEquals('F-Тимофеевич', $this->object->splitFullName('Тимофеевич').'-Тимофеевич');
}
public function testSplDetect46()
{
$this->assertEquals('F-Федорович', $this->object->splitFullName('Федорович').'-Федорович');
}
public function testSplDetect47()
{
$this->assertEquals('F-Феликсович', $this->object->splitFullName('Феликсович').'-Феликсович');
}
public function testSplDetect48()
{
$this->assertEquals('F-Филиппович', $this->object->splitFullName('Филиппович').'-Филиппович');
}
public function testSplDetect49()
{
$this->assertEquals('F-Эдуардович', $this->object->splitFullName('Эдуардович').'-Эдуардович');
}
public function testSplDetect50()
{
$this->assertEquals('F-Юрьевич', $this->object->splitFullName('Юрьевич').'-Юрьевич');
}
public function testSplDetect51()
{
$this->assertEquals('F-Яковлевич', $this->object->splitFullName('Яковлевич').'-Яковлевич');
}
public function testSplDetect52()
{
$this->assertEquals('F-Ярославочвич', $this->object->splitFullName('Ярославочвич').'-Ярославочвич');
}
public function testSplDetect53()
{
$this->assertEquals('F-Александровна', $this->object->splitFullName('Александровна').'-Александровна');
}
public function testSplDetect54()
{
$this->assertEquals('F-Алексеевна', $this->object->splitFullName('Алексеевна').'-Алексеевна');
}
public function testSplDetect55()
{
$this->assertEquals('F-Анатольевна', $this->object->splitFullName('Анатольевна').'-Анатольевна');
}
public function testSplDetect56()
{
$this->assertEquals('F-Андреевна', $this->object->splitFullName('Андреевна').'-Андреевна');
}
public function testSplDetect57()
{
$this->assertEquals('F-Антоновна', $this->object->splitFullName('Антоновна').'-Антоновна');
}
public function testSplDetect58()
{
$this->assertEquals('F-Аркадьевна', $this->object->splitFullName('Аркадьевна').'-Аркадьевна');
}
public function testSplDetect59()
{
$this->assertEquals('F-Богдановна', $this->object->splitFullName('Богдановна').'-Богдановна');
}
public function testSplDetect60()
{
$this->assertEquals('F-Борисовна', $this->object->splitFullName('Борисовна').'-Борисовна');
}
public function testSplDetect61()
{
$this->assertEquals('F-Валентиновна', $this->object->splitFullName('Валентиновна').'-Валентиновна');
}
public function testSplDetect62()
{
$this->assertEquals('F-Валерьевна', $this->object->splitFullName('Валерьевна').'-Валерьевна');
}
public function testSplDetect63()
{
$this->assertEquals('F-Васильевна', $this->object->splitFullName('Васильевна').'-Васильевна');
}
public function testSplDetect64()
{
$this->assertEquals('F-Викторовна', $this->object->splitFullName('Викторовна').'-Викторовна');
}
public function testSplDetect65()
{
$this->assertEquals('F-Владимировна', $this->object->splitFullName('Владимировна').'-Владимировна');
}
public function testSplDetect66()
{
$this->assertEquals('F-Владиславовна', $this->object->splitFullName('Владиславовна').'-Владиславовна');
}
public function testSplDetect67()
{
$this->assertEquals('F-Вячеславовна', $this->object->splitFullName('Вячеславовна').'-Вячеславовна');
}
public function testSplDetect68()
{
$this->assertEquals('F-Генадиевна', $this->object->splitFullName('Генадиевна').'-Генадиевна');
}
public function testSplDetect69()
{
$this->assertEquals('F-Георгиевна', $this->object->splitFullName('Георгиевна').'-Георгиевна');
}
public function testSplDetect70()
{
$this->assertEquals('F-Григорьевна', $this->object->splitFullName('Григорьевна').'-Григорьевна');
}
public function testSplDetect71()
{
$this->assertEquals('F-Даниловна', $this->object->splitFullName('Даниловна').'-Даниловна');
}
public function testSplDetect72()
{
$this->assertEquals('F-Дмитриевна', $this->object->splitFullName('Дмитриевна').'-Дмитриевна');
}
public function testSplDetect73()
{
$this->assertEquals('F-Евгеньевна', $this->object->splitFullName('Евгеньевна').'-Евгеньевна');
}
public function testSplDetect74()
{
$this->assertEquals('F-Егоровна', $this->object->splitFullName('Егоровна').'-Егоровна');
}
public function testSplDetect75()
{
$this->assertEquals('F-Ефимовна', $this->object->splitFullName('Ефимовна').'-Ефимовна');
}
public function testSplDetect76()
{
$this->assertEquals('F-Ивановна', $this->object->splitFullName('Ивановна').'-Ивановна');
}
public function testSplDetect77()
{
$this->assertEquals('F-Игоревна', $this->object->splitFullName('Игоревна').'-Игоревна');
}
public function testSplDetect78()
{
$this->assertEquals('F-Ильинична', $this->object->splitFullName('Ильинична').'-Ильинична');
}
public function testSplDetect79()
{
$this->assertEquals('F-Кирилловна', $this->object->splitFullName('Кирилловна').'-Кирилловна');
}
public function testSplDetect80()
{
$this->assertEquals('F-Константиновна', $this->object->splitFullName('Константиновна').'-Константиновна');
}
public function testSplDetect81()
{
$this->assertEquals('F-Леонидовна', $this->object->splitFullName('Леонидовна').'-Леонидовна');
}
public function testSplDetect82()
{
$this->assertEquals('F-Львовна', $this->object->splitFullName('Львовна').'-Львовна');
}
public function testSplDetect83()
{
$this->assertEquals('F-Максимовна', $this->object->splitFullName('Максимовна').'-Максимовна');
}
public function testSplDetect84()
{
$this->assertEquals('F-Михайловна', $this->object->splitFullName('Михайловна').'-Михайловна');
}
public function testSplDetect85()
{
$this->assertEquals('F-Николаевна', $this->object->splitFullName('Николаевна').'-Николаевна');
}
public function testSplDetect86()
{
$this->assertEquals('F-Олеговна', $this->object->splitFullName('Олеговна').'-Олеговна');
}
public function testSplDetect87()
{
$this->assertEquals('F-Павловна', $this->object->splitFullName('Павловна').'-Павловна');
}
public function testSplDetect88()
{
$this->assertEquals('F-Петровна', $this->object->splitFullName('Петровна').'-Петровна');
}
public function testSplDetect89()
{
$this->assertEquals('F-Робертовна', $this->object->splitFullName('Робертовна').'-Робертовна');
}
public function testSplDetect90()
{
$this->assertEquals('F-Романовна', $this->object->splitFullName('Романовна').'-Романовна');
}
public function testSplDetect91()
{
$this->assertEquals('F-Семеновна', $this->object->splitFullName('Семеновна').'-Семеновна');
}
public function testSplDetect92()
{
$this->assertEquals('F-Сергеевна', $this->object->splitFullName('Сергеевна').'-Сергеевна');
}
public function testSplDetect93()
{
$this->assertEquals('F-Степановна', $this->object->splitFullName('Степановна').'-Степановна');
}
public function testSplDetect94()
{
$this->assertEquals('F-Станиславовна', $this->object->splitFullName('Станиславовна').'-Станиславовна');
}
public function testSplDetect95()
{
$this->assertEquals('F-Тарасовна', $this->object->splitFullName('Тарасовна').'-Тарасовна');
}
public function testSplDetect96()
{
$this->assertEquals('F-Федоровна', $this->object->splitFullName('Федоровна').'-Федоровна');
}
public function testSplDetect97()
{
$this->assertEquals('F-Феликсовна', $this->object->splitFullName('Феликсовна').'-Феликсовна');
}
public function testSplDetect98()
{
$this->assertEquals('F-Филипповна', $this->object->splitFullName('Филипповна').'-Филипповна');
}
public function testSplDetect99()
{
$this->assertEquals('F-Эдуардовна', $this->object->splitFullName('Эдуардовна').'-Эдуардовна');
}
public function testSplDetect100()
{
$this->assertEquals('F-Юрьевна', $this->object->splitFullName('Юрьевна').'-Юрьевна');
}
public function testSplDetect101()
{
$this->assertEquals('F-Яковлевна', $this->object->splitFullName('Яковлевна').'-Яковлевна');
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,86 @@
<?php
class TestGeneratorDB
{
public $maintemplate;
public $testtemplate;
public $resultArr = array();
private $gender;
private $tests;
private $count = 0;
public function __construct()
{
mysql_connect('localhost', 'root', '');
mysql_select_db('names');
mysql_set_charset('utf8');
//$this->resultArr[]=file('Names/boy_full_result.txt');
//$this->resultArr[]=file('Names/girl_full_result.txt');
}
public function generate($fname, $gender)
{
$this->maintemplate = file_get_contents('Template/NCLNameCaseUaTest.main');
$this->testtemplate = file_get_contents('Template/NCLNameCaseRuTest' . $fname . $gender . '.test');
//$this->resultArr=file('Names/'.$gender.'_full_result.txt');
$this->count = 0;
if ($gender == 'boy')
{
$this->gender = 1;
$this->dbTable = 'boy' . strtolower($fname);
}
else
{
$this->gender = 2;
$this->dbTable = 'girl' . strtolower($fname) ;
}
$this->resultArr = mysql_query("SELECT * FROM {$this->dbTable}");
//foreach ($this->resultArr as $key=>$value)
//{
//$this->gender=$key+1;
$all = array();
while ($row = mysql_fetch_assoc($this->resultArr))
{
//$tmpnames=explode("#",trim(str_replace('ё','е',$name)));
$firstRes = array();
$secondRes = array();
$fatherRes = array();
$secondRes = $fatherRes = $firstRes = explode('#', $row['nameCase']);
$this->generateTest($firstRes, $secondRes, $fatherRes);
}
//}
$res = str_replace('{% tests %}', $this->tests, $this->maintemplate);
$res = str_replace('{% name %}', $fname, $res);
file_put_contents('../Library/NCLNameCaseUaTest' . $fname . $gender . '.php', $res);
}
private function generateTest($firstRes, $secondRes, $fatherRes)
{
$tpl = $this->testtemplate;
$tpl = str_replace('{% id %}', $this->count, $tpl);
$tpl=str_replace('{% second %}', $secondRes[0], $tpl);
$tpl = str_replace('{% first %}', $firstRes[0], $tpl);
$tpl=str_replace('{% father %}', $fatherRes[0], $tpl);
$tpl = str_replace('{% gender %}', $this->gender, $tpl);
$tpl = str_replace('{% firstOK %}', implode(',', $firstRes), $tpl);
$tpl = str_replace('{% secondOK %}', implode(',', $secondRes), $tpl);
$tpl = str_replace('{% fatherOK %}', implode(',', $fatherRes), $tpl);
$this->tests.=$tpl;
$this->count++;
}
}
$p = new TestGeneratorDB;
$p->generate('Names', 'boy');
$p = new TestGeneratorDB;
$p->generate('Names', 'girl');
$p = new TestGeneratorDB;
$p->generate('Father', 'boy');
$p = new TestGeneratorDB;
$p->generate('Father', 'girl');
?>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -3,6 +3,8 @@
Абрамов
Авдеев
Аверин
Котляр
Кобзарь
Аверьянов
Агапов
Агафонов

View File

@ -0,0 +1,42 @@
<?php
function cl($text)
{
return trim($text);
}
$type='boy';
$names=file($type.'name.txt');
$sirnames=file($type.'sirname.txt');
$countname=count($names);
$countsirname=count($sirnames);
$all=max(array($countname, $countsirname));
$res=array();
$cur=0;
for ($i=0;$i<$all;$i++)
{
$cur++;
$full="";
if ($cur>$countsirname)
{
$full=cl($sirnames[rand(0,($countsirname-1))]);
}
else
{
$full=cl($sirnames[$i]);
}
$full.=' ';
if ($cur>$countname)
{
$full.=cl($names[rand(0,($countname-1))]);
}
else
{
$full.=cl($names[$i]);
}
$res[]=$full;
}
print_r(implode("\n", $res));
file_put_contents('../Names/'.$type."_SF.txt", implode("\n", $res));
?>

View File

@ -0,0 +1,34 @@
<?php
require_once dirname(__FILE__) . '/../../Library/NCL.NameCase.ua.php';
class NCLNameCaseUaTest extends PHPUnit_Framework_TestCase
{
/**
* @var NCLNameCaseRu
*/
protected $object;
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
$this->object = new NCLNameCaseUa;
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown()
{
}
{% tests %}
}

View File

@ -0,0 +1,5 @@
public function testSplDetect{% id %}()
{
$this->assertEquals('{% gender %}-{% name %}', $this->object->splitFullName('{% name %}').'-{% name %}');
}

View File

@ -0,0 +1,80 @@
<?php
class TestGenerator
{
public $maintemplate;
public $testtemplate;
public $resultArrB=array();
public $resultArrG=array();
private $gender;
private $tests;
private $count=0;
public function __construct()
{
//$this->resultArr[]=file('Names/boy_full_result.txt');
//$this->resultArr[]=file('Names/girl_full_result.txt');
}
public function generate($fname)
{
$this->maintemplate = file_get_contents('Template/NCLNameCaseRuTest.main');
$this->testtemplate = file_get_contents('Template/NameSplit.test');
$this->resultArrB=file('NamesAll/boy'.$fname.'.txt');
$this->resultArrG=file('NamesAll/girl'.$fname.'.txt');
$this->count=0;
if ($fname=='name')
$this->gender='N';
elseif($fname=='sirname')
$this->gender='S';
else
{
$this->gender='F';
}
//foreach ($this->resultArr as $key=>$value)
//{
//$this->gender=$key+1;
foreach ($this->resultArrB as $id=>$name)
{
$this->generateTest(trim($name));
}
//foreach ($this->resultArr as $key=>$value)
//{
//$this->gender=$key+1;
foreach ($this->resultArrG as $id=>$name)
{
$this->generateTest(trim($name));
}
//}
$res=str_replace('{% tests %}', $this->tests, $this->maintemplate);
$res=str_replace('{% name %}', $fname, $res);
file_put_contents('../Library/NameSplit'.$fname.'.php',$res);
}
private function generateTest($name)
{
$tpl=$this->testtemplate;
$tpl=str_replace('{% id %}', $this->count, $tpl);
$tpl=str_replace('{% name %}', $name, $tpl);
$tpl=str_replace('{% gender %}', $this->gender, $tpl);
$this->tests.=$tpl;
$this->count++;
}
}
$p= new TestGenerator;
$p->generate('name');
$p= new TestGenerator;
$p->generate('sirname');
$p= new TestGenerator;
$p->generate('father');
?>

View File

@ -0,0 +1,5 @@
Олександрович
Миколайович
Кузьмич
Петрович
Ілліч

View File

@ -0,0 +1,513 @@
Аарон
Абакум
Абрам
Августин
Авесалом
Авксентій
Аврелій
Автоном
Адам
Адріян
Адріан
Азар
Алевтин
Альберт
Амвросій
Амнон
Амос
Анастас
Анастасій
Андрій
Антоній
Антон
Анісій
Аркадій
Арсен
Арсеній
Артем
Архип
Артем
Атанас
Аскольд
Бажан
Біловид
Білогост
Біломир
Білослав
Білотур
Білян
Благовид
Благовіст
Благодар
Благодат
Благомир
Благослав
Богдан
Боговір
Боговіст
Богодар
Боголад
Боголіп
Боголюб
Богород
Богосвят
Богумил
Богумир
Богуслав
Бож
Божан
Божедар
Божейко
Божемир
Божен
Божко
Болеслав
Боримир
Боримисл
Борис
Борислав
Боян
Братан
Бративой
Братимир
Братислав
Братко
Братомил
Братослав
Брячислав
Боронислав
Будивид
Будивой
Будимил
Будимир
Будислав
Буймир
Буйтур
Буревій
Буревіст
Василь
Ведан
Велемир
Велемудр
Велет
Величар
Величко
Вербан
Вернидуб
Вернислав
Веселан
Витомир
Вишата
Вишезор
Вишеслав
Вір
Віродан
Віродар
Вірослав
Віст
Вістан
Вітан
Вітомир
Вітрян
Влад
Владислав
Власт
Вогнедар
Вогнян
Водограй
Водотрав
Воїслав
Волелюб
Володар
Володимир
Володислав
Воля
Воротислав
Вратан
Вратислав
Всевлад
Всеволод
Вселюб
Вселюд
Всеслав
В'ячеслав
Гарнослав
Гатусил
Гатуслав
Гервасій
Гладко
Гліб
Годомир
Голубко
Горун
Гордій
Гордислав
Гордогост
Гордодум
Гордомисл
Гордослав
Гордята
Горигляд
Горимир
Горимисл
Горисвіт
Горислав
Горицвіт
Гостомисл
Гострозір
Гостята
Градимир
Градислав
Гранислав
Грива
Григорій
Гремислав
Грозан
Громовик
Гуляйвітер
Густомисл
Далемил
Далемир
Далібор
Дан
Данило
Данко
Дантур
Дар
Дарій
Дарибог
Даромир
Держикрай
Держислав
Дибач
Дивозір
Дій
Добрибій
Добривод
Добрик
Добрило
Добриня
Добрисвіт
Добровіст
Доброгост
Добродум
Добролик
Добролюб
Добромил
Добромир
Добромисл
Доброслав
Доморад
Домослав
Дорогобуг
Дорогомир
Дорогомисл
Дорогосил
Дорогочин
Драган
Дружелюб
Жадан
Ждан
Живорід
Живосил
Живослав
Житомир
Життєлюб
Збоїслав
Зборислав
Звенигор
Звенимир
Звенислав
Здоровега
Земислав
Зеновій
Зіновій
Зиновій
Злат
Златомир
Златоус
Златодан
Злотан
Злотодан
Зорегляд
Зоремир
Зорепад
Зореслав
Зорян
Ізяслав
Ігор
Іван
Квітан
Києслав
Кий
Кирило
Киян
Княжослав
Корній
Колодар
Колодій
Косак
Красун
Крилач
Куйбіда
Курило
Лад
Ладимир
Ладислав
Ладолюб
Ладомир
Лев
Левко
Листвич
Ліпослав
Лоліт
Лук'ян
Любим
Любовир
Любодар
Любозар
Любомил
Любомир
Любомисл
Любомудр
Любослав
Людомил
Людомир
Людислав
Лютобор
Лютомисл
Магадар
Магамир
Магаслав
Маркіян
Май
Мал
Малик
Маломир
Марко
Мар'ян
Медомир
Межамир
Мечислав
Мизамир
Милан
Милован
Милодар
Милодух
Милослав
Мир
Миробог
Мирогост
Миролюб
Мирослав
Мовчан
Молибог
Мстибог
Мстивой
Мстислав
Мудролюб
Нагнибіда
Надій
Найден
Наслав
Недан
Немир
Непобор
Нігослав
Назар
Одинець
Олег
Олександр
Олексій
Олесь
Олелько
Орел
Орест
Орь
Оримир
Осмомисл
Острозор
Остромир
Остромов
Охрім
Павло
Первушко
Перелюб
Перемил
Перемисл
Пересвіт
Переяслав
Першик
Подолян
Позвізд
Полель
Полян
Пребислав
Предислав
Пугач
Путило
Путята
Рава
Рад
Радечко
Радивой
Радило
Радим
Радимир
Радислав
Радко
Радован
Радогост
Радомир
Радомисл
Радослав
Ратибор
Ратимир
Ратислав
Ревун
Рід
Рогволод
Родан
Родослав
Рожден
Розум
Роксолан
Роман
Ростислав
Ростичар
Ростун
Рудан
Рус
Руслан
Русудан
Сармат
Сварг
Сват
Світ
Світлан
Світлогор
Світогор
Світовид
Світодар
Світозар
Світокол
Світолик
Світолюб
Світомир
Світослав
Світояр
Свободан
Святовид
Святогор
Святолюб
Святополк
Святослав
Семибор
Семирад
Сердитко
Сила
Силолюб
Силослав
Синьоок
Скол
Слава
Славобор
Славолюб
Славомир
Славута
Снага
Сніжан
Сновид
Снозір
Собібор
Собімир
Собіслав
Сокіл
Соловей
Сологуб
Сонцевид
Сонцедар
Сонцелик
Спас
Станимир
Станіслав
Стародум
Степан
Стефаній
Стожар
Стоймир
Стоян
Судивой
Судимир
Судислав
Сурма
Тарас
Татолюб
Татомир
Твердигост
Твердислав
Творилад
Творимир
Творислав
Тихомир
Тихон
Толигнів
Толислав
Тригост
Троян
Триріг
Тур
Турбог
Турбрід
Уличан
Ус
Хвала
Хвалибог
Хвалимир
Ходота
Хорив
Хорошко
Хорошун
Хотибор
Хотимир
Хотян
Хранимир
Худан
Царко
Цвітан
Чара
Чернин
Чеслав
Чесмил
Честислав
Чорновіл
Чорнота
Чорнотур
Щастибог
Щастислав
Щедрогост
Щек
Юрій
Юлій
Ява
Явір
Яволод
Яр
Ярема
Ярило
Яровид
Яровит
Яромил
Яромир
Яромисл
Ярополк
Яросвіт
Ярослав
Ярош
Яртур
Ярчик
Ясен
Ясновид
Ясногор
Яснозір
Яснолик

View File

@ -0,0 +1,830 @@
Єрмоленко
Єсипенко
Іванів
Іваненко
Іванченко
Іванчук
Іванюк
Івахненко
Івашко
Іващенко
Івченко
Іллєнко
Іловайські
Ільницький
Ільченко
Іщенко
Абраменко
Абрамчук
Адамчук
Акуленко
Алексєєнко
Алексійчук
Андрієнко
Андрійчук
Андрейко
Андрусів
Андрушків
Андрущенко
Анищенко
Антонюк
Арсенич
Артюх
Атаманчук
Біла
Білас
Білий
Білодід
Білоус
Баб'юк
Бабійчук
Бабак
Бабчук
Багмут
Багрій
Бадлак
Бажан
Балтача
Бандура
Баран
Баранець
Барановський
Баранюк
Батюк
Бачинський
Бебешко
Бевзенко
Безбородьки
Березовчук
Блонські
Божик
Божко
Бойко
Бойцун
Бойчак
Бойчишин
Бойчук
Бондар
Бондаренко
Бондарчук
Борисенко
Борисикевич
Братусь
Букатевич
Бурбан
Бурячок
Бутейко
Бутенко
Бутник
Бутовичі
Бухало
Візерські
Василашко
Василенко
Васильченко
Васильчук
Васкул
Васьковичі
Вахній
Ващенко-Захарченко
Вдовиченко
Величко
Величковські
Вертипорох
Верхола
Винокур
Висоцькі
Вишневецькі
Влох
Воблий
Вовк
Возняк
Войнаровські
Волох
Волошин
Волощук
Вороновський
Гаврилів
Гавриленко
Гаврилюк
Галенковські
Гальченко
Гамалія
Ганицький
Гарань
Гармаш
Гасай
Гасюк
Герасименко
Геращенко
Герцик
Герцики
Гладченко
Глоба
Гнідичі
Гнатюк
Гоголі
Гоголь
Годунок
Головатий
Головко
Голуб
Голубничий
Гольшанські
Гонта
Гончар
Гончаренко
Гончаров
Горбаль
Гордієнко
Гординські
Гошовські
Гошовський
Грінченко
Грабович
Грабовський
Григоренко
Григорович
Григорович-Барський
Григорчук
Грицак
Гриценко
Гришко
Громики
Гудзій
Гудзь
Гуменюк
Гунько
Діденко
Даниленко
Даньків
Данькевич
Дараган
Дашкевич
Дем'яненко
Дем'янчук
Денисенко
Джус
Дзюба
Дикань
Дмитерко
Довженко
Домонтовичі
Дорош
Дорошенко
Доценко
Дочинець
Драгоманови
Дудко
Дунін-Борковські
Дяків
Дяченко
Ейбоженко
Жайворон
Жаліло
Ждановичі
Жежерін
Желєзняк
Железняк
Жилко
Жирко
Жук
Жупанський
Жураківські
Зінов'єв
Заєць
Забашта
Заболотний
Завальнюк
Закревські
Закусило
Залізняк
Заруба
Засядько
Захаренко
Захарчук
Заяць
Заячківський
Збаразькі
Зленко
Значко-Яворські
Золотаренко
Кабачок
Каганець
Калашники
Калинович
Кандиби
Карашевичі
Кармалюк
Карпенко
Кириленко
Кисилі
Китастий
Кицай
Клименко
Климчук
Кмета
Книш
Ковалів
Коваленко
Коваль
Ковальчик
Ковальчук
Кованько
Ковтун
Козаченко
Козачинський
Козачок
Козубенко
Колесник
Колодій
Колодний
Коломієць
Комар
Кондратюк
Кониські
Корецький
Корж
Корнійчук
Коробка
Королюк
Короткевич
Корпанюк
Корчак
Корчинський
Косенко
Костенко
Коструба
Костюк
Котляр
Котляревський
Кравців
Кравченко
Кравчук
Красовський
Криворучко
Крикуненко
Крупські
Кузьмінський
Кулиняк
Кульчицький
Купчинський
Курцевичі
Кухаренко
Куц
Куценко
Кучер
Кучеренко
Кушнір
Лаба
Лаврін
Лаврик
Лавриненко
Лазаревські
Лазарчук
Лазорко
Лашкевичі
Левицький
Левковські
Левченко
Леонтовичі
Лесів
Лесевичі
Лисенко
Литвин
Литвиненко
Литвинов
Литовченко
Лозина-Лозинський
Лопатинський
Лук'яненко
Лукашевичі
Лукомський
Луценко
Людкевич
Ляшенко
Ляшенко
Мірошниченко
Мірчук
Міщенко
Мазаракі
Мазепи
Мазур
Макаренко
Максименко
Маланчук
Малаховські
Малишко
Малкович
Мамчур
Маркевич
Маркевичі
Мартиненко
Мартоси
Марунчак
Марценюк
Марченко
Марчук
Масоха
Матвієнко
Матюшенко
Маценко
Мацюк
Мельник
Мельниченко
Мельничук
Микитенко
Микитин
Милорадовичі
Мирон
Михайленко
Михайличенко
Михайлюк
Мицик
Мовчан
Могили
Модзалевські
Моргун
Мороз
Мосендзи
Москаленко
Москаль
Мошак
Муратова
Мусієнко
Назаренко
Наливайко
Нащинські
Негребецький
Непорожній
Нестеренко
Нечай
Нечипоренко
Оберемченко
Овчаренко
Ограновичі
Олійник
Олексієнко
Омельченко
Омельчук
Онищенко
Онопенко
Опанасенко
Орлики
Осадчук
Осика
Остапенко
Остроградський
Острозькі
Півторак
Підопригора
Павленко
Павлюк
Павлюченко
Пазенко
Паламарчук
Панас
Панасюк
Паньківський
Пархоменко
Пасічник
Пасько
Пашко
Пащенко
Перебийніс
Петренко
Пилипенко
Пилипишин
Пилипчук
Писаренко
Писарчук
Плющ
Покотило
Поліщук
Польовий
Полянський
Пономаренко
Пономарьов
Попадюк
Попенко
Потапенко
Потебенько
Прийма
Приймак
Присяжнюк
Приходько
Продан
Проценко
Проць
Процюк
Пушкар
Різенки
Різун
Радченко
Рибальченко
Римар
Римар
Родзянки
Рожок
Розумовські
Романенко
Романишин
Романчук
Романюк
Рошкевич
Рубан
Рубани
Руденко
Рябовіл
Сімашкевич
Саєнко
Савенко
Савицька
Савка
Савченко
Савчук
Сак
Самборський
Самойлович
Самусь
Свида
Семашко
Семененко
Семенець
Семенина
Семенченко
Семенюк
Семеренко
Сидоренко
Силенко
Симоненко
Симчич
Скаржинські
Скоропадські
Скрипник
Скуратівський
Слободян
Слободянюк
Смик
Смогоржевський
Собчук
Сопронюк
Сорока
Сохань
Стадник
Стельмах
Степаненко
Степура
Стеценко
Стецюк
Стороженки
Струтинський
Сулима
Сулими
Супруненко
Танські
Тараненко
Тарновські
Татаренко
Теплицький
Терещенко
Терещук
Тесленко
Тимошенко
Тимощук
Тимчак
Титаренко
Тишкевичі
Тищенко
Ткач
Ткаченко
Ткачук
Тобілевичі
Толочко
Томенко
Трощинські
Тулуб
Удовенко
Удовиченко
Усенко
Філоненко
Феденко
Федоренко
Федорук
Фещенко
Фоменко
Ханенки
Ханенко
Харитоненки
Харчук
Хміляр
Хмара
Хмельницькі
Холодовський
Хоменко
Царук
Цибуленко
Цюпа
Чабаненко
Чанов
Чередниченко
Чернявський
Чорний
Чорний
Чорновіл
Чуйкевич
Чумак
Чумаченко
Шахрай
Шевченко
Шевчук
Шелест
Шептицькі
Шинкарук
Шкрібляк
Шнайдер
Шовкопляс
Шульга
Шухевич
Щерба
Щербак
Щербань
Юрженко
Юрченко
Юрчишин
Юхименко
Ющенко
Яковенко
Яковина
Янко
Ярема
Яременко
Яремко
Яремчук
Ярмоленко
Ярмолюк
Ярошенко
Яценко
Ященко
Ґалаґан
Євсєєв
Єгоров
Єлізаров
Єрмилов
Єрофєєв
Єршов
Єфімов
Єфремов
Іванов
Ігнатов
Іллюшин
Ільїн
Аєдоницький
Абатуров
Абдулов
Абрамов
Авілов
Авдєєнко
Аврамов
Алексєєв
Александров
Альошин
Анісімов
Анісов
Ананьєв
Андріанов
Андріяшев
Андреєв
Антипов
Антонов
Анциферов
Апухтін
Арбузов
Аржанов
Артем'єв
Архипов
Арцибушев
Астраханцев
Афіногенов
Афанасьєв
Бєлов
Бєлоглазов
Бєлоусов
Бєляєв
Бібиков
Бажанов
Баранов
Барановський
Баришніков
Барсов
Батюшков
Биков
Блохін
Бобров
Богданов
Богомазов
Бойков
Большаков
Борисов
Бочков
Бризгалов
Брусилов
Бутурлін
Бутусов
Варламов
Васильєв
Виноградов
Власов
Внуков
Волков
Воробей
Воробйов
Воронін
Воронцов
Ворошилов
Гаврилов
Герасимов
Гончаров
Горбунов
Горчаков
Горшков
Григор'єв
Громов
Гусєв
Давидов
Данилов
Дараган
Дементьєв
Денисов
Дмитрієв
Добролюбов
Донськой
Дорофєєв
Дубров
Железняков
Жердєв
Жуков
Журавльов
Зінов'єв
Заваров
Загаров
Зайцев
Захаров
Звєрєв
Зеров
Золотухін
Зубов
Казаков
Калінін
Калашников
Карпов
Каштанов
Кисельов
Ковальов
Кожевников
Козлов
Колесников
Кольцов
Комаров
Коновалов
Конюхов
Копилов
Кормильцев
Коробов
Коровкін
Корольов
Котов
Краснов
Крилов
Кримов
Крюков
Кудряшов
Кузнецов
Кузьмін
Кулаков
Куликов
Курков
Курочкін
Лєсков
Лідов
Ладигін
Лазарєв
Лебедєв
Левицький
Лихоносов
Лозина-Лозинський
Лосєв
Львов
Любимов
Мілютін
Макаров
Максимов
Малаков
Мамонов
Манасеїн
Марков
Мартенс
Мартинов
Масленніков
Маслов
Матвєєв
Медведєв
Мельников
Миронов
Михайлов
Моїсєєв
Моргунов
Морков
Морозов
Мухін
Нікітін
Ніколаєв
Нікулін
Набоков
Некрасов
Новиков
Орлов
Осипов
Остроградський
Павлов
Павлушков
Панов
Петров
Пильчиков
Платонов
Плеханов
Польовий
Поляков
Пономарьов
Попов
Поярков
Пригунов
Прошкін
Решетников
Рожков
Романов
Рябов
Саблін
Савін
Сазонов
Сальников
Самойлов
Самсонов
Сбітнєв
Свиридов
Селезньов
Семенов
Сербін
Сергєєв
Сибіряков
Сидоров
Симонов
Синельников
Скобелев
Скоблін
Смирнов
Снєгірьов
Соболєв
Соколов
Солнцев
Соловйов
Сомов
Сорокін
Стєклов
Старков
Степанов
Табаков
Тарасов
Терентьєв
Тимофєєв
Титов
Тихомиров
Тихонов
Тюленєв
Уваров
Усов
Устинов
Філіппов
Філатов
Федоров
Фомін
Фролов
Хілков
Хвостов
Худяков
Цвєтков
Чанов
Чевкін
Черенков
Черепков
Чулков
Шевельов
Шеліхов
Шинін
Ширяєв
Шишов
Шулаков
Щапов
Щасливий
Яковлєв
Яшин

View File

@ -0,0 +1,25 @@
<?php
$type = 'girl';
$val = 'father';
mysql_connect('localhost', 'root', '');
mysql_select_db('names');
mysql_set_charset('utf8');
$tablename=$type . $val;
header('Content-type: text/html; charset=utf-8');
require '../../../Library/NCL.NameCase.ua.php';
$nc = new NCLNameCaseUa();
$all = mysql_query("SELECT `name`,`id`,`nameCase` FROM {$tablename}");
$t='';
while ($row = mysql_fetch_array($all))
{
if(implode('#', $nc->qFatherName($row['name'], null, 2))!=$row['nameCase'])
{
$t.= "<a href='saveme.php?id={$row['id']}&val={$val}&type={$type}'><b>{$row['name']}</b></a><br>";
$t.= "<font style='font-size:12px;'>".
implode('<br>', $nc->qFatherName($row['name'], null, 2))
."</font><br>";
}
}
echo $t;
?>

View File

@ -0,0 +1,25 @@
<?php
$type = 'girl';
$val = 'second';
mysql_connect('localhost', 'root', '');
mysql_select_db('names');
mysql_set_charset('utf8');
$tablename=$type . $val;
header('Content-type: text/html; charset=utf-8');
require '../../../Library/NCL.NameCase.ua.php';
$nc = new NCLNameCaseUa();
$all = mysql_query("SELECT `name`,`id`,`nameCase` FROM {$tablename}");
$t='';
while ($row = mysql_fetch_array($all))
{
if(implode('#', $nc->qSecondName($row['name'], null, 2))!=$row['nameCase'])
{
$t.= "<a href='saveme.php?id={$row['id']}&val={$val}&type={$type}'><b>{$row['name']}</b></a><br>";
$t.= "<font style='font-size:12px;'>".
implode('<br>', $nc->qSecondName($row['name'], null, 2))
."</font><br>";
}
}
echo $t;
?>

View File

@ -0,0 +1,3 @@
Василівна
Антонівна
Яківна

View File

@ -0,0 +1,329 @@
Августа
Аврелія
Аврора
Агнія
Агрипина
Ада
Аделаїда
Адріана
Аза
Азалія
Аліна
Аліса
Алла
Альбертина
Альбіна
Альвіна
Анастасія
Ангеліна
Анжела
Антоніна
Анфіса
Аріадна
Арсена
Ася
Афіна
Афродіта
Бажана
Берегиня
Біловида
Біломира
Білослава
Біляна
Благиня
Благовида
Благовіра
Благовіста
Благослава
Богдана
Боговіра
Боговіста
Богодара
Боголіпа
Боголюба
Богосвята
Богумила
Богумира
Богуслава
Божедана
Божедара
Божемила
Божена
Божиця
Болеслава
Борислава
Боронислава
Братолюба
Братомила
Брячислава
Будана
Будимира
Будислава
Богумила
Ведана
Велимира
Вербава
Верхуслава
Веселина
Веселка
Весна
Вишена
Вишеслава
Вишня
Віра
Віродана
Віродара
Вірослава
Віста
Вістуна
Вітана
Влада
Владислава
Власта
Вогнедара
Вогняна
Волелюба
Володимира
Волошка
Воля
Всеволода
Вселюба
Всемира
Всеслава
В’ячеслава
Гаїна
Гатусила
Гарнослава
Голубка
Горигляда
Горислава
Городислава
Гострозора
Градислава
Гранислава
Гремислава
Далібора
Дана
Дарина
Дзвенимира
Дзвенислава
Дзвінка
Діяна
Добринка
Добровіста
Доброгніва
Добролюба
Добромила
Добромира
Доброніга
Доброслава
Долина
Доля
Домаха
Доморада
Дружелюба
Жадана
Ждана
Живосила
Живослава
Житомира
Життєлюба
Забава
Звенигора
Звенислава
Звонимира
Зірка
Злата
Златомира
Златоуста
Золотодана
Зорегляда
Зореслава
Зорина
Зоря
Зоряна
Казка
Калина
Квітка
Колодара
Красава
Красимира
Красновида
Краснолика
Красуня
Купава
Лада
Ладислава
Ладомила
Ладомира
Левина
Лель
Леля
Леся
Либідь
Лілея
Лоліта
Любава
Любаня
Любислава
Любов
Любомила
Любомира
Люборада
Людмила
Людомила
Любослава
Льоля
Мавка
Магадара
Маїна
Маківка
Малуня
Малуша
Мальва
Марута
Мая
Медорада
Мечислава
Милана
Милована
Миловида
Милодара
Милослава
Мирана
Миробога
Миролюба
Мирослава
Млада
Мокрина
Мстислава
Мудролюба
Надія
Найда
Найдена
Наслава
Немира
Нігослава
Незабудка
Огняна
Оримира
Орина
Орислава
Орися
Оріяна
Орогоста
Острозора
Остромира
Осмомисла
Остромова
Пава
Палажка
Палазга
Перелюба
Перемила
Перемисла
Півонія
Позвізда
Полеза
Поляна
Потішана
Предслава
Рада
Радана
Радимира
Радогоста
Радомира
Радослава
Рідна
Рогволода
Рогніда
Родослава
Рожана
Роксолана
Ромашка
Росава
Росина
Ростислава
Ростичара
Ростуня
Рудана
Ружа
Русана
Русудана
Русява
Русявка
Рута
Світана
Світлана
Світовида
Світогора
Світодара
Світозара
Світолика
Світолюба
Світослава
Світояра
Свободана
Святогора
Святолюба
Святослава
Силата
Силолюба
Силослава
Синезора
Синьоока
Сіверина
Слава
Славина
Славолюба
Славомила
Сміяна
Сніжана
Сніжинка
Собіслава
Соловія
Сологуба
Сонцевида
Сонцедара
Сонцелика
Сонцеслава
Ссанимира
Станислава
Судимира
Судислава
Татолюба
Твердислава
Твердогоста
Творимира
Творислава
Толигніва
Тонкостана
Трояна
Хвала
Хвалибого
Хвалимира
Хвалина
Хорошка
Хорошуня
Хотимра
Хотяна
Хранимира
Худана
Цвітана
Чайка
Чарівна
Чарівниця
Чаруна
Чеслава
Ява
Яворина
Ялина
Ярина
Яромила
Яромира
Ярослава
Ясна
Ясновида
Ясногора
Яснолика
Яснослава

View File

@ -0,0 +1,830 @@
Єрмоленко
Єсипенко
Іванів
Іваненко
Іванченко
Іванчук
Іванюк
Івахненко
Івашко
Іващенко
Івченко
Іллєнко
Іловайські
Ільницька
Ільченко
Іщенко
Абраменко
Абрамчук
Адамчук
Акуленко
Алексєєнко
Алексійчук
Андрієнко
Андрійчук
Андрейко
Андрусів
Андрушків
Андрущенко
Анищенко
Антонюк
Арсенич
Артюх
Атаманчук
Біла
Білас
Біла
Білодід
Білоус
Баб'юк
Бабійчук
Бабак
Бабчук
Багмут
Багрій
Бадлак
Бажан
Балтача
Бандура
Баран
Баранець
Барановська
Баранюк
Батюк
Бачинська
Бебешко
Бевзенко
Безбородьки
Березовчук
Блонські
Божик
Божко
Бойко
Бойцун
Бойчак
Бойчишин
Бойчук
Бондар
Бондаренко
Бондарчук
Борисенко
Борисикевич
Братусь
Букатевич
Бурбан
Бурячок
Бутейко
Бутенко
Бутник
Бутовичі
Бухало
Візерські
Василашко
Василенко
Васильченко
Васильчук
Васкул
Васьковичі
Вахній
Ващенко-Захарченко
Вдовиченко
Величко
Величковські
Вертипорох
Верхола
Винокур
Висоцькі
Вишневецькі
Влох
Вобла
Вовк
Возняк
Войнаровські
Волох
Волошин
Волощук
Вороновська
Гаврилів
Гавриленко
Гаврилюк
Галенковські
Гальченко
Гамалія
Ганицька
Гарань
Гармаш
Гасай
Гасюк
Герасименко
Геращенко
Герцик
Герцики
Гладченко
Глоба
Гнідичі
Гнатюк
Гоголі
Гоголь
Годунок
Головата
Головко
Голуб
Голубнича
Гольшанські
Гонта
Гончар
Гончаренко
Гончаров
Горбаль
Гордієнко
Гординські
Гошовські
Гошовська
Грінченко
Грабович
Грабовська
Григоренко
Григорович
Григорович-Барська
Григорчук
Грицак
Гриценко
Гришко
Громики
Гудзій
Гудзь
Гуменюк
Гунько
Діденко
Даниленко
Даньків
Данькевич
Дараган
Дашкевич
Дем'яненко
Дем'янчук
Денисенко
Джус
Дзюба
Дикань
Дмитерко
Довженко
Домонтовичі
Дорош
Дорошенко
Доценко
Дочинець
Драгоманови
Дудко
Дунін-Борковські
Дяків
Дяченко
Ейбоженко
Жайворон
Жаліло
Ждановичі
Жежерін
Желєзняк
Железняк
Жилко
Жирко
Жук
Жупанська
Жураківські
Зінов'єв
Заєць
Забашта
Заболотна
Завальнюк
Закревські
Закусило
Залізняк
Заруба
Засядько
Захаренко
Захарчук
Заяць
Заячківська
Збаразькі
Зленко
Значко-Яворські
Золотаренко
Кабачок
Каганець
Калашники
Калинович
Кандиби
Карашевичі
Кармалюк
Карпенко
Кириленко
Кисилі
Китаста
Кицай
Клименко
Климчук
Кмета
Книш
Ковалів
Коваленко
Коваль
Ковальчик
Ковальчук
Кованько
Ковтун
Козаченко
Козачинська
Козачок
Козубенко
Колесник
Колодій
Колодна
Коломієць
Комар
Кондратюк
Кониські
Корецька
Корж
Корнійчук
Коробка
Королюк
Короткевич
Корпанюк
Корчак
Корчинська
Косенко
Костенко
Коструба
Костюк
Котляр
Котляревська
Кравців
Кравченко
Кравчук
Красовська
Криворучко
Крикуненко
Крупські
Кузьмінська
Кулиняк
Кульчицька
Купчинська
Курцевичі
Кухаренко
Куц
Куценко
Кучер
Кучеренко
Кушнір
Лаба
Лаврін
Лаврик
Лавриненко
Лазаревські
Лазарчук
Лазорко
Лашкевичі
Левицька
Левковські
Левченко
Леонтовичі
Лесів
Лесевичі
Лисенко
Литвин
Литвиненко
Литвинов
Литовченко
Лозина-Лозинська
Лопатинська
Лук'яненко
Лукашевичі
Лукомська
Луценко
Людкевич
Ляшенко
Ляшенко
Мірошниченко
Мірчук
Міщенко
Мазаракі
Мазепи
Мазур
Макаренко
Максименко
Маланчук
Малаховські
Малишко
Малкович
Мамчур
Маркевич
Маркевичі
Мартиненко
Мартоси
Марунчак
Марценюк
Марченко
Марчук
Масоха
Матвієнко
Матюшенко
Маценко
Мацюк
Мельник
Мельниченко
Мельничук
Микитенко
Микитин
Милорадовичі
Мирон
Михайленко
Михайличенко
Михайлюк
Мицик
Мовчан
Могили
Модзалевські
Моргун
Мороз
Мосендзи
Москаленко
Москаль
Мошак
Муратова
Мусієнко
Назаренко
Наливайко
Нащинські
Негребецька
Непорожній
Нестеренко
Нечай
Нечипоренко
Оберемченко
Овчаренко
Ограновичі
Олійник
Олексієнко
Омельченко
Омельчук
Онищенко
Онопенко
Опанасенко
Орлики
Осадчук
Осика
Остапенко
Остроградська
Острозькі
Півторак
Підопригора
Павленко
Павлюк
Павлюченко
Пазенко
Паламарчук
Панас
Панасюк
Паньківська
Пархоменко
Пасічник
Пасько
Пашко
Пащенко
Перебийніс
Петренко
Пилипенко
Пилипишин
Пилипчук
Писаренко
Писарчук
Плющ
Покотило
Поліщук
Польова
Полянська
Пономаренко
Пономарьов
Попадюк
Попенко
Потапенко
Потебенько
Прийма
Приймак
Присяжнюк
Приходько
Продан
Проценко
Проць
Процюк
Пушкар
Різенки
Різун
Радченко
Рибальченко
Римар
Римар
Родзянки
Рожок
Розумовські
Романенко
Романишин
Романчук
Романюк
Рошкевич
Рубан
Рубани
Руденко
Рябовіл
Сімашкевич
Саєнко
Савенко
Савицька
Савка
Савченко
Савчук
Сак
Самборська
Самойлович
Самусь
Свида
Семашко
Семененко
Семенець
Семенина
Семенченко
Семенюк
Семеренко
Сидоренко
Силенко
Симоненко
Симчич
Скаржинські
Скоропадські
Скрипник
Скуратівська
Слободян
Слободянюк
Смик
Смогоржевська
Собчук
Сопронюк
Сорока
Сохань
Стадник
Стельмах
Степаненко
Степура
Стеценко
Стецюк
Стороженки
Струтинська
Сулима
Сулими
Супруненко
Танські
Тараненко
Тарновські
Татаренко
Теплицька
Терещенко
Терещук
Тесленко
Тимошенко
Тимощук
Тимчак
Титаренко
Тишкевичі
Тищенко
Ткач
Ткаченко
Ткачук
Тобілевичі
Толочко
Томенко
Трощинські
Тулуб
Удовенко
Удовиченко
Усенко
Філоненко
Феденко
Федоренко
Федорук
Фещенко
Фоменко
Ханенки
Ханенко
Харитоненки
Харчук
Хміляр
Хмара
Хмельницькі
Холодовська
Хоменко
Царук
Цибуленко
Цюпа
Чабаненко
Чанов
Чередниченко
Чернявська
Чорна
Чорна
Чорновіл
Чуйкевич
Чумак
Чумаченко
Шахрай
Шевченко
Шевчук
Шелест
Шептицькі
Шинкарук
Шкрібляк
Шнайдер
Шовкопляс
Шульга
Шухевич
Щерба
Щербак
Щербань
Юрженко
Юрченко
Юрчишин
Юхименко
Ющенко
Яковенко
Яковина
Янко
Ярема
Яременко
Яремко
Яремчук
Ярмоленко
Ярмолюк
Ярошенко
Яценко
Ященко
Ґалаґан
Євсєєва
Єгорова
Єлізарова
Єрмилова
Єрофєєва
Єршова
Єфімова
Єфремова
Іванова
Ігнатова
Іллюшина
Ільїна
Аєдоницька
Абатурова
Абдулова
Абрамова
Авілова
Авдєєнко
Аврамова
Алексєєва
Александрова
Альошина
Анісімова
Анісова
Ананьєва
Андріанова
Андріяшева
Андреєва
Антипова
Антонова
Анциферова
Апухтіна
Арбузова
Аржанова
Артем'єва
Архипова
Арцибушева
Астраханцева
Афіногенова
Афанасьєва
Бєлова
Бєлоглазова
Бєлоусова
Бєляєва
Бібикова
Бажанова
Баранова
Барановська
Баришнікова
Барсова
Батюшкова
Бикова
Блохіна
Боброва
Богданова
Богомазова
Бойкова
Большакова
Борисова
Бочкова
Бризгалова
Брусилова
Бутурліна
Бутусова
Варламова
Васильєва
Виноградова
Власова
Внукова
Волкова
Воробей
Воробйова
Вороніна
Воронцова
Ворошилова
Гаврилова
Герасимова
Гончарова
Горбунова
Горчакова
Горшкова
Григор'єва
Громова
Гусєва
Давидова
Данилова
Дарагана
Дементьєва
Денисова
Дмитрієва
Добролюбова
Донськая
Дорофєєва
Дуброва
Железнякова
Жердєва
Жукова
Журавльова
Зінов'єва
Заварова
Загарова
Зайцева
Захарова
Звєрєва
Зерова
Золотухіна
Зубова
Казакова
Калініна
Калашникова
Карпова
Каштанова
Кисельова
Ковальова
Кожевникова
Козлова
Колесникова
Кольцова
Комарова
Коновалова
Конюхова
Копилова
Кормильцева
Коробова
Коровкіна
Корольова
Котова
Краснова
Крилова
Кримова
Крюкова
Кудряшова
Кузнецова
Кузьміна
Кулакова
Куликова
Куркова
Курочкіна
Лєскова
Лідова
Ладигіна
Лазарєва
Лебедєва
Левицька
Лихоносова
Лозина-Лозинська
Лосєва
Львова
Любимова
Мілютіна
Макарова
Максимова
Малакова
Мамонова
Манасеїна
Маркова
Мартенс
Мартинова
Масленнікова
Маслова
Матвєєва
Медведєва
Мельникова
Миронова
Михайлова
Моїсєєва
Моргунова
Моркова
Морозова
Мухіна
Нікітіна
Ніколаєва
Нікуліна
Набокова
Некрасова
Новикова
Орлова
Осипова
Остроградська
Павлова
Павлушкова
Панова
Петрова
Пильчикова
Платонова
Плеханова
Польова
Полякова
Пономарьова
Попова
Пояркова
Пригунова
Прошкіна
Решетникова
Рожкова
Романова
Рябова
Сабліна
Савіна
Сазонова
Сальникова
Самойлова
Самсонова
Сбітнєва
Свиридова
Селезньова
Семенова
Сербіна
Сергєєва
Сибірякова
Сидорова
Симонова
Синельникова
Скобелева
Скобліна
Смирнова
Снєгірьова
Соболєва
Соколова
Солнцева
Соловйова
Сомова
Сорокіна
Стєклова
Старкова
Степанова
Табакова
Тарасова
Терентьєва
Тимофєєва
Титова
Тихомирова
Тихонова
Тюленєва
Уварова
Усова
Устинова
Філіппова
Філатова
Федорова
Фоміна
Фролова
Хілкова
Хвостова
Худякова
Цвєткова
Чанова
Чевкіна
Черенкова
Черепкова
Чулкова
Шевельова
Шеліхова
Шиніна
Ширяєва
Шишова
Шулакова
Щапова
Щаслива
Яковлєва
Яшина

View File

@ -0,0 +1,12 @@
<?php
$type = 'boy';
$val = 'second';
mysql_connect('localhost', 'root', '');
mysql_select_db('names');
mysql_set_charset('utf8');
$arr = file($type . $val . '.txt');
foreach ($arr as $cd)
{
mysql_query('INSERT INTO ' . $type . $val . ' (`name`) VALUES (\'' . trim($cd) . '\')');
}
?>

View File

@ -0,0 +1,25 @@
<?php
$type = 'boy';
$val = 'father';
mysql_connect('localhost', 'root', '');
mysql_select_db('names');
mysql_set_charset('utf8');
$tablename=$type . $val;
header('Content-type: text/html; charset=utf-8');
require '../../../Library/NCL.NameCase.ua.php';
$nc = new NCLNameCaseUa();
$all = mysql_query("SELECT `name`,`id`,`nameCase` FROM {$tablename}");
$t='';
while ($row = mysql_fetch_array($all))
{
if(implode('#', $nc->qFatherName($row['name'], null, 1))!=$row['nameCase'])
{
$t.= "<a href='saveme.php?id={$row['id']}&val={$val}&type={$type}'><b>{$row['name']}</b></a><br>";
$t.= "<font style='font-size:12px;'>".
implode('<br>', $nc->qFatherName($row['name'], null, 1))
."</font><br>";
}
}
echo $t;
?>

View File

@ -0,0 +1,25 @@
<?php
$type = 'boy';
$val = 'second';
mysql_connect('localhost', 'root', '');
mysql_select_db('names');
mysql_set_charset('utf8');
$tablename=$type . $val;
header('Content-type: text/html; charset=utf-8');
require '../../../Library/NCL.NameCase.ua.php';
$nc = new NCLNameCaseUa();
$all = mysql_query("SELECT `name`,`id`,`nameCase` FROM {$tablename}");
$t='';
while ($row = mysql_fetch_array($all))
{
if(implode('#', $nc->qSecondName($row['name'], null, 1))!=$row['nameCase'])
{
$t.= "<a href='saveme.php?id={$row['id']}&val={$val}&type={$type}'><b>{$row['name']}</b></a><br>";
$t.= "<font style='font-size:12px;'>".
implode('<br>', $nc->qSecondName($row['name'], null, 1))
."</font><br>";
}
}
echo $t;
?>

View File

@ -0,0 +1,58 @@
<?php
isset($_GET['type']) ? $type = $_GET['type'] : $type = 'girl';
isset($_GET['val']) ? $val = $_GET['val'] : $val = 'second';
//$type = 'girl';
//$val = 'name';
mysql_connect('localhost', 'root', '');
mysql_select_db('names');
mysql_set_charset('utf8');
//$id=intval($_GET['id']);
$tablename=$type . $val;
header('Content-type: text/html; charset=utf-8');
require '../../../Library/NCL.NameCase.ua.php';
$nc = new NCLNameCaseUa();
$all = mysql_query("SELECT `name`,`id`,`nameCase` FROM {$tablename}");
$t='';
function in($letter, $string)
{
if ($letter and mb_strpos($string, $letter) === false)
{
return false;
}
else
{
return true;
}
}
while ($row = mysql_fetch_array($all))
{
// if(implode('#', $nc->qSecondName($row['name'], null, 2))!=$row['nameCase'])
// {
// $t.= "<a href='saveme.php?id={$row['id']}&val={$val}&type={$type}'><b>{$row['name']}</b></a><br>";
// $t.= "<font style='font-size:12px;'>".
// implode('<br>', $nc->qSecondName($row['name'], null, 2))
// ."</font><br>";
// }
$LastSymbol = mb_substr($row['name'], -1, 1, 'utf-8');
$TwoLast = mb_substr($row['name'], -2, 2, 'utf-8');
if($TwoLast=='ко' or in($LastSymbol, 'бвгджзйклмнпрстфхцчшщіь'))
{
$res=implode('#', array($row['name'],$row['name'],$row['name'],$row['name'],$row['name'],$row['name'],$row['name']));
mysql_query("UPDATE {$tablename} SET nameCase='{$res}' WHERE id={$row['id']}");
}
}
//$t='';
//$row = mysql_fetch_array($all);
//$method = 'qFirstName';
//if($val=='father')
//{
// $method = 'qFatherName';
//}
//if($val=='second')
//{
// $method = 'qSecondName';
//}
//$res = implode('#', $nc->$method($row['name'], null, ($type=='girl' ? 2 : 1)));
//mysql_query("UPDATE {$tablename} SET nameCase='{$res}' WHERE id={$id}");
?>

View File

@ -0,0 +1,28 @@
<?php
isset($_GET['type']) ? $type = $_GET['type'] : 'girl';
isset($_GET['val']) ? $val = $_GET['val'] : 'names';
//$type = 'girl';
//$val = 'name';
mysql_connect('localhost', 'root', '');
mysql_select_db('names');
mysql_set_charset('utf8');
$id=intval($_GET['id']);
$tablename=$type . $val;
header('Content-type: text/html; charset=utf-8');
require '../../../Library/NCL.NameCase.ua.php';
$nc = new NCLNameCaseUa();
$all = mysql_query("SELECT `name`,`id` FROM {$tablename} WHERE id={$id}");
$t='';
$row = mysql_fetch_array($all);
$method = 'qFirstName';
if($val=='father')
{
$method = 'qFatherName';
}
if($val=='second')
{
$method = 'qSecondName';
}
$res = implode('#', $nc->$method($row['name'], null, ($type=='girl' ? 2 : 1)));
mysql_query("UPDATE {$tablename} SET nameCase='{$res}' WHERE id={$id}");
?>

View File

@ -0,0 +1,25 @@
<?php
$type = 'girl';
$val = 'name';
mysql_connect('localhost', 'root', '');
mysql_select_db('names');
mysql_set_charset('utf8');
$tablename=$type . $val . 's';
header('Content-type: text/html; charset=utf-8');
require '../../../Library/NCL.NameCase.ua.php';
$nc = new NCLNameCaseUa();
$all = mysql_query("SELECT `name`,`id`,`nameCase` FROM {$tablename}");
$t='';
while ($row = mysql_fetch_array($all))
{
if(implode('#', $nc->qFirstName($row['name'], null, 2))!=$row['nameCase'])
{
$t.= "<a href='saveme.php?id={$row['id']}'><b>{$row['name']}</b></a><br>";
$t.= "<font style='font-size:12px;'>".
implode('<br>', $nc->qFirstName($row['name'], null, 2))
."</font><br>";
}
}
echo $t;
?>

View File

@ -1,9 +1,8 @@
<?php
header('Content-type: text/html; charset=utf-8');
require '../Library/NCL.NameCase.ru.php';
$ob = new NCLNameCaseRu;
$ob->setSecondName('Чайка');
$ob->setGender(NCLNameCaseRu::$MAN);
print_r($ob->getSecondNameCase()); echo $ob->getSecondNameRule();
require '../Library/NCL.NameCase.ua.php';
$ob = new NCLNameCaseUa;
print_r($ob->qSecondName('Лозина-Лозинська',null,2));
echo $ob->getSecondNameRule();
?>

View File

@ -14,26 +14,26 @@ $nc = new NCLNameCaseRu();
* =========================
* Встроенные константы
* =========================
* NCLNameCaseRu::$IMENITLN - именительный падеж
* NCLNameCaseRu::$RODITLN - родительные падеж
* NCLNameCaseRu::$DATELN - дательные падеж
* NCLNameCaseRu::$VINITELN - винительный падеж
* NCLNameCaseRu::$TVORITELN - творительный падеж
* NCLNameCaseRu::$PREDLOGN - предложный падеж
* NCL::$IMENITLN - именительный падеж
* NCL::$RODITLN - родительные падеж
* NCL::$DATELN - дательные падеж
* NCL::$VINITELN - винительный падеж
* NCL::$TVORITELN - творительный падеж
* NCL::$PREDLOGN - предложный падеж
*/
echo 'Отчет, ' .
$nc->q("Афонин Николай Сергеевич", NCLNameCaseRu::$RODITLN)
$nc->q("Афонин Николай Сергеевич", NCL::$RODITLN)
. ' о проделаной работе вместе с его сыном ' .
$nc->q("Афонин Никита", NCLNameCaseRu::$TVORITELN) .
$nc->q("Афонин Никита", NCL::$TVORITELN) .
' на осенних каникулах. Задание держалось на ' .
$nc->q("Маргаритта Николаевна", NCLNameCaseRu::$PREDLOGN) .
$nc->q("Маргаритта Николаевна", NCL::$PREDLOGN) .
'; Поздравляем всех предчастных, в том числе и ' .
$nc->q("Кардонский Серафим Ильич", NCLNameCaseRu::$VINITELN) . ' и ' .
$nc->q("Лобудская София Викторовна", NCLNameCaseRu::$VINITELN) .
$nc->q("Кардонский Серафим Ильич", NCL::$VINITELN) . ' и ' .
$nc->q("Лобудская София Викторовна", NCL::$VINITELN) .
'. Хотим передать поздравление также ' .
$nc->q("Игнатьев Павел Викторович", NCLNameCaseRu::$DATELN) . ' и ' .
$nc->q("Сумарский Лев", NCLNameCaseRu::$DATELN);
$nc->q("Игнатьев Павел Викторович", NCL::$DATELN) . ' и ' .
$nc->q("Сумарский Лев", NCL::$DATELN);
/*
* ========================

View File

@ -4,9 +4,11 @@ header('Content-type: text/html; charset=utf-8');
* Небольшой пример использования библиотеки
* 1. Шаг подключаем библиотеку
*/
require '../Library/NCL.NameCase.ru.php';
require '../Library/NCL.NameCase.ua.php';
/*
* 2. Создаем объект
*/
$nc = new NCLNameCaseRu();
print_r($nc->q("Рижиков Тарас Геннадиевич"));
$nc = new NCLNameCaseUa();
//print_r($nc->q("Егор Котляр"));
print_r($nc->qFirstName('Доброніга',null,2));
echo $nc->getFirstNameRule();