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

[PATCH 09/12] doc: asciidoctor: refactor macro registration

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
May 15, 2021, 11:56 UTC
Message-ID
<20210515115653.922902-10-felipe.contreras@gmail.com>
In-Reply-To
<20210515115653.922902-1-felipe.contreras@gmail.com>

There is no need to execute extra code every time the process block is called.

In Ruby the lexical scope is shared, so we can define variables in the register block scope, and all the rest will inherit those variables.

Based on the doctype and basebackend one of three blocks is selected for the inline_macro. However, the conditionals will be run only once.

In the end Ruby will only run the code between `process do end`, nothing else.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 Documentation/asciidoctor-extensions.rb | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/Documentation/asciidoctor-extensions.rb b/Documentation/asciidoctor-extensions.rb
index c77b6de350..a678704e17 100644
--- a/Documentation/asciidoctor-extensions.rb
+++ b/Documentation/asciidoctor-extensions.rb
@@ -2,15 +2,21 @@ require 'asciidoctor/extensions'
 
 Asciidoctor::Extensions.register do
 
+  doc = document
+
   inline_macro :linkgit do
-    process do |parent, target, attrs|
-      if parent.document.doctype == 'book'
+    if doc.doctype == 'book'
+      process do |parent, target, attrs|
         "<ulink url=\"#{target}.html\">" \
         "#{target}(#{attrs[1]})</ulink>"
-      elsif parent.document.basebackend? 'html'
-        prefix = parent.document.attr('git-relative-html-prefix')
+      end
+    elsif doc.basebackend? 'html'
+      prefix = doc.attr('git-relative-html-prefix')
+      process do |parent, target, attrs|
         %(<a href="#{prefix}#{target}.html">#{target}(#{attrs[1]})</a>)
-      elsif parent.document.basebackend? 'docbook'
+      end
+    elsif doc.basebackend? 'docbook'
+      process do |parent, target, attrs|
         "<citerefentry>\n" \
           "<refentrytitle>#{target}</refentrytitle>" \
           "<manvolnum>#{attrs[1]}</manvolnum>\n" \
-- 
2.31.1
Previous: Felipe ContrerasNext: Felipe Contreras
Message 10 of 13 in “doc: cleanup old cruft and asciidoctor revamp”
  1. 00/12 doc: cleanup old cruft and asciidoctor revampFelipe Contreras, May 15, 2021
  2. 01/12 doc: remove GNU troff workaroundFelipe Contreras, May 15, 2021
  3. 02/12 doc: use --stringparam in xmltoFelipe Contreras, May 15, 2021
  4. 03/12 doc: simplify version passingFelipe Contreras, May 15, 2021
  5. 04/12 doc: asciidoc: remove unnecessary attributeFelipe Contreras, May 15, 2021
  6. 05/12 doc: asciidoctor: remove unnecessary requireFelipe Contreras, May 15, 2021
  7. 06/12 doc: asciidoctor: remove cruftFelipe Contreras, May 15, 2021
  8. 07/12 doc: asciidoctor: reorganize extensionsFelipe Contreras, May 15, 2021
  9. 08/12 doc: asciidoctor: use html-prefix only for htmlFelipe Contreras, May 15, 2021
  10. 09/12 doc: asciidoctor: refactor macro registrationFelipe Contreras, May 15, 2021
  11. 10/12 doc: asciidoctor: improve string handlingFelipe Contreras, May 15, 2021
  12. 11/12 doc: asciidoctor: split the format from the codeFelipe Contreras, May 15, 2021
  13. 12/12 doc: asciidoctor: specify name of our groupFelipe Contreras, May 15, 2021

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.