lib/jekyll/converters/markdown.rb in jekyll-3.10.0 vs lib/jekyll/converters/markdown.rb in jekyll-4.0.0.pre.alpha1
- old
+ new
@@ -1,104 +1,113 @@
# frozen_string_literal: true
module Jekyll
module Converters
+ # Markdown converter.
+ # For more info on converters see https://jekyllrb.com/docs/plugins/converters/
class Markdown < Converter
highlighter_prefix "\n"
highlighter_suffix "\n"
safe true
def setup
return if @setup ||= false
+
unless (@parser = get_processor)
- Jekyll.logger.error "Invalid Markdown processor given:", @config["markdown"]
if @config["safe"]
- Jekyll.logger.info "", "Custom processors are not loaded in safe mode"
+ Jekyll.logger.warn "Build Warning:", "Custom processors are not loaded in safe mode"
end
- Jekyll.logger.error(
- "",
- "Available processors are: #{valid_processors.join(", ")}"
- )
- raise Errors::FatalException, "Bailing out; invalid Markdown processor."
+
+ Jekyll.logger.error "Markdown processor:",
+ "#{@config["markdown"].inspect} is not a valid Markdown processor."
+ Jekyll.logger.error "", "Available processors are: #{valid_processors.join(", ")}"
+ Jekyll.logger.error ""
+ raise Errors::FatalException, "Invalid Markdown processor given: #{@config["markdown"]}"
end
+ @cache = Jekyll::Cache.new("Jekyll::Converters::Markdown")
@setup = true
end
- # Rubocop does not allow reader methods to have names starting with `get_`
+ # RuboCop does not allow reader methods to have names starting with `get_`
# To ensure compatibility, this check has been disabled on this method
#
# rubocop:disable Naming/AccessorMethodName
def get_processor
case @config["markdown"].downcase
- when "redcarpet" then return RedcarpetParser.new(@config)
- when "kramdown" then return KramdownParser.new(@config)
- when "rdiscount" then return RDiscountParser.new(@config)
+ when "kramdown" then KramdownParser.new(@config)
else
custom_processor
end
end
# rubocop:enable Naming/AccessorMethodName
- # Public: Provides you with a list of processors, the ones we
- # support internally and the ones that you have provided to us (if you
- # are not in safe mode.)
-
+ # Public: Provides you with a list of processors comprised of the ones we support internally
+ # and the ones that you have provided to us (if they're whitelisted for use in safe mode).
+ #
+ # Returns an array of symbols.
def valid_processors
- %w(rdiscount kramdown redcarpet) + third_party_processors
+ [:kramdown] + third_party_processors
end
# Public: A list of processors that you provide via plugins.
- # This is really only available if you are not in safe mode, if you are
- # in safe mode (re: GitHub) then there will be none.
-
+ #
+ # Returns an array of symbols
def third_party_processors
- self.class.constants - \
- %w(KramdownParser RDiscountParser RedcarpetParser PRIORITIES).map(
- &:to_sym
- )
+ self.class.constants - [:KramdownParser, :PRIORITIES]
end
- def extname_list
- @extname_list ||= @config["markdown_ext"].split(",").map do |e|
- ".#{e.downcase}"
- end
- end
-
+ # Does the given extension match this converter's list of acceptable extensions?
+ # Takes one argument: the file's extension (including the dot).
+ #
+ # ext - The String extension to check.
+ #
+ # Returns true if it matches, false otherwise.
def matches(ext)
extname_list.include?(ext.downcase)
end
+ # Public: The extension to be given to the output file (including the dot).
+ #
+ # ext - The String extension or original file.
+ #
+ # Returns The String output file extension.
def output_ext(_ext)
".html"
end
+ # Logic to do the content conversion.
+ #
+ # content - String content of file (without front matter).
+ #
+ # Returns a String of the converted content.
def convert(content)
setup
- @parser.convert(content)
+ @cache.getset(content) do
+ @parser.convert(content)
+ end
end
+ def extname_list
+ @extname_list ||= @config["markdown_ext"].split(",").map! { |e| ".#{e.downcase}" }
+ end
+
private
+
def custom_processor
converter_name = @config["markdown"]
- if custom_class_allowed?(converter_name)
- self.class.const_get(converter_name).new(@config)
- end
+ self.class.const_get(converter_name).new(@config) if custom_class_allowed?(converter_name)
end
# Private: Determine whether a class name is an allowed custom
# markdown class name.
#
# parser_name - the name of the parser class
#
- # Returns true if the parser name contains only alphanumeric
- # characters and is defined within Jekyll::Converters::Markdown
-
- private
+ # Returns true if the parser name contains only alphanumeric characters and is defined
+ # within Jekyll::Converters::Markdown
def custom_class_allowed?(parser_name)
- parser_name !~ %r![^A-Za-z0-9_]! && self.class.constants.include?(
- parser_name.to_sym
- )
+ parser_name !~ %r![^A-Za-z0-9_]! && self.class.constants.include?(parser_name.to_sym)
end
end
end
end