commonmarker 0.9.1 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of commonmarker might be problematic. Click here for more details.

Files changed (143) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -0
  3. data/Rakefile +9 -9
  4. data/ext/commonmarker/cmark/api_test/main.c +5 -0
  5. data/ext/commonmarker/cmark/build/CMakeCache.txt +459 -0
  6. data/ext/commonmarker/cmark/build/CMakeFiles/3.5.2/CMakeCCompiler.cmake +67 -0
  7. data/ext/commonmarker/cmark/build/CMakeFiles/3.5.2/CMakeCXXCompiler.cmake +68 -0
  8. data/ext/commonmarker/cmark/build/CMakeFiles/3.5.2/CMakeDetermineCompilerABI_C.bin +0 -0
  9. data/ext/commonmarker/cmark/build/CMakeFiles/3.5.2/CMakeDetermineCompilerABI_CXX.bin +0 -0
  10. data/ext/commonmarker/cmark/build/CMakeFiles/3.5.2/CMakeSystem.cmake +15 -0
  11. data/ext/commonmarker/cmark/build/CMakeFiles/3.5.2/CompilerIdC/CMakeCCompilerId.c +544 -0
  12. data/ext/commonmarker/cmark/build/CMakeFiles/3.5.2/CompilerIdC/a.out +0 -0
  13. data/ext/commonmarker/cmark/build/CMakeFiles/3.5.2/CompilerIdCXX/CMakeCXXCompilerId.cpp +533 -0
  14. data/ext/commonmarker/cmark/build/CMakeFiles/3.5.2/CompilerIdCXX/a.out +0 -0
  15. data/ext/commonmarker/cmark/build/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  16. data/ext/commonmarker/cmark/build/CMakeFiles/CMakeError.log +14 -0
  17. data/ext/commonmarker/cmark/build/CMakeFiles/CMakeOutput.log +562 -0
  18. data/ext/commonmarker/cmark/build/CMakeFiles/Makefile.cmake +150 -0
  19. data/ext/commonmarker/cmark/build/CMakeFiles/Makefile2 +295 -0
  20. data/ext/commonmarker/cmark/build/CMakeFiles/TargetDirectories.txt +39 -0
  21. data/ext/commonmarker/cmark/build/CMakeFiles/cmake.check_cache +1 -0
  22. data/ext/commonmarker/cmark/build/CMakeFiles/feature_tests.bin +0 -0
  23. data/ext/commonmarker/cmark/build/CMakeFiles/feature_tests.c +34 -0
  24. data/ext/commonmarker/cmark/build/CMakeFiles/feature_tests.cxx +405 -0
  25. data/ext/commonmarker/cmark/build/CMakeFiles/progress.marks +1 -0
  26. data/ext/commonmarker/cmark/build/CTestTestfile.cmake +10 -0
  27. data/ext/commonmarker/cmark/build/Makefile +250 -0
  28. data/ext/commonmarker/cmark/build/api_test/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  29. data/ext/commonmarker/cmark/build/api_test/CMakeFiles/api_test.dir/DependInfo.cmake +35 -0
  30. data/ext/commonmarker/cmark/build/api_test/CMakeFiles/api_test.dir/build.make +168 -0
  31. data/ext/commonmarker/cmark/build/api_test/CMakeFiles/api_test.dir/cmake_clean.cmake +12 -0
  32. data/ext/commonmarker/cmark/build/api_test/CMakeFiles/api_test.dir/depend.make +2 -0
  33. data/ext/commonmarker/cmark/build/api_test/CMakeFiles/api_test.dir/flags.make +17 -0
  34. data/ext/commonmarker/cmark/build/api_test/CMakeFiles/api_test.dir/link.txt +1 -0
  35. data/ext/commonmarker/cmark/build/api_test/CMakeFiles/api_test.dir/progress.make +5 -0
  36. data/ext/commonmarker/cmark/build/api_test/CMakeFiles/progress.marks +1 -0
  37. data/ext/commonmarker/cmark/build/api_test/Makefile +300 -0
  38. data/ext/commonmarker/cmark/build/api_test/cmake_install.cmake +29 -0
  39. data/ext/commonmarker/cmark/build/cmake_install.cmake +48 -0
  40. data/ext/commonmarker/cmark/build/man/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  41. data/ext/commonmarker/cmark/build/man/CMakeFiles/progress.marks +1 -0
  42. data/ext/commonmarker/cmark/build/man/Makefile +194 -0
  43. data/ext/commonmarker/cmark/build/man/cmake_install.cmake +37 -0
  44. data/ext/commonmarker/cmark/build/src/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  45. data/ext/commonmarker/cmark/build/src/CMakeFiles/cmark.dir/DependInfo.cmake +41 -0
  46. data/ext/commonmarker/cmark/build/src/CMakeFiles/cmark.dir/build.make +626 -0
  47. data/ext/commonmarker/cmark/build/src/CMakeFiles/cmark.dir/cmake_clean.cmake +29 -0
  48. data/ext/commonmarker/cmark/build/src/CMakeFiles/cmark.dir/depend.make +2 -0
  49. data/ext/commonmarker/cmark/build/src/CMakeFiles/cmark.dir/flags.make +10 -0
  50. data/ext/commonmarker/cmark/build/src/CMakeFiles/cmark.dir/link.txt +1 -0
  51. data/ext/commonmarker/cmark/build/src/CMakeFiles/cmark.dir/progress.make +22 -0
  52. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark.dir/DependInfo.cmake +46 -0
  53. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark.dir/build.make +603 -0
  54. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark.dir/cmake_clean.cmake +29 -0
  55. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark.dir/depend.make +2 -0
  56. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark.dir/flags.make +10 -0
  57. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark.dir/link.txt +1 -0
  58. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark.dir/progress.make +21 -0
  59. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/C.includecache +468 -0
  60. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/DependInfo.cmake +40 -0
  61. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/blocks.c.o +0 -0
  62. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/buffer.c.o +0 -0
  63. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/build.make +600 -0
  64. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/cmake_clean.cmake +28 -0
  65. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/cmake_clean_target.cmake +3 -0
  66. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/cmark.c.o +0 -0
  67. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/cmark_ctype.c.o +0 -0
  68. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/commonmark.c.o +0 -0
  69. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/depend.internal +211 -0
  70. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/depend.make +211 -0
  71. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/flags.make +10 -0
  72. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/houdini_href_e.c.o +0 -0
  73. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/houdini_html_e.c.o +0 -0
  74. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/houdini_html_u.c.o +0 -0
  75. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/html.c.o +0 -0
  76. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/inlines.c.o +0 -0
  77. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/iterator.c.o +0 -0
  78. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/latex.c.o +0 -0
  79. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/link.txt +2 -0
  80. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/man.c.o +0 -0
  81. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/node.c.o +0 -0
  82. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/progress.make +21 -0
  83. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/references.c.o +0 -0
  84. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/render.c.o +0 -0
  85. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/scanners.c.o +0 -0
  86. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/utf8.c.o +0 -0
  87. data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/xml.c.o +0 -0
  88. data/ext/commonmarker/cmark/build/src/CMakeFiles/progress.marks +1 -0
  89. data/ext/commonmarker/cmark/build/src/Makefile +956 -0
  90. data/ext/commonmarker/cmark/build/src/cmake_install.cmake +77 -0
  91. data/ext/commonmarker/cmark/build/src/cmark_export.h +41 -0
  92. data/ext/commonmarker/cmark/build/src/cmark_version.h +7 -0
  93. data/ext/commonmarker/cmark/build/src/config.h +84 -0
  94. data/ext/commonmarker/cmark/build/src/libcmark.a +0 -0
  95. data/ext/commonmarker/cmark/build/src/libcmark.pc +10 -0
  96. data/ext/commonmarker/cmark/build/testdir/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  97. data/ext/commonmarker/cmark/build/testdir/CMakeFiles/progress.marks +1 -0
  98. data/ext/commonmarker/cmark/build/testdir/CTestTestfile.cmake +14 -0
  99. data/ext/commonmarker/cmark/build/testdir/Makefile +194 -0
  100. data/ext/commonmarker/cmark/build/testdir/cmake_install.cmake +29 -0
  101. data/ext/commonmarker/cmark/man/man1/cmark.1 +11 -4
  102. data/ext/commonmarker/cmark/man/man3/cmark.3 +66 -11
  103. data/ext/commonmarker/cmark/src/blocks.c +232 -235
  104. data/ext/commonmarker/cmark/src/buffer.c +19 -56
  105. data/ext/commonmarker/cmark/src/buffer.h +7 -20
  106. data/ext/commonmarker/cmark/src/chunk.h +19 -19
  107. data/ext/commonmarker/cmark/src/cmark.c +14 -0
  108. data/ext/commonmarker/cmark/src/cmark.h +45 -6
  109. data/ext/commonmarker/cmark/src/cmark_ctype.c +2 -0
  110. data/ext/commonmarker/cmark/src/cmark_ctype.h +2 -0
  111. data/ext/commonmarker/cmark/src/commonmark.c +42 -29
  112. data/ext/commonmarker/cmark/src/config.h.in +8 -0
  113. data/ext/commonmarker/cmark/src/html.c +3 -1
  114. data/ext/commonmarker/cmark/src/inlines.c +111 -150
  115. data/ext/commonmarker/cmark/src/inlines.h +4 -4
  116. data/ext/commonmarker/cmark/src/iterator.c +6 -7
  117. data/ext/commonmarker/cmark/src/iterator.h +2 -0
  118. data/ext/commonmarker/cmark/src/latex.c +10 -8
  119. data/ext/commonmarker/cmark/src/main.c +6 -2
  120. data/ext/commonmarker/cmark/src/man.c +9 -5
  121. data/ext/commonmarker/cmark/src/node.c +38 -29
  122. data/ext/commonmarker/cmark/src/node.h +15 -11
  123. data/ext/commonmarker/cmark/src/parser.h +4 -2
  124. data/ext/commonmarker/cmark/src/references.c +23 -22
  125. data/ext/commonmarker/cmark/src/references.h +3 -1
  126. data/ext/commonmarker/cmark/src/render.c +9 -7
  127. data/ext/commonmarker/cmark/src/render.h +3 -1
  128. data/ext/commonmarker/cmark/src/scanners.c +30 -22
  129. data/ext/commonmarker/cmark/src/xml.c +1 -1
  130. data/ext/commonmarker/cmark/test/CMakeLists.txt +8 -8
  131. data/ext/commonmarker/cmark/test/cmark.py +34 -14
  132. data/ext/commonmarker/cmark/test/roundtrip_tests.py +47 -0
  133. data/ext/commonmarker/cmark/test/spec.txt +96 -6
  134. data/ext/commonmarker/cmark/test/spec_tests.py +5 -8
  135. data/ext/commonmarker/commonmarker.c +14 -8
  136. data/lib/commonmarker/config.rb +2 -2
  137. data/lib/commonmarker/renderer.rb +17 -7
  138. data/lib/commonmarker/renderer/html_renderer.rb +16 -21
  139. data/lib/commonmarker/version.rb +1 -1
  140. data/test/test_pathological_inputs.rb +11 -11
  141. metadata +99 -4
  142. data/ext/commonmarker/cmark/test/roundtrip.bat +0 -1
  143. data/ext/commonmarker/cmark/test/roundtrip.sh +0 -2
