berns 3.1.4 → 3.1.5
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/berns/berns.c +136 -131
- data/ext/berns/extconf.rb +1 -1
- data/lib/berns/berns.so +0 -0
- data/lib/berns/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 15dd768826a0b862ad1146c4ba331bd5735f791199aed34d0a217c0ad7fc94ca
|
4
|
+
data.tar.gz: 8a7fb6f17dfd7805163003ac751209138b7b5a7bd286afa3d72fb157d31328e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d953ee5567cd4e448f3fd11b3075bcee6c5e1c6253f56714d9c3355ca5a1a7dcb6170bca926f8b537a9dd1e3bb6b218caa408b60e9d8d1146b55cd4b38fd9a58
|
7
|
+
data.tar.gz: 735a2e506fe777f9ab0932bb8d00aecd5cf01fafc03c9780ae1776014b016f61c01e7b8938d3fce80d15bfdb140a104367fe3361b7b0bd5d734fef1a6dc41a05
|
data/ext/berns/berns.c
CHANGED
@@ -47,11 +47,12 @@ static const size_t sllen = 1;
|
|
47
47
|
* Macro to define a "dynamic" function that generates a void element.
|
48
48
|
*/
|
49
49
|
#define VOID_ELEMENT(element_name) \
|
50
|
-
static VALUE external_##element_name##_element(int argc, VALUE*
|
50
|
+
static VALUE external_##element_name##_element(int argc, VALUE *argv, RB_UNUSED_VAR(VALUE self)) { \
|
51
51
|
rb_check_arity(argc, 0, 1); \
|
52
52
|
\
|
53
|
-
|
54
|
-
char *
|
53
|
+
VALUE attrs = argv[0]; \
|
54
|
+
const char *tag = #element_name; \
|
55
|
+
char *string = void_element(tag, strlen(tag), attrs); \
|
55
56
|
VALUE rstring = rb_utf8_str_new_cstr(string); \
|
56
57
|
free(string); \
|
57
58
|
\
|
@@ -62,12 +63,13 @@ static const size_t sllen = 1;
|
|
62
63
|
* Macro to define a "dynamic" function that generates a standard element.
|
63
64
|
*/
|
64
65
|
#define STANDARD_ELEMENT(element_name) \
|
65
|
-
static VALUE external_##element_name##_element(int argc, VALUE*
|
66
|
+
static VALUE external_##element_name##_element(int argc, VALUE *argv, RB_UNUSED_VAR(VALUE self)) { \
|
66
67
|
rb_check_arity(argc, 0, 1); \
|
67
68
|
\
|
68
69
|
CONTENT_FROM_BLOCK; \
|
69
|
-
|
70
|
-
char *
|
70
|
+
VALUE attrs = argv[0]; \
|
71
|
+
const char *tag = #element_name; \
|
72
|
+
char *string = element(tag, strlen(tag), RSTRING_PTR(content), RSTRING_LEN(content), attrs); \
|
71
73
|
VALUE rstring = rb_utf8_str_new_cstr(string); \
|
72
74
|
free(string); \
|
73
75
|
\
|
@@ -78,12 +80,16 @@ static const size_t sllen = 1;
|
|
78
80
|
/*
|
79
81
|
* "Safe strcpy" - https://twitter.com/hyc_symas/status/1102573036534972416?s=12
|
80
82
|
*/
|
81
|
-
static char *stecpy(char *destination, const char *source, const char *end) {
|
83
|
+
static char * stecpy(char *destination, const char *source, const char *end) {
|
84
|
+
if (end) {
|
85
|
+
end--;
|
86
|
+
}
|
87
|
+
|
82
88
|
while (*source && destination < end) {
|
83
89
|
*destination++ = *source++;
|
84
90
|
}
|
85
91
|
|
86
|
-
if (destination
|
92
|
+
if (destination) {
|
87
93
|
*destination = '\0';
|
88
94
|
}
|
89
95
|
|
@@ -123,7 +129,6 @@ static VALUE external_escape_html(const VALUE self, VALUE string) {
|
|
123
129
|
static char * empty_value_to_attribute(const char *attr, const size_t attrlen) {
|
124
130
|
size_t total_size = attrlen + 1;
|
125
131
|
char *dest = malloc(total_size);
|
126
|
-
char *ptr = NULL;
|
127
132
|
char *end = dest + total_size;
|
128
133
|
|
129
134
|
stecpy(dest, attr, end);
|
@@ -140,7 +145,6 @@ static char * string_value_to_attribute(const char *attr, const size_t attrlen,
|
|
140
145
|
if (vallen == 0) {
|
141
146
|
size_t total_size = attrlen + 1;
|
142
147
|
char *dest = malloc(total_size);
|
143
|
-
char *ptr = NULL;
|
144
148
|
char *end = dest + total_size;
|
145
149
|
|
146
150
|
stecpy(dest, attr, end);
|
@@ -168,7 +172,7 @@ static char * string_value_to_attribute(const char *attr, const size_t attrlen,
|
|
168
172
|
}
|
169
173
|
}
|
170
174
|
|
171
|
-
static char * hash_value_to_attribute(char *attr, const size_t attrlen, VALUE value) {
|
175
|
+
static char * hash_value_to_attribute(const char *attr, const size_t attrlen, VALUE value) {
|
172
176
|
if (TYPE(value) == T_IMEMO) {
|
173
177
|
return strdup("");
|
174
178
|
}
|
@@ -224,17 +228,17 @@ static char * hash_value_to_attribute(char *attr, const size_t attrlen, VALUE va
|
|
224
228
|
|
225
229
|
char subattr[subattr_len + 1];
|
226
230
|
char *ptr = subattr;
|
227
|
-
char *
|
231
|
+
char *subend = subattr + subattr_len + 1;
|
228
232
|
|
229
233
|
if (attrlen > 0) {
|
230
|
-
ptr = stecpy(ptr, attr,
|
234
|
+
ptr = stecpy(ptr, attr, subend);
|
231
235
|
}
|
232
236
|
|
233
237
|
if (attrlen > 0 && subkey_len > 0) {
|
234
|
-
ptr = stecpy(ptr, dash,
|
238
|
+
ptr = stecpy(ptr, dash, subend);
|
235
239
|
}
|
236
240
|
|
237
|
-
stecpy(ptr, RSTRING_PTR(subkey),
|
241
|
+
stecpy(ptr, RSTRING_PTR(subkey), subend);
|
238
242
|
|
239
243
|
char *combined;
|
240
244
|
|
@@ -246,7 +250,7 @@ static char * hash_value_to_attribute(char *attr, const size_t attrlen, VALUE va
|
|
246
250
|
case T_NIL:
|
247
251
|
/* Fall through. */
|
248
252
|
case T_TRUE:
|
249
|
-
combined =
|
253
|
+
combined = empty_value_to_attribute(subattr, subattr_len);
|
250
254
|
break;
|
251
255
|
|
252
256
|
case T_STRING:
|
@@ -326,6 +330,7 @@ static char * to_attribute(VALUE attr, VALUE value) {
|
|
326
330
|
|
327
331
|
switch(TYPE(value)) {
|
328
332
|
case T_NIL:
|
333
|
+
/* Fall through. */
|
329
334
|
case T_TRUE:
|
330
335
|
val = empty_value_to_attribute(RSTRING_PTR(attr), RSTRING_LEN(attr));
|
331
336
|
break;
|
@@ -389,7 +394,7 @@ static VALUE external_to_attributes(RB_UNUSED_VAR(VALUE self), VALUE attributes)
|
|
389
394
|
return rb_utf8_str_new_cstr("");
|
390
395
|
}
|
391
396
|
|
392
|
-
char *empty = "";
|
397
|
+
const char *empty = "";
|
393
398
|
char *attrs = hash_value_to_attribute(empty, 0, attributes);
|
394
399
|
|
395
400
|
VALUE rstring = rb_utf8_str_new_cstr(attrs);
|
@@ -398,7 +403,7 @@ static VALUE external_to_attributes(RB_UNUSED_VAR(VALUE self), VALUE attributes)
|
|
398
403
|
return rstring;
|
399
404
|
}
|
400
405
|
|
401
|
-
static char * void_element(char *tag, size_t tlen, VALUE attributes) {
|
406
|
+
static char * void_element(const char *tag, size_t tlen, VALUE attributes) {
|
402
407
|
/* T_IMEMO is what we get if an optional argument was not passed. */
|
403
408
|
if (TYPE(attributes) == T_IMEMO) {
|
404
409
|
size_t total = tag_olen + tlen + tag_clen + 1;
|
@@ -412,7 +417,7 @@ static char * void_element(char *tag, size_t tlen, VALUE attributes) {
|
|
412
417
|
|
413
418
|
return string;
|
414
419
|
} else {
|
415
|
-
char *empty = "";
|
420
|
+
const char *empty = "";
|
416
421
|
char *attrs = hash_value_to_attribute(empty, 0, attributes);
|
417
422
|
|
418
423
|
size_t total = tag_olen + tlen + splen + strlen(attrs) + tag_clen + 1;
|
@@ -459,8 +464,8 @@ static VALUE external_void_element(int argc, VALUE *arguments, RB_UNUSED_VAR(VAL
|
|
459
464
|
return rstring;
|
460
465
|
}
|
461
466
|
|
462
|
-
static char * element(char *tag, size_t tlen, char *content, size_t conlen, VALUE attributes) {
|
463
|
-
char *empty = "";
|
467
|
+
static char * element(const char *tag, size_t tlen, char *content, size_t conlen, VALUE attributes) {
|
468
|
+
const char *empty = "";
|
464
469
|
char *attrs = hash_value_to_attribute(empty, 0, attributes);
|
465
470
|
size_t alen = strlen(attrs);
|
466
471
|
|
@@ -533,116 +538,116 @@ static VALUE external_element(int argc, VALUE *arguments, RB_UNUSED_VAR(VALUE se
|
|
533
538
|
return rstring;
|
534
539
|
}
|
535
540
|
|
536
|
-
VOID_ELEMENT(area)
|
537
|
-
VOID_ELEMENT(base)
|
538
|
-
VOID_ELEMENT(br)
|
539
|
-
VOID_ELEMENT(col)
|
540
|
-
VOID_ELEMENT(embed)
|
541
|
-
VOID_ELEMENT(hr)
|
542
|
-
VOID_ELEMENT(img)
|
543
|
-
VOID_ELEMENT(input)
|
544
|
-
VOID_ELEMENT(link)
|
545
|
-
VOID_ELEMENT(menuitem)
|
546
|
-
VOID_ELEMENT(meta)
|
547
|
-
VOID_ELEMENT(param)
|
548
|
-
VOID_ELEMENT(source)
|
549
|
-
VOID_ELEMENT(track)
|
550
|
-
VOID_ELEMENT(wbr)
|
551
|
-
|
552
|
-
STANDARD_ELEMENT(a)
|
553
|
-
STANDARD_ELEMENT(abbr)
|
554
|
-
STANDARD_ELEMENT(address)
|
555
|
-
STANDARD_ELEMENT(article)
|
556
|
-
STANDARD_ELEMENT(aside)
|
557
|
-
STANDARD_ELEMENT(audio)
|
558
|
-
STANDARD_ELEMENT(b)
|
559
|
-
STANDARD_ELEMENT(bdi)
|
560
|
-
STANDARD_ELEMENT(bdo)
|
561
|
-
STANDARD_ELEMENT(blockquote)
|
562
|
-
STANDARD_ELEMENT(body)
|
563
|
-
STANDARD_ELEMENT(button)
|
564
|
-
STANDARD_ELEMENT(canvas)
|
565
|
-
STANDARD_ELEMENT(caption)
|
566
|
-
STANDARD_ELEMENT(cite)
|
567
|
-
STANDARD_ELEMENT(code)
|
568
|
-
STANDARD_ELEMENT(colgroup)
|
569
|
-
STANDARD_ELEMENT(datalist)
|
570
|
-
STANDARD_ELEMENT(dd)
|
571
|
-
STANDARD_ELEMENT(del)
|
572
|
-
STANDARD_ELEMENT(details)
|
573
|
-
STANDARD_ELEMENT(dfn)
|
574
|
-
STANDARD_ELEMENT(dialog)
|
575
|
-
STANDARD_ELEMENT(div)
|
576
|
-
STANDARD_ELEMENT(dl)
|
577
|
-
STANDARD_ELEMENT(dt)
|
578
|
-
STANDARD_ELEMENT(em)
|
579
|
-
STANDARD_ELEMENT(fieldset)
|
580
|
-
STANDARD_ELEMENT(figcaption)
|
581
|
-
STANDARD_ELEMENT(figure)
|
582
|
-
STANDARD_ELEMENT(footer)
|
583
|
-
STANDARD_ELEMENT(form)
|
584
|
-
STANDARD_ELEMENT(h1)
|
585
|
-
STANDARD_ELEMENT(h2)
|
586
|
-
STANDARD_ELEMENT(h3)
|
587
|
-
STANDARD_ELEMENT(h4)
|
588
|
-
STANDARD_ELEMENT(h5)
|
589
|
-
STANDARD_ELEMENT(h6)
|
590
|
-
STANDARD_ELEMENT(head)
|
591
|
-
STANDARD_ELEMENT(header)
|
592
|
-
STANDARD_ELEMENT(html)
|
593
|
-
STANDARD_ELEMENT(i)
|
594
|
-
STANDARD_ELEMENT(iframe)
|
595
|
-
STANDARD_ELEMENT(ins)
|
596
|
-
STANDARD_ELEMENT(kbd)
|
597
|
-
STANDARD_ELEMENT(label)
|
598
|
-
STANDARD_ELEMENT(legend)
|
599
|
-
STANDARD_ELEMENT(li)
|
600
|
-
STANDARD_ELEMENT(main)
|
601
|
-
STANDARD_ELEMENT(map)
|
602
|
-
STANDARD_ELEMENT(mark)
|
603
|
-
STANDARD_ELEMENT(menu)
|
604
|
-
STANDARD_ELEMENT(meter)
|
605
|
-
STANDARD_ELEMENT(nav)
|
606
|
-
STANDARD_ELEMENT(noscript)
|
607
|
-
STANDARD_ELEMENT(object)
|
608
|
-
STANDARD_ELEMENT(ol)
|
609
|
-
STANDARD_ELEMENT(optgroup)
|
610
|
-
STANDARD_ELEMENT(option)
|
611
|
-
STANDARD_ELEMENT(output)
|
612
|
-
STANDARD_ELEMENT(p)
|
613
|
-
STANDARD_ELEMENT(picture)
|
614
|
-
STANDARD_ELEMENT(pre)
|
615
|
-
STANDARD_ELEMENT(progress)
|
616
|
-
STANDARD_ELEMENT(q)
|
617
|
-
STANDARD_ELEMENT(rp)
|
618
|
-
STANDARD_ELEMENT(rt)
|
619
|
-
STANDARD_ELEMENT(ruby)
|
620
|
-
STANDARD_ELEMENT(s)
|
621
|
-
STANDARD_ELEMENT(samp)
|
622
|
-
STANDARD_ELEMENT(script)
|
623
|
-
STANDARD_ELEMENT(section)
|
624
|
-
STANDARD_ELEMENT(select)
|
625
|
-
STANDARD_ELEMENT(small)
|
626
|
-
STANDARD_ELEMENT(span)
|
627
|
-
STANDARD_ELEMENT(strong)
|
628
|
-
STANDARD_ELEMENT(style)
|
629
|
-
STANDARD_ELEMENT(sub)
|
630
|
-
STANDARD_ELEMENT(summary)
|
631
|
-
STANDARD_ELEMENT(table)
|
632
|
-
STANDARD_ELEMENT(tbody)
|
633
|
-
STANDARD_ELEMENT(td)
|
634
|
-
STANDARD_ELEMENT(template)
|
635
|
-
STANDARD_ELEMENT(textarea)
|
636
|
-
STANDARD_ELEMENT(tfoot)
|
637
|
-
STANDARD_ELEMENT(th)
|
638
|
-
STANDARD_ELEMENT(thead)
|
639
|
-
STANDARD_ELEMENT(time)
|
640
|
-
STANDARD_ELEMENT(title)
|
641
|
-
STANDARD_ELEMENT(tr)
|
642
|
-
STANDARD_ELEMENT(u)
|
643
|
-
STANDARD_ELEMENT(ul)
|
644
|
-
STANDARD_ELEMENT(var)
|
645
|
-
STANDARD_ELEMENT(video)
|
541
|
+
VOID_ELEMENT(area)
|
542
|
+
VOID_ELEMENT(base)
|
543
|
+
VOID_ELEMENT(br)
|
544
|
+
VOID_ELEMENT(col)
|
545
|
+
VOID_ELEMENT(embed)
|
546
|
+
VOID_ELEMENT(hr)
|
547
|
+
VOID_ELEMENT(img)
|
548
|
+
VOID_ELEMENT(input)
|
549
|
+
VOID_ELEMENT(link)
|
550
|
+
VOID_ELEMENT(menuitem)
|
551
|
+
VOID_ELEMENT(meta)
|
552
|
+
VOID_ELEMENT(param)
|
553
|
+
VOID_ELEMENT(source)
|
554
|
+
VOID_ELEMENT(track)
|
555
|
+
VOID_ELEMENT(wbr)
|
556
|
+
|
557
|
+
STANDARD_ELEMENT(a)
|
558
|
+
STANDARD_ELEMENT(abbr)
|
559
|
+
STANDARD_ELEMENT(address)
|
560
|
+
STANDARD_ELEMENT(article)
|
561
|
+
STANDARD_ELEMENT(aside)
|
562
|
+
STANDARD_ELEMENT(audio)
|
563
|
+
STANDARD_ELEMENT(b)
|
564
|
+
STANDARD_ELEMENT(bdi)
|
565
|
+
STANDARD_ELEMENT(bdo)
|
566
|
+
STANDARD_ELEMENT(blockquote)
|
567
|
+
STANDARD_ELEMENT(body)
|
568
|
+
STANDARD_ELEMENT(button)
|
569
|
+
STANDARD_ELEMENT(canvas)
|
570
|
+
STANDARD_ELEMENT(caption)
|
571
|
+
STANDARD_ELEMENT(cite)
|
572
|
+
STANDARD_ELEMENT(code)
|
573
|
+
STANDARD_ELEMENT(colgroup)
|
574
|
+
STANDARD_ELEMENT(datalist)
|
575
|
+
STANDARD_ELEMENT(dd)
|
576
|
+
STANDARD_ELEMENT(del)
|
577
|
+
STANDARD_ELEMENT(details)
|
578
|
+
STANDARD_ELEMENT(dfn)
|
579
|
+
STANDARD_ELEMENT(dialog)
|
580
|
+
STANDARD_ELEMENT(div)
|
581
|
+
STANDARD_ELEMENT(dl)
|
582
|
+
STANDARD_ELEMENT(dt)
|
583
|
+
STANDARD_ELEMENT(em)
|
584
|
+
STANDARD_ELEMENT(fieldset)
|
585
|
+
STANDARD_ELEMENT(figcaption)
|
586
|
+
STANDARD_ELEMENT(figure)
|
587
|
+
STANDARD_ELEMENT(footer)
|
588
|
+
STANDARD_ELEMENT(form)
|
589
|
+
STANDARD_ELEMENT(h1)
|
590
|
+
STANDARD_ELEMENT(h2)
|
591
|
+
STANDARD_ELEMENT(h3)
|
592
|
+
STANDARD_ELEMENT(h4)
|
593
|
+
STANDARD_ELEMENT(h5)
|
594
|
+
STANDARD_ELEMENT(h6)
|
595
|
+
STANDARD_ELEMENT(head)
|
596
|
+
STANDARD_ELEMENT(header)
|
597
|
+
STANDARD_ELEMENT(html)
|
598
|
+
STANDARD_ELEMENT(i)
|
599
|
+
STANDARD_ELEMENT(iframe)
|
600
|
+
STANDARD_ELEMENT(ins)
|
601
|
+
STANDARD_ELEMENT(kbd)
|
602
|
+
STANDARD_ELEMENT(label)
|
603
|
+
STANDARD_ELEMENT(legend)
|
604
|
+
STANDARD_ELEMENT(li)
|
605
|
+
STANDARD_ELEMENT(main)
|
606
|
+
STANDARD_ELEMENT(map)
|
607
|
+
STANDARD_ELEMENT(mark)
|
608
|
+
STANDARD_ELEMENT(menu)
|
609
|
+
STANDARD_ELEMENT(meter)
|
610
|
+
STANDARD_ELEMENT(nav)
|
611
|
+
STANDARD_ELEMENT(noscript)
|
612
|
+
STANDARD_ELEMENT(object)
|
613
|
+
STANDARD_ELEMENT(ol)
|
614
|
+
STANDARD_ELEMENT(optgroup)
|
615
|
+
STANDARD_ELEMENT(option)
|
616
|
+
STANDARD_ELEMENT(output)
|
617
|
+
STANDARD_ELEMENT(p)
|
618
|
+
STANDARD_ELEMENT(picture)
|
619
|
+
STANDARD_ELEMENT(pre)
|
620
|
+
STANDARD_ELEMENT(progress)
|
621
|
+
STANDARD_ELEMENT(q)
|
622
|
+
STANDARD_ELEMENT(rp)
|
623
|
+
STANDARD_ELEMENT(rt)
|
624
|
+
STANDARD_ELEMENT(ruby)
|
625
|
+
STANDARD_ELEMENT(s)
|
626
|
+
STANDARD_ELEMENT(samp)
|
627
|
+
STANDARD_ELEMENT(script)
|
628
|
+
STANDARD_ELEMENT(section)
|
629
|
+
STANDARD_ELEMENT(select)
|
630
|
+
STANDARD_ELEMENT(small)
|
631
|
+
STANDARD_ELEMENT(span)
|
632
|
+
STANDARD_ELEMENT(strong)
|
633
|
+
STANDARD_ELEMENT(style)
|
634
|
+
STANDARD_ELEMENT(sub)
|
635
|
+
STANDARD_ELEMENT(summary)
|
636
|
+
STANDARD_ELEMENT(table)
|
637
|
+
STANDARD_ELEMENT(tbody)
|
638
|
+
STANDARD_ELEMENT(td)
|
639
|
+
STANDARD_ELEMENT(template)
|
640
|
+
STANDARD_ELEMENT(textarea)
|
641
|
+
STANDARD_ELEMENT(tfoot)
|
642
|
+
STANDARD_ELEMENT(th)
|
643
|
+
STANDARD_ELEMENT(thead)
|
644
|
+
STANDARD_ELEMENT(time)
|
645
|
+
STANDARD_ELEMENT(title)
|
646
|
+
STANDARD_ELEMENT(tr)
|
647
|
+
STANDARD_ELEMENT(u)
|
648
|
+
STANDARD_ELEMENT(ul)
|
649
|
+
STANDARD_ELEMENT(var)
|
650
|
+
STANDARD_ELEMENT(video)
|
646
651
|
|
647
652
|
void Init_berns() {
|
648
653
|
VALUE Berns = rb_define_module("Berns");
|
data/ext/berns/extconf.rb
CHANGED
data/lib/berns/berns.so
CHANGED
Binary file
|
data/lib/berns/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: berns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Taylor Beck
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-05-
|
12
|
+
date: 2021-05-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: benchmark-ips
|