「字下げ・字上げ」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Masme (トーク | 投稿記録)
マクロ修正
Sukemaru (トーク | 投稿記録)
sukemaru版を追加
4行目: 4行目:
[[ファイル:Indent-Unindent.png]]
[[ファイル:Indent-Unindent.png]]


= masme 版 =
==更新履歴==
==更新履歴==
* 2015/02/14
* 2015/02/14
67行目: 68行目:
   SetActivePoint(mePosLogical, 1, by+1);
   SetActivePoint(mePosLogical, 1, by+1);
   SetAnchorPoint(mePosLogical, 1, ty);
   SetAnchorPoint(mePosLogical, 1, ty);
}
</source>
= sukemaru 版 =
<br>
ダウンロード: 「[[メディア:スペース×2_追加/削除.zip|スペース×2 追加/削除.zip]](アイコン入り)」
== 字下げ ==
スペース×2 追加.js
<br>
キャレットまたは選択範囲をふくむ論理行の各先頭に「半角スペース×2」を追加します。
* 選択範囲がなかった場合は「タブ文字」を追加、または「半角スペース×2」を行頭に追加します。
* 選択範囲があった場合は、つねに「半角スペース×2」を行頭に追加します。
* 行頭に「半角スペース×2」を追加する場合は、空行を無視します。
* 選択範囲が末尾に改行を含んでいた場合は、最後の改行を無視します。
<source lang="javascript">
#title = "スペース×2 追加"
#tooltip = "行頭に スペース×2 を追加する"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",247
// 選択範囲がなかった場合は「タブ文字」を追加、または「半角スペース×2」を行頭に追加する
// 選択範囲があった場合は、つねに「半角スペース×2」を行頭に追加する(空行は無視)
// ■選択範囲なしのときには「タブ文字×1」を追加するか?
var tabEnable = 0;
  // 0 なら、「半角スペース×2」を行頭に追加する(空行は無視)
  // 1 なら、選択範囲なしのときは「タブ文字×1」を行頭に追加する
  // 2 なら、選択範囲なしのときは「タブ文字×1」をキャレット位置に追加する
// ■行頭に追加する空白文字の定義(初期値:「半角スペース×2」)
var blank = "  "; // 半角スペース×2
var s = document.selection;
var pos = ( s.IsEmpty ) ? s.GetActivePos() : "";
// ■選択範囲なしのときに、キャレット位置に「タブ文字×1」
if ( pos && tabEnable > 1 ) { // tabEnable == 2
  s.Text = "\t";  Quit();
}
var sx = ScrollX,  sy = ScrollY;
// 選択範囲を取得
var ty = s.GetTopPointY( mePosLogical );
var bx = s.GetBottomPointX( mePosLogical );
var by = s.GetBottomPointY( mePosLogical );
// 選択範囲を拡張
if ( by != ty && bx == 1 )
  by -= 1;
s.SetActivePoint( mePosLogical, 1, by );
s.EndOfLine( false, mePosLogical );
s.SetAnchorPoint( mePosLogical, 1, ty );
// 選択範囲の文字列を取得
var st = s.Text;
// ■最初に選択範囲がなかった場合は、行頭に「タブ文字×1」を追加
if ( pos && tabEnable == 1 ) {
  var tab = "\t";
  s.Text = InsertSpace( s.Text, tab );
  s.SetActivePos( pos + tab.length ); // 範囲選択を残さない
}
// ■選択範囲があった場合は、行頭に「半角スペース×2」を追加(空行は無視)
else { // ( ! pos || tabEnable == 0 )
  var t = InsertSpace( st, blank );
  if ( t != st )
    s.Text = t;
  if ( pos ) // 範囲選択を残さない
    s.SetActivePos( pos + ( t.length - st.length ) );
  else { // 範囲選択を残す
    s.SetActivePoint( mePosLogical, 1, by + 1 );
    s.SetAnchorPoint( mePosLogical, 1, ty );
  }
}
ScrollX = sx;  ScrollY = sy;
// 「引用の追加」マクロから拝借した
function InsertSpace( arg1, arg2 ) {
  var a = arg1.split( "\n" );
  for ( var i = 0; i < a.length; i ++ )
    if ( a[i].length || arg2 == "\t" )
      a[i] = arg2 + a[i];
  return a.join( "\n" );
}
</source>
== 字上げ ==
スペース×2 削除.js
<br>
キャレットまたは選択範囲をふくむ論理行の各先頭から「半角スペース×2」を削除します。
* 行頭の「空白文字」を削除、またはキャレット位置の前後にある「タブ文字」を削除します。
* 選択範囲があった場合は、つねに行頭の「空白文字」だけを削除します。
* 削除対象の行頭の「空白文字」には「半角スペース×2」以外の空白文字もふくめます。
: ''i.e.'' 「半角スペース×2」「半角スペース×1」「全角スペース×1」「タブ文字×1」
* 選択範囲が末尾に改行を含んでいた場合は、最後の改行を無視します。
<source lang="javascript">
#title = "スペース×2 削除"
#tooltip = "行頭の スペース×2 を削除する"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",249
// 行頭の「空白文字」を削除/またはキャレット位置の前後にある「タブ文字」を削除する
// 選択範囲があった場合は、つねに行頭の「空白文字」だけを削除する
// ■選択範囲なしのときに、キャレット位置の前後にある「タブ文字」を優先的に削除するか?
var nearestTab = true;
  // false にすると、つねに行頭の空白文字のみを削除
  // true にすると、キャレット付近の「タブ文字×1」を優先的に削除(タブ文字がなければ行頭の空白を削除)
