github-markup 1.4.9 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8cf91fcf2397937d4668c385b12e2bea4e1e63e9
4
- data.tar.gz: a4f0427b86e1d9eb0f095c18be9ad4b9dd54e4bd
3
+ metadata.gz: 3873917ff6bcce326f3db9af115b479093b5bd41
4
+ data.tar.gz: 390eb33b65634cf8a3821d83c35157bc7940b565
5
5
  SHA512:
6
- metadata.gz: 12d5875aa247c073d2d37ee029b74a0b2a75d8cfa90669184145fbadf8d0786c071d9f637569a6fbdd96e345c170d86c471ec8f0aa9cb4ad785b685de0e39ff9
7
- data.tar.gz: 91deab9ed4aa53b369f7d941f4bd1b14d7416950ed397174a8c9d5936ff9fc82bf116fac240672673dcdcb7980273cb439c29b69d5652cd13e648ecf64ca7e5f
6
+ metadata.gz: 2428b43fe04c56a03fb6508aa87bec722edb08cd5afaad71c46977892943e9cf6a3c1281bd73750fb90bb27610de38a5fe947f255454004ade830eb083367472
7
+ data.tar.gz: fc853cfc772810f6456c9b7933b722461adcafa109fddd78198972c34855e8355e3257e622a92af41b63e3465b325c72340630695f801106a76f49925a5addf4
@@ -24,4 +24,5 @@ Gem::Specification.new do |s|
24
24
  s.add_development_dependency 'sanitize', '~> 2.1', '>= 2.1.0'
25
25
  s.add_development_dependency 'nokogiri', '1.6.8.1'
26
26
  s.add_development_dependency 'nokogiri-diff', '~> 0.2.0'
27
+ s.add_development_dependency "github-linguist", "~> 5.0", ">= 5.0.8"
27
28
  end
data/lib/github-markup.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module GitHub
2
2
  module Markup
3
- VERSION = '1.4.9'
3
+ VERSION = '1.5.0'
4
4
  Version = VERSION
5
5
  end
6
6
  end
data/lib/github/markup.rb CHANGED
@@ -1,3 +1,9 @@
1
+ begin
2
+ require "linguist"
3
+ rescue LoadError
4
+ # Rely on extensions instead.
5
+ end
6
+
1
7
  require "github/markup/command_implementation"
2
8
  require "github/markup/gem_implementation"
3
9
 
@@ -37,7 +43,7 @@ module GitHub
37
43
  def render(filename, content = nil)
38
44
  content ||= File.read(filename)
39
45
 
40
- if impl = renderer(filename)
46
+ if impl = renderer(filename, content)
41
47
  impl.render(content)
42
48
  else
43
49
  content
@@ -53,9 +59,9 @@ module GitHub
53
59
  content
54
60
  end
55
61
  end
56
-
57
- def markup(symbol, file, pattern, opts = {}, &block)
58
- markup_impl(symbol, GemImplementation.new(pattern, file, &block))
62
+
63
+ def markup(symbol, gem_name, regexp, languages, opts = {}, &block)
64
+ markup_impl(symbol, GemImplementation.new(regexp, languages, gem_name, &block))
59
65
  end
60
66
 
61
67
  def markup_impl(symbol, impl)
@@ -65,24 +71,32 @@ module GitHub
65
71
  markups[symbol] = impl
66
72
  end
67
73
 
68
- def command(symbol, command, regexp, name, &block)
74
+ def command(symbol, command, regexp, languages, name, &block)
69
75
  if File.exist?(file = File.dirname(__FILE__) + "/commands/#{command}")
70
76
  command = file
71
77
  end
72
78
 
73
- markup_impl(symbol, CommandImplementation.new(regexp, command, name, &block))
79
+ markup_impl(symbol, CommandImplementation.new(regexp, languages, command, name, &block))
74
80
  end
75
81
 
76
- def can_render?(filename)
77
- !!renderer(filename)
82
+ def can_render?(filename, content)
83
+ !!renderer(filename, content)
78
84
  end
79
85
 
80
- def renderer(filename)
86
+ def renderer(filename, content)
87
+ language = language(filename, content)
81
88
  markup_impls.find { |impl|
82
- impl.match?(filename)
89
+ impl.match?(filename, language)
83
90
  }
84
91
  end
85
92
 
93
+ def language(filename, content)
94
+ if defined?(::Linguist)
95
+ blob = Linguist::Blob.new(filename, content)
96
+ return Linguist.detect(blob, allow_empty: true)
97
+ end
98
+ end
99
+
86
100
  # Define markups
87
101
  markups_rb = File.dirname(__FILE__) + '/markups.rb'
88
102
  instance_eval File.read(markups_rb), markups_rb
@@ -15,8 +15,8 @@ module GitHub
15
15
  class CommandImplementation < Implementation
16
16
  attr_reader :command, :block, :name
17
17
 
18
- def initialize(regexp, command, name, &block)
19
- super regexp
18
+ def initialize(regexp, languages, command, name, &block)
19
+ super(regexp, languages)
20
20
  @command = command.to_s
21
21
  @block = block
22
22
  @name = name
