diff options
Diffstat (limited to 'doc/asciidoctor-macros/manarg-block/extension.rb')
-rw-r--r-- | doc/asciidoctor-macros/manarg-block/extension.rb | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/doc/asciidoctor-macros/manarg-block/extension.rb b/doc/asciidoctor-macros/manarg-block/extension.rb new file mode 100644 index 00000000..2461e723 --- /dev/null +++ b/doc/asciidoctor-macros/manarg-block/extension.rb @@ -0,0 +1,45 @@ +# SPDX-License-Identifier: MIT +require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal' + +include Asciidoctor + +# An inline macro that generates markup for man page arguments. +# Adapted from https://github.com/asciidoctor/asciidoctor-extensions-lab/blob/master/lib/man-inline-macro.rb +# +# Usage: +# +# [manarg] +# *command* +# [ *--help* ] +# [ *--flash-lights* ] +# +class ManArgBlock < Extensions::BlockProcessor + use_dsl + + named :manarg + parse_content_as :simple + + def process parent, reader, attrs + nowrap_lines = reader.readlines.map {|line| + if parent.document.basebackend? 'html' + # Apply the custom style "[.nowrap]## ... ##" to each line. + # This generates "<span content="nowrap"> ... </span>". Pass + # each '#' through for extra paranoia. + %([.nowrap]###{line.gsub('#', '+++#+++')}##) + elsif parent.document.backend == 'manpage' + # Replace spaces with non-breaking spaces (' '), then make + # bold markup unconstrained ('*' -> '**'). For now we naively + # assume that bolds are always constrained (that is, we only + # have single '*'s). We *should* be able to do this properly + # with a regex, but for some reason + # gsub(/([^*])\*([^*])/, '\1**\2') + # doesn't match the first asterisk in "*--extcap-interface*=<interface>" + %(#{line.gsub(' ', ' ').gsub('*', '**')}) + else + line + end + } + # STDERR.puts(nowrap_lines) + create_paragraph parent, nowrap_lines, attrs + end +end |