void NJDNode_sprint(NJDNode * node, char *buff, const char *split_code) { sprintf(buff, "%s%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%d/%d,%s,%d%s", buff, NJDNode_get_string(node), NJDNode_get_pos(node), NJDNode_get_pos_group1(node), NJDNode_get_pos_group2(node), NJDNode_get_pos_group3(node), NJDNode_get_ctype(node), NJDNode_get_cform(node), NJDNode_get_orig(node), NJDNode_get_read(node), NJDNode_get_pron(node), NJDNode_get_acc(node), NJDNode_get_mora_size(node), NJDNode_get_chain_rule(node), NJDNode_get_chain_flag(node), split_code); }
void NJDNode_fprint(NJDNode * node, FILE * fp) { fprintf(fp, "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%d/%d,%s,%d\n", NJDNode_get_string(node), NJDNode_get_pos(node), NJDNode_get_pos_group1(node), NJDNode_get_pos_group2(node), NJDNode_get_pos_group3(node), NJDNode_get_ctype(node), NJDNode_get_cform(node), NJDNode_get_orig(node), NJDNode_get_read(node), NJDNode_get_pron(node), NJDNode_get_acc(node), NJDNode_get_mora_size(node), NJDNode_get_chain_rule(node), NJDNode_get_chain_flag(node)); }
static int get_digit(NJDNode * node, int convert_flag) { int i; if (strcmp(NJDNode_get_string(node), "*") == 0) return -1; if (strcmp(NJDNode_get_pos_group1(node), NJD_SET_DIGIT_KAZU) == 0) for (i = 0; njd_set_digit_rule_numeral_list1[i] != NULL; i += 3) if (strcmp(njd_set_digit_rule_numeral_list1[i], NJDNode_get_string(node)) == 0) { if (convert_flag == 1) { NJDNode_set_string(node, (char *) njd_set_digit_rule_numeral_list1[i + 2]); NJDNode_set_orig(node, (char *) njd_set_digit_rule_numeral_list1[i + 2]); } return atoi(njd_set_digit_rule_numeral_list1[i + 1]); } return -1; }
void njd_set_pronunciation(NJD * njd) { NJDNode *node; const char *str; int i, j = 0; int pos; int len; for (node = njd->head; node != NULL; node = node->next) { if (NJDNode_get_mora_size(node) == 0) { NJDNode_set_read(node, NULL); NJDNode_set_pron(node, NULL); if (strcmp(NJDNode_get_pos(node), NJD_SET_PRONUNCIATION_KIGOU) == 0 || strcmp(NJDNode_get_pos_group1(node), NJD_SET_PRONUNCIATION_KAZU) == 0) { /* for symbol */ for (i = 0; njd_set_pronunciation_symbol_list[i] != NULL; i += 2) if (strcmp(NJDNode_get_string(node), njd_set_pronunciation_symbol_list[i]) == 0) { NJDNode_set_read(node, (char *) njd_set_pronunciation_symbol_list[i + 1]); NJDNode_set_pron(node, (char *) njd_set_pronunciation_symbol_list[i + 1]); break; } } else if (strcmp(NJDNode_get_pron(node), "*") == 0) { /* for others */ str = NJDNode_get_string(node); len = strlen(str); for (pos = 0; pos < len;) { for (i = 0, j = 0; njd_set_pronunciation_list[i] != NULL; i += 3) { j = strtopcmp(&str[pos], njd_set_pronunciation_list[i]); if (j > 0) break; } if (j > 0) { pos += j; NJDNode_add_read(node, (char *) njd_set_pronunciation_list[i + 1]); NJDNode_add_pron(node, (char *) njd_set_pronunciation_list[i + 1]); NJDNode_add_mora_size(node, atoi(njd_set_pronunciation_list[i + 2])); } else { pos++; } } } } } NJD_remove_silent_node(njd); for (node = njd->head; node != NULL; node = node->next) { if (node->next != NULL && strcmp(NJDNode_get_pron(node->next), NJD_SET_PRONUNCIATION_U) == 0 && strcmp(NJDNode_get_pos(node->next), NJD_SET_PRONUNCIATION_JODOUSHI) == 0 && (strcmp(NJDNode_get_pos(node), NJD_SET_PRONUNCIATION_DOUSHI) == 0 || strcmp(NJDNode_get_pos(node), NJD_SET_PRONUNCIATION_JODOUSHI) == 0) && NJDNode_get_mora_size(node) > 0) { NJDNode_set_pron(node->next, NJD_SET_PRONUNCIATION_CHOUON); } if (node->next != NULL && strcmp(NJDNode_get_pos(node), NJD_SET_PRONUNCIATION_JODOUSHI) == 0 && strcmp(NJDNode_get_string(node->next), NJD_SET_PRONUNCIATION_QUESTION) == 0) { if (strcmp(NJDNode_get_string(node), NJD_SET_PRONUNCIATION_DESU_STR) == 0) NJDNode_set_pron(node, NJD_SET_PRONUNCIATION_DESU_PRON); else if (strcmp(NJDNode_get_string(node), NJD_SET_PRONUNCIATION_MASU_STR) == 0) NJDNode_set_pron(node, NJD_SET_PRONUNCIATION_MASU_PRON); } } }
static int get_digit_sequence_score(NJDNode * start, NJDNode * end) { const char *buff_pos_group1 = NULL; const char *buff_pos_group2 = NULL; const char *buff_string = NULL; int score = 0; if (start->prev) { buff_pos_group1 = NJDNode_get_pos_group1(start->prev); buff_pos_group2 = NJDNode_get_pos_group2(start->prev); buff_string = NJDNode_get_string(start->prev); if (strcmp(buff_pos_group1, NJD_SET_DIGIT_SUUSETSUZOKU) == 0) /* prev pos_group1 */ score += 2; else if (strcmp(buff_pos_group1, NJD_SET_DIGIT_KAZU) == 0) { if (buff_string != NULL && (strcmp(buff_string, NJD_SET_DIGIT_TEN1) == 0 || strcmp(buff_string, NJD_SET_DIGIT_TEN2) == 0)) score -= 3; } if (strcmp(buff_pos_group2, NJD_SET_DIGIT_JOSUUSHI) == 0 || strcmp(buff_pos_group1, NJD_SET_DIGIT_FUKUSHIKANOU) == 0) /* prev pos_group1 and pos_group2 */ score += 1; if (buff_string != NULL) { if (strcmp(buff_string, NJD_SET_DIGIT_HAIHUN1) == 0) /* prev string */ score -= 2; else if (strcmp(buff_string, NJD_SET_DIGIT_HAIHUN2) == 0) score -= 2; else if (strcmp(buff_string, NJD_SET_DIGIT_HAIHUN3) == 0) score -= 2; else if (strcmp(buff_string, NJD_SET_DIGIT_KAKKO1) == 0) score -= 2; else if (strcmp(buff_string, NJD_SET_DIGIT_KAKKO2) == 0) score -= 2; else if (strcmp(buff_string, NJD_SET_DIGIT_BANGOU) == 0) score -= 2; } if (start->prev->prev) { buff_string = NJDNode_get_string(start->prev->prev); /* prev prev string */ if (strcmp(buff_string, NJD_SET_DIGIT_BANGOU) == 0) score -= 2; } } if (end->next) { buff_pos_group1 = NJDNode_get_pos_group1(end->next); buff_pos_group2 = NJDNode_get_pos_group2(end->next); /* next pos_group2 */ buff_string = NJDNode_get_string(end->next); /* next string */ if (strcmp(buff_pos_group2, NJD_SET_DIGIT_JOSUUSHI) == 0 || strcmp(buff_pos_group1, NJD_SET_DIGIT_FUKUSHIKANOU) == 0) score += 2; if (buff_string != NULL) { if (strcmp(buff_string, NJD_SET_DIGIT_HAIHUN1) == 0) score -= 2; else if (strcmp(buff_string, NJD_SET_DIGIT_HAIHUN2) == 0) score -= 2; else if (strcmp(buff_string, NJD_SET_DIGIT_HAIHUN3) == 0) score -= 2; else if (strcmp(buff_string, NJD_SET_DIGIT_KAKKO1) == 0) score -= 2; else if (strcmp(buff_string, NJD_SET_DIGIT_KAKKO2) == 0) score -= 2; else if (strcmp(buff_string, NJD_SET_DIGIT_BANGOU) == 0) score -= 2; else if (strcmp(buff_string, NJD_SET_DIGIT_TEN1) == 0) score += 4; else if (strcmp(buff_string, NJD_SET_DIGIT_TEN2) == 0) score += 4; } } return score; }
void njd_set_digit(NJD * njd) { int i, j; NJDNode *s = NULL; NJDNode *e = NULL; NJDNode *node; int find = 0; /* convert digit sequence */ for (node = njd->head; node != NULL; node = node->next) { if (find == 0 && strcmp(NJDNode_get_pos_group1(node), NJD_SET_DIGIT_KAZU) == 0) find = 1; if (get_digit(node, 1) >= 0) { if (s == NULL) s = node; if (node == njd->tail) e = node; } else { if (s != NULL) e = node->prev; } if (s != NULL && e != NULL) { convert_digit_sequence(s, e); s = e = NULL; } } if (find == 0) return; NJD_remove_silent_node(njd); if (njd->head == NULL) return; for (node = njd->head->next; node != NULL && node->next != NULL; node = node->next) { if (strcmp(NJDNode_get_string(node), "*") != 0 && strcmp(NJDNode_get_string(node->prev), "*") != 0 && (strcmp(NJDNode_get_string(node), NJD_SET_DIGIT_TEN1) == 0 || strcmp(NJDNode_get_string(node), NJD_SET_DIGIT_TEN2) == 0) && strcmp(NJDNode_get_pos_group1(node->prev), NJD_SET_DIGIT_KAZU) == 0 && strcmp(NJDNode_get_pos_group1(node->next), NJD_SET_DIGIT_KAZU) == 0) { NJDNode_load(node, NJD_SET_DIGIT_TEN_FEATURE); NJDNode_set_chain_flag(node, 1); if (strcmp(NJDNode_get_string(node->prev), NJD_SET_DIGIT_ZERO1) == 0 || strcmp(NJDNode_get_string(node->prev), NJD_SET_DIGIT_ZERO2) == 0) { NJDNode_set_pron(node->prev, NJD_SET_DIGIT_ZERO_BEFORE_DP); NJDNode_set_mora_size(node->prev, 2); } else if (strcmp(NJDNode_get_string(node->prev), NJD_SET_DIGIT_TWO) == 0) { NJDNode_set_pron(node->prev, NJD_SET_DIGIT_TWO_BEFORE_DP); NJDNode_set_mora_size(node->prev, 2); } else if (strcmp(NJDNode_get_string(node->prev), NJD_SET_DIGIT_FIVE) == 0) { NJDNode_set_pron(node->prev, NJD_SET_DIGIT_FIVE_BEFORE_DP); NJDNode_set_mora_size(node->prev, 2); } } } for (node = njd->head->next; node != NULL; node = node->next) { if (strcmp(NJDNode_get_pos_group1(node->prev), NJD_SET_DIGIT_KAZU) == 0) { if (strcmp(NJDNode_get_pos_group2(node), NJD_SET_DIGIT_JOSUUSHI) == 0 || strcmp(NJDNode_get_pos_group1(node), NJD_SET_DIGIT_FUKUSHIKANOU) == 0) { /* convert digit pron */ if (search_numerative_class(njd_set_digit_rule_numerative_class1b, node) == 1) convert_digit_pron(njd_set_digit_rule_conv_table1b, node->prev); else if (search_numerative_class(njd_set_digit_rule_numerative_class1c1, node) == 1) convert_digit_pron(njd_set_digit_rule_conv_table1c1, node->prev); else if (search_numerative_class(njd_set_digit_rule_numerative_class1c2, node) == 1) convert_digit_pron(njd_set_digit_rule_conv_table1c2, node->prev); else if (search_numerative_class(njd_set_digit_rule_numerative_class1d, node) == 1) convert_digit_pron(njd_set_digit_rule_conv_table1d, node->prev); else if (search_numerative_class(njd_set_digit_rule_numerative_class1e, node) == 1) convert_digit_pron(njd_set_digit_rule_conv_table1e, node->prev); else if (search_numerative_class(njd_set_digit_rule_numerative_class1f, node) == 1) convert_digit_pron(njd_set_digit_rule_conv_table1f, node->prev); else if (search_numerative_class(njd_set_digit_rule_numerative_class1g, node) == 1) convert_digit_pron(njd_set_digit_rule_conv_table1g, node->prev); else if (search_numerative_class(njd_set_digit_rule_numerative_class1h, node) == 1) convert_digit_pron(njd_set_digit_rule_conv_table1h, node->prev); else if (search_numerative_class(njd_set_digit_rule_numerative_class1i, node) == 1) convert_digit_pron(njd_set_digit_rule_conv_table1i, node->prev); else if (search_numerative_class(njd_set_digit_rule_numerative_class1j, node) == 1) convert_digit_pron(njd_set_digit_rule_conv_table1j, node->prev); else if (search_numerative_class(njd_set_digit_rule_numerative_class1k, node) == 1) convert_digit_pron(njd_set_digit_rule_conv_table1k, node->prev); /* convert numerative pron */ if (search_numerative_class(njd_set_digit_rule_numerative_class2b, node) == 1) convert_numerative_pron(njd_set_digit_rule_conv_table2b, node->prev, node); else if (search_numerative_class(njd_set_digit_rule_numerative_class2c, node) == 1) convert_numerative_pron(njd_set_digit_rule_conv_table2c, node->prev, node); else if (search_numerative_class(njd_set_digit_rule_numerative_class2d, node) == 1) convert_numerative_pron(njd_set_digit_rule_conv_table2d, node->prev, node); else if (search_numerative_class(njd_set_digit_rule_numerative_class2e, node) == 1) convert_numerative_pron(njd_set_digit_rule_conv_table2e, node->prev, node); else if (search_numerative_class(njd_set_digit_rule_numerative_class2f, node) == 1) convert_numerative_pron(njd_set_digit_rule_conv_table2f, node->prev, node); /* modify accent phrase */ NJDNode_set_chain_flag(node->prev, 0); NJDNode_set_chain_flag(node, 1); } } } for (node = njd->head->next; node != NULL; node = node->next) { if (strcmp(NJDNode_get_pos_group1(node->prev), NJD_SET_DIGIT_KAZU) == 0) { if (strcmp(NJDNode_get_pos_group1(node), NJD_SET_DIGIT_KAZU) == 0 && NJDNode_get_string(node->prev) != NULL && NJDNode_get_string(node) != NULL) { /* modify accent phrase */ find = 0; for (i = 0; njd_set_digit_rule_numeral_list4[i] != NULL; i++) { if (strcmp(NJDNode_get_string(node->prev), njd_set_digit_rule_numeral_list4[i]) == 0) { for (j = 0; njd_set_digit_rule_numeral_list5[j] != NULL; j++) { if (strcmp(NJDNode_get_string(node), njd_set_digit_rule_numeral_list5[j]) == 0) { NJDNode_set_chain_flag(node->prev, 0); NJDNode_set_chain_flag(node, 1); find = 1; break; } } break; } } if (find == 0) { for (i = 0; njd_set_digit_rule_numeral_list5[i] != NULL; i++) { if (strcmp(NJDNode_get_string(node->prev), njd_set_digit_rule_numeral_list5[i]) == 0) { for (j = 0; njd_set_digit_rule_numeral_list4[j] != NULL; j++) { if (strcmp(NJDNode_get_string(node), njd_set_digit_rule_numeral_list4[j]) == 0) { NJDNode_set_chain_flag(node, 0); break; } } break; } } } } if (search_numerative_class(njd_set_digit_rule_numeral_list8, node) == 1) convert_digit_pron(njd_set_digit_rule_numeral_list9, node->prev); if (search_numerative_class(njd_set_digit_rule_numeral_list10, node) == 1) convert_digit_pron(njd_set_digit_rule_numeral_list11, node->prev); if (search_numerative_class(njd_set_digit_rule_numeral_list6, node) == 1) convert_numerative_pron(njd_set_digit_rule_numeral_list7, node->prev, node); } } for (node = njd->head; node != NULL; node = node->next) { if (node->next != NULL && strcmp(NJDNode_get_string(node->next), "*") != 0 && strcmp(NJDNode_get_pos_group1(node), NJD_SET_DIGIT_KAZU) == 0 && (node->prev == NULL || strcmp(NJDNode_get_pos_group1(node->prev), NJD_SET_DIGIT_KAZU) != 0) && (strcmp(NJDNode_get_pos_group2(node->next), NJD_SET_DIGIT_JOSUUSHI) == 0 || strcmp(NJDNode_get_pos_group1(node->next), NJD_SET_DIGIT_FUKUSHIKANOU) == 0)) { /* convert class3 */ for (i = 0; njd_set_digit_rule_numerative_class3[i] != NULL; i += 2) { if (strcmp(NJDNode_get_string(node->next), njd_set_digit_rule_numerative_class3[i]) == 0 && strcmp(NJDNode_get_read(node->next), njd_set_digit_rule_numerative_class3[i + 1]) == 0) { for (j = 0; njd_set_digit_rule_conv_table3[j] != NULL; j += 4) { if (strcmp(NJDNode_get_string(node), njd_set_digit_rule_conv_table3[j]) == 0) { NJDNode_set_read(node, (char *) njd_set_digit_rule_conv_table3[j + 1]); NJDNode_set_pron(node, (char *) njd_set_digit_rule_conv_table3[j + 1]); NJDNode_set_acc(node, atoi(njd_set_digit_rule_conv_table3[j + 2])); NJDNode_set_mora_size(node, atoi(njd_set_digit_rule_conv_table3[j + 3])); break; } } break; } } /* person */ if (strcmp(NJDNode_get_string(node->next), NJD_SET_DIGIT_NIN) == 0) { for (i = 0; njd_set_digit_rule_conv_table4[i] != NULL; i += 2) { if (strcmp(NJDNode_get_string(node), njd_set_digit_rule_conv_table4[i]) == 0) { NJDNode_load(node, (char *) njd_set_digit_rule_conv_table4[i + 1]); NJDNode_set_pron(node->next, NULL); break; } } } /* the day of month */ if (strcmp(NJDNode_get_string(node->next), NJD_SET_DIGIT_NICHI) == 0 && strcmp(NJDNode_get_string(node), "*") != 0) { if (node->prev != NULL && strstr(NJDNode_get_string(node->prev), NJD_SET_DIGIT_GATSU) != NULL && strcmp(NJDNode_get_string(node), NJD_SET_DIGIT_ONE) == 0) { NJDNode_load(node, NJD_SET_DIGIT_TSUITACHI); NJDNode_set_pron(node->next, NULL); } else { for (i = 0; njd_set_digit_rule_conv_table5[i] != NULL; i += 2) { if (strcmp(NJDNode_get_string(node), njd_set_digit_rule_conv_table5[i]) == 0) { NJDNode_load(node, (char *) njd_set_digit_rule_conv_table5[i + 1]); NJDNode_set_pron(node->next, NULL); break; } } } } else if (strcmp(NJDNode_get_string(node->next), NJD_SET_DIGIT_NICHIKAN) == 0) { for (i = 0; njd_set_digit_rule_conv_table6[i] != NULL; i += 2) { if (strcmp(NJDNode_get_string(node), njd_set_digit_rule_conv_table6[i]) == 0) { NJDNode_load(node, (char *) njd_set_digit_rule_conv_table6[i + 1]); NJDNode_set_pron(node->next, NULL); break; } } } } } for (node = njd->head; node != NULL; node = node->next) { if ((node->prev == NULL || strcmp(NJDNode_get_pos_group1(node->prev), NJD_SET_DIGIT_KAZU) != 0) && node->next != NULL && node->next->next != NULL) { if (strcmp(NJDNode_get_string(node), NJD_SET_DIGIT_TEN) == 0 && strcmp(NJDNode_get_string(node->next), NJD_SET_DIGIT_FOUR) == 0) { if (strcmp(NJDNode_get_string(node->next->next), NJD_SET_DIGIT_NICHI) == 0) { NJDNode_load(node, NJD_SET_DIGIT_JUYOKKA); NJDNode_set_pron(node->next, NULL); NJDNode_set_pron(node->next->next, NULL); } else if (strcmp(NJDNode_get_string(node->next->next), NJD_SET_DIGIT_NICHIKAN) == 0) { NJDNode_load(node, NJD_SET_DIGIT_JUYOKKAKAN); NJDNode_set_pron(node->next, NULL); NJDNode_set_pron(node->next->next, NULL); } } else if (strcmp(NJDNode_get_string(node), NJD_SET_DIGIT_TWO) == 0 && strcmp(NJDNode_get_string(node->next), NJD_SET_DIGIT_TEN) == 0) { if (strcmp(NJDNode_get_string(node->next->next), NJD_SET_DIGIT_NICHI) == 0) { NJDNode_load(node, NJD_SET_DITIT_HATSUKA); NJDNode_set_pron(node->next, NULL); NJDNode_set_pron(node->next->next, NULL); } else if (strcmp(NJDNode_get_string(node->next->next), NJD_SET_DIGIT_NICHIKAN) == 0) { NJDNode_load(node, NJD_SET_DIGIT_HATSUKAKAN); NJDNode_set_pron(node->next, NULL); NJDNode_set_pron(node->next->next, NULL); } else if (strcmp(NJDNode_get_string(node->next->next), NJD_SET_DIGIT_FOUR) == 0 && node->next->next->next != NULL) { if (strcmp(NJDNode_get_string(node->next->next->next), NJD_SET_DIGIT_NICHI) == 0) { NJDNode_load(node, NJD_SET_DIGIT_NIJU); NJDNode_load(node->next, NJD_SET_DITIT_YOKKA); NJDNode_set_pron(node->next->next, NULL); NJDNode_set_pron(node->next->next->next, NULL); } else if (strcmp(NJDNode_get_string(node->next->next->next), NJD_SET_DIGIT_NICHIKAN) == 0) { NJDNode_load(node, NJD_SET_DIGIT_NIJU); NJDNode_load(node->next, NJD_SET_DIGIT_YOKKAKAN); NJDNode_set_pron(node->next->next, NULL); NJDNode_set_pron(node->next->next->next, NULL); } } } } } NJD_remove_silent_node(njd); if (njd->head == NULL) return; }
void njd_set_accent_type(NJD * njd) { NJDNode *node; NJDNode *top_node = NULL; char rule[MAXBUFLEN]; int add_type = 0; int mora_size = 0; if (njd == NULL || njd->head == NULL) return; for (node = njd->head; node != NULL; node = node->next) { if (NJDNode_get_string(node) == NULL) continue; if ((node == njd->head) || (NJDNode_get_chain_flag(node) != 1)) { /* store the top node */ top_node = node; mora_size = 0; } else if (node->prev != NULL && NJDNode_get_chain_flag(node) == 1) { /* get accent change type */ get_rule(NJDNode_get_chain_rule(node), NJDNode_get_pos(node->prev), rule, &add_type); /* change accent type */ if (strcmp(rule, "*") == 0) { /* no chnage */ } else if (strcmp(rule, "F1") == 0) { /* for ancillary word */ } else if (strcmp(rule, "F2") == 0) { if (NJDNode_get_acc(top_node) == 0) NJDNode_set_acc(top_node, mora_size + add_type); } else if (strcmp(rule, "F3") == 0) { if (NJDNode_get_acc(top_node) != 0) NJDNode_set_acc(top_node, mora_size + add_type); } else if (strcmp(rule, "F4") == 0) { NJDNode_set_acc(top_node, mora_size + add_type); } else if (strcmp(rule, "F5") == 0) { NJDNode_set_acc(top_node, 0); } else if (strcmp(rule, "C1") == 0) { /* for noun */ NJDNode_set_acc(top_node, mora_size + NJDNode_get_acc(node)); } else if (strcmp(rule, "C2") == 0) { NJDNode_set_acc(top_node, mora_size + 1); } else if (strcmp(rule, "C3") == 0) { NJDNode_set_acc(top_node, mora_size); } else if (strcmp(rule, "C4") == 0) { NJDNode_set_acc(top_node, 0); } else if (strcmp(rule, "C5") == 0) { } else if (strcmp(rule, "P1") == 0) { /* for postfix */ if (NJDNode_get_acc(node) == 0) NJDNode_set_acc(top_node, 0); else NJDNode_set_acc(top_node, mora_size + NJDNode_get_acc(node)); } else if (strcmp(rule, "P2") == 0) { if (NJDNode_get_acc(node) == 0) NJDNode_set_acc(top_node, mora_size + 1); else NJDNode_set_acc(top_node, mora_size + NJDNode_get_acc(node)); } else if (strcmp(rule, "P6") == 0) { NJDNode_set_acc(top_node, 0); } else if (strcmp(rule, "P14") == 0) { if (NJDNode_get_acc(node) != 0) NJDNode_set_acc(top_node, mora_size + NJDNode_get_acc(node)); } } /* change accent type for digit */ if (node->prev != NULL && NJDNode_get_chain_flag(node) == 1 && strcmp(NJDNode_get_pos_group1(node->prev), NJD_SET_ACCENT_TYPE_KAZU) == 0 && strcmp(NJDNode_get_pos_group1(node), NJD_SET_ACCENT_TYPE_KAZU) == 0) { if (strcmp(NJDNode_get_string(node), NJD_SET_ACCENT_TYPE_JYUU) == 0) { /* 10^1 */ if (NJDNode_get_string(node->prev) != NULL && (strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_SAN) == 0 || strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_YON) == 0 || strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_KYUU) == 0 || strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_NAN) == 0 || strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_SUU) == 0)) { NJDNode_set_acc(node->prev, 1); } else { NJDNode_set_acc(node->prev, 1); } if (NJDNode_get_string(node->prev) != NULL && (strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_GO) == 0 || strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_ROKU) == 0 || strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_HACHI) == 0)) { if (node->next != NULL && NJDNode_get_string(node->next) != NULL && (strcmp(NJDNode_get_string(node->next), NJD_SET_ACCENT_TYPE_ICHI) == 0 || strcmp(NJDNode_get_string(node->next), NJD_SET_ACCENT_TYPE_NI) == 0 || strcmp(NJDNode_get_string(node->next), NJD_SET_ACCENT_TYPE_SAN) == 0 || strcmp(NJDNode_get_string(node->next), NJD_SET_ACCENT_TYPE_YON) == 0 || strcmp(NJDNode_get_string(node->next), NJD_SET_ACCENT_TYPE_GO) == 0 || strcmp(NJDNode_get_string(node->next), NJD_SET_ACCENT_TYPE_ROKU) == 0 || strcmp(NJDNode_get_string(node->next), NJD_SET_ACCENT_TYPE_NANA) == 0 || strcmp(NJDNode_get_string(node->next), NJD_SET_ACCENT_TYPE_HACHI) == 0 || strcmp(NJDNode_get_string(node->next), NJD_SET_ACCENT_TYPE_KYUU) == 0)) NJDNode_set_acc(node->prev, 0); } } else if (strcmp(NJDNode_get_string(node), NJD_SET_ACCENT_TYPE_HYAKU) == 0) { /* 10^2 */ if (NJDNode_get_string(node->prev) != NULL && strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_NANA) == 0) { NJDNode_set_acc(node->prev, 2); } else if (NJDNode_get_string(node->prev) != NULL && (strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_SAN) == 0 || strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_YON) == 0 || strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_KYUU) == 0 || strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_NAN) == 0)) { NJDNode_set_acc(node->prev, 1); } else { NJDNode_set_acc(node->prev, NJDNode_get_mora_size(node->prev) + NJDNode_get_mora_size(node)); } } else if (strcmp(NJDNode_get_string(node), NJD_SET_ACCENT_TYPE_SEN) == 0) { /* 10^3 */ NJDNode_set_acc(node->prev, NJDNode_get_mora_size(node->prev) + 1); } else if (strcmp(NJDNode_get_string(node), NJD_SET_ACCENT_TYPE_MAN) == 0) { /* 10^4 */ NJDNode_set_acc(node->prev, NJDNode_get_mora_size(node->prev) + 1); } else if (strcmp(NJDNode_get_string(node), NJD_SET_ACCENT_TYPE_OKU) == 0) { /* 10^8 */ if (NJDNode_get_string(node->prev) != NULL && (strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_ICHI) == 0 || strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_ROKU) == 0 || strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_NANA) == 0 || strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_HACHI) == 0 || strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_IKU) == 0)) { NJDNode_set_acc(node->prev, 2); } else { NJDNode_set_acc(node->prev, 1); } } else if (strcmp(NJDNode_get_string(node), NJD_SET_ACCENT_TYPE_CHOU) == 0) { /* 10^12 */ if (NJDNode_get_string(node->prev) != NULL && (strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_ROKU) == 0 || strcmp(NJDNode_get_string(node->prev), NJD_SET_ACCENT_TYPE_NANA) == 0)) { NJDNode_set_acc(node->prev, 2); } else { NJDNode_set_acc(node->prev, 1); } } } if (strcmp(NJDNode_get_string(node), NJD_SET_ACCENT_TYPE_JYUU) == 0 && NJDNode_get_chain_flag(node) != 1 && node->next != NULL && strcmp(NJDNode_get_pos_group1(node->next), NJD_SET_ACCENT_TYPE_KAZU) == 0) { NJDNode_set_acc(node, 0); } mora_size += NJDNode_get_mora_size(node); } }