Idヘッダの記入No.05455
あつし さん 07/03/04 15:10
 
マクロでIdヘッダを記入したいと考えています。
いくつか分らないことがあるのですが、お教え下さい。

ファイル「myprog.c」の中でマクロを実行すると、以下の行が
出力れるというものです。

// $Id: myprog.c,v 1.0 2007-03-04 14:57 your-name Exp $

マクロでは、以下のとおりです。

$user = "your-name";
insertfix "// $Id: " +  basename2  + ",v 1.0 " +
          year + "-" + month + "-" + day + " " + hour + ":" + minute +
          " " + $user + " Exp $\n";

@ログインしているWindowsユーザーのIDは取れないでしょうか?

A次にソースを修正して、Idヘッダを追加する場合は、上記行を参考に、
// $Id: myprog.c,v 1.1 2007-03-04 15:01 your-name Exp $
としたいのですが、"v 1.0"から"v 1.1"を作るのは難しいでしょうか。
カーソルのある行を正規表現で、
/(,v\d+\.)(d+)/ ⇒ $ver = $1 + "$2+1"
のようにできると可能のように思えるのですが。


[ ]
RE:05455 Idヘッダの記入No.05456
h-tom さん 07/03/04 16:11
 

h-tom です。

>@ログインしているWindowsユーザーのIDは取れないでしょうか?
WindowsユーザーのID = ログオンしているユーザー名 なら環境変数
から取得すればいいのでは?
NT系なら大丈夫だと思うけど、9x系はあったかな?

>A次にソースを修正して、Idヘッダを追加する場合は、上記行を参考に、
>// $Id: myprog.c,v 1.1 2007-03-04 15:01 your-name Exp $
>としたいのですが、"v 1.0"から"v 1.1"を作るのは難しいでしょうか。
>カーソルのある行を正規表現で、
>/(,v\d+\.)(d+)/ ⇒ $ver = $1 + "$2+1"
>のようにできると可能のように思えるのですが。
考え方は合っているので、あとは実際にやってみましょう。
Perlと違って、()でマッチした範囲を、そのままマクロで取り出せないから、
工夫する必要があるけど。

[ ]
RE:05456 Idヘッダの記入No.05457
あつし さん 07/03/04 18:55
 
有り難う御座います。

>WindowsユーザーのID = ログオンしているユーザー名 なら環境変数
>から取得すればいいのでは?

これは出来ました。

>考え方は合っているので、あとは実際にやってみましょう。

・・・ですか。
V1.xで出しておくのも手かな、と。

>()でマッチした範囲を、そのままマクロで取り出せない

なるほど………φ(。。 )

[ ]
RE:05457 Idヘッダの記入No.05458
白雲斎 さん 07/03/04 19:55
 
こんにちは“あつし”さん、白雲斎です。

>(2) 次にソースを修正して、Idヘッダを追加する場合は、上記行を参考に、
>// $Id: myprog.c,v 1.1 2007-03-04 15:01 your-name Exp $
>としたいのですが、"v 1.0"から"v 1.1"を作るのは難しいでしょうか。

参考マクロ:
 ・該当する行に移動する前処理をすること
 ・ピリオド1個以下、小数一桁のみの対応
 ・検索パターンがバージョン番号にのみマッチすること

selectline;
searchdown ",v *([0-9][\\.0-9]*)(?\\1)", regular, inselect;
if( !result ) endmacro;
$n = gettext(foundtopx, foundtopy, foundendx, foundendy, 1);
#s = strstr($n, ".");
if( #s == -1 )
{
    insert str(val($n) + 1);
}
else
{
    #i = val( leftstr($n, #s) );
    #d = val( rightstr($n, #s) );
    if( #d == 9 ) insert str(#i + 1) + ".0";
    else insert str(#i) + "." + str(#d + 1);
}



蛇足:
┌────────────┬──────────────────┐
│秀丸マクロ              │perl                                │
├────────────┼──────────────────┤
│strstr(文字列, 検索文字)│index(文字列, 検索文字[, 開始位置]) │
└────────────┴──────────────────┘
というような対比でマクロを見ると、perlをご存知の方なら理解しやすいかも知
れませんね。後はマクロ・ヘルプを読む気があるかどうかな!?
また、HmJre.dllヘルプの「マクロからのdllfunc呼び出し」を読むと、変数内検
索について書かれてあるので幸せになれます。

[ ]
RE:05458 Idヘッダの記入No.05459
あつし さん 07/03/06 13:15
 
有り難う御座います。
いい感じにできました。

// バージョンが取れる場合は、x.+1で、取れない場合は、1.0
selectline;
searchdown ",v *([0-9][\\.0-9]*)(?\\1)", regular, inselect;
if( result ) {
  // ver = ver + 1
  // テキスト取得、1は選択範囲を維持
  $ver = gettext(foundtopx, foundtopy, foundendx, foundendy, 1);
  #s = strstr($ver, ".");
  if( #s == -1 ) {
    $ver = str(val($n) + 1);
  } else {
    #i = val(leftstr($ver, #s));
    #d = val(rightstr($ver, #s));
    if( #d == 9 ) $ver = str(#i + 1) + ".0";
    else $ver = str(#i) + "." + str(#d + 1);
  }
} else {
  $ver = "1.0";
}

[ ]