redcarpet 3.6.0 → 3.6.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ff95ccb3cfac7e8785f4e93f3984ee2c86b04008628555b9ab64cbd50886860d
4
- data.tar.gz: 7daf631354b3e0edb0104387ead39674bdce554dfec90041b0f2c57c4d97621f
3
+ metadata.gz: 462c33d63034f594e30924779a9c9f7af0259236599f54146374b5d428d2e720
4
+ data.tar.gz: 8c7177817c2ef112e46b51f60f578c4b67d7e541c2e6967b08657fafba30021e
5
5
  SHA512:
6
- metadata.gz: b2829bb96f83da4db1e81ab8ff8e22678fc73b2c0a073a84d789d04cb88b84e39da2a2ad4de1ac6229b370368a69828e635af5020a094b73773477fcad118283
7
- data.tar.gz: 4ee41dbbb347d5125478d1bca1fc9820bf825fc210bd27b1d2183934a23e7b0acbf5a72bc04445787c4129c73fd3d8d9bb612db1758c14d21b6df21f20752f20
6
+ metadata.gz: 5595f573f3c3b903fabd07d126cf2ceeb80685538b081978eec0ae9a1d24a33d8bed2c21c16289d1b5e7394194536f082d7f6b5c68b98392d22f810df0d9dea0
7
+ data.tar.gz: 56b799de0bd8df8b1c3bc462757dd0dc30340f73239822d4888c704fb43aacc12fc9a42f46adbdb2161aff60da0781487a61f9935b38d9dc43e21583a59a94ad
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## Version 3.6.1
4
+
5
+ * Migrate Markdown objects to the `TypedData` API.
6
+
7
+ Refs #785.
8
+
9
+ *Jean Boussier*
10
+
3
11
  ## Version 3.6.0
4
12
 
5
13
  * Avoid warnings running on Ruby 3.2+.
data/README.markdown CHANGED
@@ -1,7 +1,7 @@
1
1
  Redcarpet is written with sugar, spice and everything nice
2
2
  ============================================================
3
3
 
