From 4b9b2673da2d4923121670b38b0249e67bf0614a Mon Sep 17 00:00:00 2001 From: Hyunjee Kim Date: Tue, 5 Sep 2017 18:51:38 +0900 Subject: [PATCH] [i18ninfo] Add show measure unit options Change-Id: I27d4ed6cf7752817235f9a37c9bc1146ca29acc0 Signed-off-by: Hyunjee Kim --- i18ninfo/i18ninfo.cpp | 220 +++++++++++++++++++++++++++++++++++++++++++++++ i18ninfo/i18ninfo_argp.h | 13 +++ 2 files changed, 233 insertions(+) diff --git a/i18ninfo/i18ninfo.cpp b/i18ninfo/i18ninfo.cpp index 13c8e6e..28d79fa 100644 --- a/i18ninfo/i18ninfo.cpp +++ b/i18ninfo/i18ninfo.cpp @@ -1130,6 +1130,215 @@ static int __show_ubidi(char *input_text) return 0; } +struct create_mu { + const char* unit_type; + const char* unit_subtype; + int (*fp)(i18n_measure_unit_h *measure_unit); +}; + +struct create_mu mu[] = { + {"acceleration", "g-force", i18n_measure_unit_create_g_force}, + {"acceleration", "meter-per-second-squared", i18n_measure_unit_create_meter_per_second_squared}, + {"angle", "arc-minute", i18n_measure_unit_create_arc_minute}, + {"angle", "arc-second", i18n_measure_unit_create_arc_second}, + {"angle", "degree", i18n_measure_unit_create_degree}, + {"angle", "radian", i18n_measure_unit_create_radian}, + {"area", "acre", i18n_measure_unit_create_acre}, + {"area", "hectare", i18n_measure_unit_create_hectare}, + {"area", "square-centimeter", i18n_measure_unit_create_square_centimeter}, + {"area", "square-foot", i18n_measure_unit_create_square_foot}, + {"area", "square-inch", i18n_measure_unit_create_square_inch}, + {"area", "square-kilometer", i18n_measure_unit_create_square_kilometer}, + {"area", "square-meter", i18n_measure_unit_create_square_meter}, + {"area", "square-mile", i18n_measure_unit_create_square_mile}, + {"area", "square-yard", i18n_measure_unit_create_square_yard}, + {"concentr", "karat", i18n_measure_unit_create_karat}, + {"consumption", "liter-per-kilometer", i18n_measure_unit_create_liter_per_kilometer}, + {"consumption", "mile-per-gallon", i18n_measure_unit_create_mile_per_gallon}, + {"digital", "bit", i18n_measure_unit_create_bit}, + {"digital", "byte", i18n_measure_unit_create_byte}, + {"digital", "gigabit", i18n_measure_unit_create_gigabit}, + {"digital", "gigabyte", i18n_measure_unit_create_gigabyte}, + {"digital", "kilobit", i18n_measure_unit_create_kilobit}, + {"digital", "kilobyte", i18n_measure_unit_create_kilobyte}, + {"digital", "megabit", i18n_measure_unit_create_megabit}, + {"digital", "megabyte", i18n_measure_unit_create_megabyte}, + {"digital", "terabit", i18n_measure_unit_create_terabit}, + {"digital", "terabyte", i18n_measure_unit_create_terabyte}, + {"duration", "day", i18n_measure_unit_create_day}, + {"duration", "hour", i18n_measure_unit_create_hour}, + {"duration", "microsecond", i18n_measure_unit_create_microsecond}, + {"duration", "milisecond", i18n_measure_unit_create_millisecond}, + {"duration", "minute", i18n_measure_unit_create_minute}, + {"duration", "month", i18n_measure_unit_create_month}, + {"duration", "nanosecond", i18n_measure_unit_create_nanosecond}, + {"duration", "second", i18n_measure_unit_create_second}, + {"duration", "week", i18n_measure_unit_create_week}, + {"duration", "year", i18n_measure_unit_create_year}, + {"electric", "ampere", i18n_measure_unit_create_ampere}, + {"electric", "miliampere", i18n_measure_unit_create_milliampere}, + {"electric", "ohm", i18n_measure_unit_create_ohm}, + {"electric", "volt", i18n_measure_unit_create_volt}, + {"energy", "calorie", i18n_measure_unit_create_calorie}, + {"energy", "foodcalorie", i18n_measure_unit_create_foodcalorie}, + {"energy", "joule", i18n_measure_unit_create_joule}, + {"energy", "kilocalorie", i18n_measure_unit_create_kilocalorie}, + {"energy", "kilojoule", i18n_measure_unit_create_kilojoule}, + {"energy", "kilowatt-hour", i18n_measure_unit_create_kilowatt_hour}, + {"frequency", "gigahertz", i18n_measure_unit_create_gigahertz}, + {"frequency", "hertz", i18n_measure_unit_create_hertz}, + {"frequency", "kilohertz", i18n_measure_unit_create_kilohertz}, + {"frequency", "megahertz", i18n_measure_unit_create_megahertz}, + {"length", "astronomical-unit", i18n_measure_unit_create_astronomical_unit}, + {"length", "centimeter", i18n_measure_unit_create_centimeter}, + {"length", "decimeter", i18n_measure_unit_create_decimeter}, + {"length", "fathom", i18n_measure_unit_create_fathom}, + {"length", "foot", i18n_measure_unit_create_foot}, + {"length", "furlong", i18n_measure_unit_create_furlong}, + {"length", "inch", i18n_measure_unit_create_inch}, + {"length", "kilometer", i18n_measure_unit_create_kilometer}, + {"length", "light-year", i18n_measure_unit_create_light_year}, + {"length", "meter", i18n_measure_unit_create_meter}, + {"length", "micrometer", i18n_measure_unit_create_micrometer}, + {"length", "mile", i18n_measure_unit_create_mile}, + {"length", "millimeter", i18n_measure_unit_create_millimeter}, + {"length", "nanometer", i18n_measure_unit_create_nanometer}, + {"length", "nautical-mile", i18n_measure_unit_create_nautical_mile}, + {"length", "parsec", i18n_measure_unit_create_parsec}, + {"length", "picometer", i18n_measure_unit_create_picometer}, + {"length", "yard", i18n_measure_unit_create_yard}, + {"light", "lux", i18n_measure_unit_create_lux}, + {"mass", "carat", i18n_measure_unit_create_carat}, + {"mass", "gram", i18n_measure_unit_create_gram}, + {"mass", "kilogram", i18n_measure_unit_create_kilogram}, + {"mass", "metric-ton", i18n_measure_unit_create_metric_ton}, + {"mass", "microgram", i18n_measure_unit_create_microgram}, + {"mass", "milligram", i18n_measure_unit_create_milligram}, + {"mass", "ounce-troy", i18n_measure_unit_create_ounce_troy}, + {"mass", "ounce", i18n_measure_unit_create_ounce}, + {"mass", "pound", i18n_measure_unit_create_pound}, + {"mass", "stone", i18n_measure_unit_create_stone}, + {"mass", "ton", i18n_measure_unit_create_ton}, + {"power", "gigawatt", i18n_measure_unit_create_gigawatt}, + {"power", "horsepower", i18n_measure_unit_create_horsepower}, + {"power", "kilowatt", i18n_measure_unit_create_kilowatt}, + {"power", "megawatt", i18n_measure_unit_create_megawatt}, + {"power", "milliwatt", i18n_measure_unit_create_milliwatt}, + {"power", "watt", i18n_measure_unit_create_watt}, + {"pressure", "hectopascal", i18n_measure_unit_create_hectopascal}, + {"pressure", "inch-hg", i18n_measure_unit_create_inch_hg}, + {"pressure", "millibar", i18n_measure_unit_create_millibar}, + {"pressure", "millimeter-of-mercury", i18n_measure_unit_create_millimeter_of_mercury}, + {"pressure", "pound-per-square-inch", i18n_measure_unit_create_pound_per_square_inch}, + {"speed", "kilometer-per-hour", i18n_measure_unit_create_kilometer_per_hour}, + {"speed", "meter-per-second", i18n_measure_unit_create_meter_per_second}, + {"speed", "mile-per-hour", i18n_measure_unit_create_mile_per_hour}, + {"temperature", "celsius", i18n_measure_unit_create_celsius}, + {"temperature", "fahrenheit", i18n_measure_unit_create_fahrenheit}, + {"temperature", "kelvin", i18n_measure_unit_create_kelvin}, + {"volume", "acre-foot", i18n_measure_unit_create_acre_foot}, + {"volume", "bushel", i18n_measure_unit_create_bushel}, + {"volume", "centiliter", i18n_measure_unit_create_centiliter}, + {"volume", "cubic-centimeter", i18n_measure_unit_create_cubic_centimeter}, + {"volume", "cubic-foot", i18n_measure_unit_create_cubic_foot}, + {"volume", "cubic-inch", i18n_measure_unit_create_cubic_inch}, + {"volume", "cubic-kilometer", i18n_measure_unit_create_cubic_kilometer}, + {"volume", "cubic-meter", i18n_measure_unit_create_cubic_meter}, + {"volume", "cubic-mile", i18n_measure_unit_create_cubic_mile}, + {"volume", "cubic-yard", i18n_measure_unit_create_cubic_yard}, + {"volume", "cup", i18n_measure_unit_create_cup}, + {"volume", "deciliter", i18n_measure_unit_create_deciliter}, + {"volume", "fluid-ounce", i18n_measure_unit_create_fluid_ounce}, + {"volume", "gallon", i18n_measure_unit_create_gallon}, + {"volume", "hectoliter", i18n_measure_unit_create_hectoliter}, + {"volume", "liter", i18n_measure_unit_create_liter}, + {"volume", "megaliter", i18n_measure_unit_create_megaliter}, + {"volume", "milliliter", i18n_measure_unit_create_milliliter}, + {"volume", "pint", i18n_measure_unit_create_pint}, + {"volume", "quart", i18n_measure_unit_create_quart}, + {"volume", "tablespoon", i18n_measure_unit_create_tablespoon}, + {"volume", "teaspoon", i18n_measure_unit_create_teaspoon} + }; + +static int __show_measure_unit(char *input_number) +{ + printf(" - To show the measure unit\n"); + printf("****************************************\n"); + + if (!input_number) + input_number = (char *)"137"; + PRINT_DEBUG_LOG("Input number : %s\n", input_number); + + PRINT_ASCIIDOC_LOG("\n[options=\"header\"]\n"); + PRINT_ASCIIDOC_LOG("|===\n"); + printf("| TYPE | SUBTYPE | NARROW | SHORT | WIDE \n"); + + unsigned int i; + for (i = 0; i < sizeof(mu) / sizeof(mu[0]); i++) { + i18n_measure_unit_h measure_unit = NULL; + int error_code = mu[i].fp(&measure_unit); + + i18n_formattable_h formattable = NULL; + double numer; + sscanf(input_number, "%lf", &numer); + error_code = i18n_formattable_create_with_double(numer, &formattable); + + i18n_measure_h measure; + error_code = i18n_measure_create(formattable, measure_unit, &measure); + i18n_formattable_destroy(formattable); + + int measure_array_count = 0; + const int max_measures = 10; + i18n_measure_h measure_array[max_measures] = { NULL }; + measure_array[measure_array_count++] = measure; + + i18n_measure_format_h measure_format_narrow = NULL; + i18n_measure_format_create("en", "US", I18N_UMEASFMT_WIDTH_NARROW, &measure_format_narrow); + + i18n_measure_format_h measure_format_short = NULL; + i18n_measure_format_create("en", "US", I18N_UMEASFMT_WIDTH_SHORT, &measure_format_short); + + i18n_measure_format_h measure_format_wide = NULL; + i18n_measure_format_create("en", "US", I18N_UMEASFMT_WIDTH_WIDE, &measure_format_wide); + + i18n_field_position_h field_position = NULL; + i18n_field_position_create_for_field(5, &field_position); + const int width = 100; + const char *input = " "; + i18n_uchar dest_narrow[width]; + i18n_ustring_copy_ua_n(dest_narrow, input, width); + i18n_uchar dest_short[width]; + i18n_ustring_copy_ua_n(dest_short, input, width); + i18n_uchar dest_wide[width]; + i18n_ustring_copy_ua_n(dest_wide, input, width); + + int32_t length = 0; + error_code = i18n_measure_format_format_measures(measure_format_narrow, measure_array, measure_array_count, + field_position, width, dest_narrow, &length); + CHECK_ERROR("i18n_measure_format_format_measures[I18N_UMEASFMT_WIDTH_NARROW]", error_code); + error_code = i18n_measure_format_format_measures(measure_format_short, measure_array, measure_array_count, + field_position, width, dest_short, &length); + CHECK_ERROR("i18n_measure_format_format_measures[I18N_UMEASFMT_WIDTH_SHORT]", error_code); + error_code = i18n_measure_format_format_measures(measure_format_wide, measure_array, measure_array_count, + field_position, width, dest_wide, &length); + CHECK_ERROR("i18n_measure_format_format_measures[I18N_UMEASFMT_WIDTH_WIDE]", error_code); + PRINT_DEBUG_LOG("length = %d\n", length); + + char output_text_narrow[width + 1] = { 0x00, }; + char output_text_short[width + 1] = { 0x00, }; + char output_text_wide[width + 1] = { 0x00, }; + i18n_ustring_copy_au_n(output_text_narrow, dest_narrow, width); + i18n_ustring_copy_au_n(output_text_short, dest_short, width); + i18n_ustring_copy_au_n(output_text_wide, dest_wide, width); + + printf("| %-12s | %-24s |%-10s |%-15s |%s\n", mu[i].unit_type, mu[i].unit_subtype, output_text_narrow, output_text_short, output_text_wide); + i18n_measure_destroy(measure); + } + PRINT_ASCIIDOC_LOG("|===\n"); + + return 0; +} + void allTest() { int ret = 0, i = 0; @@ -1234,6 +1443,13 @@ void showTzdataVersion() __get_tzdata_version(); } +void showMeasureUnit(char *input) +{ + printf("\n== Show Measure Unit"); + printf("\n****************************************\n"); + __show_measure_unit(input); +} + void showUbidi(char *input) { printf("\n== Show Ubidi"); @@ -1462,5 +1678,9 @@ int main(int argc, char *argv[]) showUbidi(arguments.testTextArg); } + if (arguments.showMeasureUnit) { + showMeasureUnit(arguments.testInputNumArg); + } + return 0; } diff --git a/i18ninfo/i18ninfo_argp.h b/i18ninfo/i18ninfo_argp.h index 97913ad..ff30d50 100644 --- a/i18ninfo/i18ninfo_argp.h +++ b/i18ninfo/i18ninfo_argp.h @@ -28,6 +28,7 @@ static struct argp_option options[] = { {"set-locale", 'l', "locale", 0, "Set specific locale", 0 }, {"show-ubidi", 'b', 0, OPTION_ARG_OPTIONAL, "Show examples of the Unicode Bidirectional Algorithm", 0 }, {"print-ASCII", 'p', 0, 0, "Print results as the ASCIIDoc Format", 0 }, + {"show-measure-unit", 'm', "Number", OPTION_ARG_OPTIONAL, "Show measure unit", 0 }, { 0 } }; @@ -47,6 +48,7 @@ struct arguments { int testStringIter; int showUbidi; int printASCII; + int showMeasureUnit; char *arg1; /* arg1 */ char **strings; /* [string…] */ @@ -57,6 +59,7 @@ struct arguments { char *testStringArg; char *testStringIterArg; char *testTextArg; + char *testInputNumArg; char *setLocale; }; @@ -164,6 +167,16 @@ parse_opt(int key, char *arg, struct argp_state *state) arguments->arg_flag = 15; arguments->printASCII = 1; break; + case 'm': + arguments->arg_flag = 16; + arguments->showMeasureUnit = 1; + + nextArg = state->argv[state->next]; + if (nextArg && *nextArg != '-') { + arguments->testInputNumArg = nextArg; + state->next++; + } + break; case ARGP_KEY_NO_ARGS: if (arguments->arg_flag == 0) { argp_usage(state); -- 2.7.4