altprintf 0.3.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/altprintf/altprintf.h +57 -0
- data/ext/altprintf/{fmt.c → assemble.c} +33 -33
- data/ext/altprintf/{altprintf/cwidth.h → cwidth.h} +0 -0
- data/ext/altprintf/ext.c +27 -22
- data/ext/altprintf/extconf_helper.rb +2 -2
- data/ext/altprintf/fmte.c +11 -11
- data/ext/altprintf/fmte.h +5 -0
- data/ext/altprintf/{altprintf/log.h → log.h} +0 -2
- data/ext/altprintf/{parsef.c → parse.c} +22 -22
- data/ext/altprintf/strbuf.c +3 -5
- data/ext/altprintf/{altprintf/strbuf.h → strbuf.h} +0 -0
- data/ext/altprintf/{altprintf/syntax.h → syntax.h} +0 -0
- data/lib/altprintf/version.rb +1 -1
- metadata +11 -14
- data/ext/altprintf/altprintf/altprintf.h +0 -8
- data/ext/altprintf/altprintf/enums.h +0 -14
- data/ext/altprintf/altprintf/fmt.h +0 -5
- data/ext/altprintf/altprintf/fmte.h +0 -34
- data/ext/altprintf/altprintf/parsef.h +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1cc830a121e86420a00495ecaf185f65d7e85b78893b178d65878f2568fbf8f1
|
4
|
+
data.tar.gz: ec7fbc35f30756832d9b71e8e5a37bf34cc900b725b002497a6eb9cf943a2ee8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 513567e60633170846a1d51e094ec7e81f1217336de27aa47b2e9e937a59efe1bd5a059695fa86f54e93a0d2f61d7864cf138282db853bee28cac8430fb909fd
|
7
|
+
data.tar.gz: 990a2a342a6218e3fea7b2bd8643239cfeaf5d1695c7495ffb80ec7d6ae3003f8e61f515d8e564abf236248096ed84d36f238049c2f1a1ec36e458d1e036b1ba
|
@@ -0,0 +1,57 @@
|
|
1
|
+
#ifndef ALTPRINTF_H_
|
2
|
+
#define ALTPRINTF_H_
|
3
|
+
#define ALTPRINTF_VERSION "0.4.0"
|
4
|
+
#include <stdlib.h>
|
5
|
+
|
6
|
+
enum apf_argt {
|
7
|
+
apf_argt_mul,
|
8
|
+
apf_argt_tern,
|
9
|
+
apf_argt_align,
|
10
|
+
apf_argt_int,
|
11
|
+
apf_argt_char,
|
12
|
+
apf_argt_double,
|
13
|
+
apf_argt_string,
|
14
|
+
apf_argt_raw,
|
15
|
+
apf_argt_none,
|
16
|
+
apf_argt_end
|
17
|
+
};
|
18
|
+
|
19
|
+
enum apf_align { apf_algn_left, apf_algn_right, apf_algn_center };
|
20
|
+
|
21
|
+
enum apf_err {
|
22
|
+
apf_err_none,
|
23
|
+
apf_err_invalid_token,
|
24
|
+
apf_err_missing_argument
|
25
|
+
};
|
26
|
+
|
27
|
+
extern enum apf_err apf_errno;
|
28
|
+
|
29
|
+
struct apf_fmte {
|
30
|
+
const char *parenarg_start;
|
31
|
+
const char *parenarg_end;
|
32
|
+
size_t parenarg_len;
|
33
|
+
|
34
|
+
const char *anglearg_start;
|
35
|
+
const char *anglearg_end;
|
36
|
+
size_t anglearg_len;
|
37
|
+
|
38
|
+
char chararg;
|
39
|
+
|
40
|
+
char padchar;
|
41
|
+
|
42
|
+
enum apf_argt type;
|
43
|
+
enum apf_align align;
|
44
|
+
|
45
|
+
long prec;
|
46
|
+
long pad;
|
47
|
+
|
48
|
+
void *value;
|
49
|
+
|
50
|
+
struct apf_fmte *next;
|
51
|
+
};
|
52
|
+
|
53
|
+
void apf_fmte_push(struct apf_fmte *, struct apf_fmte *);
|
54
|
+
void apf_fmte_destroy(struct apf_fmte *);
|
55
|
+
struct apf_fmte *apf_parse(const char **);
|
56
|
+
char *apf_assemble(struct apf_fmte *);
|
57
|
+
#endif
|
@@ -1,21 +1,20 @@
|
|
1
|
-
#include
|
2
|
-
#include
|
3
|
-
#include
|
4
|
-
#include
|
5
|
-
#include <altprintf/fmt.h>
|
1
|
+
#include "altprintf.h"
|
2
|
+
#include "syntax.h"
|
3
|
+
#include "strbuf.h"
|
4
|
+
#include "log.h"
|
6
5
|
|
7
6
|
#define BUFNUM 25
|
8
7
|
|
9
8
|
#define CHECKNULL(p) do { \
|
10
9
|
if (p == NULL) { \
|
11
|
-
|
10
|
+
apf_errno = apf_err_missing_argument; \
|
12
11
|
return; \
|
13
12
|
} \
|
14
13
|
} while (0)
|
15
14
|
|
16
|
-
enum
|
15
|
+
enum apf_err apf_errno;
|
17
16
|
|
18
|
-
void fmt_mul(struct strbuf *sb, struct
|
17
|
+
static void fmt_mul(struct strbuf *sb, struct apf_fmte *f)
|
19
18
|
{
|
20
19
|
CHECKNULL(f->value);
|
21
20
|
|
@@ -29,7 +28,7 @@ void fmt_mul(struct strbuf *sb, struct fmte *f)
|
|
29
28
|
strbuf_append_str(sb, f->parenarg_start, -f->parenarg_len);
|
30
29
|
}
|
31
30
|
|
32
|
-
void fmt_tern(struct strbuf *sb, struct
|
31
|
+
static void fmt_tern(struct strbuf *sb, struct apf_fmte *f)
|
33
32
|
{
|
34
33
|
CHECKNULL(f->parenarg_start);
|
35
34
|
CHECKNULL(f->value);
|
@@ -50,7 +49,7 @@ void fmt_tern(struct strbuf *sb, struct fmte *f)
|
|
50
49
|
}
|
51
50
|
}
|
52
51
|
|
53
|
-
char process_escape_seq(char seq)
|
52
|
+
static char process_escape_seq(char seq)
|
54
53
|
{
|
55
54
|
switch (seq) {
|
56
55
|
case FS_ESC_NL:
|
@@ -74,7 +73,7 @@ char process_escape_seq(char seq)
|
|
74
73
|
}
|
75
74
|
}
|
76
75
|
|
77
|
-
void fmt_raw(struct strbuf *sb, struct
|
76
|
+
static void fmt_raw(struct strbuf *sb, struct apf_fmte *f)
|
78
77
|
{
|
79
78
|
CHECKNULL(f->parenarg_start);
|
80
79
|
|
@@ -96,7 +95,7 @@ void fmt_raw(struct strbuf *sb, struct fmte *f)
|
|
96
95
|
}
|
97
96
|
}
|
98
97
|
|
99
|
-
void fmt_string(struct strbuf *sb, struct
|
98
|
+
static void fmt_string(struct strbuf *sb, struct apf_fmte *f)
|
100
99
|
{
|
101
100
|
CHECKNULL(f->value);
|
102
101
|
|
@@ -104,26 +103,27 @@ void fmt_string(struct strbuf *sb, struct fmte *f)
|
|
104
103
|
strbuf_append_str(sb, f->value, prec);
|
105
104
|
}
|
106
105
|
|
107
|
-
void fmt_char(struct strbuf *sb, struct
|
106
|
+
static void fmt_char(struct strbuf *sb, struct apf_fmte *f)
|
108
107
|
{
|
109
108
|
CHECKNULL(f->value);
|
110
109
|
strbuf_append_char(sb, f->value);
|
111
110
|
}
|
112
111
|
|
113
|
-
void fmt_int(struct strbuf *sb, struct
|
112
|
+
static void fmt_int(struct strbuf *sb, struct apf_fmte *f)
|
114
113
|
{
|
115
114
|
CHECKNULL(f->value);
|
116
115
|
strbuf_append_int(sb, f->value);
|
117
116
|
}
|
118
117
|
|
119
|
-
void fmt_double(struct strbuf *sb, struct
|
118
|
+
static void fmt_double(struct strbuf *sb, struct apf_fmte *f)
|
120
119
|
{
|
121
120
|
CHECKNULL(f->value);
|
122
121
|
int prec = f->prec == -1 ? 3 : f->prec;
|
123
122
|
strbuf_append_double(sb, f->value, prec);
|
124
123
|
}
|
125
124
|
|
126
|
-
|
125
|
+
static void
|
126
|
+
fmt(struct strbuf *sb, struct apf_fmte *f, void (*fmtr)(struct strbuf *, struct apf_fmte *))
|
127
127
|
{
|
128
128
|
struct strbuf *tmp = strbuf_new();
|
129
129
|
|
@@ -139,15 +139,15 @@ void fmt(struct strbuf *sb, struct fmte *f, void (*fmtr)(struct strbuf *, struct
|
|
139
139
|
if (pad > 0) {
|
140
140
|
LOG("padding: %d\n", pad);
|
141
141
|
switch (f->align) {
|
142
|
-
case
|
142
|
+
case apf_algn_right:
|
143
143
|
strbuf_append_strbuf(sb, tmp);
|
144
144
|
strbuf_pad(sb, f->padchar, pad);
|
145
145
|
break;
|
146
|
-
case
|
146
|
+
case apf_algn_left:
|
147
147
|
strbuf_pad(sb, f->padchar, pad);
|
148
148
|
strbuf_append_strbuf(sb, tmp);
|
149
149
|
break;
|
150
|
-
case
|
150
|
+
case apf_algn_center:
|
151
151
|
strbuf_pad(sb, f->padchar, pad / 2);
|
152
152
|
strbuf_append_strbuf(sb, tmp);
|
153
153
|
strbuf_pad(sb, f->padchar, pad / 2 + pad % 2);
|
@@ -160,16 +160,16 @@ void fmt(struct strbuf *sb, struct fmte *f, void (*fmtr)(struct strbuf *, struct
|
|
160
160
|
strbuf_destroy(tmp);
|
161
161
|
}
|
162
162
|
|
163
|
-
char *
|
163
|
+
char *apf_assemble(struct apf_fmte *head)
|
164
164
|
{
|
165
|
-
struct
|
165
|
+
struct apf_fmte *f = head;
|
166
166
|
struct strbuf *bufs[BUFNUM];
|
167
|
-
struct
|
167
|
+
struct apf_fmte *splits[BUFNUM];
|
168
168
|
size_t buf = 0, i;
|
169
169
|
size_t w, tw, rw;
|
170
170
|
char *final;
|
171
171
|
|
172
|
-
void (*fmtr)(struct strbuf *, struct
|
172
|
+
void (*fmtr)(struct strbuf *, struct apf_fmte *) = NULL;
|
173
173
|
int loop = 1;
|
174
174
|
|
175
175
|
bufs[buf] = strbuf_new();
|
@@ -177,39 +177,39 @@ char *assemble_fmt(struct fmte *head)
|
|
177
177
|
LOG("assembling elements\n");
|
178
178
|
while (loop) {
|
179
179
|
switch (f->type) {
|
180
|
-
case
|
180
|
+
case apf_argt_mul:
|
181
181
|
fmtr = fmt_mul;
|
182
182
|
break;
|
183
|
-
case
|
183
|
+
case apf_argt_tern:
|
184
184
|
fmtr = fmt_tern;
|
185
185
|
break;
|
186
|
-
case
|
186
|
+
case apf_argt_int:
|
187
187
|
fmtr = fmt_int;
|
188
188
|
break;
|
189
|
-
case
|
189
|
+
case apf_argt_char:
|
190
190
|
fmtr = fmt_char;
|
191
191
|
break;
|
192
|
-
case
|
192
|
+
case apf_argt_double:
|
193
193
|
fmtr = fmt_double;
|
194
194
|
break;
|
195
|
-
case
|
195
|
+
case apf_argt_string:
|
196
196
|
fmtr = fmt_string;
|
197
197
|
break;
|
198
|
-
case
|
198
|
+
case apf_argt_raw:
|
199
199
|
fmtr = fmt_raw;
|
200
200
|
break;
|
201
201
|
|
202
|
-
case
|
202
|
+
case apf_argt_align:
|
203
203
|
buf++;
|
204
204
|
splits[buf] = f;
|
205
205
|
bufs[buf] = strbuf_new();
|
206
206
|
fmtr = NULL;
|
207
207
|
break;
|
208
|
-
case
|
208
|
+
case apf_argt_end:
|
209
209
|
loop = 0;
|
210
210
|
fmtr = NULL;
|
211
211
|
break;
|
212
|
-
case
|
212
|
+
case apf_argt_none:
|
213
213
|
fmtr = NULL;
|
214
214
|
break;
|
215
215
|
}
|
File without changes
|
data/ext/altprintf/ext.c
CHANGED
@@ -6,13 +6,18 @@
|
|
6
6
|
#undef RUBY_EXTCONF_H
|
7
7
|
#endif
|
8
8
|
|
9
|
+
#ifdef DEBUG
|
10
|
+
#define LOG(...) printf("%s:%d [\e[35m%s\e[0m] ", __FILE__, __LINE__, __func__); printf(__VA_ARGS__);
|
11
|
+
#else
|
12
|
+
#define LOG(msg, ...)
|
13
|
+
#endif
|
14
|
+
|
9
15
|
#include "extconf.h"
|
10
16
|
#include <stdio.h>
|
11
17
|
#include <locale.h>
|
12
18
|
#include <ruby.h>
|
13
19
|
#include <ruby/encoding.h>
|
14
|
-
#include <altprintf
|
15
|
-
#include <altprintf/log.h>
|
20
|
+
#include <altprintf.h>
|
16
21
|
|
17
22
|
rb_encoding *enc;
|
18
23
|
|
@@ -45,7 +50,7 @@ VALUE cstorbs(const char *cstr)
|
|
45
50
|
return str;
|
46
51
|
}
|
47
52
|
|
48
|
-
VALUE get_entry(struct
|
53
|
+
VALUE get_entry(struct apf_fmte *f, size_t argc, size_t *argi, VALUE *argv, VALUE *hash)
|
49
54
|
{
|
50
55
|
VALUE sym, entry;
|
51
56
|
|
@@ -70,7 +75,7 @@ VALUE get_entry(struct fmte *f, size_t argc, size_t *argi, VALUE *argv, VALUE *h
|
|
70
75
|
|
71
76
|
char *rb_apformat(const char *fmt, size_t argc, size_t *argi, VALUE *argv, VALUE *hash)
|
72
77
|
{
|
73
|
-
struct
|
78
|
+
struct apf_fmte *f, *head;
|
74
79
|
char *final;
|
75
80
|
int loop = 1;
|
76
81
|
long *tmpi;
|
@@ -80,42 +85,42 @@ char *rb_apformat(const char *fmt, size_t argc, size_t *argi, VALUE *argv, VALUE
|
|
80
85
|
void *tmp;
|
81
86
|
VALUE entry;
|
82
87
|
|
83
|
-
head = f =
|
88
|
+
head = f = apf_parse(&fmt);
|
84
89
|
|
85
90
|
while (loop) {
|
86
|
-
if (
|
91
|
+
if (apf_errno != apf_err_none)
|
87
92
|
rb_raise(rb_eArgError, "malformed format string");
|
88
93
|
|
89
94
|
LOG("scanned type: %d\n", f->type);
|
90
95
|
|
91
|
-
if (f->type !=
|
96
|
+
if (f->type != apf_argt_end && f->type != apf_argt_raw)
|
92
97
|
entry = get_entry(f, argc, argi, argv, hash);
|
93
98
|
else
|
94
99
|
entry = Qnil;
|
95
100
|
|
96
101
|
switch (f->type) {
|
97
|
-
case
|
102
|
+
case apf_argt_string:
|
98
103
|
Check_Type(entry, T_STRING);
|
99
104
|
|
100
105
|
tmp = rbstocs(&entry);
|
101
106
|
goto match;
|
102
|
-
case
|
107
|
+
case apf_argt_tern:
|
103
108
|
tmpi = malloc(sizeof(long));
|
104
109
|
|
105
110
|
*tmpi = (entry == Qfalse || entry == Qnil) ? 0 : 1;
|
106
111
|
|
107
112
|
tmp = tmpi;
|
108
113
|
goto match;
|
109
|
-
case
|
110
|
-
case
|
111
|
-
case
|
114
|
+
case apf_argt_mul:
|
115
|
+
case apf_argt_align:
|
116
|
+
case apf_argt_int:
|
112
117
|
Check_Type(entry, T_FIXNUM);
|
113
118
|
|
114
119
|
tmpi = malloc(sizeof(long));
|
115
120
|
*tmpi = FIX2LONG(entry);
|
116
121
|
tmp = tmpi;
|
117
122
|
goto match;
|
118
|
-
case
|
123
|
+
case apf_argt_char:
|
119
124
|
Check_Type(entry, T_STRING);
|
120
125
|
|
121
126
|
tmpc = malloc(sizeof(char));
|
@@ -123,7 +128,7 @@ char *rb_apformat(const char *fmt, size_t argc, size_t *argi, VALUE *argv, VALUE
|
|
123
128
|
*tmpc = tmps[0];
|
124
129
|
tmp = tmpc;
|
125
130
|
goto match;
|
126
|
-
case
|
131
|
+
case apf_argt_double:
|
127
132
|
Check_Type(entry, T_FLOAT);
|
128
133
|
|
129
134
|
tmpd = malloc(sizeof(double));
|
@@ -132,13 +137,13 @@ char *rb_apformat(const char *fmt, size_t argc, size_t *argi, VALUE *argv, VALUE
|
|
132
137
|
match:
|
133
138
|
f->value = tmp;
|
134
139
|
break;
|
135
|
-
case
|
140
|
+
case apf_argt_raw:
|
136
141
|
break;
|
137
|
-
case
|
142
|
+
case apf_argt_end:
|
138
143
|
LOG("EOS (end of string)\n");
|
139
144
|
loop = 0;
|
140
145
|
break;
|
141
|
-
case
|
146
|
+
case apf_argt_none:
|
142
147
|
LOG("error! shouldn' t be none\n");
|
143
148
|
break;
|
144
149
|
}
|
@@ -147,15 +152,15 @@ match:
|
|
147
152
|
#ifdef DEBUG
|
148
153
|
fmte_inspect(f);
|
149
154
|
#endif
|
150
|
-
|
155
|
+
apf_fmte_push(head, f);
|
151
156
|
if (loop)
|
152
|
-
f =
|
157
|
+
f = apf_parse(&fmt);
|
153
158
|
}
|
154
159
|
|
155
160
|
LOG("got all fmt elements\n");
|
156
|
-
final =
|
161
|
+
final = apf_assemble(head);
|
157
162
|
LOG("assembled fmt: %s", final);
|
158
|
-
|
163
|
+
apf_fmte_destroy(head);
|
159
164
|
return final;
|
160
165
|
}
|
161
166
|
|
@@ -167,7 +172,7 @@ VALUE rb_altprintf(long passes, size_t argc, VALUE *argv, VALUE self)
|
|
167
172
|
size_t argi;
|
168
173
|
int free_wfmt;
|
169
174
|
|
170
|
-
|
175
|
+
apf_errno = apf_err_none;
|
171
176
|
rb_scan_args(argc, argv, "1*:", &fmt, &args, &hash);
|
172
177
|
argc--;
|
173
178
|
|
@@ -10,12 +10,12 @@ module ExtconfHelper
|
|
10
10
|
module_function
|
11
11
|
|
12
12
|
def dev_setup
|
13
|
-
unless find_header('altprintf
|
13
|
+
unless find_header('altprintf.h', INC_DIR)
|
14
14
|
$stderr.puts("couldn't find header 'altprintf.h'")
|
15
15
|
exit(1)
|
16
16
|
end
|
17
17
|
|
18
|
-
unless find_library('altprintf', '
|
18
|
+
unless find_library('altprintf', 'apf_parse', LIB_DIR)
|
19
19
|
$stderr.puts("you haven't built libaltprintf yet")
|
20
20
|
exit(1)
|
21
21
|
end
|
data/ext/altprintf/fmte.c
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
#include <stdlib.h>
|
2
2
|
#include <stdio.h>
|
3
|
-
#include
|
4
|
-
#include
|
5
|
-
#include
|
3
|
+
#include "altprintf.h"
|
4
|
+
#include "fmte.h"
|
5
|
+
#include "log.h"
|
6
6
|
|
7
|
-
struct
|
7
|
+
struct apf_fmte *apf_fmte_ini(void)
|
8
8
|
{
|
9
|
-
struct
|
9
|
+
struct apf_fmte *f = malloc(sizeof(struct apf_fmte));
|
10
10
|
|
11
11
|
f->parenarg_start = NULL;
|
12
12
|
f->parenarg_end = NULL;
|
@@ -18,8 +18,8 @@ struct fmte *fmte_ini(void)
|
|
18
18
|
|
19
19
|
f->chararg = ' ';
|
20
20
|
f->padchar = ' ';
|
21
|
-
f->type =
|
22
|
-
f->align =
|
21
|
+
f->type = apf_argt_none;
|
22
|
+
f->align = apf_algn_left;
|
23
23
|
f->prec = -1;
|
24
24
|
f->pad = 0;
|
25
25
|
f->value = NULL;
|
@@ -29,7 +29,7 @@ struct fmte *fmte_ini(void)
|
|
29
29
|
return f;
|
30
30
|
}
|
31
31
|
|
32
|
-
void
|
32
|
+
void apf_fmte_push(struct apf_fmte *a, struct apf_fmte *b)
|
33
33
|
{
|
34
34
|
if (a == b)
|
35
35
|
return; // refuse to create an infinite loop
|
@@ -39,9 +39,9 @@ void fmte_push(struct fmte *a, struct fmte *b)
|
|
39
39
|
a->next = b;
|
40
40
|
}
|
41
41
|
|
42
|
-
void
|
42
|
+
void apf_fmte_destroy(struct apf_fmte *f)
|
43
43
|
{
|
44
|
-
struct
|
44
|
+
struct apf_fmte *j;
|
45
45
|
|
46
46
|
while (f != NULL) {
|
47
47
|
j = f->next;
|
@@ -51,7 +51,7 @@ void fmte_destroy(struct fmte *f)
|
|
51
51
|
}
|
52
52
|
}
|
53
53
|
|
54
|
-
void
|
54
|
+
void apf_fmte_inspect(struct apf_fmte *f)
|
55
55
|
{
|
56
56
|
char *parenarg = calloc(f->parenarg_len + 1, sizeof(char));
|
57
57
|
char *anglearg = calloc(f->anglearg_len + 1, sizeof(char));
|
@@ -3,10 +3,8 @@
|
|
3
3
|
|
4
4
|
#ifdef DEBUG
|
5
5
|
#define LOG(...) printf("%s:%d [\e[35m%s\e[0m] ", __FILE__, __LINE__, __func__); printf(__VA_ARGS__);
|
6
|
-
#define FLOG(msg, ...) fprintf(stderr, "%s[%d] - "msg, __FILE__, __LINE__ __VA_OPT__(, ) __VA_ARGS__)
|
7
6
|
#else
|
8
7
|
#define LOG(msg, ...)
|
9
|
-
#define FLOG(msg, ...)
|
10
8
|
#endif
|
11
9
|
|
12
10
|
#endif
|
@@ -1,11 +1,11 @@
|
|
1
|
-
#include
|
2
|
-
#include
|
3
|
-
#include
|
4
|
-
#include
|
1
|
+
#include "altprintf.h"
|
2
|
+
#include "fmte.h"
|
3
|
+
#include "syntax.h"
|
4
|
+
#include "log.h"
|
5
5
|
|
6
6
|
char *altprintf_pct = "%";
|
7
7
|
|
8
|
-
void get_longarg(const char **s, const char **e, char stop, size_t *size)
|
8
|
+
static void get_longarg(const char **s, const char **e, char stop, size_t *size)
|
9
9
|
{
|
10
10
|
*size = 0;
|
11
11
|
|
@@ -20,23 +20,23 @@ void get_longarg(const char **s, const char **e, char stop, size_t *size)
|
|
20
20
|
*e = *s - 1;
|
21
21
|
}
|
22
22
|
|
23
|
-
struct
|
23
|
+
struct apf_fmte *apf_parse(const char **fmt)
|
24
24
|
{
|
25
25
|
char *w_c;
|
26
26
|
char **w_a = &w_c;
|
27
|
-
struct
|
27
|
+
struct apf_fmte *f = apf_fmte_ini();
|
28
28
|
long *l_a = &f->pad;
|
29
29
|
|
30
30
|
LOG("processing %d (%c)\n", **fmt, **fmt);
|
31
31
|
|
32
32
|
if (**fmt != FS_START) {
|
33
33
|
if (**fmt == EOS) {
|
34
|
-
f->type =
|
34
|
+
f->type = apf_argt_end;
|
35
35
|
goto return_format;
|
36
36
|
}
|
37
37
|
|
38
38
|
LOG("building raw format\n");
|
39
|
-
f->type =
|
39
|
+
f->type = apf_argt_raw;
|
40
40
|
|
41
41
|
f->parenarg_start = *fmt;
|
42
42
|
LOG("scanning long arg\n");
|
@@ -68,10 +68,10 @@ struct fmte *parsef(const char **fmt)
|
|
68
68
|
get_longarg(fmt, &f->parenarg_end, FS_A_PARENARG_E, &f->parenarg_len);
|
69
69
|
break;
|
70
70
|
case FS_A_LALIGN:
|
71
|
-
f->align =
|
71
|
+
f->align = apf_algn_left;
|
72
72
|
break;
|
73
73
|
case FS_A_CALIGN:
|
74
|
-
f->align =
|
74
|
+
f->align = apf_algn_center;
|
75
75
|
break;
|
76
76
|
case FS_A_PAD:
|
77
77
|
(*fmt)++;
|
@@ -89,40 +89,40 @@ struct fmte *parsef(const char **fmt)
|
|
89
89
|
break;
|
90
90
|
// Psuedo-type
|
91
91
|
case FS_START:
|
92
|
-
f->type =
|
92
|
+
f->type = apf_argt_raw;
|
93
93
|
f->parenarg_start = &altprintf_pct[0];
|
94
94
|
f->parenarg_end = &altprintf_pct[1];
|
95
95
|
f->parenarg_len = 1;
|
96
96
|
goto return_format;
|
97
97
|
// Types
|
98
98
|
case FS_T_STRING:
|
99
|
-
f->type =
|
99
|
+
f->type = apf_argt_string;
|
100
100
|
goto return_format;
|
101
101
|
case FS_T_MUL:
|
102
|
-
f->type =
|
102
|
+
f->type = apf_argt_mul;
|
103
103
|
goto return_format;
|
104
104
|
case FS_T_TERN:
|
105
|
-
f->type =
|
105
|
+
f->type = apf_argt_tern;
|
106
106
|
goto return_format;
|
107
107
|
case FS_T_ALIGN:
|
108
|
-
f->type =
|
108
|
+
f->type = apf_argt_align;
|
109
109
|
goto return_format;
|
110
110
|
case FS_T_INT:
|
111
|
-
f->type =
|
111
|
+
f->type = apf_argt_int;
|
112
112
|
goto return_format;
|
113
113
|
case FS_T_CHAR:
|
114
|
-
f->type =
|
114
|
+
f->type = apf_argt_char;
|
115
115
|
goto return_format;
|
116
116
|
case FS_T_DOUBLE:
|
117
|
-
f->type =
|
117
|
+
f->type = apf_argt_double;
|
118
118
|
goto return_format;
|
119
119
|
default:
|
120
|
-
|
121
|
-
f->type =
|
120
|
+
apf_errno = apf_err_invalid_token;
|
121
|
+
f->type = apf_argt_raw;
|
122
122
|
}
|
123
123
|
}
|
124
124
|
|
125
|
-
f->type =
|
125
|
+
f->type = apf_argt_end;
|
126
126
|
return_format:
|
127
127
|
(*fmt)++;
|
128
128
|
return f;
|
data/ext/altprintf/strbuf.c
CHANGED
@@ -6,11 +6,9 @@
|
|
6
6
|
#include <stdlib.h>
|
7
7
|
#include <stdio.h>
|
8
8
|
#include <string.h>
|
9
|
-
#include
|
10
|
-
#include
|
11
|
-
#include
|
12
|
-
|
13
|
-
extern struct lconv *locale_info;
|
9
|
+
#include "log.h"
|
10
|
+
#include "strbuf.h"
|
11
|
+
#include "cwidth.h"
|
14
12
|
|
15
13
|
struct strbuf *strbuf_new(void)
|
16
14
|
{
|
File without changes
|
File without changes
|
data/lib/altprintf/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: altprintf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stone Tickle
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: benchmark-ips
|
@@ -74,24 +74,21 @@ extensions:
|
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
76
|
- altprintf.gemspec
|
77
|
-
- ext/altprintf/altprintf
|
78
|
-
- ext/altprintf/
|
79
|
-
- ext/altprintf/altprintf/enums.h
|
80
|
-
- ext/altprintf/altprintf/fmt.h
|
81
|
-
- ext/altprintf/altprintf/fmte.h
|
82
|
-
- ext/altprintf/altprintf/log.h
|
83
|
-
- ext/altprintf/altprintf/parsef.h
|
84
|
-
- ext/altprintf/altprintf/strbuf.h
|
85
|
-
- ext/altprintf/altprintf/syntax.h
|
77
|
+
- ext/altprintf/altprintf.h
|
78
|
+
- ext/altprintf/assemble.c
|
86
79
|
- ext/altprintf/cwidth.c
|
80
|
+
- ext/altprintf/cwidth.h
|
87
81
|
- ext/altprintf/ext.c
|
88
82
|
- ext/altprintf/extconf.h
|
89
83
|
- ext/altprintf/extconf.rb
|
90
84
|
- ext/altprintf/extconf_helper.rb
|
91
|
-
- ext/altprintf/fmt.c
|
92
85
|
- ext/altprintf/fmte.c
|
93
|
-
- ext/altprintf/
|
86
|
+
- ext/altprintf/fmte.h
|
87
|
+
- ext/altprintf/log.h
|
88
|
+
- ext/altprintf/parse.c
|
94
89
|
- ext/altprintf/strbuf.c
|
90
|
+
- ext/altprintf/strbuf.h
|
91
|
+
- ext/altprintf/syntax.h
|
95
92
|
- lib/altprintf.rb
|
96
93
|
- lib/altprintf/version.rb
|
97
94
|
- readme.md
|
@@ -114,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
111
|
- !ruby/object:Gem::Version
|
115
112
|
version: '0'
|
116
113
|
requirements: []
|
117
|
-
rubygems_version: 3.0.
|
114
|
+
rubygems_version: 3.0.6
|
118
115
|
signing_key:
|
119
116
|
specification_version: 4
|
120
117
|
summary: A powerful printf-like template language
|
@@ -1,14 +0,0 @@
|
|
1
|
-
#ifndef _ALTPRINTF_ENUM_H
|
2
|
-
#define _ALTPRINTF_ENUM_H
|
3
|
-
enum arg_type { FMul, FTern, FAlign, FInt, FChar, FDouble, FString, FRaw, FNone,
|
4
|
-
FEnd };
|
5
|
-
enum align { Left, Right, Center };
|
6
|
-
|
7
|
-
enum altprintf_err {
|
8
|
-
apfe_none,
|
9
|
-
apfe_invalid_token,
|
10
|
-
apfe_missing_argument
|
11
|
-
};
|
12
|
-
|
13
|
-
extern enum altprintf_err apf_err;
|
14
|
-
#endif
|
@@ -1,34 +0,0 @@
|
|
1
|
-
#ifndef FMTE_H_
|
2
|
-
#define FMTE_H_
|
3
|
-
#include <stdlib.h>
|
4
|
-
#include <altprintf/enums.h>
|
5
|
-
|
6
|
-
struct fmte {
|
7
|
-
const char *parenarg_start;
|
8
|
-
const char *parenarg_end;
|
9
|
-
size_t parenarg_len;
|
10
|
-
|
11
|
-
const char *anglearg_start;
|
12
|
-
const char *anglearg_end;
|
13
|
-
size_t anglearg_len;
|
14
|
-
|
15
|
-
char chararg;
|
16
|
-
|
17
|
-
char padchar;
|
18
|
-
|
19
|
-
enum arg_type type;
|
20
|
-
enum align align;
|
21
|
-
|
22
|
-
long prec;
|
23
|
-
long pad;
|
24
|
-
|
25
|
-
void *value;
|
26
|
-
|
27
|
-
struct fmte *next;
|
28
|
-
};
|
29
|
-
|
30
|
-
struct fmte *fmte_ini(void);
|
31
|
-
void fmte_inspect(struct fmte *);
|
32
|
-
void fmte_push(struct fmte *, struct fmte *);
|
33
|
-
void fmte_destroy(struct fmte *);
|
34
|
-
#endif
|