summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv')
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkiv2
-rw-r--r--tex/context/base/mkiv/font-ini.mkvi28
-rw-r--r--tex/context/base/mkiv/lxml-tab.lua38
-rw-r--r--tex/context/base/mkiv/meta-imp-txt.mkiv5
-rw-r--r--tex/context/base/mkiv/page-inf.mkiv43
-rw-r--r--tex/context/base/mkiv/page-one.mkiv72
-rw-r--r--tex/context/base/mkiv/page-sid.mkiv5
-rw-r--r--tex/context/base/mkiv/publ-ini.lua4
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin26081 -> 26054 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin255107 -> 255106 bytes
-rw-r--r--tex/context/base/mkiv/strc-flt.mkvi17
-rw-r--r--tex/context/base/mkiv/type-set.mkiv3
-rw-r--r--tex/context/base/mkiv/util-str.lua1
-rw-r--r--tex/context/base/mkiv/util-tab.lua22
15 files changed, 176 insertions, 66 deletions
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index c705c3afc..9cb893260 100644
--- a/tex/context/base/mkiv/cont-new.mkiv
+++ b/tex/context/base/mkiv/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2018.04.02 15:43}
+\newcontextversion{2018.04.04 00:51}
%D This file is loaded at runtime, thereby providing an excellent place for
%D hacks, patches, extensions and new features.
diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv
index 2adc6b3ee..9a52cfe78 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -42,7 +42,7 @@
%D has to match \type {YYYY.MM.DD HH:MM} format.
\edef\contextformat {\jobname}
-\edef\contextversion{2018.04.02 15:43}
+\edef\contextversion{2018.04.04 00:51}
\edef\contextkind {beta}
%D For those who want to use this:
diff --git a/tex/context/base/mkiv/font-ini.mkvi b/tex/context/base/mkiv/font-ini.mkvi
index ee20d7b32..693182919 100644
--- a/tex/context/base/mkiv/font-ini.mkvi
+++ b/tex/context/base/mkiv/font-ini.mkvi
@@ -2510,14 +2510,32 @@
% \popmacro\fontclass
% \ifx\fontclass\empty\else\setupbodyfont\relax\fi}
+% \unexpanded\def\usebodyfont[#1]%
+% {\pushmacro\fontclass
+% \font_helpers_set_font\zerocount{#1}%
+% \popmacro\fontclass
+% \ifx\fontclass\empty \else
+% \font_basics_setupbodyfont_nop
+% \fi}
+
\unexpanded\def\usebodyfont[#1]%
- {\pushmacro\fontclass
- \font_helpers_set_font\zerocount{#1}%
- \popmacro\fontclass
- \ifx\fontclass\empty \else
- \font_basics_setupbodyfont_nop
+ {\ifx\fontclass\empty
+ \setupbodyfont[#1]%
+ \else
+ \switchtobodyfont[#1]%
+ \fullrestoreglobalbodyfont
\fi}
+\unexpanded\def\showbodyfontstate
+ {\dontleavehmode
+ \start
+ \infofont
+ [fontclass: \fontclass,\space
+ fontbody: \fontbody ,\space
+ fontface: \fontface ,\space
+ fontsize: \fontsize ]%
+ \stop}
+
%D Handy for manuals:
%D The \type {\tochar} commmand takes a specification:
diff --git a/tex/context/base/mkiv/lxml-tab.lua b/tex/context/base/mkiv/lxml-tab.lua
index 8d4be58ab..1ef83c47d 100644
--- a/tex/context/base/mkiv/lxml-tab.lua
+++ b/tex/context/base/mkiv/lxml-tab.lua
@@ -14,7 +14,7 @@ if not modules then modules = { } end modules ['lxml-tab'] = {
-- maybe when letter -> utf, else name .. then we need an option to the serializer .. a bit
-- of work so we delay this till we cleanup
-local trace_entities = false trackers .register("xml.entities", function(v) trace_entities = v end)
+local trace_entities = false trackers.register("xml.entities", function(v) trace_entities = v end)
local report_xml = logs and logs.reporter("xml","core") or function(...) print(string.format(...)) end
@@ -968,6 +968,25 @@ local function publicentity(k,v,n)
end
entities[k] = v
end
+local function entityfile(pattern,k,v,n)
+ if n then
+ local okay, data
+ if resolvers then
+ okay, data = resolvers.loadbinfile(n)
+ else
+ data = io.loaddata(n)
+ okay = data and data ~= ""
+ end
+ if okay then
+ if trace_entities then
+ report_xml("loading public entities %a as %a from %a",k,v,n)
+ end
+ lpegmatch(pattern,data)
+ return
+ end
+ end
+ report_xml("ignoring public entities %a as %a from %a",k,v,n)
+end
local function install(spacenewline,spacing,anything)
@@ -1003,7 +1022,7 @@ local function install(spacenewline,spacing,anything)
local attribute = (somespace * name * optionalspace * equal * optionalspace * attributevalue) / add_attribute
--- local attributes = (attribute + somespace^-1 * (((1-endofattributes)^1)/attribute_specification_error))^0
+ -- local attributes = (attribute + somespace^-1 * (((1-endofattributes)^1)/attribute_specification_error))^0
local attributes = (attribute + somespace^-1 * (((anything-endofattributes)^1)/attribute_specification_error))^0
local parsedtext = text_parsed -- / add_text
@@ -1041,10 +1060,15 @@ local function install(spacenewline,spacing,anything)
local weirdentitytype = P("%") * (somespace * doctypename * somespace * value) / weirdentity
local normalentitytype = (doctypename * somespace * value) / normalentity
- local publicentitytype = (doctypename * somespace * P("PUBLIC") * somespace * value)/publicentity
+ local publicentitytype = (doctypename * somespace * P("PUBLIC") * somespace * value) / publicentity
+
local systementitytype = (doctypename * somespace * P("SYSTEM") * somespace * value * somespace * P("NDATA") * somespace * doctypename)/systementity
local entitydoctype = optionalspace * P("<!ENTITY") * somespace * (systementitytype + publicentitytype + normalentitytype + weirdentitytype) * optionalspace * close
+ local publicentityfile = (doctypename * somespace * P("PUBLIC") * somespace * value * (somespace * value)^0) / function(...)
+ entityfile(entitydoctype,...)
+ end
+
local function weirdresolve(s)
lpegmatch(entitydoctype,parameters[s])
end
@@ -1065,7 +1089,11 @@ local function install(spacenewline,spacing,anything)
local publicdoctype = doctypename * somespace * P("PUBLIC") * somespace * value * somespace * value * somespace * doctypeset
local systemdoctype = doctypename * somespace * P("SYSTEM") * somespace * value * somespace * doctypeset
local simpledoctype = (anything-close)^1 -- * balanced^0
- local somedoctype = C((somespace * (publicdoctype + systemdoctype + definitiondoctype + simpledoctype) * optionalspace)^0)
+ local somedoctype = C((somespace * (
+
+publicentityfile +
+
+ publicdoctype + systemdoctype + definitiondoctype + simpledoctype) * optionalspace)^0)
local instruction = (spacing * begininstruction * someinstruction * endinstruction) / function(...) add_special("@pi@",...) end
local comment = (spacing * begincomment * somecomment * endcomment ) / function(...) add_special("@cm@",...) end
@@ -1294,7 +1322,7 @@ a filename or a file handle.</p>
function xml.load(filename,settings)
local data = ""
if type(filename) == "string" then
- -- local data = io.loaddata(filename) - -todo: check type in io.loaddata
+ -- local data = io.loaddata(filename) -- todo: check type in io.loaddata
local f = io.open(filename,'r') -- why not 'rb'
if f then
data = f:read("*all") -- io.readall(f) ... only makes sense for large files
diff --git a/tex/context/base/mkiv/meta-imp-txt.mkiv b/tex/context/base/mkiv/meta-imp-txt.mkiv
index 56da9229d..e9660b3a7 100644
--- a/tex/context/base/mkiv/meta-imp-txt.mkiv
+++ b/tex/context/base/mkiv/meta-imp-txt.mkiv
@@ -287,7 +287,6 @@
\dontcomplain
\setbox\scratchbox\hbox{\addff{mp:tp}#2}%
\ctxlua{mp.follow_initialize(\number\scratchbox)}%
- \stopluacode
\startMPcode
\includeMPgraphic{followtokens} ;
mfun_follow_draw(\number#1) ;
@@ -295,8 +294,8 @@
\ctxlua{mp.follow_reset()}%
\egroup}
-\unexpanded\def\followtokens {\dofollowtokens1}
-\unexpanded\def\followtokenscentered{\dofollowtokens0}
+\unexpanded\def\followtokens {\dofollowtokens\plusone}
+\unexpanded\def\followtokenscentered{\dofollowtokens\zerocount}
% stretched variant:
%
diff --git a/tex/context/base/mkiv/page-inf.mkiv b/tex/context/base/mkiv/page-inf.mkiv
index f60977e0c..2064f9f25 100644
--- a/tex/context/base/mkiv/page-inf.mkiv
+++ b/tex/context/base/mkiv/page-inf.mkiv
@@ -13,7 +13,7 @@
\writestatus{loading}{ConTeXt Page Macros / Tracing Info}
-% this needs a real cleanup .. will be a more detailed list
+% This needs a real cleanup .. will be a more detailed list.
\unprotect
@@ -23,6 +23,7 @@
\newtoks\everysetupversion
\let\currentversioninfo\empty
+\let\currentversiontext\empty
\unexpanded\def\setupversion
{\dosingleargument\page_info_setup}
@@ -33,8 +34,13 @@
\def\page_info_setup[#1]%
{\the\everyresetversion
- \ifcsname\??layoutinfo#1\endcsname
- \edef\currentversioninfo{#1}%
+ \doifelseassignment{#1}%
+ {\getdummyparameters[\c!alternative=,\c!text=,#1]%
+ \edef\currentversioninfo{\dummyparameter\c!alternative}%
+ \edef\currentversiontext{\dummyparameter\c!text}}%
+ {\edef\currentversioninfo{#1}%
+ \let \currentversiontext\empty}%
+ \ifcsname\??layoutinfo\currentversioninfo\endcsname
\let\page_info_add_to_box\page_info_add_to_box_indeed
\else
\let\currentversioninfo\empty
@@ -43,33 +49,46 @@
\the\everysetupversion}
\unexpanded\def\page_info_place_info % at the bottom of the page
- {\csname\??layoutinfo\currentversioninfo\endcsname}
+ {\begincsname\??layoutinfo\currentversioninfo\endcsname}
\unexpanded\def\installversioninfo#1#2%
{\setvalue{\??layoutinfo#1}{#2}}
\unexpanded\def\includeversioninfo#1%
- {\csname\??layoutinfo#1\endcsname}
+ {\begincsname\??layoutinfo#1\endcsname}
+
+\installversioninfo\v!final
+ {\let\currentversioninfo\empty
+ \let\page_info_add_to_box\gobbleoneargument}
\installversioninfo\v!concept
{\vskip6\points
\hbox to \makeupwidth
{\infofont
- \v!concept:\space\currentdate
+ \rlap{\v!concept:\space\currentdate}%
\hss
- \page_adapts_status_info}}
+ \currentversiontext
+ \hss
+ \llap{\page_adapts_status_info}}}
\installversioninfo\v!file
{\vskip6\points
\hbox to \makeupwidth
{\infofont
- \getmessage\m!system{27}:\space\currentdate\space
+ \getmessage\m!system{27}:\space\currentdate\quad
\donefalse
- \ifx\currentproject \empty \else \space\v!project :\space\currentproject \space \donetrue \fi
- \ifx\currentproduct \empty \else \space\v!product :\space\currentproduct \space \donetrue \fi
- \ifx\currentcomponent\empty \else \space\v!component:\space\currentcomponent\space \donetrue \fi
- \ifdone \else \space\v!file :\space\jobname \space \fi
+ \doif\currentproject\currentproduct{\doif\currentproduct\currentcomponent\donetrue}%
+ \ifdone
+ \donefalse
+ \else
+ \ifx\currentproject \empty \else \space\v!project :\space\currentproject \space \donetrue \fi
+ \ifx\currentproduct \empty \else \space\v!product :\space\currentproduct \space \donetrue \fi
+ \ifx\currentcomponent\empty \else \space\v!component:\space\currentcomponent\space \donetrue \fi
+ \fi
+ \ifdone \else \space\v!file :\space\jobname \space \fi
\hss
+ \currentversiontext
+ \quad
\page_adapts_status_info}}
\installversioninfo\v!temporary
diff --git a/tex/context/base/mkiv/page-one.mkiv b/tex/context/base/mkiv/page-one.mkiv
index 35233247b..348c301fc 100644
--- a/tex/context/base/mkiv/page-one.mkiv
+++ b/tex/context/base/mkiv/page-one.mkiv
@@ -481,28 +481,68 @@
#1{\box\floatbox}%
\doifinset\v!tall\floatlocationmethod\page_sides_flush_floats_after_par}
-\def\page_one_place_float_left {\page_one_place_float_side_indeed\page_sides_process_float_left\presetindentation}
-\def\page_one_place_float_right {\page_one_place_float_side_indeed\page_sides_process_float_right}
-\def\page_one_place_float_leftmargin {\page_one_place_float_side_indeed\page_sides_process_float_leftmargin}
-\def\page_one_place_float_rightmargin{\page_one_place_float_side_indeed\page_sides_process_float_rightmargin}
-\def\page_one_place_float_leftedge {\page_one_place_float_side_indeed\page_sides_process_float_leftedge}
-\def\page_one_place_float_rightedge {\page_one_place_float_side_indeed\page_sides_process_float_rightedge}
-\def\page_one_place_float_inmargin {\page_one_place_float_side_indeed\page_sides_process_float_cutspace}
-\def\page_one_place_float_backspace {\page_one_place_float_side_indeed\page_sides_process_float_backspace}
-\def\page_one_place_float_cutspace {\page_one_place_float_side_indeed\page_sides_process_float_cutspace}
-
-%def\page_one_place_float_margin {\page_one_place_float_side_indeed\page_sides_process_float_margin\nonoindentation} % wil be overloaded
-\def\page_one_place_float_margin {\page_margin_blocks_process_float}
+\def\page_one_place_float_left
+ {\page_one_place_float_side_indeed
+ \page_sides_process_float_left
+ \presetindentation}
+
+\def\page_one_place_float_right
+ {\page_one_place_float_side_indeed
+ \page_sides_process_float_right}
+
+\def\page_one_place_float_margin
+ {\page_margin_blocks_process_float
+ \nonoindentation} % new, due to popular request
+
+\def\page_one_place_float_leftmargin
+ {\page_one_place_float_side_indeed
+ \page_sides_process_float_leftmargin
+ \nonoindentation} % new, due to popular request
+
+\def\page_one_place_float_rightmargin
+ {\page_one_place_float_side_indeed
+ \page_sides_process_float_rightmargin
+ \nonoindentation} % new, due to popular request
+
+\def\page_one_place_float_leftedge
+ {\page_one_place_float_side_indeed
+ \page_sides_process_float_leftedge}
+
+\def\page_one_place_float_rightedge
+ {\page_one_place_float_side_indeed
+ \page_sides_process_float_rightedge}
+
+\def\page_one_place_float_inmargin
+ {\page_one_place_float_side_indeed
+ \page_sides_process_float_cutspace}
+
+\def\page_one_place_float_backspace
+ {\page_one_place_float_side_indeed
+ \page_sides_process_float_backspace}
+
+\def\page_one_place_float_cutspace
+ {\page_one_place_float_side_indeed
+ \page_sides_process_float_cutspace}
\def\page_one_place_float_page {\page_floats_save_page_float \s!page \floatlocationmethod}
\def\page_one_place_float_leftpage {\page_floats_save_page_float \s!leftpage \floatlocationmethod}
\def\page_one_place_float_rightpage {\page_floats_save_page_float \s!rightpage\floatlocationmethod}
\def\page_one_place_float_somewhere {\page_floats_save_somewhere_float\s!somewhere\floatlocationmethod}
-\def\page_one_place_float_here {\page_one_place_float_otherwise_here}
-\def\page_one_place_float_auto {\page_one_place_float_otherwise}
-\def\page_one_place_float_top {\page_one_place_float_otherwise\nonoindentation}
-\def\page_one_place_float_bottom {\page_one_place_float_otherwise}
+\def\page_one_place_float_here
+ {\page_one_place_float_otherwise_here}
+
+\def\page_one_place_float_auto
+ {\page_one_place_float_otherwise
+ \nonoindentation} % new, due to popular request
+
+\def\page_one_place_float_top
+ {\page_one_place_float_otherwise
+ \nonoindentation}
+
+\def\page_one_place_float_bottom
+ {\page_one_place_float_otherwise
+ \nonoindentation} % new, due to popular request
\def\page_one_place_float_otherwise
{\doifelseinset\v!here\floatlocationmethod
diff --git a/tex/context/base/mkiv/page-sid.mkiv b/tex/context/base/mkiv/page-sid.mkiv
index a0fb63ca2..6f5d9f357 100644
--- a/tex/context/base/mkiv/page-sid.mkiv
+++ b/tex/context/base/mkiv/page-sid.mkiv
@@ -32,6 +32,7 @@
%D Earth, sophisticated Massive Attack video clips, impressive Davie504 movies
%D and so on).
+\newdimen \d_page_sides_margin
\newdimen \d_page_sides_height % includes the topskip
\newdimen \d_page_sides_width
\newdimen \d_page_sides_hsize
@@ -113,7 +114,7 @@
\or % high
\or % low
\or % fit
- \global\d_strc_floats_margin\zeropoint
+ \global\d_page_sides_margin\zeropoint
\fi}
\def\page_sides_apply_horizontal_shift
@@ -668,7 +669,7 @@
\else\ifnum\c_page_sides_float_type>\plusfive
\global\d_page_sides_width\zeropoint
\else
- \global\d_page_sides_width\dimexpr\wd\floatbox+\d_strc_floats_margin\relax
+ \global\d_page_sides_width\dimexpr\wd\floatbox+\d_page_sides_margin\relax
\fi\fi
\ifdim\d_page_sides_width<\zeropoint
\global\d_page_sides_width\zeropoint
diff --git a/tex/context/base/mkiv/publ-ini.lua b/tex/context/base/mkiv/publ-ini.lua
index 8497b190f..9dfeda168 100644
--- a/tex/context/base/mkiv/publ-ini.lua
+++ b/tex/context/base/mkiv/publ-ini.lua
@@ -2325,13 +2325,13 @@ do
implement {
name = "btxflushlistentry",
- arguments = "2 strings",
+ arguments = { "string", "integer" },
actions = lists.flushentry,
}
implement {
name = "btxflushlisttag",
- arguments = "2 strings",
+ arguments = { "string", "integer" },
actions = lists.flushtag,
}
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index aa6ed92ea..74e8e3e8a 100644
--- a/tex/context/base/mkiv/status-files.pdf
+++ b/tex/context/base/mkiv/status-files.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index 70204080a..a2f2ee28b 100644
--- a/tex/context/base/mkiv/status-lua.pdf
+++ b/tex/context/base/mkiv/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/strc-flt.mkvi b/tex/context/base/mkiv/strc-flt.mkvi
index 69881037e..632c67686 100644
--- a/tex/context/base/mkiv/strc-flt.mkvi
+++ b/tex/context/base/mkiv/strc-flt.mkvi
@@ -148,7 +148,7 @@
\c!textmethod=\ifgridsnapping2\else0\fi, % 0=raw 1=safe (.99pg) 2=tight (-1pt) % THIS WILL CHANGE
\c!sidemethod=\ifgridsnapping2\else1\fi, % 0=raw 1=safe (.99pg) 2=tight (-1pt) % THIS WILL CHANGE
\c!indentnext=\v!no,
- \c!margin=1\emwidth,
+ \c!margin=\emwidth,
\c!method=1,
\c!cache=\v!yes, % when no, then intermediate flush
\c!leftmargin=\zeropoint, % displacement in 'normal floats'
@@ -734,7 +734,6 @@
% nicer is a bunch of states and one loop that sets those states
-\newdimen\d_strc_floats_margin
\newdimen\d_strc_floats_top
\newdimen\d_strc_floats_bottom
@@ -776,13 +775,13 @@
\global\c_page_sides_tolerance \zerocount
\global\c_page_sides_skipmode \zerocount
\global\c_strc_floats_rotation \zerocount
- \global\d_strc_floats_margin \rootfloatparameter\c!margin
- \global\d_page_sides_leftshift \floatparameter \c!leftmargindistance
- \global\d_page_sides_rightshift \floatparameter \c!rightmargindistance
- \global\d_page_sides_topoffset \floatparameter \c!topoffset
- \global\d_page_sides_bottomoffset\floatparameter \c!bottomoffset
- \global\c_page_sides_method \floatparameter \c!sidemethod
- \global\c_page_one_float_method \floatparameter \c!textmethod
+ \global\d_page_sides_margin \floatparameter\c!margin
+ \global\d_page_sides_leftshift \floatparameter\c!leftmargindistance
+ \global\d_page_sides_rightshift \floatparameter\c!rightmargindistance
+ \global\d_page_sides_topoffset \floatparameter\c!topoffset
+ \global\d_page_sides_bottomoffset\floatparameter\c!bottomoffset
+ \global\c_page_sides_method \floatparameter\c!sidemethod
+ \global\c_page_one_float_method \floatparameter\c!textmethod
\global\c_page_floats_n_of_top \rootfloatparameter\c!ntop
\global\c_page_floats_n_of_bottom\rootfloatparameter\c!nbottom
\ifconditional\c_strc_floats_par_float
diff --git a/tex/context/base/mkiv/type-set.mkiv b/tex/context/base/mkiv/type-set.mkiv
index 1ef137d39..1763de687 100644
--- a/tex/context/base/mkiv/type-set.mkiv
+++ b/tex/context/base/mkiv/type-set.mkiv
@@ -57,6 +57,9 @@
\fi
+\definefilesynonym [type-imp-latin-modern.mkiv] [type-imp-latinmodern.mkiv]
+\definefilesynonym [type-imp-modern-latin.mkiv] [type-imp-modernlatin.mkiv]
+
\definefilesynonym [type-imp-lucida.mkiv] [type-imp-lucida-typeone.mkiv]
\definefilesynonym [type-imp-lucidaot.mkiv] [type-imp-lucida-opentype.mkiv]
\definefilesynonym [type-imp-lucidadk.mkiv] [type-imp-lucida-opentype.mkiv]
diff --git a/tex/context/base/mkiv/util-str.lua b/tex/context/base/mkiv/util-str.lua
index f76895aaf..05ff9f304 100644
--- a/tex/context/base/mkiv/util-str.lua
+++ b/tex/context/base/mkiv/util-str.lua
@@ -1081,6 +1081,7 @@ local function make(t,str)
f = function() return str end
end
end
+ -- if jit then jit.on(f,true) end
t[str] = f
return f
end
diff --git a/tex/context/base/mkiv/util-tab.lua b/tex/context/base/mkiv/util-tab.lua
index ebe51eb1a..1b069e2ae 100644
--- a/tex/context/base/mkiv/util-tab.lua
+++ b/tex/context/base/mkiv/util-tab.lua
@@ -153,15 +153,16 @@ function table.tocsv(t,specification)
fields = sortedkeys(t[1])
end
local separator = specification.separator or ","
+ local noffields = #fields
if specification.preamble == true then
- for f=1,#fields do
+ for f=1,noffields do
r[f] = lpegmatch(escape,tostring(fields[f]))
end
result[1] = concat(r,separator)
end
for i=1,#t do
local ti = t[i]
- for f=1,#fields do
+ for f=1,noffields do
local field = ti[fields[f]]
if type(field) == "string" then
r[f] = lpegmatch(escape,field)
@@ -215,30 +216,31 @@ end
local nspaces = utilities.strings.newrepeater(" ")
local function toxml(t,d,result,step)
+ local r = #result
for k, v in sortedpairs(t) do
local s = nspaces[d] -- inlining this is somewhat faster but gives more formatters
local tk = type(k)
local tv = type(v)
if tv == "table" then
if tk == "number" then
- result[#result+1] = formatters["%s<entry n='%s'>"](s,k)
+ r = r + 1 result[r] = formatters["%s<entry n='%s'>"](s,k)
toxml(v,d+step,result,step)
- result[#result+1] = formatters["%s</entry>"](s,k)
+ r = r + 1 result[r] = formatters["%s</entry>"](s,k)
else
- result[#result+1] = formatters["%s<%s>"](s,k)
+ r = r + 1 result[r] = formatters["%s<%s>"](s,k)
toxml(v,d+step,result,step)
- result[#result+1] = formatters["%s</%s>"](s,k)
+ r = r + 1 result[r] = formatters["%s</%s>"](s,k)
end
elseif tv == "string" then
if tk == "number" then
- result[#result+1] = formatters["%s<entry n='%s'>%!xml!</entry>"](s,k,v,k)
+ r = r + 1 result[r] = formatters["%s<entry n='%s'>%!xml!</entry>"](s,k,v,k)
else
- result[#result+1] = formatters["%s<%s>%!xml!</%s>"](s,k,v,k)
+ r = r + 1 result[r] = formatters["%s<%s>%!xml!</%s>"](s,k,v,k)
end
elseif tk == "number" then
- result[#result+1] = formatters["%s<entry n='%s'>%S</entry>"](s,k,v,k)
+ r = r + 1 result[r] = formatters["%s<entry n='%s'>%S</entry>"](s,k,v,k)
else
- result[#result+1] = formatters["%s<%s>%S</%s>"](s,k,v,k)
+ r = r + 1 result[r] = formatters["%s<%s>%S</%s>"](s,k,v,k)
end
end
end