git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] asciidoctor-extensions: provide `<refmiscinfo/>`

From
MÅMartin Ågren <martin.agren@gmail.com>
Date
Mar 17, 2019, 14:47 UTC
Message-ID
<20190317144747.2418514-1-martin.agren@gmail.com>

When we build with AsciiDoc, asciidoc.conf ensures that each xml-file we generate contains some meta-information which `xmlto` can act on, based on the following template:

  <refmeta>
  <refentrytitle>{mantitle}</refentrytitle>
  <manvolnum>{manvolnum}</manvolnum>
  <refmiscinfo class="source">Git</refmiscinfo>
  <refmiscinfo class="version">{git_version}</refmiscinfo>
  <refmiscinfo class="manual">Git Manual</refmiscinfo>
  </refmeta>

When we build with Asciidoctor, it does not honor this configuration file and we end up with only this (for a hypothetical git-foo.xml):

  <refmeta>
  <refentrytitle>git-foo</refentrytitle>
  <manvolnum>1</manvolnum>
  </refmeta>

That is, we miss out on the `<refmiscinfo/>` tags. As a result, the header of each man page doesn't say "Git Manual", but "git-foo(1)" instead. Worse, the footers don't give the Git version number and instead provide the fairly ugly "[FIXME: source]".

That Asciidoctor ignores asciidoc.conf is nothing new. This is why we implement the `linkgit:` macro in asciidoc.conf *and* in asciidoctor-extensions.rb. Follow suit and provide these tags in asciidoctor-extensions.rb, using a "postprocessor" extension.

We may consider a few alternatives:
  * Provide the `mansource` attribute to Asciidoctor. This attribute
    looks promising until one realizes that it can only be given inside
    the source file (the .txt file in our case), *not* on the command
    line using `-a mansource=foobar`. I toyed with the idea of injecting
    this attribute while feeding Asciidoctor the input on stdin, but it
    didn't feel like it was worth the complexity in the Makefile.
  * Similar to that last idea, we could inject these lines into the
    xml-files from the Makefile, e.g., using `sed`. This reduces
    repetition, but seems fairly brittle. It feels wrong to impose
    another step and another risk on the Asciidoc-processing only to
    benefit the Asciidoctor-one.
  * Considering the above abandoned ideas, it seems better to put any
    complexity inside asciidoctor-extensions.rb. It is after all
    supposed to be the "equivalent" of asciidoc.conf. I considered
    providing a "tree processor" extension and use it to set, e.g.,
    `mansource` mentioned above.