// ■削除対象(削除の単位)にする行頭の空白文字の定義
var blank = new Array( "  " , " " , " " , "\t" );
  // 前に置いたもののほうが優先順位が高くなるので、行頭に半角スペースが3つある行で連続で実行した場合、
  // 1回目では「半角スペース×2」を削除し、2回目で「半角スペース×1」を削除する
var s = document.selection;
var pos = ( s.IsEmpty ) ? s.GetActivePos() : "";
// ■キャレット付近の「タブ文字×1」を優先的に削除
if ( pos && nearestTab ) {
  if ( document.Text.charAt( pos - 1 ) == "\t" ) {
    s.DeleteLeft();  Quit();
  }
  else if ( document.Text.charAt( pos ) == "\t" ) {
    s.Delete();  Quit();
  }
}
var sx = ScrollX,  sy = ScrollY;
// 選択範囲を取得
var ty = s.GetTopPointY( mePosLogical );
var by = s.GetBottomPointY( mePosLogical );
var bx = s.GetBottomPointX( mePosLogical );
// 選択範囲を拡張
if ( by != ty && bx == 1 )
  by -= 1;
s.SetActivePoint( mePosLogical, 1, by );
s.EndOfLine( false, mePosLogical );
s.SetAnchorPoint( mePosLogical, 1, ty );
// 選択範囲の文字列を取得
var st = s.Text;
// ■行頭の空白文字を削除
var t = DeleteSpace( st, blank );
if ( t != st )
  s.Text = t;
if ( pos ) // 範囲選択を残さない
  s.SetActivePos( pos - ( st.length - t.length ) );
else { // 範囲選択を残す
  s.SetActivePoint( mePosLogical, 1, by + 1 );
  s.SetAnchorPoint( mePosLogical, 1, ty );
}
ScrollX = sx;  ScrollY = sy;
// 「引用の追加」マクロから拝借した
function DeleteSpace( arg1, arg2 ) {
  var a = arg1.split( "\n" );
  for ( var i = 0; i < a.length; i ++ ) {
    for ( var j = 0; j < arg2.length; j ++ ) {
      if ( arg2[j].length == 0 )
        continue;
      if ( a[i].substr( 0, arg2[j].length ) == arg2[j] ) {
        a[i] = a[i].substr( arg2[j].length );
        break;
      }
    }
  }
  return a.join( "\n" );
}
}
</source>
</source>

2018年11月2日 (金) 00:36時点における版

論理行単位で字下げ・字上げします。
インデントには任意の文字列を設定できます。※初期設定は半角空白2個です。

masme 版

更新履歴

  • 2015/02/14
    • (字上げ) 「インデントの定義」に正規表現の特殊文字があると誤動作する不具合を修正。
    • 矩形選択(始点or終点が左下かつ論理行頭)時、下端の行が範囲から漏れる不具合を修正。
  • 2014/02/09
    • 初版公開。

字下げ (インデント)

  • 複数行選択時 (選択範囲が2行以上) は、字下げします。
    単一行選択時 (選択範囲が1行以内) または非選択時は、タブ文字を挿入します。
    ※選択範囲の行数は、ステータスバーの「xx文字 (xx行) 選択」の部分で判断してください。
  • 空行 (改行のみの行) は字下げされません。
  • 「Tab」キーなどに割り当ててご利用ください。
//■字下げ(インデント)
// 2014/02/09-2015/02/14
//・論理行単位で字下げする。空行は字下げしない。非選択時/単行選択時はタブ挿入。

//■インデントの定義 ●初期値="  " (半角空白2個)
var $indent = "  ";

