summaryrefslogtreecommitdiff
path: root/tex
diff options
context:
space:
mode:
authorMarius <mariausol@gmail.com>2010-09-30 19:58:31 +0300
committerMarius <mariausol@gmail.com>2010-09-30 19:58:31 +0300
commite4a6b3ac3421762a868c4979d242f390c0e0fdee (patch)
tree14c837f1582ef992f96a6adb7343f82ee703c28f /tex
parent92c4ba2c9a6404cbf3ac78f7b120b2c5892a45e7 (diff)
downloadcontext-e4a6b3ac3421762a868c4979d242f390c0e0fdee.tar.gz
beta 2010.09.29 23:37
Diffstat (limited to 'tex')
-rw-r--r--tex/context/base/buff-ver.mkiv2
-rw-r--r--tex/context/base/catc-ctx.tex10
-rw-r--r--tex/context/base/cont-new.tex2
-rw-r--r--tex/context/base/context.tex2
-rw-r--r--tex/context/base/grph-fig.mkiv1
-rw-r--r--tex/context/base/grph-inc.lua308
-rw-r--r--tex/context/base/grph-inc.mkiv39
-rw-r--r--tex/context/base/lang-lab.mkiv11
-rw-r--r--tex/context/base/lxml-tex.lua3
-rw-r--r--tex/context/base/strc-lev.lua8
-rw-r--r--tex/context/base/strc-lev.mkiv16
-rw-r--r--tex/generic/context/luatex-fonts-merged.lua2
12 files changed, 236 insertions, 168 deletions
diff --git a/tex/context/base/buff-ver.mkiv b/tex/context/base/buff-ver.mkiv
index 9fdc19ca4..d20c5a2a5 100644
--- a/tex/context/base/buff-ver.mkiv
+++ b/tex/context/base/buff-ver.mkiv
@@ -392,7 +392,7 @@
{\initializetype
\verbatimcolor
\dosetverbatimfont
- \setcatcodetable \typcatcodesa
+ \setcatcodetable \typcatcodesc % was a
\def\dodotypeDD##1#1{\dodotypeAA{##1}}%
\dodotypeDD}
diff --git a/tex/context/base/catc-ctx.tex b/tex/context/base/catc-ctx.tex
index e2c35c42b..77e8fe88c 100644
--- a/tex/context/base/catc-ctx.tex
+++ b/tex/context/base/catc-ctx.tex
@@ -22,6 +22,7 @@
% \ifdefined \xmlcatcodesr \else \newcatcodetable \xmlcatcodesr \fi % reduce
\ifdefined \typcatcodesa \else \newcatcodetable \typcatcodesa \fi % { }
\ifdefined \typcatcodesb \else \newcatcodetable \typcatcodesb \fi % < >
+\ifdefined \typcatcodesc \else \newcatcodetable \typcatcodesc \fi % delimited
\startcatcodetable \ctxcatcodes
\catcode`\^^I = 10
@@ -164,6 +165,15 @@
\catcode`\> = 2
\stopcatcodetable
+
+\startcatcodetable \typcatcodesc
+ \catcode`\^^I = 12
+ \catcode`\^^M = 12
+ \catcode`\^^L = 12
+ \catcode`\ = 12
+ \catcode`\^^Z = 12
+\stopcatcodetable
+
\startcatcodetable \txtcatcodes
\catcode`\^^I = 10
\catcode`\^^M = 5
diff --git a/tex/context/base/cont-new.tex b/tex/context/base/cont-new.tex
index 7b2b86610..db575e475 100644
--- a/tex/context/base/cont-new.tex
+++ b/tex/context/base/cont-new.tex
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2010.09.29 10:46}
+\newcontextversion{2010.09.29 23:37}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/context.tex b/tex/context/base/context.tex
index 48d039a4d..cc3a28b77 100644
--- a/tex/context/base/context.tex
+++ b/tex/context/base/context.tex
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2010.09.29 10:46}
+\edef\contextversion{2010.09.29 23:37}
%D For those who want to use this:
diff --git a/tex/context/base/grph-fig.mkiv b/tex/context/base/grph-fig.mkiv
index 5064e5c43..856821b45 100644
--- a/tex/context/base/grph-fig.mkiv
+++ b/tex/context/base/grph-fig.mkiv
@@ -591,6 +591,7 @@
\c!background=, % new
\c!splitcolor=\s!white,
\c!conversion=,
+ \c!resolution=,
\c!prefix=,
\c!cache=,
% \c!grid=,
diff --git a/tex/context/base/grph-inc.lua b/tex/context/base/grph-inc.lua
index 0a3346846..95a465b4d 100644
--- a/tex/context/base/grph-inc.lua
+++ b/tex/context/base/grph-inc.lua
@@ -248,105 +248,108 @@ end
-- interfacing to tex
-do
-
- local figuredata = { }
- local callstack = { }
-
- function figures.new() -- we could use metatables status -> used -> request but it needs testing
- local request = {
- name = false,
- label = false,
- format = false,
- page = false,
- width = false,
- height = false,
- preview = false,
- ["repeat"] = false,
- controls = false,
- display = false,
- conversion = false,
- cache = false,
- prefix = false,
- size = false,
- }
- local used = {
- fullname = false,
- format = false,
- name = false,
- path = false,
- suffix = false,
- width = false,
- height = false,
- }
- local status = {
- status = 0,
- converted = false,
- cached = false,
- fullname = false,
- format = false,
- }
- -- setmetatable(status, { __index = used })
- -- setmetatable(used, { __index = request })
- figuredata = {
- request = request,
- used = used,
- status = status,
- }
- return figuredata
- end
- function figures.push(request)
- local ncs = #callstack + 1
- if ncs == 1 then
- statistics.starttiming(figures)
- end
- local figuredata = figures.new()
- if request then
- local iv = interfaces.variables
- -- request.width/height are strings and are only used when no natural dimensions
- -- can be determined; at some point the handlers might set them to numbers instead
- -- local w, h = tonumber(request.width), tonumber(request.height)
- request.page = math.max(tonumber(request.page) or 1,1)
- request.size = img.checksize(request.size)
- request.object = iv[request.object] == variables.yes
- request["repeat"] = iv[request["repeat"]] == variables.yes
- request.preview = iv[request.preview] == variables.yes
- request.cache = request.cache ~= "" and request.cache
- request.prefix = request.prefix ~= "" and request.prefix
- request.format = request.format ~= "" and request.format
- -- request.width = (w and w > 0) or false
- -- request.height = (h and h > 0) or false
- table.merge(figuredata.request,request)
- end
- callstack[ncs] = figuredata
- return figuredata
- end
- function figures.pop()
- local ncs = #callstack
- figuredata = callstack[ncs]
- callstack[ncs] = nil
- if ncs == 1 then
- statistics.stoptiming(figures)
- end
+local figuredata = { }
+local callstack = { }
+
+function figures.new() -- we could use metatables status -> used -> request but it needs testing
+ local request = {
+ name = false,
+ label = false,
+ format = false,
+ page = false,
+ width = false,
+ height = false,
+ preview = false,
+ ["repeat"] = false,
+ controls = false,
+ display = false,
+ conversion = false,
+ resolution = false,
+ cache = false,
+ prefix = false,
+ size = false,
+ }
+ local used = {
+ fullname = false,
+ format = false,
+ name = false,
+ path = false,
+ suffix = false,
+ width = false,
+ height = false,
+ }
+ local status = {
+ status = 0,
+ converted = false,
+ cached = false,
+ fullname = false,
+ format = false,
+ }
+ -- setmetatable(status, { __index = used })
+ -- setmetatable(used, { __index = request })
+ figuredata = {
+ request = request,
+ used = used,
+ status = status,
+ }
+ return figuredata
+end
+
+function figures.push(request)
+ local ncs = #callstack + 1
+ if ncs == 1 then
+ statistics.starttiming(figures)
end
- -- maybe move texsprint to tex
- function figures.get(category,tag,default)
- local value = figuredata[category]
- value = value and value[tag]
- if not value or value == "" or value == true then
- return default or ""
- else
- return value
- end
+ local figuredata = figures.new()
+ if request then
+ local iv = interfaces.variables
+ -- request.width/height are strings and are only used when no natural dimensions
+ -- can be determined; at some point the handlers might set them to numbers instead
+ -- local w, h = tonumber(request.width), tonumber(request.height)
+ request.page = math.max(tonumber(request.page) or 1,1)
+ request.size = img.checksize(request.size)
+ request.object = iv[request.object] == variables.yes
+ request["repeat"] = iv[request["repeat"]] == variables.yes
+ request.preview = iv[request.preview] == variables.yes
+ request.cache = request.cache ~= "" and request.cache
+ request.prefix = request.prefix ~= "" and request.prefix
+ request.format = request.format ~= "" and request.format
+ -- request.width = (w and w > 0) or false
+ -- request.height = (h and h > 0) or false
+ table.merge(figuredata.request,request)
end
- function figures.tprint(category,tag,default)
- texsprint(ctxcatcodes,figures.get(category,tag,default))
+ callstack[ncs] = figuredata
+ return figuredata
+end
+
+function figures.pop()
+ local ncs = #callstack
+ figuredata = callstack[ncs]
+ callstack[ncs] = nil
+ if ncs == 1 then
+ statistics.stoptiming(figures)
end
- function figures.current()
- return callstack[#callstack]
+end
+
+-- maybe move texsprint to tex
+
+function figures.get(category,tag,default)
+ local value = figuredata[category]
+ value = value and value[tag]
+ if not value or value == "" or value == true then
+ return default or ""
+ else
+ return value
end
+end
+function figures.tprint(category,tag,default)
+ texsprint(ctxcatcodes,figures.get(category,tag,default))
+end
+
+function figures.current()
+ return callstack[#callstack]
end
local defaultformat = "pdf"
@@ -357,16 +360,20 @@ local function register(askedname,specification)
local format = specification.format
if format then
local conversion = specification.conversion
+ local resolution = specification.resolution
if conversion == "" then
conversion = nil
end
+ if resolution == "" then
+ resolution = nil
+ end
local newformat = conversion
if not newformat or newformat == "" then
newformat = defaultformat
end
if trace_conversion then
- report_graphics("checking conversion of '%s': old format '%s', new format '%s', conversion '%s'",
- askedname,format,newformat,conversion or "default")
+ report_graphics("checking conversion of '%s': old format '%s', new format '%s', conversion '%s', resolution '%s'",
+ askedname,format,newformat,conversion or "default",resolution or "default")
end
local converter = (newformat ~= format) and converters[format]
if converter then
@@ -387,7 +394,7 @@ local function register(askedname,specification)
local oldname = specification.fullname
local newpath = file.dirname(oldname)
local oldbase = file.basename(oldname)
- local newbase = file.replacesuffix(oldbase,newformat)
+ local newbase = file.removesuffix(oldbase)
local fc = specification.cache or figures.cachepaths.path
if fc and fc ~= "" and fc ~= "." then
newpath = fc
@@ -402,6 +409,10 @@ local function register(askedname,specification)
if prefix and prefix ~= "" then
newbase = prefix .. newbase
end
+ if resolution and resolution ~= "" then -- the order might change
+ newbase = newbase .. "_" .. resolution
+ end
+ local newbase = file.addsuffix(newbase,newformat)
local newname = file.join(newpath,newbase)
dir.makedirs(newpath)
oldname = file.collapse_path(oldname)
@@ -412,7 +423,7 @@ local function register(askedname,specification)
if trace_conversion then
report_graphics("converting '%s' from '%s' to '%s'",askedname,format,newformat)
end
- converter(oldname,newname)
+ converter(oldname,newname,resolution or "")
else
if trace_conversion then
report_graphics("no need to convert '%s' from '%s' to '%s'",askedname,format,newformat)
@@ -451,7 +462,7 @@ local function register(askedname,specification)
specification = { }
end
specification.foundname = specification.foundname or specification.fullname
- figures.found[askedname .. "->" .. (specification.conversion or "default")] = specification
+ figures.found[askedname .. "->" .. (specification.conversion or "default") .. "->" .. (specification.resolution or "default")] = specification
return specification
end
@@ -459,7 +470,7 @@ local resolve_too = true -- urls
local function locate(request) -- name, format, cache
local askedname = resolvers.cleanpath(request.name)
- local foundname = figures.found[askedname .. "->" .. (request.conversion or "default")]
+ local foundname = figures.found[askedname .. "->" .. (request.conversion or "default") .. "->" .. (request.resolution or "default")]
if foundname then
return foundname
end
@@ -484,6 +495,7 @@ local function locate(request) -- name, format, cache
local askedformat = (request.format ~= "" and request.format ~= "unknown" and request.format) or file.extname(askedname) or ""
local askedcache = request.cache
local askedconversion = request.conversion
+ local askedresolution = request.resolution
if askedformat ~= "" then
if trace_figures then
commands.writestatus("figures","strategy: forced format")
@@ -504,12 +516,13 @@ local function locate(request) -- name, format, cache
local foundname = figures.exists(askedname,format,resolve_too) -- not askedformat
if foundname then
return register(askedname, {
- askedname = askedname,
- fullname = askedname,
- format = format,
- cache = askedcache,
- foundname = foundname,
+ askedname = askedname,
+ fullname = askedname,
+ format = format,
+ cache = askedcache,
+ foundname = foundname,
conversion = askedconversion,
+ resolution = askedresolution,
})
end
end
@@ -517,11 +530,12 @@ local function locate(request) -- name, format, cache
-- path and type given, todo: strip pieces of path
if figures.exists(askedname,askedformat,resolve_too) then
return register(askedname, {
- askedname = askedname,
- fullname = askedname,
- format = askedformat,
- cache = askedcache,
+ askedname = askedname,
+ fullname = askedname,
+ format = askedformat,
+ cache = askedcache,
conversion = askedconversion,
+ resolution = askedresolution,
})
end
else
@@ -534,11 +548,12 @@ local function locate(request) -- name, format, cache
-- is given we don't waste much time
if figures.exists(check,askedformat,resolve_too) then
return register(check, {
- askedname = askedname,
- fullname = check,
- format = askedformat,
- cache = askedcache,
+ askedname = askedname,
+ fullname = check,
+ format = askedformat,
+ cache = askedcache,
conversion = askedconversion,
+ resolution = askedresolution,
})
end
end
@@ -546,11 +561,12 @@ local function locate(request) -- name, format, cache
local check = resolvers.findfile(askedname)
if check and check ~= "" then
return register(askedname, {
- askedname = askedname,
- fullname = check,
- format = askedformat,
- cache = askedcache,
+ askedname = askedname,
+ fullname = check,
+ format = askedformat,
+ cache = askedcache,
conversion = askedconversion,
+ resolution = askedresolution,
})
end
end
@@ -568,11 +584,12 @@ local function locate(request) -- name, format, cache
local check = file.addsuffix(askedname,suffix)
if figures.exists(check,format,resolve_too) then
return register(askedname, {
- askedname = askedname,
- fullname = check,
- format = format,
- cache = askedcache,
+ askedname = askedname,
+ fullname = check,
+ format = format,
+ cache = askedcache,
conversion = askedconversion,
+ resolution = askedresolution,
})
end
end
@@ -601,11 +618,12 @@ local function locate(request) -- name, format, cache
end
elseif figures.exists(check,format,true) then
return register(askedname, {
- askedname = askedname,
- fullname = check,
- format = format,
- cache = askedcache,
+ askedname = askedname,
+ fullname = check,
+ format = format,
+ cache = askedcache,
conversion = askedconversion,
+ resolution = askedresolution,
})
end
end
@@ -627,11 +645,12 @@ local function locate(request) -- name, format, cache
local check = path .. "/" .. file.replacesuffix(askedbase,suffix)
if figures.exists(check,format,resolve_too) then
return register(askedname, {
- askedname = askedname,
- fullname = check,
- format = format,
- cache = askedcache,
+ askedname = askedname,
+ fullname = check,
+ format = format,
+ cache = askedcache,
conversion = askedconversion,
+ resolution = askedresolution,
})
end
end
@@ -651,11 +670,12 @@ local function locate(request) -- name, format, cache
local check = resolvers.findfile(file.replacesuffix(askedname,suffix))
if check and check ~= "" then
return register(askedname, {
- askedname = askedname,
- fullname = check,
- format = format,
- cache = askedcache,
+ askedname = askedname,
+ fullname = check,
+ format = format,
+ cache = askedcache,
conversion = askedconversion,
+ resolution = askedresolution,
})
end
end
@@ -764,10 +784,14 @@ function checkers.generic(data)
local dr, du, ds = data.request, data.used, data.status
local name, page, size, color = du.fullname or "unknown generic", du.page or dr.page, dr.size or "crop", dr.color or "natural"
local conversion = dr.conversion
+ local resolution = dr.resolution
if not conversion or conversion == "" then
conversion = "unknown"
end
- local hash = name .. "->" .. page .. "->" .. size .. "->" .. color .. "->" .. conversion
+ if not resolution or resolution == "" then
+ resolution = "unknown"
+ end
+ local hash = name .. "->" .. page .. "->" .. size .. "->" .. color .. "->" .. conversion .. "->" .. resolution
local figure = figures.loaded[hash]
if figure == nil then
figure = img.new { filename = name, page = page, pagebox = dr.size }
@@ -928,7 +952,7 @@ includers.tex = includers.nongeneric
-- -- -- converters -- -- --
-local function makeoptions(program)
+local function makeoptions(options)
local to = type(options)
return (to == "table" and concat(options," ")) or (to == "string" and options) or ""
end
@@ -947,19 +971,27 @@ local epsconverter = { }
converters.eps = epsconverter
programs.gs = {
+ resolutions = {
+ [variables.low] = "screen",
+ [variables.medium] = "ebook",
+ [variables.high] = "prepress",
+ },
options = {
"-dAutoRotatePages=/None",
- "-dPDFSETTINGS=/prepress",
+ "-dPDFSETTINGS=/%s",
"-dEPSCrop",
},
- command = (os.type == "windows" and "gswin32") or "gs"
+ command = (os.type == "windows" and "gswin32c") or "gs"
}
-function epsconverter.pdf(oldname,newname)
+function epsconverter.pdf(oldname,newname,resolution) -- the resolution interface might change
local gs = programs.gs
runprogram (
'%s -q -sDEVICE=pdfwrite -dNOPAUSE -dNOCACHE -dBATCH %s -sOutputFile="%s" "%s" -c quit',
- gs.command, makeoptions(gs.options), newname, oldname
+ gs.command,
+ format(makeoptions(gs.options),gs.resolutions[resolution or ""] or "prepress"),
+ newname,
+ oldname
)
end
diff --git a/tex/context/base/grph-inc.mkiv b/tex/context/base/grph-inc.mkiv
index 639ca7d75..b456cadf8 100644
--- a/tex/context/base/grph-inc.mkiv
+++ b/tex/context/base/grph-inc.mkiv
@@ -123,7 +123,8 @@
\let\@@efforegroundcolor\empty
\let\@@efcolor \empty
\let\@@efconversion \empty
- \let\@@efbackground \empty}
+ \let\@@efbackground \empty
+ \let\@@efresolution \empty}
\appendtoks \resetexternalfigures \to \everyoverlay
\appendtoks \resetexternalfigures \to \everybeforepagebody % not really needed
@@ -134,6 +135,7 @@
\let\@@eflabel \empty
\let\@@efsize \empty
\let\@@efconversion\@@exconversion
+ \let\@@efresolution\@@exresolution
\let\@@efprefix \@@exprefix
\let\@@efcache \@@excache
\let\@@efpage \!!zerocount
@@ -230,23 +232,24 @@
% \color[\@@efcolor]{\xdef\globcolorattr{\internalspotcolorname}}
% \endgroup
\ctxlua{figures.push {
- name="#3",
- label="#2", % todo: \@eflabel
- page="\@@efpage",
- size="\@@efsize",
- object="\@@efobject",
- prefix="\@@efprefix",
- cache="\@@efcache",
- format="\@@efmethod",
- preset="\@@efprefix",
- controls="\@@efcontrols",
- preview="\@@efpreview",
- display="\@@efdisplay",
- conversion="\@@efconversion",
- color="\internalspotcolorparent\@@efcolor", % hack is needed
- ["repeat"]="\@@efrepeat",
- width="\@@efwidth", % can be crap
- height="\@@efheight", % can be crap
+ name = "#3",
+ label = "#2", % todo: \@eflabel
+ page = "\@@efpage",
+ size = "\@@efsize",
+ object = "\@@efobject",
+ prefix = "\@@efprefix",
+ cache = "\@@efcache",
+ format = "\@@efmethod",
+ preset = "\@@efprefix",
+ controls = "\@@efcontrols",
+ preview = "\@@efpreview",
+ display = "\@@efdisplay",
+ conversion = "\@@efconversion",
+ resolution = "\@@efresolution",
+ color = "\internalspotcolorparent\@@efcolor", % hack is needed
+ ["repeat"] = "\@@efrepeat",
+ width = "\@@efwidth", % can be crap
+ height = "\@@efheight", % can be crap
} }%
\ctxlua{figures.identify()}%
\ifconditional\testexternalfigureonly
diff --git a/tex/context/base/lang-lab.mkiv b/tex/context/base/lang-lab.mkiv
index 1ef27c6c3..86311e77f 100644
--- a/tex/context/base/lang-lab.mkiv
+++ b/tex/context/base/lang-lab.mkiv
@@ -73,12 +73,12 @@
\expandafter\noexpand\csname #1text\endcsname}}
\def\dododefinelabelclass#1#2#3#4#5#6#7#8#9%
- {\unexpanded\def#3{#5#4}%
- \def#4{\reallanguagetag{\defaultlanguage\currentmainlanguage}}%
- \setuvalue{setup#1text}{\protecttextprefixes#2\def\currenttextprefixclass{#1}\dodoubleempty\dosetupsometextprefix}%
+ {\setuvalue{setup#1text}{\protecttextprefixes#2\def\currenttextprefixclass{#1}\dodoubleempty\dosetupsometextprefix}%
\setuvalue{preset#1text}{\protecttextprefixes1\def\currenttextprefixclass{#1}\dodoubleempty\dosetupsometextprefix}%
+ \def#4{\reallanguagetag{\defaultlanguage\currentmainlanguage}}%
\ifnum#2=\plustwo
- \unexpanded\def#5##1##2% ##1=language
+ \def#3{#5#4}%
+ \def#5##1##2% ##1=language
{\ifcsname\??ml:#1:##1:##2\endcsname
\csname\??ml:#1:##1:##2\endcsname
\else\ifcsname\??la#4\s!default\endcsname
@@ -88,13 +88,14 @@
\else\ifcsname\??ml:#1:\s!en:##2\endcsname
\csname\??ml:#1:\s!en:##2\endcsname
\else
- #2%
+ ##2%
\fi\fi\fi\fi}%
\let#6\gobbleoneargument
\let#7\gobbleoneargument
\let#8\gobbletwoarguments
\let#9#3%
\else
+ \unexpanded\def#3{#5#4}%
\unexpanded\def#5##1##2%
{\ifcsname\??ml:#1:##1:##2\endcsname
\expandafter\let\expandafter\thetextprefix\csname\??ml:#1:##1:##2\endcsname
diff --git a/tex/context/base/lxml-tex.lua b/tex/context/base/lxml-tex.lua
index a0a34cb0d..a90844d2e 100644
--- a/tex/context/base/lxml-tex.lua
+++ b/tex/context/base/lxml-tex.lua
@@ -914,7 +914,8 @@ local function position(collected,n)
end
local function match(collected) -- is match in preceding collected, never change, see bibxml
- texwrite((collected and collected[1].mi) or 0)
+ local m = collected and collected[1]
+ texwrite(m and m.mi or 0)
end
local function index(collected,n)
diff --git a/tex/context/base/strc-lev.lua b/tex/context/base/strc-lev.lua
index cacbc9788..ff30c3f91 100644
--- a/tex/context/base/strc-lev.lua
+++ b/tex/context/base/strc-lev.lua
@@ -10,14 +10,20 @@ local format = string.format
local insert, remove = table.insert, table.remove
local sections = structures.sections
+local default = interfaces.variables.default
-local level, levels, categories = 0, { }, { }
+sections.levels = sections.levels or { }
+
+local level, levels, categories = 0, sections.levels, { }
+
+storage.register("structures/sections/levels", levels, "structures.sections.levels")
function sections.defineautolevels(category,list)
levels[category] = utilities.parsers.settings_to_array(list)
end
function sections.startautolevel(category)
+ category = category ~= "" and category or default
level = level + 1
local lc = levels[category]
if not lc or level > #lc then
diff --git a/tex/context/base/strc-lev.mkiv b/tex/context/base/strc-lev.mkiv
index 4f4745e9b..4c4605bcd 100644
--- a/tex/context/base/strc-lev.mkiv
+++ b/tex/context/base/strc-lev.mkiv
@@ -24,7 +24,7 @@
\unprotect
\unexpanded\def\definestructurelevels{\dodoubleargument\dodefinestructurelevels}
-\unexpanded\def\startstructurelevel {\dosingleargument\dostartstructurelevel}
+\unexpanded\def\startstructurelevel {\dosingleempty\dostartstructurelevel}
\unexpanded\def\dodefinestructurelevels[#1][#2]{\ctxlua{structures.sections.defineautolevels("#1","#2")}}
\unexpanded\def\dostartstructurelevel [#1]{\ctxlua{structures.sections.startautolevel("#1")}}
@@ -33,6 +33,11 @@
\unexpanded\def\nostartstructurehead{\dotripleargument\nonostartstructurehead}
\unexpanded\def\nostopstructurehead {\dosingleargument\nonostopstructurehead }
+\unexpanded\def\dostartstructurelevel[#1]%
+ {\doifassignmentelse{#1}
+ {\ctxlua{structures.sections.startautolevel("\v!default")}[#1]}
+ {\ctxlua{structures.sections.startautolevel("#1")}}}
+
\unexpanded\def\nonostartstructurehead[#1][#2][#3]%
{\blank
\noindentation{\tttf[start missing structure level #1]}
@@ -43,6 +48,15 @@
\noindentation{\tttf[stop missing structure level #1]}
\blank}
+\definestructurelevels
+ [\v!default]
+ [\v!chapter,
+ \v!section,
+ \v!subsection,
+ \v!subsubsection,
+ \v!subsubsubsection,
+ \v!subsubsubsubsection]
+
\protect \endinput
% \starttext
diff --git a/tex/generic/context/luatex-fonts-merged.lua b/tex/generic/context/luatex-fonts-merged.lua
index 9ee8f7aee..dfba8c7c5 100644
--- a/tex/generic/context/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
-- merged file : luatex-fonts-merged.lua
-- parent file : luatex-fonts.lua
--- merge date : 09/29/10 10:46:09
+-- merge date : 09/29/10 23:37:44
do -- begin closure to overcome local limits and interference