[#36647] test/pathname/test_pathname.rb — TAKANO Mitsuhiro <takano32@...>
高野です。
[#36649] Embedding struct RArray — "Yugui (Yuki Sonoda)" <yugui@...>
-----BEGIN PGP SIGNED MESSAGE-----
[#36672] [Bug #616] instance_eval and Module#to_s — Shyouhei Urabe <redmine@...>
Bug #616: instance_eval and Module#to_s
[#36678] test_process.rb — TAKANO Mitsuhiro <takano32@...>
高野です。
まつもと ゆきひろです
高野です。
[#36685] [Bug #621] When to call Class#inherited — Shyouhei Urabe <redmine@...>
Bug #621: When to call Class#inherited
[#36691] [Bug:1.9] ArgumentError on "%c" % 0x80 — Tanaka Akira <akr@...>
"%c" % 0x80 が例外になります。
[#36697] [Bug:1.9] rb_io_fread does not work — "Yusuke ENDOH" <mame@...>
遠藤です。
[#36704] Assertion failed in array.c on mswin32 Ruby (trunk) — Masaki Suketa <masaki.suketa@...>
助田です。
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
[#36705] ruby1.9 on hppa build problem — Hideki Yamane <henrich@...>
こんにちは、
[#36706] Ruby on Vista — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
[#36716] [Bug #644] compile error on win32ole with VC++6 — Usaku NAKAMURA <redmine@...>
Bug #644: compile error on win32ole with VC++6
[#36739] r19786 (trunk): * lib/delegate.rb (Delegator): simplified and restored 1.8 — Fujioka <fuj@...>
藤岡です。
[#36750] [Bug #650] Marshal.load raises RegexpError — Shyouhei Urabe <redmine@...>
Bug #650: Marshal.load raises RegexpError
まつもと ゆきひろです
卜部です。
まつもと ゆきひろです
卜部です。
まつもと ゆきひろです
卜部です。
まつもと ゆきひろです
Yukihiro Matsumoto さんは書きました:
まつもと ゆきひろです
もとの正規表現にバグがあるのは認めますが、それに巻き込まれてでかいPStore
まつもと ゆきひろです
卜部です。
まつもと ゆきひろです
けいじゅ@いしつかです.
卜部です。
けいじゅ@いしつかです.
卜部です。
[#36753] [Bug #651] Regexp.new returns strange regexp object — Shyouhei Urabe <redmine@...>
Bug #651: Regexp.new returns strange regexp object
まつもと ゆきひろです
[#36764] Re: [ruby-cvs:27036] Ruby:r19818 (trunk): * transcode.c (str_transcode0): String#encode without argument now — Martin Duerst <duerst@...>
まつもとさん、こんばんは。
まつもと ゆきひろです
まつもとさん、こんにちは。
In article <6.0.0.20.2.20081019182600.08d852a8@localhost>,
ファイル名は以前の議論の結果「変換可能でしたら変換、そうでなかったら
In article <6.0.0.20.2.20081021093404.0ada7bf8@localhost>,
At 10:47 08/10/21, Tanaka Akira wrote:
[#36768] Re: [ruby-cvs:27042] Ruby:r19824 (trunk): * array.c: recycle shared-array when it isn't referenced. — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
ワナベです。
[#36774] ConverterNotFoundError while making Ruby in Windows(trunk) — Masaki Suketa <masaki.suketa@...>
助田です。
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
In article <20081020173718.7FAD.C613B076@garbagecollect.jp>,
[#36789] [Bug #660] 数字を3桁ずつコンマで区切るsprintf書式指定 — "rubikitch ." <redmine@...>
Bug #660: 数字を3桁ずつコンマで区切るsprintf書式指定
[#36801] Marshal.load can't take GZipReader — arton <artonx@...>
artonです。
まつもと ゆきひろです
[#36813] Re: Ruby:r19863 (trunk): * regparse.c (parse_char_class): CCV_SB is only for single — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
[#36866] [Bug #676] 引数の有無によるIO#readの挙動の違い — _ wanabe <redmine@...>
Bug #676: 引数の有無によるIO#readの挙動の違い
[#36877] [Feature #679] Integer#to_s(:step=>3, :sep=>",") が欲しい — Martin Dürst <redmine@...>
チケット #679 が更新されました。 (by Martin Dürst)
[#36909] trunk SEGV nkf? — "WATANABE Tetsuya" <tetsuya.watanabe@...>
渡辺哲也です。
[#36914] prefix math_* funcs — Tadashi Saito <shiba@...2.accsnet.ne.jp>
斎藤と申します。
> complex.cで使うために、いくつか数学関数からstaticがとれたようですが、
[#36915] prefix signal_buff — Tadashi Saito <shiba@...2.accsnet.ne.jp>
斎藤と申します。
[#36917] VMまわりのシンボルにも「rb_」を付けてほしい — Tadashi Saito <shiba@...2.accsnet.ne.jp>
斎藤と申します。連投ですみません。
[#36932] [Bug #6] sprintf() of %f on Windows(MSVCRT) — _ wanabe <redmine@...>
チケット #6 が更新されました。 (by _ wanabe)
[#36937] initial value of $. — "Yugui (Yuki Sonoda)" <yugui@...>
Yuguiです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
[#36993] [Bug:1.9] removing Exception#initialize dumps core — "Yusuke ENDOH" <mame@...>
遠藤です。
[#37007] [Bug:1.9] 1+1+1+...+1 dumps core — "Yusuke ENDOH" <mame@...>
遠藤です。
はじめまして、よしおかと申します。
遠藤です。
こんにちは、なかむら(う)です。
[ruby-dev:36851] Re: [Bug #660] 数字を3桁ずつコンマで区切るsprintf書式指定
遠藤です。
2008/10/21 15:09 Yukihiro Matsumoto <matz@ruby-lang.org>:
> まつもと ゆきひろです
>
> In message "Re: [ruby-dev:36816] Re: [Bug #660] 数字を3桁ずつコンマで区切るsprintf書式指定"
> on Tue, 21 Oct 2008 09:14:12 +0900, Fujioka <fuj@rabbix.jp> writes:
>
> |> また、printfの実装では他の部分ではかたくなにlocale使用を拒否
> |> しているのに、ここだけlocaleに従うというのも変な話です。
> |>
> |rubikitchさんも
> |
> |最初の段階では「%,d」や「%_d」で自分で決めるのがいいですね。
> |「localeに決めさせる」という要望が出るかどうかも定かではないので。
> |
> |と発言しているので、ロケールの話は置いといて、
> |3桁の区切りの話だけでいいのではないかと思います。
>
> それならそれで、
>
> * 「,」や「_」は他の言語でformatを拡張するために使われてい
> たりしないのか
>
> * 3桁区切りだけでよいのか、あるいは桁数を指定できるように
> するのか
>
> など、いろいろ考えるべきことはあると思います。まあ、すぐには
> 入れられないでしょうから、ゆっくり議論すればいいことですが。
たたき台として、
$ ./ruby -e 'p "%_d" % 1000000'
"1_000_000"
となるようにパッチを書いてみました。が、
$ ./ruby -e 'p "%3_ 12d" % 1000000'
" 1_000_000"
$ ./ruby -e 'p "%3_012d" % 1000000'
"000_001_000_000"
で結果の幅が変わるのがそこはかとなく気持ち悪いですね。
prec の幅指定を優先するとすると、
$ ./ruby -e 'p "%3_012d" % 1000000'
"_001_000_000"
になりそうですが、これも気持ち悪いです。
Index: sprintf.c
===================================================================
--- sprintf.c (revision 19874)
+++ sprintf.c (working copy)
@@ -437,6 +437,8 @@
VALUE nextvalue;
VALUE tmp;
VALUE str;
+ int delimit_length;
+ char delimiter;
volatile VALUE hash = Qundef;
#define CHECK_FOR_WIDTH(f) \
@@ -483,6 +485,8 @@
width = prec = -1;
nextvalue = Qundef;
+ delimit_length = 0;
+ delimiter = '\0';
retry:
switch (*p) {
default:
@@ -522,6 +526,15 @@
p++;
goto retry;
+ case ',': case '_':
+ if (delimit_length != 0) {
+ rb_raise(rb_eArgError, "delimiter given twice - %c", *p);
+ }
+ delimit_length = 3;
+ delimiter = *p;
+ p++;
+ goto retry;
+
case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
n = 0;
@@ -534,6 +547,15 @@
p++;
goto retry;
}
+ if (*p == ',' || *p == '_') {
+ if (delimit_length != 0) {
+ rb_raise(rb_eArgError, "delimiter given twice - %d%c", n, *p);
+ }
+ delimit_length = n;
+ delimiter = *p;
+ p++;
+ goto retry;
+ }
CHECK_FOR_WIDTH(flags);
width = n;
flags |= FWIDTH;
@@ -705,7 +727,7 @@
char fbuf[32], nbuf[64], *s;
const char *prefix = 0;
int sign = 0, dots = 0;
- char sc = 0;
+ char sc = 0, c = 0;
long v = 0;
int base, bignum = 0;
int len, pos;
@@ -925,26 +947,40 @@
int plen = strlen(prefix);
PUSH(prefix, plen);
}
- CHECK(prec - len);
if (dots) PUSH("..", 2);
if (!bignum && v < 0) {
- char c = sign_bits(base, p);
- while (len < prec--) {
- buf[blen++] = c;
- }
+ c = sign_bits(base, p);
}
else if ((flags & (FMINUS|FPREC)) != FMINUS) {
- char c;
-
if (!sign && bignum && !RBIGNUM_SIGN(val))
c = sign_bits(base, p);
else
c = '0';
- while (len < prec--) {
- buf[blen++] = c;
+ }
+ if (delimit_length == 0) {
+ if (c != 0) FILL(c, prec - len);
+ PUSH(s, len);
+ }
+ else {
+ int i;
+ if (c != 0) {
+ i = (prec - 1) % delimit_length + 1;
+ while (prec - len >= i) {
+ FILL(c, i);
+ PUSH(&delimiter, 1);
+ prec -= i;
+ i = delimit_length;
+ }
+ if (prec - len > 0) FILL(c, prec - len);
}
+ i = (len - 1) % delimit_length + 1;
+ PUSH(s, i);
+ for (len -= i; len > 0; len -= delimit_length) {
+ PUSH(&delimiter, 1);
+ PUSH(&s[i], delimit_length);
+ i += delimit_length;
+ }
}
- PUSH(s, len);
CHECK(width);
while (width-- > 0) {
buf[blen++] = ' ';
--
Yusuke ENDOH <mame@tsg.ne.jp>