jekyll-asciidoc 1.1.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 70e3a563b71258539aec7af2a1b3f54f23ee28e2
4
- data.tar.gz: 92794e6be1f68a919b7f668c38420c37cba94194
3
+ metadata.gz: 48f6d28bbd931f1d823e06625ad68b9314cf8836
4
+ data.tar.gz: c59995e13e47e147624ec578d4c42cf5d187953f
5
5
  SHA512:
6
- metadata.gz: 51b0b989d383316e56321c136da7a39fd7ff6356b5c22751a21803427d43b10f120395fd4660fd1e858eb0f2b01006fff0be13d552f3fb6d0577e480ba2ea0ab
7
- data.tar.gz: 9cc3b1abf6401faa525fa5073274b5d7de840608cf894d4c5703eb53913afac970aac15c25bc3ea26f4f05920732523ea41317a811555d5542b3486bc93a99ba
6
+ metadata.gz: f97b51d72a92abc00d2bed80fc561ef74bb26e9022be6204af97dca38830f38bf09f54bd18fc99920e4cacbc171f86e0f238a322f7ec291f3aa0cf56752e5dd2
7
+ data.tar.gz: e1905e712312e6d108de8f79ad69717477d71f33f62b4baf653ca86f7988f80b203172b8e1027070a5a27b20cd23190a052996cc44a4dce3263480963b0f2551
@@ -1,6 +1,6 @@
1
- The MIT License
2
-
3
- Copyright (C) 2013 Dan Allen
1
+ .The MIT License
2
+ ....
3
+ Copyright (C) 2013-2016 Dan Allen and the Asciidoctor Project
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -19,3 +19,4 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
21
  THE SOFTWARE.
22
+ ....
@@ -1,5 +1,6 @@
1
1
  = Jekyll AsciiDoc Plugin (powered by Asciidoctor)
2
- Paul Rayner <https://github.com/paulrayner[@paulrayner]>; Dan Allen <https://github.com/mojavelinux[@mojavelinux]>
2
+ Dan Allen <https://github.com/mojavelinux[@mojavelinux]>; Paul Rayner <https://github.com/paulrayner[@paulrayner]>
3
+ v2.0.0, 2016-07-02
3
4
  // Settings:
4
5
  :idprefix:
5
6
  :idseparator: -
@@ -18,115 +19,188 @@ ifdef::env-github[]
18
19
  :tip-caption: :bulb:
19
20
  :warning-caption: :warning:
20
21
  endif::[]
21
-
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].
22
+ // Aliases:
23
+ :path-config: pass:q[[path]___config.yml__]
24
+ :conum-guard: {sp}
25
+ ifndef::icons[:conum-guard: {sp}#{sp}]
26
+ // URIs:
27
+ :uri-repo: https://github.com/asciidoctor/jekyll-asciidoc
28
+ :uri-issues: {uri-repo}/issues
29
+ :uri-search-issues: {uri-repo}/search?type=Issues
30
+ :uri-chat: https://gitter.im/asciidoctor/asciidoctor
31
+ :uri-ci: https://travis-ci.org/asciidoctor/jekyll-asciidoc
32
+ :uri-gem: http://rubygems.org/gems/jekyll-asciidoc
33
+ :uri-gem-asciidoctor: http://rubygems.org/gems/asciidoctor
34
+ :uri-asciidoc: http://asciidoc.org
35
+ :uri-asciidoctor: http://asciidoctor.org
36
+ :uri-asciidoctor-backends: https://github.com/asciidoctor/asciidoctor-backends
37
+ :uri-asciidoctor-docs: {uri-asciidoctor}/docs
38
+ :uri-asciidoctor-diagram: {uri-asciidoctor-docs}/asciidoctor-diagram
39
+ :uri-asciidoctor-discuss: http://discuss.asciidoctor.org
40
+ :uri-asciidoctor-manual: {uri-asciidoctor-docs}/user-manual
41
+ :uri-asciidoc-practices: {uri-asciidoctor-docs}/asciidoc-recommended-practices
42
+ :uri-jaq: https://github.com/asciidoctor/jekyll-asciidoc-quickstart
43
+ :uri-jekyll: https://jekyllrb.com
44
+ :uri-jekyll-docs: {uri-jekyll}/docs
45
+ :uri-jekyll-discuss: https://talk.jekyllrb.com
46
+ :uri-front-matter: {uri-jekyll-docs}/frontmatter
47
+ :uri-liquid-templates: {uri-jekyll-docs}/templates
48
+ :uri-graphviz: http://www.graphviz.org
49
+ :uri-tilt: https://github.com/rtomayko/tilt
50
+ :uri-yaml: https://en.wikipedia.org/wiki/YAML
51
+ :uri-guide-publish-gem: http://guides.rubygems.org/publishing/#publishing-to-rubygemsorg
23
52
 
24
53
  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]
54
+ image:https://img.shields.io/gem/v/jekyll-asciidoc.svg?label=gem%20version[Gem Version, link={uri-gem}]
55
+ image:https://img.shields.io/travis/asciidoctor/jekyll-asciidoc/master.svg[Build Status (Travis CI), link={uri-ci}]
26
56
  endif::[]
27
57
 
58
+ A plugin for {uri-jekyll}[Jekyll] (>= 2.3.0) that converts {uri-asciidoc}[AsciiDoc] source files in your site to HTML pages using {uri-asciidoctor}[Asciidoctor].
59
+
28
60
  == Overview
29
61
 
30
62
  The plugin consists of three extensions:
31
63
 
32
- `Jekyll::Converters::AsciiDocConverter`::
33
- Converts AsciiDoc files to HTML
34
- `Jekyll::Generators::AsciiDocPreprocessor`::
35
- Promotes select AsciiDoc attributes to Jekyll front matter (e.g., title, author, page-layout)
36
- `Jekyll::Filters.asciidocify`::
37
- A Liquid filter for converting AsciiDoc content to HTML using the AsciiDocConverter
38
-
39
- These extensions are loaded automatically when the jekyll-asciidoc is required.
64
+ Converter -- `Jekyll::AsciiDoc::Converter`::
65
+ Converts AsciiDoc files to HTML pages.
66
+ This plugin currently uses Asciidoctor to convert AsciiDoc content.
40
67
 
41
- == Installation
42
-
43
- The plugin depends on the http://rubygems.org/gems/asciidoctor[asciidoctor] gem.
44
- You can install the gem using:
68
+ Generator -- `Jekyll::AsciiDoc::Integrator`::
69
+ Promotes select AsciiDoc attributes (e.g., title, author, page-layout, page-*) to page variables (merged with the page variables defined in the front matter header).
45
70
 
46
- $ gem install asciidoctor
71
+ Liquid Filter -- `asciidocify`::
72
+ A Liquid filter that uses the converter from this plugin to convert AsciiDoc content to HTML.
47
73
 
48
- If you're using Bundler to manage the dependencies in your Jekyll project, instead add the asciidoctor gem to your [path]_Gemfile_ (beneath the jekyll gem):
74
+ These extensions are registered automatically when the [app]*jekyll-asciidoc* gem is required.
49
75
 
