{"id":31628050,"url":"https://github.com/jirutka/asciidoctor-html5s","last_synced_at":"2025-10-06T20:17:23.665Z","repository":{"id":30336785,"uuid":"33889150","full_name":"jirutka/asciidoctor-html5s","owner":"jirutka","description":"Semantic HTML5 converter (backend) for Asciidoctor","archived":false,"fork":false,"pushed_at":"2025-03-07T12:42:57.000Z","size":280,"stargazers_count":93,"open_issues_count":12,"forks_count":10,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-09-14T14:58:07.314Z","etag":null,"topics":["accessibility","asciidoc","asciidoctor","asciidoctor-backend","asciidoctor-converter","html5","semantics"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jirutka.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"jirutka"}},"created_at":"2015-04-13T19:29:14.000Z","updated_at":"2025-08-09T18:05:17.000Z","dependencies_parsed_at":"2025-05-06T10:45:37.859Z","dependency_job_id":"551fe092-0165-4457-aee5-3788d086b009","html_url":"https://github.com/jirutka/asciidoctor-html5s","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/jirutka/asciidoctor-html5s","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jirutka%2Fasciidoctor-html5s","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jirutka%2Fasciidoctor-html5s/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jirutka%2Fasciidoctor-html5s/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jirutka%2Fasciidoctor-html5s/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jirutka","download_url":"https://codeload.github.com/jirutka/asciidoctor-html5s/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jirutka%2Fasciidoctor-html5s/sbom","scorecard":{"id":521604,"data":{"date":"2025-08-11","repo":{"name":"github.com/jirutka/asciidoctor-html5s","commit":"84d5ab3605691e0d29c9b324b074788677361279"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.8,"checks":[{"name":"Code-Review","score":0,"reason":"Found 2/29 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/jirutka/asciidoctor-html5s/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/jirutka/asciidoctor-html5s/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/jirutka/asciidoctor-html5s/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/jirutka/asciidoctor-html5s/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/jirutka/asciidoctor-html5s/ci.yml/master?enable=pin","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:50"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 3 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T03:09:30.468Z","repository_id":30336785,"created_at":"2025-08-20T03:09:30.468Z","updated_at":"2025-08-20T03:09:30.468Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278672041,"owners_count":26025826,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["accessibility","asciidoc","asciidoctor","asciidoctor-backend","asciidoctor-converter","html5","semantics"],"created_at":"2025-10-06T20:17:20.640Z","updated_at":"2025-10-06T20:17:23.652Z","avatar_url":"https://github.com/jirutka.png","language":"HTML","funding_links":["https://github.com/sponsors/jirutka"],"categories":[],"sub_categories":[],"readme":"= Semantic HTML5 Backend For Asciidoctor\n// custom\n:gem-name: asciidoctor-html5s\n:gh-name: jirutka/{gem-name}\n:gh-branch: master\n\nifdef::env-github[]\nimage:https://github.com/{gh-name}/workflows/CI/badge.svg[CI Status, link=https://github.com/{gh-name}/actions?query=workflow%3A%22CI%22]\nimage:https://img.shields.io/gem/v/{gem-name}.svg?style=flat[Gem Version, link=\"https://rubygems.org/gems/{gem-name}\"]\nimage:https://img.shields.io/npm/v/{gem-name}.svg?style=flat[npm Version, link=\"https://www.npmjs.org/package/{gem-name}\"]\nendif::env-github[]\n\nThis project provides alternative HTML5 converter (backend) for http://asciidoctor.org/[Asciidoctor] that focuses on correct semantics, accessibility and compatibility with common typographic CSS styles.\n\n\n== Goals\n\n* Clean markup with correct HTML5 semantics.\n* Good accessibility for people with disabilities.\n* Compatibility with common typographic CSS styles when possible and especially with GitHub and GitLab.\n* Full standalone converter without fallback to the built-in Asciidoctor converters.\n* Easy to use and integrate into third-party projects.\n* Well readable and maintainable code – this should be never sacrificed for performance (I’m looking at you, Asciidoctor!).\n\n\n== Non-goals\n\n* Compatibility with existing Asciidoctor CSS styles.\n\n\n== Text Substitutions\n\n=== Quotes\n\nAsciidoctor 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.\nThis converter outputs the correct type of the quotation marks based on the specified language (using standard `lang` attribute).\n\n\n[cols=\"2,^1l,3,^1l,^1\"]\n|===\n| Name | Syntax | Languages (:lang:) | HTML | Rendered\n\n.4+| double quotes\n.4+| \"`word`\"\n| af, en, eo, ga, hi, ia, id, ko, mt, th, tr, zh\n| \u0026#x201c;word\u0026#x201d;\n| “word”\n\n| bs, fi, sv\n| \u0026#x201d;word\u0026#x201d;\n| ”word”\n\n| cs, da, de, is, lt, sl, sk, sr\n| \u0026#x201e;word\u0026#x201c;\n| „word“\n\n| hu, pl, nl, ro\n| \u0026#x201e;word\u0026#x201d;\n| „word”\n\n.5+| single quotes\n.5+| '`word`'\n| af, en, eo, ga, hi, ia, id, ko, mt, th, tr, zh\n| \u0026#x2018;word\u0026#x2019;\n| ‘word’\n\n| bs, fi, sv\n| \u0026#x2019;word\u0026#x2019;\n| ’word’\n\n| cs, da, de, is, lt, sl, sk, sr\n| \u0026#x201a;word\u0026#x2018;\n| ‚word‘\n\n| nl\n| \u0026#x201a;word\u0026#x2019;\n| ‚word’\n\n| hu, pl, ro\n| \u0026#x00ab;word\u0026#x00bb;\n| «word»\n|===\n\nThe default (fallback) type is the first one.\n\n\n=== Replacements\n\nAsciidoctor replaces `--` with em dash (—) and does not provide any replacement for en dash (–).\nThat’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).\nSo this extension also modifies the https://asciidoctor.org/docs/user-manual/#replacements[replacements table]: changes `--` to en dash and adds `---` for em dash.\n\n[cols=\"2,^1l,^1l,^1,2\"]\n|===\n| Name | Syntax | Unicode | Rendered | Notes\n\n| En dash\n| --\n| \u0026#8211;\n| \u0026#8211;\n.2+| Only replaced if between two word characters, between a word character and a line boundary, or flanked by spaces.\n\nWhen flanked by space characters (e.g. `+a -- b+` or `+a --- b+`), the normal spaces are replaced by thin spaces (\\\u0026#8201;).\n\n| Em dash\n| ---\n| \u0026#8212;\n| \u0026#8212;\n\n|===\n\n\n== Other Enhancements\n\n=== Image Block\n\nThe `link` attribute recognizes few special values:\n\nlink=self::\n  Make the image a link with URL of the image itself – to open it in full size.\n\nlink=none / link=false::\n  Suppress the effect of `:html5s-image-default-link: self`, i.e. remove the default image link.\n\nBoth 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).\n\n\n=== Additional Inline Formatting Roles\n\ndel::\n  `++[del]#deleted text#++` is rendered as `\u003cdel\u003edeleted text\u003c/del\u003e`.\n\nins::\n  `++[ins]#inserted text#++` is rendered as `\u003cins\u003einserted text\u003c/ins\u003e`.\n\nstrike::\n  `++[strike]#inserted text#++` is rendered as `\u003cs\u003einserted text\u003c/s\u003e`.\n  This is an alias for `line-through`.\n\n\n== Requirements\n\nNote: 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!\n\nifndef::npm-readme[]\n=== Ruby\n\n* https://www.ruby-lang.org/[Ruby] 2.0+ or http://jruby.org/[JRuby] 9.1+\n* https://rubygems.org/gems/asciidoctor/[Asciidoctor] 1.5.7+\n* https://rubygems.org/gems/thread_safe/[thread_safe] (not required, but recommended for Ruby MRI)\n\n\n=== Node.js\nendif::npm-readme[]\n\n* https://nodejs.org/[Node.js]\n* https://www.npmjs.com/package/@asciidoctor/core[@asciidoctor/core] \u003e=3.0.0 \u003c4.0.0\n\n\n== Installation\n\nifndef::npm-readme[]\n=== Ruby\n\nInstall {gem-name} from Rubygems:\n\n[source, sh, subs=\"+attributes\"]\ngem install {gem-name}\n\nor to get the latest development version:\n\n[source, sh, subs=\"+attributes\"]\ngem install --pre {gem-name}\n\n\n=== Node.js\nendif::npm-readme[]\n\nInstall {gem-name} from npmjs.com:\n\n[source, sh, subs=\"+attributes\"]\nnpm install --save {gem-name}\n\n\n== Usage\n\nifndef::npm-readme[]\n=== CLI\n\n[source, sh, subs=\"+attributes\"]\nasciidoctor -r {gem-name} -b html5s FILE...\n\n\n=== Node.js\nendif::npm-readme[]\n\n[source, js, subs=\"+attributes\"]\n----\n// Load asciidoctor.js and {gem-name}.\nconst asciidoctor = require('@asciidoctor/core')()\nconst asciidoctorHtml5s = require('{gem-name}')\n\n// Register the HTML5s converter and supporting extension.\nasciidoctorHtml5s.register()\n\n// Convert the content to HTML using html5s converter.\nconst content = \"Hello, *world!*!\"\nconst html = asciidoctor.convert(content, { backend: 'html5s' })\nconsole.log(html)\n----\n\n\n=== Attributes\n\nExtra attributes accepted by the {gem-name}:\n\nhtml5s-force-stem-type::\n  Ignore declared (e.g. `:stem: asciimath`, `asciimath:[]`, ...) and default type of the stem macro/block and always use the one specified by this attribute. +\n  Asciidoctor hard-codes the default stem type to “asciimath”, which is not supported by KaTeX.\n\nhtml5s-image-default-link: self::\n  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`.\n\nhtml5s-image-self-link-label::\n  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`).\n  Default is `Open the image in full size`.\n\n\n== License\n\nThis project is licensed under http://opensource.org/licenses/MIT/[MIT License].\nFor the full text of the license, see the link:LICENSE[LICENSE] file.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjirutka%2Fasciidoctor-html5s","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjirutka%2Fasciidoctor-html5s","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjirutka%2Fasciidoctor-html5s/lists"}