Global
会社概要
歴史
ブログ
ウェブ
iPhone
フリーソフト

ポップアップ辞書(SeaHorse用スクリプト)

トップ -> Developer フォーラム (SLDEV)

ページ 1, 2  次のページ トピックに返信
投稿者 メッセージ

プヨぷよ
Professional



登録日: 2006.06.21
投稿記事: 244

投稿日時: 2007/11/18 Sun - 00:36

引用付きで返信

修正履歴:
08/01/08 18:40
 リモートサイトのスクリプトにexecScriptのオーバーライドを利用してISleipnirインタフェースを奪われる可能性がある不具合を修正した
  (副作用としてタブのセキュリティ設定でスクリプトが無効になっていても動作するようになっていますが、
  スクリプトコントロールを利用する為Windows98では別途インストールが必要になります。
  こちらからインストールできるかと思いますが、テスト環境がないため本当に動作するかはわかりません)

概要:
英単語と思しき単語をマウスオーバーすることでその単語に対応する訳をポップアップします。
また、サブ機能としてUserActionのような綴りをUserやActionで分けて
テキスト選択状態にすることで個別に訳を引けます。
辞書データはSqliteのデータベースの形で別途用意する必要があります。

導入:
※本体の導入前に予めデータベースを用意しておくことを推奨します
SeaHorseをインストールされていない場合はこちらよりインストールしてください。
スクリプトを全て選択して(codeのブロックをトリプルクリックすると選択が楽です。)
<任意のファイル名>.user.js で保存して、Sleipnir\plugins\seahorse\ に入れてください。

Code:
// ==UserScript==
// @name        ポップアップ辞書
// @author      プヨぷよ
// @include     http*
// @description マウスオーバー、単語選択で訳をポップアップ(ver 1.15)
// @type        SleipnirScript
// ==/UserScript==

// Released under the GPL license
//  http://www.gnu.org/copyleft/gpl.html

var ScriptControl = CreateObject("ScriptControl");
if (ScriptControl && !_window[ScriptName]) {
   _window[ScriptName] = true;
   ScriptControl.Language = "JScript";
   ScriptControl.AddObject("ScriptControl", ScriptControl);
   ScriptControl.AddObject("sleipnir", sleipnir, true);
   ScriptControl.AddObject("db", Database.Open("dictDB"));
   ScriptControl.AddObject("_window", _window);
   ScriptControl.Eval("_window.attachEvent('onunload', function(){ScriptControl = null;})");
   ScriptControl.AddCode(popUpDictionary);
   ScriptControl.Run("popUpDictionary", _window);
}