50
- [source,ruby]
51
- ----
52
- source 'https://rubygems.org'
76
+ == Installation
53
77
 
54
- gem 'jekyll'
55
- gem 'asciidoctor'
56
- ----
78
+ This plugin is packaged as a gem named [app]*{uri-gem}[jekyll-asciidoc]* and published to RubyGems.org.
79
+ The plugin depends on the [app]*{uri-gem-asciidoctor}[asciidoctor]* gem, which gets installed automatically.
57
80
 
58
- Then, run the Bundler install command:
81
+ Your method of installation will depend on whether you use Bundler to manage the dependencies for your Jekyll project.
59
82
 
60
- $ bundle install
83
+ === Installation Using Bundler
61
84
 
62
- === Installing a released version of the plugin
63
-
64
- Using Bundler::
65
- +
66
- --
67
- Add the `jekyll-asciidoc` plugin gem to your [path]_Gemfile_
85
+ If you're using Bundler to manage the dependencies for your project (as recommended), simply add the [app]*jekyll-asciidoc* gem to the `:jekyll_plugins` group in your [path]_Gemfile_:
68
86
 
69
87
  [source,ruby]
88
+ ----
70
89
  group :jekyll_plugins do
71
90
  gem 'jekyll-asciidoc'
72
91
  end
92
+ ----
73
93
 
74
- Then, run the Bundler command to install it:
94
+ Then, run the `bundle` command from Bundler to install the gem:
75
95
 
76
- $ bundle install
77
- --
96
+ $ bundle
78
97
 
79
- Without Bundler::
80
- +
81
- --
82
- If you are not using Bundler for managing Jekyll then install gems manually
98
+ === Manual Installation
99
+
100
+ If you're not using Bundler to manage the dependencies for your Jekyll project, you'll need to install the gem manually:
83
101
 
84
- $ gem install jekyll-asciidoc
102
+ $ [sudo] gem install jekyll-asciidoc
85
103
 
86
- And then, add the `jekyll-asciidoc` gem to the list of gems for Jekyll to load in your site's [path]_{empty}_config.yml_ file:
104
+ NOTE: The `sudo` prefix is only required if you are installing gems into your system.
105
+ To avoid this bad practice, we recommend using RVM (or another Ruby version manager), which sets up Ruby safely in your home directory.
106
+
107
+ Then add the [app]*jekyll-asciidoc* gem to the list of gems for Jekyll to load in your site's {path-config} file:
87
108
 
88
109
  [source,yaml]
110
+ ----
89
111
  gems:
90
112
  - jekyll-asciidoc
91
- --
92
-
93
- === Installing development version of the plugin
94
-
95
- To install the development version of this plugin, use:
96
-
97
- $ rake install
113
+ ----
98
114
 
99
- An alternative--though not recommend--approach is to copy the file [path]_lib/jekyll-asciidoc.rb_ to the [path]_{empty}_plugins_ directory in the root of your site source.
115
+ == Creating Pages
100
116
 
101
- NOTE: If the [path]_{empty}_plugins_ directory does not exist, you need to first create it.
117
+ This plugin converts eligible AsciiDoc files located inside the source directory (by default, the project root) to HTML pages in the generated site.
118
+ There are a few conditions that must be met in order for an AsciiDoc file to be eligible:
102
119
 
103
- == Creating pages
120
+ . The file must have an AsciiDoc file extension (see <<configuration>>).
121
+ . The name of the file must not begin with a dot (`.`) or an underscore (`_`).footnoteref:[excluded_files,Hidden files and folders are automatically excluded by Jekyll.]
122
+ . The file must not be located in a folder whose name begins with a dot (`.`) or an underscore (`_`) (unless the folder is a designated collection, such as _posts).footnoteref:[excluded_files]
123
+ . With the exception of posts, documents must begin with a {uri-front-matter}[front matter header] if using a version of this plugin < 2.0.0.
124
+ Since version 2.0.0 of this plugin, the front matter header is always optional.
104
125
 
105
- To add a page composed in AsciiDoc, simply add an AsciiDoc file to the root of the project with an AsciiDoc file extension.
126
+ Here's a sample AsciiDoc file that meets these criteria:
106
127
 
107
128
  .sample.adoc
108
- [listing]
109
- ....
129
+ [source,asciidoc]
130
+ ----
110
131
  ---
132
+ layout: info
133
+ permalink: /sample/
111
134
  ---
112
135
  = Sample Page
113
- :page-layout: page
114
- :permalink: /page/
136
+ :uri-asciidoctor: http://asciidoctor.org
115
137
 
116
138
  This is a sample page composed in AsciiDoc.
117
- Jekyll converts it to HTML using http://asciidoctor.org[Asciidoctor].
139
+ Jekyll converts it to HTML using {uri-asciidoctor}[Asciidoctor].
118
140
 
119
141
  [source,ruby]
142
+ puts "Hello, World!"
120
143
  ----
144
+
145
+ Alternatively, you can define the page variables directly in the AsciiDoc header, which we recommend:
146
+
147
+ .sample.adoc
148
+ [source,asciidoc]
149
+ ----
150
+ = Sample Page
151
+ :page-layout: info
152
+ :page-permalink: /sample/
153
+ :uri-asciidoctor: http://asciidoctor.org
154
+
155
+ This is a sample page composed in AsciiDoc.
156
+ Jekyll converts it to HTML using {uri-asciidoctor}[Asciidoctor].
157
+
158
+ [source,ruby]
121
159
  puts "Hello, World!"
122
160
  ----
