qiita_marker 0.23.2.3 → 0.23.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +57 -56
  3. data/bin/qiita_marker +2 -7
  4. data/ext/qiita_marker/cmark-gfm_version.h +2 -2
  5. data/ext/qiita_marker/qiita_marker.c +30 -44
  6. data/ext/qiita_marker/scanners.c +2438 -2450
  7. data/ext/qiita_marker/table.c +28 -2
  8. data/lib/qiita_marker/config.rb +3 -3
  9. data/lib/qiita_marker/node/inspect.rb +8 -18
  10. data/lib/qiita_marker/node.rb +6 -6
  11. data/lib/qiita_marker/renderer/html_renderer.rb +38 -38
  12. data/lib/qiita_marker/renderer.rb +5 -5
  13. data/lib/qiita_marker/version.rb +1 -1
  14. data/lib/qiita_marker.rb +9 -11
  15. data/qiita_marker.gemspec +27 -29
  16. metadata +3 -63
  17. data/test/benchmark.rb +0 -32
  18. data/test/fixtures/curly.md +0 -1
  19. data/test/fixtures/dingus.md +0 -10
  20. data/test/fixtures/strong.md +0 -1
  21. data/test/fixtures/table.md +0 -10
  22. data/test/test_attributes.rb +0 -24
  23. data/test/test_basics.rb +0 -35
  24. data/test/test_commands.rb +0 -72
  25. data/test/test_commonmark.rb +0 -36
  26. data/test/test_doc.rb +0 -130
  27. data/test/test_encoding.rb +0 -23
  28. data/test/test_extensions.rb +0 -116
  29. data/test/test_footnotes.rb +0 -60
  30. data/test/test_gc.rb +0 -47
  31. data/test/test_helper.rb +0 -71
  32. data/test/test_linebreaks.rb +0 -15
  33. data/test/test_maliciousness.rb +0 -262
  34. data/test/test_node.rb +0 -89
  35. data/test/test_options.rb +0 -37
  36. data/test/test_pathological_inputs.rb +0 -94
  37. data/test/test_plaintext.rb +0 -46
  38. data/test/test_qfm_autolink_class_name.rb +0 -62
  39. data/test/test_qfm_code_data_metadata.rb +0 -41
  40. data/test/test_qfm_custom_block.rb +0 -39
  41. data/test/test_qfm_mention_no_emphasis.rb +0 -60
  42. data/test/test_renderer.rb +0 -47
  43. data/test/test_smartpunct.rb +0 -27
  44. data/test/test_spec.rb +0 -30
  45. data/test/test_tasklists.rb +0 -43
  46. data/test/test_xml.rb +0 -107
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad4193d920fb95f2c24307d15220150746187c0d74a3d470690e318b2d99d0d6
4
- data.tar.gz: b5d1fb774bfafe83550bc0beba25fdc9d8cf67612bb3f4818e3d8e83be58cce8
3
+ metadata.gz: 15bfc4813af77558d6c0b4ffbb931229e00d558d0c417048b636ce7c27ac31a7
4
+ data.tar.gz: af9febe461508838d294f9d2d20dfe896c30c467b82b50b36924040c7287c070
5
5
  SHA512:
6
- metadata.gz: 690f8870c83b4bf02a799dfd6206ef1c893f22acb22c91110b5523dbe0c35c8f5b3f2276926828697f3cc90497ac9a0302fe09c5fd2b33aca21213c586e94c42
7
- data.tar.gz: 674aa47fc8e97954c20a98648307cd0c96dfda31e29f975333c3fdd4d8baf2ad059c759f4db7e7bc3dbe652d2085c224b5baa6359065524d64c5092c4c38f00d
6
+ metadata.gz: 2fc608ddea2a044b4c64b9f32e8dbc44cf838213f6c67e9457f36fa303b7223a20c932a261e3f21fac256ceab34d018b9c6d9757ce86eecf250a3aefa585407b
7
+ data.tar.gz: 66b65a1652e9a0904423490cb8999de85d21928f169f72965ca2b90bc32cfadda46193662ebdae70dea6bcb5819a349256a24911f53c65d168bd9285db107968
data/Rakefile CHANGED
@@ -1,113 +1,114 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'date'
4
- require 'rake/clean'
5
- require 'rake/extensiontask'
6
- require 'digest/md5'
3
+ require "date"
4
+ require "rake/clean"
5
+ require "rake/extensiontask"
6
+ require "digest/md5"
7
7
 
