Merge branch 'fixup-custom-markdown'

* fixup-custom-markdown:
  markdown: minor style fixes
  Add support for underscores.
  Refactor: lib/jekyll/convertor/markdown.rb - tests: no additions/breaks.
This commit is contained in:
Parker Moore 2015-12-27 08:24:16 -05:00
commit 1b73751abf
1 changed files with 52 additions and 37 deletions

View File

@ -1,54 +1,59 @@
module Jekyll
module Converters
class Markdown < Converter
safe true
highlighter_prefix "\n"
highlighter_suffix "\n"
safe true
def setup
return if @setup
@parser =
case @config['markdown'].downcase
when 'redcarpet' then RedcarpetParser.new(@config)
when 'kramdown' then KramdownParser.new(@config)
when 'rdiscount' then RDiscountParser.new(@config)
else
# So they can't try some tricky bullshit or go down the ancestor chain, I hope.
if allowed_custom_class?(@config['markdown'])
self.class.const_get(@config['markdown']).new(@config)
else
Jekyll.logger.error "Invalid Markdown Processor:", "#{@config['markdown']}"
Jekyll.logger.error "", "Valid options are [ #{valid_processors.join(" | ")} ]"
raise Errors::FatalException, "Invalid Markdown Processor: #{@config['markdown']}"
end
if (!@parser = get_processor)
Jekyll.logger.error "Invalid Markdown processor given:", @config["markdown"]
Jekyll.logger.info "", "Custom processors are not loaded in safe mode" if @config["safe"]
Jekyll.logger.error "", "Available processors are: #{valid_processors.join(", ")}"
raise Errors::FatalException, "Bailing out; invalid Markdown processor."
end
@setup = true
end
def valid_processors
%w[
rdiscount
kramdown
redcarpet
] + third_party_processors
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)
else
get_custom_processor
end
end
# 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.)
def valid_processors
%W(rdiscount kramdown redcarpet) + 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.
def third_party_processors
self.class.constants - %w[
KramdownParser
RDiscountParser
RedcarpetParser
PRIORITIES
].map(&:to_sym)
self.class.constants - \
%w[KramdownParser RDiscountParser RedcarpetParser PRIORITIES].map(
&:to_sym
)
end
def extname_list
@extname_list ||= @config['markdown_ext'].split(',').map { |e| ".#{e.downcase}" }
@extname_list ||= @config['markdown_ext'].split(',').map do |e|
".#{e.downcase}"
end
end
def matches(ext)
extname_list.include? ext.downcase
extname_list.include?(ext.downcase)
end
def output_ext(ext)
@ -61,16 +66,26 @@ module Jekyll
end
private
def get_custom_processor
converter_name = @config["markdown"]
if custom_class_allowed?(converter_name)
self.class.const_get(converter_name).new(@config)
end
end
# Private: Determine whether a class name is an allowed custom markdown
# class name
# 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
def allowed_custom_class?(parser_name)
parser_name !~ /[^A-Za-z0-9]/ && self.class.constants.include?(parser_name.to_sym)
# Returns true if the parser name contains only alphanumeric
# characters and is defined within Jekyll::Converters::Markdown
private
def custom_class_allowed?(parser_name)
parser_name !~ /[^A-Za-z0-9_]/ && self.class.constants.include?(
parser_name.to_sym
)
end
end
end