「大文字/小文字/頭文字 トグル変換」の版間の差分
ナビゲーションに移動
検索に移動
→ソースコード: 修正更新 |
更新 |
||
| 1行目: | 1行目: | ||
編集メニュー >> 選択範囲を変換 の | 編集メニュー >> 選択範囲を変換 の | ||
*大文字に変換 | * 大文字に変換 | ||
*小文字に変換 | * 小文字に変換 | ||
*単語の最初の文字を大文字に変換 | * 単語の最初の文字を大文字に変換 | ||
をトグル操作で実行します。 | をトグル操作で実行します。 | ||
:選択範囲に大文字/小文字が混在 → 「大文字に変換」 | : 選択範囲に大文字/小文字が混在 → 「大文字に変換」 | ||
:選択範囲が大文字のみ → 「小文字に変換」 | : 選択範囲が大文字のみ → 「小文字に変換」 | ||
:選択範囲が小文字のみ → 「単語の最初の文字を大文字に変換」 | : 選択範囲が小文字のみ → 「単語の最初の文字を大文字に変換」 | ||
変換を実行する前に「選択範囲に欧文文字があるかどうか」の判定をしない仕様となっています。<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 = | var s = d.selection; | ||
var | var pos = -1; | ||
var sv = d.Saved; | |||
var sMode = s.Mode; | |||
// 非選択時にはキャレットの右側を単語選択 | |||
if ( s.IsEmpty ) { | if ( s.IsEmpty ) { | ||
var | 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; | 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 = | d.Saved = sv; | ||
} | } | ||
// 「大文字に変換」を再試行 | |||
// 「大文字に変換」を再試行 | |||
// ※ 半角数字+半角英小文字( 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 = | d.Saved = sv; | ||
} | } | ||
} | } | ||
} | } | ||
// 右側の単語自動選択をしたときは選択解除 | // 右側の単語自動選択をしたときは選択解除 | ||
if ( pos > | 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 氏に感謝を申しあげます。その節は大変お世話になり、ありがとうございました。
メモ
ツールバーアイコンを減らしたり、おぼえなきゃいけないショートカットキーを減らしたりするためにつくりました。
スポンサーリンク