4
- [![Build Status](https://travis-ci.org/vmg/redcarpet.svg?branch=master)](https://travis-ci.org/vmg/redcarpet)
4
+ [![Build status](https://github.com/vmg/redcarpet/actions/workflows/test.yml/badge.svg)](https://github.com/vmg/redcarpet/actions/workflows/test.yml)
5
5
  [![Help Contribute to Open Source](https://www.codetriage.com/vmg/redcarpet/badges/users.svg)](https://www.codetriage.com/vmg/redcarpet)
6
6
  [![Gem Version](https://badge.fury.io/rb/redcarpet.svg)](https://badge.fury.io/rb/redcarpet)
7
7
 
@@ -341,8 +341,8 @@ Redcarpet::Render::SmartyPants.render("<p>Oh SmartyPants, you're so crazy...</p>
341
341
  ~~~~
342
342
 
343
343
  SmartyPants works on top of already-rendered HTML, and will ignore replacements
344
- inside the content of HTML tags and inside specific HTML blocks such as
345
- `<code>` or `<pre>`.
344
+ inside the content of HTML tags and inside specific HTML blocks (`pre`, `code`,
345
+ `var`, `samp`, `kbd`, `math`, `script`, `style`).
346
346
 
347
347
  What? You really want to mix Markdown renderers?
348
348
  ------------------------------------------------
@@ -85,6 +85,17 @@ rb_redcarpet_md__free(void *markdown)
85
85
  sd_markdown_free((struct sd_markdown *)markdown);
86
86
  }
87
87
 
88
+ static const rb_data_type_t rb_redcarpet_md__type = {
89
+ "Redcarpet/md",
90
+ {
91
+ NULL, // Nothing to mark
92
+ rb_redcarpet_md__free,
93
+ },
94
+ 0,
95
+ 0,
96
+ RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
97
+ };
98
+
88
99
  static VALUE rb_redcarpet_md__new(int argc, VALUE *argv, VALUE klass)
89
100
  {
90
101
  VALUE rb_markdown, rb_rndr, hash, rndr_options;
@@ -111,7 +122,7 @@ static VALUE rb_redcarpet_md__new(int argc, VALUE *argv, VALUE klass)
111
122
  if (rb_obj_is_kind_of(rb_rndr, rb_cRenderHTML_TOC))
112
123
  extensions |= MKDEXT_FENCED_CODE;
113
124
 
114
- Data_Get_Struct(rb_rndr, struct rb_redcarpet_rndr, rndr);
125
+ rndr = rb_redcarpet_rndr_unwrap(rb_rndr);
115
126
 
116
127
  /* Merge the current options in the @options hash */
117
128
  if (hash != Qnil) {
@@ -123,7 +134,7 @@ static VALUE rb_redcarpet_md__new(int argc, VALUE *argv, VALUE klass)
123
134
  if (!markdown)
124
135
  rb_raise(rb_eRuntimeError, "Failed to create new Renderer class");
125
136
 
126
- rb_markdown = Data_Wrap_Struct(klass, NULL, rb_redcarpet_md__free, markdown);
137
+ rb_markdown = TypedData_Wrap_Struct(klass, &rb_redcarpet_md__type, markdown);
127
138
  rb_iv_set(rb_markdown, "@renderer", rb_rndr);
128
139
 
129
140
  return rb_markdown;
@@ -138,15 +149,14 @@ static VALUE rb_redcarpet_md_render(VALUE self, VALUE text)
138
149
  Check_Type(text, T_STRING);
139
150
 
140
151
  rb_rndr = rb_iv_get(self, "@renderer");
141
- Data_Get_Struct(self, struct sd_markdown, markdown);
152
+ TypedData_Get_Struct(self, struct sd_markdown, &rb_redcarpet_md__type, markdown);
142
153
 
143
154
  if (rb_respond_to(rb_rndr, rb_intern("preprocess")))
144
155
  text = rb_funcall(rb_rndr, rb_intern("preprocess"), 1, text);
145
156
  if (NIL_P(text))
146
157
  return Qnil;
147
158
 
148
- struct rb_redcarpet_rndr *renderer;
149
- Data_Get_Struct(rb_rndr, struct rb_redcarpet_rndr, renderer);
159
+ struct rb_redcarpet_rndr *renderer = rb_redcarpet_rndr_unwrap(rb_rndr);
150
160
  renderer->options.active_enc = rb_enc_get(text);
151
161
 
152
162
  /* initialize buffers */
@@ -299,17 +299,6 @@ cb_link_attribute(VALUE key, VALUE val, VALUE payload)
299
299
  return 0;
300
300
  }
301
301
 
302
- static void
303
- rndr_link_attributes(struct buf *ob, const struct buf *url, void *opaque)
304
- {
305
- struct redcarpet_renderopt *opt = opaque;
306
- struct rb_redcarpet_rndr *rndr;
307
-
308
- Data_Get_Struct(opt->self, struct rb_redcarpet_rndr, rndr);
309
- Check_Type(opt->link_attributes, T_HASH);
310
- rb_hash_foreach(opt->link_attributes, &cb_link_attribute, (VALUE)ob);
311
- }
312
-
313
302
  static struct sd_callbacks rb_redcarpet_callbacks = {
314
303
  rndr_blockcode,
315
304
  rndr_blockquote,
@@ -388,22 +377,47 @@ static const char *rb_redcarpet_method_names[] = {
388
377
 
389
378
  static const size_t rb_redcarpet_method_count = sizeof(rb_redcarpet_method_names)/sizeof(char *);
390
379
 
391
- static void rb_redcarpet_rbase_mark(struct rb_redcarpet_rndr *rndr)
380
+ static void rb_redcarpet_rbase_mark(void *data)
392
381
  {
382
+ struct rb_redcarpet_rndr *rndr = (struct rb_redcarpet_rndr *)data;
393
383
  if (rndr->options.link_attributes)
394
384
  rb_gc_mark(rndr->options.link_attributes);
395
385
  }
396
386
 
397
- static void rndr_deallocate(void *rndr)
387
+ static const rb_data_type_t rb_redcarpet_rndr_type = {
388
+ "Redcarpet/rndr",
389
+ {
390
+ rb_redcarpet_rbase_mark,
391
+ RUBY_TYPED_DEFAULT_FREE,
392
+ },
393
+ 0,
394
+ 0,
395
+ RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
396
+ };
397
+
398
+ struct rb_redcarpet_rndr * rb_redcarpet_rndr_unwrap(VALUE self)
398
399
  {
399
- xfree(rndr);
400
+ struct rb_redcarpet_rndr *rndr;
401
+ TypedData_Get_Struct(self, struct rb_redcarpet_rndr, &rb_redcarpet_rndr_type, rndr);
402
+ return rndr;
400
403
  }
401
404
 
402
405
  static VALUE rb_redcarpet_rbase_alloc(VALUE klass)
403
406
  {
404
407
  struct rb_redcarpet_rndr *rndr = ALLOC(struct rb_redcarpet_rndr);
405
408
  memset(rndr, 0x0, sizeof(struct rb_redcarpet_rndr));
406
- return Data_Wrap_Struct(klass, rb_redcarpet_rbase_mark, rndr_deallocate, rndr);
409
+ return TypedData_Wrap_Struct(klass, &rb_redcarpet_rndr_type, rndr);
410
+ }
411
+
412
+ static void
413
+ rndr_link_attributes(struct buf *ob, const struct buf *url, void *opaque)
414
+ {
415
+ struct redcarpet_renderopt *opt = opaque;
416
+ struct rb_redcarpet_rndr *rndr;
417
+
418
+ TypedData_Get_Struct(opt->self, struct rb_redcarpet_rndr, &rb_redcarpet_rndr_type, rndr);
419
+ Check_Type(opt->link_attributes, T_HASH);
420
+ rb_hash_foreach(opt->link_attributes, &cb_link_attribute, (VALUE)ob);
407
421
  }
408
422
 
409
423
  static void rb_redcarpet__overload(VALUE self, VALUE base_class)
@@ -411,7 +425,7 @@ static void rb_redcarpet__overload(VALUE self, VALUE base_class)
411
425
  struct rb_redcarpet_rndr *rndr;
412
426
  VALUE options_ivar;
413
427
 
414
- Data_Get_Struct(self, struct rb_redcarpet_rndr, rndr);
428
+ TypedData_Get_Struct(self, struct rb_redcarpet_rndr, &rb_redcarpet_rndr_type, rndr);
415
429
  rndr->options.self = self;
416
430
  rndr->options.base_class = base_class;
417
431
 
@@ -448,7 +462,7 @@ static VALUE rb_redcarpet_html_init(int argc, VALUE *argv, VALUE self)
448
462
  unsigned int render_flags = 0;
449
463
  VALUE hash, link_attr = Qnil;
450
464
 
451
- Data_Get_Struct(self, struct rb_redcarpet_rndr, rndr);
465
+ TypedData_Get_Struct(self, struct rb_redcarpet_rndr, &rb_redcarpet_rndr_type, rndr);
452
466
 
453
467
  if (rb_scan_args(argc, argv, "01", &hash) == 1) {
454
468
  Check_Type(hash, T_HASH);
@@ -500,7 +514,7 @@ static VALUE rb_redcarpet_html_init(int argc, VALUE *argv, VALUE self)
500
514
  rb_redcarpet__overload(self, rb_cRenderHTML);
501
515
 
502
516
  if (!NIL_P(link_attr)) {
503
- rndr->options.link_attributes = link_attr;
517
+ RB_OBJ_WRITE(self, &rndr->options.link_attributes, link_attr);
504
518
  rndr->options.html.link_attributes = &rndr_link_attributes;
505
519
  }
506
520
 
@@ -513,7 +527,7 @@ static VALUE rb_redcarpet_htmltoc_init(int argc, VALUE *argv, VALUE self)
513
527
  unsigned int render_flags = HTML_TOC;
514
528
  VALUE hash, nesting_level = Qnil;
515
529
 
516
- Data_Get_Struct(self, struct rb_redcarpet_rndr, rndr);
530
+ TypedData_Get_Struct(self, struct rb_redcarpet_rndr, &rb_redcarpet_rndr_type, rndr);
517
531
 
518
532
  if (rb_scan_args(argc, argv, "01", &hash) == 1) {
519
533
  Check_Type(hash, T_HASH);
@@ -49,4 +49,6 @@ struct rb_redcarpet_rndr {
49
49
  struct redcarpet_renderopt options;
50
50
  };
51
51
 
52
+ struct rb_redcarpet_rndr * rb_redcarpet_rndr_unwrap(VALUE);
53
+
52
54
  #endif
data/lib/redcarpet.rb CHANGED
@@ -2,7 +2,7 @@ require 'redcarpet.so'
2
2
  require 'redcarpet/compat'
3
3
 
4
4
  module Redcarpet
5
- VERSION = '3.6.0'
5
+ VERSION = '3.6.1'
6
6
 
7
7
  class Markdown
8
8
  attr_reader :renderer
data/redcarpet.gemspec CHANGED
@@ -1,10 +1,10 @@
1
1
  # encoding: utf-8
2
2
  Gem::Specification.new do |s|
3
3
  s.name = 'redcarpet'
4
- s.version = '3.6.0'
4
+ s.version = '3.6.1'
5
5
  s.summary = "Markdown that smells nice"
6
6
  s.description = 'A fast, safe and extensible Markdown to (X)HTML parser'
7
- s.date = '2023-01-29'
7
+ s.date = '2025-02-25'
8
8
  s.email = 'vicent@github.com'
9
9
  s.homepage = 'https://github.com/vmg/redcarpet'
10
10
  s.authors = ["Natacha Porté", "Vicent Martí"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redcarpet
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.6.0
4
+ version: 3.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Natacha Porté
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-01-29 00:00:00.000000000 Z
12
+ date: 2025-02-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -114,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
114
  - !ruby/object:Gem::Version
115
115
  version: '0'
116
116
  requirements: []
117
- rubygems_version: 3.3.11
117
+ rubygems_version: 3.5.23
118
118
  signing_key:
119
119
  specification_version: 4
120
120
  summary: Markdown that smells nice