Let's instead try to stay as close as possible to what asciidoc.conf does. We'll make it fairly obvious that we aim to inject the exact same three lines of `<refmiscinfo/>` that asciidoc.conf provides. The only somewhat tricky part is that we inject them *post*-processing so we need to do the variable expansion ourselves.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
---
 Cc Todd and Peff who had a brief exchange [1] a while ago. Apparently
 Todd saw this "[FIXME: source]" on Fedora but Peff did not on Debian.
 I'm on Ubuntu 18.04 and used to see this also on 16.04. I'm not sure
 what might make Debian so special here.
 [1] https://public-inbox.org/git/20180627164443.GK20217@zaya.teonanacatl.net/
 I've based this on ma/asciidoctor-fixes, not because it's needed for
 the patch itself, but because it provides a15ef383e7
 ("Documentation/Makefile: add missing dependency on
 asciidoctor-extensions", 2019-02-27), which ensures that the
 documentation will be rebuilt. I'm hoping this was the right call.
 Documentation/asciidoctor-extensions.rb | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
diff --git a/Documentation/asciidoctor-extensions.rb b/Documentation/asciidoctor-extensions.rb
index 0089e0cfb8..059279dee1 100644
--- a/Documentation/asciidoctor-extensions.rb
+++ b/Documentation/asciidoctor-extensions.rb
@@ -20,9 +20,25 @@ module Git
         end
       end
     end
+
+    class DocumentPostProcessor < Asciidoctor::Extensions::Postprocessor
+      def process document, output
+        if document.basebackend? 'docbook'
+          git_version = document.attributes['git_version']
+          replacement = "" \
+            "<refmiscinfo class=\"source\">Git</refmiscinfo>\n" \
+            "<refmiscinfo class=\"version\">#{git_version}</refmiscinfo>\n" \
+            "<refmiscinfo class=\"manual\">Git Manual</refmiscinfo>\n" \
+            "<\/refmeta>"
+          output = output.sub(/<\/refmeta>/, replacement)
+        end
+        output
+      end
+    end
   end
 end
 
 Asciidoctor::Extensions.register do
   inline_macro Git::Documentation::LinkGitProcessor, :linkgit
+  postprocessor Git::Documentation::DocumentPostProcessor
 end
-- 
2.21.0
Next: Todd Zullinger
Message 1 of 71 in “asciidoctor-extensions: provide `<refmiscinfo/>`”
  1. asciidoctor-extensions: provide `<refmiscinfo/>`Martin Ågren, Mar 17, 2019
  2. Todd ZullingerMar 17, 2019
  3. Martin ÅgrenMar 17, 2019
  4. Martin ÅgrenMar 19, 2019
  5. Todd ZullingerMar 20, 2019
  6. Martin ÅgrenMar 22, 2019
  7. Todd ZullingerMar 23, 2019
  8. Jeff KingMar 24, 2019
  9. Todd ZullingerMar 24, 2019
  10. Jeff KingMar 25, 2019
  11. Todd ZullingerMar 25, 2019
  12. Todd ZullingerMar 27, 2019
  13. SZEDER GáborMar 27, 2019
  14. brian m. carlsonMar 28, 2019
  15. Todd ZullingerMar 30, 2019
  16. brian m. carlsonMar 30, 2019
  17. Todd ZullingerApr 5, 2019
  18. Jeff KingApr 5, 2019
  19. Jeff KingMar 28, 2019
  20. Jeff KingMar 28, 2019
  21. Jeff KingMar 19, 2019
  22. Jeff KingMar 19, 2019
  23. Junio C HamanoMar 19, 2019
  24. Martin ÅgrenMar 19, 2019
  25. Martin ÅgrenMar 19, 2019
  26. 0/2 asciidoctor-extensions: provide `<refmiscinfo/>`Martin Ågren, Sep 3, 2019
  27. 1/2 asciidoctor-extensions: provide `<refmiscinfo/>`Martin Ågren, Sep 3, 2019
  28. 2/2 doc-diff: replace --cut-header-footer with --cut-footerMartin Ågren, Sep 3, 2019
  29. brian m. carlsonSep 3, 2019
  30. Martin ÅgrenSep 5, 2019
  31. Jeff KingSep 4, 2019
  32. Martin ÅgrenSep 5, 2019
  33. Jeff KingSep 7, 2019
  34. Martin ÅgrenSep 7, 2019
  35. Jeff KingSep 8, 2019
  36. brian m. carlsonSep 6, 2019
  37. Jeff KingSep 7, 2019
  38. brian m. carlsonSep 7, 2019
  39. Documentation: fix build with Asciidoctor 2brian m. carlson, Sep 7, 2019
  40. Jeff KingSep 8, 2019
  41. brian m. carlsonSep 8, 2019
  42. Jeff KingSep 8, 2019
  43. brian m. carlsonSep 8, 2019
  44. Junio C HamanoSep 9, 2019
  45. Jeff KingSep 10, 2019
  46. brian m. carlsonSep 11, 2019
  47. SZEDER GáborSep 8, 2019
  48. Jeff KingSep 8, 2019
  49. Documentation: fix build with Asciidoctor 2brian m. carlson, Sep 13, 2019
  50. Jeff KingSep 13, 2019
  51. Junio C HamanoSep 13, 2019
  52. Martin ÅgrenSep 16, 2019
  53. Junio C HamanoSep 16, 2019
  54. SZEDER GáborSep 14, 2019
  55. brian m. carlsonSep 14, 2019
  56. Documentation: fix build with Asciidoctor 2brian m. carlson, Sep 14, 2019
  57. SZEDER GáborSep 15, 2019
  58. brian m. carlsonSep 15, 2019
  59. SZEDER GáborSep 15, 2019
  60. brian m. carlsonSep 15, 2019
  61. Martin ÅgrenSep 16, 2019
  62. Documentation: fix build with Asciidoctor 2brian m. carlson, Sep 15, 2019
  63. 0/3 asciidoctor-extensions: provide `<refmiscinfo/>`Martin Ågren, Sep 16, 2019
  64. 1/3 Doc/Makefile: give mansource/-version/-manual attributesMartin Ågren, Sep 16, 2019
  65. 2/3 asciidoctor-extensions: provide `<refmiscinfo/>`Martin Ågren, Sep 16, 2019
  66. 3/3 doc-diff: replace --cut-header-footer with --cut-footerMartin Ågren, Sep 16, 2019
  67. Jeff KingMar 19, 2019
  68. Martin ÅgrenMar 19, 2019
  69. Jeff KingMar 19, 2019
  70. Todd ZullingerMar 20, 2019
  71. Martin ÅgrenMar 19, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.