github-markdown 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,6 +15,7 @@
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>
@@ -132,7 +133,7 @@ autolink_delim(uint8_t *data, size_t link_end, size_t offset, size_t size)
132
133
  }
133
134
 
134
135
  static size_t
135
- check_domain(uint8_t *data, size_t size)
136
+ check_domain(uint8_t *data, size_t size, int allow_short)
136
137
  {
137
138
  size_t i, np = 0;
138
139
 
@@ -144,13 +145,27 @@ check_domain(uint8_t *data, size_t size)
144
145
  else if (!isalnum(data[i]) && data[i] != '-') break;
145
146
  }
146
147
 
147
- /* a valid domain needs to have at least a dot.
148
- * that's as far as we get */
149
- return np ? i : 0;
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
+ }
150
159
  }
151
160
 
152
161
  size_t
153
- sd_autolink__www(size_t *rewind_p, struct buf *link, uint8_t *data, size_t offset, size_t size)
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)
154
169
  {
155
170
  size_t link_end;
156
171
 
@@ -160,7 +175,7 @@ sd_autolink__www(size_t *rewind_p, struct buf *link, uint8_t *data, size_t offse
160
175
  if (size < 4 || memcmp(data, "www.", strlen("www.")) != 0)
161
176
  return 0;
162
177
 
163
- link_end = check_domain(data, size);
178
+ link_end = check_domain(data, size, 0);
164
179
 
165
180
  if (link_end == 0)
166
181
  return 0;
@@ -180,7 +195,13 @@ sd_autolink__www(size_t *rewind_p, struct buf *link, uint8_t *data, size_t offse
180
195
  }
181
196
 
182
197
  size_t
183
- sd_autolink__email(size_t *rewind_p, struct buf *link, uint8_t *data, size_t offset, size_t size)
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)
184
205
  {
185
206
  size_t link_end, rewind;
186
207
  int nb = 0, np = 0;
@@ -229,7 +250,13 @@ sd_autolink__email(size_t *rewind_p, struct buf *link, uint8_t *data, size_t off
229
250
  }
230
251
 
231
252
  size_t
232
- sd_autolink__url(size_t *rewind_p, struct buf *link, uint8_t *data, size_t offset, size_t size)
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)
233
260
  {
234
261
  size_t link_end, rewind = 0, domain_len;
235
262
 
@@ -241,9 +268,14 @@ sd_autolink__url(size_t *rewind_p, struct buf *link, uint8_t *data, size_t offse
241
268
 
242
269
  if (!sd_autolink_issafe(data - rewind, size + rewind))
243
270
  return 0;
271
+
244
272
  link_end = strlen("://");
245
273
 
246
- domain_len = check_domain(data + link_end, size - link_end);
274
+ domain_len = check_domain(
275
+ data + link_end,
276
+ size - link_end,
277
+ flags & SD_AUTOLINK_SHORT_DOMAINS);
278
+
247
279
  if (domain_len == 0)
248
280
  return 0;
249
281
 
@@ -23,17 +23,24 @@
23
23
  extern "C" {
24
24
  #endif
25
25
 
26
- extern int
26
+ enum {
27
+ SD_AUTOLINK_SHORT_DOMAINS = (1 << 0),
28
+ };
29
+
30
+ int
27
31
  sd_autolink_issafe(const uint8_t *link, size_t link_len);
28
32
 
29
- extern size_t
30
- sd_autolink__www(size_t *rewind_p, struct buf *link, uint8_t *data, size_t offset, size_t size);
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);
31
36
 
32
- extern size_t
33
- sd_autolink__email(size_t *rewind_p, struct buf *link, uint8_t *data, size_t offset, size_t size);
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);
34
40
 
35
- extern size_t
36
- sd_autolink__url(size_t *rewind_p, struct buf *link, uint8_t *data, size_t offset, size_t size);
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);
37
44
 
38
45
  #ifdef __cplusplus
39
46
  }
@@ -127,7 +127,9 @@ bufprintf(struct buf *buf, const char *fmt, ...)
127
127
 