123
- ....
124
161
 
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.
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.
162
+ AsciiDoc attributes defined in the document header whose names begin with ``page-``footnote:[The prefix used to label page attributes can be customized.] get promoted to page variables.
163
+ The part of the name after the `page-` prefix is used as the entry's key (e.g., page-layout becomes layout) and the value is interpeted as {uri-yaml}[YAML] data (that which can be expressed in a single line).
127
164
 
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).
165
+ The most commonly defined page variable is layout, which determines which template is used to wrap the generated content.
166
+ Jekyll will look for a template file inside the [path]_{empty}_layouts_ folder whose root name matches the name of the layout.
167
+ For example, if the layout variable has the value `info`, Jekyll looks for a layout template at the path [path]__layout/info.html_.
168
+
169
+ If the layout is empty, the auto-selected layout layout is used (documented in the list below).
170
+ If the layout is unset or `false`, the AsciiDoc processor will generate a standalone document.
171
+ In this case, the page will appear like an HTML file generated by the AsciiDoc processor directly (with the option `header_footer: true`).
172
+ If the layout is ~, no layout is applied.
173
+
174
+ To review, here are the different ways to specify a layout using the AsciiDoc attribute page-layout:
175
+
176
+ * `:page-layout: info` -- use the layout named `info` (e.g., [path]__layout/info.html_)
177
+ * _not specified_, `:page-layout:` or `:page-layout: _auto` -- use the automatic layout (i.e., `page` for pages, `post` for posts, the singular form of the collection label for a document; if the auto-selected layout isn't available, the layout `default` is used)
178
+ * `:!page-layout:` or `:page-layout: false` -- don't use a layout; instead, generate a standalone HTML document
179
+ * `:page-layout: ~` -- don't use a layout (often results in an incomplete HTML file)
180
+
181
+ In addition to page attributes defined explicitly, the following implicit AsciiDoc attributes are also promoted to page variables:
182
+
183
+ * doctitle (i.e., the document title) (becomes title)
184
+ * author
185
+ * revdate (becomes date; value is converted to a DateTime object; only for posts)
186
+
187
+ Unlike other content files, the {uri-liquid-templates}[Liquid template preprocessor] is not applied to AsciiDoc files by default (as of version 2.0.0 of this plugin).
188
+ If you want the Liquid template preprocessor to be applied to an AsciiDoc file (prior to the content being passed to the AsciiDoc processor), you must enable it by setting the `liquid` page variable (shown here defined using a page attribute).
189
+
190
+ [source,asciidoc]
191
+ ----
192
+ :page-liquid:
193
+ ----
194
+
195
+ IMPORTANT: AsciiDoc files may include a {uri-front-matter}[front matter header] for defining page variables.
196
+ If present, the front matter header must be the very first character of the file.
197
+ The front matter header won't be seen--and could distort conversion--if the front matter is preceded by whitespace or a Byte Order Mark (BOM).
198
+
199
+ NOTE: As of version 2.0.0 of this plugin, you may exclude the front matter header, as shown in the second example above.
200
+ Prior to version 2.0.0, you had to include at least an empty front matter header (except for posts).
201
+ In these cases, you define all the page variables (e.g., layout) using AsciiDoc page attributes instead of in the front matter.
202
+ You can also use a combination of both.
203
+ When intermixed, the page attributes defined in the AsciiDoc header take precedence.
130
204
 
131
205
  You can now build your site using:
132
206
 
@@ -136,83 +210,325 @@ and preview it using:
136
210
 
137
211
  $ jekyll serve
138
212
 
139
- If you are using Bundler then use following commands to do the same
213
+ If you're using Bundler, then prefix the commands with `bundle exec`, as in:
140
214
 
141
215
  $ bundle exec jekyll build
142
- $ bundle exec jekyll serve
216
+
217
+ To see a report of all the files that are processed, add the `--verbose` flag:
218
+
219
+ $ jekyll build --verbose
220
+
221
+ If an AsciiDoc file is not listed, then likely Jekyll did not find a {uri-front-matter}[front matter header].
143
222
 
144
223
  IMPORTANT: If you use the `--safe` option, the AsciiDoc plugin will not be activated.
145
224
  The `--safe` flag disables third-party plugins such as this one.
146
225
 
147
- == Configuration (optional)
226
+ == Configuration
227
+
228
+ This section describes the configuration options for this plugin, which are _optional_.
229
+
230
+ You should at least assign an empty Hash as a default (e.g., `{}`) to the `asciidoc` and `asciidoctor` keys in {path-config}, respectively, if you don't plan on making any further customizations.
231
+
232
+ [source,yaml]
233
+ ----
234
+ asciidoc: {}
235
+ asciidoctor: {}
236
+ ----
237
+
238
+ Using these placeholder values is an optimization that prevents initialization from being performed more than once.
239
+
240
+ === AsciiDoc
241
+
242
+ NOTE: Prior to version 2.0.0 of this plugin, the configuration keys in this section were defined as flat, top-level names (e.g., `asciidoc_ext`).
243
+ These names are now deprecated, but still supported.
148
244
 
149
245
  By default, this plugin uses Asciidoctor to convert AsciiDoc files.
150
- Since Asciidoctor is the only option, the default setting is equivalent to the following configuration in [path]_{empty}_config.yml_:
246
+ Since Asciidoctor is currently the only option, the default setting is equivalent to the following configuration in {path-config}:
151
247
 
152
248
  [source,yaml]
153
- asciidoc: asciidoctor
249
+ ----
250
+ asciidoc:
251
+ processor: asciidoctor
252
+ ----
154
253
 
155
- To tell Jekyll which extensions to recognize as AsciiDoc files, add the following line to your [path]_{empty}_config.yml_:
254
+ IMPORTANT: The `asciidoc` block should only appear _once_ inside {path-config}.
255
+ If you define any other options that are documented in this section, you should append them to the `asciidoc` block.
256
+
257
+ To tell Jekyll which file extensions to match as AsciiDoc files, append the `ext` option to the `asciidoc` block of your {path-config}:
156
258
 
157
259
  [source,yaml]
158
- asciidoc_ext: asciidoc,adoc,ad
260
+ ----
261
+ asciidoc:
262
+ ext: asciidoc,adoc,ad
263
+ ----
159
264
 
160
265
  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.
161
266
 
162
- AsciiDoc attributes defined in the document header whose names begin with `page-` are promoted to Jekyll front matter.
267
+ AsciiDoc attributes defined in the document header whose names begin with `page-` are promoted to page variables.
163
268
  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_:
269
+ If you want to change this attribute prefix, append the `page_attribute_prefix` option to the `asciidoc` block of your {path-config}:
165
270
 
166
271
  [source,yaml]
167
- asciidoc_page_attribute_prefix: jekyll
272
+ ----
273
+ asciidoc:
274
+ page_attribute_prefix: jekyll
275
+ ----
168
276
 
169
277
  A hyphen is automatically added to the value of this configuration setting if the value is non-empty.
170
278
 
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_:
279
+ Since version 2.0.0 of this plugin, all non-hidden AsciiDoc files are processed by default, even those without a front matter header.
280
+ If you only want files containing a front matter header to be processed (as was the behavior prior to version 2.0.0), add the `require_front_matter_header` option to the `asciidoc` block of your {path-config}:
172
281
 
173
282
  [source,yaml]
283
+ ----
284
+ asciidoc:
285
+ require_front_matter_header: true
286
+ ----
287
+
288
+ === Asciidoctor
289
+
290
+ In addition to the built-in attributes in AsciiDoc, the following additional AsciiDoc attributes are automatically defined by this plugin and available to all AsciiDoc-based pages:
291
+
292
+ ....
293
+ site-root=(absolute path of root directory)
294
+ site-source=(absolute path of source directory)
295
+ site-destination=(absolute path of output directory)
296
+ site-baseurl=(value of the baseurl config option)
297
+ site-url=(value of the url config option)
298
+ env=site
299
+ env-site
300
+ site-gen=jekyll
301
+ site-gen-jekyll
302
+ builder=jekyll
303
+ builder-jekyll
304
+ jekyll-version=(value of the Jekyll::VERSION constant)
305
+ idprefix
306
+ idseparator=-
307
+ linkattrs=@
308
+ ....
309
+
310
+ The following attributes are defined per page:
311
+
312
+ ....
313
+ outpath=(path of page relative to baseurl)
314
+ ....
315
+
316
+ You can pass additional attributes to AsciiDoc, or override default attributes provided by the plugin, by using the `attributes` option of the `asciidoctor` block in your {path-config}.
317
+ The value of this option can either be an Array containing key-value pairs:
318
+
319
+ [source,yaml]
320
+ ----
174
321
  asciidoctor:
175
322
  attributes:
176
- - hardbreaks!
323
+ - idprefix=_
177
324
  - source-highlighter=pygments
178
325
  - pygments-css=style
326
+ ----
327
+
328
+ or key-value pairs defined as a Hash:
329
+
330
+ [source,yaml]
331
+ ----
332
+ asciidoctor:
333
+ attributes:
334
+ idprefix: _
335
+ source-highlighter: pygments
336
+ pygments-css: style
337
+ ----
338
+
339
+ You may use attribute references in the attribute value to reference any implicit or already defined attribute.
340
+ For example, to set the `iconsdir` attribute based on the `imagesdir` attribute, use the following:
341
+
342
+ [source,yaml]
343
+ ----
344
+ asciidoctor:
345
+ attributes:
346
+ imagesdir: /images
347
+ iconsdir: '{imagesdir}/icons'
348
+ ----
349
+
350
+ CAUTION: If the value begins with an attribute reference, and you are defining the attributes using the Hash structure, you must enclose the value in quotes.
351
+
352
+ In addition to `attributes`, you can define any another option key (e.g., `safe`) that is recognized by the {uri-asciidoctor-manual}#ruby-api-options[Asciidoctor API].
353
+
354
+ ==== Specifying the Base Directory
355
+
356
+ In Asciidoctor, the base directory (i.e., `base_dir` option) is used as the root when resolving non-nested, relative includes, among other paths.
357
+
358
+ By default, this plugin does not specify a base directory when invoking the Asciidoctor API.
359
+ Asciidoctor will therefore use the current working directory (i.e., the project root) as the base directory.
360
+
361
+ If your source directory is not the project root, and you want Asciidoctor to use the source directory as the base directory, set the value of the `base_dir` option to `:source`.
362
+
363
+ [source,yaml]
364
+ ----
365
+ asciidoctor:
366
+ base_dir: :source
367
+ ...
368
+ ----
369
+
370
+ If, instead, you want the base directory to track the directory of the document being processed, and you're using Jekyll 3 or better, you can set the value of the `base_dir` option to `:docdir`.
371
+ Since the base directory is also the jail, we also recommend setting the `safe` option to `unsafe` so that you can still resolve paths outside of this directory.
372
+
373
+ [source,yaml]
374
+ ----
375
+ asciidoctor:
376
+ base_dir: :docdir
377
+ safe: unsafe
378
+ ...
379
+ ----
380
+
381
+ IMPORTANT: The `:docdir` setting is not available when using Jekyll 2.
179
382
 
180
- === Disabling hard line breaks
383
+ You can also set the `base_dir` option to any relative or absolute path.
384
+ In that case, the same value will be used for all documents.
181
385
 
182
- The Jekyll AsciiDoc integration is configured to preserve hard line breaks in paragraph content by default.
183
- Since many Jekyll users are used to writing in GitHub-flavored Markdown (GFM), this default was selected to ease the transition to AsciiDoc.
184
- If you want the standard AsciiDoc behavior of collapsing hard line breaks in paragraph content, add the following settings to your site's [path]_{empty}_config.yml_ file:
386
+ ==== Enabling Hard Line Breaks
387
+
388
+ Many Jekyll users are used to writing in GitHub-flavored Markdown (GFM), which preserves hard line breaks in paragraph content.
389
+ Asciidoctor supports this feature for AsciiDoc files.
390
+ (In fact, previous versions of this plugin enabled this behavior by default).
391
+ If you want to enable this behavior for AsciiDoc files, add the `hardbreaks-option` attribute to the Asciidoctor attributes configuration in your site's {path-config} file:
185
392
 
186
393
  [source,yaml]
394
+ ----
187
395
  asciidoctor:
188
396
  attributes:
189
- - hardbreaks!
397
+ - hardbreaks-option
398
+ ----
399
+
400
+ If you want to allow individual files to override this setting, then assign the value `@` to the attribute:
401
+
402
+ [source,yaml]
403
+ ----
404
+ asciidoctor:
405
+ attributes:
406
+ - hardbreaks-option=@
407
+ ----
408
+
409
+ If you already have AsciiDoc attributes defined in the {path-config}, the new attribute should be added as a sibling entry in the YAML collection.
410
+
411
+ WARNING: Keep in mind, if you enable hard line breaks, you won't be able to use the {uri-asciidoc-practices}#one-sentence-per-line[one sentence-per-line writing technique].
412
+
413
+ == Running in Safe Mode
414
+
415
+ If you want to use this plugin when running Jekyll in safe mode, you must add the [app]*jekyll-asciidoc* gem to the whitelist in your site's {path-config} file:
190
416
 
191
- If you already have AsciiDoc attributes defined in the [path]_{empty}_config.yml_, the `hardbreaks!` attribute should be added as a sibling entry in the YAML collection.
417
+ [source,yaml]
418
+ ----
419
+ whitelist:
420
+ - jekyll-asciidoc
421
+ ----
422
+
423
+ Safe mode is enabled either through the `--safe` flag:
424
+
425
+ $ jekyll build --safe
426
+
427
+ or the `safe` configuration option in your site's {path-config} file:
428
+
429
+ [source,yaml]
430
+ ----
431
+ safe: true
432
+ ----
433
+
434
+ == Customizing the Generated HTML
435
+
436
+ You can use templates to customize the HTML output that Asciidoctor generates for your site.
437
+ Template files can be composed in any templating language that is supported by {uri-tilt}[Tilt].
438
+ Each template file corresponds to a node in the AsciiDoc document tree (aka AST).
439
+
440
+ Below are the steps you need to take to configure Asciidoctor to use custom templates with your site.
441
+
442
+ === Step 1: Add Required Gems
443
+
444
+ You'll first need to add the thread_safe gem as well as the gem for the templating language you plan to use.
445
+ We'll assume that you are using Slim.
446
+
447
+ [source,ruby]
448
+ ----
449
+ gem 'slim', '~> 3.0.7'
450
+ gem 'thread_safe', '~> 0.3.5'
451
+ ----
452
+
453
+ === Step 2: Install New Gems
454
+
455
+ Now run the `bundle` command to install the new gems.
456
+
457
+ $ bundle
192
458
 
193
- == Enabling Asciidoctor Diagram (optional)
459
+ === Step 3: Create a Templates Folder
194
460
 
195
- Asciidoctor Diagram is a set of extensions for Asciidoctor that allow you to embed diagrams written using the PlantUML, Graphviz, ditaa, or Shaape syntax inside your AsciiDoc documents.
461
+ Next, create a new folder in your site named [path]__templates_ to store your templates.
462
+
463
+ $ mkdir _templates
464
+
465
+ === Step 4: Configure Asciidoctor to Load Templates
466
+
467
+ In your site's {path-config} file, configure Asciidoctor to load the templates by telling it the location where the templates are stored.
468
+
469
+ [source,yaml]
470
+ ----
471
+ asciidoctor:
472
+ template_dir: _templates
473
+ attributes: ...
474
+ ----
475
+
476
+ === Step 5: Compose a Template
477
+
478
+ The final step is to compose a template.
479
+ We'll be customizing the unordered list node.
480
+ Name the file [path]_ulist.html.slim_.
481
+
482
+ .ulist.html.slim
483
+ [source,slim]
484
+ ----
485
+ - if title?
486
+ figure.list.unordered id=id
487
+ figcaption=title
488
+ ul class=[style, role]
489
+ - items.each do |_item|
490
+ li
491
+ span.primary=_item.text
492
+ - if _item.blocks?
493
+ =_item.content
494
+ - else
495
+ ul id=id class=[style, role]
496
+ - items.each do |_item|
497
+ li
498
+ span.primary=_item.text
499
+ - if _item.blocks?
500
+ =_item.content
501
+ ----
502
+
503
+ The next time you build your site, Asciidoctor will use your custom template to generate the HTML for unordered lists.
504
+
505
+ TIP: You can find additional examples of custom templates in the {uri-asciidoctor-backends}[asciidoctor-backends] repository.
506
+
507
+ == Enabling Asciidoctor Diagram
508
+
509
+ {uri-asciidoctor-diagram}[Asciidoctor Diagram] is a set of extensions for Asciidoctor that allow you to embed diagrams generated by PlantUML, Graphviz, ditaa, Shaape, and other plain-text diagram tools inside your AsciiDoc documents.
510
+ In order to use Asciidoctor Diagram in a Jekyll project successfully, *you must use Jekyll >= 3.0.0 and a version of this plugin >= 2.0.0*.
511
+ Other combinations are known to have issues.
196
512
 
197
513
  [IMPORTANT]
198
- For Graphviz and PlantUML diagram generation, http://www.graphviz.org[Graphviz] must be installed (i.e., the `dot` utility must be available on your `$PATH`.
514
+ For Graphviz and PlantUML diagram generation, {uri-graphviz}[Graphviz] must be installed (i.e., the `dot` utility must be available on your `$PATH`.
199
515
 
200
516
  === Installation
201
517
 
202
518
  Using Bundler::
203
519
  +
204
520
  --
205
- Add `asciidoctor-diagram` gem to your [path]_Gemfile_
521
+ Add `asciidoctor-diagram` gem to your [path]_Gemfile_:
206
522
 
207
- [source,ruby]
523
+ [source,ruby,subs=attributes+]
208
524
  ----
209
525
  group :jekyll_plugins do
210
- ....
211
- gem 'asciidoctor-diagram', '>= 1.3.1' <1>
526
+ gem 'asciidoctor-diagram', '~> 1.4.0' #{conum-guard}<1>
527
+ gem 'jekyll-asciidoc'
212
528
  ...
213
529
  end
214
530
  ----
215
- <1> version can be configured differently
531
+ <1> Customize the version of Asciidoctor Diagram as needed.
216
532
 
217
533
  Then, run the Bundler command to install it:
218
534
 
@@ -224,74 +540,156 @@ Without Bundler::
224
540
  --
225
541
  Install gems manually
226
542
 
227
- $ gem install asciidoctor-diagram
543
+ $ [sudo] gem install asciidoctor-diagram
228
544
 
229
- Then, add the `asciidoctor-diagram` gem to the list of gems for Jekyll to load in your site's [path]_{empty}_config.yml_ file:
545
+ Then, add the `asciidoctor-diagram` gem to the list of gems for Jekyll to load in your site's {path-config} file:
230
546
 
231
547
  [source,yaml]
548
+ ----
232
549
  gems:
233
550
  - asciidoctor-diagram
551
+ - jekyll-asciidoc
552
+ ----
234
553
  --
235
554
 
236
- Both of the previous configurations are the equivalent of passing `-r asciidoctor-diagram` to the `asciidoctor` command.
555
+ The preceding configurations are equivalent to passing `-r asciidoctor-diagram` to the `asciidoctor` command.
556
+
557
+ === Generated Image Location
237
558
 
238
- === Generated image location
559
+ Asciidoctor Diagram needs some context in order to write the images to the proper location.
560
+ At a minimum, you must set the following configuration in {path-config}:
239
561
 
240
- By default diagram images are generated in the root folder.
241
- Thus, images URLs are not properly referenced from the generated HTML pages.
562
+ [source,yaml]
563
+ ----
564
+ asciidoctor:
565
+ base_dir: :docdir
566
+ safe: unsafe
567
+ ----
242
568
 
243
- To fix this, set the `imagesdir` attribute in any AsciiDoc file that contains diagrams.
569
+ With this configuration, Asciidoctor Diagram will generate images relative to the generated HTML page (i.e., into the same directory).
244
570
 
245
- ._posts/2015-12-24-diagrams.adoc
246
- [listing]
247
- ....
248
- ---
249
- ---
250
- = Diagrams
251
- :imagesdir: /images/2015-12-24 <1>
571
+ You can use the following example to test your setup:
252
572
 
253
- [graphviz, dot-example, svg]
573
+ ._posts/2016-01-01-diagram-sample.adoc
574
+ [source,asciidoc]
254
575
  ----
576
+ = Diagram Sample
577
+
578
+ [graphviz,dot-example,svg]
579
+ ....
255
580
  digraph g {
256
581
  a -> b
257
582
  b -> c
258
583
  c -> d
259
584
  d -> a
260
585
  }
261
- ----
262
586
  ....
263
- <1> the date in the imagesdir value must match the date of the post (e.g., 2015-12-24)
587
+ ----
588
+
589
+ If you prefer to serve all images from the same folder, assign a value to the `imagesdir` attribute that is relative to the site root:
590
+
591
+ [source,yaml]
592
+ ----
593
+ asciidoctor:
594
+ base_dir: :docdir
595
+ safe: unsafe
596
+ attributes:
597
+ imagesdir: /images
598
+ ----
599
+
600
+ With this configuration, all images will be generated into the [path]_images_ directory inside the destination folder.
601
+
602
+ ==== Preserving Generated Images
603
+
604
+ Since Asciidoctor Diagram writes to the output folder, you have instruct Jekyll not to remove these generated files.
605
+ One way to do this is to apply a "`monkeypatch`" to Jekyll.
606
+ Add the file [path]_jekyll-ext.rb_ to the [path]__plugins_ folder of your project root (creating the folder if it does not already exist) and populate the file with the following content:
607
+
608
+ ._plugins/jekyll-ext.rb
609
+ [source,ruby]
610
+ ----
611
+ class Jekyll::Cleaner
612
+ def cleanup!; end
613
+ end
614
+ ----
264
615
 
265
- WARNING: The images are generated after Jekyll copies assets to the [path]_{empty}_site_ directory.
266
- Therefore, you'll have to run `jeykll` twice before you see the images in the preview.
616
+ An alternative to the monkeypath approach is to identify folders that contain generated images in the `keep_files` option in {path-config}:
617
+
618
+ [source,yaml]
619
+ ----
620
+ keep_files: [images]
621
+ asciidoctor:
622
+ base_dir: :docdir
623
+ safe: unsafe
624
+ attributes:
625
+ imagesdir: /images
626
+ ----
267
627
 
268
- == Supplemental AsciiDoc Assets
628
+ == Adding Supplemental Assets
269
629
 
270
630
  Certain Asciidoctor features, such as icons, require additional CSS rules and other assets to work.
271
631
  These CSS rules and other assets do not get automatically included in the pages generated by Jekyll.
272
632
  This section documents how to configure these additional resources.
273
633
 
274
- TIP: If you want to take a shortcut that skips all this configuration, clone the https://github.com/asciidoctor/jekyll-asciidoc-quickstart[Jekyll AsciiDoc Quickstart (JAQ)] repository and use it as a starting point for your site.
634
+ TIP: If you want to take a shortcut that skips all this configuration, clone the {uri-jaq}[Jekyll AsciiDoc Quickstart (JAQ)] repository and use it as a starting point for your site.
275
635
  JAQ provides a page layout out of the box configured to fully style body content generated from AsciiDoc.
276
636
 
277
637
  === Setup
278
638
 
279
639
  The Jekyll AsciiDoc plugin converts AsciiDoc to embeddable HTML.
280
640
  This HTML is then inserted into the page layout.
281
- You need to augment the page layout to include resources typically present in a standalone HTML document that Asciidoctor produces.
641
+ You need to augment the layout to include resources typically present in a standalone HTML document that Asciidoctor produces.
282
642
 
283
643
  . Create a stylesheet in the [path]_css_ directory named [path]_asciidoc.css_ to hold additional CSS for body content generated from AsciiDoc.
284
644
  . Add this stylesheet to the HTML `<head>` in [path]_{empty}_includes/head.html_ under the main.css declaration:
285
645
  +
286
646
  [source,html]
647
+ ----
287
648
  <link rel="stylesheet" href="{{ "/css/asciidoc.css" | prepend: site.baseurl }}">
649
+ ----
650
+
651
+ === Stylesheet for Code Highlighting
652
+
653
+ Asciidoctor integrates with Pygments to provide code highlighting of source blocks in AsciiDoc content.
654
+ This integration is separate from the Pygments integration in Jekyll.
655
+ As part of this integration, Asciidoctor generates a custom stylesheet tailored specially to work with the HTML that Asciidocotor produces.
656
+ Since this stylesheet is backed by the Pygments API, it provides access to all the themes in Pygments
657
+
658
+ This plugin will automatically generate a stylesheet for Pygments into the source directory if the AsciiDoc attributes in your site's {path-config} are configured as follows:
659
+
660
+ * `source-highlighter` has the value `pygments`
661
+ * `pygments-css` has the value `class` or is not set
662
+ * `pygments-stylesheet` is not unset (if set, it can have any value)
663
+
664
+ By default, the stylesheet is written to `stylesdir` + `pygments-stylesheet`.
665
+ If the `pygments-stylesheet` attribute is not specified, the value defaults to `asciidoc-pygments.css`.
666
+ You can customize this value to your liking.
667
+
668
+ The Pygments theme is selected by the value of the `pygments-style` attribute.
669
+ If this attribute is not set, it defaults to `vs`.
670
+
671
+ The stylesheet file will be created if it does not yet exist or the theme has been changed.
672
+ Jekyll will handle copying the file to the output directory.
673
+
674
+ You'll need to add a line to your template to link to this stylesheet, such as:
675
+
676
+ [source,html]
677
+ ----
678
+ <link rel="stylesheet" href="{{ "/css/asciidoc-pygments.css" | prepend: site.baseurl }}">
679
+ ----
680
+
681
+ To disable this feature, either set the `pygments-css` to `style` (to enable inline styles) or unset the `pygments-stylesheet` attribute in your site's {path-config}.
682
+
683
+ NOTE: It may still be necessary to make some tweaks to your site's stylesheet to accomodate this integration.
288
684
 
289
685
  === Font-based Admonition and Inline Icons
290
686
 
291
687
  To enable font-based admonition and inline icons, you first need to add Font Awesome to [path]_{empty}_includes/head.html_ file under the asciidoc.css declaration:
292
688
 
293
689
  [source,html]
690
+ ----
294
691
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css">
692
+ ----
295
693
 
296
694
  NOTE: You can also link to local copy of Font Awesome.
297
695
 
@@ -338,15 +736,20 @@ Feel free to modify the CSS to your liking.
338
736
 
339
737
  Finally, you need to enable the font-based icons in the header of the document:
340
738
 
341
- :icons: font
739
+ [source,asciidoc]
740
+ ----
741
+ :icons: font
742
+ ----
342
743
 
343
744
  or in the site configuration:
344
745
 
345
746
  [source,yaml]
747
+ ----
346
748
  asciidoctor:
347
749
  attributes:
348
750
  - icons=font
349
751
  ...
752
+ ----
350
753
 
351
754
  === Image-based Admonition and Inline Icons
352
755
 
@@ -355,33 +758,310 @@ In this case, all you need to do is provide the icons at the proper location.
355
758
 
356
759
  First, enable image-based icons and configure the path to the icons in the header of the document:
357
760
 
358
- :icons:
359
- :iconsdir: /images/icons
761
+ [source,asciidoc]
762
+ ----
763
+ :icons:
764
+ :iconsdir: /images/icons
765
+ ----
360
766
 
361
767
  or your site configuration:
362
768
 
363
769
  [source,yaml]
770
+ ----
364
771
  asciidoctor:
365
772
  attributes:
366
773
  - icons
367
774
  - iconsdir=/images/icons
775
+ ----
368
776
 
369
777
  Then, simply put the icon images that the page needs in the [path]_images/icons_ directory.
370
778
 
371
- == GitHub Pages
779
+ == Converting AsciiDoc in Templates
780
+
781
+ Jekyll uses the Liquid templating language to process templates.
782
+ This plugin defines an additional filter named `asciidocify` for converting a string of AsciiDoc.
783
+
784
+ Let's assume the excerpt of the post is written in AsciiDoc.
785
+ You can convert it in your template as follows:
786
+
787
+ ----
788
+ {{ post.excerpt | asciidocify }}
789
+ ----
790
+
791
+ If you only want to perform inline substitutions on the content, add the `inline` doctype as the first argument:
792
+
793
+ ----
794
+ {{ post.excerpt | asciidocify: 'inline' }}
795
+ ----
796
+
797
+ This filter allows you to compose site-wide data in AsciiDoc, such your site's description or synopsis, then convert it to HTML for use in the page template(s).
798
+
799
+ == Using this Plugin on GitHub Pages
372
800
 
373
- GitHub doesn't (yet) whitelist the AsciiDoc plugin, so you can only run it on your own machine.
801
+ GitHub doesn't (yet) whitelist the AsciiDoc plugin, so you must run Jekyll either on your own computer or on a continuous integration (CI) server.
374
802
 
375
- TIP: GitHub needs to hear from enough users that they want to plugin in order to enable it.
376
- Our recommendation is to keep lobbying for them to enable it.
803
+ [IMPORTANT]
804
+ ====
805
+ GitHub needs to hear from enough users that need this plugin to persuade them to enable it.
806
+ Our recommendation is to https://github.com/contact[contact support] and keep asking for it.
807
+
808
+ Refer to the help page https://help.github.com/articles/adding-jekyll-plugins-to-a-github-pages-site/[Adding Jekyll Plugins to a GitHub Pages site] for a list of plugins currently supported on GitHub Pages.
809
+ ====
377
810
 
378
811
  You can automate publishing of the generated site to GitHub Pages using a continuous integration job.
379
812
  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.
380
813
  You can also refer to the https://github.com/johncarl81/transfuse-site[Tranfuse website build^] for an example in practice.
381
814
 
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).
815
+ TIP: If you want to take a shortcut that skips all the steps in the tutorial, clone the {uri-jaq}[Jekyll AsciiDoc Quickstart (JAQ)] repository and use it as a starting point for your site.
816
+ JAQ provides a page layout out of the box configured to fully style body content generated from AsciiDoc.
817
+
818
+ == Using this Plugin on GitLab Pages
819
+
820
+ Deployment to GitLab Pages is much simpler.
821
+ That's because GitLab allows you to control the execution of Jekyll yourself.
822
+ There's no need to mess around with CI jobs and authentication tokens.
823
+ You can find all about how to use Jekyll with GitLab Pages in the tutorial https://about.gitlab.com/2016/04/07/gitlab-pages-setup/#option-b-gitlab-ci-for-jekyll-websites[Hosting on GitLab.com with GitLab Pages].
824
+
825
+ Assuming the following are true:
826
+
827
+ . The source of your site resides on the master branch.
828
+ . You're using Bundler to manage the dependencies for your project.
829
+
830
+ then you can use the following [path]_.gitlab-ci.yml_ file to get starting hosting your Jekyll site on GitLab Pages.
831
+
832
+ .gitlab-ci.yml
833
+ [source,yaml]
834
+ ----
835
+ image: ruby:2.3
836
+ cache:
837
+ paths:
838
+ - .bundle
839
+ before_script:
840
+ - bundle --path .bundle/gems
841
+ pages:
842
+ script:
843
+ - bundle exec jekyll build -d public --config _config.yml,_config-gitlab.yml -q
844
+ artifacts:
845
+ paths:
846
+ - public
847
+ only:
848
+ - master
849
+ ----
850
+
851
+ This script runs Jekyll on the official Ruby Docker container.
852
+
853
+ You also need to add and additional configuration file, [path]__config-gitlab.yml_, to set the `url` and `baseurl` options when deploying your site to GitLab Pages.
854
+
855
+ ._config-gitlab.yml
856
+ [source,yaml,subs=attributes+]
857
+ ----
858
+ url: https://<username>.gitlab.io #{conum-guard}<1>
859
+ baseurl: /<projectname> #{conum-guard}<2>
860
+ ----
861
+ <1> Replace `<username>` with your GitLab username or group.
862
+ <2> Replace `<projectname>` with the basename of your project repository.
863
+
864
+ The next time you push to the master branch, the GitLab Pages runner will execute Jekyll and deploy your site to [uri]_\https://<username>.gitlab.io/<projectname>_, where `<username>` is your GitLab username or group and `<projectname>` is the basename of your project repository.
865
+
866
+ Like GitHub Pages, you can also have your site respond to a custom domain name, which is explained in the referenced tutorial.
867
+ In this case, update the [path]__config-gitlab.yml_ file with the appropriate values.
868
+
869
+ == Getting Help
870
+
871
+ The Jekyll AsciiDoc plugin is developed to help you publish your content quickly and easily.
872
+ But we can't achieve that goal without your input.
873
+ Your questions and feedback help steer the project, so speak up!
874
+ Activity drives progress.
875
+
876
+ When seeking answers, always start with the official documentation for Jekyll, which can be found on the {uri-jekyll}[Jekyll website].
877
+ If you have general questions about Jekyll, we recommend you visit the {uri-jekyll-discuss}[Jekyll Talk] forum to get assistance.
878
+ For questions related to this extension specifically, or general questions about AsciiDoc, please post to the {uri-asciidoctor-discuss}[Asciidoctor discussion list].
879
+ You can also join us in the {uri-chat}[asciidoctor/asciidoctor channel] on Gitter.
880
+ For general information about AsciiDoc, look no further than the {uri-asciidoctor-manual}[Asciidoctor User Manual].
881
+
882
+ === Filing Bug Reports and Feature Requests
383
883
 
384
- == Releasing the gem to RubyGems.org
884
+ This project uses the {uri-issues}[GitHub issue tracker] to manage bug reports and feature requests.
885
+ If you encounter a problem, please {uri-search-issues}[browse or search] the issues to find out if your problem has already been reported.
886
+ If it has not, you may {uri-issues}/new[submit a new issue].
887
+
888
+ The best way to get a timely response and quick fix for your issue is to write a detailed report and respond to replies in a timely manner.
889
+
890
+ If you know Ruby (or you're willing to learn), we encourage you to submit a pull request.
891
+ Please include an RSpec behavior that describes how your feature should work or demonstrates the problem you're encountering.
892
+ Make sure to send your pull request from a branch in your fork.
893
+ If the pull request resolves an issue, please name the branch using the issue number (e.g., issue-N, where N is the issue number).
894
+
895
+ If you aren't able to submit a pull request, please provide a sample so that the developers can reproduce your scenario.
896
+
897
+ == Development
898
+
899
+ To help develop the Jekyll AsciiDoc plugin, or to simply use the development version, you need to retrieve the source from GitHub.
900
+ Follow the instructions below to learn how to clone the source, run the tests and install the development version.
901
+
902
+ === Retrieve the Source Code
903
+
904
+ You can retrieve the source code from GitHub using git.
905
+ Simply copy the URL of the {uri-repo}[GitHub repository] and pass it to the `git clone` command:
906
+
907
+ [subs=attributes+]
908
+ ....
909
+ git clone {uri-repo}
910
+ ....
911
+
912
+ Next, switch to the project directory.
913
+
914
+ $ cd jekyll-asciidoc
915
+
916
+ === Install the Dependencies
917
+
918
+ The dependencies needed to develop the Jekyll AsciiDoc plugin are defined in the [path]_Gemfile_ at the root of the project.
919
+ You'll use Bundler to install these dependencies.
920
+
921
+ To check if you have Bundler installed, use the `bundle` command to query for the version:
922
+
923
+ $ bundle --version
924
+
925
+ If Bundler is not installed, use the `gem` command to install it.
926
+
927
+ $ [sudo] gem install bundler
928
+
929
+ Finally, invoke the `bundle` command (which is provided by the bundler gem) from the root of the project to install the dependencies into the project:
930
+
931
+ $ bundle --path=.bundle/gems
932
+
933
+ IMPORTANT: Since we've installed dependencies inside the project, it's necessary to prefix all commands (e.g., rake) with `bundle exec`.
934
+
935
+ === Running the Tests
936
+
937
+ The tests are based on RSpec.
938
+ The test suite is located in the [path]_spec_ directory.
939
+
940
+ You can run the tests using Rake.
941
+
942
+ $ bundle exec rake spec
943
+
944
+ For more fine-grained control, you can also run the tests using RSpec directly.
945
+
946
+ $ bundle exec rspec
947
+
948
+ If you only want to run a selection of tests, you can do so by assigning those specifications a tag and filtering the test run accordingly.
949
+
950
+ Start by adding the `focus` tag to one or more specifications:
951
+
952
+ [source,ruby]
953
+ ----
954
+ it 'should register AsciiDoc converter', focus: true do
955
+ expect(site.converters.any? {|c| ::Jekyll::AsciiDoc::Converter === c }).to be true
956
+ end
957
+ ----
958
+
959
+ Then, run RSpec with the `focus` flag enabled:
960
+
961
+ $ bundle exec rspec -t focus
962
+
963
+ You should see that RSpec only runs the specifications that have this flag.
964
+
965
+ === Installing the Gem Locally
966
+
967
+ You can install the development version of the gem as follows:
968
+
969
+ $ bundle exec rake install
970
+
971
+ This allows you to use an unreleased version of the gem in your site.
972
+ If you want to build the gem and install it manually, use these commands instead:
973
+
974
+ $ bundle exec rake build
975
+ $ [sudo] gem install pkg/jekyll-asciidoc-*.dev.gem
976
+
977
+ === Coding Style
978
+
979
+ This project adheres to the coding style used throughout the Asciidoctor project.
980
+ The coding style is as follows:
981
+
982
+ * Indent using 2 spaces, generally.
983
+
984
+ * Indent successive lines of conditions, method arguments or ternary expressions using 4 spaces (but not data structures or chained method calls).
985
+
986
+ * Don't indent `when` lines in a case block.
987
+
988
+ * Fully qualify the class name (beginning with `::`) of any type not in the current namespace.
989
+
990
+ ::File.extname path
991
+
992
+ * Use triple equals to check for type, placing the type on the left hand side.
993
+
994
+ ::Hash === attrs
995
+
996
+ * Drop parentheses around method arguments of a method definition.
997
+
998
+ def integrate document, collection_name = nil
999
+ ...
1000
+ end
1001
+
1002
+ * Drop parentheses around method arguments of an isolated method call.
1003
+
1004
+ source = ::File.expand_path config['source']
1005
+ +
1006
+ if key.start_with? '!'
1007
+ ...
1008
+ end
1009
+ +
1010
+ asciidoctor_config.replace Utils.symbolize_keys asciidoctor_config
1011
+
1012
+ * Use parentheses outside of a method call when parentheses are required.
1013
+
1014
+ layout = collection_name ? (collection_name.chomp 's') : 'page'
1015
+ +
1016
+ if (::Jekyll::Utils.method dlg_method.name).arity == -1
1017
+ ...
1018
+ end
1019
+
1020
+ * Use parentheses where required, such as around the accumulator seed value for a collection predicate.
1021
+
1022
+ hash.each_with_object({}) {|(key, val), accum| accum[key.to_sym] = val }
1023
+
1024
+ * Don't put curly braces around entries in an options Hash (i.e., symbol keys).
1025
+
1026
+ record_path_info document, source_only: true
1027
+
1028
+ * Use a trailing condition for single-line statements.
1029
+
1030
+ clear_path_info if Document === document
1031
+
1032
+ * Put parantheses around a variable assignment inside a condition.
1033
+
1034
+ if (imagesdir = attrs['imagesdir'])
1035
+
1036
+ * Use simple check for nil.
1037
+
1038
+ if base
1039
+
1040
+ * Use `%()` instead of double quotes around interpolated strings.
1041
+
1042
+ %(--- #{val})
1043
+
1044
+ * Name constants using pascal style.
1045
+
1046
+ NewLine = %(\n)
1047
+
1048
+ * Store each static regular expression in a constant.
1049
+
1050
+ HeaderBoundaryRx = /(?<=\p{Graph})\n\n/
1051
+
1052
+ * Use parentheses in traditional style when writing test assertions.
1053
+
1054
+ expect(site.config['asciidoc']['processor']).to eql('asciidoctor')
1055
+ expect(result.key? 'icons').to be true
1056
+ expect(contents).to match('<div class="page-content">')
1057
+
1058
+ ////
1059
+ * use `do; end` for multi-line blocks; use `{}` for single-line blocks
1060
+ * try to make assignments in condition if scoped to that block
1061
+ * close empty block on same line if empty - `rescue ::NameError; end`
1062
+ ////
1063
+
1064
+ === Releasing the Gem
385
1065
 
386
1066
  When you are ready for a release, first set the version in the file [path]_lib/jekyll-asciidoc/version.rb_.
387
1067
  Then, commit the change using the following commit message template:
@@ -392,8 +1072,38 @@ where `X.Y.Z` is the version number of the gem.
392
1072
 
393
1073
  Next, package, tag and release the gem to RubyGems.org, run the following rake task:
394
1074
 
395
- $ rake release
1075
+ $ bundle exec rake release
1076
+
1077
+ IMPORTANT: Ensure you have the proper credentials setup as described in the guide {uri-guide-publish-gem}[Publishing to RubyGems.org].
1078
+
1079
+ Once you finish the release, you should update the version to the next micro version in the sequence using the `.dev` suffix (e.g., 2.0.1.dev).
1080
+
1081
+ == About the Project
1082
+
1083
+ The Jekyll AsciiDoc plugin, a plugin for the static site generator {uri-jekyll}[Jekyll], is a member project of the Asciidoctor organization.
1084
+ This plugin is developed and supported by volunteers in the Asciidoctor community.
1085
+
1086
+ === Authors
1087
+
1088
+ This plugin was created by Dan Allen and Paul Rayner and has received contributions from many other individuals in the Asciidoctor community.
1089
+
1090
+ === Copyright and License
1091
+
1092
+ Copyright (C) 2013-2016 Dan Allen, Paul Rayner, and the Asciidoctor Project.
1093
+ Free use of this software is granted under the terms of the MIT License.
1094
+ See <<LICENSE#,LICENSE>> for details.
1095
+
1096
+ ////
1097
+ [glossary]
1098
+ == Glossary
396
1099
 
397
- IMPORTANT: Ensure you have the proper credentials setup as described in the guide http://guides.rubygems.org/publishing/#publishing-to-rubygemsorg[Publishing to RubyGems.org].
1100
+ [glossary]
1101
+ page variable::
1102
+ Data associated with a page, post or document.
1103
+ Page variables are defined in the front matter header or as page attributes in the AsciiDoc header.
398
1104
 
399
- Once you finish the release, you should update the version to the next micro version in the sequence using the `.dev` suffix (e.g., 1.0.1.dev).
1105
+ page attribute::
1106
+ Any AsciiDoc attribute that gets promoted to a page variable by this plugin.
1107
+ Before being promoted, the designated prefix is removed from the name.
1108
+ The value of a page attribute is parse as YAML data.
1109
+ ////