- 作成者投稿
- 2010年8月10日 6:12 pm #96931da2メンバー
が、Version 10.0.0で動作しなかったので修正しました。
※メンテしやすいように大幅に変更してしまいましたが。。Vistaの64ビット、7の32bitで動作確認をしました。
元々の作者さま、ありがとうございます。
var lines = document.selection.Text.replace(/(rn|r)/g,”n”).split(“n”);
var l_num = lines.length; //行数
var c_num = 0; //列数
var cc_num = new Array(); //各列の最大バイト数for(var i = 0; i < l_num; i++){ //最大列数の計算 lines=lines.split(“t”);
if(lines.length>c_num){
c_num=lines.length;
}//各列の最大文字数を計算
for(var j = 0; j.length;j++){
var cell_bytenum=lenB(lines[j]);
if (!cc_num[j]){ //未定義用処理
cc_num[j]=0;
}
if(cell_bytenum>cc_num[j]){
cc_num[j]=cell_bytenum;
}
}
}//罫線が2byte文字なので、各列の文字バイト数を2byteに揃える
for ( var i in cc_num){
cc_num = Math.round(cc_num/2)*2;
}l_op = prompt( “線種を選んで下さい(1:普通 2:外枠だけ太く 3:太く)”, “1” ) – 0;
switch(l_op){
case 3 : l=”┏━┳┓┃┃┣━╋┫┗┻┛”;break; //太く
case 2 : l=”┏━┯┓┃│┠─┼┨┗┷┛”;break; //外枠だけ太く
default: l=”┌─┬┐││├─┼┤└┴┘”;break; //普通
}//先頭行、区切り行、終端行の作成
p_str = c(0);
MatrMid = c(6);
MatrEnd = c(10);for (var i=0; i
/2; j++){
p_str += c(1);
MatrMid += c(7);
MatrEnd += c(1);
}
if (i != cc_num.length -1){
p_str += c(2);
MatrMid += c(8);
MatrEnd += c(11);
}else{
p_str += c(3);
MatrMid += c(9);
MatrEnd += c(12);
}
}
//終端行以外は、改行を追加
p_str += “n”;
MatrMid += “n”;//データ行の作成
for(i in lines){
MatrInt=c(4);
for(var j=0;j[j]){
MatrInt += lines[j];
}
if (lenB(lines[j]) != cc_num[j]){
for (var k=0; k< (cc_num[j]-lenB(lines[j]))/1; k++){
MatrInt += ” “;
}
}
if (j!=c_num-1){
MatrInt += c(5);
}else{
MatrInt += c(4);
}
}
p_str+=MatrInt+”n”;//最後の行以外は区切り行を追加
if (i != lines.length -1 ){
p_str+=MatrMid;
}
}p_str += MatrEnd;
document.selection.Text = p_str; //出力
/***** function *****/
function c(n){return l.charAt(n);} //指定した罫線を返す(文字数削減のために搭載)function lenB(str) { //文字のバイト長を返す
if (str){//未定義用処理
var result = 0;
for(var i = 0; i < str.length ; i++){ if(str.charCodeAt(i) >= 256){
result+=2;
}else{
result++;
}
}
return result;
}
return 0;
}
2010年12月4日 12:20 am #100221da2メンバーSNOWさんが効率化をしてくださいました。
ありがとうございます。var lines = document.selection.Text.replace(/(rn|r)/g, “n”).split(“n”);
var l_num = lines.length; //行数
var c_num = 0; //列数
var cc_num = []; //各列の最大バイト数for (var i = 0; i c_num) {
c_num = ln.length;
}//各列の最大文字数を計算
for(var j = 0, n = ln.length; j (cc_num[j] || 0)) {
cc_num[j] = cell_bytenum;
}
}
}var l_op = prompt( “線種を選んで下さい(1:普通 2:外枠だけ太く 3:太く)”, “1” ) – 0;
switch (l_op) {
case 3 : var c = “┏━┳┓┃┃┣━╋┫┗┻┛”.split(“”); break; //太く
case 2 : var c = “┏━┯┓┃│┠─┼┨┗┷┛”.split(“”); break; //外枠だけ太く
default: var c = “┌─┬┐││├─┼┤└┴┘”.split(“”); break; //普通
}//先頭行、区切り行、終端行の作成
var p_str = c[0];
var MatrMid = c[6];
var MatrEnd = c[10];for (var i = 0, n = cc_num.length; i < n; i++) {
for (var j = 0, m = cc_num / 2; j < m; j++) {
p_str += c[1];
MatrMid += c[7];
MatrEnd += c[1];
}
if (i != cc_num.length -1) {
p_str += c[2];
MatrMid += c[8];
MatrEnd += c[11];
} else {
p_str += c[3];
MatrMid += c[9];
MatrEnd += c[12];
}
}//終端行以外は、改行を追加
p_str += "rn";
MatrMid += "rn";//データ行の作成
for (i in lines) {
var ln = lines;
var MatrInt = c[4];
for (var j = 0; j < c_num; j++) {
MatrInt += ln[j] || "";
for (var k = 0, n = cc_num[j] – lenB(ln[j]); k < n; k++) {
MatrInt += " ";
}
MatrInt += c[(j != c_num – 1) ? 5 : 4];
}
p_str += MatrInt + "rn";//最後の行以外は区切り行を追加
p_str += (i != lines.length -1) ? MatrMid : MatrEnd;
}document.selection.Text = p_str; //出力
/***** function *****/
function lenB(str) { //文字のバイト長を返す
if (!str) {
return 0; //未定義用処理
}var result = 0;
for (var i = 0, n = str.length; i = 256) ? 2 : 1;
}
return result;
}
- 作成者投稿
- このトピックに返信するにはログインしてください。