function popUpDictionary(window)
{
   var type = 2;//0:マウスオーバー, 1:単語選択, 2:両方
   var delay = 200;//マウスオーバータイプ時の遅延時間
   
   var document = window.document;
   var frames = document.getElementsByTagName("frame");
   var callee = arguments.callee;
   
   if (frames.length) {
      for (i = 0; i < frames.length; i++) {
         var w = frames[i].contentWindow;
         try {
            if (w.document.readyState == "complete") {
               callee(w);
            }
            
            frames[i].attachEvent("onload", function(e){
               callee(e.srcElement.contentWindow);
            });
         }
         catch (e) {
            Output.Print(ScriptName + " エラー:ドメインの異なるサブフレーム", false);
         }
      }
      return;
   }
   frames = null;
   
   var timeoutId;
   var x;
   var y;
   
   var dispTransWord = document.createElement("div");
   dispTransWord.style.backgroundColor = "AliceBlue";
   dispTransWord.style.color = "black";
   dispTransWord.style.position = "absolute";
   dispTransWord.style.visibility = "hidden";
   dispTransWord.style.borderWidth = "2px 3px 3px 2px";
   dispTransWord.style.borderColor = "AliceBlue";
   dispTransWord.style.borderStyle = "outset ridge ridge outset";
   dispTransWord.style.padding = "2 5 2 5";
   dispTransWord.style.zIndex = "100";
   dispTransWord.style.left = 0;
   dispTransWord.style.top = 0;
   dispTransWord.style.textAlign = "left";
   dispTransWord.style.fontSize = "12pt";
   dispTransWord.style.fontStyle = "normal";
   dispTransWord.id = "dispTransWord";
   document.body.appendChild(dispTransWord);
   dispTransWord = null;
   
   (type != 1) && document.body.attachEvent("onmousemove", reserveTransWord);
   (type > 0) && document.body.attachEvent("onmouseup", transSelectedText);
   
   function reserveTransWord(e)
   {
      var selected = (document.selection.type == "Text") && (type > 0);
      
      if (timeoutId) {
         window.clearTimeout(timeoutId);
      }
      else if (!selected) {
         window.setTimeout(function(){document.getElementById("dispTransWord").style.visibility = "hidden";}, delay);
      }
      
      if (!e.srcElement.form && !selected) {
         x = e.clientX;
         y = e.clientY;
         timeoutId = window.setTimeout(transUnderMouse, delay);
      }
   }
   
   function transUnderMouse()
   {
      var rng = document.body.createTextRange();
      try {
         rng.moveToPoint(x, y);
         rng.expand("word");
         
         var Left = rng.boundingLeft + document.body.scrollLeft;
         var Right = Left + rng.boundingWidth;
         var Top = rng.boundingTop + document.body.scrollTop;
         var Bottom = Top + rng.boundingHeight;
         
         if (x >= Left && x <= Right && y >= Top && y <= Bottom) {
            transWord(rng.text, x, y);
         }
      }
      catch (e) {
      }
      timeoutId = null;
   }
   
   function transSelectedText(e)
   {
      document.getElementById("dispTransWord").style.visibility = "hidden";
      var text = document.selection.createRange().text;
      transWord(text, e.clientX, e.clientY);
   }
   
   function transWord(text, x, y)
   {
      var canvas = document[document.compatMode == "CSS1Compat" ? "documentElement" : "body"];
      if (text.match(/([a-z]+)/i)) {
         var word = RegExp.$1.toLowerCase();
         var res = db.Query("SELECT after, before FROM etoj WHERE lower(before) = '" + word + "';");
         if (!res.NumRows()) {
            res = db.Query("SELECT after, before FROM etoj WHERE lower(before) LIKE '" + stem(word) + "%';");
         }
         
         if (res.NumRows()) {
            text = res.Current().At(1) + "\n" + res.Current().At(0).replace(/,(\d\.)/g, function(s0, s1) {return "\n" + s1});
            with (document.getElementById("dispTransWord")) {
               style.width = "auto";
               innerText = text;
               if (offsetWidth > canvas.clientWidth / 2) {
                  style.width = canvas.clientWidth / 2;
               }
               style.left = x + canvas.scrollLeft + ((canvas.clientWidth - 10 < x + offsetWidth) ? - offsetWidth - 10 : 10);
               style.top = y + canvas.scrollTop + ((canvas.clientHeight - 10 < y + offsetHeight) ? - offsetHeight - 10 : 10);
               style.visibility = "visible";
            }
         }
         //status = word + "," + stem(word);
      }
   }
   
   function stem(str)
   {
      var buf = new Array();
      var index = 0;
      var j;
      
      while (buf[index] = str.charAt(index++));
      buf.length = index - 1;
      index -= 2;
      
      step1();
      step3();
      step5();
      step6();
      
      buf.length = index + 1;
      
      return buf.join("");
      
      function isConsonant(i)
      {
         switch (buf[i]) {
         case "a":
         case "e":
         case "i":
         case "o":
         case "u":
            return false;
            
         case "y":
            return i ? true : !(isConsonant(i - 1));
            
         default:
            return true;
         }
      }
      
      function doubleConsonant(i)
      {
         if (!i || buf[i] != buf[i - 1]) {
            return false
         }
         return isConsonant(i);
      }
      
      function vowelinstem()
      {
         for (var i = 0; i <= j; i++) {
            if (!isConsonant(i)) {
               return true;
            }
         }
         return false;
      }
      
      /*
      function cvc(i)
      {
         if (i < 0 || !isConsonant(i) || isConsonant(i - 1) || !isConsonant(i - 2)) {
            return false;
         }
         
         return buf[i] != "w" && buf[i] != "x" && buf[i] != "y";
      }*/
      
      function m()
      {
         var n = 0;
         var flag = false;
         
         for (var i = 0; i <= j; i++) {
            if (isConsonant(i) == flag) {
               n += flag;
               flag = !flag;
            }
         }
         
         return n;
      }
      
      function ends(s)
      {
         var l = s.length;
         var o = index - l + 1;
         if (o < 0) {
            return false;
         }
         
         for (var i = 0; i < l; i++) {
            if (buf[o + i] != s.charAt(i)) {
               return false;
            }
         }
         j = index - l;
         
         return true;
      }
      
      function setTo(s)
      {
         var l = s.length;
         var o = j + 1;
         
         for (var i = 0; i < l; i++) {
            buf[o + i] = s.charAt(i);
         }
         index = j + l;
      }
      
      function r(s)
      {
         if (m() > 0) setTo(s);
      }
      
      function step1()
      {
         if (ends("s")) {
            if (ends("sses")) {
               index -= 2;
            }
            else if (ends("ies")) {
               setTo("y");
            }
            else if (!ends("ss")) {
               index--;
            }
         }
         
         if (ends("eed") && m() > 0) {
            index--;
         }
         else if ((ends("ed") || ends("ing")) && vowelinstem()) {
            index = j;
            if (ends("at")) {
               setTo("ate");
            }
            else if (ends("bl")) {
               setTo("ble");
            }
            else if (ends("iz")) {
               setTo("ize");
            }
            else if (doubleConsonant(index)) {
               if (buf[index - 1] != "l" && buf[index - 1] != "s" && buf[index - 1] != "z") {
                  index--
               }
            }
            /*
            else if (m() == 1 && cvc(index)) {
               setTo("e");
            }
            */
         }
      }
      
      function step3()
      {
         if (ends("ational")) {
            r("ate");
         }
         else if (ends("tional")) {
            r("tion");
         }
         else if (ends("ency")) {
            r("ence");
         }
         else if (ends("ancy")) {
            r("ance");
         }
         else if (ends("izer")) {
            r("ize");
         }
         else if (ends("bly")) {
            r("ble");
         }
         else if (ends("ally")) {
            r("al");
         }
         else if (ends("ently")) {
            r("ent");
         }
         else if (ends("ely")) {
            r("e");
         }
         else if (ends("ously")) {
            r("ous");
         }
         else if (ends("ization")) {
            r("ize");
         }
         else if (ends("ation")) {
            r("ate");
         }
         else if (ends("ator")) {
            r("ate");
         }
         else if (ends("alism")) {
            r("al");
         }
         else if (ends("iveness")) {
            r("ive");
         }
         else if (ends("fulness")) {
            r("ful");
         }
         else if (ends("ousness")) {
            r("ous");
         }
         else if (ends("ality")) {
            r("al");
         }
         else if (ends("ivity")) {
            r("ive");
         }
         else if (ends("bility")) {
            r("ble");
         }
         else if (ends("logy")) {
            r("log");
         }
         
         //step4相当
         if (ends("icate")) {
            r("ic");
         }
         else if (ends("ative")) {
            r("");
         }
         else if (ends("alize")) {
            r("al");
         }
         else if (ends("icity")) {
            r("ic");
         }
         else if (ends("ical")) {
            r("ic");
         }
         else if (ends("ful")) {
            r("");
         }
         else if (ends("ness")) {
            r("");
         }
      }
      
      function step5()
      {
         if ((ends("al") || ends("ance") || ends("ence") || ends("er") || ends("ic") || ends("able") || ends("ible") || ends("ant") || ends("ement") || ends("ment") || ends("ent") ||(ends("ion") && buf[j] == "s" || buf[j] == "t") || ends("ou") || ends("ism") || ends("ate") || ends("ity") || ends("ous") || ends("ive") || ends("ize")) && m() > 1) {
            index = j;
         }
      }
      
      function step6()
      {
         j = index;
         if (buf[index] == "e") {
            //if (m() > 1 || m() && !cvc(index - 1)) {
            if (m()) {
               index--;
            }
         }
         if (buf[index] == "l" && doubleConsonant(index) && m() > 1) {
            index--;
         }
      }
   }
}

