「大文字/小文字/頭文字 トグル変換」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Sukemaru (トーク | 投稿記録)
→ソースコード: 修正更新
Sukemaru (トーク | 投稿記録)
更新
1行目: 1行目:
編集メニュー >> 選択範囲を変換 の
編集メニュー >> 選択範囲を変換 の
*大文字に変換
* 大文字に変換
*小文字に変換
* 小文字に変換
*単語の最初の文字を大文字に変換
* 単語の最初の文字を大文字に変換
をトグル操作で実行します。
をトグル操作で実行します。


:選択範囲に大文字/小文字が混在 → 「大文字に変換」
: 選択範囲に大文字/小文字が混在 → 「大文字に変換」
:選択範囲が大文字のみ → 「小文字に変換」
: 選択範囲が大文字のみ → 「小文字に変換」
:選択範囲が小文字のみ → 「単語の最初の文字を大文字に変換」
: 選択範囲が小文字のみ → 「単語の最初の文字を大文字に変換」




変換を実行する前に「選択範囲に欧文文字があるかどうか」の判定をしない仕様なので、ラテンアルファベット(全角/半角 A~Z)以外にも、ローマ数字(Ⅰ~Ⅿ)やギリシャ文字(Α~Ω)、キリル文字(А~Я)、ダイアクリティカルマークつきの文字(À~Ý, Ç, Ş など)、リガチャ(合字 Æ, Œ など)等の追加文字にも対応します。[https://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%86%E3%83%B3%E6%96%87%E5%AD%97#%E4%BD%BF%E7%94%A8%E3%81%95%E3%82%8C%E3%82%8B%E6%96%87%E5%AD%97][https://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%86%E3%83%B3%E6%96%87%E5%AD%97%E4%B8%80%E8%A6%A7]  
変換を実行する前に「選択範囲に欧文文字があるかどうか」の判定をしない仕様となっています。<br>
ラテンアルファベット(全角/半角 A~Z)以外にも、ローマ数字(Ⅰ~Ⅿ)やギリシャ文字(Α~Ω)、キリル文字(А~Я)、ダイアクリティカルマークつきの文字(À~Ý, Ç, Ş など)、リガチャ(合字 Æ, Œ など)等の追加文字にも対応するようです。[https://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%86%E3%83%B3%E6%96%87%E5%AD%97#%E4%BD%BF%E7%94%A8%E3%81%95%E3%82%8C%E3%82%8B%E6%96%87%E5%AD%97][https://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%86%E3%83%B3%E6%96%87%E5%AD%97%E4%B8%80%E8%A6%A7]  




*範囲選択がないときは、カーソル位置から右側を単語選択して変換します(変換後に範囲選択を解除する)
* <span style="color:#0000c0;">選択範囲がないときは、'''キャレット位置より右側''' を単語選択して変換します</span>(変換後に範囲選択を解除する)。
*「大文字/小文字変換」されなかったときは、編集履歴を巻き戻して「'''変更行'''」の強調表示や「未保存'''*'''」のフラグを残さないようにしてあります
*「大文字/小文字変換」されなかったときは、編集履歴を巻き戻して「'''変更行'''」の強調表示や「未保存<b style="color:#c00;">*</b>」のフラグを残さないようにしてあります。




21行目: 22行目:


== ソースコード ==
== ソースコード ==
;ダウンロード: 「[[ファイル:大文字/小文字変換.zip]]」(アイコン入り)
;ダウンロード
: 「[[ファイル:大文字/小文字変換.zip]]」(アイコン入り)
 
*2019/05/11: 空行で実行すると無用にアンドゥするバグを修正
*2019/05/11: 空行で実行すると無用にアンドゥするバグを修正
*2019/05/20: 選択範囲が1文字のときに大文字に変換できない(「単語の最初の文字を大文字に変換」コマンドの仕様)不具合を修正
*2019/05/20: 選択範囲が1文字のときに大文字に変換できない(「単語の最初の文字を大文字に変換」コマンドの仕様)不具合を修正
*2019/08/29: 選択範囲が半角数字+半角英小文字( e.g. "1a" )のときなどに 「大文字に変換」されない不具合を修正
*2019/08/29: 選択範囲が半角数字+半角英小文字( e.g. "1a" )のときなどに 「大文字に変換」されない不具合を修正
*2020/07/03: Mery ver 3.0.1 以降の '''マルチカーソル'''(ゼロ幅選択範囲)と矩形選択範囲を復帰し、連続実行でトグル変換できるようにした


<source lang="javascript">
<source lang="javascript">
33行目: 38行目:


/**
/**
* ---------------------------------------------------------
* 「大文字/小文字/頭文字 トグル変換」マクロ
* sukemaru, 2019/05/10 - 2020/07/03
* ---------------------------------------------------------
* 2020/07/03: Mery ver 3.0.1 以降の「マルチカーソル」のゼロ幅選択範囲の復帰に対応
*
  * 選択範囲のトグル変換
  * 選択範囲のトグル変換
  *  大文字 → 小文字 → 先頭のみ大文字
  *  大文字 → 小文字 → 先頭のみ大文字
42行目: 53行目:
  */
  */


var sx = ScrollX,  sy = ScrollY;
var d = editor.ActiveDocument;
var d = editor.ActiveDocument;
var s = editor.ActiveDocument.selection;
var s = d.selection;
var saved = d.Saved;
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.WordRight( true );
   s.WordRight( true );
}
}
/* 矩形選択範囲 */
else if ( sMode == 2 ) {
  var act = s.GetActivePos(),  anc = s.GetAnchorPos();
}
var st = s.Text;
var st = s.Text;
var isCapitalized = false; // (※ 2019/08/29 追加)
var isCapitalized = false;


