「全角/半角 トグル変換」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Sukemaru (トーク | 投稿記録)
メモ: 追記
Sukemaru (トーク | 投稿記録)
更新
1行目: 1行目:
選択範囲の文字列の '''全角/半角 トグル変換'''
選択範囲の文字列の '''全角/半角 トグル変換'''


*選択範囲なしのときは、カーソル位置の単語を範囲選択する。
*<span style="color:#0000c0;">選択範囲がないときは、カーソル位置の単語を範囲選択して変換します</span>(変換後に範囲選択を解除する)。


*選択範囲の文字列が変更されなかったときは履歴を巻き戻して「変更行」のマーキングを残さない(はず)。
*「全角/半角変換」されなかったときは、編集履歴を巻き戻して「'''変更行'''」の強調表示や「未保存<b style="color:#c00;">*</b>」のフラグを残さないようにしてあります。




11行目: 11行目:


== ソースコード ==
== ソースコード ==
;ダウンロード
: 「[[ファイル:全角/半角 トグル変換.zip]]」(アイコン入り)


;ダウンロード: 「[[ファイル:全角/半角 トグル変換.zip]]」(アイコン入り)
*2019/05/20: 初版
*2019/05/20: 初版
<source lang="javascript">
*2020/07/03: Mery ver 3.0.1 以降の '''マルチカーソル'''(ゼロ幅選択範囲)と矩形選択範囲を復帰し、連続実行でトグル変換できるようにした
 
<source lang="javascript" highlight="39">
#title = "全角/半角変換"
#title = "全角/半角変換"
#tooltip = "全角/半角 トグル変換"
#tooltip = "全角/半角 トグル変換"
// #icon = "AA[4].ico"
#icon = "AA[4].ico"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",308


/**
* ---------------------------------------------------------
* 「全角/半角 トグル変換」マクロ
* sukemaru, 2019/05/20 - 2020/07/03
* ---------------------------------------------------------
* 2020/07/03: Mery ver 3.0.1 以降の「マルチカーソル」のゼロ幅選択範囲の復帰に対応
*
* 選択範囲の「全角 ⇔ 半角」トグル変換
*
* 選択範囲がなければカーソル位置の単語を自動選択して変換
* (変換後に範囲選択を解除する)
*
* 変換されなかったときは「変更行」の強調表示や「未保存*」のフラグを残さない
*/
var sx = ScrollX,  sy = ScrollY;
var d = editor.ActiveDocument;
var d = editor.ActiveDocument;
var s = editor.ActiveDocument.selection;
var s = d.selection;
var pos = -1;
var sv = d.Saved;
var sMode = s.Mode;


// 非選択時には単語を選択
// 非選択時には単語を選択
if ( s.IsEmpty ) {
if ( s.IsEmpty ) {
   var pos = s.GetActivePos();
   pos = s.GetActivePos();
  /* マルチカーソル対応 */
  if ( sMode == 3 ) {
    var sCount = s.Count,  Sel = [];
    for ( var i = 0; i < sCount; i ++ ) {
      Sel.push( s.GetActivePos( i ) );
    }
    Sel.push( pos );
  }
   s.SelectWord();
   s.SelectWord();
}
}
var st = s.Text;
var st = s.Text;
var sv = d.Saved;


if ( st ) {
if ( d.ReadOnly ) {
   s.ChangeWidth( meWidthHalfWidth );
  Status = " このドキュメントは書き換え禁止です。";
   if ( s.Text == st ) {
}
 
// 全角/半角変換
else if ( st ) {
  if ( sMode > 1 ) { BeginUndoGroup(); }
   s.ChangeWidth( meWidthHalfWidth ); // 半角に変換
   if ( s.Text === st ) {
     d.Undo();
     d.Undo();
     s.ChangeWidth( meWidthFullWidth );
     s.ChangeWidth( meWidthFullWidth ); // 全角に変換
     if ( s.Text == st ) {
     if ( s.Text === st ) {
       d.Undo();
       d.Undo();
       d.Saved = sv;
       d.Saved = sv;
     }
     }
   }
   }
   if ( pos >= 0 ) {
   if ( sMode > 1 ) { EndUndoGroup(); }
    s.SetActivePos( pos );
}
 
if ( pos > -1 ) {
  s.SetActivePos( pos );
  /* マルチカーソル対応 */
  if ( sMode === 3 ) {
    for ( var i = 0, len = sCount + 1; i < len; i ++ ) {
      s.AddPos( Sel[i] );
    }
   }
   }
}
}
if ( d.ReadOnly ) {
ScrollX = sx;  ScrollY = sy;
  Status = " このドキュメントは書き換え禁止です。";
}
</source>
</source>


== メモ ==
== メモ ==
*アルファベットや数字、記号、カタカナが混在していても使いやすいよう、「選択範囲なしのときは、カーソル位置の単語を範囲選択する」仕様にしてあります。<br> 「行全体を自動選択する」仕様に変更したい場合は、ソースコード内の ''s.SelectWord();'' の行を以下のように書き換えてください。
* アルファベットや数字、記号、カタカナが混在していても使いやすいよう、「選択範囲なしのときは、カーソル位置の単語を自動選択する」仕様にしてあります。<br> 「行全体を自動選択する」仕様に変更したい場合は、ソースコード内の <code>s.SelectWord();</code> の行を以下のように書き換えてください。
  ''s.SelectLine();''