語幹抜きだしコードのオリジナル


ポップアップ辞書に関する質問はこのトピックでどうぞ。
また各種辞書用のデータコンバータを自作されたかたは是非このトピックで配付してください
_________________
 ∩∩ 欲しいスクリプトを要望してみるスレ - Fenrir User Community
(・×・) 
 (  )。


最終編集者 プヨぷよ [ 2008/01/08 Tue - 18:40 ], 編集回数 2 回

プヨぷよ
Professional



登録日: 2006.06.21
投稿記事: 244

投稿日時: 2007/11/18 Sun - 00:53

引用付きで返信

GENE95辞書用データコンバータ

概要:
GENE95辞書をポップアップ辞書用のデータベースに変換します。

導入:
GENE95 DictionaryよりGENE95辞書のアーカイブをダウンロードし解凍しておいてください。
UserAction Extensionをインストールされていない場合はこちらよりインストールしてください。

ソースコードを全て選択して(codeのブロックをトリプルクリックすると選択が楽です)、
<任意のファイル名>.js で保存して、Sleipnir\plugins\scripts\ に入れてください。

Sleipnirを再起動すると先ほどのスクリプトがアクションとして登録されるので、
マウスジェスチャーなどから実行してください。

GENE.txtのパスを求めるダイアログがでるので解凍して得られた
GENE.txtへのフルパスを入力してください。

