• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

sile-typesetter / sile / 9507147410

13 Jun 2024 09:40PM UTC coverage: 50.521% (-18.7%) from 69.177%
9507147410

push

github

web-flow
Merge pull request #2062 from alerque/plug-fluent-leak

Link document.language setting more closely with Fluent locale

15 of 15 new or added lines in 3 files covered. (100.0%)

3244 existing lines in 65 files now uncovered.

8586 of 16995 relevant lines covered (50.52%)

4659.09 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

74.24
/packages/base.lua
1
--- SILE package class.
2
-- @interfaces packages
3

4
local package = pl.class()
4✔
5
package.type = "package"
4✔
6
package._name = "base"
4✔
7

8
package._initialized = false
4✔
9
package.class = nil
4✔
10

11
-- For shimming packages that used to have legacy exports
12
package.exports = {}
4✔
13

14
local function script_path ()
15
   local src = debug.getinfo(3, "S").source:sub(2)
16✔
16
   local base = src:match("(.*[/\\])")
16✔
17
   return base
16✔
18
end
19

20
local settingDeclarations = {}
4✔
21
local rawhandlerRegistrations = {}
4✔
22
local commandRegistrations = {}
4✔
23

24
function package:_init (_, reload)
4✔
25
   self.class = SILE.scratch.half_initialized_class or SILE.documentState.documentClass
16✔
26
   if not self.class then
16✔
27
      SU.error("Attempted to initialize package before class, should have been queued in the preamble", true)
×
28
   end
29
   self.basedir = script_path()
32✔
30
   -- Note string.format(%p) would be nicer than tostring() but only LuaJIT and Lua 5.4 support it
31
   local settingsDeclarator = tostring(self.declareSettings)
16✔
32
   if reload or not settingDeclarations[settingsDeclarator] then
16✔
33
      settingDeclarations[settingsDeclarator] = true
5✔
34
      self:declareSettings()
5✔
35
   end
36
   local rawhandlerRegistrator = tostring(self.registerRawHandlers)
16✔
37
   if reload or not rawhandlerRegistrations[rawhandlerRegistrator] then
16✔
38
      rawhandlerRegistrations[rawhandlerRegistrator] = true
4✔
39
      self:registerRawHandlers()
4✔
40
   end
41
   local commandRegistrator = tostring(self.registerCommands)
16✔
42
   if reload or not commandRegistrations[commandRegistrator] then
16✔
43
      commandRegistrations[commandRegistrator] = true
15✔
44
      self:registerCommands()
15✔
45
   end
46
end
47

48
function package:_post_init ()
4✔
49
   self._initialized = true
16✔
50
end
51

52
function package.declareSettings (_) end
8✔
53

54
function package.registerRawHandlers (_) end
8✔
55

56
function package:loadPackage (packname, options, reload)
4✔
57
   return self.class:loadPackage(packname, options, reload)
5✔
58
end
59

60
function package:reloadPackage (packname, options)
4✔
61
   return self.class:reloadPackage(packname, options)
×
62
end
63

64
function package.registerCommands (_) end
4✔
65

66
-- This gives us a hook to match commands with the packages that registered
67
-- them as opposed to core commands or class-provided commands
68

69
--- Register a function as a SILE command.
70
-- Takes any Lua function and registers it for use as a SILE command (which will in turn be used to process any content
71
-- nodes identified with the command name.
72
--
73
-- A similar method is available for classes, `classes:registerCommand`.
74
-- @tparam string name Name of cammand to register.
75
-- @tparam function func Callback function to use as command handler.
76
-- @tparam[opt] nil|string help User friendly short usage string for use in error messages, documentation, etc.
77
-- @tparam[opt] nil|string pack Information identifying the module registering the command for use in error and usage
78
-- messages. Usually auto-detected.
79
-- @see SILE.classes:registerCommand
80
function package:registerCommand (name, func, help, pack)
4✔
81
   self.class:registerCommand(name, func, help, pack)
72✔
82
end
83
function package:registerRawHandler (format, callback)
4✔
UNCOV
84
   self.class:registerRawHandler(format, callback)
×
85
end
86

87
-- Using this rather than doing the work directly will give us a way to
88
-- un-export them if we ever need to unload modules and revert functions
89
function package:export (name, func)
4✔
90
   self.class[name] = func
14✔
91
end
92

93
-- Shims for two possible kinds of legacy exports: blind direct stuffing into
94
-- the class but not expecting to be called as a method AND the exports table
95
-- to package modules...
96

97
local _deprecate_class_funcs = [[
98
  Please explicitly use functions provided by packages by referencing
99
  them in the document class's list of loaded packages rather than the
100
  legacy solution that added non-method functions to the class.]]
4✔
101

102
local _deprecate_exports_table = [[
103
  Please explicitly use functions provided by packages by referencing
104
  them in the document class's list of loaded packages rather than the
105
  legacy solution of calling them from an exports table.]]
4✔
106

107
function package:deprecatedExport (name, func, noclass, notable)
4✔
108
   if not noclass then
22✔
109
      self.class[name] = function (...)
22✔
110
         -- http://lua-users.org/wiki/VarargTheSecondClassCitizen
UNCOV
111
         local inputs = { ... }
×
112
         -- local inputs = table.unpack({...}, 1, select("#", ...))
UNCOV
113
         if type(inputs[1]) ~= "table" or inputs[1].type ~= "class" then
×
114
            table.insert(inputs, 1, self.class)
×
115
         end
UNCOV
116
         SU.deprecated(
×
UNCOV
117
            ("class.%s"):format(name),
×
UNCOV
118
            ("class.packages.%s:%s"):format(self._name, name),
×
119
            "0.14.0",
120
            "0.16.0",
121
            _deprecate_class_funcs
122
         )
UNCOV
123
         return func(pl.utils.unpack(inputs, 1, select("#", ...) + 1))
×
124
      end
125
   end
126

127
   if not notable then
22✔
128
      self.exports[name] = function (...)
22✔
129
         local inputs = { ... }
×
130
         if type(inputs[1]) ~= "table" or inputs[1].type ~= "package" then
×
131
            table.insert(inputs, 1, self)
×
132
         end
133
         SU.deprecated(
×
134
            ("require('packages.%s').exports.%s"):format(self._name, name),
×
135
            ("class.packages.%s:%s"):format(self._name, name),
×
136
            "0.14.0",
137
            "0.16.0",
138
            _deprecate_exports_table
139
         )
140
         return func(pl.utils.unpack(inputs, 1, select("#", ...) + 1))
×
141
      end
142
   end
143
end
144

145
return package
4✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc