[▲前のスレッド]

2008/7/29 (火) 02:16:48  
[430] 英単語をキャピタライズする

>>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;

−− つづく −−
なすこじ
Mozilla/4.8 (Macintosh; U; PPC)


2008/7/29 (火) 02:17:31  
[431] Re:英単語をキャピタライズする

−− つづき −−
    // 置き換え処理
    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;
なすこじ
Mozilla/4.8 (Macintosh; U; PPC)

[▼次のスレッド]
INCM/CMT
Cyclamen v3.81