daily pastebin goal
27%
SHARE
TWEET

Lietuviškų vardų (ir pavardžių?) linksniai

mauglee Jun 22nd, 2011 1,693 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. /**
  4. * Lietuviškų vardų linksniai.
  5. *
  6. * @author Dainius Kaupaitis <dainius at kaupaitis dot lt>
  7. * @copyright Copyleft (ↄ) 2011, Dainius Kaupaitis
  8. * @version 1.0
  9. * @package Vardai
  10. */
  11. class Linksniai {
  12.  
  13.         function __construct ( $encoding = 'UTF-8' ) {
  14.        
  15.                 mb_internal_encoding($encoding) ;
  16.                
  17.                 // kilmininkas (ko?)
  18.                 $this->kil = array(
  19.                         'a' => 'os',
  20.                         'as' => 'o',
  21.                         'ė' => 'ės',
  22.                         'tis' => 'čio',
  23.                         'dis' => 'džio',
  24.                         'is' => 'io',
  25.                         'us' => 'aus',
  26.                         'tys' => 'čio',
  27.                         'dys' => 'džio',
  28.                         'ys' => 'io'
  29.                 ) ;
  30.                
  31.                 // naudininkas (kam?)
  32.                 $this->nau = array(
  33.                         'a' => 'ai',
  34.                         'as' => 'ui',
  35.                         'ė' => 'ei',
  36.                         'tis' => 'čiui',
  37.                         'dis' => 'džiui',
  38.                         'is' => 'iui',
  39.                         'us' => 'ui',
  40.                         'tys' => 'čiui',
  41.                         'dys' => 'džiui',
  42.                         'ys' => 'iui'
  43.                 ) ;
  44.                
  45.                 // galininkas (ką?)
  46.                 $this->gal = array(
  47.                         'a' => 'ą',
  48.                         'as' => 'ą',
  49.                         'ė' => 'ę',
  50.                         'is' => 'į',
  51.                         'us' => 'ų',
  52.                         'ys' => 'į'
  53.                 ) ;
  54.                
  55.                 // įnagininkas (kuo?)
  56.                 $this->ina = array(
  57.                         'a' => 'a',
  58.                         'as' => 'u',
  59.                         'ė' => 'e',
  60.                         'tis' => 'čiu',
  61.                         'dis' => 'džiu',
  62.                         'is' => 'iu',
  63.                         'us' => 'u',
  64.                         'tys' => 'čiu',
  65.                         'dys' => 'džiu',
  66.                         'ys' => 'iu'
  67.                 ) ;
  68.                
  69.                 // vietininkas (kur? kame?)
  70.                 $this->vie = array(
  71.                         'a' => 'oje',
  72.                         'as' => 'e',
  73.                         'ė' => 'ėje',
  74.                         'is' => 'yje',
  75.                         'us' => 'uje',
  76.                         'ys' => 'yje'
  77.                 ) ;
  78.                
  79.                 // šauksmininkas
  80.                 $this->sau = array(
  81.                         'a' => 'a',
  82.                         'as' => 'ai',
  83.                         'ė' => 'e',
  84.                         'is' => 'i',
  85.                         'us' => 'au',
  86.                         'ys' => 'y'
  87.                 ) ;
  88.        
  89.         }
  90.        
  91.         /**
  92.         * Vardų transformacija
  93.         *
  94.         * @param string $vardas lietuviškas vardas arba pavardė
  95.         * @param string $linksnis sutrumpintas linksnio pavadinimas: kil, nau, gal, ina, vie, sau
  96.         * @return string
  97.         */
  98.         function getName ( $vardas, $linksnis = 'sau' ) {
  99.        
  100.                 $vardai = explode( ' ', $this->sanitizeName($vardas) ) ;
  101.                 $vardaiL = array() ;
  102.                 foreach ( $vardai as $v ) {
  103.                         $vardaiL[] = $this->getLinksnis( $v, $linksnis ) ;
  104.                 }
  105.                
  106.                 return count($vardaiL) ? implode(' ', $vardaiL) : $vardas ;
  107.        
  108.         }
  109.        
  110.         /**
  111.         * Vardų sanitarija
  112.         *
  113.         * @param string $vardas lietuviškas vardas arba pavardė
  114.         * @return string
  115.         */
  116.         function sanitizeName ( $vardas ) {
  117.        
  118.                 $vardas = mb_eregi_replace('[^a-ž]', ' ', $vardas) ;
  119.                 $vardas = mb_eregi_replace('\s+', ' ', $vardas) ;
  120.                 $vardas = trim($vardas) ;
  121.                 $vardas = mb_convert_case($vardas, MB_CASE_TITLE) ;
  122.                
  123.                 return $vardas ;
  124.        
  125.         }
  126.        
  127.  
  128.         /**
  129.         * Vardas linksnyje
  130.         *
  131.         * @param string $vardas lietuviškas vardas arba pavardė
  132.         * @param string $linksnis sutrumpintas linksnio pavadinimas: kil, nau, gal, ina, vie, sau
  133.         * @return string
  134.         */
  135.         function getLinksnis ( $vardas, $linksnis = 'sau' ) {
  136.        
  137.                 $return = $vardas ;
  138.  
  139.                 foreach ( $this->$linksnis as $from=>$to ) {
  140.                         if ( mb_substr( $return, -mb_strlen($from) ) == $from ) {
  141.                                 $return = mb_substr( $return, 0, -mb_strlen($from) ) ;
  142.                                 $return .= $to ;
  143.                                 break ;
  144.                         }
  145.                 }
  146.                
  147.                 return $return ;
  148.                
  149.         }
  150.        
  151. }
  152.  
  153. // testuojam
  154. $l = new Linksniai ;
  155. echo 'Laba diena, '.$l->getName('  antANAS bArAnAuskAS ---___') .'!' ;
  156.  
  157. ?>
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top