casile 0.14.4

The command line interface to the CaSILE toolkit, a book publishing workflow employing SILE and other wizardry
Documentation
local base = require("packages.base")

local package = pl.class(base)
package._name = "watermark"

local text = os.getenv("CASILE_WATERMARK") or "DRAFT"

function package:_init (options)
   if options.text then
      text = options.text
   end
   base._init(self, options)
   self:loadPackage("rotate")
   self.class:registerHook("newpage", self.addWatermark)
   self:addWatermark()
end

function package.addWatermark ()
   local frame = SILE.newFrame({
      id = "watermark",
      left = "left(page)+20",
      right = "right(page)-20",
      top = "top(page)+20",
      bottom = "bottom(page)-20",
   })
   SILE.documentState.thisPageTemplate.frames.watermark = frame
   SILE.typesetNaturally(frame, SILE.Commands["watermark:content"])
end

function package:registerCommands ()
   self:registerCommand("watermark:content", function (_, _)
      SILE.call("hbox")
      SILE.call("skip", { height = "20%fh" })
      SILE.call("center", {}, function ()
         SILE.call("color", { color = "#fafafa" }, function ()
            SILE.call("rotate", { angle = -35 }, function ()
               SILE.call("font", { family = "TeX Gyre Heros", weight = 900, size = "8%fw" }, { text })
            end)
            SILE.call("skip", { height = "20%fh" })
            SILE.call("rotate", { angle = -35 }, function ()
               SILE.call("font", { family = "TeX Gyre Heros", weight = 900, size = "8%fw" }, { text })
            end)
         end)
      end)
   end)
end

return package