X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=proxy%2Ftmsocket.cpp;fp=proxy%2Ftmsocket.cpp;h=e48c657be86fefdaab86ff7936f2696dda04a063;hb=e7fbf539a151cef4fb5c5103dcde69d8f42f6ff4;hp=b2850ae19fde667e42d5e454a407a0c2cf7fb205;hpb=fc5c863e3c8872841801073eb5afe2918ac327e6;p=wordring-tm%2Fwordring-tm.git diff --git a/proxy/tmsocket.cpp b/proxy/tmsocket.cpp index b2850ae..e48c657 100644 --- a/proxy/tmsocket.cpp +++ b/proxy/tmsocket.cpp @@ -1,5 +1,6 @@ #include "tmsocket.h" #include "tmeditorwidget.h" +#include "tmservice.h" #include "settings.h" #include "html.h" @@ -113,6 +114,67 @@ bool TM::TextConverter::is_white_space(QChar const &ch) return false; } +// TextSentence --------------------------------------------------------------- + +TM::TextSentence::TextSentence(Text::pointer source_sentence) + : m_source_sentence(source_sentence) +{ +} + +Text::pointer TM::TextSentence::source_sentence() { return m_source_sentence; } + +Text::pointer TM::TextSentence::target_sentence() { return m_target_sentence; } + +void TM::TextSentence::set_terget_sentence(Text::pointer target_sentence) +{ + m_target_sentence = target_sentence; +} + +QJsonArray TM::TextSentence::link_data() { return m_link_data; } + +void TM::TextSentence::set_link_data(QJsonArray json) { m_link_data = json; } + +TM::TextSentence::pointer TM::TextSentence::create(Text::pointer source_sentence) +{ + return pointer(new TextSentence(source_sentence)); +} + +// TextSegment ---------------------------------------------------------------- + +TM::TextSegment::TextSegment( + Service *service, int scode, int segment_id, QString source) + : m_segment_id(segment_id) + , m_document(source.toUtf8()) +{ + HtmlNode body = m_document.first("html").first("body"); + TextConverter tc; + m_text = tc.to_text(HtmlRange(body, body)); + + Text::pointer sentences = service->divide_into_sentences(scode, m_text->to_string()); + for(Text::pointer s = sentences->begin(); s; s = s->next()) // s: sentence + { + Text::pointer words = service->divide_into_words(scode, s); + m_sentences.append(TextSentence::create(words)); + } +} + +int TM::TextSegment::segment_id() const { return m_segment_id; } + +TM::TextSentence::pointer TM::TextSegment::at(int index) +{ + return m_sentences.at(index); +} + +TM::TextSegment::iterator TM::TextSegment::begin() { return m_sentences.begin(); } + +TM::TextSegment::iterator TM::TextSegment::end() { return m_sentences.end(); } + +TM::TextSegment::pointer TM::TextSegment::create( + Service *service, int scode, int segment_id, QString source) +{ + return pointer(new TextSegment(service, scode, segment_id, source)); +} + // SocketConnection ----------------------------------------------------------- TM::SocketConnection::SocketConnection(Settings *settings, Service *service, @@ -154,6 +216,16 @@ void TM::SocketConnection::send_message(QJsonObject const &json) send_message(doc.toJson().data()); } +void TM::SocketConnection::save_sentence(int segment_id, int index, + Text::pointer target_sentence, QJsonArray link) +{ + segment_map_iterator it = m_segments.find(segment_id); + assert(it != m_segments.end()); + TextSentence::pointer sentence = it.value()->at(index); + sentence->set_terget_sentence(target_sentence); + sentence->set_link_data(link); +} + void TM::SocketConnection::changeEditMode(bool edit_mode) { set_edit_mode(edit_mode); @@ -176,22 +248,22 @@ void TM::SocketConnection::set_edit_mode(bool edit_mode) */ void TM::SocketConnection::do_edit(QJsonObject const &json) { - m_document.set_content(json["source"].toString().toUtf8()); - HtmlNode body = m_document.first("html").first("body"); + int scode = m_editor_widget->source_language(); - TextConverter tc; - m_text = tc.to_text(HtmlRange(body, body)); - m_editor_widget->set_string(m_text->to_string(), json["target"].toString()); - //emit editCmd(json["id"].toInt(), m_document.to_string()); - /* - QJsonObject reply; - reply["cmd"] = "doedit"; - reply["id"] = json["id"].toString(); - reply["html"] = "test2"; - QJsonDocument doc; - doc.setObject(reply); - send_message(doc.toJson().data()); - */ + assert(json.contains("segment_id")); + int segment_id = json["segment_id"].toString().toInt(); + + segment_map_iterator it = m_segments.find(segment_id); + if(it == m_segments.end()) + { + assert(json.contains("source")); + QString source = json["source"].toString(); + m_current_segment = TextSegment::create(m_service, scode, segment_id, source); + m_segments.insert(segment_id, m_current_segment); + } + else m_current_segment = it.value(); + + m_editor_widget->set_segment(m_current_segment); } /*! @@ -205,7 +277,7 @@ void TM::SocketConnection::do_focus(QJsonObject const &json) m_edit_mode = edit_mode; m_editor_widget->set_edit_mode(edit_mode); - if(m_text) m_editor_widget->set_string(m_text->to_string(), ""); + if(m_current_segment) m_editor_widget->set_segment(m_current_segment); } void TM::SocketConnection::do_blur(QJsonObject const &)