rinku 1.5.1 → 1.7.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.
- data/ext/rinku/autolink.c +45 -9
- data/ext/rinku/autolink.h +22 -7
- data/ext/rinku/buffer.c +16 -20
- data/ext/rinku/buffer.h +8 -0
- data/ext/rinku/extconf.rb +2 -0
- data/ext/rinku/rinku.c +25 -10
- data/ext/rinku/rinku.h +7 -0
- data/lib/rinku.rb +1 -1
- data/rinku.gemspec +3 -2
- data/test/autolink_test.rb +17 -1
- metadata +10 -7
data/ext/rinku/autolink.c
CHANGED
@@ -15,12 +15,17 @@
|
|
15
15
|
*/
|
16
16
|
|
17
17
|
#include "buffer.h"
|
18
|
+
#include "autolink.h"
|
18
19
|
|
19
20
|
#include <string.h>
|
20
21
|
#include <stdlib.h>
|
21
22
|
#include <stdio.h>
|
22
23
|
#include <ctype.h>
|
23
24
|
|
25
|
+
#if defined(_WIN32)
|
26
|
+
#define strncasecmp _strnicmp
|
27
|
+
#endif
|
28
|
+
|
24
29
|
int
|
25
30
|
sd_autolink_issafe(const uint8_t *link, size_t link_len)
|
26
31
|
{
|
@@ -128,7 +133,7 @@ autolink_delim(uint8_t *data, size_t link_end, size_t offset, size_t size)
|
|
128
133
|
}
|
129
134
|
|
130
135
|
static size_t
|
131
|
-
check_domain(uint8_t *data, size_t size)
|
136
|
+
check_domain(uint8_t *data, size_t size, int allow_short)
|
132
137
|
{
|
133
138
|
size_t i, np = 0;
|
134
139
|
|
@@ -140,13 +145,27 @@ check_domain(uint8_t *data, size_t size)
|
|
140
145
|
else if (!isalnum(data[i]) && data[i] != '-') break;
|
141
146
|
}
|
142
147
|
|
143
|
-
|
144
|
-
|
145
|
-
|
148
|
+
if (allow_short) {
|
149
|
+
/* We don't need a valid domain in the strict sense (with
|
150
|
+
* least one dot; so just make sure it's composed of valid
|
151
|
+
* domain characters and return the length of the the valid
|
152
|
+
* sequence. */
|
153
|
+
return i;
|
154
|
+
} else {
|
155
|
+
/* a valid domain needs to have at least a dot.
|
156
|
+
* that's as far as we get */
|
157
|
+
return np ? i : 0;
|
158
|
+
}
|
146
159
|
}
|
147
160
|
|
148
161
|
size_t
|
149
|
-
sd_autolink__www(
|
162
|
+
sd_autolink__www(
|
163
|
+
size_t *rewind_p,
|
164
|
+
struct buf *link,
|
165
|
+
uint8_t *data,
|
166
|
+
size_t offset,
|
167
|
+
size_t size,
|
168
|
+
unsigned int flags)
|
150
169
|
{
|
151
170
|
size_t link_end;
|
152
171
|
|
@@ -156,7 +175,7 @@ sd_autolink__www(size_t *rewind_p, struct buf *link, uint8_t *data, size_t offse
|
|
156
175
|
if (size < 4 || memcmp(data, "www.", strlen("www.")) != 0)
|
157
176
|
return 0;
|
158
177
|
|
159
|
-
link_end = check_domain(data, size);
|
178
|
+
link_end = check_domain(data, size, 0);
|
160
179
|
|
161
180
|
if (link_end == 0)
|
162
181
|
return 0;
|
@@ -176,7 +195,13 @@ sd_autolink__www(size_t *rewind_p, struct buf *link, uint8_t *data, size_t offse
|
|
176
195
|
}
|
177
196
|
|
178
197
|
size_t
|
179
|
-
sd_autolink__email(
|
198
|
+
sd_autolink__email(
|
199
|
+
size_t *rewind_p,
|
200
|
+
struct buf *link,
|
201
|
+
uint8_t *data,
|
202
|
+
size_t offset,
|
203
|
+
size_t size,
|
204
|
+
unsigned int flags)
|
180
205
|
{
|
181
206
|
size_t link_end, rewind;
|
182
207
|
int nb = 0, np = 0;
|
@@ -225,7 +250,13 @@ sd_autolink__email(size_t *rewind_p, struct buf *link, uint8_t *data, size_t off
|
|
225
250
|
}
|
226
251
|
|
227
252
|
size_t
|
228
|
-
sd_autolink__url(
|
253
|
+
sd_autolink__url(
|
254
|
+
size_t *rewind_p,
|
255
|
+
struct buf *link,
|
256
|
+
uint8_t *data,
|
257
|
+
size_t offset,
|
258
|
+
size_t size,
|
259
|
+
unsigned int flags)
|
229
260
|
{
|
230
261
|
size_t link_end, rewind = 0, domain_len;
|
231
262
|
|
@@ -237,9 +268,14 @@ sd_autolink__url(size_t *rewind_p, struct buf *link, uint8_t *data, size_t offse
|
|
237
268
|
|
238
269
|
if (!sd_autolink_issafe(data - rewind, size + rewind))
|
239
270
|
return 0;
|
271
|
+
|
240
272
|
link_end = strlen("://");
|
241
273
|
|
242
|
-
domain_len = check_domain(
|
274
|
+
domain_len = check_domain(
|
275
|
+
data + link_end,
|
276
|
+
size - link_end,
|
277
|
+
flags & SD_AUTOLINK_SHORT_DOMAINS);
|
278
|
+
|
243
279
|
if (domain_len == 0)
|
244
280
|
return 0;
|
245
281
|
|
data/ext/rinku/autolink.h
CHANGED
@@ -19,17 +19,32 @@
|
|
19
19
|
|
20
20
|
#include "buffer.h"
|
21
21
|
|
22
|
-
|
22
|
+
#ifdef __cplusplus
|
23
|
+
extern "C" {
|
24
|
+
#endif
|
25
|
+
|
26
|
+
enum {
|
27
|
+
SD_AUTOLINK_SHORT_DOMAINS = (1 << 0),
|
28
|
+
};
|
29
|
+
|
30
|
+
int
|
23
31
|
sd_autolink_issafe(const uint8_t *link, size_t link_len);
|
24
32
|
|
25
|
-
|
26
|
-
sd_autolink__www(size_t *rewind_p, struct buf *link,
|
33
|
+
size_t
|
34
|
+
sd_autolink__www(size_t *rewind_p, struct buf *link,
|
35
|
+
uint8_t *data, size_t offset, size_t size, unsigned int flags);
|
27
36
|
|
28
|
-
|
29
|
-
sd_autolink__email(size_t *rewind_p, struct buf *link,
|
37
|
+
size_t
|
38
|
+
sd_autolink__email(size_t *rewind_p, struct buf *link,
|
39
|
+
uint8_t *data, size_t offset, size_t size, unsigned int flags);
|
30
40
|
|
31
|
-
|
32
|
-
sd_autolink__url(size_t *rewind_p, struct buf *link,
|
41
|
+
size_t
|
42
|
+
sd_autolink__url(size_t *rewind_p, struct buf *link,
|
43
|
+
uint8_t *data, size_t offset, size_t size, unsigned int flags);
|
44
|
+
|
45
|
+
#ifdef __cplusplus
|
46
|
+
}
|
47
|
+
#endif
|
33
48
|
|
34
49
|
#endif
|
35
50
|
|
data/ext/rinku/buffer.c
CHANGED
@@ -22,6 +22,7 @@
|
|
22
22
|
#include <stdio.h>
|
23
23
|
#include <stdlib.h>
|
24
24
|
#include <string.h>
|
25
|
+
#include <assert.h>
|
25
26
|
|
26
27
|
/* MSVC compat */
|
27
28
|
#if defined(_MSC_VER)
|
@@ -34,6 +35,7 @@ int
|
|
34
35
|
bufprefix(const struct buf *buf, const char *prefix)
|
35
36
|
{
|
36
37
|
size_t i;
|
38
|
+
assert(buf && buf->unit);
|
37
39
|
|
38
40
|
for (i = 0; i < buf->size; ++i) {
|
39
41
|
if (prefix[i] == 0)
|
@@ -52,7 +54,10 @@ bufgrow(struct buf *buf, size_t neosz)
|
|
52
54
|
{
|
53
55
|
size_t neoasz;
|
54
56
|
void *neodata;
|
55
|
-
|
57
|
+
|
58
|
+
assert(buf && buf->unit);
|
59
|
+
|
60
|
+
if (neosz > BUFFER_MAX_ALLOC_SIZE)
|
56
61
|
return BUF_ENOMEM;
|
57
62
|
|
58
63
|
if (buf->asize >= neosz)
|
@@ -91,8 +96,7 @@ bufnew(size_t unit)
|
|
91
96
|
const char *
|
92
97
|
bufcstr(struct buf *buf)
|
93
98
|
{
|
94
|
-
|
95
|
-
return NULL;
|
99
|
+
assert(buf && buf->unit);
|
96
100
|
|
97
101
|
if (buf->size < buf->asize && buf->data[buf->size] == 0)
|
98
102
|
return (char *)buf->data;
|
@@ -110,12 +114,11 @@ void
|
|
110
114
|
bufprintf(struct buf *buf, const char *fmt, ...)
|
111
115
|
{
|
112
116
|
va_list ap;
|
113
|
-
if (!buf || !buf->unit)
|
114
|
-
return;
|
115
|
-
|
116
117
|
int n;
|
117
118
|
|
118
|
-
|
119
|
+
assert(buf && buf->unit);
|
120
|
+
|
121
|
+
if (buf->size >= buf->asize && bufgrow(buf, buf->size + 1) < 0)
|
119
122
|
return;
|
120
123
|
|
121
124
|
va_start(ap, fmt);
|
@@ -124,7 +127,9 @@ bufprintf(struct buf *buf, const char *fmt, ...)
|
|
124
127
|
|
125
128
|
if (n < 0) {
|
126
129
|
#ifdef _MSC_VER
|
130
|
+
va_start(ap, fmt);
|
127
131
|
n = _vscprintf(fmt, ap);
|
132
|
+
va_end(ap);
|
128
133
|
#else
|
129
134
|
return;
|
130
135
|
#endif
|
@@ -133,6 +138,7 @@ bufprintf(struct buf *buf, const char *fmt, ...)
|
|
133
138
|
if ((size_t)n >= buf->asize - buf->size) {
|
134
139
|
if (bufgrow(buf, buf->size + n + 1) < 0)
|
135
140
|
return;
|
141
|
+
|
136
142
|
va_start(ap, fmt);
|
137
143
|
n = _buf_vsnprintf((char *)buf->data + buf->size, buf->asize - buf->size, fmt, ap);
|
138
144
|
va_end(ap);
|
@@ -148,8 +154,7 @@ bufprintf(struct buf *buf, const char *fmt, ...)
|
|
148
154
|
void
|
149
155
|
bufput(struct buf *buf, const void *data, size_t len)
|
150
156
|
{
|
151
|
-
|
152
|
-
return;
|
157
|
+
assert(buf && buf->unit);
|
153
158
|
|
154
159
|
if (buf->size + len > buf->asize && bufgrow(buf, buf->size + len) < 0)
|
155
160
|
return;
|
@@ -170,8 +175,7 @@ bufputs(struct buf *buf, const char *str)
|
|
170
175
|
void
|
171
176
|
bufputc(struct buf *buf, int c)
|
172
177
|
{
|
173
|
-
|
174
|
-
return;
|
178
|
+
assert(buf && buf->unit);
|
175
179
|
|
176
180
|
if (buf->size + 1 > buf->asize && bufgrow(buf, buf->size + 1) < 0)
|
177
181
|
return;
|
@@ -208,8 +212,7 @@ bufreset(struct buf *buf)
|
|
208
212
|
void
|
209
213
|
bufslurp(struct buf *buf, size_t len)
|
210
214
|
{
|
211
|
-
|
212
|
-
return;
|
215
|
+
assert(buf && buf->unit);
|
213
216
|
|
214
217
|
if (len >= buf->size) {
|
215
218
|
buf->size = 0;
|
@@ -220,10 +223,3 @@ bufslurp(struct buf *buf, size_t len)
|
|
220
223
|
memmove(buf->data, buf->data + len, buf->size);
|
221
224
|
}
|
222
225
|
|
223
|
-
/* vbufprintf: stdarg variant of formatted printing into a buffer */
|
224
|
-
void
|
225
|
-
vbufprintf(struct buf *buf, const char *fmt, va_list ap)
|
226
|
-
{
|
227
|
-
|
228
|
-
}
|
229
|
-
|
data/ext/rinku/buffer.h
CHANGED
@@ -22,6 +22,10 @@
|
|
22
22
|
#include <stdarg.h>
|
23
23
|
#include <stdint.h>
|
24
24
|
|
25
|
+
#ifdef __cplusplus
|
26
|
+
extern "C" {
|
27
|
+
#endif
|
28
|
+
|
25
29
|
#if defined(_MSC_VER)
|
26
30
|
#define __attribute__(x)
|
27
31
|
#define inline
|
@@ -85,4 +89,8 @@ void bufslurp(struct buf *, size_t);
|
|
85
89
|
/* bufprintf: formatted printing to a buffer */
|
86
90
|
void bufprintf(struct buf *, const char *, ...) __attribute__ ((format (printf, 2, 3)));
|
87
91
|
|
92
|
+
#ifdef __cplusplus
|
93
|
+
}
|
94
|
+
#endif
|
95
|
+
|
88
96
|
#endif
|
data/ext/rinku/extconf.rb
CHANGED
data/ext/rinku/rinku.c
CHANGED
@@ -18,6 +18,8 @@
|
|
18
18
|
#include <stdio.h>
|
19
19
|
#include "ruby.h"
|
20
20
|
|
21
|
+
#define RUBY_EXPORT __attribute__ ((visibility ("default")))
|
22
|
+
|
21
23
|
#ifdef HAVE_RUBY_ENCODING_H
|
22
24
|
#include <ruby/encoding.h>
|
23
25
|
#else
|
@@ -43,11 +45,11 @@ typedef enum {
|
|
43
45
|
typedef enum {
|
44
46
|
AUTOLINK_URLS = (1 << 0),
|
45
47
|
AUTOLINK_EMAILS = (1 << 1),
|
46
|
-
AUTOLINK_IN_CODE = (1 << 2),
|
47
48
|
AUTOLINK_ALL = AUTOLINK_URLS|AUTOLINK_EMAILS
|
48
49
|
} autolink_mode;
|
49
50
|
|
50
|
-
typedef size_t (*autolink_parse_cb)(
|
51
|
+
typedef size_t (*autolink_parse_cb)(
|
52
|
+
size_t *rewind, struct buf *, uint8_t *, size_t, size_t, unsigned int);
|
51
53
|
|
52
54
|
typedef enum {
|
53
55
|
AUTOLINK_ACTION_NONE = 0,
|
@@ -185,6 +187,7 @@ rinku_autolink(
|
|
185
187
|
struct buf *ob,
|
186
188
|
const uint8_t *text,
|
187
189
|
size_t size,
|
190
|
+
autolink_mode mode,
|
188
191
|
unsigned int flags,
|
189
192
|
const char *link_attr,
|
190
193
|
const char **skip_tags,
|
@@ -204,10 +207,10 @@ rinku_autolink(
|
|
204
207
|
|
205
208
|
active_chars['<'] = AUTOLINK_ACTION_SKIP_TAG;
|
206
209
|
|
207
|
-
if (
|
210
|
+
if (mode & AUTOLINK_EMAILS)
|
208
211
|
active_chars['@'] = AUTOLINK_ACTION_EMAIL;
|
209
212
|
|
210
|
-
if (
|
213
|
+
if (mode & AUTOLINK_URLS) {
|
211
214
|
active_chars['w'] = AUTOLINK_ACTION_WWW;
|
212
215
|
active_chars['W'] = AUTOLINK_ACTION_WWW;
|
213
216
|
active_chars[':'] = AUTOLINK_ACTION_URL;
|
@@ -247,7 +250,7 @@ rinku_autolink(
|
|
247
250
|
|
248
251
|
link->size = 0;
|
249
252
|
link_end = g_callbacks[(int)action](
|
250
|
-
&rewind, link, (uint8_t *)text + end, end, size - end);
|
253
|
+
&rewind, link, (uint8_t *)text + end, end, size - end, flags);
|
251
254
|
|
252
255
|
/* print the link */
|
253
256
|
if (link_end > 0) {
|
@@ -317,8 +320,8 @@ const char **rinku_load_tags(VALUE rb_skip)
|
|
317
320
|
* Document-method: auto_link
|
318
321
|
*
|
319
322
|
* call-seq:
|
320
|
-
* auto_link(text, mode=:all, link_attr=nil, skip_tags=nil)
|
321
|
-
* auto_link(text, mode=:all, link_attr=nil, skip_tags=nil) { |link_text| ... }
|
323
|
+
* auto_link(text, mode=:all, link_attr=nil, skip_tags=nil, flags=0)
|
324
|
+
* auto_link(text, mode=:all, link_attr=nil, skip_tags=nil, flags=0) { |link_text| ... }
|
322
325
|
*
|
323
326
|
* Parses a block of text looking for "safe" urls or email addresses,
|
324
327
|
* and turns them into HTML links with the given attributes.
|
@@ -361,6 +364,9 @@ const char **rinku_load_tags(VALUE rb_skip)
|
|
361
364
|
* when autolinking. If `nil`, this defaults to the value of the global `Rinku.skip_tags`,
|
362
365
|
* which is initially `["a", "pre", "code", "kbd", "script"]`.
|
363
366
|
*
|
367
|
+
* - `flag` is an optional boolean value specifying whether to recognize
|
368
|
+
* 'http://foo' as a valid domain, or require at least one '.'. It defaults to false.
|
369
|
+
*
|
364
370
|
* - `&block` is an optional block argument. If a block is passed, it will
|
365
371
|
* be yielded for each found link in the text, and its return value will be used instead
|
366
372
|
* of the name of the link. E.g.
|
@@ -377,14 +383,16 @@ rb_rinku_autolink(int argc, VALUE *argv, VALUE self)
|
|
377
383
|
{
|
378
384
|
static const char *SKIP_TAGS[] = {"a", "pre", "code", "kbd", "script", NULL};
|
379
385
|
|
380
|
-
VALUE result, rb_text, rb_mode, rb_html, rb_skip, rb_block;
|
386
|
+
VALUE result, rb_text, rb_mode, rb_html, rb_skip, rb_flags, rb_block;
|
381
387
|
struct buf *output_buf;
|
382
388
|
int link_mode, count;
|
389
|
+
unsigned int link_flags = 0;
|
383
390
|
const char *link_attr = NULL;
|
384
391
|
const char **skip_tags = NULL;
|
385
392
|
ID mode_sym;
|
386
393
|
|
387
|
-
rb_scan_args(argc, argv, "
|
394
|
+
rb_scan_args(argc, argv, "14&", &rb_text, &rb_mode,
|
395
|
+
&rb_html, &rb_skip, &rb_flags, &rb_block);
|
388
396
|
|
389
397
|
Check_Type(rb_text, T_STRING);
|
390
398
|
|
@@ -409,6 +417,11 @@ rb_rinku_autolink(int argc, VALUE *argv, VALUE self)
|
|
409
417
|
skip_tags = rinku_load_tags(rb_skip);
|
410
418
|
}
|
411
419
|
|
420
|
+
if (!NIL_P(rb_flags)) {
|
421
|
+
Check_Type(rb_flags, T_FIXNUM);
|
422
|
+
link_flags = FIX2INT(rb_flags);
|
423
|
+
}
|
424
|
+
|
412
425
|
output_buf = bufnew(32);
|
413
426
|
|
414
427
|
if (mode_sym == rb_intern("all"))
|
@@ -426,6 +439,7 @@ rb_rinku_autolink(int argc, VALUE *argv, VALUE self)
|
|
426
439
|
RSTRING_PTR(rb_text),
|
427
440
|
RSTRING_LEN(rb_text),
|
428
441
|
link_mode,
|
442
|
+
link_flags,
|
429
443
|
link_attr,
|
430
444
|
skip_tags,
|
431
445
|
RTEST(rb_block) ? &autolink_callback : NULL,
|
@@ -445,9 +459,10 @@ rb_rinku_autolink(int argc, VALUE *argv, VALUE self)
|
|
445
459
|
return result;
|
446
460
|
}
|
447
461
|
|
448
|
-
void Init_rinku()
|
462
|
+
void RUBY_EXPORT Init_rinku()
|
449
463
|
{
|
450
464
|
rb_mRinku = rb_define_module("Rinku");
|
451
465
|
rb_define_method(rb_mRinku, "auto_link", rb_rinku_autolink, -1);
|
466
|
+
rb_define_const(rb_mRinku, "AUTOLINK_SHORT_DOMAINS", INT2FIX(SD_AUTOLINK_SHORT_DOMAINS));
|
452
467
|
}
|
453
468
|
|
data/ext/rinku/rinku.h
ADDED
data/lib/rinku.rb
CHANGED
data/rinku.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'rinku'
|
5
|
-
s.version = '1.
|
5
|
+
s.version = '1.7.0'
|
6
6
|
s.summary = "Mostly autolinking"
|
7
7
|
s.description = <<-EOF
|
8
8
|
A fast and very smart autolinking library that
|
@@ -10,13 +10,14 @@ Gem::Specification.new do |s|
|
|
10
10
|
EOF
|
11
11
|
s.email = 'vicent@github.com'
|
12
12
|
s.homepage = 'http://github.com/tanoku/rinku'
|
13
|
-
s.authors = ["Vicent
|
13
|
+
s.authors = ["Vicent Marti"]
|
14
14
|
# = MANIFEST =
|
15
15
|
s.files = %w[
|
16
16
|
COPYING
|
17
17
|
README.markdown
|
18
18
|
Rakefile
|
19
19
|
ext/rinku/rinku.c
|
20
|
+
ext/rinku/rinku.h
|
20
21
|
ext/rinku/autolink.c
|
21
22
|
ext/rinku/autolink.h
|
22
23
|
ext/rinku/buffer.c
|
data/test/autolink_test.rb
CHANGED
@@ -154,6 +154,22 @@ This is just a test. <a href="http://www.pokemon.com">http://www.pokemon.com</a>
|
|
154
154
|
assert_linked "<a href=\"#{url}\">#{url}</a>", url
|
155
155
|
end
|
156
156
|
|
157
|
+
def test_autolink_options_for_short_domains
|
158
|
+
url = "http://google"
|
159
|
+
linked_url = "<a href=\"#{url}\">#{url}</a>"
|
160
|
+
flags = Rinku::AUTOLINK_SHORT_DOMAINS
|
161
|
+
|
162
|
+
# Specifying use short_domains in the args
|
163
|
+
url = "http://google"
|
164
|
+
linked_url = "<a href=\"#{url}\">#{url}</a>"
|
165
|
+
assert_equal Rinku.auto_link(url, nil, nil, nil, flags), linked_url
|
166
|
+
|
167
|
+
# Specifying no short_domains in the args
|
168
|
+
url = "http://google"
|
169
|
+
linked_url = "<a href=\"#{url}\">#{url}</a>"
|
170
|
+
assert_equal Rinku.auto_link(url, nil, nil, nil, 0), url
|
171
|
+
end
|
172
|
+
|
157
173
|
def test_not_autolink_www
|
158
174
|
assert_linked "Awww... man", "Awww... man"
|
159
175
|
end
|
@@ -275,5 +291,5 @@ This is just a test. <a href="http://www.pokemon.com">http://www.pokemon.com</a>
|
|
275
291
|
href ||= link_text
|
276
292
|
%{<a href="#{CGI.escapeHTML href}">#{CGI.escapeHTML link_text}</a>}
|
277
293
|
end
|
278
|
-
|
294
|
+
|
279
295
|
end
|
metadata
CHANGED
@@ -1,21 +1,22 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rinku
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 1.
|
8
|
+
- 7
|
9
|
+
- 0
|
10
|
+
version: 1.7.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
|
-
-
|
13
|
+
- Vicent Marti
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-07-08 00:00:00 +02:00
|
19
|
+
default_executable:
|
19
20
|
dependencies: []
|
20
21
|
|
21
22
|
description: " A fast and very smart autolinking library that\n acts as a drop-in replacement for Rails `auto_link`\n"
|
@@ -31,6 +32,7 @@ files:
|
|
31
32
|
- README.markdown
|
32
33
|
- Rakefile
|
33
34
|
- ext/rinku/rinku.c
|
35
|
+
- ext/rinku/rinku.h
|
34
36
|
- ext/rinku/autolink.c
|
35
37
|
- ext/rinku/autolink.h
|
36
38
|
- ext/rinku/buffer.c
|
@@ -40,6 +42,7 @@ files:
|
|
40
42
|
- lib/rails_rinku.rb
|
41
43
|
- rinku.gemspec
|
42
44
|
- test/autolink_test.rb
|
45
|
+
has_rdoc: true
|
43
46
|
homepage: http://github.com/tanoku/rinku
|
44
47
|
licenses: []
|
45
48
|
|
@@ -69,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
69
72
|
requirements: []
|
70
73
|
|
71
74
|
rubyforge_project:
|
72
|
-
rubygems_version: 1.
|
75
|
+
rubygems_version: 1.6.2
|
73
76
|
signing_key:
|
74
77
|
specification_version: 3
|
75
78
|
summary: Mostly autolinking
|