with (Document.Selection) {
  //非選択時/単行選択時はタブ挿入して終了
  if (GetTopPointY(mePosView)==GetBottomPointY(mePosView)) {Text="\t"; Quit();}
  
  var ty = GetTopPointY(mePosLogical);
  var by = GetBottomPointY(mePosLogical);
  var bx = GetBottomPointX(mePosLogical);
  var br =(Text.match(/\n/g)||[]).length;
  if (bx==1 && by-ty==br && br) by--;	//次行行頭を含めないよう対策
  SetActivePoint(mePosLogical, 1, by+1);
  SetAnchorPoint(mePosLogical, 1, ty);
  Text = Text.replace(/^(?!$)/gm,$indent); //(空行を除く)行頭にインデントを付加
  SetActivePoint(mePosLogical, 1, by+1);
  SetAnchorPoint(mePosLogical, 1, ty);
}

字上げ (アンインデント)

  • 単一行選択時 (選択範囲が1行以内) または非選択時でも、字上げします。
  • 「Shift + Tab」キーなどに割り当ててご利用ください。
//■字上げ(アンインデント)
// 2014/02/09-2015/02/14
//・論理行単位で字上げする。非選択時/単行選択時でも字上げする。

//■インデントの定義 ●初期値="  " (半角空白2個)
var $indent = "  ";

with (Document.Selection) {
  //特殊文字をエスケープ
  $indent = new RegExp("^"+$indent.replace(/([$()*+.?[\\\]^{|}])/g,"\\$1"),"gm");
  
  var ty = GetTopPointY(mePosLogical);
  var by = GetBottomPointY(mePosLogical);
  var bx = GetBottomPointX(mePosLogical);
  var br =(Text.match(/\n/g)||[]).length;
  if (bx==1 && by-ty==br && br) by--;	//次行行頭を含めないよう対策
  SetActivePoint(mePosLogical, 1, by+1);
  SetAnchorPoint(mePosLogical, 1, ty);
  Text = Text.replace($indent,"");	//行頭のインデントを削除
  SetActivePoint(mePosLogical, 1, by+1);
  SetAnchorPoint(mePosLogical, 1, ty);
}


sukemaru 版


ダウンロード: 「スペース×2 追加/削除.zip(アイコン入り)」

字下げ

スペース×2 追加.js
キャレットまたは選択範囲をふくむ論理行の各先頭に「半角スペース×2」を追加します。

  • 選択範囲がなかった場合は「タブ文字」を追加、または「半角スペース×2」を行頭に追加します。
  • 選択範囲があった場合は、つねに「半角スペース×2」を行頭に追加します。
  • 行頭に「半角スペース×2」を追加する場合は、空行を無視します。
  • 選択範囲が末尾に改行を含んでいた場合は、最後の改行を無視します。
#title = "スペース×2 追加"
#tooltip = "行頭に スペース×2 を追加する"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",247

// 選択範囲がなかった場合は「タブ文字」を追加、または「半角スペース×2」を行頭に追加する
// 選択範囲があった場合は、つねに「半角スペース×2」を行頭に追加する(空行は無視)

// ■選択範囲なしのときには「タブ文字×1」を追加するか?
var tabEnable = 0;

  // 0 なら、「半角スペース×2」を行頭に追加する(空行は無視)
  // 1 なら、選択範囲なしのときは「タブ文字×1」を行頭に追加する
  // 2 なら、選択範囲なしのときは「タブ文字×1」をキャレット位置に追加する

// ■行頭に追加する空白文字の定義(初期値:「半角スペース×2」)
var blank = "  ";	// 半角スペース×2


var s = document.selection;
var pos = ( s.IsEmpty ) ? s.GetActivePos() : "";

// ■選択範囲なしのときに、キャレット位置に「タブ文字×1」
if ( pos && tabEnable > 1 ) {	// tabEnable == 2
  s.Text = "\t";  Quit();
}

var sx = ScrollX,  sy = ScrollY;
// 選択範囲を取得
var ty = s.GetTopPointY( mePosLogical );
var bx = s.GetBottomPointX( mePosLogical );
var by = s.GetBottomPointY( mePosLogical );
// 選択範囲を拡張
if ( by != ty && bx == 1 )
  by -= 1;
s.SetActivePoint( mePosLogical, 1, by );
s.EndOfLine( false, mePosLogical );
s.SetAnchorPoint( mePosLogical, 1, ty );

// 選択範囲の文字列を取得
var st = s.Text;

// ■最初に選択範囲がなかった場合は、行頭に「タブ文字×1」を追加
if ( pos && tabEnable == 1 ) {
  var tab = "\t";
  s.Text = InsertSpace( s.Text, tab );
  s.SetActivePos( pos + tab.length );	// 範囲選択を残さない
}

