{
m_settings = settings;
+ QByteArray system = "wordring.Japanese.mecab";
QByteArray dic = m_settings->value("Japanese/mecabdic").toByteArray();
QByteArray rc("--rcfile=");
rc += dic + "/mecabrc";
dic.prepend("--dicdir=");
- char *arg[2] = { rc.data(), dic.data() };
- m_mecab_model = MeCab::Model::create(2, arg);
+ char *arg[3] = { system.data(), rc.data(), dic.data() };
+ m_mecab_model = MeCab::Model::create(3, arg);
if(!m_mecab_model) qFatal(MeCab::getLastError());
m_mecab_tagger = m_mecab_model->createTagger();
m_mecab_lattice = m_mecab_model->createLattice();
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
-<title>Welcome to wordring-tm.</title>
+<title>Wordring 翻訳メモリー</title>
<script type="text/javascript">
window.wordring = {
}
</script>
+<style type="text/css">
+
+body {
+ font-family: "ヒラギノ角ゴ ProN W3", "Hiragino Kaku Gothic ProN", "メイリオ", Meiryo, sans-serif;
+ color: #666666;
+ padding: 1em 2em 2em 2em;
+}
+
+a { color: #3b7960; }
+a:visited { color: #3b7960; }
+a:hover { color: #c85179; }
+
+img {
+ max-width: 100%;
+}
+h1 {
+
+}
+h2 {
+ font-weight: 100;
+ font-size: 1em;
+ background-color: #bed2c3;
+ margin-top: 1em;
+}
+hr {
+ height: 1px;
+ background-color: #bed2c3;
+ border: none;
+ color: #bed2c3;
+}
+</style>
</head>
<body>
+<h1>Wordring 翻訳メモリー</h1>
+
+<h2>以下のフォームにURLを入力して移動できます</h2>
<form name="url_form">
Enter URL:<input type="text" name="url_input"><input type="submit" value="Enter">
</form>
+
+<h2>以下のサイトで試してみてください</h2>
<ul>
<li><a id="sqlite" href="http://www.sqlite.org/">www.sqlite.org</a></li>
-<li><a id="qt" href="http://www.qt.io/">www.qt.io</a></li>
+<li><a id="qt" href="http://doc.qt.io/">doc.qt.io</a></li>
</ul>
+<p>
+リンクをクリックして移動してください。<br>
+いずれのサイトも文書をオープンソース・ライセンスで公開しています。
+(※いずれのサイトもサイトのデザインはオープンソースでありませんが、このプログラムは文章以外を共有しません。)
+</p>
+
+<h2>Wordring 翻訳メモリーのサイト</h2>
+<p><a href="http://wordring.net/">wordring.net</a></p>
+
+<h2>Wordring 翻訳メモリーの開発サイト</h2>
+<p><a href="http://osdn.jp">OSDN</a>で開発しています。</p>
+<ul>
+ <li><a href="http://osdn.jp/projects/wordring-tm/releases/">ダウンロード</a></li>
+ <li><a href="http://osdn.jp/projects/wordring-tm/howto/usage">使い方</a></li>
+ <li><a href="http://osdn.jp/projects/wordring-tm/">開発コミュニティ</a></li>
+</ul>
+
</body>
</html>
#include <QLinkedList>
#include <QFont>
#include <QDir>
+#include <QFile>
+
+#include <windows.h>
#include "debug.h"
+/*
+QFile s_debug_file;
+void debug_message(QtMsgType, QMessageLogContext const&, QString const &message)
+{
+ s_debug_file.write(message.toLocal8Bit().data());
+ s_debug_file.write("\r\n");
+ //fprintf(stdout, "%s\n", message.toLocal8Bit().data());
+}
+*/
int main(int argc, char *argv[])
{
SetDebugMemoryLeaks();
+/*
+ AllocConsole();
+ FILE* fp;
+ freopen_s(&fp, "CON","w",stdout);
+ freopen_s(&fp, "CON","r",stdin);
+*/
+/* s_debug_file.setFileName("wordring_log.txt");
+ s_debug_file.open(QIODevice::ReadWrite);
+
+ qInstallMessageHandler(debug_message);
+*/
+
QApplication a(argc, argv);
a.setOrganizationName("wordring");
// Language
#ifdef QT_DEBUG
settings.setValue(
- "Japanese/mecabdic", QString(PROXYSRCDIR) + "/../third-party/lib/ipadic");
+ "Japanese/mecabdic", "C:\\Users\\Kouichi\\Documents\\OSDN\\wordring-tm\\third-party\\lib\\ipadic");
#else
- if(!settings.contains("Japanese/mecabdic"))
+// if(!settings.contains("Japanese/mecabdic"))
{
QString mecabdic = app_path + "/ipadic";
QDir dir(mecabdic);
#ifdef QT_DEBUG
settings.setValue("ProxyHandler/jscode", QString(PROXYSRCDIR) + "/tm.js");
#else
- if(!settings.contains("ProxyHandler/jscode"))
+// if(!settings.contains("ProxyHandler/jscode"))
settings.setValue("ProxyHandler/jscode", app_path + "/tm.js");
#endif
// DefaultHtmlModule
#ifdef QT_DEBUG
settings.setValue("DefaultHtmlModule/file", QString(PROXYSRCDIR) + "/index.html");
#else
- if(!settings.contains("DefaultHtmlModule/file"))
+// if(!settings.contains("DefaultHtmlModule/file"))
settings.setValue("DefaultHtmlModule/file", app_path + "/index.html");
#endif
// Database
QString path = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
settings.setValue("Database/root", path);
}
-//#ifdef QT_DEBUG
- settings.setValue("WordringConnection/url", "ws://localhost:82/ws/tm");
-//#else
-// if(!settings.contains("WordringConnection/url"))
-// settings.setValue("WordringConnection/url", "ws://tm.wordring.net:80/");
-//#endif
+#ifdef QT_DEBUG
+ settings.setValue("WordringConnection/url", "ws://wordring.net/ws");
+#else
+ if(!settings.contains("WordringConnection/url"))
+ settings.setValue("WordringConnection/url", "ws://wordring.net/ws");
+#endif
TM::Service *service = new TM::Service(&settings, &a);
+
+ // メインウィンドウ。
MainWindow w(&settings, service);
w.setFont(QFont("Meiryo", 10.5));
+
service->load_languages(QApplication::applicationDirPath() + "/plugins");
HttpServer *server = new HttpServer(&settings, &w);
textwidget.cpp \
tmtext.cpp \
tmdatabase.cpp \
- tmcandidatewidget.cpp \
- tmeditorwidget.cpp
+ tmcandidatewidget.cpp \
+ tmeditorwidget.cpp
HEADERS += mainwindow.h \
tmhttp.h \
textwidget.h \
tmtext.h \
tmdatabase.h \
- tmcandidatewidget.h \
- tmeditorwidget.h
+ tmcandidatewidget.h \
+ tmeditorwidget.h
DEFINES += PROXYSRCDIR=\\\"$$PWD\\\"
#INCLUDEPATH += $$PWD/../language
{
}
-void TM::WordringConnection::find_sentence(
+bool TM::WordringConnection::find_sentence(
QString site_name, int scode, int tcode, QString ssentence, qint32 token)
{
QJsonObject jobject;
m_requests.enqueue(json);
send();
+
+ return true;
}
-void TM::WordringConnection::insert_sentence(
+bool TM::WordringConnection::insert_sentence(
QString site_name, int scode, int tcode,
QString ssentence, QString tsentence, QByteArray word_link)
{
- if(!m_request_limit) return; // 制限値が0の場合、送信できない。
-
QJsonObject jobject;
jobject["cmd"] = "insert";
QJsonDocument jlink = QJsonDocument::fromJson(word_link, &error);
assert(error.error == QJsonParseError::NoError);
- if(error.error != QJsonParseError::NoError) return;
+ if(error.error != QJsonParseError::NoError) return false;
jobject["json"] = jlink.object();
}
m_requests.enqueue(json);
send();
+
+ return true;
}
-void TM::WordringConnection::onConnected() { send(); }
+void TM::WordringConnection::onConnected()
+{
+ qDebug() << "WordringConnection::onConnected()";
+ send();
+}
void TM::WordringConnection::onDisconnected()
{
+ m_service->do_wordring_disconnected();
if(m_socket) m_socket->deleteLater();
m_socket = nullptr;
}
void TM::WordringConnection::onError(QAbstractSocket::SocketError e)
{
+ qDebug() << "WordringConnection::onError()";
+ if(m_socket) qDebug() << "WordringConnection::onError" << m_socket->errorString();
+
if(e == QAbstractSocket::RemoteHostClosedError) return;
- if(!m_request_limit) return;
+ //if(!m_request_limit) return;
+ /*
m_request_limit = 0;
+ static int error_count = 4;
+ if(m_request_limit == 0)
+ {
+ --error_count;
+ if(!error_count) return;
+ }
QMessageBox mb;
mb.setWindowTitle("wordring translation memory");
msg += "<p>The system goes into internal mode.</p>";
mb.setText(msg);
mb.exec();
+ */
}
void TM::WordringConnection::onTextMessageReceived(QString const &message)
QString cmd = json["cmd"].toString();
if(cmd == "found") sentence_found(json);
+ else if(cmd == "not_found") sentence_not_found(json);
}
assert(!ssentence.isEmpty());
assert(!tsentence.isEmpty());
assert(user_id);
- //assert(token);
+ assert(token);
if(json.contains("json"))
{
if(ssentence.isEmpty()) return;
if(tsentence.isEmpty()) return;
if(!user_id) return;
- // if(!token) return;
+ if(!token) return;
m_service->sentence_found(
site, scode, tcode, ssentence, tsentence, jdata, user_id, token);
}
+void TM::WordringConnection::sentence_not_found(QJsonObject json)
+{
+ qint32 token = json["token"].toInt();
+ assert(token);
+ if(!token) return;
+ m_service->sentence_not_found(token);
+}
+
// Service --------------------------------------------------------------------
TM::Service::Service(Settings *settings, QObject *parent)
target_sentence_data->json = sentence->to_json();
// サーバへ登録。
- m_wordring->insert_sentence(site_name, scode, tcode,
+ if( m_wordring_dispatcher.size() < m_wordring_dispatcher_limit)
+ {
+ m_wordring->insert_sentence(site_name, scode, tcode,
source_sentence_data->sentence, target_sentence_data->sentence,
target_sentence_data->json);
+ }
// データベースへ登録。
QMetaObject::invokeMethod(
{
dispatcher_data_type ddata = m_database_dispatcher.get(token);
if(ddata.connection.isNull()) return;
+ // SocketConnectionに返答する。
ddata.connection->sentence_found(ddata.segment_id, ddata.index, result);
}
if(ddata.connection.isNull()) return;
// サーバから検索。
- if(m_wordring_dispatcher_limit < m_wordring_dispatcher.size()) return;
- int wordring_token = m_wordring_dispatcher.set(ddata);
- m_wordring->find_sentence(site_name, scode, tcode, ssentence, wordring_token);
+ if(m_wordring_dispatcher.size() < m_wordring_dispatcher_limit)
+ {
+ int wordring_token = m_wordring_dispatcher.set(ddata);
+ m_wordring->find_sentence(site_name, scode, tcode, ssentence, wordring_token);
+ }
}
/*!
}
}
+void TM::Service::sentence_not_found(quint32 token)
+{
+ m_wordring_dispatcher.get(token);
+}
+void TM::Service::do_wordring_disconnected()
+{
+ qDebug() << "Service::do_wordring_disconnected()"
+ << "dispatcer count=" << m_wordring_dispatcher.size();
+ m_wordring_dispatcher.clear();
+}
int size() const { return m_map.size(); }
+ void clear() { m_map.clear(); }
+
int set(T p)
{
int token = 0;
public:
WordringConnection(Settings *settings, Service *service);
- void find_sentence(QString site_name, int scode, int tcode,
+ bool find_sentence(QString site_name, int scode, int tcode,
QString ssentence, qint32 token);
- void insert_sentence(QString site_name, int scode, int tcode,
+ bool insert_sentence(QString site_name, int scode, int tcode,
QString ssentence, QString tsentence, QByteArray word_link);
public slots:
void send();
void sentence_found(QJsonObject json);
+ void sentence_not_found(QJsonObject json);
private:
Settings *m_settings;
void sentence_found(QString site, qint32 scode, qint32 tcode,
QString ssentence, QString tsentence, QByteArray json,
quint32 user_id, qint32 token);
+ void sentence_not_found(quint32 token);
+ void do_wordring_disconnected();
private:
Settings *m_settings;
--- /dev/null
+;
+; Configuration file of MeCab
+;
+; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
+;
+; dicdir =
+
+; userdic = /home/foo/bar/user.dic
+
+; output-format-type = wakati
+; input-buffer-size = 8192
+
+; node-format = %m\n
+; bos-format = %S\n
+; eos-format = EOS\n