if ( d.ReadOnly ) {
if ( d.ReadOnly ) {
   Status = " このドキュメントは書き換え禁止です。";
   Status = " このドキュメントは書き換え禁止です。";
}
}
else if ( st ) {
else if ( st ) {
   // 選択範囲が大文字のみ → 「小文字に変換」
   // 選択範囲が大文字のみ → 「小文字に変換」
   if ( st.toLowerCase() != st
   if ( st.toLowerCase() !== st
     && st.toUpperCase() == st ) {
     && st.toUpperCase() === st ) {
     s.ChangeCase( meCaseLowerCase );
     s.ChangeCase( meCaseLowerCase );
   }
   }
   // 選択範囲が小文字のみ → 「単語の最初の文字を大文字に変換」
   // 選択範囲が小文字のみ → 「単語の最初の文字を大文字に変換」
   // ※ meCaseCapitalize を使えるのは ver 2.6.10 以降
   // ※ meCaseCapitalize を使えるのは ver 2.6.10 以降
   else if ( st.length > 1
   else if ( st.length > 1
         && st.toLowerCase() == st
         && st.toLowerCase() === st
         && st.toUpperCase() != st ) {
         && st.toUpperCase() !== st ) {
     editor.ExecuteCommandByID( MEID_EDIT_CAPITALIZE = 2116 );
     editor.ExecuteCommandByID( MEID_EDIT_CAPITALIZE = 2116 );
     // s.ChangeCase( meCaseCapitalize );
     // s.ChangeCase( meCaseCapitalize );
72行目: 104行目:
     // ※ 半角数字+半角英小文字( e.g. "1a" )のときなどは Capitalize されない
     // ※ 半角数字+半角英小文字( e.g. "1a" )のときなどは Capitalize されない
   }
   }
   // 選択範囲に大文字/小文字が混在 → 「大文字に変換」
 
   // 選択範囲に大文字/小文字が混在 → 「大文字に変換」
   else {
   else {
     s.ChangeCase( meCaseUpperCase );
     s.ChangeCase( meCaseUpperCase );
   }
   }
   // ChangeCase() で文字列に変化がない場合は履歴を巻き戻す
   // ChangeCase() で文字列に変化がない場合は履歴を巻き戻す
   if ( s.Text == st ) {
   if ( s.Text === st ) {
     d.Undo();
     d.Undo();
     d.Saved = saved;
     d.Saved = sv;
   }
   }
   // 「大文字に変換」を再試行 (※ 2019/08/29 追加)
 
   // 「大文字に変換」を再試行
   // ※ 半角数字+半角英小文字( e.g. "1a" )のときなどは Capitalize されないため
   // ※ 半角数字+半角英小文字( e.g. "1a" )のときなどは Capitalize されないため
   if ( isCapitalized && s.Text == st ) {
   if ( isCapitalized && s.Text === st ) {
     s.ChangeCase( meCaseUpperCase );
     s.ChangeCase( meCaseUpperCase );
     if ( s.Text == st ) {
     if ( s.Text === st ) {
       d.Undo();
       d.Undo();
       d.Saved = saved;
       d.Saved = sv;
     }
     }
   }
   }
}
}
// 右側の単語自動選択をしたときは選択解除
// 右側の単語自動選択をしたときは選択解除
if ( pos >= 0 ) {
if ( pos > -1 ) {
   s.SetActivePos( pos );
   s.SetActivePos( pos );
  /* マルチカーソル対応 */
  if ( sMode == 3 ) {
    for ( var i = 0, len = sCount + 1; i < len; i ++ ) {
      s.AddPos( Sel[i] );
    }
  }
}
/* 矩形選択範囲を復帰 */
else if ( sMode == 2 ) {
  s.SetActivePos( anc );  s.SetActivePos( act, true );
  s.Mode = 2;
}
}
ScrollX = sx;  ScrollY = sy;
</source>
</source>