// ■選択範囲があった場合は、行頭に「半角スペース×2」を追加(空行は無視)
else {	// ( ! pos || tabEnable == 0 )
  var t = InsertSpace( st, blank );
  if ( t != st )
    s.Text = t;

  if ( pos )	// 範囲選択を残さない
    s.SetActivePos( pos + ( t.length - st.length ) );
  else {		// 範囲選択を残す
    s.SetActivePoint( mePosLogical, 1, by + 1 );
    s.SetAnchorPoint( mePosLogical, 1, ty );
  }
}
ScrollX = sx;  ScrollY = sy;

// 「引用の追加」マクロから拝借した
function InsertSpace( arg1, arg2 ) {
  var a = arg1.split( "\n" );
  for ( var i = 0; i < a.length; i ++ )
    if ( a[i].length || arg2 == "\t" )
      a[i] = arg2 + a[i];
  return a.join( "\n" );
}


字上げ

スペース×2 削除.js
キャレットまたは選択範囲をふくむ論理行の各先頭から「半角スペース×2」を削除します。

  • 行頭の「空白文字」を削除、またはキャレット位置の前後にある「タブ文字」を削除します。
  • 選択範囲があった場合は、つねに行頭の「空白文字」だけを削除します。
  • 削除対象の行頭の「空白文字」には「半角スペース×2」以外の空白文字もふくめます。
i.e. 「半角スペース×2」「半角スペース×1」「全角スペース×1」「タブ文字×1」
  • 選択範囲が末尾に改行を含んでいた場合は、最後の改行を無視します。
#title = "スペース×2 削除"
#tooltip = "行頭の スペース×2 を削除する"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",249

// 行頭の「空白文字」を削除/またはキャレット位置の前後にある「タブ文字」を削除する
// 選択範囲があった場合は、つねに行頭の「空白文字」だけを削除する

// ■選択範囲なしのときに、キャレット位置の前後にある「タブ文字」を優先的に削除するか?
var nearestTab = true;

  // false にすると、つねに行頭の空白文字のみを削除
  // true にすると、キャレット付近の「タブ文字×1」を優先的に削除(タブ文字がなければ行頭の空白を削除)

// ■削除対象(削除の単位)にする行頭の空白文字の定義
var blank = new Array( "  " , " " , " " , "\t" );

  // 前に置いたもののほうが優先順位が高くなるので、行頭に半角スペースが3つある行で連続で実行した場合、
  // 1回目では「半角スペース×2」を削除し、2回目で「半角スペース×1」を削除する


var s = document.selection;
var pos = ( s.IsEmpty ) ? s.GetActivePos() : "";

// ■キャレット付近の「タブ文字×1」を優先的に削除
if ( pos && nearestTab ) {
  if ( document.Text.charAt( pos - 1 ) == "\t" ) {
    s.DeleteLeft();  Quit();
  }
  else if ( document.Text.charAt( pos ) == "\t" ) {
    s.Delete();  Quit();
  }
}

var sx = ScrollX,  sy = ScrollY;
// 選択範囲を取得
var ty = s.GetTopPointY( mePosLogical );
var by = s.GetBottomPointY( mePosLogical );
var bx = s.GetBottomPointX( mePosLogical );
// 選択範囲を拡張
if ( by != ty && bx == 1 )
  by -= 1;
s.SetActivePoint( mePosLogical, 1, by );
s.EndOfLine( false, mePosLogical );
s.SetAnchorPoint( mePosLogical, 1, ty );

// 選択範囲の文字列を取得
var st = s.Text;

// ■行頭の空白文字を削除
var t = DeleteSpace( st, blank );
if ( t != st )
  s.Text = t;

if ( pos )	// 範囲選択を残さない
  s.SetActivePos( pos - ( st.length - t.length ) );
else {		// 範囲選択を残す
  s.SetActivePoint( mePosLogical, 1, by + 1 );
  s.SetAnchorPoint( mePosLogical, 1, ty );
}
ScrollX = sx;  ScrollY = sy;

// 「引用の追加」マクロから拝借した
function DeleteSpace( arg1, arg2 ) {
  var a = arg1.split( "\n" );
  for ( var i = 0; i < a.length; i ++ ) {
    for ( var j = 0; j < arg2.length; j ++ ) {
      if ( arg2[j].length == 0 )
        continue;
      if ( a[i].substr( 0, arg2[j].length ) == arg2[j] ) {
        a[i] = a[i].substr( arg2[j].length );
        break;
      }
    }
  }
  return a.join( "\n" ); 
}
スポンサーリンク