//=============================================================================

// Libellule Text extractor to clipboard plugin 

// Clipboard_llule.js

//=============================================================================

/* 

 * Install and configure with the patcher here : 

 * https://www.dropbox.com/sh/p83yxde8e8nrz35/AADkJzbz7VuM7HqwiwhhfhHTa?dl=0

 * Help : http://www.ulmf.org/bbs/showthread.php?t=29359

 */

//=============================================================================
TimerMil = 200;
WantCmdItemSeparator = true;
CmdItemSeparator = "。";
ShowCodeColor =  false;
ForceNameSeparator =  false;
TextSeparatorLeft = String.fromCharCode(12300);
TextSeparatorRight = String.fromCharCode(12301);
NameCodeColor = ["#ffffa0","#40c0f0","#ff80ff","#80ff80","#66cc40"];

IgnoreRepeatableItem = true;
BloctextSeparator = true;
IgnoreRepeatablebloc = true;
var IgnoreRegExtextbloc = [/^\d\d:\d\d($|.$|。$)/,/(^([,.\d]+)([,.]\d+)?)(\uFF27($|。$)|G($|。$)|$|。$)/,/^(\uFF27($|。$)|G($|。$))/];
ClipLogerOnStart = true;
WantChoiceSeparator = true;
ChoiceSeparator = "。\r\n";
TextWaitingTimeOFF = true;
var ClipLoger = "";LastItem = "";ColorEnCour = "";ActualThis = "";StarTextNamefound = false;EndTextNamefound = false;BlocSeparatorLeft = String.fromCharCode(12300);BlocSeparatorRight = String.fromCharCode(12301);LastColor = "";MemText = "";LastMemTextSend = "";ClipTimerOn = false;SaveOrgDrawText = Bitmap.prototype.drawText;var gui = require('nw.gui');var clipboard = gui.Clipboard.get();var win = gui.Window.get();var SaveoldInput_onKeyDown = Input._onKeyDown;var Savewindowonload = window.onload;var choices_encour = [];Bitmap.prototype.drawText = function(text, x, y, maxWidth, lineHeight, align) {OptionalText = "";pass = true;if(text) {

if(text.length == 1 && y >= this.height) {pass = false;}

if(IgnoreRepeatableItem && text.length > 1) {if(text == LastItem) {pass = false;}LastItem = text;}if(pass) {if(ShowCodeColor) {if(this.textColor != LastColor) {OptionalText = "<" + this.textColor + ">";LastColor = this.textColor;}}if(ForceNameSeparator && text.length == 1) {if(!ClipTimerOn && (NameCodeColor.indexOf(this.textColor) > -1)) {LastColor = this.textColor;StarTextNamefound = true;ColorNameEnCour = this.textColor;}if(ClipTimerOn && StarTextNamefound && (this.textColor != ColorNameEnCour)) {OptionalText = OptionalText + TextSeparatorLeft;StarTextNamefound = false;EndTextNamefound = true;}}if(BloctextSeparator) {if(ActualThis == "") {ActualThis = this;OptionalText = OptionalText + BlocSeparatorLeft;} else {if(ActualThis != this) {OptionalText = OptionalText + BlocSeparatorRight + "\r\n" + BlocSeparatorLeft;ActualThis = this;}}if($gameMessage != null){if($gameMessage.isChoice() && !choices_encour.length) {choices_encour = $gameMessage._choices;}}}if(ClipTimerOn) {if(text.length > 1 && WantCmdItemSeparator) {MemText = MemText + OptionalText + text + CmdItemSeparator;} else {MemText = MemText + OptionalText + text;}} else {if(text.length > 1 && WantCmdItemSeparator) {MemText = OptionalText + text + CmdItemSeparator;} else {MemText = OptionalText + text;}ClipTimerOn = true;ClipTimer = setTimeout(ClipTimerSend, TimerMil);}}}SaveOrgDrawText.call(this, text, x, y, maxWidth, lineHeight, align);};function ClipTimerSend() {if(BloctextSeparator) {MemText = MemText + BlocSeparatorRight;KickOutDuplicateBloc();}if(EndTextNamefound) {MemText = MemText + TextSeparatorRight;StarTextNamefound = false;EndTextNamefound = false;if(BloctextSeparator) {KickOutDuplicateBloc();}}if(MemText != "") {clipboard.set(MemText, 'text');LastMemTextSend = MemText;}ClipTimerOn = false;ActualThis = "";LastColor = "";ColorNameEnCour = "";};var LibWindow_Message_prototype_clearFlags = Window_Message.prototype.clearFlags;Window_Message.prototype.clearFlags = function() {LibWindow_Message_prototype_clearFlags.call(this);this._showFast = true;this._lineShowFast = true;this._pauseSkip = false;};function LaunchCliploger() {Path = process.cwd() + "\\www\\js\\plugins";var execFile = require('child_process').execFile;ClipLoger = execFile(Path + "\\ClipLoger.exe", function(error, stdout, stderr) {ClipLoger = "";});if(!ClipLoger.pid) {alert(Msg1);return;}setTimeout(Focus, 500);};function Focus() {if(ClipLoger.pid) {win.focus();} else {setTimeout(Focus, 500);}};Input._onKeyDown = function(event) {if(event.keyCode == 118) {clipboard.set(LastMemTextSend, 'text');}if(event.keyCode == 117) {if(ClipLoger.pid) {ClipLoger.kill();} else {LaunchCliploger();}}if(event.keyCode == 116) {if(ClipLoger.pid) {ClipLoger.kill();}}SaveoldInput_onKeyDown.call(this, event);};window.onload = function() {if(ClipLogerOnStart) {LaunchCliploger();}Savewindowonload.call(this);};function KickOutDuplicateBloc() {var Bloc = MemText.split("\r\n");var output = [];var Deleteone = "";if(choices_encour.length && WantChoiceSeparator) {var temps = choices_encour[0].replace(/\\C\[\d+\]/gi, "");var With = BlocSeparatorLeft + temps;var Deleteone = With;for(i = 1; i < choices_encour.length; i++) {temps = choices_encour[i].replace(/\\C\[\d+\]/gi, "");With = With + ChoiceSeparator + temps;Deleteone = Deleteone + temps;}With += BlocSeparatorRight;output.push(With);Deleteone += BlocSeparatorRight;choices_encour = [];}for(var i = 0; i < Bloc.length; i++) {if(output.indexOf(Bloc[i]) < 0) {if(RegEXspeIgnore(Bloc[i]) && Deleteone != Bloc[i]) {output.push(EraseDoubleSeparator(Bloc[i]));}}}MemText = output.join("\r\n");};function RegEXspeIgnore(Bloc) {BlocS = Bloc.slice(1, Bloc.length - 1);if(IgnoreRegExtextbloc.length != 0) {for(var i = 0; i < IgnoreRegExtextbloc.length; i++) {if(BlocS.search(IgnoreRegExtextbloc[i]) != -1) {return false;}}return true;} else {return true;}};function EraseDoubleSeparator(Bloc) {if((Bloc.split(BlocSeparatorLeft).length) == 3) {if((Bloc.split(BlocSeparatorRight).length) == 3) {return Bloc.slice(1, Bloc.length - 1);}}return Bloc;};Msg1 = "ClipLoger.exe not found\r\nReinstal the plugin from the patcher\r\n";var Save_Window_Message_prototype_updateWait = Window_Message.prototype.updateWait;Window_Message.prototype.updateWait = function() {if (ClipTimerOn && TextWaitingTimeOFF) {this._waitCount = 0;}return Save_Window_Message_prototype_updateWait.call(this);};
