luat-sta.lua /size: 5703 b    last modification: 2020-07-01 14:35
1
if
not
modules
then
modules
=
{
}
end
modules
[
'
luat-sta
'
]
=
{
2
version
=
1
.
001
,
3
author
=
"
Hans Hagen, PRAGMA-ADE, Hasselt NL
"
,
4
copyright
=
"
PRAGMA ADE / ConTeXt Development Team
"
,
5
license
=
"
see context related readme files
"
6
}
7 8
-- this code is used in the updater
9 10
local
gmatch
,
match
=
string
.
gmatch
,
string
.
match
11
local
type
=
type
12 13
states
=
states
or
{
}
14
local
states
=
states
15 16
states
.
data
=
states
.
data
or
{
}
17
local
data
=
states
.
data
18 19
states
.
hash
=
states
.
hash
or
{
}
20
local
hash
=
states
.
hash
21 22
states
.
tag
=
states
.
tag
or
"
"
23
states
.
filename
=
states
.
filename
or
"
"
24 25
function
states
.
save
(
filename
,
tag
)
26
tag
=
tag
or
states
.
tag
27
filename
=
file
.
addsuffix
(
filename
or
states
.
filename
,
'
lus
'
)
28
io
.
savedata
(
filename
,
29
"
-- generator : luat-sta.lua\n
"
.
.
30
"
-- state tag :
"
.
.
tag
.
.
"
\n\n
"
.
.
31
table
.
serialize
(
data
[
tag
or
states
.
tag
]
or
{
}
,
true
)
32
)
33
end
34 35
function
states
.
load
(
filename
,
tag
)
36
states
.
filename
=
filename
37
states
.
tag
=
tag
or
"
whatever
"
38
states
.
filename
=
file
.
addsuffix
(
states
.
filename
,
'
lus
'
)
39
data
[
states
.
tag
]
,
hash
[
states
.
tag
]
=
(
io
.
exists
(
filename
)
and
dofile
(
filename
)
)
or
{
}
,
{
}
40
end
41 42
local
function
set_by_tag
(
tag
,
key
,
value
,
default
,
persistent
)
43
local
d
,
h
=
data
[
tag
]
,
hash
[
tag
]
44
if
d
then
45
if
type
(
d
)
=
=
"
table
"
then
46
local
dkey
,
hkey
=
key
,
key
47
local
pre
,
post
=
match
(
key
,
"
(.+)%.([^%.]+)$
"
)
48
if
pre
and
post
then
49
for
k
in
gmatch
(
pre
,
"
[^%.]+
"
)
do
50
local
dk
=
d
[
k
]
51
if
not
dk
then
52
dk
=
{
}
53
d
[
k
]
=
dk
54
elseif
type
(
dk
)
=
=
"
string
"
then
55
-- invalid table, unable to upgrade structure
56
-- hope for the best or delete the state file
57
break
58
end
59
d
=
dk
60
end
61
dkey
,
hkey
=
post
,
key
62
end
63
if
value
=
=
nil
then
64
value
=
default
65
elseif
value
=
=
false
then
66
-- special case
67
elseif
persistent
then
68
value
=
value
or
d
[
dkey
]
or
default
69
else
70
value
=
value
or
default
71
end
72
d
[
dkey
]
,
h
[
hkey
]
=
value
,
value
73
elseif
type
(
d
)
=
=
"
string
"
then
74
-- weird
75
data
[
tag
]
,
hash
[
tag
]
=
value
,
value
76
end
77
end
78
end
79 80
local
function
get_by_tag
(
tag
,
key
,
default
)
81
local
h
=
hash
[
tag
]
82
if
h
and
h
[
key
]
then
83
return
h
[
key
]
84
else
85
local
d
=
data
[
tag
]
86
if
d
then
87
for
k
in
gmatch
(
key
,
"
[^%.]+
"
)
do
88
local
dk
=
d
[
k
]
89
if
dk
~
=
nil
then
90
d
=
dk
91
else
92
return
default
93
end
94
end
95
if
d
=
=
false
then
96
return
false
97
else
98
return
d
or
default
99
end
100
end
101
end
102
end
103 104
states
.
set_by_tag
=
set_by_tag
105
states
.
get_by_tag
=
get_by_tag
106 107
function
states
.
set
(
key
,
value
,
default
,
persistent
)
108
set_by_tag
(
states
.
tag
,
key
,
value
,
default
,
persistent
)
109
end
110 111
function
states
.
get
(
key
,
default
)
112
return
get_by_tag
(
states
.
tag
,
key
,
default
)
113
end
114 115
--~ data.update = {
116
--~ ["version"] = {
117
--~ ["major"] = 0,
118
--~ ["minor"] = 1,
119
--~ },
120
--~ ["rsync"] = {
121
--~ ["server"] = "contextgarden.net",
122
--~ ["module"] = "minimals",
123
--~ ["repository"] = "current",
124
--~ ["flags"] = "-rpztlv --stats",
125
--~ },
126
--~ ["tasks"] = {
127
--~ ["update"] = true,
128
--~ ["make"] = true,
129
--~ ["delete"] = false,
130
--~ },
131
--~ ["platform"] = {
132
--~ ["host"] = true,
133
--~ ["other"] = {
134
--~ ["mswin"] = false,
135
--~ ["linux"] = false,
136
--~ ["linux-64"] = false,
137
--~ ["osx-intel"] = false,
138
--~ ["osx-ppc"] = false,
139
--~ ["sun"] = false,
140
--~ },
141
--~ },
142
--~ ["context"] = {
143
--~ ["available"] = {"current", "beta", "alpha", "experimental"},
144
--~ ["selected"] = "current",
145
--~ },
146
--~ ["formats"] = {
147
--~ ["cont-en"] = true,
148
--~ ["cont-nl"] = true,
149
--~ ["cont-de"] = false,
150
--~ ["cont-cz"] = false,
151
--~ ["cont-fr"] = false,
152
--~ ["cont-ro"] = false,
153
--~ },
154
--~ ["engine"] = {
155
--~ ["pdftex"] = {
156
--~ ["install"] = true,
157
--~ ["formats"] = {
158
--~ ["pdftex"] = true,
159
--~ },
160
--~ },
161
--~ ["luatex"] = {
162
--~ ["install"] = true,
163
--~ ["formats"] = {
164
--~ },
165
--~ },
166
--~ ["xetex"] = {
167
--~ ["install"] = true,
168
--~ ["formats"] = {
169
--~ ["xetex"] = false,
170
--~ },
171
--~ },
172
--~ ["metapost"] = {
173
--~ ["install"] = true,
174
--~ ["formats"] = {
175
--~ ["mpost"] = true,
176
--~ ["metafun"] = true,
177
--~ },
178
--~ },
179
--~ },
180
--~ ["fonts"] = {
181
--~ },
182
--~ ["doc"] = {
183
--~ },
184
--~ ["modules"] = {
185
--~ ["f-urwgaramond"] = false,
186
--~ ["f-urwgothic"] = false,
187
--~ ["t-bnf"] = false,
188
--~ ["t-chromato"] = false,
189
--~ ["t-cmscbf"] = false,
190
--~ ["t-cmttbf"] = false,
191
--~ ["t-construction-plan"] = false,
192
--~ ["t-degrade"] = false,
193
--~ ["t-french"] = false,
194
--~ ["t-lettrine"] = false,
195
--~ ["t-lilypond"] = false,
196
--~ ["t-mathsets"] = false,
197
--~ ["t-tikz"] = false,
198
--~ ["t-typearea"] = false,
199
--~ ["t-vim"] = false,
200
--~ },
201
--~ }
202 203
--~ states.save("teststate", "update")
204
--~ states.load("teststate", "update")
205 206
--~ print(states.get_by_tag("update","rsync.server","unknown"))
207
--~ states.set_by_tag("update","rsync.server","oeps")
208
--~ print(states.get_by_tag("update","rsync.server","unknown"))
209
--~ states.save("teststate", "update")
210
--~ states.load("teststate", "update")
211
--~ print(states.get_by_tag("update","rsync.server","unknown"))
212