From ba230ecab650d94bf84e6b9aa2a83be21e2ef22a Mon Sep 17 00:00:00 2001 From: Aaron Moat Date: Fri, 3 Jan 2020 03:23:44 +1100 Subject: [PATCH] Allow language-xxx class detection on pre tags in ReverseMarkdown (#5299) * Allow language-xxx class detection on pre tags in ReverseMarkdown Solves thepracticaldev/dev.to#5298 * Remove comment --- .../reverse_markdown/converters/custom_pre.rb | 8 +++++- .../converters/custom_pre_spec.rb | 28 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 spec/lib/reverse_markdown/converters/custom_pre_spec.rb diff --git a/app/lib/reverse_markdown/converters/custom_pre.rb b/app/lib/reverse_markdown/converters/custom_pre.rb index bb48ae00f..6708874c3 100644 --- a/app/lib/reverse_markdown/converters/custom_pre.rb +++ b/app/lib/reverse_markdown/converters/custom_pre.rb @@ -25,13 +25,19 @@ module ReverseMarkdown def language(node) lang = language_from_highlight_class(node) - lang || language_from_confluence_class(node) + lang ||= language_from_language_class(node) + lang ||= language_from_confluence_class(node) + lang end def language_from_highlight_class(node) node.parent["class"].to_s[/highlight-([a-zA-Z0-9]+)/, 1] end + def language_from_language_class(node) + node["class"].to_s[/language-([a-zA-Z0-9]+)/, 1] + end + def language_from_confluence_class(node) node["class"].to_s[/brush:\s?(:?.*);/, 1] end diff --git a/spec/lib/reverse_markdown/converters/custom_pre_spec.rb b/spec/lib/reverse_markdown/converters/custom_pre_spec.rb new file mode 100644 index 000000000..112700115 --- /dev/null +++ b/spec/lib/reverse_markdown/converters/custom_pre_spec.rb @@ -0,0 +1,28 @@ +require "rails_helper" + +RSpec.describe ReverseMarkdown::Converters::CustomPre, type: :lib do + def create_custom_pre + ReverseMarkdown.config.github_flavored = true + described_class.new + end + + describe "#convert" do + it "detects languages from language-prefixed classnames" do + node = Nokogiri::HTML('
').search("pre")[0]
+      result = create_custom_pre.convert(node)
+      expect(result.split[0]).to eq("```js")
+    end
+
+    it "detects languages from highlight-prefixed classnames on the parent element" do
+      node = Nokogiri::HTML('
').search("pre")[0] + result = create_custom_pre.convert(node) + expect(result.split[0]).to eq("```ruby") + end + + it "detects languages from confluence-style classnames" do + node = Nokogiri::HTML('
').search("pre")[0]
+      result = create_custom_pre.convert(node)
+      expect(result.split[0]).to eq("```html")
+    end
+  end
+end