I think that the main thing here is that you need to operate on the Figure rather than the Image. Also note that image and figure captions are different: 
I'm not quite sure when or if you should use the short figure caption, but am pretty sure that you do need to set the long figure caption.

Finally, a plug for the https://github.com/pandoc-ext/logging module, which can help to shed light on the AST structure. With this document (I guessed your input format):

![Figure 1: Cat](Cat.png)

...and with this lua filter (derived from yours):

local logging = require 'logging'

function Figure(fig)
    logging.temp('figure', fig)
end

function Image(img)
    logging.temp('image', img)
    local caption = pandoc.utils.stringify(img.caption)
    if (string.find(caption, 'Fig') ~= nil) then
        img.caption[1] = pandoc.Strong(img.caption[1])
        img.caption[3] = pandoc.Str(string.gsub(img.caption[3].text, ":", "."))
        img.caption[3] = pandoc.Strong(img.caption[3])
        local fig_num_string = string.sub(
            pandoc.utils.stringify(img.caption[3]),1,2)
        local fig_num = math.floor(tonumber(fig_num_string))
        if (fig_num > 6) then
            img.caption[3] = pandoc.Strong("S" .. tostring(8-fig_num) .. '.')
        end
        img.caption.long = pandoc.Strong('A')
        img.caption = pandoc.Strong('A')
    end
    logging.temp('->', img)
    return img
end

...you get this output:

% pandoc figure.md -L figure.lua
(#) image Image {
  attr: Attr {
    attributes: AttributeList {}
    classes: List {}
    identifier: ""
  }
  caption: Inlines[5] {
    [1] Str "Figure"
    [2] Space
    [3] Str "1:"
    [4] Space
    [5] Str "Cat"
  }
  src: "Cat.png"
  title: ""
}
(#) -> Image {
  attr: Attr {
    attributes: AttributeList {}
    classes: List {}
    identifier: ""
  }
  caption: Inlines[1] {
    [1] Strong {
      content: Inlines[1] {
        [1] Str "A"
      }
    }
  }
  src: "Cat.png"
  title: ""
}
(#) figure Figure {
  attr: Attr {
    attributes: AttributeList {}
    classes: List {}
    identifier: ""
  }
  caption: {
    long: Blocks[1] {
      [1] Plain {
        content: Inlines[5] {
          [1] Str "Figure"
          [2] Space
          [3] Str "1:"
          [4] Space
          [5] Str "Cat"
        }
      }
    }
  }
  content: Blocks[1] {
    [1] Plain {
      content: Inlines[1] {
        [1] Image {
          attr: Attr {
            attributes: AttributeList {}
            classes: List {}
            identifier: ""
          }
          caption: Inlines[1] {
            [1] Strong {
              content: Inlines[1] {
                [1] Str "A"
              }
            }
          }
          src: "Cat.png"
          title: ""
        }
      }
    }
  }
}
<figure>
<img src="Cat.png" alt="A" />
<figcaption>Figure 1: Cat</figcaption>
</figure>

On Tue, 13 Jun 2023 at 14:16, Stephan Boltzmann <stephan2boltzmann-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
Hello everybody out there using Pandoc,

The following Lua (used with RMarkdown in RStudio) filter should put "Figure n." in bold at the beginning of every figure caption, but it doesn't change my output:

function Image (img)
  if FORMAT:match 'docx' then
    caption = pandoc.utils.stringify(img.caption)
    if (string.find(caption, 'Fig') ~= nil) then
      img.caption[1] = pandoc.Strong(img.caption[1])
      img.caption[3] = pandoc.Str(string.gsub(img.caption[3].text, ":", "."))
      img.caption[3] = pandoc.Strong(img.caption[3])
      fig_num_string = string.sub(pandoc.utils.stringify(img.caption[3]),1,2)
      fig_num = math.floor(tonumber(fig_num_string))
      if (fig_num > 6) then
        img.caption[3] = pandoc.Strong("S" .. tostring(8-fig_num) .. '.')
      end
      img.caption.long = pandoc.Strong('A')
      img.caption = pandoc.Strong('A')
    end
  end
  print(pandoc.utils.stringify(img.caption.long))
  return img
end

By putting print statements, I can partially verify that the filter operates on the correct elements, but it doesn't change the output.

--
You received this message because you are subscribed to the Google Groups "pandoc-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
To view this discussion on the web visit https://groups.google.com/d/msgid/pandoc-discuss/534b2214-42e6-4be9-8b0e-537509f5be3an%40googlegroups.com.

--
You received this message because you are subscribed to the Google Groups "pandoc-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
To view this discussion on the web visit https://groups.google.com/d/msgid/pandoc-discuss/CAEe_xxgZwgmFNJ%2Bs60WJvnvXfk4kGg8UWPoqV2cEPPg_uBev8w%40mail.gmail.com.