diff --git a/lib/govuk_markdown.rb b/lib/govuk_markdown.rb
index 8c4cdaf..f9a9f58 100644
--- a/lib/govuk_markdown.rb
+++ b/lib/govuk_markdown.rb
@@ -4,6 +4,7 @@
require_relative "./govuk_markdown/version"
require_relative "./govuk_markdown/preprocessor"
require_relative "./govuk_markdown/renderer"
+require_relative "./govuk_markdown/renderer/mixin"
module GovukMarkdown
def self.render(markdown, govuk_options = {})
diff --git a/lib/govuk_markdown/renderer.rb b/lib/govuk_markdown/renderer.rb
index 787a601..3cf6c1c 100644
--- a/lib/govuk_markdown/renderer.rb
+++ b/lib/govuk_markdown/renderer.rb
@@ -1,6 +1,9 @@
module GovukMarkdown
class Renderer < ::Redcarpet::Render::HTML
- include Redcarpet::Render::SmartyPants
+ autoload :Mixin, "govuk_markdown/renderer/mixin"
+
+ include ::Redcarpet::Render::SmartyPants
+ include Mixin
def initialize(govuk_options, options = {})
@headings_start_with = govuk_options[:headings_start_with]
@@ -8,97 +11,5 @@ def initialize(govuk_options, options = {})
super options
end
-
- def table(header, body)
- <<~HTML
-
-
- #{header}
-
-
- #{body}
-
-
- HTML
- end
-
- def table_row(content)
- <<~HTML
-
- #{content}
-
- HTML
- end
-
- def table_cell(content, _alignment, header)
- if header
- <<~HTML
-
- HTML
- else
- <<~HTML
-
- #{content}
- |
- HTML
- end
- end
-
- def header(text, header_level)
- valid_header_sizes = %w[xl l m s].freeze
-
- start_size = valid_header_sizes.include?(@headings_start_with) ? @headings_start_with : "xl"
-
- start_size_index = valid_header_sizes.find_index(start_size)
-
- header_size = valid_header_sizes[start_size_index + header_level - 1] || "s"
-
- id_attribute = @options[:with_toc_data] ? " id=\"#{text.parameterize}\"" : ""
- <<~HTML
-
- HTML
- end
-
- def paragraph(text)
- <<~HTML
- #{text}
- HTML
- end
-
- def list(contents, list_type)
- case list_type
- when :unordered
- <<~HTML
-
- HTML
- when :ordered
- <<~HTML
-
- #{contents}
-
- HTML
- else
- raise "Unexpected type #{list_type.inspect}"
- end
- end
-
- def hrule
- <<~HTML
-
- HTML
- end
-
- def preprocess(document)
- Preprocessor
- .new(document)
- .inject_inset_text
- .inject_details
- .strip_front_matter(@strip_front_matter)
- .output
- end
end
end
diff --git a/lib/govuk_markdown/renderer/mixin.rb b/lib/govuk_markdown/renderer/mixin.rb
new file mode 100644
index 0000000..0a7624a
--- /dev/null
+++ b/lib/govuk_markdown/renderer/mixin.rb
@@ -0,0 +1,97 @@
+module GovukMarkdown
+ # Renderer::Mixin overrides methods in Redcarpet::Render::HTML.
+ # See `GovukMarkdown::Renderer` for an example of how to include it.
+ module Renderer::Mixin
+ def table(header, body)
+ <<~HTML
+
+
+ #{header}
+
+
+ #{body}
+
+
+ HTML
+ end
+
+ def table_row(content)
+ <<~HTML
+
+ #{content}
+
+ HTML
+ end
+
+ def table_cell(content, _alignment, header)
+ if header
+ <<~HTML
+
+ HTML
+ else
+ <<~HTML
+
+ #{content}
+ |
+ HTML
+ end
+ end
+
+ def header(text, header_level)
+ valid_header_sizes = %w[xl l m s].freeze
+
+ start_size = valid_header_sizes.include?(@headings_start_with) ? @headings_start_with : "xl"
+
+ start_size_index = valid_header_sizes.find_index(start_size)
+
+ header_size = valid_header_sizes[start_size_index + header_level - 1] || "s"
+
+ id_attribute = @options[:with_toc_data] ? " id=\"#{text.parameterize}\"" : ""
+ <<~HTML
+
+ HTML
+ end
+
+ def paragraph(text)
+ <<~HTML
+ #{text}
+ HTML
+ end
+
+ def list(contents, list_type)
+ case list_type
+ when :unordered
+ <<~HTML
+
+ HTML
+ when :ordered
+ <<~HTML
+
+ #{contents}
+
+ HTML
+ else
+ raise "Unexpected type #{list_type.inspect}"
+ end
+ end
+
+ def hrule
+ <<~HTML
+
+ HTML
+ end
+
+ def preprocess(document)
+ Preprocessor
+ .new(document)
+ .inject_inset_text
+ .inject_details
+ .strip_front_matter(@strip_front_matter)
+ .output
+ end
+ end
+end