Asciidoctor est un processeur de texte rapide et une chaîne de publication pour convertir du contenu AsciiDoc en HTML5, DocBook 5 (ou 4.5) et d’autres formats. Asciidoctor est écrit en Ruby, packagé sous forme de RubyGem et publié sur RubyGems.org. La gemme est aussi incluse dans plusieurs distributions Linux, dont Fedora, Debian et Ubuntu. Asciidoctor est open source, hébergé sur GitHub et distribué sous licence MIT.
En un mot
Asciidoctor lit du contenu écrit en texte brut, comme présenté dans la partie gauche de l’image ci-dessous, et le convertit en HTML5, comme présenté dans la partie droite. Asciidoctor applique une feuille de style par défaut au document HTML5 afin de fournir une expérience de lecture agréable, clé en main.

Le traitement d’AsciiDoc
Asciidoctor lit et analyse la syntaxe du texte écrit en AsciiDoc afin de créer une représentation, sous forme d’arbre, à partir de laquelle des templates sont appliqués pour produire de l’HTML5, du DocBook 5 (ou 4.5).
Vous avez la possibilité d’écrire votre propre convertisseur ou de fournir des templates supportant Tilt pour personnaliser le résultat généré ou pour produire des formats alternatifs.
Note
|
Asciidoctor est un remplaçant du processeur AsciiDoc original écrit en Python (asciidoc.py ).
La suite de tests Asciidoctor possède > 1,600 tests pour garantir la compatibilité avec la syntaxe AsciiDoc.
|
En plus de la syntaxe AsciiDoc standard, Asciidoctor reconnaît des balises additionnelles ainsi que des options de formatage, comme les polices d’icônes (par exemple icon:fire[]
) et des éléments d’interface (par exemple button:[Enregistrer]
).
Asciidoctor offre aussi un thème moderne et « responsive » basé sur Foundation pour styliser le document HTML5 généré.
Prérequis
Asciidoctor fonctionne sur Linux, OS X (Mac), Windows et requiert une des implémentations suivantes :
-
MRI (Ruby 1.8.7, 1.9.3, 2.0, 2.1, 2.2 & 2.3)
-
JRuby (1.7 dans les modes Ruby 1.8 et 1.9, 9000)
-
Rubinius 2.2.x
-
Opal (JavaScript)
Votre aide est appréciée pour tester Asciidoctor sur l’une de ces plateformes. Référez-vous au paragraphe Contributions si vous souhaitez vous impliquer dans ce projet.
Caution
|
Si vous utilisez un environnement Windows dans une autre langue que l’anglais, vous pourriez tomber sur l’erreur chcp 65001 Après ce changement, tous les maux de tête liés à l’Unicode seront derrière vous. Si vous utilisez un environnement de développement comme Eclipse, assurez-vous de définir l’encodage en UTF-8. Asciidoctor fonctionne mieux lorsque vous utilisez UTF-8 partout. |
Installation
Asciidoctor peut être installé en utilisant la commande (a) gem install
, (b) Bundler ou (c) les gestionnaires de paquets pour les distributions Linux populaires.
Tip
|
L’avantage d’utiliser le gestionnaire de paquets pour installer la gemme est que l’installation englobe celle des librairies Ruby et RubyGems si elles ne sont pas déjà installés.
L’inconvénient est que le paquet n’est pas forcément mis à jour immédiatement après la mise à disposition de la gemme.
Si vous avez besoin de la dernière version, vous devez passer par la commande gem .
|
(a) Installation de la gemme
Ouvrir un terminal et taper (en excluant le $
) :
$ gem install asciidoctor
Si vous souhaitez installer une version pre-release (c’est-à-dire, une « release candidate »), utilisez :
$ gem install asciidoctor --pre
Tip
|
Mettre à jour votre installation
Si vous avez une précédente version d’Asciidoctor installée, vous pouvez la mettre à jour en utilisant : $ gem update asciidoctor Si vous installez une nouvelle version de la gemme en utilisant $ gem cleanup asciidoctor |
(b) Bundler
-
Créez un fichier Gemfile à la racine de votre projet (ou du répertoire courant)
-
Ajoutez la gemme
asciidoctor
dans votre fichier Gemfile comme ci-dessous :source 'https://rubygems.org' gem 'asciidoctor' # ou spécifier la version explicitement # gem 'asciidoctor', '1.5.4'
-
Sauvegardez le fichier Gemfile
-
Ouvrez un terminal et installez la gemme en utilisant :
$ bundle
Pour mettre à jour la gemme, spécifiez la nouvelle version dans le fichier Gemfile et exécutez bundle
à nouveau.
Utiliser bundle update
n'est pas recommandé car les autres gemmes seront également mises à jour, ce qui n’est pas forcément le résultat voulu.
(c) Gestionnaire de paquets Linux
DNF (Fedora 21 ou supérieure)
Pour installer la gemme sur Fedora 21 ou supérieure en utilisant dnf, ouvrez un terminal et tapez :
$ sudo dnf install -y asciidoctor
Pour mettre à jour la gemme, utilisez :
$ sudo dnf update -y asciidoctor
Tip
|
Votre système peut être configuré pour mettre à jour automatiquement les paquets rpm, auquel cas aucune action de votre part ne sera nécessaire pour mettre à jour la gemme. |
apt-get (Debian, Ubuntu, Mint)
Pour installer la gemme sur Debian, Ubuntu ou Mint, ouvrez un terminal et tapez :
$ sudo apt-get install -y asciidoctor
Pour mettre à jour la gemme, utilisez :
$ sudo apt-get upgrade -y asciidoctor
Tip
|
Votre système peut être configuré pour mettre à jour automatiquement les paquets deb, auquel cas aucune action de votre part ne sera nécessaire pour mettre à jour la gemme. |
La version d’Asciidoctor installé par le gestionnaire de paquets (apt-get) peut ne pas correspondre à la dernière version d’Asciidoctor. Consultez le dépôt de paquets de votre distribution pour trouver quelle version est disponible par version de distribution.
Caution
|
Il est déconseillé d’utiliser la commande Si vous souhaitez utiliser une version d’Asciidoctor qui est plus récente que celle installée par votre gestionnaire de paquets, vous devriez utiliser RVM pour installer Ruby dans votre répertoire personnel (dans votre espace utilisateur).
Vous pouvez alors utiliser la commande |
apk (Alpine Linux)
Pour installer la gemme sur Alpine Linux, ouvrez un terminal et tapez :
$ sudo apk add asciidoctor
Pour mettre à jour la gemme, utilisez :
$ sudo apk add -u asciidoctor
Tip
|
Votre système peut être configuré pour mettre à jour automatiquement les paquets apk, auquel cas aucune action de votre part ne sera nécessaire pour mettre à jour la gemme. |
Autres options d’installation
Utilisation
Si la gemme Asciidoctor s’est installée correctement, la ligne de commande (CLI) asciidoctor
sera disponible dans votre PATH.
Pour vérifier sa disponibilité, exécutez la commande suivante dans votre terminal :
$ asciidoctor --version
Vous devriez voir les informations concernant la version d’Asciidoctor et celle de votre environnement Ruby s’afficher dans le terminal.
Asciidoctor 1.5.4 [http://asciidoctor.org] Runtime Environment (ruby 2.2.2p95 [x86_64-linux]) (lc:UTF-8 fs:UTF-8 in:- ex:UTF-8)
Asciidoctor fournit aussi une API. Cette API permet une intégration avec d’autres logiciels Ruby, comme Rails, Sinatra et GitHub, ainsi que d’autres langages comme Java (via AsciidoctorJ) ou JavaScript (via Asciidoctor.js).
Interface de Ligne de Commande (CLI)
La commande asciidoctor
vous permet d’invoquer Asciidoctor à partir de la ligne de commande (c’est-à-dire, un terminal).
La commande suivante convertit le fichier README.adoc en HTML et sauvegarde le résultat dans le fichier README.html dans le même répertoire.
Le nom du fichier HTML généré est tiré de celui du fichier source, l’extension a été changée pour .html
.
$ asciidoctor README.adoc
Vous pouvez contrôler le processeur Asciidoctor en ajoutant plusieurs paramètres, vous pouvez en apprendre plus sur ces derniers en utilisant la commande :
$ asciidoctor --help
Par exemple, pour écrire le fichier dans un répertoire différent, utilisez :
$ asciidoctor -D output README.adoc
La page man asciidoctor
fournit une référence complète sur l’interface de ligne de commande.
Référez-vous aux ressources suivantes pour en apprendre davantage sur la façon d’utiliser la commande asciidoctor
.
API Ruby
Pour utiliser Asciidoctor dans votre application, vous avez tout d’abord besoin de faire un « require » sur la gemme :
require 'asciidoctor'
Vous pouvez ensuite convertir un fichier AsciiDoc en fichier HTML en utilisant :
Asciidoctor.convert_file 'README.adoc', to_file: true, safe: :safe
Warning
|
Quand vous utilisez Asciidoctor via l’API, le mode de sûreté par défaut est :secure .
Dans le mode « secure », plusieurs fonctionnalités centrales sont désactivées, comme la directive include .
Si vous souhaitez activer ces fonctionnalités, vous aurez besoin de définir explicitement le mode de sûreté avec une la valeur :server (recommandée) ou :safe .
|
Vous pouvez aussi convertir une chaîne de texte en fragment HTML (pour une insertion dans une page HTML) en utilisant :
content = '_Zen_ in the art of writing http://asciidoctor.org[AsciiDoc].'
Asciidoctor.convert content, safe: :safe
Si vous voulez le document HTML complet, activez l’option header_footer
comme ci-dessous :
content = '_Zen_ in the art of writing http://asciidoctor.org[AsciiDoc].'
html = Asciidoctor.convert content, header_footer: true, safe: :safe
Si vous avez besoin d’accéder au document analysé, vous pouvez séparer la conversion en deux étapes distinctes :
content = '_Zen_ in the art of writing http://asciidoctor.org[AsciiDoc].'
document = Asciidoctor.load content, header_footer: true, safe: :safe
puts document.doctitle
html = document.convert
Gardez en tête que si vous n’aimez pas le contenu généré par Asciidoctor, vous pouvez le changer ! Asciidoctor supporte des convertisseurs personnalisés qui peuvent prendre en charge la conversion depuis le document analysé jusqu’au contenu généré.
Une façon simple de personnaliser les morceaux de contenu générés est d’utiliser le convertisseur de template. Le convertisseur de template vous permet, en utilisant un template supporté par Tilt, de prendre en charge la conversion de n’importe quel élément dans le document.
Vous l’aurez compris, vous pouvez complètement prendre le contrôle sur le contenu généré. Pour plus d’informations sur comment utiliser l’API ou personnaliser le contenu généré, référez-vous au manuel utilisateur.
Contributions
Dans l’esprit du logiciel libre, tout le monde est encouragé à aider en vue d’améliorer le projet. Si vous découvrez des erreurs ou des oublis dans le code source, la documentation, ou le contenu du site web, s’il vous plaît n’hésitez pas à ouvrir un ticket ou une « pull request » avec un correctif. Les contributeurs et contributrices sont toujours les bienvenus !
Voici quelques façons de contribuer :
-
en utilisant les versions prerelease (alpha, beta ou preview),
-
en rapportant des anomalies,
-
en suggérant de nouvelles fonctionnalités,
-
en écrivant ou éditant la documentation,
-
en écrivant des spécifications,
-
en écrivant du code — Aucun patch n’est trop petit
-
corriger une coquille,
-
ajouter des commentaires,
-
nettoyer des espaces inutiles,
-
écrire des tests !
-
-
en refactorant le code,
-
en corrigeant des anomalies,
-
en effectuant des relectures des patches.
Le guide du parfait Contributeur fournit des informations sur comment créer, styliser et soumettre des tickets, des demandes de fonctionnalités, du code et de la documentation pour le projet Asciidoctor.
Être aidé
Le projet Asciidoctor est développé pour vous aider à écrire et publier du contenu. Mais nous ne pouvons pas le faire sans avoir vos avis ! Nous vous encourageons à poser vos questions et discuter de n’importe quels aspects du projet sur la liste de discussion, Twitter ou dans le salon de discussion.
- Mailing list
- Twitter (Chat)
-
hashtag #asciidoctor ou la mention @asciidoctor
- Gitter (Chat)
L’organisation Asciidoctor sur GitHub héberge le code source du projet, le gestionnaire de tickets ainsi que des sous-projets.
- Dépôt des sources (git)
- Gestionnaire de tickets
- L’organisation Asciidoctor sur GitHub
Copyright et licence
Copyright © 2012-2016 Dan Allen, Ryan Waldron et le projet Asciidoctor. Une utilisation libre de ce logiciel est autorisée sous les termes de la licence MIT.
Consultez le fichier LICENSE pour plus de détails.
Auteurs
Asciidoctor est mené par Dan Allen et Sarah White et reçoit de nombreuses contributions de la part de la géniale communauté Asciidoctor. Le projet a été initié en 2012 par Ryan Waldron et est basé sur un prototype écrit par Nick Hengeveld.
AsciiDoc a été démarré par Stuart Rackham et a reçu de nombreuses contributions de la part de la communauté AsciiDoc.
Changelog
1.5.5 (2016-10-05) - @mojavelinux
- Enhancements
-
-
Add preference to limit the maximum size of an attribute value (#1861)
-
Honor SOURCE_DATE_EPOCH environment variable to accomodate reproducible builds (@JojoBoulix) (#1721)
-
Add reversed attribute to ordered list if reversed option is enabled (#1830)
-
Add support for additional docinfo locations (e.g., :header)
-
Configure default stylesheet to break monospace word if exceeds length of line; add roles to prevent breaks (#1814)
-
Introduce translation file for built-in labels (@ciampix)
-
Provide translations for built-in labels (@JmyL - kr, @ciampix - it, @ivannov - bg, @maxandersen - da, @radcortez - pt, @eddumelendez - es, @leathersole - jp, @aslakknutsen - no, @shahryareiv - fa, @AlexanderZobkov - ru, @dongwq - zh, @rmpestano - pt_BR, @ncomet - fr, @lgvz - fi, @patoi - hu, @BojanStipic - sr, @fwilhe - de, @rahmanusta - tr, @abelsromero - ca, @aboullaite - ar, @roelvs - nl)
-
Translate README to Chinese (@diguage)
-
Translate README to Japanese (@Mizuho32)
-
- Improvements
-
-
Style nested emphasized phrases properly when using default stylesheet (#1691)
-
Honor explicit table width even when autowidth option is set (#1843)
-
Only explicit noheader option on table should disable implicit table header (#1849)
-
Support docbook orient="land" attribute on tables (#1815)
-
Add alias named list to retrieve parent List of ListItem
-
Update push_include method to support chaining (#1836)
-
Enable font smoothing on Firefox on OSX (#1837)
-
Support combined use of sectanchors and sectlinks in HTML5 output (#1806)
-
fix API docs for find_by
-
Upgrade to Font Awesome 4.6.3 (@allenan, @mogztter) (#1723)
-
README: add install instructions for Alpine Linux
-
README: Switch yum commands to dnf in README
-
README: Mention Mint as a Debian distro that packages Asciidoctor
-
README: Add caution advising against using gem update to update a system-managed gem (@oddhack)
-
README: sync French version with English version (@flashcode)
-
Add missing endline after title element when converting open block to HTML
-
Move list_marker_keyword method from AbstractNode to AbstractBlock
-
Rename definition list to description list internally
-
- Compliance
-
-
Support 6-digit decimal char refs, 5-digit hexidecimal char refs (#1824)
-
Compatibility fixes for Opal
-
Check for number using Integer instead of Fixnum class for compatibility with Ruby 2.4
-
- Bug fixes
-
-
Use method_defined? instead of respond_to? to check if method is already defined when patching (#1838)
-
Fix invalid conditional in HTML5 converter when handling of SVG
-
Processor#parse_content helper no longer shares attribute list between blocks (#1651)
-
Fix infinite loop if unordered list marker is immediately followed by a dot (#1679)
-
Don’t break SVG source when cleaning if svg start tag name is immediately followed by endline (#1676)
-
Prevent template converter from crashing if .rb file found in template directory (#1827)
-
Fix crash when generating section ID when both idprefix & idseparator are blank (#1821)
-
Use stronger CSS rule for general text color in Pygments stylesheet (#1802)
-
Don’t duplicate forward slash for path relative to root (#1822)
-
- Infrastructure
-
-
Build gem properly in the absense of a git workspace, make compatible with JRuby (#1779)
-
Run tests in CI using latest versions of Ruby, including Ruby 2.3 (@ferdinandrosario)
-
- Distribution Packages
1.5.4 (2016-01-03) - @mojavelinux
- Enhancements
-
-
translate README into French (@anthonny, @mogztter, @gscheibel, @mgreau) (#1630)
-
allow linkstyle in manpage output to be configured (#1610)
-
- Improvements
-
-
upgrade to MathJax 2.6.0 and disable loading messages
-
upgrade to Font Awesome 4.5.0
-
disable toc if document has no sections (#1633)
-
convert inline asciimath to MathML (using asciimath gem) in DocBook converter (#1622)
-
add attribute to control build reproducibility (@bk2204) (#1453)
-
recognize file:/// as a file root in Opal browser env (#1561)
-
honor icon attribute on admonition block when font-based icons are enabled (@robertpanzer) (#1593)
-
resolve custom icon relative to iconsdir; add file extension if absent (#1634)
-
allow asciidoctor cli to resolve library path when invoked without leading ./
-
- Compliance
-
-
allow special section to be nested at any depth (#1591)
-
ensure colpcwidth values add up to 100%; increase precision of values to 4 decimal places (#1647)
-
ignore blank cols attribute on table (#1647)
-
support shorthand syntax for block attributes on document title (#1650)
-
- Bug fixes
-
-
don’t include default toc in AsciiDoc table cell; don’t pass toc location attributes to nested document (#1582)
-
guard against nil dlist list item in find_by (#1618)
-
don’t swallow trailing line when include file is not readable (#1602)
-
change xlink namespace to xl in DocBook 5 output to prevent parse error (#1597)
-
make callouts globally unique within document, including AsciiDoc table cells (#1626)
-
initialize Slim-related attributes regardless of when Slim was loaded (@terceiro) (#1576)
-
differentiate literal backslash from escape sequence in manpage output (@ds26gte) (#1604)
-
don’t mistake line beginning with \. for troff macro in manpage output (@ds26gte) (#1589)
-
escape leading dots so user content doesn’t trigger troff macros in manpage output (@ds26gte) (#1631)
-
use \c after .URL macro to remove extraneous space in manpage output (@ds26gte) (#1590)
-
fix missing endline after .URL macro in manpage output (#1613)
-
properly handle spacing around .URL/.MTO macro in manpage output (@ds26gte) (#1641)
-
don’t swallow doctitle attribute followed by block title (#1587)
-
change strategy for splitting names of author; fixes bug in Opal/Asciidoctor.js
-
don’t fail if library is loaded more than once
-
- Infrastructure
-
-
remove trailing endlines in project source code
-
update contributing guidelines
-
explicitly test ifeval scenario raised in issue #1585
-
remove backreference substitution hack for Opal/Asciidoctor.js
-
fix assignment of default Hash value for Opal/Asciidoctor.js
-
add JRuby 9.0.4.0 and Ruby 2.3.0 to the Travis CI build matrix
-
- Distribution Packages
1.5.3 (2015-10-31) - @mojavelinux
- Enhancements
-
-
add support for interactive & inline SVGs (#1301, #1224)
-
add built-in manpage backend (@davidgamba) (#651)
-
create Mallard backend; asciidoctor/asciidoctor-mallard (@bk2204) (#425)
-
add AsciiMath to MathML converter to support AsciiMath in DocBook converter (@pepijnve) (#954)
-
allow text of selected lines to be highlighted in source block by Pygments or CodeRay (#1429)
-
use value of
docinfo
attribute to control docinfo behavior (#1510) -
add
docinfosubs
attribute to control which substitutions are performed on docinfo files (@mogztter) (#405) -
drop ability to specify multiple attributes with a single
-a
flag when using the CLI (@mogztter) (#405) -
make subtitle separator chars for document title configurable (@rmannibucau) (#1350)
-
make XrefInlineRx regexp more permissive (Mathieu Boespflug) (#844)
-
- Improvements
-
-
load JavaScript and CSS at bottom of HTML document (@mogztter) (#1238)
-
list available backends in help text (@plaindocs) (#1271)
-
properly expand tabs in literal text (#1170, #841)
-
add
source-indent
as document attribute (@mogztter) (#1169) -
upgrade MathJax to 2.5.3 (#1329)
-
upgrade Font Awesome to 4.4.0 (@mogztter) (#1465)
-
upgrade highlight.js to 8.6 (now 8.9.1) (#1390)
-
don’t abort if syntax highlighter isn’t available (#1253)
-
insert docinfo footer below footer div (#1503)
-
insert toc at default location in embeddable HTML (#1443)
-
replace _ and - in generated alt text for inline images
-
restore attributes to header attributes after parse (#1255)
-
allow docdate and doctime to be overridden (#1495)
-
add CSS class
.center
for center block alignment (#1456) -
recognize U+2022 (bullet) as alternative marker for unordered lists (@mogztter) (#1177)
-
allow videos to work for local files by prepending asset-uri-scheme (Chris) (#1320)
-
always assign playlist param when loop option is enabled for YouTube video
-
parse isolated version in revision line (@bk2204) (#790)
-
autoload Tilt when template converter is instantiated (#1313)
-
don’t overwrite existing id entry in references table (#1256)
-
use outfilesuffix attribute defined in header when resolving outfile (#1412)
-
make AsciiDoc safe mode option on Slim engine match document (#1347)
-
honor htmlsyntax attribute when backend is html/html5 (#1530)
-
tighten spacing of wrapped lines in TOC (#1542)
-
tune padding around table cells in horizontal dlist (#1418)
-
load Droid Sans Mono 700 in default stylesheet
-
set line height of table cells used for syntax highlighting
-
set font-family of kbd; refine styling (#1423)
-
extract condition into
quote_lines?
method (@mogztter) -
extract inline code into
read_paragraph
method (@mogztter) -
parent of block in ListItem should be ListItem (#1359)
-
add helper methods to List and ListItem (#1551)
-
add method
AbstractNode#add_role
andAbstractNode#remove_role
(@robertpanzer) (#1366) -
introduce helper methods for sniffing URIs (#1422)
-
add helper to calculate basename without file extension
-
document
-I
and-r
options in the manual page (@bk2204) -
fix
--help
output text for-I
(@bk2204) -
don’t require open-uri-cached if already loaded
-
do not attempt to scan pattern of non-existent directory in template converter
-
prevent CodeRay from bolding every 10th line number
-
- Compliance
-
-
use
<sup>
for footnote reference in text instead of<span>
(#1523) -
fix alignment of wrapped text in footnote (#1524)
-
include full stop after footnote number in embeddable HTML
-
show manpage title & name section in embeddable HTML (#1179)
-
resolve missing attribute in ifeval to empty string (#1387)
-
support unbreakable & breakable options on table (rockyallen) (#1140)
-
- Bug fixes
-
-
don’t truncate exception stack in
Asciidoctor.load
(#1248) -
don’t fail to save cause of Java exception (@robertpanzer) (#1458)
-
fix precision error in timings report (#1342)
-
resolve regexp for inline macro lazily (#1336)
-
block argument to
find_by
should filter results (#1393) -
strip comment lines in indented text of dlist item (#1537)
-
preserve escaped delimiter at end of line in a table (#1306)
-
correctly calculate colnames for implicit columns (#1556)
-
don’t crash if colspan exceeds colspec (#1460)
-
account for empty records in colspec (#1375)
-
ignore empty cols attribute on table
-
use
.inspect
to print MathJax delimiters (again) (#1198) -
use while loop instead of begin/while loop to address bug in Asciidoctor.js (#1408)
-
force encoding of attribute values passed from cli (#1191)
-
don’t copy css if stylesheet or stylesdir is a URI (#1400)
-
fix invalid color value in default CodeRay theme
-
built-in writer no longer fails if output is nil (#1544)
-
custom template engine options should take precedence
-
fallback to require with a non-relative path to support Debian package (@mogztter)
-
pass opts to recursive invocations of
PathResolver#system_path
-
fix and test external links in docbook backend
-
use format symbol
:html
instead of:html5
for Slim to fix warnings -
fix documentation for inline_macro and block_macro (Andrea Bedini)
-
fix grammar in warning messages regarding thread_safe gem
-
- Infrastructure
-
-
migrate opal_ext from core to Asciidoctor.js (#1517)
-
add Ruby 2.2 to CI build; only specify minor Ruby versions
-
enable containerized builds on Travis CI
-
add config to run CI build on AppVeyor
-
exclude benchmark folder from gem (#1522)
-
- Distribution Packages
Référez-vous au fichier CHANGELOG pour une liste complète des changements des versions précédentes.