= Asciidoctor Inter-doc Reference Text
:source-language: shell
// custom
:gem-name: asciidoctor-interdoc-reftext
:gh-name: jirutka/{gem-name}
:gh-branch: master
:codacy-id: 7f60adeeb3fc49ee85863df2c65cd4eb

ifdef::env-github[]
image:https://travis-ci.org/{gh-name}.svg?branch={gh-branch}[Build Status, link="https://travis-ci.org/{gh-name}"]
image:https://api.codacy.com/project/badge/Coverage/{codacy-id}["Test Coverage", link="https://www.codacy.com/app/{gh-name}"]
image:https://api.codacy.com/project/badge/Grade/{codacy-id}["Codacy Code quality", link="https://www.codacy.com/app/{gh-name}"]
image:https://img.shields.io/gem/v/{gem-name}.svg?style=flat[Gem Version, link="https://rubygems.org/gems/{gem-name}"]
image:https://img.shields.io/npm/v/{gem-name}.svg?style=flat[npm Version, link="https://www.npmjs.org/package/{gem-name}"]
image:https://img.shields.io/badge/yard-docs-blue.svg[Yard Docs, link="http://www.rubydoc.info/github/{gh-name}/{gh-branch}"]
endif::env-github[]


This project is an http://asciidoctor.org/[Asciidoctor] extension providing implicit (automatic) reference text (label) for inter-document cross references.


== Examples

When you define a cross reference to another document “other.adoc” _without_ a label, e.g.:

----
xref:other#[]
----

Asciidoctor converts it into a plain link with the target document’s path as a text:

// GitHub doesn't render Example block as a box.
[subs="+macros"]
----
link:other.html[other.html]
----

but this extensions converts it into:

[subs="+macros"]
----
link:other.html[Other Document]
----

where “Other Document” is a *title* of the _other.adoc_.

Similarly with cross reference to a section in another document, e.g.:

----
xref:other#sec1[]
----

Asciidoctor converts it in the same way as above, but this extensions converts it into:

[subs="+macros"]
----
link:other.html#sec1[The First Section]
----

where “The First Section” is *title* of the section with id _sec1_ in _other.adoc_.


== Installation

=== Ruby

Install {gem-name} from Rubygems:

[source, subs="+attributes"]
gem install {gem-name}

or to install the latest development version:

[source, subs="+attributes"]
gem install {gem-name} --pre


=== Node.js

Install {gem-name} from npmjs.com:

[source, sh, subs="+attributes"]
npm install --save {gem-name}


== Usage

=== CLI

If you invoke Asciidoctor from command-line, use option `-r` to load the extension:

[source, subs="+attributes"]
asciidoctor -r {gem-name} README.adoc


=== Ruby

Just `require '{gem-name}'`.
However, if you don’t want the extension to be automatically registered in Asciidoctor, `require 'asciidoctor/interdoc_reftext/processor'` instead.

IMPORTANT: Bundler automatically _requires_ all the specified gems.
           To prevent it, use +
           `gem '{gem-name}', require: false`.


=== Node.js

[source, js, subs="+attributes"]
----
// Load asciidoctor.js and {gem-name}.
const asciidoctor = require('asciidoctor.js')()
const interdocReftextExt = require('{gem-name}')

// See documentation at the end of this section.
const options = {
  asciidocExts: ['.adoc'],
}

// Configure the extension and register it into the global registry.
interdocReftextExt.register(asciidoctor.Extensions, options)

// Convert the file to HTML.
asciidoctor.convertFile('./README.adoc')
----

If you don’t want to register the extension globally, you can also pass a custom registry to the `register` function:

[source, js]
----
// ...

const registry = asciidoctor.Extensions.create()
interdocReftextExt.register(registry, options)

const html = asciidoctor.convertFile('./README.adoc', {
  'extension_registry': registry,
})
----

.*Options:*
asciidocExts::
  AsciiDoc file extensions (e.g. `.adoc`).
  Default is `['.adoc', '.asciidoc', '.ad']`.

raiseExceptions::
  Whether to raise exceptions (`true`), or just log them (`false`).
  Default is `true`.


== License

This project is licensed under http://opensource.org/licenses/MIT/[MIT License].
For the full text of the license, see the link:LICENSE[LICENSE] file.
