void Conversion::select_segment (int segment_id) { if (!is_converting ()) return; if (segment_id < 0) { m_cur_segment = -1; m_anthy.reset_cursor(0); return; } struct anthy_conv_stat conv_stat; anthy_get_stat (m_anthy_context, &conv_stat); int real_segment_id = segment_id + m_start_id; if (segment_id >= 0 && real_segment_id < conv_stat.nr_segment) { if (m_cur_segment != segment_id) { if (segment_id < m_segments.size()) { m_anthy.reset_cursor(m_segments[segment_id].get_candidate_id()); } m_cur_segment = segment_id; } } }
// // segments of the converted sentence // int Conversion::get_nr_segments (void) { if (!is_converting ()) return 0; struct anthy_conv_stat conv_stat; anthy_get_stat (m_anthy_context, &conv_stat); return conv_stat.nr_segment - m_start_id; }
void Conversion::commit (int segment_id, bool learn) { if (!is_converting ()) return; // learn for (unsigned int i = m_start_id; learn && i < m_segments.size () && (segment_id < 0 || (int) i <= segment_id); i++) { if (m_segments[i].get_candidate_id () >= 0) anthy_commit_segment (m_anthy_context, i, m_segments[i].get_candidate_id ()); } clear (segment_id); }
void Conversion::resize_segment (int relative_size, int segment_id) { if (is_predicting ()) return; if (!is_converting ()) return; struct anthy_conv_stat conv_stat; anthy_get_stat (m_anthy_context, &conv_stat); int real_segment_id; if (segment_id < 0) { if (m_cur_segment < 0) return; else segment_id = m_cur_segment; real_segment_id = segment_id + m_start_id; } else { real_segment_id = segment_id + m_start_id; if (m_cur_segment > segment_id) m_cur_segment = segment_id; } if (real_segment_id >= conv_stat.nr_segment) return; // do resize anthy_resize_segment (m_anthy_context, real_segment_id, relative_size); // reset candidates of trailing segments anthy_get_stat (m_anthy_context, &conv_stat); ConversionSegments::iterator start_iter = m_segments.begin(); ConversionSegments::iterator end_iter = m_segments.end(); m_segments.erase (start_iter + segment_id, end_iter); for (int i = real_segment_id; i < conv_stat.nr_segment; i++) { struct anthy_segment_stat seg_stat; anthy_get_segment_stat (m_anthy_context, i, &seg_stat); m_segments.push_back ( ConversionSegment (get_segment_string (i - m_start_id, 0), 0, seg_stat.seg_len)); } }
main() { P1DIR = BIT0 | BIT6; init_adc(); while(1) { start_converting(); while( is_converting() ); if( ADC10MEM > 768 ) P1OUT = BIT0 | BIT6; else if( ADC10MEM > 512 ) P1OUT = BIT6; else if( ADC10MEM > 256 ) P1OUT = BIT0; else P1OUT = 0; delay(); } }
// // starting and finishing // void Conversion::convert (std::string source, CandidateType ctype, bool single_segment) { if (is_converting ()) return; clear (); std::string dest; // convert struct anthy_conv_stat conv_stat; anthy_get_stat (m_anthy_context, &conv_stat); if (conv_stat.nr_segment <= 0) { dest = source; anthy_set_string (m_anthy_context, dest.c_str ()); } if (single_segment) join_all_segments (); // get information about conversion string anthy_get_stat (m_anthy_context, &conv_stat); if (conv_stat.nr_segment <= 0) return; // select first segment m_cur_segment = 0; // create segments m_segments.clear(); for (int i = m_start_id; i < conv_stat.nr_segment; i++) { struct anthy_segment_stat seg_stat; anthy_get_segment_stat (m_anthy_context, i, &seg_stat); m_segments.push_back ( ConversionSegment (get_segment_string (i, ctype), ctype, seg_stat.seg_len)); } }
void main() { int i=0; init_adc(); P1DIR=0x41; P1OUT=0x00; while(1) { start_conversion(); while( is_converting() ); if(ADC10MEM >=0 && ADC10MEM <= 255.75) P1OUT=0x00; else if (ADC10MEM>=256.75 && ADC10MEM <=511.5) P1OUT=0x01; else if(ADC10MEM >=512.5 && ADC10MEM <=767.25) P1OUT=0x40; else P1OUT=0x41; for(i=0;i<32000;i++); } }
int Conversion::get_segment_size (int segment_id) { if (!is_converting ()) return -1; struct anthy_conv_stat conv_stat; anthy_get_stat (m_anthy_context, &conv_stat); if (segment_id < 0) { if (m_cur_segment < 0) return -1; else segment_id = m_cur_segment; } int real_segment_id = segment_id + m_start_id; if (real_segment_id >= conv_stat.nr_segment) return -1; struct anthy_segment_stat seg_stat; anthy_get_segment_stat (m_anthy_context, real_segment_id, &seg_stat); return seg_stat.seg_len; }