@@ -4,6 +4,7 @@
4
4
  #include <stdio.h>
5
5
  #include "node.h"
6
6
  #include "buffer.h"
7
+ #include "memory.h"
7
8
 
8
9
  #ifdef __cplusplus
9
10
  extern "C" {
@@ -12,6 +13,7 @@ extern "C" {
12
13
  #define MAX_LINK_LABEL_LENGTH 1000
13
14
 
14
15
  struct cmark_parser {
16
+ struct cmark_mem *mem;
15
17
  struct cmark_reference_map *refmap;
16
18
  struct cmark_node *root;
17
19
  struct cmark_node *current;
@@ -23,9 +25,9 @@ struct cmark_parser {
23
25
  int indent;
24
26
  bool blank;
25
27
  bool partially_consumed_tab;
26
- cmark_strbuf *curline;
28
+ cmark_strbuf curline;
27
29
  bufsize_t last_line_length;
28
- cmark_strbuf *linebuf;
30
+ cmark_strbuf linebuf;
29
31
  int options;
30
32
  bool last_buffer_ended_with_cr;
31
33
  };
@@ -14,12 +14,13 @@ static unsigned int refhash(const unsigned char *link_ref) {
14
14
  return hash;
15
15
  }
16
16
 
17
- static void reference_free(cmark_reference *ref) {
17
+ static void reference_free(cmark_reference_map *map, cmark_reference *ref) {
18
+ cmark_mem *mem = map->mem;
18
19
  if (ref != NULL) {
19
- free(ref->label);
20
- cmark_chunk_free(&ref->url);
21
- cmark_chunk_free(&ref->title);
22
- free(ref);
20
+ mem->free(ref->label);
21
+ cmark_chunk_free(mem, &ref->url);
22
+ cmark_chunk_free(mem, &ref->title);
23
+ mem->free(ref);
23
24
  }
24
25
  }
25
26
 
@@ -27,8 +28,8 @@ static void reference_free(cmark_reference *ref) {
27
28
  // remove leading/trailing whitespace, case fold
28
29
  // Return NULL if the reference name is actually empty (i.e. composed
29
30
  // solely from whitespace)
30
- static unsigned char *normalize_reference(cmark_chunk *ref) {
31
- cmark_strbuf normalized = GH_BUF_INIT;
31
+ static unsigned char *normalize_reference(cmark_mem *mem, cmark_chunk *ref) {
32
+ cmark_strbuf normalized = CMARK_BUF_INIT(mem);
32
33
  unsigned char *result;
33
34
 
34
35
  if (ref == NULL)
@@ -57,7 +58,7 @@ static void add_reference(cmark_reference_map *map, cmark_reference *ref) {
57
58
 
58
59
  while (t) {
59
60
  if (t->hash == ref->hash && !strcmp((char *)t->label, (char *)ref->label)) {
60
- reference_free(ref);
61
+ reference_free(map, ref);
61
62
  return;
62
63
  }
63
64
 
@@ -70,22 +71,20 @@ static void add_reference(cmark_reference_map *map, cmark_reference *ref) {
70
71
  void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label,
71
72
  cmark_chunk *url, cmark_chunk *title) {
72
73
  cmark_reference *ref;
73
- unsigned char *reflabel = normalize_reference(label);
74
+ unsigned char *reflabel = normalize_reference(map->mem, label);
74
75
 
75
76
  /* empty reference name, or composed from only whitespace */
76
77
  if (reflabel == NULL)
77
78
  return;
78
79
 
79
- ref = (cmark_reference *)calloc(1, sizeof(*ref));
80
- if (ref != NULL) {
81
- ref->label = reflabel;
82
- ref->hash = refhash(ref->label);
83
- ref->url = cmark_clean_url(url);
84
- ref->title = cmark_clean_title(title);
85
- ref->next = NULL;
80
+ ref = (cmark_reference *)map->mem->calloc(1, sizeof(*ref));
81
+ ref->label = reflabel;
82
+ ref->hash = refhash(ref->label);
83
+ ref->url = cmark_clean_url(map->mem, url);
84
+ ref->title = cmark_clean_title(map->mem, title);
85
+ ref->next = NULL;
86
86
 
87
- add_reference(map, ref);
88
- }
87
+ add_reference(map, ref);
89
88
  }
90
89
 
91
90
  // Returns reference if refmap contains a reference with matching
@@ -102,7 +101,7 @@ cmark_reference *cmark_reference_lookup(cmark_reference_map *map,
102
101
  if (map == NULL)
103
102
  return NULL;
104
103
 
105
- norm = normalize_reference(label);
104
+ norm = normalize_reference(map->mem, label);
106
105
  if (norm == NULL)
107
106
  return NULL;
108
107
 
@@ -131,7 +130,7 @@ void cmark_reference_map_free(cmark_reference_map *map) {
131
130
 
132
131
  while (ref) {
133
132
  next = ref->next;
134
- reference_free(ref);
133
+ reference_free(map, ref);
135
134
  ref = next;
136
135
  }
137
136
  }
@@ -139,6 +138,8 @@ void cmark_reference_map_free(cmark_reference_map *map) {
139
138
  free(map);
140
139
  }
141
140
 
142
- cmark_reference_map *cmark_reference_map_new(void) {
143
- return (cmark_reference_map *)calloc(1, sizeof(cmark_reference_map));
141
+ cmark_reference_map *cmark_reference_map_new(cmark_mem *mem) {
142
+ cmark_reference_map *map = (cmark_reference_map *)mem->calloc(1, sizeof(cmark_reference_map));
143
+ map->mem = mem;
144
+ return map;
144
145
  }
@@ -1,6 +1,7 @@
1
1
  #ifndef CMARK_REFERENCES_H
2
2
  #define CMARK_REFERENCES_H
3
3
 
4
+ #include "memory.h"
4
5
  #include "chunk.h"
5
6
 
6
7
  #ifdef __cplusplus
@@ -20,12 +21,13 @@ struct cmark_reference {
20
21
  typedef struct cmark_reference cmark_reference;
21
22
 
22
23
  struct cmark_reference_map {
24
+ cmark_mem *mem;
23
25
  cmark_reference *table[REFMAP_SIZE];
24
26
  };
25
27
 
26
28
  typedef struct cmark_reference_map cmark_reference_map;
27
29
 
28
- cmark_reference_map *cmark_reference_map_new(void);
30
+ cmark_reference_map *cmark_reference_map_new(cmark_mem *mem);
29
31
  void cmark_reference_map_free(cmark_reference_map *map);
30
32
  cmark_reference *cmark_reference_lookup(cmark_reference_map *map,
31
33
  cmark_chunk *label);
@@ -4,6 +4,7 @@
4
4
  #include "cmark.h"
5
5
  #include "utf8.h"
6
6
  #include "render.h"
7
+ #include "node.h"
7
8
 
8
9
  static CMARK_INLINE void S_cr(cmark_renderer *renderer) {
9
10
  if (renderer->need_cr < 1) {
@@ -19,7 +20,7 @@ static CMARK_INLINE void S_blankline(cmark_renderer *renderer) {
19
20
 
20
21
  static void S_out(cmark_renderer *renderer, const char *source, bool wrap,
21
22
  cmark_escaping escape) {
22
- int length = cmark_strbuf_safe_strlen(source);
23
+ int length = strlen(source);
23
24
  unsigned char nextc;
24
25
  int32_t c;
25
26
  int i = 0;
@@ -28,7 +29,7 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap,
28
29
  cmark_chunk remainder = cmark_chunk_literal("");
29
30
  int k = renderer->buffer->size - 1;
30
31
 
31
- wrap = wrap && !renderer->no_wrap;
32
+ wrap = wrap && !renderer->no_linebreaks;
32
33
 
33
34
  if (renderer->in_tight_list_item && renderer->need_cr > 1) {
34
35
  renderer->need_cr = 1;
@@ -108,7 +109,7 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap,
108
109
  !renderer->begin_line && renderer->last_breakable > 0) {
109
110
 
110
111
  // copy from last_breakable to remainder
111
- cmark_chunk_set_cstr(&remainder, (char *)renderer->buffer->ptr +
112
+ cmark_chunk_set_cstr(renderer->mem, &remainder, (char *)renderer->buffer->ptr +
112
113
  renderer->last_breakable + 1);
113
114
  // truncate at last_breakable
114
115
  cmark_strbuf_truncate(renderer->buffer, renderer->last_breakable);
@@ -118,7 +119,7 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap,
118
119
  renderer->prefix->size);
119
120
  cmark_strbuf_put(renderer->buffer, remainder.data, remainder.len);
120
121
  renderer->column = renderer->prefix->size + remainder.len;
121
- cmark_chunk_free(&remainder);
122
+ cmark_chunk_free(renderer->mem, &remainder);
122
123
  renderer->last_breakable = 0;
123
124
  renderer->begin_line = false;
124
125
  renderer->begin_content = false;
@@ -146,14 +147,15 @@ char *cmark_render(cmark_node *root, int options, int width,
146
147
  int (*render_node)(cmark_renderer *renderer,
147
148
  cmark_node *node,
148
149
  cmark_event_type ev_type, int options)) {
149
- cmark_strbuf pref = GH_BUF_INIT;
150
- cmark_strbuf buf = GH_BUF_INIT;
150
+ cmark_mem *mem = cmark_node_mem(root);
151
+ cmark_strbuf pref = CMARK_BUF_INIT(mem);
152
+ cmark_strbuf buf = CMARK_BUF_INIT(mem);
151
153
  cmark_node *cur;
152
154
  cmark_event_type ev_type;
153
155
  char *result;
154
156
  cmark_iter *iter = cmark_iter_new(root);
155
157
 
156
- cmark_renderer renderer = {&buf, &pref, 0, width, 0,
158
+ cmark_renderer renderer = {mem, &buf, &pref, 0, width, 0,
157
159
  0, true, true, false, false,
158
160
  outc, S_cr, S_blankline, S_out};
159
161
 
@@ -8,10 +8,12 @@ extern "C" {
8
8
  #include <stdlib.h>
9
9
  #include "buffer.h"
10
10
  #include "chunk.h"
11
+ #include "memory.h"
11
12
 
12
13
  typedef enum { LITERAL, NORMAL, TITLE, URL } cmark_escaping;
13
14
 
14
15
  struct cmark_renderer {
16
+ cmark_mem *mem;
15
17
  cmark_strbuf *buffer;
16
18
  cmark_strbuf *prefix;
17
19
  int column;
@@ -20,7 +22,7 @@ struct cmark_renderer {
20
22
  bufsize_t last_breakable;
21
23
  bool begin_line;
22
24
  bool begin_content;
23
- bool no_wrap;
25
+ bool no_linebreaks;
24
26
  bool in_tight_list_item;
25
27
  void (*outc)(struct cmark_renderer *, cmark_escaping, int32_t, unsigned char);
26
28
  void (*cr)(struct cmark_renderer *);
@@ -8258,37 +8258,45 @@ bufsize_t _scan_html_tag(const unsigned char *p) {
8258
8258
  unsigned char yych;
8259
8259
  static const unsigned char yybm[] = {
8260
8260
  /* table 1 .. 8: 0 */
8261
- 0, 230, 230, 230, 230, 230, 230, 230, 230, 199, 199, 199, 199, 199, 230,
8261
+ 0, 230, 230, 230, 230, 230, 230, 230, 230, 199, 199, 199, 199, 199,
8262
8262
  230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
8263
- 230, 230, 230, 199, 230, 70, 230, 230, 230, 230, 134, 230, 230, 230,
8264
- 230, 230, 254, 246, 230, 254, 254, 254, 254, 254, 254, 254, 254, 254,
8265
- 254, 246, 230, 198, 198, 196, 230, 230, 254, 254, 254, 254, 254, 254,
8263
+ 230, 230, 230, 230, 199, 230, 70, 230, 230, 230, 230, 134, 230, 230,
8264
+ 230, 230, 230, 254, 246, 230, 254, 254, 254, 254, 254, 254, 254, 254,
8265
+ 254, 254, 246, 230, 198, 198, 196, 230, 230, 254, 254, 254, 254, 254,
8266
8266
  254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
8267
- 254, 254, 254, 254, 254, 254, 230, 230, 226, 230, 246, 198, 254, 254,
8267
+ 254, 254, 254, 254, 254, 254, 254, 230, 230, 226, 230, 246, 198, 254,
8268
8268
  254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
8269
- 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 230, 230, 230, 230,
8270
- 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8271
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8272
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8273
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8274
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8275
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8269
+ 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 230, 230, 230,
8270
+ 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8271
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8272
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8273
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8274
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8275
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8276
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8277
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8278
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8279
+ 0, 0, 0, 0,
8276
8280
  /* table 9 .. 11: 256 */
8277
- 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
8281
+ 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
8278
8282
  160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
8279
8283
  160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
8280
- 160, 160, 32, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
8281
- 160, 160, 160, 160, 160, 160, 128, 160, 224, 224, 224, 224, 224, 224,
8284
+ 160, 160, 160, 32, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
8285
+ 160, 160, 160, 160, 160, 160, 160, 128, 160, 224, 224, 224, 224, 224,
8282
8286
  224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
8283
- 224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 160, 160, 160, 160,
8287
+ 224, 224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 160, 160, 160,
8284
8288
  160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
8285
8289
  160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
8286
- 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8287
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8288
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8289
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8290
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8291
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8290
+ 160, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8291
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8292
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8293
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8294
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8295
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8296
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8297
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8298
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8299
+ 0, 0, 0, 0,
8292
8300
  };
8293
8301
  yych = *(marker = p);
8294
8302
  if (yych <= '`') {
@@ -149,7 +149,7 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type,
149
149
 
150
150
  char *cmark_render_xml(cmark_node *root, int options) {
151
151
  char *result;
152
- cmark_strbuf xml = GH_BUF_INIT;
152
+ cmark_strbuf xml = CMARK_BUF_INIT(cmark_node_mem(root));
153
153
  cmark_event_type ev_type;
154
154
  cmark_node *cur;
155
155
  struct render_state state = {&xml, 0};
@@ -13,12 +13,12 @@ add_test(NAME api_test COMMAND api_test)
13
13
 
14
14
  if (WIN32)
15
15
  file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/src WIN_DLL_DIR)
16
- set_tests_properties(api_test PROPERTIES
17
- ENVIRONMENT "PATH=${WIN_DLL_DIR};$ENV{PATH}"
18
- )
19
- set(ROUNDTRIP,"${CMAKE_CURRENT_SOURCE_DIR}/roundtrip.bat")
16
+ set(NEWPATH "${WIN_DLL_DIR};$ENV{PATH}")
17
+ string(REPLACE ";" "\\;" NEWPATH "${NEWPATH}")
18
+ set_tests_properties(api_test PROPERTIES ENVIRONMENT "PATH=${NEWPATH}")
19
+ set(ROUNDTRIP "${CMAKE_CURRENT_SOURCE_DIR}/roundtrip.bat")
20
20
  else(WIN32)
21
- set(ROUNDTRIP,"${CMAKE_CURRENT_SOURCE_DIR}/roundtrip.sh")
21
+ set(ROUNDTRIP "${CMAKE_CURRENT_SOURCE_DIR}/roundtrip.sh")
22
22
  endif(WIN32)
23
23
 
24
24
  IF (PYTHONINTERP_FOUND)
@@ -48,9 +48,9 @@ IF (PYTHONINTERP_FOUND)
48
48
 
49
49
  add_test(roundtriptest_executable
50
50
  ${PYTHON_EXECUTABLE}
51
- "${CMAKE_CURRENT_SOURCE_DIR}/spec_tests.py" "--no-normalize"
52
- "--spec" "${CMAKE_CURRENT_SOURCE_DIR}/spec.txt" "--program"
53
- "${ROUNDTRIP} ${CMAKE_CURRENT_BINARY_DIR}/../src/cmark"
51
+ "${CMAKE_CURRENT_SOURCE_DIR}/roundtrip_tests.py"
52
+ "--spec" "${CMAKE_CURRENT_SOURCE_DIR}/spec.txt"
53
+ "--library-dir" "${CMAKE_CURRENT_BINARY_DIR}/../src"
54
54
  )
55
55
 
56
56
  add_test(regressiontest_executable
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
 
4
- from ctypes import CDLL, c_char_p, c_long
4
+ from ctypes import CDLL, c_char_p, c_size_t, c_int, c_void_p
5
5
  from subprocess import *
6
6
  import platform
7
7
  import os
@@ -11,30 +11,50 @@ def pipe_through_prog(prog, text):
11
11
  [result, err] = p1.communicate(input=text.encode('utf-8'))
12
12
  return [p1.returncode, result.decode('utf-8'), err]
13
13
 
14
- def use_library(lib, text):
14
+ def to_html(lib, text):
15
+ markdown = lib.cmark_markdown_to_html
16
+ markdown.restype = c_char_p
17
+ markdown.argtypes = [c_char_p, c_size_t, c_int]
15
18
  textbytes = text.encode('utf-8')
16
19
  textlen = len(textbytes)
17
- return [0, lib(textbytes, textlen, 0).decode('utf-8'), '']
20
+ result = markdown(textbytes, textlen, 0).decode('utf-8')
21
+ return [0, result, '']
22
+
23
+ def to_commonmark(lib, text):
24
+ textbytes = text.encode('utf-8')
25
+ textlen = len(textbytes)
26
+ parse_document = lib.cmark_parse_document
27
+ parse_document.restype = c_void_p
28
+ parse_document.argtypes = [c_char_p, c_size_t, c_int]
29
+ render_commonmark = lib.cmark_render_commonmark
30
+ render_commonmark.restype = c_char_p
31
+ render_commonmark.argtypes = [c_void_p, c_int, c_int]
32
+ node = parse_document(textbytes, textlen, 0)
33
+ result = render_commonmark(node, 0, 0).decode('utf-8')
34
+ return [0, result, '']
18
35
 
19
36
  class CMark:
20
37
  def __init__(self, prog=None, library_dir=None):
21
38
  self.prog = prog
22
39
  if prog:
23
40
  self.to_html = lambda x: pipe_through_prog(prog, x)
41
+ self.to_commonmark = lambda x: pipe_through_prog(prog + ' -t commonmark', x)
24
42
  else:
25
43
  sysname = platform.system()
26
44
  if sysname == 'Darwin':
27
- libname = "libcmark.dylib"
45
+ libnames = [ "libcmark.dylib" ]
28
46
  elif sysname == 'Windows':
29
- libname = "cmark.dll"
47
+ libnames = [ "cmark.dll", "libcmark.dll" ]
30
48
  else:
31
- libname = "libcmark.so"
32
- if library_dir:
33
- libpath = os.path.join(library_dir, libname)
34
- else:
35
- libpath = os.path.join("build", "src", libname)
49
+ libnames = [ "libcmark.so" ]
50
+ if not library_dir:
51
+ library_dir = os.path.join("build", "src")
52
+ for libname in libnames:
53
+ candidate = os.path.join(library_dir, libname)
54
+ if os.path.isfile(candidate):
55
+ libpath = candidate
56
+ break
36
57
  cmark = CDLL(libpath)
37
- markdown = cmark.cmark_markdown_to_html
38
- markdown.restype = c_char_p
39
- markdown.argtypes = [c_char_p, c_long]
40
- self.to_html = lambda x: use_library(markdown, x)
58
+ self.to_html = lambda x: to_html(cmark, x)
59
+ self.to_commonmark = lambda x: to_commonmark(cmark, x)
60
+
@@ -0,0 +1,47 @@
1
+ import re
2
+ import sys
3
+ from spec_tests import get_tests, do_test
4
+ from cmark import CMark
5
+ import argparse
6
+
7
+ if __name__ == "__main__":
8
+ parser = argparse.ArgumentParser(description='Run cmark roundtrip tests.')
9
+ parser.add_argument('-p', '--program', dest='program', nargs='?', default=None,
10
+ help='program to test')
11
+ parser.add_argument('-s', '--spec', dest='spec', nargs='?', default='spec.txt',
12
+ help='path to spec')
13
+ parser.add_argument('-P', '--pattern', dest='pattern', nargs='?',
14
+ default=None, help='limit to sections matching regex pattern')
15
+ parser.add_argument('--library-dir', dest='library_dir', nargs='?',
16
+ default=None, help='directory containing dynamic library')
17
+ parser.add_argument('--no-normalize', dest='normalize',
18
+ action='store_const', const=False, default=True,
19
+ help='do not normalize HTML')
20
+ parser.add_argument('-n', '--number', type=int, default=None,
21
+ help='only consider the test with the given number')
22
+ args = parser.parse_args(sys.argv[1:])
23
+
24
+ spec = sys.argv[1]
25
+
26
+ def converter(md):
27
+ cmark = CMark(prog=args.program, library_dir=args.library_dir)
28
+ [ec, result, err] = cmark.to_commonmark(md)
29
+ if ec == 0:
30
+ [ec, html, err] = cmark.to_html(result)
31
+ if ec == 0:
32
+ # In the commonmark writer we insert dummy HTML
33
+ # comments between lists, and between lists and code
34
+ # blocks. Strip these out, since the spec uses
35
+ # two blank lines instead:
36
+ return [ec, re.sub('<!-- end list -->\n', '', html), '']
37
+ else:
38
+ return [ec, html, err]
39
+ else:
40
+ return [ec, result, err]
41
+
42
+ tests = get_tests(args.spec)
43
+ result_counts = {'pass': 0, 'fail': 0, 'error': 0, 'skip': 0}
44
+ for test in tests:
45
+ do_test(converter, test, args.normalize, result_counts)
46
+
47
+ exit(result_counts['fail'] + result_counts['error'])