commonmarker 0.23.6 → 1.0.0.pre

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.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +70 -212
  3. data/commonmarker.gemspec +34 -31
  4. data/ext/commonmarker/Cargo.toml +12 -0
  5. data/ext/commonmarker/_util.rb +102 -0
  6. data/ext/commonmarker/extconf.rb +4 -5
  7. data/ext/commonmarker/src/comrak_options.rs +107 -0
  8. data/ext/commonmarker/src/lib.rs +27 -0
  9. data/lib/commonmarker/config.rb +58 -37
  10. data/lib/commonmarker/extension.rb +14 -0
  11. data/lib/commonmarker/renderer.rb +1 -127
  12. data/lib/commonmarker/version.rb +2 -2
  13. data/lib/commonmarker.rb +19 -32
  14. metadata +33 -177
  15. data/Rakefile +0 -109
  16. data/bin/commonmarker +0 -118
  17. data/ext/commonmarker/arena.c +0 -103
  18. data/ext/commonmarker/autolink.c +0 -456
  19. data/ext/commonmarker/autolink.h +0 -8
  20. data/ext/commonmarker/blocks.c +0 -1596
  21. data/ext/commonmarker/buffer.c +0 -278
  22. data/ext/commonmarker/buffer.h +0 -116
  23. data/ext/commonmarker/case_fold_switch.inc +0 -4327
  24. data/ext/commonmarker/chunk.h +0 -135
  25. data/ext/commonmarker/cmark-gfm-core-extensions.h +0 -54
  26. data/ext/commonmarker/cmark-gfm-extension_api.h +0 -736
  27. data/ext/commonmarker/cmark-gfm-extensions_export.h +0 -42
  28. data/ext/commonmarker/cmark-gfm.h +0 -817
  29. data/ext/commonmarker/cmark-gfm_export.h +0 -42
  30. data/ext/commonmarker/cmark-gfm_version.h +0 -7
  31. data/ext/commonmarker/cmark.c +0 -55
  32. data/ext/commonmarker/cmark_ctype.c +0 -44
  33. data/ext/commonmarker/cmark_ctype.h +0 -33
  34. data/ext/commonmarker/commonmark.c +0 -529
  35. data/ext/commonmarker/commonmarker.c +0 -1307
  36. data/ext/commonmarker/commonmarker.h +0 -16
  37. data/ext/commonmarker/config.h +0 -76
  38. data/ext/commonmarker/core-extensions.c +0 -27
  39. data/ext/commonmarker/entities.inc +0 -2138
  40. data/ext/commonmarker/ext_scanners.c +0 -879
  41. data/ext/commonmarker/ext_scanners.h +0 -24
  42. data/ext/commonmarker/footnotes.c +0 -63
  43. data/ext/commonmarker/footnotes.h +0 -27
  44. data/ext/commonmarker/houdini.h +0 -57
  45. data/ext/commonmarker/houdini_href_e.c +0 -100
  46. data/ext/commonmarker/houdini_html_e.c +0 -66
  47. data/ext/commonmarker/houdini_html_u.c +0 -149
  48. data/ext/commonmarker/html.c +0 -486
  49. data/ext/commonmarker/html.h +0 -27
  50. data/ext/commonmarker/inlines.c +0 -1716
  51. data/ext/commonmarker/inlines.h +0 -29
  52. data/ext/commonmarker/iterator.c +0 -159
  53. data/ext/commonmarker/iterator.h +0 -26
  54. data/ext/commonmarker/latex.c +0 -466
  55. data/ext/commonmarker/linked_list.c +0 -37
  56. data/ext/commonmarker/man.c +0 -278
  57. data/ext/commonmarker/map.c +0 -122
  58. data/ext/commonmarker/map.h +0 -41
  59. data/ext/commonmarker/node.c +0 -979
  60. data/ext/commonmarker/node.h +0 -125
  61. data/ext/commonmarker/parser.h +0 -58
  62. data/ext/commonmarker/plaintext.c +0 -235
  63. data/ext/commonmarker/plugin.c +0 -36
  64. data/ext/commonmarker/plugin.h +0 -34
  65. data/ext/commonmarker/references.c +0 -42
  66. data/ext/commonmarker/references.h +0 -26
  67. data/ext/commonmarker/registry.c +0 -63
  68. data/ext/commonmarker/registry.h +0 -24
  69. data/ext/commonmarker/render.c +0 -205
  70. data/ext/commonmarker/render.h +0 -62
  71. data/ext/commonmarker/scanners.c +0 -10508
  72. data/ext/commonmarker/scanners.h +0 -62
  73. data/ext/commonmarker/scanners.re +0 -341
  74. data/ext/commonmarker/strikethrough.c +0 -167
  75. data/ext/commonmarker/strikethrough.h +0 -9
  76. data/ext/commonmarker/syntax_extension.c +0 -149
  77. data/ext/commonmarker/syntax_extension.h +0 -34
  78. data/ext/commonmarker/table.c +0 -848
  79. data/ext/commonmarker/table.h +0 -12
  80. data/ext/commonmarker/tagfilter.c +0 -60
  81. data/ext/commonmarker/tagfilter.h +0 -8
  82. data/ext/commonmarker/tasklist.c +0 -156
  83. data/ext/commonmarker/tasklist.h +0 -8
  84. data/ext/commonmarker/utf8.c +0 -317
  85. data/ext/commonmarker/utf8.h +0 -35
  86. data/ext/commonmarker/xml.c +0 -181
  87. data/lib/commonmarker/node/inspect.rb +0 -47
  88. data/lib/commonmarker/node.rb +0 -83
  89. data/lib/commonmarker/renderer/html_renderer.rb +0 -252
