github-markdown 0.1.3 → 0.2.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/markdown/autolink.h +8 -0
- data/ext/markdown/buffer.h +8 -0
- data/ext/markdown/gh-markdown.c +4 -3
- data/ext/markdown/houdini.h +8 -0
- data/ext/markdown/html.h +8 -0
- data/ext/markdown/markdown.c +53 -26
- data/ext/markdown/markdown.h +13 -5
- data/ext/markdown/stack.h +8 -0
- data/github-markdown.gemspec +1 -1
- metadata +4 -4
data/ext/markdown/autolink.h
CHANGED
@@ -19,6 +19,10 @@
|
|
19
19
|
|
20
20
|
#include "buffer.h"
|
21
21
|
|
22
|
+
#ifdef __cplusplus
|
23
|
+
extern "C" {
|
24
|
+
#endif
|
25
|
+
|
22
26
|
extern int
|
23
27
|
sd_autolink_issafe(const uint8_t *link, size_t link_len);
|
24
28
|
|
@@ -31,6 +35,10 @@ sd_autolink__email(size_t *rewind_p, struct buf *link, uint8_t *data, size_t off
|
|
31
35
|
extern size_t
|
32
36
|
sd_autolink__url(size_t *rewind_p, struct buf *link, uint8_t *data, size_t offset, size_t size);
|
33
37
|
|
38
|
+
#ifdef __cplusplus
|
39
|
+
}
|
40
|
+
#endif
|
41
|
+
|
34
42
|
#endif
|
35
43
|
|
36
44
|
/* vim: set filetype=c: */
|
data/ext/markdown/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/markdown/gh-markdown.c
CHANGED
@@ -130,8 +130,9 @@ static const int GITHUB_MD_NESTING = 16;
|
|
130
130
|
/* Default flags for all Markdown pipelines:
|
131
131
|
*
|
132
132
|
* - NO_INTRA_EMPHASIS: disallow emphasis inside of words
|
133
|
-
* -
|
134
|
-
*
|
133
|
+
* - LAX_SPACING: Do spacing like in Markdown 1.0.0 (i.e.
|
134
|
+
* do not require an empty line between two different
|
135
|
+
* blocks in a paragraph)
|
135
136
|
* - STRIKETHROUGH: strike out words with `~~`, same semantics
|
136
137
|
* as emphasis
|
137
138
|
* - TABLES: the tables extension from PHP-Markdown extra
|
@@ -140,7 +141,7 @@ static const int GITHUB_MD_NESTING = 16;
|
|
140
141
|
*/
|
141
142
|
static const int GITHUB_MD_FLAGS =
|
142
143
|
MKDEXT_NO_INTRA_EMPHASIS |
|
143
|
-
|
144
|
+
MKDEXT_LAX_SPACING |
|
144
145
|
MKDEXT_STRIKETHROUGH |
|
145
146
|
MKDEXT_TABLES |
|
146
147
|
MKDEXT_FENCED_CODE;
|
data/ext/markdown/houdini.h
CHANGED
@@ -3,6 +3,10 @@
|
|
3
3
|
|
4
4
|
#include "buffer.h"
|
5
5
|
|
6
|
+
#ifdef __cplusplus
|
7
|
+
extern "C" {
|
8
|
+
#endif
|
9
|
+
|
6
10
|
#ifdef HOUDINI_USE_LOCALE
|
7
11
|
# define _isxdigit(c) isxdigit(c)
|
8
12
|
# define _isdigit(c) isdigit(c)
|
@@ -26,4 +30,8 @@ extern void houdini_unescape_url(struct buf *ob, const uint8_t *src, size_t size
|
|
26
30
|
extern void houdini_escape_js(struct buf *ob, const uint8_t *src, size_t size);
|
27
31
|
extern void houdini_unescape_js(struct buf *ob, const uint8_t *src, size_t size);
|
28
32
|
|
33
|
+
#ifdef __cplusplus
|
34
|
+
}
|
35
|
+
#endif
|
36
|
+
|
29
37
|
#endif
|
data/ext/markdown/html.h
CHANGED
@@ -21,6 +21,10 @@
|
|
21
21
|
#include "buffer.h"
|
22
22
|
#include <stdlib.h>
|
23
23
|
|
24
|
+
#ifdef __cplusplus
|
25
|
+
extern "C" {
|
26
|
+
#endif
|
27
|
+
|
24
28
|
struct html_renderopt {
|
25
29
|
struct {
|
26
30
|
int header_count;
|
@@ -65,5 +69,9 @@ sdhtml_toc_renderer(struct sd_callbacks *callbacks, struct html_renderopt *optio
|
|
65
69
|
extern void
|
66
70
|
sdhtml_smartypants(struct buf *ob, const uint8_t *text, size_t size);
|
67
71
|
|
72
|
+
#ifdef __cplusplus
|
73
|
+
}
|
74
|
+
#endif
|
75
|
+
|
68
76
|
#endif
|
69
77
|
|
data/ext/markdown/markdown.c
CHANGED
@@ -1426,18 +1426,38 @@ parse_paragraph(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t
|
|
1426
1426
|
if ((level = is_headerline(data + i, size - i)) != 0)
|
1427
1427
|
break;
|
1428
1428
|
|
1429
|
-
|
1430
|
-
|
1429
|
+
/*
|
1430
|
+
* Early termination of a paragraph with the same logic
|
1431
|
+
* as Markdown 1.0.0. If this logic is applied, the
|
1432
|
+
* Markdown 1.0.3 test suite won't pass cleanly
|
1433
|
+
*
|
1434
|
+
* :: If the first character in a new line is not a letter,
|
1435
|
+
* let's check to see if there's some kind of block starting
|
1436
|
+
* here
|
1437
|
+
*/
|
1438
|
+
if ((rndr->ext_flags & MKDEXT_LAX_SPACING) && !isalnum(data[i])) {
|
1439
|
+
if (is_atxheader(rndr, data + i, size - i) ||
|
1440
|
+
is_hrule(data + i, size - i) ||
|
1441
|
+
prefix_quote(data + i, size - i) ||
|
1442
|
+
prefix_oli(data + i, size - i) ||
|
1443
|
+
prefix_uli(data + i, size - i)) {
|
1431
1444
|
end = i;
|
1432
1445
|
break;
|
1433
1446
|
}
|
1434
|
-
}
|
1435
1447
|
|
1436
|
-
|
1437
|
-
|
1438
|
-
|
1439
|
-
|
1440
|
-
|
1448
|
+
/* see if an html block starts here */
|
1449
|
+
if (data[i] == '<' && rndr->cb.blockhtml &&
|
1450
|
+
parse_htmlblock(ob, rndr, data + i, size - i, 0)) {
|
1451
|
+
end = i;
|
1452
|
+
break;
|
1453
|
+
}
|
1454
|
+
|
1455
|
+
/* see if a code fence starts here */
|
1456
|
+
if ((rndr->ext_flags & MKDEXT_FENCED_CODE) != 0 &&
|
1457
|
+
is_codefence(data + i, size - i, NULL) != 0) {
|
1458
|
+
end = i;
|
1459
|
+
break;
|
1460
|
+
}
|
1441
1461
|
}
|
1442
1462
|
|
1443
1463
|
i = end;
|
@@ -1586,8 +1606,7 @@ parse_listitem(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t s
|
|
1586
1606
|
{
|
1587
1607
|
struct buf *work = 0, *inter = 0;
|
1588
1608
|
size_t beg = 0, end, pre, sublist = 0, orgpre = 0, i;
|
1589
|
-
int in_empty = 0, has_inside_empty = 0;
|
1590
|
-
size_t has_next_uli, has_next_oli;
|
1609
|
+
int in_empty = 0, has_inside_empty = 0, in_fence = 0;
|
1591
1610
|
|
1592
1611
|
/* keeping track of the first indentation prefix */
|
1593
1612
|
while (orgpre < 3 && orgpre < size && data[orgpre] == ' ')
|
@@ -1615,6 +1634,8 @@ parse_listitem(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t s
|
|
1615
1634
|
|
1616
1635
|
/* process the following lines */
|
1617
1636
|
while (beg < size) {
|
1637
|
+
size_t has_next_uli = 0, has_next_oli = 0;
|
1638
|
+
|
1618
1639
|
end++;
|
1619
1640
|
|
1620
1641
|
while (end < size && data[end - 1] != '\n')
|
@@ -1634,8 +1655,17 @@ parse_listitem(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t s
|
|
1634
1655
|
|
1635
1656
|
pre = i;
|
1636
1657
|
|
1637
|
-
|
1638
|
-
|
1658
|
+
if (rndr->ext_flags & MKDEXT_FENCED_CODE) {
|
1659
|
+
if (is_codefence(data + beg + i, end - beg - i, NULL) != 0)
|
1660
|
+
in_fence = !in_fence;
|
1661
|
+
}
|
1662
|
+
|
1663
|
+
/* Only check for new list items if we are **not** inside
|
1664
|
+
* a fenced code block */
|
1665
|
+
if (!in_fence) {
|
1666
|
+
has_next_uli = prefix_uli(data + beg + i, end - beg - i);
|
1667
|
+
has_next_oli = prefix_oli(data + beg + i, end - beg - i);
|
1668
|
+
}
|
1639
1669
|
|
1640
1670
|
/* checking for ul/ol switch */
|
1641
1671
|
if (in_empty && (
|
@@ -1656,10 +1686,12 @@ parse_listitem(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t s
|
|
1656
1686
|
if (!sublist)
|
1657
1687
|
sublist = work->size;
|
1658
1688
|
}
|
1659
|
-
/* joining only indented stuff after empty lines
|
1660
|
-
|
1661
|
-
|
1662
|
-
|
1689
|
+
/* joining only indented stuff after empty lines;
|
1690
|
+
* note that now we only require 1 space of indentation
|
1691
|
+
* to continue a list */
|
1692
|
+
else if (in_empty && pre == 0) {
|
1693
|
+
*flags |= MKD_LI_END;
|
1694
|
+
break;
|
1663
1695
|
}
|
1664
1696
|
else if (in_empty) {
|
1665
1697
|
bufputc(work, '\n');
|
@@ -1790,13 +1822,8 @@ htmlblock_end_tag(
|
|
1790
1822
|
i += w;
|
1791
1823
|
w = 0;
|
1792
1824
|
|
1793
|
-
if (
|
1794
|
-
|
1795
|
-
w = is_empty(data + i, size - i);
|
1796
|
-
} else {
|
1797
|
-
if (i < size && (w = is_empty(data + i, size - i)) == 0)
|
1798
|
-
return 0; /* non-blank line after tag line */
|
1799
|
-
}
|
1825
|
+
if (i < size)
|
1826
|
+
w = is_empty(data + i, size - i);
|
1800
1827
|
|
1801
1828
|
return i + w;
|
1802
1829
|
}
|
@@ -2497,9 +2524,9 @@ sd_markdown_free(struct sd_markdown *md)
|
|
2497
2524
|
void
|
2498
2525
|
sd_version(int *ver_major, int *ver_minor, int *ver_revision)
|
2499
2526
|
{
|
2500
|
-
*ver_major =
|
2501
|
-
*ver_minor =
|
2502
|
-
*ver_revision =
|
2527
|
+
*ver_major = SUNDOWN_VER_MAJOR;
|
2528
|
+
*ver_minor = SUNDOWN_VER_MINOR;
|
2529
|
+
*ver_revision = SUNDOWN_VER_REVISION;
|
2503
2530
|
}
|
2504
2531
|
|
2505
2532
|
/* vim: set filetype=c: */
|
data/ext/markdown/markdown.h
CHANGED
@@ -22,10 +22,14 @@
|
|
22
22
|
#include "buffer.h"
|
23
23
|
#include "autolink.h"
|
24
24
|
|
25
|
-
#
|
26
|
-
|
27
|
-
#
|
28
|
-
|
25
|
+
#ifdef __cplusplus
|
26
|
+
extern "C" {
|
27
|
+
#endif
|
28
|
+
|
29
|
+
#define SUNDOWN_VERSION "1.16.0"
|
30
|
+
#define SUNDOWN_VER_MAJOR 1
|
31
|
+
#define SUNDOWN_VER_MINOR 16
|
32
|
+
#define SUNDOWN_VER_REVISION 0
|
29
33
|
|
30
34
|
/********************
|
31
35
|
* TYPE DEFINITIONS *
|
@@ -52,9 +56,9 @@ enum mkd_extensions {
|
|
52
56
|
MKDEXT_FENCED_CODE = (1 << 2),
|
53
57
|
MKDEXT_AUTOLINK = (1 << 3),
|
54
58
|
MKDEXT_STRIKETHROUGH = (1 << 4),
|
55
|
-
MKDEXT_LAX_HTML_BLOCKS = (1 << 5),
|
56
59
|
MKDEXT_SPACE_HEADERS = (1 << 6),
|
57
60
|
MKDEXT_SUPERSCRIPT = (1 << 7),
|
61
|
+
MKDEXT_LAX_SPACING = (1 << 8),
|
58
62
|
};
|
59
63
|
|
60
64
|
/* sd_callbacks - functions for rendering parsed data */
|
@@ -125,6 +129,10 @@ sd_markdown_free(struct sd_markdown *md);
|
|
125
129
|
extern void
|
126
130
|
sd_version(int *major, int *minor, int *revision);
|
127
131
|
|
132
|
+
#ifdef __cplusplus
|
133
|
+
}
|
134
|
+
#endif
|
135
|
+
|
128
136
|
#endif
|
129
137
|
|
130
138
|
/* vim: set filetype=c: */
|
data/ext/markdown/stack.h
CHANGED
@@ -3,6 +3,10 @@
|
|
3
3
|
|
4
4
|
#include <stdlib.h>
|
5
5
|
|
6
|
+
#ifdef __cplusplus
|
7
|
+
extern "C" {
|
8
|
+
#endif
|
9
|
+
|
6
10
|
struct stack {
|
7
11
|
void **item;
|
8
12
|
size_t size;
|
@@ -18,4 +22,8 @@ int stack_push(struct stack *, void *);
|
|
18
22
|
void *stack_pop(struct stack *);
|
19
23
|
void *stack_top(struct stack *);
|
20
24
|
|
25
|
+
#ifdef __cplusplus
|
26
|
+
}
|
27
|
+
#endif
|
28
|
+
|
21
29
|
#endif
|
data/github-markdown.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
Gem::Specification.new do |s|
|
3
3
|
s.name = 'github-markdown'
|
4
|
-
s.version = '0.
|
4
|
+
s.version = '0.2.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
7
|
s.date = '2012-04-04'
|
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:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- GitHub, Inc
|