しばらく固まったようになりますがステータスバーに辞書データの変換が完了したと
でるまで放置しておいてください。(※変換には時間がかかります)

データの変換が完了したらこのスクリプトは削除してもかまいません。
Code:
var path = prompt("GENE.TXTのフルパスを入力してください", "");
var t = new Date();
var db = Database.Open("dictDB");
db.Query("BEGIN TRANSACTION;");
var res = db.Query("SELECT * FROM etoj;");

if (res.NumRows() == 0) {
   db.Query("CREATE TABLE etoj(before TEXT primary key, after TEXT);");
}

var file = OpenFile(path ,"r");
Status = "辞書データ変換開始"
while (line = file.ReadLine()) {
   if ((/^[a-z]+$/i).test(line)) {
      eWord = line;
      jWord = file.ReadLine();
      res = db.Query("SELECT * FROM etoj WHERE before = '" + eWord + "';");
      
      if (res.NumRows() == 0) {
         db.Query("INSERT INTO etoj(before, after) VALUES('" + eWord + "', '" + jWord + "');");
      }
   }
}
file.Close();
db.Query("END TRANSACTION;");
Status = "辞書データの変換が完了しました(" + (new Date() - t) / 1000 + "秒)";

_________________
 ∩∩ 欲しいスクリプトを要望してみるスレ - Fenrir User Community
(・×・) 
 (  )。

ぷにゃ
Beginner



登録日: 2006.02.23
投稿記事: 7

投稿日時: 2007/11/30 Fri - 19:09

引用付きで返信

PDIC一行テキストファイル形式辞書コンバータ

 英辞朗やユーザー辞書をポップアップ辞書で利用したかったので作りました。
(pdic起動→(Tool menuの辞書の変換)→一行テキスト形式)
 プヨぷよさんのまるパクリになっています。使い方も同じです。

 問題があるようなら削除します。
(申し訳ないのですが返信お願いできますか>プヨぷよさん)
[追記]
許可を頂けました。プヨぷよさんありがとうございました。


 また私、プログラムといえば学校の授業レベルでしかやったことがないので、
ほとんど何をやっているのか理解できてません。メモ帳で編集してますし^^;
 利用は自己責任でお願いします・・・。

Code:

var path = prompt("Personal Dictionary一行テキスト形式の辞書ファイルを指定してください", "");
var t = new Date();
var db = Database.Open("dictDB");
db.Query("BEGIN TRANSACTION;");
var res = db.Query("SELECT * FROM etoj;");

if (res.NumRows() == 0) {
   db.Query("CREATE TABLE etoj(before TEXT primary key, after TEXT);");
}

var file = OpenFile(path ,"r");
Status = "辞書データ変換開始"

while (line = file.ReadLine()) {
      len = line.length;
      pos = line.indexOf(" /// ");
      eWord = line.substring(0, pos--);
      jWord = line.substring(pos + 5, len++);
        do {
           jWord = jWord.replace("\\", "\n");
           } while (jWord.indexOf("\\")!=-1)

   if ((/^[a-z]+$/i).test(eWord)) {
      res = db.Query("SELECT * FROM etoj WHERE before = '" + eWord + "';");
       
      if (res.NumRows() == 0) {
         db.Query("INSERT INTO etoj(before, after) VALUES('" + eWord + "', '" + jWord + "');");
      }
   }
}
file.Close();
db.Query("END TRANSACTION;");
Status = "辞書データの変換が完了しました(" + (new Date() - t) / 1000 + "秒)";


