root/lang/actionscript/sprintf/sprintf.as @ 26821

Revision 18338, 3.4 kB (checked in by mokehehe, 5 years ago)
Line 
1//=============================================================================
2/**
3        sprintf for AS3
4
5        C ��sprintf ��ۂ���
6
7                d
8                        +       ������͂���                      -       ���w�莞�A���l��
9                        0       �]�������Ŗ��߂�
10                f
11                                �����ȉ��̌��w����
12
13                s
14                        -       ���l��
15*/
16//=============================================================================
17
18package {
19        public function sprintf(fmt:String, ...rest): String {
20                var idx:int = 0;
21                return fmt.replace(ReFmt,
22                        function(): String {
23                                var v:* = rest[idx];
24                                idx += 1;
25                                if (arguments[Keta] != "" || arguments[Denom] != "") {
26                                        var flag:String = arguments[Flag];
27                                        var b_zero:Boolean = arguments[Zero] != "";
28                                        var keta:int = int(arguments[Keta]);
29
30                                        switch (arguments[Post]) {
31                                        case "d":
32                                                return int2str(v, flag, b_zero, keta);
33                                        case "x":
34                                                return int2hexstr(v, HexTblS, flag, b_zero, keta);
35                                        case "X":
36                                                return int2hexstr(v, HexTblL, flag, b_zero, keta);
37                                        case "f":
38                                                return float2str(v, int(arguments[Denom]));
39                                        case "s":
40                                                return str2str(v, flag, keta);
41                                        }
42                                }
43                                return v.toString();
44                        }
45                );
46        }
47}
48
49
50//-----------------------------------------------------------------------------
51// file local definition
52
53const ReFmt:RegExp = /%([+\-])?(0)?([1-9]\d*)?(?:\.(\d+)?)?([dxXfs])/g;
54const Flag:int  = 1;
55const Zero:int  = 2;
56const Keta:int  = 3;
57const Denom:int = 4;
58const Post:int  = 5;
59
60const HexTblS:Array = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
61const HexTblL:Array = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];
62
63
64function str_x_n(s:String, n:int): String {
65        var r:String = "";
66        var t:String = s;
67        for (; n > 0; n >>= 1) {
68                if ((n & 1) != 0) {
69                        r = r.concat(t);
70                }
71                t = t.concat(t);
72        }
73        return r;
74}
75
76
77function int2str(v:int, flag:String, b_zero:Boolean, keta:int): String {
78        var s:String = v.toString();
79        if (keta == 0 || s.length >= keta) {
80                return s;
81        } else {
82                if (flag == "-") {
83                        return s.concat(str_x_n(" ", keta - s.length));
84                } else {
85                        if ((b_zero && v < 0) || (flag == "+" && v >= 0)) {
86                                var av:int;
87                                var f:String;
88                                if (v >= 0) {
89                                        av = v;
90                                        f = "+";
91                                } else {
92                                        av = -v;
93                                        f = "-";
94                                }
95                                return f.concat(str_x_n("0", keta - s.length - 1)).concat(av.toString());
96                        } else {
97                                if (flag == "+" && v >= 0) {
98                                        s = "+".concat(s);
99                                }
100                                var c:String = b_zero ? "0" : " ";
101                                return str_x_n(c, keta - s.length).concat(s);
102                        }
103                }
104        }
105}
106
107
108function hexstr(v:int, n:int, tbl:Array): String {
109        var s:String = "";
110        for (; n > 0; n -= 1) {
111                s = tbl[(v & 0x0f)].concat(s);
112                v >>= 4;
113                if (v == 0)     break;
114        }
115        return s;
116}
117
118
119function int2hexstr(v:int, tbl:Array, flag:String, b_zero:Boolean, keta:int): String {
120        var s:String = hexstr(v, 8, tbl);
121        if (keta == 0 || s.length >= keta) {
122                return s;
123        } else {
124                if (flag == "-") {
125                        return s.concat(str_x_n(" ", keta - s.length));
126                } else {
127                        var c:String = b_zero ? "0" : " ";
128                        return str_x_n(c, keta - s.length).concat(s);
129                }
130        }
131}
132
133
134function float2str(v:Number, keta:int): String {
135        return v.toFixed(keta).toString();
136}
137
138
139function str2str(v:String, flag:String, keta:int): String {
140        var len:int = v.length;
141        if (keta <= 0 || len >= keta) {
142                return v;
143        } else {
144                if (flag == "-") {
145                        return v.concat(str_x_n(" ", keta - len));
146                } else {
147                        return str_x_n(" ", keta - len).concat(v);
148                }
149        }
150}
Note: See TracBrowser for help on using the browser.