160 lines
4.6 KiB
Lua

-- Copyright 2022 Jeremy Wall
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
local base = SILE.baseClass
local plain = SILE.require("plain", "classes")
local resume = plain { id = resume }
SILE.require("packages/url")
SILE.require("packages/pdf")
SILE.require("packages/rules")
-- Setup our settings.
SILE.settings.declare({
parameter = "resume.author",
default = "",
type = "string",
help = "The author of this resume"
})
SILE.settings.declare({
parameter = "resume.email",
default = "",
type = "string",
help = "Resume Author email address",
})
SILE.settings.declare({
parameter = "resume.site",
default = "",
type = "string",
help = "Resume Author website",
})
SILE.settings.declare({
parameter = "resume.keywords",
default = "",
type = "string",
help = "Resume keywords",
})
SILE.settings.set("document.parindent", SILE.nodefactory.glue())
local simpletable = SILE.require("packages/simpletable")
simpletable.init(SILE.documentState.documentClass, {tableTag = "table", trTag = "tr", tdTag = "td"})
resume.defaultFrameset = {
content = {
left = "10%pw",
right = "90%pw",
top = "5%ph",
bottom = "92%ph"
}
}
resume.endPage = function(self)
-- We skip calling plains endPage but we still need
-- to call the base classes endPage callback.
base.endPage(self)
end
SILE.registerCommand("resume", function(opts, content)
local author = SILE.settings.get("resume.author")
if author == "" then
SILE.warn("resume.author was empty. Author info will be missing.")
else
SILE.call("pdf:metadata", {key="Author", value=author}, "")
end
local keywords = SILE.settings.get("resume.keywords")
if keywords == "" then
SILE.warn("resume.keywords was empty. site keywords will be missing.")
else
SILE.call("pdf:metadata", {key="Keywords", value=keywords}, "")
end
local email = SILE.settings.get("resume.email")
if email == "" then
SILE.warn("resume.email was empty. Email info will be missing.")
end
local site = SILE.settings.get("resume.site")
if site == "" then
SILE.warn("resume.site was empty. site info will be missing.")
end
SILE.call("section", {}, function()
SILE.typesetter:typeset(author)
end)
SILE.call("table", {}, function()
SILE.call("tr", {}, function()
SILE.call("td", {}, function()
SILE.call("bold", {}, function()
SILE.typesetter:typeset("Email: ")
end)
end)
SILE.call("td", {}, function()
SILE.call("email", {src=email})
end)
end)
SILE.call("tr", {}, function()
SILE.call("td", {}, function()
SILE.call("bold", {}, function()
SILE.typesetter:typeset("Site: ")
end)
end)
SILE.call("td", {}, function()
SILE.call("psite")
end)
end)
end)
SILE.process(content)
end)
SILE.registerCommand("email", function(opts, content)
if opts["src"] then
SILE.call("href", {src="mailto:" .. opts["src"]}, opts["src"])
else
SILE.error("src attribute is required")
end
end)
SILE.registerCommand("site", function(opts, content)
if opts["src"] then
SILE.call("href", {src="https://" .. opts["src"]}, opts["src"])
end
end)
SILE.registerCommand("psite", function(opts, content)
local site = SILE.settings.get("resume.site")
if site == "" then
SILE.warn("resume.site was empty. site info will be missing.")
end
SILE.call("site", {src=site}, "")
end)
-- TODO(jwall): Bullet could be way better than it currently is.
resume.registerCommands = function()
plain.registerCommands()
SILE.doTexlike([[%
\define[command=section]{\font[size=3em]{\process} \bigskip}%
\define[command=subsection]{\bigskip \font[size=2em]{\process} \bigskip}%
\define[command=bold]{\font[style=bold]{\process}}%
\define[command=para]{\process \medskip}%
\define[command=bullet]{* \process}%
]])
end
return resume