= Semantic HTML5 Backend For Asciidoctor // custom :gem-name: asciidoctor-html5s :gh-name: jirutka/{gem-name} :gh-branch: master 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://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}"] endif::env-github[] This project provides alternative HTML5 converter (backend) for http://asciidoctor.org/[Asciidoctor] that focuses on correct semantics, accessibility and compatibility with common typographic CSS styles. == Goals * Clean markup with correct HTML5 semantics. * Good accessibility for people with disabilities. * Compatibility with common typographic CSS styles when possible and especially with GitHub and GitLab. * Full standalone converter without fallback to the built-in Asciidoctor converters. * Easy to use and integrate into third-party projects. * Well readable and maintainable code – this should be never sacrificed for performance (I’m looking at you, Asciidoctor!). == Non-goals * Compatibility with existing Asciidoctor CSS styles. == Text Substitutions === Quotes Asciidoctor provides syntax for so-called https://asciidoctor.org/docs/user-manual/#curved[“curved quotation marks”] (which are actually just the _correct_ quotation marks), but the built-in converters outputs only one (hard-coded) type of the single/double quotation marks -- that one used in English and few other languages. This converter outputs the correct type of the quotation marks based on the specified language (using standard `lang` attribute). [cols="2,^1l,3,^1l,^1"] |=== | Name | Syntax | Languages (:lang:) | HTML | Rendered .4+| double quotes .4+| "`word`" | af, en, eo, ga, hi, ia, id, ko, mt, th, tr, zh | “word” | “word” | bs, fi, sv | ”word” | ”word” | cs, da, de, is, lt, sl, sk, sr | „word“ | „word“ | hu, pl, nl, ro | „word” | „word” .5+| single quotes .5+| '`word`' | af, en, eo, ga, hi, ia, id, ko, mt, th, tr, zh | ‘word’ | ‘word’ | bs, fi, sv | ’word’ | ’word’ | cs, da, de, is, lt, sl, sk, sr | ‚word‘ | ‚word‘ | nl | ‚word’ | ‚word’ | hu, pl, ro | «word» | «word» |=== The default (fallback) type is the first one. === Replacements Asciidoctor replaces `--` with em dash (—) and does not provide any replacement for en dash (–). That’s not very convenient, because en dash is more common than em dash; at least in (British) English and Czech (actually we don’t use em dash at all). So this extension also modifies the https://asciidoctor.org/docs/user-manual/#replacements[replacements table]: changes `--` to en dash and adds `---` for em dash. [cols="2,^1l,^1l,^1,2"] |=== | Name | Syntax | Unicode | Rendered | Notes | En dash | -- | – | – .2+| Only replaced if between two word characters, between a word character and a line boundary, or flanked by spaces. When flanked by space characters (e.g. `+a -- b+` or `+a --- b+`), the normal spaces are replaced by thin spaces (\ ). | Em dash | --- | — | — |=== == Other Enhancements === Image Block The `link` attribute recognizes few special values: link=self:: Make the image a link with URL of the image itself – to open it in full size. link=none / link=false:: Suppress the effect of `:html5s-image-default-link: self`, i.e. remove the default image link. Both block image and inline image supports additional attribute `loading` (see https://developer.mozilla.org/en-US/docs/Web/Performance/Lazy_loading#Images[Lazy loading] on MDN for more information). === Additional Inline Formatting Roles del:: `++[del]#deleted text#++` is rendered as `deleted text`. ins:: `++[ins]#inserted text#++` is rendered as `inserted text`. strike:: `++[strike]#inserted text#++` is rendered as `inserted text`. This is an alias for `line-through`. == Requirements Note: This converter consists of https://github.com/slim-template/slim/[Slim] templates, but they are precompiled into pure Ruby code using https://github.com/jirutka/asciidoctor-templates-compiler/[asciidoctor-templates-compiler], so you don’t need Slim to use it! ifndef::npm-readme[] === Ruby * https://www.ruby-lang.org/[Ruby] 2.0+ or http://jruby.org/[JRuby] 9.1+ * https://rubygems.org/gems/asciidoctor/[Asciidoctor] 1.5.7+ * https://rubygems.org/gems/thread_safe/[thread_safe] (not required, but recommended for Ruby MRI) === Node.js endif::npm-readme[] * https://nodejs.org/[Node.js] * https://www.npmjs.com/package/@asciidoctor/core[@asciidoctor/core] >=2.0.0 <2.2.0 == Installation ifndef::npm-readme[] === Ruby Install {gem-name} from Rubygems: [source, sh, subs="+attributes"] gem install {gem-name} or to get the latest development version: [source, sh, subs="+attributes"] gem install --pre {gem-name} === Node.js endif::npm-readme[] Install {gem-name} from npmjs.com: [source, sh, subs="+attributes"] npm install --save {gem-name} == Usage ifndef::npm-readme[] === CLI [source, sh, subs="+attributes"] asciidoctor -r {gem-name} -b html5s FILE... === Node.js endif::npm-readme[] [source, js, subs="+attributes"] ---- // Load asciidoctor.js and {gem-name}. const asciidoctor = require('@asciidoctor/core')() const asciidoctorHtml5s = require('{gem-name}') // Register the HTML5s converter and supporting extension. asciidoctorHtml5s.register() // Convert the content to HTML using html5s converter. const content = "Hello, *world!*!" const html = asciidoctor.convert(content, { backend: 'html5s' }) console.log(html) ---- === Attributes Extra attributes accepted by the {gem-name}: html5s-force-stem-type:: Ignore declared (e.g. `:stem: asciimath`, `asciimath:[]`, ...) and default type of the stem macro/block and always use the one specified by this attribute. + Asciidoctor hard-codes the default stem type to “asciimath”, which is not supported by KaTeX. html5s-image-default-link: self:: Make every block image a link with the image’s source URL (i.e. user can click on the image to open it in full size), unless the link attribute is defined and is not `none` or `false`. html5s-image-self-link-label:: The link title and ARIA label for the block image link that points to the image file (i.e. `href` equals the image’s `src`). Default is `Open the image in full size`. == 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.