github-markdown 0.4.1 → 0.5.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.
@@ -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