Wikipedia m4 example

using Mackerel;

using static Mackerel.Macros;

var macro = Block(
   Buffer(-1)
   Write("# HTML utility macro"),
   Set("H2_COUNT", 0),
   Write("# `H2` is an incrementing instruction, using an environment"),
   Write("# variable to maintain its state."),
   Set("H2", 
   (string title) => 
      Get<int>(
         "H2_COUNT", 
         H2_COUNT => Block(
         Update("H2_COUNT", H2_COUNT + 1),
         WriteLine($"<h2>{H2_COUNT}. {title}</h2>"))
      )
   ),
   Buffer(1),
   Get<Func<string, Macro>>("H2",
   H2 => Block(
      H2("First Section"),
      H2("Second Section"),
      H2("Third Section")
   )
   ),
   Buffer(0),
   WriteLine("<HTML>"),
   WAR(1),
   RAW(Text("</HTML>")),
   )
);