「TrueとFalse を切り替える」の版間の差分

提供:MeryWiki
ナビゲーションに移動 検索に移動
(ソースコードと ZIP 書庫を更新)
1行目: 1行目:
= <b style="color:#0000c0;">True</b> と <b style="color:#c00;">False</b> を切り替える =
== Yes/No マクロ(<b style="color:#0000c0;">True</b> と <b style="color:#c00;">False</b> を切り替える) ==
ダウンロード: 「[[メディア:TrueとFalseを切り替える.zip|TrueとFalseを切り替える.zip]]」 2018/11/27 (アイコン入り)<br>
改造版 ('''ToDoリストモード'''[https://www.haijin-boys.com/software/mery/mery-2-7-0#comment=2240]を搭載):「[[メディア:YES/NO マクロ(ToDo).zip|YES/NO マクロ(ToDo).zip]]」 2019/05/06


<big>'''ダウンロード'''</big> >> 「[[メディア:TrueとFalseを切り替える.zip|TrueとFalseを切り替える.zip]]」 2020/05/12 (アイコン入り)<br>
改造版 ('''ToDoリストモード'''[https://www.haijin-boys.com/software/mery/mery-2-7-0#comment=2240]を搭載) >> 「[[メディア:YES/NO マクロ(ToDo).zip|YES/NO マクロ(ToDo).zip]]」 2020/05/12 (アイコン入り)


<b style="color:#0000c0;">YES</b>/<b style="color:#c00;">NO</b> マクロ


選択範囲の文字列が "True" なら "False" に、"False" なら "True" にします。
<big><b style="color:#0000c0;">YES</b>/<b style="color:#c00;">NO</b> マクロ</big>


ソースコード内に相互変換する単語を登録して使用します。
* 選択範囲の文字列が "True" なら "False" に、"False" なら "True" に変換します。
: ソースコード内に相互変換する単語のグループを登録して使用します。
: 選択範囲がないときにはキャレット位置の単語を自動選択するように設定できます。




* "True" "False" や "Yes" "No"、"はい" "いいえ" の'''2つの単語の相互変換'''なら
* ダブルクリックでは一括選択できない「'''同一記号の繰り返し文字列'''」を自動選択する機能を、おまけ機能として試験実装してあります(2020/05/12)。
##########
※※※※※※※※
: ※ 単語の自動選択用の設定項目が有効 <code>wordSelectionEnable = true</code> で、選択範囲のない状態でこのマクロを実行したときのみ。<br>
: ※ 登録リストの単語に合致することはないとおもうので、範囲選択操作の補助機能として使用してください。
 
 
* True ⇔ False や Yes No、はい いいえ の '''2つの単語の相互変換''' なら
  [ "True", "False" ],  
  [ "True", "False" ],  
  [ "Yes", "No" ],  
  [ "Yes", "No" ],  
17行目: 25行目:




* "ほげ" → "ふが" → "ぴよ" → "ほげ" のような'''3つ以上の単語を順々に変換'''する場合も、列挙するだけです。
* ほげ → ふが → ぴよ → ほげ のような '''3つ以上の単語を順々に変換''' する場合も、列挙するだけです。
  [ "ほげ", "ふが", "ぴよ" ],  
  [ "ほげ", "ふが", "ぴよ" ],  
  [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ],  
  [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ],  
25行目: 33行目:
  [ "Hoge", "Fuga", "Piyo" ],  
  [ "Hoge", "Fuga", "Piyo" ],  
  [ "Hoge", "Fuga", "Piyo" ],  
  [ "Hoge", "Fuga", "Piyo" ],  
だけであっても、'''「小文字」だけの差分''' hoge → fuga → piyo や hoge → fuga → piyo、 '''「大文字」だけの差分''' HOGE → FUGA → PIYO や HOGE → FUGA → PIYO も変換できます。 <br>  
: だけであっても、'''「小文字」だけの差分''' hoge → fuga → piyo や hoge → fuga → piyo、 '''「大文字」だけの差分''' HOGE → FUGA  → PIYO や HOGE → FUGA → PIYO も変換できます。 <br>
 
: ※「小文字」だけのグループを登録した場合は「大文字」差分の変換もでき、「大文字」だけのグループを登録した場合は「小文字」差分の変換もできますが、どちらも「頭文字が大文字」の差分の変換はできません。 <u><span style="color:#0000c0;">基本的に「頭文字が大文字」での登録をおすすめします。</span></u><br>


※「小文字」だけのグループを登録した場合は「大文字」差分の変換もでき、「大文字」だけのグループを登録した場合は「小文字」差分の変換もできますが、どちらも「頭文字が大文字」の差分の変換はできません。基本的に「頭文字が大文字」での登録をおすすめします。
: ※ 先頭以外にも大文字がある HoGe, FUga, PiyO などは変換しません (これらを変換させる場合は、別途で完全一致する単語グループが必要)。




* 小文字や大文字の差分では変換させたくないグループを登録する場合は、グループの先頭に <b style="color:#c00;">0,</b> を(引用符で囲わずに)置きます。 <br> 以下の例では mozilla や FIREFOX は変換されません。
* '''小文字や大文字の差分では変換させたくない''' グループを登録する場合は、グループの先頭に <b style="color:#c00;">0,</b> を(引用符で囲わずに)置きます。 <br> 以下の例では mozilla や FIREFOX, ThunderBird は変換されません。
  [ <b style="color:#c00;">0,</b> "Mozilla", "Firefox" ],  
  [ <b style="color:#c00;">0,</b> "Mozilla", "Firefox", "Thunderbird" ],  
:FireFox や ThunderBird のように先頭以外にも大文字がある単語については、別途で完全一致する単語グループの登録が必要となります。
: FireFox や ThunderBird のように先頭以外にも大文字がある単語については、別途で完全一致する単語グループの登録が必要となります。




* 「大文字」だけを除外したい場合は、<b style="color:#c00;">0,</b> 付きの「頭文字」のグループと「小文字」のグループを登録します。 <br> 以下の例では ALPHA や BRAVO は変換されません。
* '''「大文字」だけを除外したい''' 場合は、<b style="color:#c00;">0,</b> 付きの「頭文字」のグループと「小文字」のグループを登録します。 <br> 以下の例では ALPHA や BRAVO は変換されません。
  [ <b style="color:#c00;">0,</b> "Alpha", "Bravo", "Charlie", "Delta", "Echo" ],   
  [ <b style="color:#c00;">0,</b> "Alpha", "Bravo", "Charlie", "Delta", "Echo" ],   
  [ <b style="color:#c00;">0,</b> "alpha", "bravo", "charlie", "delta", "echo" ],   
  [ <b style="color:#c00;">0,</b> "alpha", "bravo", "charlie", "delta", "echo" ],   
:先頭の <b style="color:#c00;">0,</b> は「'''完全一致のみ'''」のフラグになります( → 1 や false, true などを置くとエラー)。<br> ※ '''"0",''' だと半角数字の "文字列" になるのでグループ内の単語のひとつとして登録されます。
: 先頭の <b style="color:#c00;">0,</b> は '''「完全一致のみ」のフラグ''' になります( → 1 や false, true などを置くとエラー)。<br> ※ <code>'''"'''0'''",'''</code> だと '''半角数字の "文字列"''' になるのでグループ内の単語のひとつとして登録されます。
 
 
* 左 → 右 方向には変換しても '''右 → 左 (末尾から先頭)方向に変換させたくない場合''' は、グループの最後に空の要素 <b style="color:#c00;">, ""</b> を置きます。 <br> 以下の例では Mery から Notepad や Terapad には変換されません。
[ 0, "Notepad", "Mery"<b style="color:#c00;">, ""</b> ],
[ "Terapad", "EmEditor", "gPad", "秀丸", "Mery"<b style="color:#c00;">, ""</b> ],
: ※ グループの途中に空の要素「 '''""''' 」があると、「 '''""''' 」以降の単語には変換されなくなります。




* 左 → 右 方向には変換しても '''右 → 左(末尾から先頭)方向に変換させたくない場合'''は、グループの最後に空の要素 <b style="color:#c00;">, ""</b> を置きます。 <br> 以下の例では Mery から Notepad や Terapad には変換されません。
* 2020/05/12 仕様変更:
[ 0, "Notepad", "Mery"<b style="color:#c00;">, ""</b> ], [ "Terapad", "EmEditor", "gPad", "秀丸", "Mery"<b style="color:#c00;">, ""</b> ],
:※うえの例の <code>[ ... , "Mery", "" ],</code> のグループよりもうしろに
:※グループの途中に空の要素「 '''""''' 」があると、「 "" 」以降の単語には変換されなくなります。
[ "Mery", "メリー", "" ],  
: のようなグループがある場合は、 Mery → メリー → 羊 → Mery と変換されます。




<span style="color:#c00;">マクロを実行しても正しくトグル変換しないときやエラーになったときは、'''"'''ダブルクォート'''"'''、カンマ「 ''',''' 」、'''[''' 角カッコ ''']''' の過不足を確認してください( [ 角カッコ ] を閉じたうしろにはカンマ「 , 」が必要)。<br>また、おなじ単語を別のグループにも'''重複して登録'''していないかを確認してください(先に登録されたグループが優先的に参照されます)。</span>
<span style="color:#c00;">マクロを実行しても正しくトグル変換しないときやエラーになったときは、'''"'''ダブルクォート'''"'''、カンマ「 ''',''' 」、'''[''' 角カッコ ''']''' の過不足を確認してください( [ 角カッコ ] を閉じたうしろにはカンマ「 , 」が必要)。<br>また、おなじ単語を別のグループにも'''重複して登録'''していないかを確認してください(先に登録されたグループが優先的に参照されます)。</span>
: → e.g.「'''\[ *(?:0,)? *"|" *, *"|" *\], *'''」 を検索(正規表現)。


= ソースコード =
 
== ソースコード ==
<source lang="javascript">
<source lang="javascript">
#title = "True or False"
#title = "Yes/No マクロ"
#tooltip = "True と False を切り替える"
#tooltip = "True と False を切り替える"
#icon = "TF.ico"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",265
// 選択範囲の文字列が "True" なら "False" に、"False" なら "True" にする
// #icon = "TF.ico"
// sumemaru 2018/11/20 - 2018/11/27
 
// ---------- ▼ 設定 ▼ ----------
/**
* --------------------------------------------------------
* 「Yes/No マクロ」(True と False を切り替える)
* sumemaru, 2018/11/20 - 2020/05/12
* --------------------------------------------------------
* 選択範囲の文字列が "True" なら "False" に、"False" なら "True" にする
*
* ■同一記号の繰り返し文字列の自動選択 (2020/05/12 追加)
* ・ e.g. #### や ※※※※ など、ダブルクリックでは範囲選択できないものを自動選択する
*
* ※ 単語グループの登録リストの仕様や変換処理の基本動作は 2018/11/27 版と共通
* ※ Yes/No マクロでは、"任意の文字列" を "" に変換(文字列を削除)することはできない
* ※ 単語グループ登録リストを上から順番に検索するので
*    優先度の高いグループを上に置くこと
*/


// ■選択範囲がないときにキャレット位置の単語を自動選択するか?(不要なら false;)
// ---------- ▼ 設定項目 ▼ ----------
var wordSelectionEnable = true;


// ■変換後に選択範囲を残すか?(不要なら false;)
// ■選択範囲がないときにキャレット位置の単語を自動選択するか?
var leftSelectionEnable = true;
var wordSelectionEnable = true; // false なら、選択範囲のないときは変換しない


// ---------- ▲ 設定 ▲ ----------
// ■変換後に選択範囲を残すか?
var leftSelectionEnable = true; // true なら、連続実行でトグル変換できる
 
// ---------- ▲ 設定項目 ▲ ----------


var a = new Array( // ←消しちゃダメ
var a = new Array( // ←消しちゃダメ


// ---------- ▼ 単語グループを登録 ▼ ----------
// ---------- ▼ 単語グループを登録 ▼ ----------
// 単語を "ダブルクォート" か 'シングルクォート' で囲い、カンマ「 , 」で区切って並べる。
// グループを [ 角カッコ ] で囲い、うしろにもカンマ「 , 」を付けること。
// ※マクロを実行してエラーになったときは、"ダブルクォート"/カンマ「 , 」/[ 角カッコ ] の過不足を確認。


  // 単語を "ダブルクォート" か 'シングルクォート' で囲い、カンマ「 , 」で区切って並べる。
  // ・グループを [ 角カッコ ] で囲い、うしろにもカンマ「 , 」を付けること。
  // ※マクロを実行して正しくトグルしないときやエラーになったときは、
  //  "ダブルクォート"/カンマ「 , 」/[ 角カッコ ] の過不足を確認。


/* Positive or Negative */
[ "True", "False" ],
[ "Yes", "No" ],
[ "On", "Off" ],
[ "Enable", "Disable" ],
[ "Positive", "Negative" ],


  /* Positive or Negative */
  [ "True", "False" ],
  [ "Yes", "No" ],
  [ "On", "Off" ],
  [ "Enable", "Disable" ],
  [ "Positive", "Negative" ],
  [ "Possible", "Impossible" ],




/* (中略) */


  /* (中略) */




[ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ],  
 
[ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ],  
  [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ],  
  [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ],
  [ "①", "②", "③", "④", "⑤", "⑥", "⑦", "⑧", "⑨", "⑩", "⑪", "⑫", "⑬", "⑭", "⑮", "⑯", "⑰", "⑱", "⑲", "⑳" ],
  [ "➀", "➁", "➂", "➃", "➄", "➅", "➆", "➇", "➈", "➉" ],  




// ---------- ▲ 単語グループを登録 ▲ ----------
// ---------- ▲ 単語グループを登録 ▲ ----------


[ "" , "" ] ); // ← 消しちゃダメ
// var a = new Array ... を閉じる
[] ); // ← 消しちゃダメ
 
// ---------- ▼ メインコード ▼ ----------
 
var d = editor.ActiveDocument;
var s = editor.ActiveDocument.selection;


var s = document.selection;
if ( d.ReadOnly ) {
if ( s.IsEmpty && wordSelectionEnable )
   Status = " ドキュメントは書き換え禁止です。";
  s.SelectWord();
var st = ConvertYesNo( s.Text );
if ( st && s.Text && st != s.Text ) {
   s.Text = st;
  if ( leftSelectionEnable )
    s.SetAnchorPos( s.GetActivePos() - st.length );
}
}
else {
  Redraw = false;
  var st = yesNo = "";


function ConvertYesNo( str ) {
   // 単語の自動選択 + 同一記号の繰り返し文字列の自動選択
   Outer:
   if ( s.IsEmpty && wordSelectionEnable ) {
   for ( var i = 0, dist = str; i < a.length; i ++ ) {
     s.SelectWord();
     if ( ! a[i] ) // 空の要素はスキップ
     st = s.Text;
      continue;
     if ( st.length == 1 ) {
     Inner:
       var ay = s.GetActivePointY( mePosLogical );
     for ( var j = 0; j < a[i].length; j ++ ) {
      var tx = s.GetTopPointX( mePosLogical );
       if ( ! a[i][j] ) // 空の要素はスキップ
       var bx = s.GetBottomPointX( mePosLogical );
        continue;
       var line = d.GetLine( ay, 0 ),  len = line.length;
       // ヒットしたら Hoge
      for ( ; tx > 0; tx -- ) {
       if ( a[i][j] == str ) {
         if ( line.charAt( tx - 2 ) != st ) break;
         if ( j < a[i].length - 1 )
          dist = a[i][ j + 1 ];
        else if ( a[i][0] && a[i][0] !== 0 )
          dist = a[i][0];
        else
          dist = a[i][1];
        break Outer;
       }
       }
       // 小文字にしてくらべてヒットしたら
       for ( ; bx <= len; bx ++ ) {
      else if ( a[i][0] !== 0 && a[i][j].toLowerCase() == str.toLowerCase() ) {
        if ( line.charAt( bx - 1 ) != st ) break;
         // もとの単語の各文字が小文字のみなら hoge
      }
         if ( str == str.toLowerCase() ) {
      s.SetActivePoint( mePosLogical, tx, ay, false );
          if ( j < a[i].length - 1 )
      s.SetActivePoint( mePosLogical, bx, ay, true );
            dist = a[i][ j + 1 ].toLowerCase();
    }
          else if ( a[i][0] )
  }
            dist = a[i][0].toLowerCase();
  st = s.Text;
          else
 
            dist = a[i][1].toLowerCase();
  if ( st ) {
          break Outer;
    yesNo = ConvertYesNo( st, a );
        }
    if ( yesNo && yesNo != st ) {
        // もとの単語の各文字が大文字のみなら HOGE
      s.Text = yesNo;
        else if ( str == str.toUpperCase() ) {
 
          if ( j < a[i].length - 1 )
      if ( leftSelectionEnable ) { // 単語先頭まで範囲選択
            dist = a[i][ j + 1 ].toUpperCase();
         s.SetAnchorPos( s.GetActivePos() - yesNo.length );
          else if ( a[i][0] )
      }
            dist = a[i][0].toUpperCase();
      else if ( wordSelectionEnable ) { // 単語先頭にカーソルを移動
          else
         s.SetActivePos( s.GetActivePos() - yesNo.length );
            dist = a[i][1].toUpperCase();
      }
          break Outer;
    }
        }
  }
 
  Redraw = true;
}
 
 
/**
* 関数 ConvertYesNo( str, listArray )
* Yes/No 変換
* listArray の単語グループリストに str がマッチしたとき、変換した単語で返す
* 2020/05/12: 変数を適宜追加、変数名を変更、コードを圧縮
*/
function ConvertYesNo( str, list ) {
  var word = "",  group,  gLen;
 
  ListLoop:
  for ( var i = 0, aLen = list.length, group; i < aLen; i ++ ) {
    group = list[i];  gLen = group.length;
    if ( gLen < 2 ) { continue ListLoop; } // 空のグループはスキップ
 
    GroupLoop:
    for ( var j = 0; j < gLen; j ++ ) {
      if ( ! group[j] ) { continue GroupLoop; } // 空の要素 "" と 0 フラグはスキップ
 
      // ヒット(完全一致)したら Hoge, hoge, HOGE
      if ( group[j] === str ) {
        word = ( j < gLen - 1 )  ? group[ j + 1 ] // ひとつ右の単語を返す
            : ( group[0] !== 0 ) ? group[0] // いちばん左の単語を返す
            :/*(group[0] === 0)*/  group[1]; // ふたつめの単語を返す
        if ( word ) { break ListLoop; }
      }
 
      // 小文字にしてくらべてヒットしたら( 0 フラグなし)
      else if ( group[0] !== 0
      && group[j].toLowerCase() == str.toLowerCase() ) {
        word = ( j < gLen - 1 ) ? group[ j + 1 ] // ひとつ右
                                : group[0]; // いちばん左
        // もとの単語が小文字のみなら小文字で、大文字のみなら大文字で返す
        word = ( str == str.toLowerCase() ) ? word.toLowerCase()
            : ( str == str.toUpperCase() ) ? word.toUpperCase()
                        /* else */          : ""; // 変換なし
        if ( word ) { break ListLoop; }
       }
       }
     }
     }
   }
   }
   return dist;
   return word;
}
}
</source>
</source>
163行目: 238行目:
* 2019/05/06 sukemaru
* 2019/05/06 sukemaru
: 「ToDoリストモード」搭載の改造版のリンクを追加しました(単語登録リストの仕様は 2018/11/27 の通常版とおなじ)。
: 「ToDoリストモード」搭載の改造版のリンクを追加しました(単語登録リストの仕様は 2018/11/27 の通常版とおなじ)。
* 2020/05/12 sukemaru
: ソースコードを更新しました(単語登録リストの仕様は 2018/11/27 の通常版とおなじまま)。<br> ZIP 書庫内のソースコードでは、単語グループのリストは sukemaru の自家用状態のまま 300 件(グループ)ぐらい詰めこんであります。

2020年5月13日 (水) 01:10時点における版

Yes/No マクロ(TrueFalse を切り替える)

ダウンロード >> 「TrueとFalseを切り替える.zip」 2020/05/12 (アイコン入り)
改造版 (ToDoリストモード[1]を搭載) >> 「YES/NO マクロ(ToDo).zip」 2020/05/12 (アイコン入り)


YESNO マクロ

  • 選択範囲の文字列が "True" なら "False" に、"False" なら "True" に変換します。
ソースコード内に相互変換する単語のグループを登録して使用します。
選択範囲がないときにはキャレット位置の単語を自動選択するように設定できます。


  • ダブルクリックでは一括選択できない「同一記号の繰り返し文字列」を自動選択する機能を、おまけ機能として試験実装してあります(2020/05/12)。
##########
※※※※※※※※
※ 単語の自動選択用の設定項目が有効 wordSelectionEnable = true で、選択範囲のない状態でこのマクロを実行したときのみ。
※ 登録リストの単語に合致することはないとおもうので、範囲選択操作の補助機能として使用してください。


  • True ⇔ False や Yes ⇔ No、はい ⇔ いいえ の 2つの単語の相互変換 なら
[ "True", "False" ], 
[ "Yes", "No" ], 
[ "はい", "いいえ" ], 


  • ほげ → ふが → ぴよ → ほげ のような 3つ以上の単語を順々に変換 する場合も、列挙するだけです。
[ "ほげ", "ふが", "ぴよ" ], 
[ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ], 


  • 単語グループの登録は「頭文字が大文字」
[ "Hoge", "Fuga", "Piyo" ], 
[ "Hoge", "Fuga", "Piyo" ], 
だけであっても、「小文字」だけの差分 hoge → fuga → piyo や hoge → fuga → piyo、 「大文字」だけの差分 HOGE → FUGA  → PIYO や HOGE → FUGA → PIYO も変換できます。
※「小文字」だけのグループを登録した場合は「大文字」差分の変換もでき、「大文字」だけのグループを登録した場合は「小文字」差分の変換もできますが、どちらも「頭文字が大文字」の差分の変換はできません。 基本的に「頭文字が大文字」での登録をおすすめします。
※ 先頭以外にも大文字がある HoGe, FUga, PiyO などは変換しません (これらを変換させる場合は、別途で完全一致する単語グループが必要)。


  • 小文字や大文字の差分では変換させたくない グループを登録する場合は、グループの先頭に 0, を(引用符で囲わずに)置きます。
    以下の例では mozilla や FIREFOX, ThunderBird は変換されません。
[ 0, "Mozilla", "Firefox", "Thunderbird" ], 
FireFox や ThunderBird のように先頭以外にも大文字がある単語については、別途で完全一致する単語グループの登録が必要となります。


  • 「大文字」だけを除外したい 場合は、0, 付きの「頭文字」のグループと「小文字」のグループを登録します。
    以下の例では ALPHA や BRAVO は変換されません。
[ 0, "Alpha", "Bravo", "Charlie", "Delta", "Echo" ],  
[ 0, "alpha", "bravo", "charlie", "delta", "echo" ],  
先頭の 0, は 「完全一致のみ」のフラグ になります( → 1 や false, true などを置くとエラー)。
"0", だと 半角数字の "文字列" になるのでグループ内の単語のひとつとして登録されます。


  • 左 → 右 方向には変換しても 右 → 左 (末尾から先頭)方向に変換させたくない場合 は、グループの最後に空の要素 , "" を置きます。
    以下の例では Mery から Notepad や Terapad には変換されません。
[ 0, "Notepad", "Mery", "" ],
[ "Terapad", "EmEditor", "gPad", "秀丸", "Mery", "" ],
※ グループの途中に空の要素「 "" 」があると、「 "" 」以降の単語には変換されなくなります。


  • 2020/05/12 仕様変更:
※うえの例の [ ... , "Mery", "" ], のグループよりもうしろに
[ "Mery", "メリー", "羊" ], 
のようなグループがある場合は、 Mery → メリー → 羊 → Mery と変換されます。


マクロを実行しても正しくトグル変換しないときやエラーになったときは、"ダブルクォート"、カンマ「 , 」、[ 角カッコ ] の過不足を確認してください( [ 角カッコ ] を閉じたうしろにはカンマ「 , 」が必要)。
また、おなじ単語を別のグループにも重複して登録していないかを確認してください(先に登録されたグループが優先的に参照されます)。


ソースコード

#title = "Yes/No マクロ"
#tooltip = "True と False を切り替える"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",265
// #icon = "TF.ico"

/**
 * --------------------------------------------------------
 * 「Yes/No マクロ」(True と False を切り替える)
 * sumemaru, 2018/11/20 - 2020/05/12
 * --------------------------------------------------------
 * 選択範囲の文字列が "True" なら "False" に、"False" なら "True" にする
 * 
 * ■同一記号の繰り返し文字列の自動選択 (2020/05/12 追加)
 * ・ e.g. #### や ※※※※ など、ダブルクリックでは範囲選択できないものを自動選択する
 * 
 * ※ 単語グループの登録リストの仕様や変換処理の基本動作は 2018/11/27 版と共通
 * ※ Yes/No マクロでは、"任意の文字列" を "" に変換(文字列を削除)することはできない
 * ※ 単語グループ登録リストを上から順番に検索するので
 *    優先度の高いグループを上に置くこと
 */

// ---------- ▼ 設定項目 ▼ ----------

// ■選択範囲がないときにキャレット位置の単語を自動選択するか?
var wordSelectionEnable = true;		// false なら、選択範囲のないときは変換しない

// ■変換後に選択範囲を残すか?
var leftSelectionEnable = true;		// true なら、連続実行でトグル変換できる

// ---------- ▲ 設定項目 ▲ ----------

var a = new Array(	// ←消しちゃダメ

// ---------- ▼ 単語グループを登録 ▼ ----------

  // 単語を "ダブルクォート" か 'シングルクォート' で囲い、カンマ「 , 」で区切って並べる。
  // ・グループを [ 角カッコ ] で囲い、うしろにもカンマ「 , 」を付けること。
  // ※マクロを実行して正しくトグルしないときやエラーになったときは、
  //  "ダブルクォート"/カンマ「 , 」/[ 角カッコ ] の過不足を確認。


  /* Positive or Negative */
  [ "True", "False" ], 
  [ "Yes", "No" ], 
  [ "On", "Off" ], 
  [ "Enable", "Disable" ], 
  [ "Positive", "Negative" ], 
  [ "Possible", "Impossible" ], 



  /* (中略) */



  [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ], 
  [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ], 
  [ "①", "②", "③", "④", "⑤", "⑥", "⑦", "⑧", "⑨", "⑩", "⑪", "⑫", "⑬", "⑭", "⑮", "⑯", "⑰", "⑱", "⑲", "⑳" ], 
  [ "➀", "➁", "➂", "➃", "➄", "➅", "➆", "➇", "➈", "➉" ], 


// ---------- ▲ 単語グループを登録 ▲ ----------

// var a = new Array ...	を閉じる
[] );		// ← 消しちゃダメ

// ---------- ▼ メインコード ▼ ----------

var d = editor.ActiveDocument;
var s = editor.ActiveDocument.selection;

if ( d.ReadOnly ) {
  Status = " ドキュメントは書き換え禁止です。";
}
else {
  Redraw = false;
  var st = yesNo = "";

  // 単語の自動選択 + 同一記号の繰り返し文字列の自動選択
  if ( s.IsEmpty && wordSelectionEnable ) {
    s.SelectWord();
    st = s.Text;
    if ( st.length == 1 ) {
      var ay = s.GetActivePointY( mePosLogical );
      var tx = s.GetTopPointX( mePosLogical );
      var bx = s.GetBottomPointX( mePosLogical );
      var line = d.GetLine( ay, 0 ),  len = line.length;
      for ( ; tx > 0; tx -- ) {
        if ( line.charAt( tx - 2 ) != st ) break;
      }
      for ( ; bx <= len; bx ++ ) {
        if ( line.charAt( bx - 1 ) != st ) break;
      }
      s.SetActivePoint( mePosLogical, tx, ay, false );
      s.SetActivePoint( mePosLogical, bx, ay, true );
    }
  }
  st = s.Text;

  if ( st ) {
    yesNo = ConvertYesNo( st, a );
    if ( yesNo && yesNo != st ) {
      s.Text = yesNo;

      if ( leftSelectionEnable ) {			// 単語先頭まで範囲選択
        s.SetAnchorPos( s.GetActivePos() - yesNo.length );
      }
      else if ( wordSelectionEnable ) {		// 単語先頭にカーソルを移動
        s.SetActivePos( s.GetActivePos() - yesNo.length );
      }
    }
  }

  Redraw = true;
}


/**
 * 関数 ConvertYesNo( str, listArray )
 * Yes/No 変換
 * listArray の単語グループリストに str がマッチしたとき、変換した単語で返す
 * 2020/05/12: 変数を適宜追加、変数名を変更、コードを圧縮
 */
function ConvertYesNo( str, list ) {
  var word = "",  group,  gLen;

  ListLoop:
  for ( var i = 0, aLen = list.length, group; i < aLen; i ++ ) {
    group = list[i];  gLen = group.length;
    if ( gLen < 2 ) { continue ListLoop; }	// 空のグループはスキップ

    GroupLoop:
    for ( var j = 0; j < gLen; j ++ ) {
      if ( ! group[j] ) { continue GroupLoop; }	// 空の要素 "" と 0 フラグはスキップ

      // ヒット(完全一致)したら Hoge, hoge, HOGE
      if ( group[j] === str ) {
        word = ( j < gLen - 1 )   ? group[ j + 1 ] 	// ひとつ右の単語を返す
             : ( group[0] !== 0 ) ? group[0]		// いちばん左の単語を返す
             :/*(group[0] === 0)*/  group[1];		// ふたつめの単語を返す
        if ( word ) { break ListLoop; }
      }

      // 小文字にしてくらべてヒットしたら( 0 フラグなし)
      else if ( group[0] !== 0
      && group[j].toLowerCase() == str.toLowerCase() ) {
        word = ( j < gLen - 1 ) ? group[ j + 1 ]	// ひとつ右
                                : group[0];			// いちばん左
        // もとの単語が小文字のみなら小文字で、大文字のみなら大文字で返す
        word = ( str == str.toLowerCase() ) ? word.toLowerCase()
             : ( str == str.toUpperCase() ) ? word.toUpperCase()
                        /* else */          : "";	// 変換なし
        if ( word ) { break ListLoop; }
      }
    }
  }
  return word;
}

メモ

  • 2018/11/25 sukemaru
ソースコードを変更しました。
  • 2018/11/27 sukemaru
ソースコードを変更しました。
  • 2019/05/06 sukemaru
「ToDoリストモード」搭載の改造版のリンクを追加しました(単語登録リストの仕様は 2018/11/27 の通常版とおなじ)。
  • 2020/05/12 sukemaru
ソースコードを更新しました(単語登録リストの仕様は 2018/11/27 の通常版とおなじまま)。
ZIP 書庫内のソースコードでは、単語グループのリストは sukemaru の自家用状態のまま 300 件(グループ)ぐらい詰めこんであります。
スポンサーリンク