Skip to content

Commit

Permalink
Revert #537 temporarily for final 1.4 release
Browse files Browse the repository at this point in the history
  • Loading branch information
Yuki Izumi committed Mar 27, 2017
1 parent ec0eb75 commit bbee330
Show file tree
Hide file tree
Showing 9 changed files with 51 additions and 54 deletions.
1 change: 0 additions & 1 deletion github-markup.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ Gem::Specification.new do |s|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
s.require_paths = %w[lib]

s.add_dependency "github-linguist", "~> 5.0", ">= 5.0.8"
s.add_dependency "rinku"
s.add_development_dependency 'rake', '~> 12'
s.add_development_dependency 'activesupport', '~> 4.0'
Expand Down
26 changes: 10 additions & 16 deletions lib/github/markup.rb
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def preload!
def render(filename, content = nil)
content ||= File.read(filename)

if impl = renderer(filename, content)
if impl = renderer(filename)
impl.render(content)
else
content
Expand All @@ -53,9 +53,9 @@ def render_s(symbol, content)
content
end
end

def markup(symbol, gem_name, pattern, opts = {}, &block)
markup_impl(symbol, GemImplementation.new(pattern, gem_name, &block))
def markup(symbol, file, pattern, opts = {}, &block)
markup_impl(symbol, GemImplementation.new(pattern, file, &block))
end

def markup_impl(symbol, impl)
Expand All @@ -65,30 +65,24 @@ def markup_impl(symbol, impl)
markups[symbol] = impl
end

def command(symbol, command, languages, name, &block)
def command(symbol, command, regexp, name, &block)
if File.exist?(file = File.dirname(__FILE__) + "/commands/#{command}")
command = file
end

markup_impl(symbol, CommandImplementation.new(languages, command, name, &block))
markup_impl(symbol, CommandImplementation.new(regexp, command, name, &block))
end

def can_render?(filename, content)
!!renderer(filename, content)
def can_render?(filename)
!!renderer(filename)
end

def renderer(filename, content)
language = language(filename, content)
def renderer(filename)
markup_impls.find { |impl|
impl.match?(language)
impl.match?(filename)
}
end

def language(filename, content)
blob = Linguist::Blob.new(filename, content)
return Linguist.detect(blob, allow_empty: true)
end

# Define markups
markups_rb = File.dirname(__FILE__) + '/markups.rb'
instance_eval File.read(markups_rb), markups_rb
Expand Down
4 changes: 2 additions & 2 deletions lib/github/markup/command_implementation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ class CommandError < RuntimeError
class CommandImplementation < Implementation
attr_reader :command, :block, :name

def initialize(languages, command, name, &block)
super languages
def initialize(regexp, command, name, &block)
super regexp
@command = command.to_s
@block = block
@name = name
Expand Down
4 changes: 2 additions & 2 deletions lib/github/markup/gem_implementation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ module Markup
class GemImplementation < Implementation
attr_reader :gem_name, :renderer

def initialize(languages, gem_name, &renderer)
super languages
def initialize(regexp, gem_name, &renderer)
super regexp
@gem_name = gem_name.to_s
@renderer = renderer
end
Expand Down
15 changes: 10 additions & 5 deletions lib/github/markup/implementation.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
module GitHub
module Markup
class Implementation
attr_reader :languages
attr_reader :regexp

def initialize(languages)
@languages = languages
def initialize(regexp)
@regexp = regexp
end

def load
Expand All @@ -15,8 +15,13 @@ def render(content)
raise NotImplementedError, "subclasses of GitHub::Markup::Implementation must define #render"
end

def match?(language)
languages.include? language
def match?(filename)
file_ext_regexp =~ filename
end

private
def file_ext_regexp
@file_ext_regexp ||= /\.(#{regexp})\z/
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/github/markup/markdown.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class Markdown < Implementation
}

def initialize
super([Linguist::Language["Markdown"], Linguist::Language["RMarkdown"], Linguist::Language["Literate CoffeeScript"]])
super(/md|rmd|mkdn?|mdwn|mdown|markdown|litcoffee/i)
end

def load
Expand Down
2 changes: 1 addition & 1 deletion lib/github/markup/rdoc.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ module GitHub
module Markup
class RDoc < Implementation
def initialize
super([Linguist::Language["RDoc"]])
super(/rdoc/)
end

def render(content)
Expand Down
15 changes: 7 additions & 8 deletions lib/github/markups.rb
Original file line number Diff line number Diff line change
@@ -1,43 +1,42 @@
require "github/markup/markdown"
require "github/markup/rdoc"
require "shellwords"
require "linguist"

markup_impl(::GitHub::Markups::MARKUP_MARKDOWN, ::GitHub::Markup::Markdown.new)

markup(::GitHub::Markups::MARKUP_TEXTILE, :redcloth, [Linguist::Language["Textile"]]) do |content|
markup(::GitHub::Markups::MARKUP_TEXTILE, :redcloth, /textile/) do |content|
RedCloth.new(content).to_html
end

markup_impl(::GitHub::Markups::MARKUP_RDOC, GitHub::Markup::RDoc.new)

markup(::GitHub::Markups::MARKUP_ORG, 'org-ruby', [Linguist::Language["Org"]]) do |content|
markup(::GitHub::Markups::MARKUP_ORG, 'org-ruby', /org/) do |content|
Orgmode::Parser.new(content, {
:allow_include_files => false,
:skip_syntax_highlight => true
}).to_html
end

