1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
if not modules then modules = { } end modules ['spac-hor'] = {
version = 1.001,
comment = "companion to spac-hor.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local chardata = characters.data
local peekchar = tokens.scanners.peekchar
local ctx_space = context.space
local can_have_space = table.tohash {
"lu", "ll", "lt", "lm", "lo", -- letters
-- "mn", "mc", "me", -- marks
"nd", "nl", "no", -- numbers
"ps", "pi", -- initial
-- "pe", "pf", -- final
-- "pc", "pd", "po", -- punctuation
"sm", "sc", "sk", "so", -- symbols
-- "zs", "zl", "zp", -- separators
-- "cc", "cf", "cs", "co", "cn", -- others
}
interfaces.implement {
name = "autoinsertnextspace",
protected = true,
public = true,
actions = function()
local char = peekchar()
if char then
local d = chardata[char]
if d and can_have_space[d.category] then
ctx_space()
end
end
end,
}
local nuts = nodes.nuts
local tonut = nodes.tonut
local traverseglue = nuts.traversers.glue
local setwidth = nodes.nuts.setwidth
local indentskip_code = nodes.gluecodes.indentskip
local texgetnest = tex.getnest
local function lateindent(amount)
local head = tonut(texgetnest("top","head"))
if head then
for n, s in traverseglue, head do
if s == indentskip_code then
setwidth(n,amount or 0)
end
end
end
end
interfaces.implement {
name = "lateindent",
public = true,
protected = "true",
arguments = "dimension",
actions = lateindent,
}
interfaces.implement {
name = "lateundent",
public = true,
protected = "true",
actions = lateindent,
}
|