続きです。
1299 if (!out_quiet && pending > 0) 1300 prpending (beg);
out_quietは、outは出力、quietは静かな、なので、「静かな出力」。。。ん~。色を付けないってことでしょうか。
pendingは、日本語でも使いますね。保留って意味でしょう。
prependingは、prependの名詞ですね。prependは先頭に追加するという意味です。
各変数定義の説明を読んでみます。
1027 static intmax_t pending; /* Pending lines of output. 1028 Always kept 0 if out_quiet is true. */
Pending linesとあるので、pendingは、出力保留行の行数のようですね。
次行きます。
1301 1302 char *p = beg; 1303 1304 if (!out_quiet) 1305 { 1306 /* Deal with leading context. */ 1307 char const *bp = lastout ? lastout : bufbeg; 1308 intmax_t i; 1309 for (i = 0; i < out_before; ++i) 1310 if (p > bp) 1311 do 1312 --p; 1313 while (p[-1] != eol); 1314
コメントのDeal withは~対応する、で、contextは文脈、
先頭の文脈に対応する、でしょうか。
lastoutの定義を読んでみます。
1023 static char *lastout; /* Pointer after last character output; 1024 NULL if no character has been output 1025 or if it's conceptually before bufbeg. *
lastoutはそのままっぽいです。最後に出力した文字の後のポインタですね。
1309行目でout_beforeという変数も使われているので、定義箇所を見てみます。beforeもあればafterもあるようです。
1010 static intmax_t out_before; /* Lines of leading context. */ 1011 static intmax_t out_after; /* Lines of trailing context. */
こうして読んでいくと、意外にグローバル変数が多く使われていますね。
で、いろんなポインタやら行数やらを使って何をしているかというと、
この3行で、begポインタをEOLの位置まで戻しているだけのようです。
1311 do 1312 --p; 1313 while (p[-1] != eol);
すっきりした書き方の参考になります。
前の2行を合わせてみると、一切{}を使っていないのが、美しい。
1309 for (i = 0; i < out_before; ++i) 1310 if (p > bp) 1311 do 1312 --p; 1313 while (p[-1] != eol);
まあ、私の好みってだけかもしれません。
つづく
コメント