以下参考までに--------------------------------------------------------------------

 手持ちの環境では、英辞朗2007.Oct版(170万単語)をPersonal Dictionary で
一行テキストファイル形式辞書(ファイルサイズ100MB)に変換、これをさらに
以下のスクリプトで変換しました。

 変換後のファイルサイズは37MBほど(idiomなどは変換されないため)、
Celeron1GH,メモリ512MB,WindowsXP,Sleipnir2.6正式版の環境で
変換に15分ほどでした。(2007.11.30 23:50 訂正:GENE95 では変換に40秒)


 しかしながら、ポップアップ辞書を英辞朗で快適に使うにはマシンスペックが
かなり必要なようです。この様な用途ではSleipnirスクリプトは重すぎますか・・・。
APIの公開が待ち遠しいですね。
-------------------------------------------------------------------------------------
_________________
プログラムは大変ですね
by ぷにゃ


最終編集者 ぷにゃ [ 2007/12/01 Sat - 08:25 ], 編集回数 4 回

プヨぷよ
Professional



登録日: 2006.06.21
投稿記事: 244

投稿日時: 2007/11/30 Fri - 22:23

引用付きで返信

ぷにゃ wrote:

 プヨぷよさんのまるパクリになっています。使い方も同じです。

 問題があるようなら削除します。
(申し訳ないのですが返信お願いできますか>プヨぷよさん)

辞書データの利用規約に触れない限り、辞書データ変換スクリプトの
改変・配付はなんら問題ありません。むしろ大歓迎です。
ご協力ありがとうございます。
_________________
 ∩∩ 欲しいスクリプトを要望してみるスレ - Fenrir User Community
(・×・) 
 (  )。

ぷにゃ
Beginner



登録日: 2006.02.23
投稿記事: 7

投稿日時: 2007/11/30 Fri - 23:49

引用付きで返信

プヨぷよさん

 あつかましいお願いを聞いてくださり、
ありがとうございます。

 プヨぷよさんのスクリプトをいつも便利に
使わせて頂いています。今後ともよろしくお願いします。
_________________
プログラムは大変ですね
by ぷにゃ

ぷにゃ
Beginner



登録日: 2006.02.23
投稿記事: 7

投稿日時: 2007/12/01 Sat - 01:45

引用付きで返信

DDwin32により出力されたテキストファイルのコンバータ

 EPWING形式のファイルをポップアップ辞書で使うための
