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

Sukemaru (トーク | 投稿記録)
修正・更新
Sukemaru (トーク | 投稿記録)
→ソースコード: 修正更新
23行目: 23行目:
;ダウンロード: 「[[ファイル:大文字/小文字変換.zip]]」(アイコン入り)
;ダウンロード: 「[[ファイル:大文字/小文字変換.zip]]」(アイコン入り)
*2019/05/11: 空行で実行すると無用にアンドゥするバグを修正
*2019/05/11: 空行で実行すると無用にアンドゥするバグを修正
*2019/05/20: 選択範囲が1文字のときに大文字に変換できない不具合(「単語の最初の文字を大文字に変換」コマンドの仕様)を修正
*2019/05/20: 選択範囲が1文字のときに大文字に変換できない(「単語の最初の文字を大文字に変換」コマンドの仕様)不具合を修正
*2019/08/29: 選択範囲が半角数字+半角英小文字( e.g. "1a" )のときなどに 「大文字に変換」されない不具合を修正


<source lang="javascript">
<source lang="javascript">
34行目: 35行目:
  * 選択範囲のトグル変換
  * 選択範囲のトグル変換
  *  大文字 → 小文字 → 先頭のみ大文字
  *  大文字 → 小文字 → 先頭のみ大文字
*
* 選択範囲がなければカーソル位置から右側を単語選択して変換
* (変換後に範囲選択を解除する)
  *  
  *  
  * 変換されなかったときは「変更行」の強調表示や「未保存*」のフラグを残さない
  * 変換されなかったときは「変更行」の強調表示や「未保存*」のフラグを残さない
*
* 範囲選択がなければカーソル位置から右側を単語選択して変換
* (変換後に範囲選択を解除する)
  */
  */


49行目: 50行目:
}
}
var st = s.Text;
var st = s.Text;
var isCapitalized = false; // (※ 2019/08/29 追加)


if ( st ) {
if ( d.ReadOnly ) {
  Status = " このドキュメントは書き換え禁止です。";
}
else if ( st ) {
   // 選択範囲が大文字のみ → 「小文字に変換」
   // 選択範囲が大文字のみ → 「小文字に変換」
   if ( st.toLowerCase() != st
   if ( st.toLowerCase() != st
57行目: 62行目:
   }
   }
   // 選択範囲が小文字のみ → 「単語の最初の文字を大文字に変換」
   // 選択範囲が小文字のみ → 「単語の最初の文字を大文字に変換」
  // ※ meCaseCapitalize を使えるのは ver 2.6.10 以降
   else if ( st.length > 1
   else if ( st.length > 1
         && st.toLowerCase() == st
         && st.toLowerCase() == st
62行目: 68行目:
     editor.ExecuteCommandByID( MEID_EDIT_CAPITALIZE = 2116 );
     editor.ExecuteCommandByID( MEID_EDIT_CAPITALIZE = 2116 );
     // s.ChangeCase( meCaseCapitalize );
     // s.ChangeCase( meCaseCapitalize );
    isCapitalized = true;
    // ※ 半角数字+半角英小文字( e.g. "1a" )のときなどは Capitalize されない
   }
   }
   // 選択範囲に大文字/小文字が混在 → 「大文字に変換」
   // 選択範囲に大文字/小文字が混在 → 「大文字に変換」
   else {
   else {
    s.ChangeCase( meCaseUpperCase );
  }
  // ChangeCase() で文字列に変化がない場合は履歴を巻き戻す
  if ( s.Text == st ) {
    d.Undo();
    d.Saved = saved;
  }
  // 「大文字に変換」を再試行 (※ 2019/08/29 追加)
  // ※ 半角数字+半角英小文字( e.g. "1a" )のときなどは Capitalize されないため
  if ( isCapitalized && s.Text == st ) {
     s.ChangeCase( meCaseUpperCase );
     s.ChangeCase( meCaseUpperCase );
     if ( s.Text == st ) {
     if ( s.Text == st ) {
70行目: 89行目:
       d.Saved = saved;
       d.Saved = saved;
     }
     }
  }
  if ( pos >= 0 ) {
    s.SetActivePos( pos );
   }
   }
}
}
if ( d.ReadOnly ) {
// 右側の単語自動選択をしたときは選択解除
   Status = " このドキュメントは書き換え禁止です。";
if ( pos >= 0 ) {
   s.SetActivePos( pos );
}
}
</source>
</source>
スポンサーリンク