[i18ninfo] Add show measure unit options 18/147718/9
authorHyunjee Kim <hj0426.kim@samsung.com>
Tue, 5 Sep 2017 09:51:38 +0000 (18:51 +0900)
committerHyunjee Kim <hj0426.kim@samsung.com>
Thu, 7 Sep 2017 00:43:42 +0000 (09:43 +0900)
Change-Id: I27d4ed6cf7752817235f9a37c9bc1146ca29acc0
Signed-off-by: Hyunjee Kim <hj0426.kim@samsung.com>
i18ninfo/i18ninfo.cpp
i18ninfo/i18ninfo_argp.h

index 13c8e6e..28d79fa 100644 (file)
@@ -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;
 }
index 97913ad..ff30d50 100644 (file)
@@ -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);