クリップボードのJScriptを整形するスクリプト 2012-09-27 (Thu) 00:14

WSHでクリップボードを扱う その1
WSHでクリップボードを扱う その2
の続き。

WSHでクリップボードを扱う その2で作っておいた getClipboard()、setClipboard() を使って Online JavaScript Beautifier で公開されている整形スクリプト(JSBeautifier.js)を呼び出す。
正確には JSBeautifier.jsの js_beautify() を呼び出す。

具体的な手順は以下の通り。

1.予め任意のエディタ等で JScriptの整形前のコードをクリップボードに格納しておく。
2.getClipboard() でそれを取得して、js_beautify()に渡す。
3.整形後のコードを setClipboard()でクリップボードに格納する。


	var GMEM_MOVEABLE = 0x2;
var GMEM_ZEROINIT = 0x40;
var GHND = (GMEM_MOVEABLE | GMEM_ZEROINIT);
var CF_TEXT = 1;

function getClipboard(){
var rtn = '';
var Win32API = new ActiveXObject('SfcMini.DynaCall');
function IsSjisLeadByte(x){
return ((x >= 0x81 && x <= 0x9f) || (x >= 0xE0 && x <= 0xFC))?true:false;
}
Win32API.LoadLibraries('user32','kernel32');
if(!Win32API.OpenClipboard(0)){
return '';
}
var hMem = Win32API.GetClipboardData(CF_TEXT);
if(hMem){
var data = new ActiveXObject('SfcMini.Structure');
var term = new ActiveXObject('SfcMini.Structure');
term('code','Byte','dummy','String*4');
data('str', 'String*4');
var ptr = Win32API.GlobalLock(hMem);
if(!ptr){
Win32API.CloseClipboard();
return '';
}
var lenB = Win32API.lstrlen(ptr);
for(var i = 0; i < lenB; i++){
Win32API.lstrcpyn(term, ptr + i, 2);
if(IsSjisLeadByte(term.code))
Win32API.lstrcpyn(data, ptr + (i++), 3);
else
Win32API.lstrcpyn(data, ptr + i, 2);
rtn += data.str;
}
Win32API.GlobalUnlock(hMem);
}
Win32API.CloseClipboard();
return rtn;
}
function setClipboard(str){
var Win32API = new ActiveXObject('SfcMini.DynaCall');
Win32API.LoadLibraries('user32','kernel32');

var hMem = Win32API.GlobalAlloc(GHND, Win32API.lstrlen(str) + 4);
if(!hMem){
return false;
}
var ptr = Win32API.GlobalLock(hMem);
if(!ptr){
Win32API.GlobalFree(hMem);
return false;
}
Win32API.lstrcpy(ptr, str);
Win32API.GlobalUnlock(hMem);
if(!Win32API.OpenClipboard(0)){
return false;
}
Win32API.EmptyClipboard();
Win32API.SetClipboardData(CF_TEXT, hMem);
Win32API.GlobalFree(hMem);
Win32API.CloseClipboard();
return true;
}
var BeautifyPath = 'JSBeautifier.jsのパス';
var fs = new ActiveXObject('Scripting.FileSystemObject');
var BeautifyFile = fs.OpenTextFile(BeautifyPath);
var BeautifyContent = BeautifyFile.ReadAll();
BeautifyFile.Close();
eval(BeautifyContent);

var targetContent = getClipboard();
try{
var src = unescape(decodeURI(targetContent));
}
catch(e){
var src = targetContent;
}
var out = js_beautify(src, { 'indent_size': 1,'indent_char': '\t' });
setClipboard(out);
関連記事

コメントの投稿

管理者にだけ表示を許可する

注意事項
基本的にこのブログはブログ主の備忘録です。

ブログの内容にはブログ主の主観や時には正確でない情報が含まれていることもあります。書いてある内容がすべての環境にあてはまることを保証するものでもありません。
また過去の記事の情報はそれが参照された時点では既に陳腐化していることもあります。

その辺をご理解の上で当ブログ内に書いてあることを試す場合は自己責任でお願いします。

万一何らかの損害が生じても責任は持てませんのであしからず!

記事内容の誤りの指摘、疑問点の回答などコメント頂けると助かります。
カレンダー
03 | 2017/04 | 05
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
ブログ内検索
カラーコードチェッカ
カラーコードの確認
入力例) #ffffff | blue
カテゴリ
最新記事
最新コメント
最新トラックバック
リンク
ブロとも申請フォーム

この人とブロともになる

メールフォーム

名前:
メール:
件名:
本文: