rpgmaker-linux/nwjs/packagefiles/plugins/Clipboard_llule.js
2024-05-30 16:48:56 +03:00

258 lines
No EOL
8.2 KiB
JavaScript

//=============================================================================
// 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 = "。\r\n";
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);
};