Created
May 5, 2013 22:00
-
-
Save asquelt/5522355 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "num2words-en.h" | |
#include "num2words-common.h" | |
#include "string.h" | |
// ęóąć - available | |
// śłżźń - absent | |
static const char* const ONES[] = { | |
"", | |
"jeden", | |
"dwie", | |
"trzy", | |
"cztery", | |
"pięć", | |
"szesć", | |
"siedem", | |
"osiem", | |
"dziewięć", | |
"dziesięć", | |
"jedenascie", | |
"dwanascie", | |
"trzynascie", | |
"czternascie", | |
"piętnascie", | |
"szesnascie", | |
"siedemnascie", | |
"osiemnascie", | |
"dziewiętnascie" | |
}; | |
static const char* const TENS[] = { | |
"", | |
"dziesięć", | |
"dwadziescia", | |
"trzydziesci", | |
"czterdziesci", | |
"pięćdziesiąt", | |
"szesćdziedziąt", | |
"siedemdziesiąt", | |
"osiemdziesiąt", | |
"dziewięćdziesiąt" | |
}; | |
static const char* const H_ONES[] = { | |
"", | |
"pierwsz", | |
"drug", | |
"trzeci", | |
"czwart", | |
"piąt", | |
"szóst", | |
"siódm", | |
"ósm", | |
"dziewiąt", | |
"dziesiąt", | |
"jedenast", | |
"dwunast", | |
"trzynast", | |
"czternast", | |
"piętnast", | |
"szesnast", | |
"siedemnast", | |
"osiemnast", | |
"dziewiętnast" | |
}; | |
static const char* const H_TENS[] = { | |
"", | |
"dziesiąt", | |
"dwudziest", | |
}; | |
static const char* STR_PUNKT = "punkt"; | |
static const char* STR_POLUDNIE = "poludnie"; | |
static const char* STR_POLNOC = "pólnoc"; | |
static const char* STR_KWADRANS = "kwadrans"; | |
static const char* STR_WPOL = "wpól"; | |
static const char* STR_DO = "do"; | |
static const char* STR_ZA = "za"; | |
static const char* STR_PO = "po"; | |
static const char* STR_RANO = "rano"; | |
static const char* STR_PO_GODZINIE = "a"; | |
static const char* STR_DO_GODZINY = "ej"; | |
static const char* STR_DO_GODZINY2 = "iej"; | |
static const char* STR_MINUTA = "minuta"; | |
static const char* STR_MINUTE = "minutę"; | |
static size_t num2words_pl(char* words, int num) { | |
size_t len = 0; | |
if (num < 20) { | |
strcat(words, ONES[num]); | |
return strlen(ONES[num]); | |
} else { | |
int tens_val = num / 10 % 10; | |
int ones_val = num % 10; | |
strcat(words, TENS[tens_val]); | |
len += strlen(TENS[tens_val]); | |
if (ones_val > 0) { | |
strcat(words, " "); | |
len += 1; | |
strcat(words, ONES[ones_val]); | |
len += strlen(ONES[ones_val]); | |
} | |
} | |
return len; | |
} | |
static size_t h_num2words_pl(char* words, int num) { | |
size_t len = 0; | |
if (num == 0) { | |
strcat(words, H_ONES[12]); | |
return strlen(H_ONES[12]); | |
} else if (num < 20) { | |
strcat(words, H_ONES[num]); | |
return strlen(H_ONES[num]); | |
} else { | |
int tens_val = num / 10 % 10; | |
int ones_val = num % 10; | |
strcat(words, H_TENS[tens_val]); | |
len += strlen(H_TENS[tens_val]); | |
if (ones_val > 0) { | |
strcat(words, " "); | |
len += 1; | |
strcat(words, H_ONES[ones_val]); | |
len += strlen(H_ONES[ones_val]); | |
} | |
} | |
return len; | |
} | |
void time2words_pl(int hours, int minutes, bool twentyfourhours, bool longtime, bool leadingzero, bool ampm, char* hourstring, size_t hourstring_length, char* minutestring, size_t minutestring_length) { | |
size_t hourstring_remaining = hourstring_length; | |
size_t minutestring_remaining = minutestring_length; | |
memset(hourstring, 0, hourstring_length); | |
memset(minutestring, 0, minutestring_length); | |
if (minutes >= 60) { | |
// if rounded up by ROUNDING | |
minutes = 0; | |
hours = (hours + 1) % 24; | |
} | |
if (longtime) { // twentyfour to midnight | |
if (minutes == 0) { | |
// leave minutestring empty | |
} else if (minutes < 31) { | |
if (minutes == 1) { | |
minutestring_remaining -= append_string(minutestring, minutestring_remaining, STR_MINUTA); | |
minutestring_remaining -= append_string(minutestring, minutestring_remaining, " "); | |
minutestring_remaining -= append_string(minutestring, minutestring_remaining, STR_PO); | |
} else if (minutes == 15) { | |
minutestring_remaining -= append_string(minutestring, minutestring_remaining, STR_KWADRANS); | |
minutestring_remaining -= append_string(minutestring, minutestring_remaining, " "); | |
minutestring_remaining -= append_string(minutestring, minutestring_remaining, STR_PO); | |
} else if (minutes == 30) { | |
minutestring_remaining -= append_string(minutestring, minutestring_remaining, STR_WPOL); | |
minutestring_remaining -= append_string(minutestring, minutestring_remaining, " "); | |
minutestring_remaining -= append_string(minutestring, minutestring_remaining, STR_DO); | |
hours = (hours + 1) % 24; | |
} else { | |
if (leadingzero && minutes < 10) { | |
minutestring_remaining -= num2words_pl(minutestring, 0); | |
minutestring_remaining -= append_string(minutestring, minutestring_remaining, " "); | |
} | |
minutestring_remaining -= num2words_pl(minutestring, minutes); | |
minutestring_remaining -= append_string(minutestring, minutestring_remaining, " "); | |
minutestring_remaining -= append_string(minutestring, minutestring_remaining, STR_PO); | |
} | |
} else { // minutes > 30 | |
minutestring_remaining -= append_string(minutestring, minutestring_remaining, STR_ZA); | |
minutestring_remaining -= append_string(minutestring, minutestring_remaining, " "); | |
if (minutes == 59) { | |
minutestring_remaining -= append_string(minutestring, minutestring_remaining, STR_MINUTE); | |
} else if (minutes == 45) { | |
minutestring_remaining -= append_string(minutestring, minutestring_remaining, STR_KWADRANS); | |
} else { | |
minutestring_remaining -= num2words_pl(minutestring, (60 - minutes)); | |
} | |
hours = (hours + 1) % 24; | |
} | |
if (hours == 0 && minutes == 0) { | |
hourstring_remaining -= append_string(hourstring, hourstring_remaining, STR_POLNOC); | |
} else if (hours == 12 && minutes == 0) { | |
hourstring_remaining -= append_string(hourstring, hourstring_remaining, STR_POLUDNIE); | |
} else { | |
if (twentyfourhours) { | |
hourstring_remaining -= h_num2words_pl(hourstring, hours); | |
} else { | |
hourstring_remaining -= h_num2words_pl(hourstring, hours % 12); | |
} | |
if (minutes == 0 || minutes > 30) { | |
hourstring_remaining -= append_string(hourstring, hourstring_remaining, STR_PO_GODZINIE); | |
} else { | |
if (hours == 2) { | |
hourstring_remaining -= append_string(hourstring, hourstring_remaining, STR_DO_GODZINY2); | |
} else { | |
hourstring_remaining -= append_string(hourstring, hourstring_remaining, STR_DO_GODZINY); | |
} | |
} | |
if (hours != 0 && hours != 12) { | |
if (ampm) { | |
if (hours < 12) { | |
hourstring_remaining -= append_string(hourstring, hourstring_remaining, " "); | |
hourstring_remaining -= append_string(hourstring, hourstring_remaining, STR_RANO); | |
} | |
} | |
if (minutes == 0) { | |
hourstring_remaining -= append_string(hourstring, hourstring_remaining, " "); | |
hourstring_remaining -= append_string(hourstring, hourstring_remaining, STR_PUNKT); | |
} | |
} | |
} | |
} else { // eleven thirtysix | |
if (leadingzero && minutes < 10) { | |
minutestring_remaining -= num2words_pl(minutestring, 0); | |
minutestring_remaining -= append_string(minutestring, minutestring_remaining, " "); | |
} | |
minutestring_remaining -= num2words_pl(minutestring, minutes); | |
if (hours == 0 && minutes == 0) { | |
hourstring_remaining -= append_string(hourstring, hourstring_remaining, STR_POLNOC); | |
} else if (hours == 12 && minutes == 0) { | |
hourstring_remaining -= append_string(hourstring, hourstring_remaining, STR_POLUDNIE); | |
} else { | |
if (twentyfourhours) { | |
hourstring_remaining -= h_num2words_pl(hourstring, hours); | |
} else { | |
hourstring_remaining -= h_num2words_pl(hourstring, hours % 12); | |
} | |
hourstring_remaining -= append_string(hourstring, hourstring_remaining, STR_PO_GODZINIE); | |
if (ampm && hours != 0 && hours != 12) { | |
if (hours < 12) { | |
hourstring_remaining -= append_string(hourstring, hourstring_remaining, " "); | |
hourstring_remaining -= append_string(hourstring, hourstring_remaining, STR_RANO); | |
} | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment