OSDN Git Service

Editorのデータ構造変更前、一時保存。
[wordring-tm/wordring-tm.git] / proxy / tmsocket.cpp
index b2850ae..e48c657 100644 (file)
@@ -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 &)