8
- host_os = RbConfig::CONFIG['host_os']
9
- require 'devkit' if host_os == 'mingw32'
8
+ host_os = RbConfig::CONFIG["host_os"]
9
+ require "devkit" if host_os == "mingw32"
10
10
 
11
11
  task default: [:test]
12
12
 
13
13
  # Gem Spec
14
- gem_spec = Gem::Specification.load('qiita_marker.gemspec')
14
+ gem_spec = Gem::Specification.load("qiita_marker.gemspec")
15
15
 
16
16
  # Ruby Extension
17
- Rake::ExtensionTask.new('qiita_marker', gem_spec) do |ext|
18
- ext.lib_dir = File.join('lib', 'qiita_marker')
17
+ Rake::ExtensionTask.new("qiita_marker", gem_spec) do |ext|
18
+ ext.lib_dir = File.join("lib", "qiita_marker")
19
19
  end
20
20
 
21
21
  # Packaging
22
- require 'bundler/gem_tasks'
22
+ require "bundler/gem_tasks"
23
23
 
24
24
  # Testing
25
- require 'rake/testtask'
25
+ require "rake/testtask"
26
26
 
27
- Rake::TestTask.new('test:unit') do |t|
28
- t.libs << 'lib'
29
- t.libs << 'test'
30
- t.pattern = 'test/test_*.rb'
27
+ Rake::TestTask.new("test:unit") do |t|
28
+ t.libs << "lib"
29
+ t.libs << "test"
30
+ t.pattern = "test/test_*.rb"
31
31
  t.verbose = true
32
32
  t.warning = false
33
33
  end
34
34
 
35
- task 'test:unit' => :compile
35
+ desc "Run unit tests"
36
+ task "test:unit" => :compile
36
37
 
37
- desc 'Run unit and conformance tests'
38
- task test: %w[test:unit]
38
+ desc "Run unit and conformance tests"
39
+ task test: ["test:unit"]
39
40
 
40
- require 'rubocop/rake_task'
41
+ require "rubocop/rake_task"
41
42
 
42
43
  RuboCop::RakeTask.new(:rubocop)
43
44
 
44
- desc 'Run benchmarks'
45
+ desc "Run benchmarks"
45
46
  task :benchmark do