*大文字/小文字変換と同じように変換実行前の文字列の構成から変換可能であるかを判別するのは面倒なので、「半角に変換」を実行→文字列に変更がなければ「全角に変換」を実行→文字列に変更がなければ undo する、という仕様にしてあります。<br> <s>なんらかの条件により undo 処理が誤爆する可能性もあるので、とりあえず【実験】マクロという扱いで置いておきます。
<source lang="javascript" highlight="1">
:※ <u>'''d.Undo();''' の行2ヶ所をコメントアウトすれば、なんら憂慮なく使用できます</u>が、文字列に変更がなかった場合にも「未保存*」フラグ、「変更行」の強調表示、アンドゥ履歴(操作履歴)が残ります。</s>
  s.SelectLine();
:sukemaru の自家使用では誤爆などのバグが発生しないようなので、'''【実験】'''カテゴリから '''変換・ソート・整形''' カテゴリに移動しました。(2019/07/06 sukemaru)
</source>
<br>
* 変換実行前の文字列の構成から変換可能であるかを判別する前処理を仕込むのは複雑そうなので、「半角に変換」を実行 文字列に変更がなければ「全角に変換」を実行 → 文字列に変更がなければ UNDO する、という仕様にしてあります。

2020年7月3日 (金) 00:01時点における版

選択範囲の文字列の 全角/半角 トグル変換

  • 選択範囲がないときは、カーソル位置の単語を範囲選択して変換します(変換後に範囲選択を解除する)。
  • 「全角/半角変換」されなかったときは、編集履歴を巻き戻して「変更行」の強調表示や「未保存*」のフラグを残さないようにしてあります。


大文字/小文字の相互変換は >> 「大文字/小文字/頭文字 トグル変換」マクロ
全角または半角を指定しての変換は >> 「全角/半角変換」マクロ(※要 GetKeyState.exe


ソースコード

ダウンロード
ファイル:全角/半角 トグル変換.zip」(アイコン入り)
  • 2019/05/20: 初版
  • 2020/07/03: Mery ver 3.0.1 以降の マルチカーソル(ゼロ幅選択範囲)と矩形選択範囲を復帰し、連続実行でトグル変換できるようにした
#title = "全角/半角変換"
#tooltip = "全角/半角 トグル変換"
#icon = "AA[4].ico"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",308

/**
 * ---------------------------------------------------------
 * 「全角/半角 トグル変換」マクロ
 * sukemaru, 2019/05/20 - 2020/07/03
 * ---------------------------------------------------------
 * 2020/07/03: Mery ver 3.0.1 以降の「マルチカーソル」のゼロ幅選択範囲の復帰に対応
 * 
 * 選択範囲の「全角 ⇔ 半角」トグル変換
 * 
 * 選択範囲がなければカーソル位置の単語を自動選択して変換
 * (変換後に範囲選択を解除する)
 * 
 * 変換されなかったときは「変更行」の強調表示や「未保存*」のフラグを残さない
 */

var sx = ScrollX,  sy = ScrollY;
var d = editor.ActiveDocument;
var s = d.selection;
var pos = -1;
var sv = d.Saved;
var sMode = s.Mode;

// 非選択時には単語を選択
if ( s.IsEmpty ) {
  pos = s.GetActivePos();
  /* マルチカーソル対応 */
  if ( sMode == 3 ) {
    var sCount = s.Count,  Sel = [];
    for ( var i = 0; i < sCount; i ++ ) {
      Sel.push( s.GetActivePos( i ) );
    }
    Sel.push( pos );
  }
  s.SelectWord();
}
var st = s.Text;

if ( d.ReadOnly ) {
  Status = " このドキュメントは書き換え禁止です。";
}

// 全角/半角変換
else if ( st ) {
  if ( sMode > 1 ) { BeginUndoGroup(); }
  s.ChangeWidth( meWidthHalfWidth );	// 半角に変換
  if ( s.Text === st ) {
    d.Undo();
    s.ChangeWidth( meWidthFullWidth );	// 全角に変換
    if ( s.Text === st ) {
      d.Undo();
      d.Saved = sv;
    }
  }
  if ( sMode > 1 ) { EndUndoGroup(); }
}

if ( pos > -1 ) {
  s.SetActivePos( pos );
  /* マルチカーソル対応 */
  if ( sMode === 3 ) {
    for ( var i = 0, len = sCount + 1; i < len; i ++ ) {
      s.AddPos( Sel[i] );
    }
  }
}
ScrollX = sx;  ScrollY = sy;

メモ

  • アルファベットや数字、記号、カタカナが混在していても使いやすいよう、「選択範囲なしのときは、カーソル位置の単語を自動選択する」仕様にしてあります。
    「行全体を自動選択する」仕様に変更したい場合は、ソースコード内の s.SelectWord(); の行を以下のように書き換えてください。
  s.SelectLine();


  • 変換実行前の文字列の構成から変換可能であるかを判別する前処理を仕込むのは複雑そうなので、「半角に変換」を実行 → 文字列に変更がなければ「全角に変換」を実行 → 文字列に変更がなければ UNDO する、という仕様にしてあります。
スポンサーリンク