pagehub-markdown 0.1.3 → 0.2.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 +7 -0
- data/lib/pagehub-markdown.rb +1 -1
- data/lib/pagehub-markdown/markdown.rb +19 -9
- data/lib/pagehub-markdown/mutators/date_injector.rb +0 -0
- data/lib/pagehub-markdown/processors/embedder.rb +20 -8
- data/lib/pagehub-markdown/processors/pagehub_options.rb +0 -0
- data/lib/pagehub-markdown/processors/toc_generator.rb +9 -2
- metadata +32 -43
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 56b56c658c3c84a4e2aeb30d61c51d9d7a31b7cf
|
4
|
+
data.tar.gz: bf8cd37f12f181b00cd54870bfd8b5f1909945c3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 37d90d0c5c9e6e9ea77275196e6a8551a8b060a9859d4f71078df472c55b6e9e3adb39a61fe201413ee0ff25ebeb9799e5784e82921c33e0a66ef53bba74a00c
|
7
|
+
data.tar.gz: 4fd843a037d26d38e9bfa5453d4d6a83003018932b7cfd02a8f771d8e603fb2b32a0056ffab183f1fd1d124e0e5e9f95be62555b5e0251d705c31d8e07f430f3
|
data/lib/pagehub-markdown.rb
CHANGED
@@ -33,13 +33,22 @@ module PageHub
|
|
33
33
|
# PageHubOptions, RendererOptions, and RendererExtensions
|
34
34
|
# for accepted values
|
35
35
|
def configure(ph_options = {}, options = {}, extensions = {})
|
36
|
-
@@options
|
36
|
+
@@options ||= PageHubOptions.dup
|
37
|
+
@@options.merge!(ph_options)
|
37
38
|
|
38
39
|
@@renderer = Redcarpet::Markdown.new(
|
39
40
|
HTMLWithAlbino.new(RendererOptions.merge(options)),
|
40
41
|
RendererExtensions.merge(extensions))
|
41
42
|
end
|
42
43
|
|
44
|
+
def reset_config()
|
45
|
+
@@options = PageHubOptions.dup
|
46
|
+
end
|
47
|
+
|
48
|
+
def options
|
49
|
+
@@options
|
50
|
+
end
|
51
|
+
|
43
52
|
def render!(str)
|
44
53
|
configure
|
45
54
|
|
@@ -47,10 +56,7 @@ module PageHub
|
|
47
56
|
|
48
57
|
# escape any JavaScript snippets
|
49
58
|
if @@options[:escape_scripts]
|
50
|
-
str.gsub!(
|
51
|
-
mutated = true
|
52
|
-
"<script#{$1}>"
|
53
|
-
}
|
59
|
+
str.gsub!(%r{<([^>]*)script[^>]*>}, "<\\1script>")
|
54
60
|
end
|
55
61
|
|
56
62
|
str = @@renderer.render(str)
|
@@ -61,7 +67,9 @@ module PageHub
|
|
61
67
|
end
|
62
68
|
|
63
69
|
def render(str)
|
64
|
-
|
70
|
+
str.dup.tap do |md|
|
71
|
+
render!(md)
|
72
|
+
end
|
65
73
|
end
|
66
74
|
|
67
75
|
def mutate!(str)
|
@@ -80,7 +88,8 @@ module PageHub
|
|
80
88
|
@@options = { }
|
81
89
|
|
82
90
|
PageHubOptions = {
|
83
|
-
escape_scripts: true
|
91
|
+
escape_scripts: true,
|
92
|
+
plain_errors: true
|
84
93
|
}
|
85
94
|
|
86
95
|
RendererOptions = {
|
@@ -112,10 +121,11 @@ module PageHub
|
|
112
121
|
def block_code(code, language)
|
113
122
|
begin
|
114
123
|
# TODO: try to figure out whether @language is valid
|
115
|
-
out =
|
124
|
+
out = Pygments.highlight(code, { lexer: language.to_s, encoding: 'utf-8' })
|
116
125
|
rescue Exception => e
|
117
|
-
out = ""
|
118
126
|
# return "-- INVALID CODE BLOCK, MAKE SURE YOU'VE SURROUNDED CODE WITH ```"
|
127
|
+
puts "[warn] pagehub-markdown: unable to highlight code block for language #{language}. Reason: #{e.message}"
|
128
|
+
out = ""
|
119
129
|
end
|
120
130
|
|
121
131
|
# just render the code as plain text if the language is invalid
|
File without changes
|
@@ -9,7 +9,6 @@ module Markdown
|
|
9
9
|
# and allows for content extraction from HTML pages
|
10
10
|
# so it can be neatly embedded in another page.
|
11
11
|
module Embedder
|
12
|
-
|
13
12
|
class EmbeddingError < RuntimeError; end
|
14
13
|
class InvalidSizeError < EmbeddingError; end
|
15
14
|
class InvalidTypeError < EmbeddingError; end
|
@@ -54,9 +53,12 @@ module Markdown
|
|
54
53
|
# reject if the host is banned
|
55
54
|
return "" if FilteredHosts.include?(uri.host)
|
56
55
|
|
57
|
-
Net::HTTP.
|
58
|
-
|
59
|
-
|
56
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
57
|
+
http.open_timeout = Timeout
|
58
|
+
http.read_timeout = Timeout
|
59
|
+
http.use_ssl = (uri.scheme == 'https')
|
60
|
+
|
61
|
+
http.start do
|
60
62
|
|
61
63
|
# get the content type and length
|
62
64
|
ctype = ""
|
@@ -92,7 +94,7 @@ module Markdown
|
|
92
94
|
raise e
|
93
95
|
rescue Exception => e
|
94
96
|
# mask as a generic EmbeddingError
|
95
|
-
raise EmbeddingError.new e.message
|
97
|
+
raise EmbeddingError.new "generic: #{e.class}##{e.message}"
|
96
98
|
end
|
97
99
|
|
98
100
|
""
|
@@ -183,7 +185,7 @@ module Markdown
|
|
183
185
|
}
|
184
186
|
end
|
185
187
|
|
186
|
-
node
|
188
|
+
node.to_s
|
187
189
|
end
|
188
190
|
|
189
191
|
end
|
@@ -204,18 +206,19 @@ module Markdown
|
|
204
206
|
node.xpath('div[@id="breadcrumbs"]').remove
|
205
207
|
node.xpath('div[@id="bottom"]').remove
|
206
208
|
stamp(node, uri, 'pagehub')
|
207
|
-
node
|
209
|
+
node.to_s
|
208
210
|
end
|
209
211
|
end
|
210
212
|
|
211
213
|
register_processor(GithubWikiProcessor.new)
|
212
214
|
register_processor(PageHubProcessor.new)
|
213
215
|
|
216
|
+
MATCH = /^\B\[\![include|embed]\s?(.*)\!\]\((.*)\)/
|
214
217
|
end # Embedder module
|
215
218
|
|
216
219
|
add_processor :pre_render, lambda {|str|
|
217
220
|
# Embed remote references, if any
|
218
|
-
str.gsub!(
|
221
|
+
str.gsub!(Embedder::MATCH) {
|
219
222
|
content = ""
|
220
223
|
|
221
224
|
uri = $2
|
@@ -227,6 +230,15 @@ module Markdown
|
|
227
230
|
|
228
231
|
begin
|
229
232
|
content = Embedder.get_resource(uri, source, args)
|
233
|
+
content.gsub!(Embedder::MATCH) {
|
234
|
+
source, uri = ($1 || '').split.first, $2
|
235
|
+
|
236
|
+
s = "[See this indirectly embedded resource"
|
237
|
+
s << source.empty? ? '' : " from '#{source}'"
|
238
|
+
s << ": #{uri}]"
|
239
|
+
s << "(#{uri})"
|
240
|
+
s
|
241
|
+
}
|
230
242
|
rescue Embedder::InvalidSizeError => e
|
231
243
|
content << "**Embedding error**: the file you tried to embed is too big - #{e.message.to_i} bytes."
|
232
244
|
content << " (**Source**: [#{$2}](#{$2}))\n\n"
|
File without changes
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module PageHub
|
2
2
|
module Markdown
|
3
3
|
module ToC
|
4
|
+
FENCED_CODE_BLOCKS = /```[^`]+```/xm
|
4
5
|
|
5
6
|
# Builds a tree of headings from a given block of Markdown
|
6
7
|
# text, the returned list can be turned into HTML using
|
@@ -24,7 +25,7 @@ module Markdown
|
|
24
25
|
headings = []
|
25
26
|
current = []
|
26
27
|
toc_index = 0
|
27
|
-
content.scan(pattern).each { |l, t|
|
28
|
+
content.gsub(FENCED_CODE_BLOCKS, '').scan(pattern).each { |l, t|
|
28
29
|
level,title = formatter.call(l, t)
|
29
30
|
|
30
31
|
if level <= threshold
|
@@ -73,7 +74,7 @@ module Markdown
|
|
73
74
|
def to_html()
|
74
75
|
html = ""
|
75
76
|
html << "<li>"
|
76
|
-
html << "<a href=\"
|
77
|
+
html << "<a href=\"\##{header_anchor(title)}\">" << title << "</a>"
|
77
78
|
|
78
79
|
if children.any? then
|
79
80
|
html << "<ol>"
|
@@ -83,6 +84,12 @@ module Markdown
|
|
83
84
|
|
84
85
|
html << "</li>"
|
85
86
|
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def header_anchor(title)
|
91
|
+
CGI.escapeHTML(title.downcase.gsub(/\s+/, '-'))
|
92
|
+
end
|
86
93
|
end
|
87
94
|
end
|
88
95
|
|
metadata
CHANGED
@@ -1,94 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pagehub-markdown
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Ahmad Amireh
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-08-24 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: redcarpet
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '='
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
19
|
+
version: 3.1.2
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '='
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
26
|
+
version: 3.1.2
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
28
|
+
name: json
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ">="
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
33
|
+
version: '0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
40
|
+
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
42
|
+
name: nokogiri
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '='
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version: 1.
|
47
|
+
version: 1.6.3.1
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '='
|
60
53
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.
|
54
|
+
version: 1.6.3.1
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
56
|
+
name: pygments.rb
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - "~>"
|
68
60
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
61
|
+
version: 0.6.0
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - "~>"
|
76
67
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
68
|
+
version: 0.6.0
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: rspec
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - ">="
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - ">="
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
description: A bunch of extensions added to the Markdown renderer usable as pure Markdown
|
@@ -99,33 +88,33 @@ extensions: []
|
|
99
88
|
extra_rdoc_files: []
|
100
89
|
files:
|
101
90
|
- lib/pagehub-markdown.rb
|
102
|
-
- lib/pagehub-markdown/processors/toc_generator.rb
|
103
|
-
- lib/pagehub-markdown/processors/pagehub_options.rb
|
104
|
-
- lib/pagehub-markdown/processors/embedder.rb
|
105
91
|
- lib/pagehub-markdown/markdown.rb
|
106
92
|
- lib/pagehub-markdown/mutators/date_injector.rb
|
93
|
+
- lib/pagehub-markdown/processors/embedder.rb
|
94
|
+
- lib/pagehub-markdown/processors/pagehub_options.rb
|
95
|
+
- lib/pagehub-markdown/processors/toc_generator.rb
|
107
96
|
homepage: https://github.com/amireh/pagehub-markdown
|
108
97
|
licenses: []
|
98
|
+
metadata: {}
|
109
99
|
post_install_message:
|
110
100
|
rdoc_options: []
|
111
101
|
require_paths:
|
112
102
|
- lib
|
113
103
|
required_ruby_version: !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
104
|
requirements:
|
116
|
-
- -
|
105
|
+
- - ">="
|
117
106
|
- !ruby/object:Gem::Version
|
118
107
|
version: '0'
|
119
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
|
-
none: false
|
121
109
|
requirements:
|
122
|
-
- -
|
110
|
+
- - ">="
|
123
111
|
- !ruby/object:Gem::Version
|
124
112
|
version: '0'
|
125
113
|
requirements: []
|
126
114
|
rubyforge_project:
|
127
|
-
rubygems_version:
|
115
|
+
rubygems_version: 2.2.0
|
128
116
|
signing_key:
|
129
|
-
specification_version:
|
117
|
+
specification_version: 4
|
130
118
|
summary: PageHub's extensions of GitHub's Redcarpet Markdown renderer.
|
131
119
|
test_files: []
|
120
|
+
has_rdoc:
|