コンバータです。これも個人的の利用目的で作ったものです。
 利用は自己(ry

 EPWING形式の辞書をDDwin32と呼ばれるソフトで一旦
テキストファイルにしたものをポップアップ辞書に変換します。
 各自、テキストファイルを作成してください。

 Personal Dictionaryには、EPWING形式の読み込み機能がある
ようですが、辞書の中には読み込めないものがあるため作りました。

 例によりプヨぷよさんのコードに乗っかかってます^^;

[追記]
2007.12.01
訳語の内容が一部重複してしまうミスを修正しました


Code:
var path = prompt("DDwin出力のテキストファイルを選択してください", "");
var t = new Date();
var db = Database.Open("dictDB");
db.Query("BEGIN TRANSACTION;");
var res = db.Query("SELECT * FROM etoj;");

if (res.NumRows() == 0) {
   db.Query("CREATE TABLE etoj(before TEXT primary key, after TEXT);");
}

var file = OpenFile(path ,"r");
Status = "辞書データ変換開始"
while (line = file.ReadLine()) {
     eWord = line; 
     jWord1 = file.ReadLine();
     jWord2 = file.ReadLine();
         for (i = 0; jWord1 != jWord2; i++) {
             if (i == 0) {
                   jWord = jWord1.concat("\n" + jWord2);
                   jWord1 = jWord2;
                   jWord2 = file.ReadLine();
             }
              else {
                   jWord = jWord.concat("\n" + jWord2);
                   jWord1 = jWord2;
                   jWord2 = file.ReadLine();
             }
         }

   if ((/^[a-z]+$/i).test(line)) {
     res = db.Query("SELECT * FROM etoj WHERE before = '" + eWord + "';");
      if (res.NumRows() == 0) {
         db.Query("INSERT INTO etoj(before, after) VALUES('" + eWord + "', '" + jWord + "');");
      }
   }
}
file.Close();
db.Query("END TRANSACTION;");
Status = "辞書データの変換が完了しました(" + (new Date() - t) / 1000 + "秒)";


以下参考までに--------------------------------------------------------------------

 フリーで配布されている約5万単語の専門用語辞書をDDwin32でテキストに変換、
(ファイルサイズ10MB)これをスクリプトによって変換しました。

 変換後のファイルサイズは3MBほど(idiomなどは変換されないため)、
Celeron1GH,メモリ512MB,WindowsXP,Sleipnir2.6正式版の環境で
変換に90秒ほどでした。(2007.11.30 23:50 訂正:GENE95 では変換に40秒)

チラシの裏
 これでJammingで利用できるかなりの辞書を変換できるのではないかと思っています。手持ちの辞書ファイルがないので検証のしようがないですが・・・。
 

-------------------------------------------------------------------------------------
_________________
プログラムは大変ですね
by ぷにゃ

ぷにゃ
Beginner



登録日: 2006.02.23
投稿記事: 7

投稿日時: 2007/12/01 Sat - 06:02

引用付きで返信

DDwin32テキストファイルコンバータの改変

 辞書の一部の項目、今回は[例文] を削除しつつポップアップ辞書に
登録するスクリプトにしてみた。
(変換した辞書は例文が非常に長く、ポップアップさせたときに邪魔だったため)

 最終的にループが三重になったが、(ループの中にループは避けるべきらしい)
うまく変換できているようなので気にしない。

上のスクリプト中の以下の部分を
Code:
             else {
                   jWord = jWord.concat("\n" + jWord2);
                   jWord1 = jWord2;
                   jWord2 = file.ReadLine();
             }


以下のように変更した
Code:
               else {
                   
                     if (jWord2 == "  [例文]") {
                          jWord3 = jWord2;
                              while (1) {
                                 jWord1 = jWord3;
                                 jWord3 = file.ReadLine();
                                     if ((jWord3 == "  [関連語]" ) || (jWord3.length == 0)) {
                                     jWord2 = jWord3;
                                     break;
                                     }
                              }
                      }
                      else {
                            jWord = jWord.concat("\n" + jWord2);
                            jWord1 = jWord2;
                            jWord2 = file.ReadLine();
                       }
              }

_________________
プログラムは大変ですね
by ぷにゃ

ぷにゃ
Beginner



登録日: 2006.02.23
投稿記事: 7

投稿日時: 2007/12/09 Sun - 02:36

引用付きで返信

 上記のコンバータによって作成された、2つの辞書データベースを統合する
スクリプトです。スプリプトの勉強に書いてみました。
 重複する項目については、統合する側のものが削除されます。

 このスクリプトを使用する際は、必ずデータベースのバックアップをとってから行ってください。利用は自己責任で。

利用方法----------------------------------------------------------------------

 ・スクリプトの導入方法は、コンバータと同様です。

 ・Sleipnirのインストールフォルダの\Fenrir & Co\Sleipnir\settings\MoonStone
上に、統合する2つの辞書データベースを用意してください。
  統合する側   :gene.db
  統合される側  :dictDB.db
 この場合、項目はdictDB.dbに追加されることになります。以降は、上記のデータベースを統合させるということで話を進めます。

 スクリプトを起動(?)すると、まず統合する側のファイル名を聞いてくるので、
geneと入力してください。拡張子は不要です。
 次に統合される側のファイル名が聞かれるので、同様にdictDBと入力してください。
OKを押すと変換が始まります。
-----------------------------------------------------------------------------------
  問題点があれば連絡をお願いしますm(__)m

Code:
var time = new Date();
var dbname1 = prompt("\\Fenrir & Co\\Sleipnir\\settings\\MoonStone上の\n統合する側のファイル名を入力してください。", "");
var dbname2 = prompt("\\Fenrir & Co\\Sleipnir\\settings\\MoonStone上の\n統合される側のファイル名を入力してください。", "");
var db1 = Database.Open(dbname1);
var db2 = Database.Open(dbname2);
var res1 = db1.Query("SELECT * FROM etoj;");
var res2 = db2.Query("SELECT * FROM etoj;");
var TotalRow = res1.NumRows();

if (res2.NumRows() == 0) {
   db2.Query("CREATE TABLE etoj(before TEXT primary key, after TEXT);");
} ;
db2.Query("BEGIN TRANSACTION;");
for (i = 1;i < TotalRow + 1 ; i++ ) {
   res1 = db1.Query("SELECT * FROM etoj where rowid = '" + i + "' ;");
   word1 = res1.Current().At(0);
   word2 = res1.Current().At(1);
   res2 = db2.Query("SELECT before FROM etoj WHERE before = '" + word1 + "';");
   if (res2.NumRows() == 0) {
      db2.Query("INSERT INTO etoj(before,after) VALUES ('" + word1 + "','" + word2 + "');");
   }
}
var res2 = db2.Query("SELECT * FROM etoj;");
var ModNum = res2.NumRows();
db2.Query("END TRANSACTION;");

Status = "結合完了" + (new Date() - time) / 1000 + "秒(重複数" + (TotalRow - ModNum) +  ")";


 
_________________
プログラムは大変ですね
by ぷにゃ

くすて
Regular



登録日: 2008.06.18
投稿記事: 16
公開所在地: 大阪府豊中市

投稿日時: 2008/06/21 Sat - 18:32

引用付きで返信

ポップアップ辞書を実装したく思いチャレンジ中です。

GENE95辞書を<任意のファイル名>.js で保存して、GENE.TXTのフルパスを入力

C:\Documents and Settings\●●●\デスクトップ\gene95

保存してSleipnir\plugins\scripts\ に入れてSleipnirを再起動
マウスジェスチャ←任意のファイル名で右クリックしながら←ドラッグしたのですが、

ウィンドウ下部にscript error C:\Documents and Settings\●●●\デスクトップ\gene95.js(0,0)
description 文字がただしくありません

となってしばらく固まったようになりますがステータスバーに辞書データの変換が完了したとかはまったくおこりません。
extendedmenuでアクションを割り当ててやってみても同じでした。

どこか操作間違いをしているのでしょうか?

●●●/user/jsを入れる前にやったほうがいいと書いてあったのでこちらを先にがんばっているのですがうまくいかないのです。 Crying or Very sad

プヨぷよ
Professional



登録日: 2006.06.21
投稿記事: 244

投稿日時: 2008/06/21 Sat - 22:31

引用付きで返信

>マウスジェスチャ←任意のファイル名で右クリックしながら←ドラッグしたのですが、
この部分が具体的にどうしたのか今ひとつわかりませんが、
Quote:
ウィンドウ下部にscript error C:\Documents and Settings\●●●\デスクトップ\gene95.js(0,0)
description 文字がただしくありません

が事実であれば恐らくスクリプトの利用手段を間違えています。
デスクトップ上に存在するスクリプトをUserAction用スクリプトとしては利用できないはずです。
(というか、何故デスクトップにスクリプトがあるのか文章からよみとれないのですが…)
マウスジェスチャーへの登録が間違いなく出来ているかを確認してください。
_________________
 ∩∩ 欲しいスクリプトを要望してみるスレ - Fenrir User Community
(・×・) 
 (  )。

くすて
Regular



登録日: 2008.06.18
投稿記事: 16
公開所在地: 大阪府豊中市

投稿日時: 2008/06/22 Sun - 01:06

引用付きで返信

圧縮ファイルをダウンロードするとき、指定先ルートがさきにはいっているのですが、アンインストールするとき困らないようにいつも参照でデスクトップに変えてます。

解答したgene95ファイルをどのルートに置くとよいのでしょうか?

マウスジェスチャはツールからdleipnirオプション、ユーザーインターフェイス、マウスジェスチャ、ジェスチャの追加と削除、ジェスチャ ← 、カテゴリ アクションから 、アイテム ge95 、で登録されています。

マウスジェスチャは右クリックしたまま矢印方向にドラッグして先に書いたようになりました。

jiong999
Professional



登録日: 2008.04.18
投稿記事: 282
公開所在地: 落花生群生地近隣

投稿日時: 2008/06/22 Sun - 01:27

引用付きで返信

>どのルートへ置く…

ルート…ってw「c:\」???

一般的Javascriptはscriptsディレクトリへ…
seahorse専用スクリプトはseahorseディレクトリへ…
添付テキストは無いのでしょうか?

普通デスクトップに置いて使用するスクリプトは…無いと思う…
試験的になにかやるのでも、かなりあり得ない…

くすて
Regular



登録日: 2008.06.18
投稿記事: 16
公開所在地: 大阪府豊中市

投稿日時: 2008/06/22 Sun - 02:21

引用付きで返信

gene95.jsはC:\Program Files\Fenrir & Co\Sleipnir\plugins\scriptsにいれるのはわかるのですが、

gene95.js内のGENE.TXTのフルパスをいれないといけないのですが、
それがどこにいれるのかわからないのです。

gene95.TXTファイルをC:\Program Files\Fenrir & Co\Sleipnirこの後がわからないのです。

Javascriptのことがわからないので、お手数ばかりお掛けしますが、宜しくお願いします。m( _ _ )m

プヨぷよ
Professional



登録日: 2006.06.21
投稿記事: 244

投稿日時: 2008/06/22 Sun - 07:06

引用付きで返信

>マウスジェスチャはツールからdleipnirオプション、ユーザーインターフェイス、マウスジェスチャ、ジェスチャの追加と削除、ジェスチャ ← 、カテゴリ アクションから 、アイテム ge95 、で登録されています。
C:\Program Files\Fenrir & Co\Sleipnir\plugins\scriptsに保存したスクリプトは
ファイル名をge95.jsにしたのでしょうか。
アクション名がge95ということは実行されているのはge95.jsのはずなのですが…。
エラーメッセージは
Quote:
script error C:\Documents and Settings\●●●\デスクトップ\gene95.js(0,0)
description 文字がただしくありません
で間違いありませんか?
このメッセージを見る限りではデスクトップのスクリプトが実行されています。

>解答したgene95ファイルをどのルートに置くとよいのでしょうか?
自分で把握できる場所ならどこでもいいです。
Quote:
GENE.txtのパスを求めるダイアログがでるので解凍して得られた
GENE.txtへのフルパスを入力してください。
のとおりです。
_________________
 ∩∩ 欲しいスクリプトを要望してみるスレ - Fenrir User Community
(・×・) 
 (  )。

くすて
Regular



登録日: 2008.06.18
投稿記事: 16
公開所在地: 大阪府豊中市

投稿日時: 2008/06/22 Sun - 13:05

引用付きで返信

マウスジェスチャはツールからdleipnirオプション、ユーザーインターフェイス、マウスジェスチャ、ジェスチャの追加と削除、ジェスチャ ← 、カテゴリ アクションから 、アイテム ge95 、で登録されています。
C:\Program Files\Fenrir & Co\Sleipnir\plugins\scriptsに保存したスクリプトは
ファイル名をge95.jsにしています。

解答したgene95ファイルはC:\Program Files\Fenrir & Co\Sleipnir\plugins\scriptsにge95.jsと同じところにおき、再度sleipnirを再起動して登録したジェスチャで右クリックしたまま←ドラッグしてみたのですが

Code:
Error: Script error. C\Program Files\Fenrir & Co\Sleipnir\bin\..\plgins\scripts\ge95.js(0,0)
Description: 文字がただしくありません。


とメッセージがウィンドウの下にでます。

追記
gene95を辞書データをぷよラボサイト「辞書データを辞書データコンバータ(UA)」を使ってポップアップ辞書で使える形式(SQLite)に変換しないといけないということをcubeサイト「Sleipnirを便利にする10のカスタマイズ(2)」で知り、ぷよラボ内を探したのですが見つけられませんでした。

私にはかなりハイレベルなようなので、悲しいですがあきらめます。。。
いままで解答して頂きほんとうにありがとうございました!

トップ -> Developer フォーラム (SLDEV)

ページ 1, 2  次のページ トピックに返信

 
新規投稿: 不可
返信投稿: 不可
記事編集: 不可
記事削除: 不可
投票参加: 不可
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : PHPBB JAPAN / EUC-JP Edition : JP Support Forum