@@ -5,8 +5,8 @@ module GitHub
5
5
  class GemImplementation < Implementation
6
6
  attr_reader :gem_name, :renderer
7
7
 
8
- def initialize(regexp, gem_name, &renderer)
9
- super regexp
8
+ def initialize(regexp, languages, gem_name, &renderer)
9
+ super(regexp, languages)
10
10
  @gem_name = gem_name.to_s
11
11
  @renderer = renderer
12
12
  end
@@ -2,9 +2,14 @@ module GitHub
2
2
  module Markup
3
3
  class Implementation
4
4
  attr_reader :regexp
5
+ attr_reader :languages
5
6
 
6
- def initialize(regexp)
7
+ def initialize(regexp, languages)
7
8
  @regexp = regexp
9
+
10
+ if defined?(::Linguist)
11
+ @languages = languages.map {|l| Linguist::Language[l]}
12
+ end
8
13
  end
9
14
 
10
15
  def load
@@ -15,11 +20,16 @@ module GitHub
15
20
  raise NotImplementedError, "subclasses of GitHub::Markup::Implementation must define #render"
16
21
  end
17
22
 
18
- def match?(filename)
19
- file_ext_regexp =~ filename
23
+ def match?(filename, language)
24
+ if defined?(::Linguist)
25
+ languages.include? language
26
+ else
27
+ file_ext_regexp =~ filename
28
+ end
20
29
  end
21
30
 
22
- private
31
+ private
32
+
23
33
  def file_ext_regexp
24
34
  @file_ext_regexp ||= /\.(#{regexp})\z/
25
35
  end
@@ -28,7 +28,9 @@ module GitHub
28
28
  }
29
29
 
30
30
  def initialize
31
- super(/md|rmd|mkdn?|mdwn|mdown|markdown|litcoffee/i)
31
+ super(
32
+ /md|rmd|mkdn?|mdwn|mdown|markdown|litcoffee/i,
33
+ ["Markdown", "RMarkdown", "Literate CoffeeScript"])
32
34
  end
33
35
 
34
36
  def load
@@ -6,7 +6,7 @@ module GitHub
6
6
  module Markup
7
7
  class RDoc < Implementation
8
8
  def initialize
9
- super(/rdoc/)
9
+ super(/rdoc/, ["RDoc"])
10
10
  end
11
11
 
12
12
  def render(content)
@@ -4,30 +4,30 @@ require "shellwords"
4
4
 
5
5
  markup_impl(::GitHub::Markups::MARKUP_MARKDOWN, ::GitHub::Markup::Markdown.new)
6
6
 
7
- markup(::GitHub::Markups::MARKUP_TEXTILE, :redcloth, /textile/) do |content|
7
+ markup(::GitHub::Markups::MARKUP_TEXTILE, :redcloth, /textile/, ["Textile"]) do |content|
8
8
  RedCloth.new(content).to_html
9
9
  end
10
10
 
11
11
  markup_impl(::GitHub::Markups::MARKUP_RDOC, GitHub::Markup::RDoc.new)
12
12
 
13
- markup(::GitHub::Markups::MARKUP_ORG, 'org-ruby', /org/) do |content|
13
+ markup(::GitHub::Markups::MARKUP_ORG, 'org-ruby', /org/, ["Org"]) do |content|
14
14
  Orgmode::Parser.new(content, {
15
15
  :allow_include_files => false,
16
16
  :skip_syntax_highlight => true
17
17
  }).to_html
18
18
  end
19
19
 
20
- markup(::GitHub::Markups::MARKUP_CREOLE, :creole, /creole/) do |content|
20
+ markup(::GitHub::Markups::MARKUP_CREOLE, :creole, /creole/, ["Creole"]) do |content|
21
21
  Creole.creolize(content)
22
22
  end
23
23
 
24
- markup(::GitHub::Markups::MARKUP_MEDIAWIKI, :wikicloth, /mediawiki|wiki/) do |content|
24
+ markup(::GitHub::Markups::MARKUP_MEDIAWIKI, :wikicloth, /mediawiki|wiki/, ["MediaWiki"]) do |content|
25
25
  wikicloth = WikiCloth::WikiCloth.new(:data => content)
26
26
  WikiCloth::WikiBuffer::HTMLElement::ESCAPED_TAGS << 'tt' unless WikiCloth::WikiBuffer::HTMLElement::ESCAPED_TAGS.include?('tt')
27
27
  wikicloth.to_html(:noedit => true)
28
28
  end
29
29
 
30
- markup(::GitHub::Markups::MARKUP_ASCIIDOC, :asciidoctor, /adoc|asc(iidoc)?/) do |content|
30
+ markup(::GitHub::Markups::MARKUP_ASCIIDOC, :asciidoctor, /adoc|asc(iidoc)?/, ["AsciiDoc"]) do |content|
31
31
  Asciidoctor::Compliance.unique_id_start_index = 1
32
32
  Asciidoctor.convert(content, :safe => :secure, :attributes => %w(showtitle=@ idprefix idseparator=- env=github env-github source-highlighter=html-pipeline))
33
33
  end
