alt_printf 0.1.1 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +2 -0
- data/alt_printf.gemspec +1 -1
- data/ext/alt_printf/alt_printf.c +42 -5
- data/ext/alt_printf/altprintf.c +6 -0
- data/ext/alt_printf/extconf.h +0 -0
- data/lib/alt_printf/alt_printf.so +0 -0
- data/lib/alt_printf/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35403cb6b05ff5261a51180f48e16840860e28e8e49e6ce7f58fc5bd005a280e
|
4
|
+
data.tar.gz: fd7fe644f7d76dadc0780f98f6871fe6b08e31dad97ae5e3ef03877753c88bfd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b408f3e40e812c8d420bf03749a0fd07136a1a8849af5011a855464602163cf7e2bc3a824c0b7565e410c856b0078d8ee01ccee744f65ca8c68b7d425eaa3a83
|
7
|
+
data.tar.gz: ea0811bf28ad00219a1218a3c915248526f1b01707bda152a289ddd6c78aa368a06ae073bbeb90dd1dd31c4301cca1f27cb62eefb643e494d096ded65bb6a12c
|
data/Rakefile
CHANGED
@@ -10,6 +10,7 @@ Rake::ExtensionTask.new('alt_printf') do |ext|
|
|
10
10
|
ext.config_script = 'extconf_dev.rb'
|
11
11
|
end
|
12
12
|
|
13
|
+
desc 'copy necessary C files from ../src and build the resulting gem'
|
13
14
|
task :build_gem do
|
14
15
|
tmp_dir = "/tmp/alt_printf_#{SecureRandom.hex(8)}"
|
15
16
|
puts "cloning to #{tmp_dir}"
|
@@ -46,6 +47,7 @@ task :build_gem do
|
|
46
47
|
FileUtils.rm_rf(tmp_dir)
|
47
48
|
end
|
48
49
|
|
50
|
+
desc 'uses build_gem and pushes the resulting gem'
|
49
51
|
task publish: :build_gem do
|
50
52
|
load File.join(__dir__, 'alt_printf.gemspec')
|
51
53
|
|
data/alt_printf.gemspec
CHANGED
@@ -8,7 +8,7 @@ AltPrintf::SPEC = Gem::Specification.new do |s|
|
|
8
8
|
s.summary = 'A powerful printf-like template language'
|
9
9
|
s.authors = ['Stone Tickle']
|
10
10
|
s.email = 'lattis@mochiro.moe'
|
11
|
-
s.homepage = 'https://github.com/annacrombie/
|
11
|
+
s.homepage = 'https://github.com/annacrombie/altprintf/gem'
|
12
12
|
s.license = 'MIT'
|
13
13
|
|
14
14
|
s.files = Dir['{**/*}']
|
data/ext/alt_printf/alt_printf.c
CHANGED
@@ -96,14 +96,26 @@ struct list_elem *rb_altprintf_make_list(const wchar_t *fmt, VALUE *argv, long *
|
|
96
96
|
use_hash++;
|
97
97
|
}
|
98
98
|
|
99
|
-
|
99
|
+
LOG("use_hash: %d\n", use_hash);
|
100
|
+
len = wcsnrtombs(NULL, &tmp_str, use_hash, 0, NULL);
|
101
|
+
|
100
102
|
cstr = calloc(len + 1, sizeof(char));
|
101
103
|
wcsnrtombs(cstr, &tmp_str, use_hash, len, NULL);
|
102
|
-
|
104
|
+
|
105
|
+
LOG("symbol | cstr: '%s', len %d\n", cstr, len);
|
103
106
|
|
104
107
|
symbol = rb_check_symbol_cstr(cstr, len, enc);
|
105
108
|
entry = rb_hash_lookup2(*hash, symbol, Qnil);
|
106
|
-
|
109
|
+
|
110
|
+
if (entry == Qnil) {
|
111
|
+
rb_raise(
|
112
|
+
rb_eKeyError,
|
113
|
+
"no such key :%s",
|
114
|
+
cstr
|
115
|
+
);
|
116
|
+
free(cstr);
|
117
|
+
}
|
118
|
+
|
107
119
|
use_hash = 1;
|
108
120
|
|
109
121
|
break;
|
@@ -116,8 +128,19 @@ struct list_elem *rb_altprintf_make_list(const wchar_t *fmt, VALUE *argv, long *
|
|
116
128
|
tmp_str = rbstowcs(entry);
|
117
129
|
le_cur = list_elem_ini(tmp_str, String);
|
118
130
|
goto match;
|
119
|
-
case FS_T_MUL:
|
120
131
|
case FS_T_TERN:
|
132
|
+
CHECKARG;
|
133
|
+
tmp_int = malloc(sizeof(long int));
|
134
|
+
if (entry == Qfalse || entry == Qnil) {
|
135
|
+
*tmp_int = 0;
|
136
|
+
} else {
|
137
|
+
*tmp_int = 1;
|
138
|
+
}
|
139
|
+
LOG("got bool %ld\n", *tmp_int);
|
140
|
+
le_cur = list_elem_ini(tmp_int, Int);
|
141
|
+
|
142
|
+
goto match;
|
143
|
+
case FS_T_MUL:
|
121
144
|
case FS_T_ALIGN:
|
122
145
|
case FS_T_INT:
|
123
146
|
CHECKARG;
|
@@ -173,6 +196,11 @@ VALUE rb_alt_printf(long passes, size_t argc, VALUE *argv, VALUE self) {
|
|
173
196
|
|
174
197
|
rb_scan_args(argc, argv, "1*:", &fmt, &args, &hash);
|
175
198
|
|
199
|
+
if (hash == Qnil && RB_TYPE_P(argv[argc - 1], T_HASH)) {
|
200
|
+
hash = argv[argc - 1];
|
201
|
+
argc--;
|
202
|
+
}
|
203
|
+
|
176
204
|
if (passes == 0) return fmt;
|
177
205
|
|
178
206
|
wfmt = rbstowcs(fmt);
|
@@ -181,6 +209,9 @@ VALUE rb_alt_printf(long passes, size_t argc, VALUE *argv, VALUE self) {
|
|
181
209
|
while (passes > 0) {
|
182
210
|
ap = rb_altprintf_make_list(wfmt, &args, &argi, &hash);
|
183
211
|
|
212
|
+
//list_elem_inspect_all(ap);
|
213
|
+
LOG("wfmt: %ls\n", wfmt);
|
214
|
+
|
184
215
|
formatted = altsprintf(wfmt, ap);
|
185
216
|
LOG("formatted result: '%ls'\n", formatted);
|
186
217
|
|
@@ -207,7 +238,13 @@ VALUE rb_alt_printf_single_pass(size_t argc, VALUE *argv, VALUE self) {
|
|
207
238
|
VALUE rb_alt_printf_multi_pass(size_t argc, VALUE *argv, VALUE self) {
|
208
239
|
long passes;
|
209
240
|
|
210
|
-
|
241
|
+
|
242
|
+
if (RB_TYPE_P(argv[0], T_FIXNUM)) {
|
243
|
+
passes = FIX2LONG(argv[0]);
|
244
|
+
} else {
|
245
|
+
rb_raise(rb_eArgError, "integer expected");
|
246
|
+
return Qnil;
|
247
|
+
}
|
211
248
|
|
212
249
|
LOG("passes: %ld\n", passes);
|
213
250
|
return rb_alt_printf(passes, argc - 1, &argv[1], self);
|
data/ext/alt_printf/altprintf.c
CHANGED
@@ -117,6 +117,9 @@ wchar_t *altsprintf(wchar_t *fmt, struct list_elem *le) {
|
|
117
117
|
case 1:
|
118
118
|
switch(*fmt) {
|
119
119
|
/* special arguments */
|
120
|
+
case FS_A_RBHASHSTART:
|
121
|
+
while (fmt < end && *fmt != FS_A_RBHASHEND) fmt++;
|
122
|
+
break;
|
120
123
|
case FS_A_STRINGSTART:
|
121
124
|
f.stringarg_start = fmt + 1;
|
122
125
|
lvl = 2;
|
@@ -191,6 +194,9 @@ wchar_t *altsprintf(wchar_t *fmt, struct list_elem *le) {
|
|
191
194
|
strbuf_append(sb, FS_START);
|
192
195
|
lvl = 0;
|
193
196
|
break;
|
197
|
+
default:
|
198
|
+
lvl = 0;
|
199
|
+
break;
|
194
200
|
}; break;
|
195
201
|
case 2:
|
196
202
|
if (*fmt == FS_A_STRINGEND) {
|
File without changes
|
Binary file
|
data/lib/alt_printf/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alt_printf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
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-08-
|
11
|
+
date: 2019-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- ext/alt_printf/alt_printf.c
|
53
53
|
- ext/alt_printf/altprintf.c
|
54
54
|
- ext/alt_printf/altprintf.h
|
55
|
+
- ext/alt_printf/extconf.h
|
55
56
|
- ext/alt_printf/extconf.rb
|
56
57
|
- ext/alt_printf/extconf_dev.rb
|
57
58
|
- ext/alt_printf/list.c
|
@@ -63,7 +64,7 @@ files:
|
|
63
64
|
- lib/alt_printf.rb
|
64
65
|
- lib/alt_printf/alt_printf.so
|
65
66
|
- lib/alt_printf/version.rb
|
66
|
-
homepage: https://github.com/annacrombie/
|
67
|
+
homepage: https://github.com/annacrombie/altprintf/gem
|
67
68
|
licenses:
|
68
69
|
- MIT
|
69
70
|
metadata: {}
|