46
- if ENV['FETCH_PROGIT']
47
- `rm -rf test/progit`
48
- `git clone https://github.com/progit/progit.git test/progit`
49
- langs = %w[ar az be ca cs de en eo es es-ni fa fi fr hi hu id it ja ko mk nl no-nb pl pt-br ro ru sr th tr uk vi zh zh-tw]
47
+ if ENV["FETCH_PROGIT"]
48
+ %x(rm -rf test/progit)
49
+ %x(git clone https://github.com/progit/progit.git test/progit)
50
+ langs = ["ar", "az", "be", "ca", "cs", "de", "en", "eo", "es", "es-ni", "fa", "fi", "fr", "hi", "hu", "id", "it", "ja", "ko", "mk", "nl", "no-nb", "pl", "pt-br", "ro", "ru", "sr", "th", "tr", "uk", "vi", "zh", "zh-tw"]
50
51
  langs.each do |lang|
51
- `cat test/progit/#{lang}/*/*.markdown >> test/benchinput.md`
52
+ %x(cat test/progit/#{lang}/*/*.markdown >> test/benchinput.md)
52
53
  end
53
54
  end
54
- $LOAD_PATH.unshift 'lib'
55
- load 'test/benchmark.rb'
55
+ $LOAD_PATH.unshift("lib")
56
+ load "test/benchmark.rb"
56
57
  end
57
58
 
58
- desc 'Match C style of cmark'
59
+ desc "Match C style of cmark"
59
60
  task :format do
60
- sh 'clang-format -style llvm -i ext/qiita_marker/*.c ext/qiita_marker/*.h'
61
+ sh "clang-format -style llvm -i ext/qiita_marker/*.c ext/qiita_marker/*.h"
61
62
  end
62
63
 
63
64
  # Documentation
64
- require 'rdoc/task'
65
+ require "rdoc/task"
65
66
 
66
- desc 'Generate API documentation'
67
+ desc "Generate API documentation"
67
68
  RDoc::Task.new do |rd|
68
- rd.rdoc_dir = 'docs'
69
- rd.main = 'README.md'
70
- rd.rdoc_files.include 'README.md', 'lib/**/*.rb', 'ext/qiita_marker/qiita_marker.c'
71
-
72
- rd.options << '--markup tomdoc'
73
- rd.options << '--inline-source'
74
- rd.options << '--line-numbers'
75
- rd.options << '--all'
76
- rd.options << '--fileboxes'
69
+ rd.rdoc_dir = "docs"
70
+ rd.main = "README.md"
71
+ rd.rdoc_files.include("README.md", "lib/**/*.rb", "ext/qiita_marker/qiita_marker.c")
72
+
73
+ rd.options << "--markup tomdoc"
74
+ rd.options << "--inline-source"
75
+ rd.options << "--line-numbers"
76
+ rd.options << "--all"
77
+ rd.options << "--fileboxes"
77
78
  end
78
79
 
79
- desc 'Generate the documentation and run a web server'
80
+ desc "Generate the documentation and run a web server"
80
81
  task serve: [:rdoc] do
81
- require 'webrick'
82
+ require "webrick"
82
83
 
83
- puts 'Navigate to http://localhost:3000 to see the docs'
84
+ puts "Navigate to http://localhost:3000 to see the docs"
84
85
 
85
- server = WEBrick::HTTPServer.new Port: 3000
86
- server.mount '/', WEBrick::HTTPServlet::FileHandler, 'docs'
87
- trap('INT') { server.stop }
86
+ server = WEBrick::HTTPServer.new(Port: 3000)
87
+ server.mount("/", WEBrick::HTTPServlet::FileHandler, "docs")
88
+ trap("INT") { server.stop }
88
89
  server.start
89
90
  end
90
91
 
91
- desc 'Generate and publish docs to gh-pages'
92
+ desc "Generate and publish docs to gh-pages"
92
93
  task publish: [:rdoc] do
93
- require 'tmpdir'
94
- require 'shellwords'
94
+ require "tmpdir"
95
+ require "shellwords"
95
96
 
96
97
  Dir.mktmpdir do |tmp|
97
98
  system "mv docs/* #{tmp}"
98
- system 'git checkout origin/gh-pages'
99
- system 'rm -rf *'
99
+ system "git checkout origin/gh-pages"
100
+ system "rm -rf *"
100
101
  system "mv #{tmp}/* ."
101
102
  message = Shellwords.escape("Site updated at #{Time.now.utc}")
102
- system 'git add .'
103
+ system "git add ."
103
104
  system "git commit -am #{message}"
104
- system 'git push origin gh-pages --force'
105
- system 'git checkout master'
106
- system 'echo yolo'
105
+ system "git push origin gh-pages --force"
106
+ system "git checkout master"
107
+ system "echo yolo"
107
108
  end
108
109
  end
109
110
 
110
111
  # Custom tasks
111
- Dir.glob('tasks/*.rake').each do |f|
112
+ Dir.glob("tasks/*.rake").each do |f|
112
113
  load f
113
114
  end
data/bin/qiita_marker CHANGED
@@ -2,7 +2,6 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require 'optparse'
5
- require 'ostruct'
6
5
 
7
6
  $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
8
7
  require 'qiita_marker'
@@ -11,17 +10,13 @@ root = File.expand_path('..', __dir__)
11
10
  $LOAD_PATH.unshift File.expand_path('lib', root)
12
11
 
13
12
  def parse_options
14
- options = OpenStruct.new
13
+ options = Struct.new(:active_extensions, :active_parse_options, :active_render_options, :output_format, :renderer)
14
+ .new([], [:DEFAULT], [:DEFAULT], :html)
15
15
  extensions = QiitaMarker.extensions
16
16
  parse_options = QiitaMarker::Config::OPTS.fetch(:parse)
17
17
  render_options = QiitaMarker::Config::OPTS.fetch(:render)
18
18
  format_options = QiitaMarker::Config::OPTS.fetch(:format)
19
19
 
20
- options.active_extensions = []
21
- options.active_parse_options = [:DEFAULT]
22
- options.active_render_options = [:DEFAULT]
23
- options.output_format = :html
24
-
25
20
  option_parser = OptionParser.new do |opts|
26
21
  opts.banner = 'Usage: qiita_marker [--html-renderer] [--extension=EXTENSION]'
27
22
  opts.separator ' [--to=FORMAT]'
@@ -1,7 +1,7 @@
1
1
  #ifndef CMARK_GFM_VERSION_H
2
2
  #define CMARK_GFM_VERSION_H
3
3
 
4
- #define CMARK_GFM_VERSION ((0 << 24) | (29 << 16) | (0 << 8) | 2)
5
- #define CMARK_GFM_VERSION_STRING "0.29.0.gfm.2"
4
+ #define CMARK_GFM_VERSION ((0 << 24) | (29 << 16) | (0 << 8) | 4)
5
+ #define CMARK_GFM_VERSION_STRING "0.29.0.gfm.4"
6
6
 
7
7
  #endif
@@ -115,25 +115,23 @@ static void rb_parent_removed(VALUE val) {
115
115
  RDATA(val)->dfree = rb_free_c_struct;
116
116
  }
117
117
 
118
- static cmark_parser *prepare_parser(VALUE rb_options, VALUE rb_extensions, cmark_mem *mem) {
118
+ static cmark_parser *prepare_parser(VALUE rb_options, VALUE rb_extensions) {
119
119
  int options;
120
- int extensions_len;
121
120
  VALUE rb_ext_name;
122
121
  int i;
123
122
 
124
- Check_Type(rb_options, T_FIXNUM);
123
+ FIXNUM_P(rb_options);
124
+ options = FIX2INT(rb_options);
125
+
125
126
  Check_Type(rb_extensions, T_ARRAY);
126
127
 
127
- options = FIX2INT(rb_options);
128
- extensions_len = RARRAY_LEN(rb_extensions);
128
+ cmark_parser *parser = cmark_parser_new(options);
129
129
 
130
- cmark_parser *parser = cmark_parser_new_with_mem(options, mem);
131
- for (i = 0; i < extensions_len; ++i) {
132
- rb_ext_name = RARRAY_PTR(rb_extensions)[i];
130
+ for (i = 0; i < RARRAY_LEN(rb_extensions); ++i) {
131
+ rb_ext_name = rb_ary_entry(rb_extensions, i);
133
132
 
134
133
  if (!SYMBOL_P(rb_ext_name)) {
135
134
  cmark_parser_free(parser);
136
- cmark_arena_reset();
137
135
  rb_raise(rb_eTypeError, "extension names should be Symbols; got a %"PRIsVALUE"", rb_obj_class(rb_ext_name));
138
136
  }
139
137
 
@@ -142,7 +140,6 @@ static cmark_parser *prepare_parser(VALUE rb_options, VALUE rb_extensions, cmark
142
140
 
143
141
  if (!syntax_extension) {
144
142
  cmark_parser_free(parser);
145
- cmark_arena_reset();
146
143
  rb_raise(rb_eArgError, "extension %s not found", rb_id2name(SYM2ID(rb_ext_name)));
147
144
  }
148
145
 
@@ -157,33 +154,28 @@ static cmark_parser *prepare_parser(VALUE rb_options, VALUE rb_extensions, cmark
157
154
  *
158
155
  */
159
156
  static VALUE rb_markdown_to_html(VALUE self, VALUE rb_text, VALUE rb_options, VALUE rb_extensions) {
160
- char *str, *html;
161
- int len;
157
+ char *html;
162
158
  cmark_parser *parser;
163
159
  cmark_node *doc;
164
- Check_Type(rb_text, T_STRING);
165
- Check_Type(rb_options, T_FIXNUM);
166
160
 
167
- parser = prepare_parser(rb_options, rb_extensions, cmark_get_arena_mem_allocator());
161
+ Check_Type(rb_text, T_STRING);
168
162
 
169
- str = (char *)RSTRING_PTR(rb_text);
170
- len = RSTRING_LEN(rb_text);
163
+ parser = prepare_parser(rb_options, rb_extensions);
171
164
 
172
- cmark_parser_feed(parser, str, len);
165
+ cmark_parser_feed(parser, StringValuePtr(rb_text), RSTRING_LEN(rb_text));
173
166
  doc = cmark_parser_finish(parser);
167
+
174
168
  if (doc == NULL) {
175
- cmark_arena_reset();
169
+ cmark_parser_free(parser);
176
170
  rb_raise(rb_eNodeError, "error parsing document");
177
171
  }
178
172
 
179
- cmark_mem *default_mem = cmark_get_default_mem_allocator();
180
- html = cmark_render_html_with_mem(doc, FIX2INT(rb_options), parser->syntax_extensions, default_mem);
181
- cmark_arena_reset();
173
+ html = cmark_render_html(doc, parser->options, parser->syntax_extensions);
182
174
 
183
- VALUE ruby_html = rb_str_new2(html);
184
- default_mem->free(html);
175
+ cmark_parser_free(parser);
176
+ cmark_node_free(doc);
185
177
 
186
- return ruby_html;
178
+ return rb_utf8_str_new_cstr(html);
187
179
  }
188
180
 
189
181
  /*
@@ -191,33 +183,28 @@ static VALUE rb_markdown_to_html(VALUE self, VALUE rb_text, VALUE rb_options, VA
191
183
  *
192
184
  */
193
185
  static VALUE rb_markdown_to_xml(VALUE self, VALUE rb_text, VALUE rb_options, VALUE rb_extensions) {
194
- char *str, *xml;
195
- int len;
186
+ char *xml;
196
187
  cmark_parser *parser;
197
188
  cmark_node *doc;
198
- Check_Type(rb_text, T_STRING);
199
- Check_Type(rb_options, T_FIXNUM);
200
189
 
201
- parser = prepare_parser(rb_options, rb_extensions, cmark_get_arena_mem_allocator());
190
+ Check_Type(rb_text, T_STRING);
202
191
 
203
- str = (char *)RSTRING_PTR(rb_text);
204
- len = RSTRING_LEN(rb_text);
192
+ parser = prepare_parser(rb_options, rb_extensions);
205
193
 
206
- cmark_parser_feed(parser, str, len);
194
+ cmark_parser_feed(parser, StringValuePtr(rb_text), RSTRING_LEN(rb_text));
207
195
  doc = cmark_parser_finish(parser);
196
+
208
197
  if (doc == NULL) {
209
- cmark_arena_reset();
198
+ cmark_parser_free(parser);
210
199
  rb_raise(rb_eNodeError, "error parsing document");
211
200
  }
212
201
 
213
- cmark_mem *default_mem = cmark_get_default_mem_allocator();
214
- xml = cmark_render_xml_with_mem(doc, FIX2INT(rb_options), default_mem);
215
- cmark_arena_reset();
202
+ xml = cmark_render_xml(doc, parser->options);
216
203
 
217
- VALUE ruby_xml = rb_str_new2(xml);
218
- default_mem->free(xml);
204
+ cmark_parser_free(parser);
205
+ cmark_node_free(doc);
219
206
 
220
- return ruby_xml;
207
+ return rb_utf8_str_new_cstr(xml);
221
208
  }
222
209
 
223
210
  /*
@@ -308,18 +295,17 @@ static VALUE rb_node_new(VALUE self, VALUE type) {
308
295
  static VALUE rb_parse_document(VALUE self, VALUE rb_text, VALUE rb_len,
309
296
  VALUE rb_options, VALUE rb_extensions) {
310
297
  char *text;
311
- int len, options;
298
+ int len;
312
299
  cmark_parser *parser;
313
300
  cmark_node *doc;
314
301
  Check_Type(rb_text, T_STRING);
315
302
  Check_Type(rb_len, T_FIXNUM);
316
303
  Check_Type(rb_options, T_FIXNUM);
317
304
 
318
- parser = prepare_parser(rb_options, rb_extensions, cmark_get_default_mem_allocator());
305
+ parser = prepare_parser(rb_options, rb_extensions);
319
306
 
320
307
  text = (char *)RSTRING_PTR(rb_text);
321
308
  len = FIX2INT(rb_len);
322
- options = FIX2INT(rb_options);
323
309
 
324
310
  cmark_parser_feed(parser, text, len);
325
311
  doc = cmark_parser_finish(parser);
@@ -614,7 +600,6 @@ static VALUE rb_render_html(VALUE self, VALUE rb_options, VALUE rb_extensions) {
614
600
  */
615
601
  static VALUE rb_render_xml(VALUE self, VALUE rb_options) {
616
602
  int options;
617
- int i;
618
603
  cmark_node *node;
619
604
  Check_Type(rb_options, T_FIXNUM);
620
605
 
@@ -1270,6 +1255,7 @@ __attribute__((visibility("default"))) void Init_qiita_marker() {
1270
1255
  rb_define_singleton_method(module, "extensions", rb_extensions, 0);
1271
1256
  rb_eNodeError = rb_define_class_under(module, "NodeError", rb_eStandardError);
1272
1257
  rb_cNode = rb_define_class_under(module, "Node", rb_cObject);
1258
+ rb_undef_alloc_func(rb_cNode);
1273
1259
  rb_define_singleton_method(rb_cNode, "markdown_to_html", rb_markdown_to_html,
1274
1260
  3);
1275
1261
  rb_define_singleton_method(rb_cNode, "markdown_to_xml", rb_markdown_to_xml,