@@ -36,7 +36,8 @@ command(
36
36
  ::GitHub::Markups::MARKUP_RST,
37
37
  "python2 -S #{Shellwords.escape(File.dirname(__FILE__))}/commands/rest2html",
38
38
  /re?st(\.txt)?/,
39
+ ["reStructuredText"],
39
40
  "restructuredtext"
40
41
  )
41
42
 
42
- command(::GitHub::Markups::MARKUP_POD, :pod2html, /pod/, "pod")
43
+ command(::GitHub::Markups::MARKUP_POD, :pod2html, /pod/, ["Pod"], "pod")
data/test/markup_test.rb CHANGED
@@ -77,24 +77,24 @@ message
77
77
  end
78
78
 
79
79
  def test_knows_what_it_can_and_cannot_render
80
- assert_equal false, GitHub::Markup.can_render?('README.html')
81
- assert_equal true, GitHub::Markup.can_render?('README.markdown')
82
- assert_equal true, GitHub::Markup.can_render?('README.rmd')
83
- assert_equal true, GitHub::Markup.can_render?('README.Rmd')
84
- assert_equal false, GitHub::Markup.can_render?('README.cmd')
85
- assert_equal true, GitHub::Markup.can_render?('README.litcoffee')
80
+ assert_equal false, GitHub::Markup.can_render?('README.html', '<h1>Title</h1>')
81
+ assert_equal true, GitHub::Markup.can_render?('README.markdown', '=== Title')
82
+ assert_equal true, GitHub::Markup.can_render?('README.rmd', '=== Title')
83
+ assert_equal true, GitHub::Markup.can_render?('README.Rmd', '=== Title')
84
+ assert_equal false, GitHub::Markup.can_render?('README.cmd', 'echo 1')
85
+ assert_equal true, GitHub::Markup.can_render?('README.litcoffee', 'Title')
86
86
  end
87
87
 
88
88
  def test_each_render_has_a_name
89
- assert_equal "markdown", GitHub::Markup.renderer('README.md').name
90
- assert_equal "redcloth", GitHub::Markup.renderer('README.textile').name
91
- assert_equal "rdoc", GitHub::Markup.renderer('README.rdoc').name
92
- assert_equal "org-ruby", GitHub::Markup.renderer('README.org').name
93
- assert_equal "creole", GitHub::Markup.renderer('README.creole').name
94
- assert_equal "wikicloth", GitHub::Markup.renderer('README.wiki').name
95
- assert_equal "asciidoctor", GitHub::Markup.renderer('README.adoc').name
96
- assert_equal "restructuredtext", GitHub::Markup.renderer('README.rst').name
97
- assert_equal "pod", GitHub::Markup.renderer('README.pod').name
89
+ assert_equal "markdown", GitHub::Markup.renderer('README.md', '=== Title').name
90
+ assert_equal "redcloth", GitHub::Markup.renderer('README.textile', '* One').name
91
+ assert_equal "rdoc", GitHub::Markup.renderer('README.rdoc', '* One').name
92
+ assert_equal "org-ruby", GitHub::Markup.renderer('README.org', '* Title').name
93
+ assert_equal "creole", GitHub::Markup.renderer('README.creole', '= Title =').name
94
+ assert_equal "wikicloth", GitHub::Markup.renderer('README.wiki', '<h1>Title</h1>').name
95
+ assert_equal "asciidoctor", GitHub::Markup.renderer('README.adoc', '== Title').name
96
+ assert_equal "restructuredtext", GitHub::Markup.renderer('README.rst', 'Title').name
97
+ assert_equal "pod", GitHub::Markup.renderer('README.pod', '=begin').name
98
98
  end
99
99
 
100
100
  def test_rendering_by_symbol
@@ -102,10 +102,10 @@ message
102
102
  end
103
103
 
104
104
  def test_raises_error_if_command_exits_non_zero
105
- GitHub::Markup.command(:doesntmatter, 'test/fixtures/fail.sh', /fail/, 'fail')
106
- assert GitHub::Markup.can_render?('README.fail')
105
+ GitHub::Markup.command(:doesntmatter, 'test/fixtures/fail.sh', /fail/, ['Java'], 'fail')
106
+ assert GitHub::Markup.can_render?('README.java', 'stop swallowing errors')
107
107
  begin
108
- GitHub::Markup.render('README.fail', "stop swallowing errors")
108
+ GitHub::Markup.render('README.java', "stop swallowing errors")
109
109
  rescue GitHub::Markup::CommandError => e
110
110
  assert_equal "failure message", e.message
111
111
  else
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github-markup
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.9
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Wanstrath
@@ -134,6 +134,26 @@ dependencies:
134
134
  - - "~>"
135
135
  - !ruby/object:Gem::Version
136
136
  version: 0.2.0
137
+ - !ruby/object:Gem::Dependency
138
+ name: github-linguist
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: '5.0'
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: 5.0.8
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: '5.0'
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: 5.0.8
137
157
  description: This gem is used by GitHub to render any fancy markup such as Markdown,
138
158
  Textile, Org-Mode, etc. Fork it and add your own!
139
159
  email: chris@ozmm.org