◀マクロトップへ
  • 430 英単語をキャピタライズする
    • 431 Re:英単語をキャピタライズする
  • [430] 英単語をキャピタライズする なすこじ 2008年07月29日 02:16

    >>data:6728 の件の英単語をキャピタライズするマクロです。

    // Capitalize.ppa by nasukoji 2008.07.29
    // 半角英単語をキャピタライズする。
    // 選択範囲がある場合、選択範囲内の単語を全てキャピタライズする。
    // 選択範囲がない場合、カーソル位置以降の単語を1つキャピタライズする。
    //
    // PPA.DLL を SAKURA.EXE と同じディレクトリに置いてください。
    // マクロファイルの拡張子は.PPAとしてください。

    var
    selectMode : integer; // マクロ実行開始時の選択状態の記憶
    areaColmFrom : integer; // 選択範囲記憶用
    areaLineFrom : integer;
    areaColmTo : integer;
    areaLineTo : integer;
    temp : integer; // 一時変数
    begin
    // 選択モードを記憶する
    selectMode := S_IsTextSelected();

    // 選択範囲を記憶する
    areaColmFrom := S_GetSelectColmFrom();
    areaLineFrom := S_GetSelectLineFrom();
    areaColmTo := S_GetSelectColmTo();
    areaLineTo := S_GetSelectLineTo();

    // 選択範囲の左上にカーソルを移動する
    if( selectMode = 1 ) then // 普通の選択
    S_Left()
    else if( selectMode = 2 ) then // 矩形選択
    begin
    S_Copy(); // 矩形選択を完了させるためのダミー
    S_Left(); // 選択範囲の左上に移動する

    // 左上から右下となるように範囲を調整
    if( areaColmFrom > areaColmTo ) then
    begin
    temp := areaColmFrom;
    areaColmFrom := areaColmTo;
    areaColmTo := temp;
    end;

    if( areaLineFrom > areaLineTo ) then
    begin
    temp := areaLineFrom;
    areaLineFrom := areaLineTo;
    areaLineTo := temp;
    end;
    end;

    -- つづく --
    • [431] Re:英単語をキャピタライズする なすこじ 2008年07月29日 02:17

      -- つづき --
      // 置き換え処理
      repeat
      S_SearchNext( '\b[a-zA-Z]+(?=\b)', 22 ) // 半角英単語を検索
      if( S_IsTextSelected = 0 ) then break; // 単語が無ければ終了

      // 選択範囲ありの場合、範囲内の単語のみ置き換え対象とする
      if( selectMode <> 0 ) then
      begin
      // 単語が選択範囲の終了位置をはみ出しているなら置き換え終了
      if(( areaLineTo < S_GetSelectLineTo ) or (( areaLineTo = S_GetSelectLineTo ) and ( areaColmTo < S_GetSelectColmTo ))) then
      begin
      // 選択範囲の次行に移動する
      S_Jump( areaLineTo, 0 );
      S_Down();
      break;
      end;

      if( selectMode = 2 ) then
      begin
      // 単語が選択範囲をはみ出している場合は置き換えない
      if( areaColmFrom > S_GetSelectColmFrom ) then continue;
      if( areaColmTo < S_GetSelectColmTo ) then continue;
      end;
      end;

      S_CancelMode();
      S_SearchNext( '\b[a-zA-Z]', 22 ); // 半角英単語の先頭を検索
      S_ToUpper(); // 大文字に変換

      S_SearchNext( '(?<=[a-zA-Z])[a-zA-Z]*(?=\b)', 22 ); // 2文字目以降を検索
      S_ToLower(); // 小文字に変換

      // 選択範囲なしの時は1回で終了する
      if( selectMode = 0 ) then
      begin
      // 選択の見映えを戻すために半角英単語を選択し直した後
      // 右に移動して選択状態をキャンセルする
      S_SearchPrev( '\b[a-zA-Z]+(?=\b)', 22 );
      S_Right();
      break;
      end;
      until False;
      end;