Skip to content

Commit

Permalink
refactor(typesetters): Move setting declarations back to init but pro…
Browse files Browse the repository at this point in the history
…tect previously declared ones
  • Loading branch information
alerque committed Mar 29, 2023
1 parent cd9c85e commit 2ff8d37
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 70 deletions.
4 changes: 4 additions & 0 deletions core/settings.lua
Expand Up @@ -111,6 +111,10 @@ function settings:declare (spec)
if spec.name then
SU.deprecated("'name' argument of SILE.settings:declare", "'parameter' argument of SILE.settings:declare", "0.10.10", "0.11.0")
end
if self.declarations[spec.parameter] then
SU.warn("Refusing to declare previously declared setting: " .. spec.parameter)
return
end
self.declarations[spec.parameter] = spec
self:set(spec.parameter, spec.default, true)
end
Expand Down
145 changes: 75 additions & 70 deletions typesetters/base.lua
Expand Up @@ -4,76 +4,6 @@
-- @module typesetters.base
--

-- Settings common to any typesetter instance.
-- These shouldn't be re-declared and overwritten/reset in the typesetter
-- constructor (see issue https://github.com/sile-typesetter/sile/issues/1708).
-- On the other hand, it's fairly acceptable to have them made global:
-- Any derived typesetter, whatever its implementation, should likely provide
-- some logic for them (= widows, orphans, spacing, etc.)

SILE.settings:declare({
parameter = "typesetter.widowpenalty",
type = "integer",
default = 3000,
help = "Penalty to be applied to widow lines (at the start of a paragraph)"
})

SILE.settings:declare({
parameter = "typesetter.parseppattern",
type = "string or integer",
default = "\r?\n[\r\n]+",
help = "Lua pattern used to separate paragraphs"
})

SILE.settings:declare({
parameter = "typesetter.obeyspaces",
type = "boolean or nil",
default = nil,
help = "Whether to ignore paragraph initial spaces"
})

SILE.settings:declare({
parameter = "typesetter.orphanpenalty",
type = "integer",
default = 3000,
help = "Penalty to be applied to orphan lines (at the end of a paragraph)"
})

SILE.settings:declare({
parameter = "typesetter.parfillskip",
type = "glue",
default = SILE.nodefactory.glue("0pt plus 10000pt"),
help = "Glue added at the end of a paragraph"
})

SILE.settings:declare({
parameter = "document.letterspaceglue",
type = "glue or nil",
default = nil,
help = "Glue added between tokens"
})

SILE.settings:declare({
parameter = "typesetter.underfulltolerance",
type = "length or nil",
default = SILE.length("1em"),
help = "Amount a page can be underfull without warning"
})

SILE.settings:declare({
parameter = "typesetter.overfulltolerance",
type = "length or nil",
default = SILE.length("5pt"),
help = "Amount a page can be overfull without warning"
})

SILE.settings:declare({
parameter = "typesetter.breakwidth",
type = "measurement or nil",
default = nil,
help = "Width to break lines at"
})

-- Typesetter base class

local typesetter = pl.class()
Expand Down Expand Up @@ -117,6 +47,7 @@ function typesetter:init (frame)
end

function typesetter:_init (frame)
self:declareSettings()
self.hooks = {}
self.breadcrumbs = SU.breadcrumbs()

Expand All @@ -129,6 +60,80 @@ function typesetter:_init (frame)
return self
end

function typesetter:declareSettings()

-- Settings common to any typesetter instance.
-- These shouldn't be re-declared and overwritten/reset in the typesetter
-- constructor (see issue https://github.com/sile-typesetter/sile/issues/1708).
-- On the other hand, it's fairly acceptable to have them made global:
-- Any derived typesetter, whatever its implementation, should likely provide
-- some logic for them (= widows, orphans, spacing, etc.)

SILE.settings:declare({
parameter = "typesetter.widowpenalty",
type = "integer",
default = 3000,
help = "Penalty to be applied to widow lines (at the start of a paragraph)"
})

SILE.settings:declare({
parameter = "typesetter.parseppattern",
type = "string or integer",
default = "\r?\n[\r\n]+",
help = "Lua pattern used to separate paragraphs"
})

SILE.settings:declare({
parameter = "typesetter.obeyspaces",
type = "boolean or nil",
default = nil,
help = "Whether to ignore paragraph initial spaces"
})

SILE.settings:declare({
parameter = "typesetter.orphanpenalty",
type = "integer",
default = 3000,
help = "Penalty to be applied to orphan lines (at the end of a paragraph)"
})

SILE.settings:declare({
parameter = "typesetter.parfillskip",
type = "glue",
default = SILE.nodefactory.glue("0pt plus 10000pt"),
help = "Glue added at the end of a paragraph"
})

SILE.settings:declare({
parameter = "document.letterspaceglue",
type = "glue or nil",
default = nil,
help = "Glue added between tokens"
})

SILE.settings:declare({
parameter = "typesetter.underfulltolerance",
type = "length or nil",
default = SILE.length("1em"),
help = "Amount a page can be underfull without warning"
})

SILE.settings:declare({
parameter = "typesetter.overfulltolerance",
type = "length or nil",
default = SILE.length("5pt"),
help = "Amount a page can be overfull without warning"
})

SILE.settings:declare({
parameter = "typesetter.breakwidth",
type = "measurement or nil",
default = nil,
help = "Width to break lines at"
})

end

function typesetter:initState ()
self.state = {
nodes = {},
Expand Down

0 comments on commit 2ff8d37

Please sign in to comment.