128
128
  if (n < 0) {
129
129
  #ifdef _MSC_VER
130
+ va_start(ap, fmt);
130
131
  n = _vscprintf(fmt, ap);
132
+ va_end(ap);
131
133
  #else
132
134
  return;
133
135
  #endif
@@ -1,4 +1,6 @@
1
1
  require 'mkmf'
2
2
 
3
+ $CFLAGS << " -fvisibility=hidden "
4
+
3
5
  dir_config('github/markdown')
4
6
  create_makefile('github/markdown')
@@ -27,6 +27,8 @@
27
27
  #include "html.h"
28
28
  #include "plaintext.h"
29
29
 
30
+ #define RUBY_EXPORT __attribute__ ((visibility ("default")))
31
+
30
32
  static struct {
31
33
  struct sd_markdown *md;
32
34
  struct html_renderopt render_opts;
@@ -209,7 +211,7 @@ static void rb_ghmd__init_plaintext(void)
209
211
  );
210
212
  }
211
213
 
212
- void Init_markdown()
214
+ void RUBY_EXPORT Init_markdown()
213
215
  {
214
216
  VALUE rb_mGitHub = rb_const_get(rb_cObject, rb_intern("GitHub"));
215
217
  VALUE rb_cMarkdown = rb_define_class_under(rb_mGitHub, "Markdown", rb_cObject);
@@ -771,7 +771,7 @@ char_autolink_www(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_
771
771
 
772
772
  link = rndr_newbuf(rndr, BUFFER_SPAN);
773
773
 
774
- if ((link_len = sd_autolink__www(&rewind, link, data, offset, size)) > 0) {
774
+ if ((link_len = sd_autolink__www(&rewind, link, data, offset, size, 0)) > 0) {
775
775
  link_url = rndr_newbuf(rndr, BUFFER_SPAN);
776
776
  BUFPUTSL(link_url, "http://");
777
777
  bufput(link_url, link->data, link->size);
@@ -803,7 +803,7 @@ char_autolink_email(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, siz
803
803
 
804
804
  link = rndr_newbuf(rndr, BUFFER_SPAN);
805
805
 
806
- if ((link_len = sd_autolink__email(&rewind, link, data, offset, size)) > 0) {
806
+ if ((link_len = sd_autolink__email(&rewind, link, data, offset, size, 0)) > 0) {
807
807
  ob->size -= rewind;
808
808
  rndr->cb.autolink(ob, link, MKDA_EMAIL, rndr->opaque);
809
809
  }
@@ -823,7 +823,7 @@ char_autolink_url(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_
823
823
 
824
824
  link = rndr_newbuf(rndr, BUFFER_SPAN);
825
825
 
826
- if ((link_len = sd_autolink__url(&rewind, link, data, offset, size)) > 0) {
826
+ if ((link_len = sd_autolink__url(&rewind, link, data, offset, size, 0)) > 0) {
827
827
  ob->size -= rewind;
828
828
  rndr->cb.autolink(ob, link, MKDA_NORMAL, rndr->opaque);
829
829
  }
@@ -1,10 +1,10 @@
1
1
  # encoding: utf-8
2
2
  Gem::Specification.new do |s|
3
3
  s.name = 'github-markdown'
4
- s.version = '0.4.1'
4
+ s.version = '0.5.0'
5
5
  s.summary = 'The Markdown parser for GitHub.com'
6
6
  s.description = 'Self-contained Markdown parser for GitHub, with all our custom extensions'
7
- s.date = '2012-05-03'
7
+ s.date = '2012-07-08'
8
8
  s.email = 'vicent@github.com'
9
9
  s.homepage = 'http://github.github.com/github-flavored-markdown/'
10
10
  s.authors = ['GitHub, Inc']
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github-markdown
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 4
9
- - 1
10
- version: 0.4.1
8
+ - 5
9
+ - 0
10
+ version: 0.5.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - GitHub, Inc
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-05-03 00:00:00 -07:00
18
+ date: 2012-07-08 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency