jekyll-asciidoc 1.0.1 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.adoc +34 -4
- data/lib/jekyll-asciidoc.rb +63 -69
- data/lib/jekyll-asciidoc/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a32abdc7e23fb224459ef345205b70365abfa35e
|
4
|
+
data.tar.gz: 396e273827b48132964fce3a118a155d53417baf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ea1217c030007a8ec10bfb3d8d8ddfcaff910da7918ee9b7f2a30082d8463ae5ef2cd4ba2741d924a9c131f1623382eaf532ee8eb8dedf25c0bc50202dfb28e
|
7
|
+
data.tar.gz: fc37dfdb7ed1bbd2c4af2302fae3b6837757cb2bf901b56f8ce8279e1e3cea98388a6b856041c50570e848567403aeef2f875221fda7128dbb82a0f37312df2e
|
data/README.adoc
CHANGED
@@ -1,12 +1,30 @@
|
|
1
1
|
= Jekyll AsciiDoc Plugin (powered by Asciidoctor)
|
2
2
|
Paul Rayner <https://github.com/paulrayner[@paulrayner]>; Dan Allen <https://github.com/mojavelinux[@mojavelinux]>
|
3
|
+
// Settings:
|
4
|
+
:idprefix:
|
5
|
+
:idseparator: -
|
6
|
+
ifndef::env-github[:icons: font]
|
7
|
+
ifdef::env-github,env-browser[]
|
3
8
|
:toc: preamble
|
4
9
|
:toclevels: 1
|
5
|
-
|
6
|
-
|
10
|
+
endif::[]
|
11
|
+
ifdef::env-github[]
|
12
|
+
:status:
|
13
|
+
:outfilesuffix: .adoc
|
14
|
+
:!toc-title:
|
15
|
+
:caution-caption: :fire:
|
16
|
+
:important-caption: :exclamation:
|
17
|
+
:note-caption: :paperclip:
|
18
|
+
:tip-caption: :bulb:
|
19
|
+
:warning-caption: :warning:
|
20
|
+
endif::[]
|
7
21
|
|
8
22
|
A plugin for http://jekyllrb.com[Jekyll] that converts http://asciidoc.org[AsciiDoc] files in your site source to HTML pages using http://asciidoctor.org[Asciidoctor].
|
9
23
|
|
24
|
+
ifdef::status[]
|
25
|
+
image::https://img.shields.io/gem/v/jekyll-asciidoc.svg?label=gem%20version[Gem Version, link=https://rubygems.org/gems/jekyll-asciidoc]
|
26
|
+
endif::[]
|
27
|
+
|
10
28
|
== Overview
|
11
29
|
|
12
30
|
The plugin consists of three extensions:
|
@@ -92,7 +110,7 @@ To add a page composed in AsciiDoc, simply add an AsciiDoc file to the root of t
|
|
92
110
|
---
|
93
111
|
---
|
94
112
|
= Sample Page
|
95
|
-
:layout: page
|
113
|
+
:page-layout: page
|
96
114
|
:permalink: /page/
|
97
115
|
|
98
116
|
This is a sample page composed in AsciiDoc.
|
@@ -107,6 +125,9 @@ puts "Hello, World!"
|
|
107
125
|
IMPORTANT: The AsciiDoc file must have a http://jekyllrb.com/docs/frontmatter/[YAML front matter] header or else it won't be recognized as a page.
|
108
126
|
You can use an empty front matter header, as shown above, or you can define all your document metadata (e.g., document title) in the front matter instead of AsciiDoc attributes.
|
109
127
|
|
128
|
+
NOTE: AsciiDoc attributes defined in the document header whose names begin with `page-` are promoted to Jekyll front matter.
|
129
|
+
The part of the name after the `page-` prefix is used as the key (e.g., page-layout becomes layout).
|
130
|
+
|
110
131
|
You can now build your site using:
|
111
132
|
|
112
133
|
$ jekyll build
|
@@ -138,6 +159,15 @@ asciidoc_ext: asciidoc,adoc,ad
|
|
138
159
|
|
139
160
|
The extensions shown in the previous listing are the default values, so you don't need to specify this option if those defaults are sufficient.
|
140
161
|
|
162
|
+
AsciiDoc attributes defined in the document header whose names begin with `page-` are promoted to Jekyll front matter.
|
163
|
+
The part of the name after the `page-` prefix is used as the key (e.g., page-layout becomes layout).
|
164
|
+
If you want to change this attribute prefix, add the following line to your [path]_{empty}_config.yml_:
|
165
|
+
|
166
|
+
[source,yaml]
|
167
|
+
asciidoc_page_attribute_prefix: jekyll
|
168
|
+
|
169
|
+
A hyphen is automatically added to the value of this configuration setting if the value is non-empty.
|
170
|
+
|
141
171
|
To pass additional attributes to AsciiDoc, or override the default attributes defined in the plugin, add the following lines to your [path]_{empty}_config.yml_:
|
142
172
|
|
143
173
|
[source,yaml]
|
@@ -347,7 +377,7 @@ Our recommendation is to keep lobbying for them to enable it.
|
|
347
377
|
|
348
378
|
You can automate publishing of the generated site to GitHub Pages using a continuous integration job.
|
349
379
|
Refer to the tutorial http://eshepelyuk.github.io/2014/10/28/automate-github-pages-travisci.html[Automate GitHub Pages publishing with Jekyll and Travis CI^] to find step-by-step instructions to setup this job.
|
350
|
-
You can also refer to the https://github.com/johncarl81/transfuse
|
380
|
+
You can also refer to the https://github.com/johncarl81/transfuse-site[Tranfuse website build^] for an example in practice.
|
351
381
|
|
352
382
|
Refer to the https://help.github.com/articles/using-jekyll-plugins-with-github-pages[Jekyll Plugins on GitHub Pages] for a list of the plugins currently supported on the server-side (in addition to Markdown, which isn't listed).
|
353
383
|
|
data/lib/jekyll-asciidoc.rb
CHANGED
@@ -3,6 +3,10 @@ JEKYLL_MIN_VERSION_3 = Gem::Version.new(Jekyll::VERSION) >= Gem::Version.new('3.
|
|
3
3
|
module Jekyll
|
4
4
|
module Converters
|
5
5
|
class AsciiDocConverter < Converter
|
6
|
+
IMPLICIT_ATTRIBUTES = %W(
|
7
|
+
env=site env-site site-gen=jekyll site-gen-jekyll builder=jekyll builder-jekyll jekyll-version=#{Jekyll::VERSION}
|
8
|
+
)
|
9
|
+
|
6
10
|
safe true
|
7
11
|
|
8
12
|
highlighter_prefix "\n"
|
@@ -10,45 +14,45 @@ module Jekyll
|
|
10
14
|
|
11
15
|
def initialize(config)
|
12
16
|
@config = config
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
17
|
+
config['asciidoc'] ||= 'asciidoctor'
|
18
|
+
asciidoc_ext = (config['asciidoc_ext'] ||= 'asciidoc,adoc,ad')
|
19
|
+
config['asciidoc_ext_re'] = Regexp.new("\.(#{asciidoc_ext.tr ',', '|'})$", Regexp::IGNORECASE)
|
20
|
+
config['asciidoc_page_attribute_prefix'] ||= 'page'
|
21
|
+
unless (asciidoctor_config = (config['asciidoctor'] ||= {})).frozen?
|
22
|
+
# NOTE convert keys to symbols
|
23
|
+
asciidoctor_config.keys.each do |key|
|
24
|
+
asciidoctor_config[key.to_sym] = asciidoctor_config.delete(key)
|
25
|
+
end
|
26
|
+
asciidoctor_config[:safe] ||= 'safe'
|
27
|
+
(asciidoctor_config[:attributes] ||= []).tap do |attributes|
|
28
|
+
attributes.unshift('notitle', 'hardbreaks', 'idprefix', 'idseparator=-', 'linkattrs')
|
29
|
+
attributes.concat(IMPLICIT_ATTRIBUTES)
|
30
|
+
end
|
31
|
+
asciidoctor_config.freeze
|
25
32
|
end
|
26
|
-
@asciidoctor_config[:attributes].push('env-jekyll')
|
27
33
|
end
|
28
34
|
|
29
35
|
def setup
|
30
36
|
return if @setup
|
37
|
+
@setup = true
|
31
38
|
case @config['asciidoc']
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
raise FatalException.new("Invalid AsciiDoc process: #{@config['asciidoc']}")
|
39
|
+
when 'asciidoctor'
|
40
|
+
begin
|
41
|
+
require 'asciidoctor' unless defined? ::Asciidoctor
|
42
|
+
rescue LoadError
|
43
|
+
STDERR.puts 'You are missing a library required to convert AsciiDoc files. Please run:'
|
44
|
+
STDERR.puts ' $ [sudo] gem install asciidoctor'
|
45
|
+
raise FatalException.new('Missing dependency: asciidoctor')
|
46
|
+
end
|
47
|
+
else
|
48
|
+
STDERR.puts "Invalid AsciiDoc processor: #{@config['asciidoc']}"
|
49
|
+
STDERR.puts ' Valid options are [ asciidoctor ]'
|
50
|
+
raise FatalException.new("Invalid AsciiDoc processor: #{@config['asciidoc']}")
|
45
51
|
end
|
46
|
-
@setup = true
|
47
52
|
end
|
48
53
|
|
49
54
|
def matches(ext)
|
50
|
-
|
51
|
-
ext =~ Regexp.new(rgx, Regexp::IGNORECASE)
|
55
|
+
ext =~ @config['asciidoc_ext_re']
|
52
56
|
end
|
53
57
|
|
54
58
|
def output_ext(ext)
|
@@ -59,18 +63,18 @@ module Jekyll
|
|
59
63
|
setup
|
60
64
|
case @config['asciidoc']
|
61
65
|
when 'asciidoctor'
|
62
|
-
Asciidoctor.
|
66
|
+
Asciidoctor.convert(content, @config['asciidoctor'])
|
63
67
|
else
|
64
68
|
warn 'Unknown AsciiDoc converter. Passing through raw content.'
|
65
69
|
content
|
66
70
|
end
|
67
71
|
end
|
68
72
|
|
69
|
-
def
|
73
|
+
def load_header(content)
|
70
74
|
setup
|
71
75
|
case @config['asciidoc']
|
72
76
|
when 'asciidoctor'
|
73
|
-
Asciidoctor.load(content, :
|
77
|
+
Asciidoctor.load(content, parse_header_only: true)
|
74
78
|
else
|
75
79
|
warn 'Unknown AsciiDoc converter. Cannot load document header.'
|
76
80
|
nil
|
@@ -87,55 +91,45 @@ module Jekyll
|
|
87
91
|
site.find_converter_instance(Jekyll::Converters::AsciiDocConverter) :
|
88
92
|
site.getConverterImpl(Jekyll::Converters::AsciiDocConverter)
|
89
93
|
asciidoc_converter.setup
|
90
|
-
|
91
|
-
|
94
|
+
unless (page_attr_prefix = site.config['asciidoc_page_attribute_prefix']).empty?
|
95
|
+
page_attr_prefix = %(#{page_attr_prefix}-)
|
96
|
+
end
|
97
|
+
page_attr_prefix_l = page_attr_prefix.length
|
98
|
+
|
92
99
|
site.pages.each do |page|
|
93
100
|
if asciidoc_converter.matches(page.ext)
|
94
|
-
doc = asciidoc_converter.
|
95
|
-
next if doc.nil?
|
101
|
+
next unless (doc = asciidoc_converter.load_header(page.content))
|
96
102
|
|
97
|
-
page.data['title']
|
98
|
-
page.data['author'] = doc.author
|
103
|
+
page.data['title'] = doc.doctitle if doc.header?
|
104
|
+
page.data['author'] = doc.author if doc.author
|
99
105
|
|
100
|
-
doc.attributes
|
101
|
-
|
102
|
-
|
103
|
-
|
106
|
+
unless (additional_page_data = SafeYAML.load(doc.attributes
|
107
|
+
.select {|name| name.start_with?(page_attr_prefix) }
|
108
|
+
.map {|name, val| %(#{name[page_attr_prefix_l..-1]}: #{val}) }
|
109
|
+
.join("\n"))).empty?
|
110
|
+
page.data.update(additional_page_data)
|
104
111
|
end
|
105
112
|
|
106
|
-
unless page.data.
|
107
|
-
if doc.attr? 'page-layout'
|
108
|
-
page.data['layout'] ||= doc.attr 'page-layout'
|
109
|
-
else
|
110
|
-
page.data['layout'] ||= 'default'
|
111
|
-
end
|
112
|
-
end
|
113
|
+
page.data['layout'] = 'default' unless page.data.key? 'layout'
|
113
114
|
end
|
114
115
|
end
|
116
|
+
|
115
117
|
(JEKYLL_MIN_VERSION_3 ? site.posts.docs : site.posts).each do |post|
|
116
118
|
if asciidoc_converter.matches(JEKYLL_MIN_VERSION_3 ? post.data['ext'] : post.ext)
|
117
|
-
doc = asciidoc_converter.
|
118
|
-
next if doc.nil?
|
119
|
-
|
120
|
-
post.data['title'] ||= doc.doctitle
|
121
|
-
post.data['author'] = doc.author unless doc.author.nil?
|
122
|
-
# TODO carry over date
|
123
|
-
# setting categories doesn't work here, we lose the post
|
124
|
-
#post.data['categories'] ||= (doc.attr 'categories') if (doc.attr? 'categories')
|
125
|
-
|
126
|
-
doc.attributes.each do |key, val|
|
127
|
-
if key.start_with?(key_prefix)
|
128
|
-
post.data[key[key_prefix_len..-1]] ||= val
|
129
|
-
end
|
130
|
-
end
|
119
|
+
next unless (doc = asciidoc_converter.load_header(post.content))
|
131
120
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
121
|
+
post.data['title'] = doc.doctitle if doc.header?
|
122
|
+
post.data['author'] = doc.author if doc.author
|
123
|
+
post.data['date'] = DateTime.parse(doc.revdate).to_time if doc.attr? 'revdate'
|
124
|
+
|
125
|
+
unless (additional_page_data = SafeYAML.load(doc.attributes
|
126
|
+
.select {|name| name.start_with?(page_attr_prefix) }
|
127
|
+
.map {|name, val| %(#{name[page_attr_prefix_l..-1]}: #{val}) }
|
128
|
+
.join("\n"))).empty?
|
129
|
+
post.data.update(additional_page_data)
|
138
130
|
end
|
131
|
+
|
132
|
+
post.data['layout'] = 'post' unless post.data.key? 'layout'
|
139
133
|
end
|
140
134
|
end
|
141
135
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-asciidoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Allen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|