diff --git a/README.md b/README.md index 28942313..07acb052 100644 --- a/README.md +++ b/README.md @@ -158,14 +158,15 @@ Note that there is a distinction in comrak for "parse" options and "render" opti ### Render options -| Name | Description | Default | -| ----------------- | ------------------------------------------------------------------------------------------------------ | ------- | -| `hardbreaks` | [Soft line breaks](http://spec.commonmark.org/0.27/#soft-line-breaks) translate into hard line breaks. | `true` | -| `github_pre_lang` | GitHub-style `
` is used for fenced code blocks with info tags. | `true` |
-| `width` | The wrap column when outputting CommonMark. | `80` |
-| `unsafe` | Allow rendering of raw HTML and potentially dangerous links. | `false` |
-| `escape` | Escape raw HTML instead of clobbering it. | `false` |
-| `sourcepos` | Include source position attribute in HTML and XML output. | `false` |
+| Name | Description | Default |
+| -------------------- | ------------------------------------------------------------------------------------------------------ | ------- |
+| `hardbreaks` | [Soft line breaks](http://spec.commonmark.org/0.27/#soft-line-breaks) translate into hard line breaks. | `true` |
+| `github_pre_lang` | GitHub-style `` is used for fenced code blocks with info tags. | `true` |
+| `width` | The wrap column when outputting CommonMark. | `80` |
+| `unsafe` | Allow rendering of raw HTML and potentially dangerous links. | `false` |
+| `escape` | Escape raw HTML instead of clobbering it. | `false` |
+| `sourcepos` | Include source position attribute in HTML and XML output. | `false` |
+| `escaped_char_spans` | Wrap escaped characters in span tags | `true` |
As well, there are several extensions which you can toggle in the same manner:
diff --git a/ext/commonmarker/src/options.rs b/ext/commonmarker/src/options.rs
index 09044328..8b2d4c11 100644
--- a/ext/commonmarker/src/options.rs
+++ b/ext/commonmarker/src/options.rs
@@ -34,6 +34,7 @@ const RENDER_WIDTH: &str = "width";
const RENDER_UNSAFE: &str = "unsafe";
const RENDER_ESCAPE: &str = "escape";
const RENDER_SOURCEPOS: &str = "sourcepos";
+const RENDER_ESCAPED_CHAR_SPANS: &str = "escaped_char_spans";
fn iterate_render_options(comrak_options: &mut ComrakOptions, options_hash: RHash) {
options_hash
@@ -57,6 +58,9 @@ fn iterate_render_options(comrak_options: &mut ComrakOptions, options_hash: RHas
Ok(Cow::Borrowed(RENDER_SOURCEPOS)) => {
comrak_options.render.sourcepos = TryConvert::try_convert(value)?;
}
+ Ok(Cow::Borrowed(RENDER_ESCAPED_CHAR_SPANS)) => {
+ comrak_options.render.escaped_char_spans = TryConvert::try_convert(value)?;
+ }
_ => {}
}
Ok(ForEach::Continue)
diff --git a/lib/commonmarker/config.rb b/lib/commonmarker/config.rb
index ad38bdf6..b3882e12 100644
--- a/lib/commonmarker/config.rb
+++ b/lib/commonmarker/config.rb
@@ -16,6 +16,7 @@ module Config
unsafe: false,
escape: false,
sourcepos: false,
+ escaped_char_spans: true,
}.freeze,
extension: {
strikethrough: true,
diff --git a/test/escaped_char_spans_test.rb b/test/escaped_char_spans_test.rb
new file mode 100644
index 00000000..fd067b43
--- /dev/null
+++ b/test/escaped_char_spans_test.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+require "test_helper"
+
+class EscapeCharSpansTest < Minitest::Test
+ def test_to_html
+ md = <<~MARKDOWN
+ Hello \\@user
+
+ Hey, @user!
+ MARKDOWN
+ expected = <<~HTML
+ Hello @user
+ Hey, @user!
+ HTML
+
+ assert_equal(expected, Commonmarker.to_html(md, options: { render: { escaped_char_spans: true } }))
+ end
+end
diff --git a/test/node/creation_test.rb b/test/node/creation_test.rb
index 7fc72113..dd898efd 100644
--- a/test/node/creation_test.rb
+++ b/test/node/creation_test.rb
@@ -66,36 +66,3 @@ def test_errors_reported
end
end
end
-
-# ComrakNodeValue::List(..) => Symbol::new("list"),
-# ComrakNodeValue::DescriptionList => Symbol::new("description_list"),
-# ComrakNodeValue::DescriptionItem(_) => Symbol::new("description_item"),
-# ComrakNodeValue::DescriptionTerm => Symbol::new("description_term"),
-# ComrakNodeValue::DescriptionDetails => Symbol::new("description_details"),
-# ComrakNodeValue::Item(..) => Symbol::new("item"),
-# ComrakNodeValue::CodeBlock(..) => Symbol::new("code_block"),
-# ComrakNodeValue::HtmlBlock(..) => Symbol::new("html_block"),
-# ComrakNodeValue::Paragraph => Symbol::new("paragraph"),
-# ComrakNodeValue::Heading(..) => Symbol::new("heading"),
-# ComrakNodeValue::ThematicBreak => Symbol::new("thematic_break"),
-# ComrakNodeValue::Table(..) => Symbol::new("table"),
-# ComrakNodeValue::TableRow(..) => Symbol::new("table_row"),
-# ComrakNodeValue::TableCell => Symbol::new("table_cell"),
-# ComrakNodeValue::Text(..) => Symbol::new("text"),
-# ComrakNodeValue::SoftBreak => Symbol::new("softbreak"),
-# ComrakNodeValue::LineBreak => Symbol::new("linebreak"),
-# ComrakNodeValue::Image(..) => Symbol::new("image"),
-# ComrakNodeValue::Link(..) => Symbol::new("link"),
-# ComrakNodeValue::Emph => Symbol::new("emph"),
-# ComrakNodeValue::Strong => Symbol::new("strong"),
-# ComrakNodeValue::Code(..) => Symbol::new("code"),
-# ComrakNodeValue::HtmlInline(..) => Symbol::new("html_inline"),
-# ComrakNodeValue::Strikethrough => Symbol::new("strikethrough"),
-# ComrakNodeValue::FrontMatter(_) => Symbol::new("frontmatter"),
-# ComrakNodeValue::TaskItem { .. } => Symbol::new("taskitem"),
-# ComrakNodeValue::Superscript => Symbol::new("superscript"),
-# ComrakNodeValue::FootnoteReference(..) => Symbol::new("footnote_reference"),
-# ComrakNodeValue::ShortCode(_) => Symbol::new("shortcode"),
-# ComrakNodeValue::MultilineBlockQuote(_) => Symbol::new("multiline_block_quote"),
-# ComrakNodeValue::Escaped => Symbol::new("escaped"),
-# ComrakNodeValue::Math(..) => Symbol::new("math"),