static void convert_digit_sequence(NJDNode * start, NJDNode * end) { NJDNode *node; NJDNode *newnode; int digit; int place = 0; int index; int size = 0; int have = 0; for (node = start; node != end->next; node = node->next) size++; if (size <= 1) return; if (get_digit_sequence_score(start, end) < 0) { for (node = start, size = 0; node != end->next; node = node->next) { if (strcmp(NJDNode_get_string(node), NJD_SET_DIGIT_ZERO1) == 0 || strcmp(NJDNode_get_string(node), NJD_SET_DIGIT_ZERO2) == 0) { NJDNode_set_pron(node, NJD_SET_DIGIT_ZERO_AFTER_DP); NJDNode_set_mora_size(node, 2); } else if (strcmp(NJDNode_get_string(node), NJD_SET_DIGIT_TWO) == 0) { NJDNode_set_pron(node, NJD_SET_DIGIT_TWO_AFTER_DP); NJDNode_set_mora_size(node, 2); } else if (strcmp(NJDNode_get_string(node), NJD_SET_DIGIT_FIVE) == 0) { NJDNode_set_pron(node, NJD_SET_DIGIT_FIVE_AFTER_DP); NJDNode_set_mora_size(node, 2); } NJDNode_set_chain_rule(node, NULL); if (size % 2 == 0) { NJDNode_set_chain_flag(node, 0); } else { NJDNode_set_chain_flag(node, 1); NJDNode_set_acc(node->prev, 3); } size++; } return; } index = size % 4; if (index == 0) index = 4; if (size > index) place = (size - index) / 4; index--; if (place > 17) return; for (node = start; node != end->next; node = node->next) { digit = get_digit(node, 0); if (index == 0) { if (digit == 0) { NJDNode_set_pron(node, NULL); NJDNode_set_acc(node, 0); NJDNode_set_mora_size(node, 0); } else { have = 1; } if (have == 1) { if (place > 0) { newnode = (NJDNode *) calloc(1, sizeof(NJDNode)); NJDNode_initialize(newnode); NJDNode_load(newnode, (char *) njd_set_digit_rule_numeral_list3[place]); node = NJDNode_insert(node, node->next, newnode); } have = 0; } place--; } else { if (digit <= 1) { NJDNode_set_pron(node, NULL); NJDNode_set_acc(node, 0); NJDNode_set_mora_size(node, 0); } if (digit > 0) { newnode = (NJDNode *) calloc(1, sizeof(NJDNode)); NJDNode_initialize(newnode); NJDNode_load(newnode, (char *) njd_set_digit_rule_numeral_list2[index]); node = NJDNode_insert(node, node->next, newnode); have = 1; } } index--; if (index < 0) index = 4 - 1; } }
static void convert_digit_sequence(NJDNode * start, NJDNode * end) { NJDNode *node; NJDNode *newnode; int digit; int place = 0; int index; int size = 0; int have = 0; if (get_digit_sequence_score(start, end) < 0) return; for (node = start; node != end->next; node = node->next) size++; if (size <= 1) return; index = size % 4; if (index == 0) index = 4; if (size > index) place = (size - index) / 4; index--; if (place > 17) return; for (node = start; node != end->next; node = node->next) { digit = get_digit(node, 0); if (index == 0) { if (digit == 0) { NJDNode_set_pron(node, NULL); NJDNode_set_acc(node, 0); NJDNode_set_mora_size(node, 0); } else { have = 1; } if (have == 1) { if (place > 0) { newnode = (NJDNode *) calloc(1, sizeof(NJDNode)); NJDNode_initialize(newnode); NJDNode_load(newnode, (char *) njd_set_digit_rule_numeral_list3[place]); node = NJDNode_insert(node, node->next, newnode); } have = 0; } place--; } else { if (digit <= 1) { NJDNode_set_pron(node, NULL); NJDNode_set_acc(node, 0); NJDNode_set_mora_size(node, 0); } if (digit > 0) { newnode = (NJDNode *) calloc(1, sizeof(NJDNode)); NJDNode_initialize(newnode); NJDNode_load(newnode, (char *) njd_set_digit_rule_numeral_list2[index]); node = NJDNode_insert(node, node->next, newnode); have = 1; } } index--; if (index < 0) index = 4 - 1; } }