rinku 1.5.1 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|