X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=sample.c;h=e65e39d8c189ec26bab3527ac1d48ffeff9a1e5f;hb=098d0bdeccaba4c09452979eaf193e88a5ce5a09;hp=e2b9badcfe46dfacb84aeb2eda708e9dd378dd59;hpb=e9b08e1bcff26d79a8d7f9b3b7d96abf2f2da844;p=chise%2Flibchise.git diff --git a/sample.c b/sample.c index e2b9bad..e65e39d 100644 --- a/sample.c +++ b/sample.c @@ -1,83 +1,176 @@ +#include +#include +#include #include -char db_dir[] = "/usr/local/lib/chise/char-db"; +CHISE_DS *ds; + +static int +test_name_map_func (CHISE_DS *ds, unsigned char *name) +{ + printf ("feature : %s\n", name); + return 0; +} + +static int +test_map_func (CHISE_Char_ID cid, CHISE_Feature_Table *db, + CHISE_Value *valdatum) +{ + unsigned char buf[256]; + unsigned char name[256]; + int ucs = -1; + + printf ("#x%08X ", cid); + + if ( chise_char_gets_feature_value + (cid, chise_ds_get_feature (ds, "=ucs"), + buf, sizeof (buf)) != NULL ) + { + ucs = atoi (buf); + printf ("[U-%08X]", ucs); + } + else if ( chise_char_gets_feature_value + (cid, chise_ds_get_feature (ds, "=>ucs"), + buf, sizeof (buf)) != NULL ) + { + ucs = atoi (buf); + printf ("(U-%08X)", ucs); + } + else + printf (" "); + + if ( chise_char_gets_feature_value + (cid, chise_ds_get_feature (ds, "name"), + name, sizeof (name)) != NULL ) + printf (" %s", name); + + if (chise_value_size (valdatum) < 256) + { + strncpy (buf, chise_value_data (valdatum), + chise_value_size (valdatum)); + buf[chise_value_size (valdatum)] = '\0'; + printf ("\t%s\n", buf); + } + else + printf ("\t%s\n", + chise_value_to_c_string (valdatum)); + return 0; +} + +static int +test_radical_func (CHISE_Char_ID cid, CHISE_Feature_Table *db, + CHISE_Value *valdatum) +{ + unsigned char buf[256]; + unsigned char name[256]; + int ucs = -1; + + if (chise_value_size (valdatum) < 256) + { + strncpy (buf, chise_value_data (valdatum), + chise_value_size (valdatum)); + buf[chise_value_size (valdatum)] = '\0'; + printf ("%s\t", buf); + } + else + printf ("%s\t", + chise_value_to_c_string (valdatum)); + + if (strcmp (buf, "75") == 0) /* Tree */ + { + printf ("#x%08X ", cid); + if ( chise_char_gets_feature_value + (cid, chise_ds_get_feature (ds, "=ucs"), + buf, sizeof (buf)) != NULL ) + { + ucs = atoi (buf); + printf ("[U-%08X]", ucs); + } + else if ( chise_char_gets_feature_value + (cid, chise_ds_get_feature (ds, "=>ucs"), + buf, sizeof (buf)) != NULL ) + { + ucs = atoi (buf); + printf ("(U-%08X)", ucs); + } + else + printf (" "); + + printf ("\n"); + } + else + printf ("\n"); + return 0; +} int main (int argc, char* argv[]) { - CHISE_DS ds; - CHISE_Decoding_Table *dt_daikanwa; - CHISE_Feature_Table *ft_ideographic_structure; - int modemask; - int accessmask = 0; - DBTYPE real_subtype; - int status; +#if 0 + CHISE_CCS ccs_daikanwa; +#endif + CHISE_Feature ft_ideographic_structure; + CHISE_Feature ft_numeric_value; + CHISE_Feature ft_radicals; CHISE_Char_ID char_id; - CHISE_Value value; - + unsigned char buf[1024]; + + printf("chise_system_db_dir = %s\n", chise_system_db_dir); + /* open a data-source */ - status = chise_open_data_source (&ds, CHISE_DS_Berkeley_DB, db_dir); - if (status) + ds = CHISE_DS_open (CHISE_DS_Berkeley_DB, chise_system_db_dir, + 0 /* DB_HASH */, 0755 /* rwxr-xr-x */); + if (ds == NULL) { - chise_close_data_source (&ds); + printf ("Can't open data source\n"); return -1; } + printf("data source location = %s\n", chise_ds_location(ds)); + /* * get a character corresponding with Daikanwa number 364 */ - modemask = 0755; /* rwxr-xr-x */ - real_subtype = DB_HASH; - accessmask = DB_RDONLY; - +#if 1 + char_id = chise_ds_decode_char (ds, "=daikanwa", 364); +#else /* setup a decoding-table */ - status = chise_open_decoding_table (&dt_daikanwa, &ds, - "=daikanwa", - real_subtype, - accessmask, modemask); - if (status) + ccs_daikanwa + = chise_ds_get_ccs (ds, "=daikanwa"); + if (ccs_daikanwa == NULL) { - chise_close_decoding_table (dt_daikanwa); - chise_close_data_source (&ds); + printf ("Can't open CCS =daikanwa\n"); + CHISE_DS_close (ds); return -1; } /* get a character from the decoding-table */ - char_id = chise_dt_get_char (dt_daikanwa, 364); - - /* close the decoding-table */ - chise_close_decoding_table (dt_daikanwa); + char_id = chise_ccs_decode (ccs_daikanwa, 364); +#endif - - /* - * get a ideographic-structure feature of the character - */ - - /* setup a feature-table */ - status = chise_open_feature_table (&ft_ideographic_structure, &ds, - "ideographic-structure", - real_subtype, accessmask, modemask); - if (status) - { - chise_close_feature_table (ft_ideographic_structure); - chise_close_data_source (&ds); - return -1; - } - /* get a feature-value of the character */ - status = chise_ft_get_value (ft_ideographic_structure, char_id, &value); - - if (!status) - printf ("#x%X => %s\n", char_id, chise_value_to_c_string(&value)); + ft_ideographic_structure + = chise_ds_get_feature (ds, "ideographic-structure"); + if (chise_char_gets_feature_value + (char_id, ft_ideographic_structure, buf, sizeof (buf)) != NULL) + printf ("#x%X => %s\n", char_id, buf); else - printf ("#x%X (%d)\n", char_id, status); + printf ("#x%X\n", char_id); - /* close the feature-table */ - chise_close_feature_table (ft_ideographic_structure); + chise_ds_foreach_char_feature_name (ds, &test_name_map_func); + ft_radicals = chise_ds_get_feature (ds, "ideographic-radical"); + chise_feature_foreach_char_with_value (ft_radicals, &test_radical_func); + + ft_numeric_value = chise_ds_get_feature (ds, "numeric-value"); + chise_feature_foreach_char_with_value (ft_numeric_value, &test_map_func); + chise_feature_foreach_char_with_value + (ft_ideographic_structure, &test_map_func); /* close the data-source */ - chise_close_data_source (&ds); + CHISE_DS_close (ds); + + return 0; }