OSDN Git Service

Editorのデータ構造変更前、一時保存。
[wordring-tm/wordring-tm.git] / proxy / tmtext.h
1 #ifndef TMTEXT_H
2 #define TMTEXT_H
3
4 #include "text.h"
5
6 #include <QString>
7 #include <QList>
8
9 #include <QJsonDocument>
10 #include <QJsonObject>
11 #include <QJsonArray>
12
13 #include <memory>
14
15 namespace TM
16 {
17
18 /*!
19  * \brief 単語間のリンクを表現するクラスです。
20  *
21  * 原単語と訳単語の多対多のリンクを表現します。
22  */
23 class WordLink
24 {
25 public:
26         typedef std::shared_ptr<WordLink> pointer;
27         typedef QList<Text::pointer> storage_type;
28
29 public:
30         enum : int { Source, Target, };
31
32 private:
33         WordLink();
34         WordLink(QJsonObject json);
35
36 public:
37         void clear();
38         void append(int place, Text::pointer word);
39         void remove(int place, Text::pointer word);
40
41         bool is_valid() const;
42         bool is_empty() const;
43         bool contains(int place, Text::pointer word);
44         int size(int place) const;
45
46         storage_type* sources();
47         storage_type* targets();
48
49         QJsonObject to_json() const;
50
51         QString debug_dump() const;
52
53         static pointer create();
54         static pointer create(QJsonObject json);
55
56 private:
57         storage_type m_sources;
58         storage_type m_targets;
59 };
60
61 /*!
62  * \brief 単語間のリンクを作成・保持するクラスです。
63  *
64  * 複数の単語間リンクを保持するコンテナとしての機能を持ちます。
65  * 現在編集中の単語間リンクを明示する機能があります。
66  *
67  * ある特定の単語間リンクを編集するには、start()を呼び出し編集を開始し、
68  * append()呼び出しによってリンクへ単語を追加し、
69  * commit()呼び出しによって編集を終了します。
70  */
71 class WordLinker
72 {
73 public:
74         typedef QList<WordLink::pointer> storage_type;
75         typedef storage_type::iterator iterator;
76         typedef storage_type::const_iterator const_iterator;
77
78 public:
79         void clear();
80
81         void start();
82         void commit();
83         void append(int place, Text::pointer word);
84         void remove(int place, Text::pointer word);
85         void toggle(int place, Text::pointer word);
86
87         WordLink::pointer current();
88
89         WordLink::pointer find(Text::pointer word);
90         WordLink::pointer find(int place, Text::pointer word);
91
92         int index_of(WordLink::pointer link) const;
93
94         iterator begin();
95         iterator end();
96
97         QJsonArray to_json_array() const;
98         void set_json_array(QJsonArray json);
99
100         QString debug_dump() const;
101
102 private:
103         WordLink::pointer m_current_link;
104         storage_type m_links;
105 };
106
107 } // namespace TM
108
109 #endif // TMTEXT_H