markup(::GitHub::Markups::MARKUP_CREOLE, :creole, [Linguist::Language["Creole"]]) do |content|
markup(::GitHub::Markups::MARKUP_CREOLE, :creole, /creole/) do |content|
Creole.creolize(content)
end

markup(::GitHub::Markups::MARKUP_MEDIAWIKI, :wikicloth, [Linguist::Language["MediaWiki"]]) do |content|
markup(::GitHub::Markups::MARKUP_MEDIAWIKI, :wikicloth, /mediawiki|wiki/) do |content|
wikicloth = WikiCloth::WikiCloth.new(:data => content)
WikiCloth::WikiBuffer::HTMLElement::ESCAPED_TAGS << 'tt' unless WikiCloth::WikiBuffer::HTMLElement::ESCAPED_TAGS.include?('tt')
wikicloth.to_html(:noedit => true)
end

markup(::GitHub::Markups::MARKUP_ASCIIDOC, :asciidoctor, [Linguist::Language["AsciiDoc"]]) do |content|
markup(::GitHub::Markups::MARKUP_ASCIIDOC, :asciidoctor, /adoc|asc(iidoc)?/) do |content|
Asciidoctor::Compliance.unique_id_start_index = 1
Asciidoctor.convert(content, :safe => :secure, :attributes => %w(showtitle=@ idprefix idseparator=- env=github env-github source-highlighter=html-pipeline))
end

command(
::GitHub::Markups::MARKUP_RST,
"python2 -S #{Shellwords.escape(File.dirname(__FILE__))}/commands/rest2html",
[Linguist::Language["reStructuredText"]],
/re?st(\.txt)?/,
"restructuredtext"
)

command(::GitHub::Markups::MARKUP_POD, :pod2html, [Linguist::Language["Pod"]], "pod")
command(::GitHub::Markups::MARKUP_POD, :pod2html, /pod/, "pod")
36 changes: 18 additions & 18 deletions test/markup_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -77,35 +77,35 @@ def call
end

def test_knows_what_it_can_and_cannot_render
assert_equal false, GitHub::Markup.can_render?('README.html', '<h1>Title</h1>')
assert_equal true, GitHub::Markup.can_render?('README.markdown', '=== Title')
assert_equal true, GitHub::Markup.can_render?('README.rmd', '=== Title')
assert_equal true, GitHub::Markup.can_render?('README.Rmd', '=== Title')
assert_equal false, GitHub::Markup.can_render?('README.cmd', 'echo 1')
assert_equal true, GitHub::Markup.can_render?('README.litcoffee', 'Title')
assert_equal false, GitHub::Markup.can_render?('README.html')
assert_equal true, GitHub::Markup.can_render?('README.markdown')
assert_equal true, GitHub::Markup.can_render?('README.rmd')
assert_equal true, GitHub::Markup.can_render?('README.Rmd')
assert_equal false, GitHub::Markup.can_render?('README.cmd')
assert_equal true, GitHub::Markup.can_render?('README.litcoffee')
end

def test_each_render_has_a_name
assert_equal "markdown", GitHub::Markup.renderer('README.md', '=== Title').name
assert_equal "redcloth", GitHub::Markup.renderer('README.textile', '* One').name
assert_equal "rdoc", GitHub::Markup.renderer('README.rdoc', '* One').name
assert_equal "org-ruby", GitHub::Markup.renderer('README.org', '* Title').name
assert_equal "creole", GitHub::Markup.renderer('README.creole', '= Title =').name
assert_equal "wikicloth", GitHub::Markup.renderer('README.wiki', '<h1>Title</h1>').name
assert_equal "asciidoctor", GitHub::Markup.renderer('README.adoc', '== Title').name
assert_equal "restructuredtext", GitHub::Markup.renderer('README.rst', 'Title').name
assert_equal "pod", GitHub::Markup.renderer('README.pod', '=begin').name
assert_equal "markdown", GitHub::Markup.renderer('README.md').name
assert_equal "redcloth", GitHub::Markup.renderer('README.textile').name
assert_equal "rdoc", GitHub::Markup.renderer('README.rdoc').name
assert_equal "org-ruby", GitHub::Markup.renderer('README.org').name
assert_equal "creole", GitHub::Markup.renderer('README.creole').name
assert_equal "wikicloth", GitHub::Markup.renderer('README.wiki').name
assert_equal "asciidoctor", GitHub::Markup.renderer('README.adoc').name
assert_equal "restructuredtext", GitHub::Markup.renderer('README.rst').name
assert_equal "pod", GitHub::Markup.renderer('README.pod').name
end

def test_rendering_by_symbol
assert_equal '<p><code>test</code></p>', GitHub::Markup.render_s(GitHub::Markups::MARKUP_MARKDOWN, '`test`').strip
end

def test_raises_error_if_command_exits_non_zero
GitHub::Markup.command(:doesntmatter, 'test/fixtures/fail.sh', [Linguist::Language['Java']], 'fail')
assert GitHub::Markup.can_render?('README.java', 'stop swallowing errors')
GitHub::Markup.command(:doesntmatter, 'test/fixtures/fail.sh', /fail/, 'fail')
assert GitHub::Markup.can_render?('README.fail')
begin
GitHub::Markup.render('README.java', "stop swallowing errors")
GitHub::Markup.render('README.fail', "stop swallowing errors")
rescue GitHub::Markup::CommandError => e
assert_equal "failure message", e.message
else
Expand Down

0 comments on commit bbee330

Please sign in to comment.