2009-11-14 18:08 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)

* src/rtl/hbi18n1.c
    + Added plural form support for these languages:
      CS, FR, GA, HR, HU, JA, KO, LV, PT-BR, RO, SK, SL, SR, TR, UK, VI

  * src/rtl/cputime.c
    * Minor formatting.
This commit is contained in:
Viktor Szakats
2009-11-14 17:11:06 +00:00
parent 70513cee86
commit 396dff8431
3 changed files with 92 additions and 6 deletions

View File

@@ -17,6 +17,14 @@
past entries belonging to author(s): Viktor Szakats.
*/
2009-11-14 18:08 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* src/rtl/hbi18n1.c
+ Added plural form support for these languages:
CS, FR, GA, HR, HU, JA, KO, LV, PT-BR, RO, SK, SL, SR, TR, UK, VI
* src/rtl/cputime.c
* Minor formatting.
2009-11-14 16:15 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* external/sqlite3/sqlite3.c
* external/sqlite3/sqlite3.h

View File

@@ -102,7 +102,7 @@ double hb_secondsCPU( int n )
{
struct tms tm;
times(&tm);
times( &tm );
if( n > 10 )
{
@@ -119,7 +119,7 @@ double hb_secondsCPU( int n )
/* In POSIX-1996 the CLK_TCK symbol is mentioned as obsolescent */
/* d /= CLK_TCK; */
d /= (double) sysconf(_SC_CLK_TCK);
d /= ( double ) sysconf( _SC_CLK_TCK );
}
#else
if( n > 10 )

View File

@@ -98,6 +98,23 @@
#define HB_I18N_PLURAL_EN 1
#define HB_I18N_PLURAL_PL 2
#define HB_I18N_PLURAL_LT 3
#define HB_I18N_PLURAL_CS 4
#define HB_I18N_PLURAL_FR 5
#define HB_I18N_PLURAL_GA 6
#define HB_I18N_PLURAL_HR 7
#define HB_I18N_PLURAL_HU 8
#define HB_I18N_PLURAL_JA 9
#define HB_I18N_PLURAL_KO 10
#define HB_I18N_PLURAL_LV 11
#define HB_I18N_PLURAL_PT_BR 12
#define HB_I18N_PLURAL_RO 13
#define HB_I18N_PLURAL_RU 14
#define HB_I18N_PLURAL_SK 15
#define HB_I18N_PLURAL_SL 16
#define HB_I18N_PLURAL_SR 17
#define HB_I18N_PLURAL_TR 18
#define HB_I18N_PLURAL_UK 19
#define HB_I18N_PLURAL_VI 20
typedef struct _HB_PLURAL_FORMS
{
@@ -108,9 +125,26 @@ HB_PLURAL_FORMS, *PHB_PLURAL_FORMS;
static const HB_PLURAL_FORMS s_plural_forms[] =
{
{ "EN", HB_I18N_PLURAL_EN },
{ "PL", HB_I18N_PLURAL_PL },
{ "LT", HB_I18N_PLURAL_LT }
{ "EN" , HB_I18N_PLURAL_EN },
{ "PL" , HB_I18N_PLURAL_PL },
{ "LT" , HB_I18N_PLURAL_LT },
{ "CS" , HB_I18N_PLURAL_CS },
{ "FR" , HB_I18N_PLURAL_FR },
{ "GA" , HB_I18N_PLURAL_GA },
{ "HR" , HB_I18N_PLURAL_HR },
{ "HU" , HB_I18N_PLURAL_HU },
{ "JA" , HB_I18N_PLURAL_JA },
{ "KO" , HB_I18N_PLURAL_KO },
{ "LV" , HB_I18N_PLURAL_LV },
{ "PT-BR", HB_I18N_PLURAL_PT_BR },
{ "RO" , HB_I18N_PLURAL_RO },
{ "RU" , HB_I18N_PLURAL_RU },
{ "SK" , HB_I18N_PLURAL_SK },
{ "SL" , HB_I18N_PLURAL_SL },
{ "SR" , HB_I18N_PLURAL_SR },
{ "TR" , HB_I18N_PLURAL_TR },
{ "UK" , HB_I18N_PLURAL_UK },
{ "VI" , HB_I18N_PLURAL_VI }
};
#define HB_PLURAL_FOMRS_COUNT ( sizeof( s_plural_forms ) / sizeof( HB_PLURAL_FORMS ) )
@@ -168,6 +202,10 @@ static const char * hb_i18n_pluralformid( int iForm )
return NULL;
}
/* NOTE: Source:
http://www.gnu.org/software/hello/manual/gettext/Plural-forms.html
[vszakats] */
static long hb_i18n_pluralindex( int iForm, PHB_ITEM pNum )
{
double n = hb_numRound( hb_itemGetND( pNum ), 10 ), n10, n100;
@@ -180,12 +218,52 @@ static long hb_i18n_pluralindex( int iForm, PHB_ITEM pNum )
return n == 1 ? 1 : ( n10 >= 2 && n10 <= 4 &&
( n100 < 10 || n100 >= 20 ) ? 2 : 3 );
case HB_I18N_PLURAL_RO:
n100 = fmod( n, 100.0 );
return n == 1 ? 1 : ( n == 0 || ( n100 > 0 && n100 < 20 ) ) ? 2 : 3;
case HB_I18N_PLURAL_HR:
case HB_I18N_PLURAL_SR:
case HB_I18N_PLURAL_RU:
case HB_I18N_PLURAL_UK:
n10 = fmod( n, 10.0 );
n100 = fmod( n, 100.0 );
return n10 == 1 && n100 != 11 ? 1 : n10 >= 2 && n10 <= 4 && ( n100 < 10 || n100 >= 20 ) ? 2 : 3;
case HB_I18N_PLURAL_CS:
case HB_I18N_PLURAL_SK:
return n == 1 ? 1 : ( ( n >= 2 && n <= 4 ) ? 2 : 3 );
case HB_I18N_PLURAL_SL:
n10 = fmod( n, 10.0 );
n100 = fmod( n, 100.0 );
return n100 == 1 ? 1 : ( n100 == 2 ? 1 : ( n100 == 3 || n100 == 4 ? 3 : 4 ) );
case HB_I18N_PLURAL_LT:
n10 = fmod( n, 10.0 );
n100 = fmod( n, 100.0 );
return n10 == 1 && n100 != 11 ? 1 : (n10 != 0 && (n100 < 10 || n100 >= 20) ? 2 : 3);
return n10 == 1 && n100 != 11 ? 1 : ( n10 != 0 && ( n100 < 10 || n100 >= 20 ) ? 2 : 3 );
case HB_I18N_PLURAL_LV:
n10 = fmod( n, 10.0 );
n100 = fmod( n, 100.0 );
return ( n10 == 1 && n100 != 11 ) ? 1 : ( n != 0 ? 2 : 3 );
case HB_I18N_PLURAL_GA:
return n == 1 ? 1 : ( n == 2 ? 2 : 3 );
case HB_I18N_PLURAL_JA:
case HB_I18N_PLURAL_KO:
case HB_I18N_PLURAL_VI:
case HB_I18N_PLURAL_TR:
return 1;
case HB_I18N_PLURAL_FR:
case HB_I18N_PLURAL_PT_BR:
return n <= 1 ? 1 : 2;
case HB_I18N_PLURAL_EN:
case HB_I18N_PLURAL_HU:
default:
return n == 1 ? 1 : 2;
}