@@ -1,205 +0,0 @@
1
- #include <stdlib.h>
2
- #include "buffer.h"
3
- #include "chunk.h"
4
- #include "cmark-gfm.h"
5
- #include "utf8.h"
6
- #include "render.h"
7
- #include "node.h"
8
- #include "syntax_extension.h"
9
-
10
- static CMARK_INLINE void S_cr(cmark_renderer *renderer) {
11
- if (renderer->need_cr < 1) {
12
- renderer->need_cr = 1;
13
- }
14
- }
15
-
16
- static CMARK_INLINE void S_blankline(cmark_renderer *renderer) {
17
- if (renderer->need_cr < 2) {
18
- renderer->need_cr = 2;
19
- }
20
- }
21
-
22
- static void S_out(cmark_renderer *renderer, cmark_node *node,
23
- const char *source, bool wrap,
24
- cmark_escaping escape) {
25
- int length = (int)strlen(source);
26
- unsigned char nextc;
27
- int32_t c;
28
- int i = 0;
29
- int last_nonspace;
30
- int len;
31
- cmark_chunk remainder = cmark_chunk_literal("");
32
- int k = renderer->buffer->size - 1;
33
-
34
- cmark_syntax_extension *ext = NULL;
35
- cmark_node *n = node;
36
- while (n && !ext) {
37
- ext = n->extension;
38
- if (!ext)
39
- n = n->parent;
40
- }
41
- if (ext && !ext->commonmark_escape_func)
42
- ext = NULL;
43
-
44
- wrap = wrap && !renderer->no_linebreaks;
45
-
46
- if (renderer->in_tight_list_item && renderer->need_cr > 1) {
47
- renderer->need_cr = 1;
48
- }
49
- while (renderer->need_cr) {
50
- if (k < 0 || renderer->buffer->ptr[k] == '\n') {
51
- k -= 1;
52
- } else {
53
- cmark_strbuf_putc(renderer->buffer, '\n');
54
- if (renderer->need_cr > 1) {
55
- cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr,
56
- renderer->prefix->size);
57
- }
58
- }
59
- renderer->column = 0;
60
- renderer->last_breakable = 0;
61
- renderer->begin_line = true;
62
- renderer->begin_content = true;
63
- renderer->need_cr -= 1;
64
- }
65
-
66
- while (i < length) {
67
- if (renderer->begin_line) {
68
- cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr,
69
- renderer->prefix->size);
70
- // note: this assumes prefix is ascii:
71
- renderer->column = renderer->prefix->size;
72
- }
73
-
74
- len = cmark_utf8proc_iterate((const uint8_t *)source + i, length - i, &c);
75
- if (len == -1) { // error condition
76
- return; // return without rendering rest of string
77
- }
78
-
79
- if (ext && ext->commonmark_escape_func(ext, node, c))
80
- cmark_strbuf_putc(renderer->buffer, '\\');
81
-
82
- nextc = source[i + len];
83
- if (c == 32 && wrap) {
84
- if (!renderer->begin_line) {
85
- last_nonspace = renderer->buffer->size;
86
- cmark_strbuf_putc(renderer->buffer, ' ');
87
- renderer->column += 1;
88
- renderer->begin_line = false;
89
- renderer->begin_content = false;
90
- // skip following spaces
91
- while (source[i + 1] == ' ') {
92
- i++;
93
- }
94
- // We don't allow breaks that make a digit the first character
95
- // because this causes problems with commonmark output.
96
- if (!cmark_isdigit(source[i + 1])) {
97
- renderer->last_breakable = last_nonspace;
98
- }
99
- }
100
-
101
- } else if (escape == LITERAL) {
102
- if (c == 10) {
103
- cmark_strbuf_putc(renderer->buffer, '\n');
104
- renderer->column = 0;
105
- renderer->begin_line = true;
106
- renderer->begin_content = true;
107
- renderer->last_breakable = 0;
108
- } else {
109
- cmark_render_code_point(renderer, c);
110
- renderer->begin_line = false;
111
- // we don't set 'begin_content' to false til we've
112
- // finished parsing a digit. Reason: in commonmark
113
- // we need to escape a potential list marker after
114
- // a digit:
115
- renderer->begin_content =
116
- renderer->begin_content && cmark_isdigit((char)c) == 1;
117
- }
118
- } else {
119
- (renderer->outc)(renderer, node, escape, c, nextc);
120
- renderer->begin_line = false;
121
- renderer->begin_content =
122
- renderer->begin_content && cmark_isdigit((char)c) == 1;
123
- }
124
-
125
- // If adding the character went beyond width, look for an
126
- // earlier place where the line could be broken:
127
- if (renderer->width > 0 && renderer->column > renderer->width &&
128
- !renderer->begin_line && renderer->last_breakable > 0) {
129
-
130
- // copy from last_breakable to remainder
131
- cmark_chunk_set_cstr(renderer->mem, &remainder,
132
- (char *)renderer->buffer->ptr +
133
- renderer->last_breakable + 1);
134
- // truncate at last_breakable
135
- cmark_strbuf_truncate(renderer->buffer, renderer->last_breakable);
136
- // add newline, prefix, and remainder
137
- cmark_strbuf_putc(renderer->buffer, '\n');
138
- cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr,
139
- renderer->prefix->size);
140
- cmark_strbuf_put(renderer->buffer, remainder.data, remainder.len);
141
- renderer->column = renderer->prefix->size + remainder.len;
142
- cmark_chunk_free(renderer->mem, &remainder);
143
- renderer->last_breakable = 0;
144
- renderer->begin_line = false;
145
- renderer->begin_content = false;
146
- }
147
-
148
- i += len;
149
- }
150
- }
151
-
152
- // Assumes no newlines, assumes ascii content:
153
- void cmark_render_ascii(cmark_renderer *renderer, const char *s) {
154
- int origsize = renderer->buffer->size;
155
- cmark_strbuf_puts(renderer->buffer, s);
156
- renderer->column += renderer->buffer->size - origsize;
157
- }
158
-
159
- void cmark_render_code_point(cmark_renderer *renderer, uint32_t c) {
160
- cmark_utf8proc_encode_char(c, renderer->buffer);
161
- renderer->column += 1;
162
- }
163
-
164
- char *cmark_render(cmark_mem *mem, cmark_node *root, int options, int width,
165
- void (*outc)(cmark_renderer *, cmark_node *,
166
- cmark_escaping, int32_t,
167
- unsigned char),
168
- int (*render_node)(cmark_renderer *renderer,
169
- cmark_node *node,
170
- cmark_event_type ev_type, int options)) {
171
- cmark_strbuf pref = CMARK_BUF_INIT(mem);
172
- cmark_strbuf buf = CMARK_BUF_INIT(mem);
173
- cmark_node *cur;
174
- cmark_event_type ev_type;
175
- char *result;
176
- cmark_iter *iter = cmark_iter_new(root);
177
-
178
- cmark_renderer renderer = {mem, &buf, &pref, 0, width,
179
- 0, 0, true, true, false,
180
- false, outc, S_cr, S_blankline, S_out,
181
- 0};
182
-
183
- while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
184
- cur = cmark_iter_get_node(iter);
185
- if (!render_node(&renderer, cur, ev_type, options)) {
186
- // a false value causes us to skip processing
187
- // the node's contents. this is used for
188
- // autolinks.
189
- cmark_iter_reset(iter, cur, CMARK_EVENT_EXIT);
190
- }
191
- }
192
-
193
- // ensure final newline
194
- if (renderer.buffer->size == 0 || renderer.buffer->ptr[renderer.buffer->size - 1] != '\n') {
195
- cmark_strbuf_putc(renderer.buffer, '\n');
196
- }
197
-
198
- result = (char *)cmark_strbuf_detach(renderer.buffer);
199
-
200
- cmark_iter_free(iter);
201
- cmark_strbuf_free(renderer.prefix);
202
- cmark_strbuf_free(renderer.buffer);
203
-
204
- return result;
205
- }
@@ -1,62 +0,0 @@
1
- #ifndef CMARK_RENDER_H
2
- #define CMARK_RENDER_H
3
-
4
- #ifdef __cplusplus
5
- extern "C" {
6
- #endif
7
-
8
- #include <stdlib.h>
9
- #include "buffer.h"
10
- #include "chunk.h"
11
-
12
- typedef enum { LITERAL, NORMAL, TITLE, URL } cmark_escaping;
13
-
14
- struct cmark_renderer {
15
- cmark_mem *mem;
16
- cmark_strbuf *buffer;
17
- cmark_strbuf *prefix;
18
- int column;
19
- int width;
20
- int need_cr;
21
- bufsize_t last_breakable;
22
- bool begin_line;
23
- bool begin_content;
24
- bool no_linebreaks;
25
- bool in_tight_list_item;
26
- void (*outc)(struct cmark_renderer *, cmark_node *, cmark_escaping, int32_t, unsigned char);
27
- void (*cr)(struct cmark_renderer *);
28
- void (*blankline)(struct cmark_renderer *);
29
- void (*out)(struct cmark_renderer *, cmark_node *, const char *, bool, cmark_escaping);
30
- unsigned int footnote_ix;
31
- };
32
-
33
- typedef struct cmark_renderer cmark_renderer;
34
-
35
- struct cmark_html_renderer {
36
- cmark_strbuf *html;
37
- cmark_node *plain;
38
- cmark_llist *filter_extensions;
39
- unsigned int footnote_ix;
40
- unsigned int written_footnote_ix;
41
- void *opaque;
42
- };
43
-
44
- typedef struct cmark_html_renderer cmark_html_renderer;
45
-
46
- void cmark_render_ascii(cmark_renderer *renderer, const char *s);
47
-
48
- void cmark_render_code_point(cmark_renderer *renderer, uint32_t c);
49
-
50
- char *cmark_render(cmark_mem *mem, cmark_node *root, int options, int width,
51
- void (*outc)(cmark_renderer *, cmark_node *,
52
- cmark_escaping, int32_t,
53
- unsigned char),
54
- int (*render_node)(cmark_renderer *renderer,
55
- cmark_node *node,
56
- cmark_event_type ev_type, int options));
57
-
58
- #ifdef __cplusplus
59
- }
60
- #endif
61
-
62
- #endif