== 謝辞 ==
== 謝辞 ==
「マテリアルデザインっぽいアイコンと『小マクロ集』」で紹介させていただいている「
「マテリアルデザインっぽいアイコンと『小マクロ集』」で紹介させていただいている「
[[マテリアルデザインっぽいアイコンと『小マクロ集』#大文字小文字変換|大文字小文字変換]]」マクロを提供してくださった papagoat 氏に感謝を申しあげます。その折は大変お世話になり、ありがとうございました。
[[マテリアルデザインっぽいアイコンと『小マクロ集』#大文字小文字変換|大文字小文字変換]]」マクロを提供してくださった papagoat 氏に感謝を申しあげます。その節は大変お世話になり、ありがとうございました。


== メモ ==
== メモ ==
ツールバーアイコンを減らしたり、おぼえなきゃいけないショートカットキーを減らしたりするためにつくりました。
ツールバーアイコンを減らしたり、おぼえなきゃいけないショートカットキーを減らしたりするためにつくりました。

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

編集メニュー >> 選択範囲を変換 の

  • 大文字に変換
  • 小文字に変換
  • 単語の最初の文字を大文字に変換

をトグル操作で実行します。

選択範囲に大文字/小文字が混在 → 「大文字に変換」
選択範囲が大文字のみ → 「小文字に変換」
選択範囲が小文字のみ → 「単語の最初の文字を大文字に変換」


変換を実行する前に「選択範囲に欧文文字があるかどうか」の判定をしない仕様となっています。
ラテンアルファベット(全角/半角 A~Z)以外にも、ローマ数字(Ⅰ~Ⅿ)やギリシャ文字(Α~Ω)、キリル文字(А~Я)、ダイアクリティカルマークつきの文字(À~Ý, Ç, Ş など)、リガチャ(合字 Æ, Œ など)等の追加文字にも対応するようです。[1][2]


  • 選択範囲がないときは、キャレット位置より右側 を単語選択して変換します(変換後に範囲選択を解除する)。
  • 「大文字/小文字変換」されなかったときは、編集履歴を巻き戻して「変更行」の強調表示や「未保存*」のフラグを残さないようにしてあります。


全角/半角の相互変換は >> 「全角/半角 トグル変換」マクロ または「全角/半角変換」マクロ


ソースコード

ダウンロード
「ファイル:大文字/小文字変換.zip」(アイコン入り)
  • 2019/05/11: 空行で実行すると無用にアンドゥするバグを修正
  • 2019/05/20: 選択範囲が1文字のときに大文字に変換できない(「単語の最初の文字を大文字に変換」コマンドの仕様)不具合を修正
  • 2019/08/29: 選択範囲が半角数字+半角英小文字( e.g. "1a" )のときなどに 「大文字に変換」されない不具合を修正
  • 2020/07/03: Mery ver 3.0.1 以降の マルチカーソル(ゼロ幅選択範囲)と矩形選択範囲を復帰し、連続実行でトグル変換できるようにした


#title = "大文字/小文字変換"
#tooltip = "大文字/小文字/頭文字 トグル変換"
// #icon = "A_a[9].ico"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",73

/**
 * ---------------------------------------------------------
 * 「大文字/小文字/頭文字 トグル変換」マクロ
 * sukemaru, 2019/05/10 - 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.WordRight( true );
}
/* 矩形選択範囲 */
else if ( sMode == 2 ) {
  var act = s.GetActivePos(),  anc = s.GetAnchorPos();
}

var st = s.Text;
var isCapitalized = false;

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

else if ( st ) {
  // 選択範囲が大文字のみ → 「小文字に変換」
  if ( st.toLowerCase() !== st
    && st.toUpperCase() === st ) {
    s.ChangeCase( meCaseLowerCase );
  }

  // 選択範囲が小文字のみ → 「単語の最初の文字を大文字に変換」
  // ※ meCaseCapitalize を使えるのは ver 2.6.10 以降
  else if ( st.length > 1
         && st.toLowerCase() === st
         && st.toUpperCase() !== st ) {
    editor.ExecuteCommandByID( MEID_EDIT_CAPITALIZE = 2116 );
    // s.ChangeCase( meCaseCapitalize );

    isCapitalized = true;
    // ※ 半角数字+半角英小文字( e.g. "1a" )のときなどは Capitalize されない
  }

  // 選択範囲に大文字/小文字が混在 → 「大文字に変換」
  else {
    s.ChangeCase( meCaseUpperCase );
  }
  // ChangeCase() で文字列に変化がない場合は履歴を巻き戻す
  if ( s.Text === st ) {
    d.Undo();
    d.Saved = sv;
  }

  // 「大文字に変換」を再試行
  // ※ 半角数字+半角英小文字( e.g. "1a" )のときなどは Capitalize されないため
  if ( isCapitalized && s.Text === st ) {
    s.ChangeCase( meCaseUpperCase );
    if ( s.Text === st ) {
      d.Undo();
      d.Saved = sv;
    }
  }
}

// 右側の単語自動選択をしたときは選択解除
if ( pos > -1 ) {
  s.SetActivePos( pos );
  /* マルチカーソル対応 */
  if ( sMode == 3 ) {
    for ( var i = 0, len = sCount + 1; i < len; i ++ ) {
      s.AddPos( Sel[i] );
    }
  }
}
/* 矩形選択範囲を復帰 */
else if ( sMode == 2 ) {
  s.SetActivePos( anc );  s.SetActivePos( act, true );
  s.Mode = 2;
}
ScrollX = sx;  ScrollY = sy;

謝辞

「マテリアルデザインっぽいアイコンと『小マクロ集』」で紹介させていただいている「 大文字小文字変換」マクロを提供してくださった papagoat 氏に感謝を申しあげます。その節は大変お世話になり、ありがとうございました。

メモ

ツールバーアイコンを減らしたり、おぼえなきゃいけないショートカットキーを減らしたりするためにつくりました。

スポンサーリンク