Szerző Téma: Rag.inc - Fejlett ragozás szavakhoz  (Megtekintve 1178 alkalommal)

Nem elérhető Sramm

  • 596
    • Profil megtekintése
Rag.inc - Fejlett ragozás szavakhoz
« Dátum: 2014. Július 02. - 22:00:09 »
+2
Sziasztok!
Ez az Include szavak ragozására készült, kizárólag magyar szavakkal! Az ötletet, és a függvény paramétereit is innen nyúltam: http://sampforum.hu/index.php?topic=2248.0
Régen használtam, de nem tudott túl sokat, így gondoltam megírom a sajátomat. Kicsit több típussal bõvült:
 

-ból-bõl 1
-ról-rõl 2
-nak-nek 3
-tól-tõl 4
-ra-re 5
-ban-ben 6
-ba-be 7
-val-vel 8
-t 9
-hoz-hez-höz 10

 
rag, és a típus kódja.
Használat tehát:
 
rag(\"Ember\",1);

 
eredmény: emberbõl


Hibák még elõfordulhatnak, nyugodtan lehet próbálgatni mindenféle cifra szóval.
Tesztelni:
 
public OnGameModeInit() //Tesztelni
{
for(new i = 1; i<13; i++) printf(\"%s\",rag(\"románc\",i));
return 1;
}

 


Letöltés:
http://www.solidfiles.com/d/e2a555f78d/rag.inc
vagy kód:



// Ragozás include 1.0 Beta | by:Sramm
#if defined _INC_rag
#endinput
#endif
#define _INC_rag
/*
-ból-bõl 1
-ról-rõl 2
-nak-nek 3
-tól-tõl 4
-ra-re 5
-ban-ben 6
-ba-be 7
-val-vel 8*
-t 9
-hoz-hez-höz 10 *
*/
/* native rag(str[],tipus); */
 
new mely[][] ={\"a\", \"á\", \"o\", \"ó\", \"u\", \"ú\"};
new magas[][] ={\"e\", \"é\", \"i\", \"í\", \"ö\", \"õ\", \"ü\", \"û\"};
new all[][] = {\"a\", \"á\", \"o\", \"ó\", \"u\", \"ú\",\"e\", \"é\", \"i\", \"í\", \"ö\", \"õ\", \"ü\", \"û\"};
new other[][] = {\"m\", \"n\", \"j\", \"l\", \"r\", \"b\", \"d\", \"g\", \"v\",\"p\", \"t\",\"c\"};
 
new melytype[][] ={\"ból\", \"ról\", \"nak\", \"tól\", \"ra\", \"ban\", \"ba\",\"val\",\"t\"};
new magastype[][] ={\"bõl\", \"rõl\", \"nek\", \"tõl\", \"re\", \"ben\", \"be\",\"vel\",\"t\"};
 
stock CheckMaganhangzo(betu[])
{
    for(new i; i<sizeof(all); i++)
    {
        if(strcmp(betu, all, true) == 0) return 1;
}
return 0;
}
stock CheckType(betu[])
{
for(new i; i<sizeof(mely); i++){ if(strcmp(betu, mely, true) == 0) return 1;}
    for(new i; i<sizeof(magas); i++){ if(strcmp(betu, magas, true) == 0) return 2;}
    return 3;
}
/*public OnGameModeInit() //Tesztelni
{
for(new i = 1; i<13; i++) printf(\"%s\",rag(\"románc\",i));
return 1;
}*/
 
stock rag(str[],tipus)
{
new betu[8];
new szo[128];
format(szo,sizeof(szo),str); //másképp nem kezeli rendesen..
    strmid(betu, szo, strlen(szo)-1, strlen(szo));
    if(CheckMaganhangzo(betu) == 0)
{
new lastbetu[8];
    if(tipus == 8)
{
    for(new i; i<sizeof(other); i++)
    {
        if(strcmp(betu, other, true) == 0)
       {
           for(new c; c<strlen(szo); c++)
          {
              strmid(betu, szo, c,c+1);
              if(CheckType(betu) != 3) format(lastbetu,sizeof(lastbetu),betu);
         }
         if(CheckType(lastbetu) == 1) format(szo,sizeof(szo),\"%s%sal\",szo,other);
         if(CheckType(lastbetu) == 2) format(szo,sizeof(szo),\"%s%sel\",szo,other);
           return szo;
      }
   }
   if(strcmp(betu, \"z\", true) == 0)
    {
        for(new i; i<strlen(szo); i++)
       {
           strmid(betu, szo, i,i+1);
           if(CheckType(betu) != 3) format(lastbetu,sizeof(lastbetu),betu);
      }
      strmid(betu, szo, strlen(szo)-2, strlen(szo)-1);
      if(strcmp(betu, \"s\", true) == 0)
       {
           strdel(szo,strlen(szo)-2,strlen(szo));
           if(CheckType(lastbetu) == 1) format(szo,sizeof(szo),\"%ssszal\",szo);
         if(CheckType(lastbetu) == 2) format(szo,sizeof(szo),\"%ssszel\",szo);
      }
      else
      {
         if(CheckType(lastbetu) == 1) format(szo,sizeof(szo),\"%sal\",szo);
         if(CheckType(lastbetu) == 2) format(szo,sizeof(szo),\"%sel\",szo);
      }
        return szo;
   }
   if(strcmp(betu, \"y\", true) == 0)
    {
        for(new i; i<strlen(szo); i++)
       {
           strmid(betu, szo, i,i+1);
           if(CheckType(betu) != 3) format(lastbetu,sizeof(lastbetu),betu);
      }
      strmid(betu, szo, strlen(szo)-2, strlen(szo)-1);
      if(strcmp(betu, \"g\", true) == 0)
       {
           strdel(szo,strlen(szo)-2,strlen(szo));
           if(CheckType(lastbetu) == 1) format(szo,sizeof(szo),\"%sggyal\",szo);
         if(CheckType(lastbetu) == 2) format(szo,sizeof(szo),\"%sggyel\",szo);
      }
        return szo;
   }
   if(strcmp(betu, \"s\", true) == 0)
    {
        for(new i; i<strlen(szo); i++)
       {
           strmid(betu, szo, i,i+1);
           if(CheckType(betu) != 3) format(lastbetu,sizeof(lastbetu),betu);
      }
      strmid(betu, szo, strlen(szo)-2, strlen(szo)-1);
      if(strcmp(betu, \"c\", true) == 0)
       {
           strdel(szo,strlen(szo)-2,strlen(szo));
           if(CheckType(lastbetu) == 1) format(szo,sizeof(szo),\"%sccsal\",szo);
         if(CheckType(lastbetu) == 2) format(szo,sizeof(szo),\"%sccsel\",szo);
      }
      else if(strcmp(betu, \"z\", true) == 0)
       {
           strdel(szo,strlen(szo)-2,strlen(szo));
           if(CheckType(lastbetu) == 1) format(szo,sizeof(szo),\"%szzsal\",szo);
         if(CheckType(lastbetu) == 2) format(szo,sizeof(szo),\"%szzsel\",szo);
      }
             else
      {
         if(CheckType(lastbetu) == 1) format(szo,sizeof(szo),\"%ssal\",szo);
         if(CheckType(lastbetu) == 2) format(szo,sizeof(szo),\"%ssel\",szo);
      }
        return szo;
   }
   if(strcmp(betu, \"k\", true) == 0)
    {
        for(new i; i<strlen(szo); i++)
       {
           strmid(betu, szo, i,i+1);
           if(CheckType(betu) != 3) format(lastbetu,sizeof(lastbetu),betu);
      }
      strmid(betu, szo, strlen(szo)-2, strlen(szo)-1);
      if(strcmp(betu, \"k\", true) == 0)
       {
           if(CheckType(lastbetu) == 1) format(szo,sizeof(szo),\"%sal\",szo);
         if(CheckType(lastbetu) == 2) format(szo,sizeof(szo),\"%sel\",szo);
      }
      else
      {
         if(CheckType(lastbetu) == 1) format(szo,sizeof(szo),\"%skal\",szo);
         if(CheckType(lastbetu) == 2) format(szo,sizeof(szo),\"%skel\",szo);
      }
        return szo;
   }
}
if(tipus == 9)
{
    if(strcmp(betu, \"t\", true) == 0 || strcmp(betu, \"k\", true) == 0 || strcmp(betu, \"c\", true) == 0)
    {
        for(new i; i<strlen(szo); i++)
       {
           strmid(betu, szo, i,i+1);
           if(CheckType(betu) != 3) format(lastbetu,sizeof(lastbetu),betu);
      }
      if(CheckType(lastbetu) == 1) format(szo,sizeof(szo),\"%sot\",szo);
      if(CheckType(lastbetu) == 2) format(szo,sizeof(szo),\"%set\",szo);
        return szo;
   }
}
    for(new i; i<strlen(szo); i++)
    {
        strmid(betu, szo, i,i+1);
        if(CheckType(betu) != 3) format(lastbetu,sizeof(lastbetu),betu);
}
if(tipus == 10)
{
    if(strcmp(betu, \"ö\", true) == 0)
    {
        strdel(szo,strlen(szo)-1, strlen(szo));
        format(szo,sizeof(szo),\"%sõhöz\",szo);
        return szo;
   }
   if(strcmp(betu, \"õ\", true) == 0)
    {
        strdel(szo,strlen(szo)-1, strlen(szo));
        format(szo,sizeof(szo),\"%shöz\",szo);
        return szo;
   }
}
if(CheckType(lastbetu) == 1) format(szo,sizeof(szo),\"%s%s\",szo,melytype[tipus-1]);
if(CheckType(lastbetu) == 2) format(szo,sizeof(szo),\"%s%s\",szo,magastype[tipus-1]);
}
    if(CheckMaganhangzo(betu) == 1)
    {
    if(strcmp(betu, \"a\", true) == 0)
    {
        strdel(szo,strlen(szo)-1, strlen(szo));
        format(szo,sizeof(szo),\"%sá%s\",szo,melytype[tipus-1]);
        return szo;
}
if(strcmp(betu, \"e\", true) == 0)
    {
        strdel(szo,strlen(szo)-1, strlen(szo));
        format(szo,sizeof(szo),\"%sé%s\",szo,magastype[tipus-1]);
        return szo;
}
if(tipus == 10)
{
    if(strcmp(betu, \"ö\", true) == 0)
    {
        strdel(szo,strlen(szo)-1, strlen(szo));
        format(szo,sizeof(szo),\"%sõhöz\",szo);
        return szo;
   }
   if(strcmp(betu, \"õ\", true) == 0)
    {
        strdel(szo,strlen(szo)-1, strlen(szo));
        format(szo,sizeof(szo),\"%shöz\",szo);
        return szo;
   }
}
if(CheckType(betu) == 1) format(szo,sizeof(szo),\"%s%s\",szo,melytype[tipus-1]);
if(CheckType(betu) == 2) format(szo,sizeof(szo),\"%s%s\",szo,magastype[tipus-1]);
return szo;
}
return szo;
}

 
 
Használjátok egészséggel :)

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
Rag.inc - Fejlett ragozás szavakhoz
« Válasz #1 Dátum: 2014. Július 02. - 22:13:37 »
0
Ez jó lett! Kerestem ilyet. Tudom, ott van a régi, de ez többet tud, nekem meg most nincs kedvem ilyenekkel szöszmötölni. :D
Egy dolog, amit észrevettem (lehet, hogy hülyeség):
 

if(strcmp(betu, \"õ\", true) == 0)

 
[/quote]
Ezt nem egyszerûbb így?:
 
if(betu == \'õ\')

Nem elérhető Sramm

  • 596
    • Profil megtekintése
Rag.inc - Fejlett ragozás szavakhoz
« Válasz #2 Dátum: 2014. Július 02. - 22:17:04 »
0
Nem akartam, nekem regen mintha errorozott volna ra, inkabb biztosra mentem.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal