/* Jeanluca's café http://jeanluca.cool.ne.jp/ */
/* で配布されているオンラインソフト(HanglinGT、KakiThaiなど) */
/* の単語帳をXMLファイルに変換するJScriptです。

/* WSHのプログラムですので、Windows98では */
/* Windows Scripting Hostをインストールする必要があります。 */
/* また、DODB.streamというAcriveXオブジェクトも必要です。 */
/* WindowsXPでは最初から入っているようですが、Windows98では、 */
/* http://www.microsoft.com/japan/msdn/data/download.asp から */
/* MDACをインストールする必要があると思います。 */

/* 先ず、このファイル（tangocho.js）をローカルディスクに保存しておいて下さい。 */
/* 使い方は、単語帳ファイルをこのtangocho.jsのアイコンに */
/* ドラッグ＆ドロップしてください。 */
/* 拡張子xmlがついたファイルが生成されます。 */
/* （データ数が多いと変換に時間がかなりかかります。） */
/* 例　あいさつ.twdというファイルからは　あいさつ.twd.xmlが生成される */

/* 注意：単語帳のデータの著作権には注意が必要です。 */
/* 1. データの変換は自作の単語帳に限る。*/
/* 2. ジャンルカのカフェの単語帳ダウンロードコーナーにあるデータの */
/*    変換は著作権の問題があるので不可です。*/

/* 無保証。試作品。 */
/* エラー処理など、不十分な点がたくさんあると思います。 */
/* 使いやすいように改造して使ってください。 */

/* 参考文献 */
/* Hawk's W3 Laboratory http://www.hawk.34sp.com/ */
/* Disposable WSH というページより、ドラッグアンドドロップの部分と、 */
/* ADODB.Streamの使い方の部分を参考にしました。 */

/* 『JScriptハンドブック』佐藤信正著 毎日コミュニケーション ISBN4-8399-1902-X */
/* 『JScriptではじめるWebプログラミング』薬師寺国安・薬師寺聖共著 CQ出版社 (OPEN DESIGN増刊) */


var adTypeText = 2;
var adSaveCreateOverWrite = 2;
/* FileSystemObject作成 */
var fso = new ActiveXObject("Scripting.FileSystemObject");

function getEncodingFromExtension(myfilename) {
if(myfilename.length<5) return "";
  myext = myfilename.substring(myfilename.length-3,myfilename.length);
  myencchar = myext.charAt(0);
  if(myencchar == 'e' || myencchar == 'E') {//LatinaLady用
    return "windows-1252";
  } else if(myencchar == 'k' || myencchar == 'K') {//HanglinGT用
    return "euc-kr";
  } else if(myencchar == 'r' || myencchar == 'R') {//Rusca用
    return "windows-1251";
  } else if(myencchar == 't' || myencchar == 'T') {//KakiThai用
    return "windows-874";
  } else if(myencchar == 'u' || myencchar == 'U') {//トルコの星用
    return "windows-1254";
  } else if(myencchar == 'v' || myencchar == 'V') {//越子の手帳用
    return "windows-1258";
  } else if(myencchar == 'a' || myencchar == 'A') {//Daad用
    return "windows-1256";
  } else if(myencchar == 'g' || myencchar == 'G') {//Spitia用
    return "windows-1253";
  } else {
    return "";
  }
}


function toxml(myfilename){
  mycharset = getEncodingFromExtension(myfilename);
  if(mycharset == "") exit();

  var streamsj = new ActiveXObject("ADODB.Stream");
  streamsj.charset='shift_JIS';
  streamsj.type = adTypeText;
  streamsj.open();
  streamsj.loadFromFile(myfilename);
  streamsj.position = 0;
  var textsj = streamsj.readText();
  streamsj.close();

  var streamks = new ActiveXObject("ADODB.Stream");
  streamks.charset=mycharset;
  streamks.type = adTypeText;
  streamks.open();
  streamks.loadFromFile(myfilename);
  streamks.position = 0;
  var textks = streamks.readText();
  streamks.close();


  mystr = "<?xml version=\"1.0\"?>\n";
  mystr += "<tangocho>\n";
  arraysj = textsj.split("\n");
  arrayks = textks.split("\n");
  for(i = 2;i+3<arraysj.length;i=i+4) {
  	mystr += "<data>\n";
  	mystr += "  <yaku>\n    ";
  	mystr += arraysj[i];
  	mystr += "\n  </yaku>\n";
  	mystr += "  <yomi>\n    ";
  	mystr += arraysj[i+1];
  	mystr += "\n  </yomi>\n";
  	mystr += "  <bikou>\n    ";
  	mystr += arraysj[i+2];
  	mystr += "\n  </bikou>\n";
  	mystr += "\n  <tango>\n    ";
  	mystr += arrayks[i+3];
  	mystr += "\n  </tango>\n";
  	mystr += "</data>\n\n";
  }
  mystr += "</tangocho>\n";
  return mystr;
}

/* 文字列mydataをmyfilenameというファイルに保存する。 */
function writeData(mydata, myfilename) {
  var f;
  var i=0;
  try{
    f = fso.CreateTextFile(myfilename,true,-1);
    // ファイルの形式はUnicodeとして(3番目の引数が"-1")
    f.write(mydata);
    f.close();
  }catch(error){
    WScript.Echo("ファイルが開けません。\nERROR");
    return;
  }
}

/*ここからがmain */
var argLen = WScript.Arguments.length;
// ここの添字を最初「i」にしていたら、
// ループがうまく動かなかったので、
// 「j」に替えました。
for(var j=0; j < argLen; j++) {
  myfilename = WScript.Arguments(j);
  xmldata = toxml(myfilename);
  outfilename = myfilename + ".xml";
  writeData(xmldata,outfilename);
}
WScript.Echo("終了");
