「大文字/小文字/頭文字 トグル変換」の版間の差分
修正・更新 |
→ソースコード: 修正更新 |
||
| 23行目: | 23行目: | ||
;ダウンロード: 「[[ファイル:大文字/小文字変換.zip]]」(アイコン入り) | ;ダウンロード: 「[[ファイル:大文字/小文字変換.zip]]」(アイコン入り) | ||
*2019/05/11: 空行で実行すると無用にアンドゥするバグを修正 | *2019/05/11: 空行で実行すると無用にアンドゥするバグを修正 | ||
*2019/05/20: | *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 ( | // 右側の単語自動選択をしたときは選択解除 | ||
if ( pos >= 0 ) { | |||
s.SetActivePos( pos ); | |||
} | } | ||
</source> | </source> | ||
スポンサーリンク