packages/gatsby-transformer-asciidoc/README.md
Parses AsciiDoc files using Asciidoctor.js.
npm install gatsby-transformer-asciidoc
// In your gatsby-config.js
plugins: [`gatsby-transformer-asciidoc`]
A full explanation of asciidoc can be found here: Asciidoctor.js
You can also pass all Asciidoctor's convert options to the transformer. An example would be:
// In your gatsby-config.js
plugins: [
{
resolve: `gatsby-transformer-asciidoc`,
options: {
attributes: {
showtitle: true,
},
},
},
]
It recognizes files with the following extensions as AsciiDoc:
adocasciidocAdditional extensions can be configured via the fileExtensions option:
// In your gatsby-config.js
plugins: [
{
resolve: `gatsby-transformer-asciidoc`,
options: {
attributes: {
showtitle: true,
},
fileExtensions: [`ad`, `adoc`],
},
},
]
Each AsciiDoc file is parsed into a node of type asciidoc.
You also can define where the asciidoc file can find the images by setting the imagesdir attribute.
// In your gatsby-config.js
plugins: [
{
resolve: `gatsby-transformer-asciidoc`,
options: {
attributes: {
imagesdir: `/images`,
},
},
},
]
In the asciidoc file you can insert your image just by using:
image::myimage.png[]
NOTE
imagesdir is set the default value is /images@pathPrefix is set it will altered the images location.@ (e.g. /images@).A sample GraphQL query to get AsciiDoc nodes:
{
allAsciidoc {
edges {
node {
html
document {
title
subtitle
main
}
author {
fullName
firstName
lastName
middleName
authorInitials
email
}
revision {
date
number
remark
}
}
}
}
}
You can define in the asciidoc file your own data that will be automatically be attached to the node attributes.
Example
= AsciiDoc Article Title
Firstname Lastname <[email protected]>
1.0, July 29, 2018, Asciidoctor article template
:page-title: Article
:page-path: /my-blog-entry
:page-category: My Category
Each attribute with the prefix page- will be automatically added under pageAttributes so it can be used with GraphQL.
{
allAsciidoc {
edges {
node {
pageAttributes {
title
path
category
}
}
}
}
}
You can define a custom converter by adding the converterFactory option.
// In your gatsby-config.js, make sure to import or declare CustomConverter
plugins: [
{
resolve: `gatsby-transformer-asciidoc`,
options: {
converterFactory: CustomConverter,
},
},
]
CustomConverter is a custom javascript class you'll need to create. Information on how to write a custom CustomConverter can be found at the asciidoctor docs.
In the example below, we will use a custom converter to convert paragraphs but the other nodes will be converted using the built-in HTML5 converter:
const asciidoc = require(`asciidoctor`)()
class CustomConverter {
constructor() {
this.baseConverter = asciidoc.Html5Converter.$new()
}
convert(node, transform) {
if (node.getNodeName() === "paragraph") {
return `<p>${node.getContent()}</p>`
}
return this.baseConverter.convert(node, transform)
}
}
gatsby-transformer-asciidoc takes then this class, not a instance of CustomConverter, as the converterFactory option.
You can also reuse the internal converter of gatsby-transformer-asciidoc, since the constructor of a given CustomConverter will be call with it as parameter.