summaryrefslogtreecommitdiff
path: root/tex/context/base/mkxl
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkxl')
-rw-r--r--tex/context/base/mkxl/cont-new.mkxl2
-rw-r--r--tex/context/base/mkxl/context.mkxl2
-rw-r--r--tex/context/base/mkxl/lang-ini.mkxl3
-rw-r--r--tex/context/base/mkxl/lpdf-ini.lmt10
-rw-r--r--tex/context/base/mkxl/lpdf-pde.lmt225
-rw-r--r--tex/context/base/mkxl/mlib-lmp.lmt15
-rw-r--r--tex/context/base/mkxl/mlib-pdf.lmt1
-rw-r--r--tex/context/base/mkxl/page-mix.mkxl1
-rw-r--r--tex/context/base/mkxl/spac-ali.mkxl3
-rw-r--r--tex/context/base/mkxl/strc-itm.mklx30
-rw-r--r--tex/context/base/mkxl/strc-mar.mkxl12
-rw-r--r--tex/context/base/mkxl/strc-not.lmt6
-rw-r--r--tex/context/base/mkxl/typo-drp.lmt13
13 files changed, 234 insertions, 89 deletions
diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl
index 5306b33b4..e81d6cc7b 100644
--- a/tex/context/base/mkxl/cont-new.mkxl
+++ b/tex/context/base/mkxl/cont-new.mkxl
@@ -13,7 +13,7 @@
% \normalend % uncomment this to get the real base runtime
-\newcontextversion{2021.09.26 16:48}
+\newcontextversion{2021.10.08 20:05}
%D This file is loaded at runtime, thereby providing an excellent place for hacks,
%D patches, extensions and new features. There can be local overloads in cont-loc
diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl
index c2b8528c1..a5b9cc7f1 100644
--- a/tex/context/base/mkxl/context.mkxl
+++ b/tex/context/base/mkxl/context.mkxl
@@ -29,7 +29,7 @@
%D {YYYY.MM.DD HH:MM} format.
\immutable\edef\contextformat {\jobname}
-\immutable\edef\contextversion{2021.09.26 16:48}
+\immutable\edef\contextversion{2021.10.08 20:05}
%overloadmode 1 % check frozen / warning
%overloadmode 2 % check frozen / error
diff --git a/tex/context/base/mkxl/lang-ini.mkxl b/tex/context/base/mkxl/lang-ini.mkxl
index 336dd5d69..2b7f34ef3 100644
--- a/tex/context/base/mkxl/lang-ini.mkxl
+++ b/tex/context/base/mkxl/lang-ini.mkxl
@@ -481,6 +481,9 @@
\permanent\protected\def\dohyphencollapsing{\hyphenationmode\bitwiseflip\hyphenationmode \collapsehyphenationcode}
\permanent\protected\def\nohyphencollapsing{\hyphenationmode\bitwiseflip\hyphenationmode-\collapsehyphenationcode}
+\permanent\protected\def\doexplicithyphens{\hyphenationmode\bitwiseflip\hyphenationmode \explicithyphenationcode}
+\permanent\protected\def\noexplicithyphens{\hyphenationmode\bitwiseflip\hyphenationmode-\explicithyphenationcode}
+
\permanent\protected\def\usehyphensparameter#1%
{\edef\p_hyphens{#1\c!hyphens}%
\ifx\p_hyphens\v!no
diff --git a/tex/context/base/mkxl/lpdf-ini.lmt b/tex/context/base/mkxl/lpdf-ini.lmt
index ce679c08e..1ce7c5adc 100644
--- a/tex/context/base/mkxl/lpdf-ini.lmt
+++ b/tex/context/base/mkxl/lpdf-ini.lmt
@@ -69,7 +69,7 @@ local report_objects = logs.reporter("backend","objects")
local report_finalizing = logs.reporter("backend","finalizing")
local report_blocked = logs.reporter("backend","blocked")
-local implement = interfaces.implement
+local implement = interfaces and interfaces.implement
local context = context
@@ -83,7 +83,7 @@ local factor = number.dimenfactors.bp
local codeinjections = { }
local nodeinjections = { }
-local backends = backends
+local backends = backends or { }
local pdfbackend = {
comment = "backend for directly generating pdf output",
@@ -241,8 +241,8 @@ do
end
end
- local toregime = regimes.toregime
- local fromregime = regimes.fromregime
+ local toregime = regimes and regimes.toregime
+ local fromregime = regimes and regimes.fromregime
local escaped = Cs(Cc("(") * (S("\\()\n\r\t\b\f")/"\\%0" + P(1))^0 * Cc(")"))
topdfdoc = function(str,default)
@@ -746,6 +746,8 @@ lpdf.reference = pdfreference
lpdf.verbose = pdfverbose
lpdf.literal = pdfliteral
+if not callbacks then return lpdf end
+
-- three priority levels, default=2
local pagefinalizers = { { }, { }, { } }
diff --git a/tex/context/base/mkxl/lpdf-pde.lmt b/tex/context/base/mkxl/lpdf-pde.lmt
index 58f5723a3..4483510d0 100644
--- a/tex/context/base/mkxl/lpdf-pde.lmt
+++ b/tex/context/base/mkxl/lpdf-pde.lmt
@@ -85,6 +85,7 @@ local arraytotable = pdfe.arraytotable
local pagestotable = pdfe.pagestotable
local readwholestream = pdfe.readwholestream
local getfromreference = pdfe.getfromreference
+local getfromobject = pdfe.getfromobject
local report_epdf = logs.reporter("epdf")
@@ -119,6 +120,8 @@ encryptioncodes = allocate(swapped(encryptioncodes,encryptioncodes)
pdfe.objectcodes = objectcodes
pdfe.encryptioncodes = encryptioncodes
+-- lpdf_epdf.objectcodes = objectcodes
+
local null_object_code = objectcodes.null
local reference_object_code = objectcodes.reference
@@ -134,47 +137,6 @@ local dictionary_object_code = objectcodes.dictionary
local stream_object_code = objectcodes.stream
local reference_object_code = objectcodes.reference
-local checked_access
-local get_flagged -- from pdfe -> lpdf
-
-if lpdf.dictionary then
-
- -- we're in context
-
- local pdfdictionary = lpdf.dictionary
- local pdfarray = lpdf.array
- local pdfconstant = lpdf.constant
- local pdfstring = lpdf.string
- local pdfunicode = lpdf.unicode
-
- get_flagged = function(t,f,k)
- local tk = t[k] -- triggers resolve
- local fk = f[k]
- if not fk then
- return tk
- elseif fk == "name" then
- return pdfconstant(tk)
- elseif fk == "array" then
- return pdfarray(tk)
- elseif fk == "dictionary" then
- return pdfarray(tk)
- elseif fk == "rawtext" then
- return pdfstring(tk)
- elseif fk == "unicode" then
- return pdfunicode(tk)
- else
- return tk
- end
- end
-
-else
-
- get_flagged = function(t,f,k)
- return t[k]
- end
-
-end
-
-- We need to convert the string from utf16 although there is no way to
-- check if we have a regular string starting with a bom. So, we have
-- na dilemma here: a pdf doc encoded string can be invalid utf.
@@ -196,6 +158,13 @@ local some_reference
local some_string = lpdf.frombytes
+function lpdf_epdf.objecttype(object)
+ if type(object) == "table" then
+ local kind = object.__type__
+ return kind and objectcodes[kind]
+ end
+end
+
local function get_value(document,t,key)
if not key then
return
@@ -218,22 +187,131 @@ local function get_value(document,t,key)
elseif kind == dictionary_object_code then
return some_dictionary(value[2],document)
elseif kind == stream_object_code then
- return some_stream(value,document)
+ return some_stream(value,value[2],document) -- needs checking
elseif kind == reference_object_code then
return some_reference(value,document)
end
return value
end
+local checked_access
+local get_flagged -- from pdfe -> lpdf
+
+if lpdf.dictionary then
+
+ -- these are used in mtx-pdf.lua
+
+ local pdfdictionary = lpdf.dictionary
+ local pdfarray = lpdf.array
+ local pdfconstant = lpdf.constant
+ local pdfreference = lpdf.reference
+ local pdfliteral = lpdf.literal
+
+ local copy_array, copy_dictionary
+
+ local function copyobject(object,key,value)
+ if not value then
+ value = object.__raw__[key]
+ end
+ local t = type(value)
+ if t == "string" then
+ return pdfconstant(value)
+ elseif t ~= "table" then
+ return value
+ end
+ local kind = value[1]
+ if kind == name_object_code then
+ return pdfconstant(value[2])
+ elseif kind == string_object_code then
+ return pdfliteral(value[2],value[3])
+ elseif kind == array_object_code then
+ return copyarray(object[key])
+ elseif kind == dictionary_object_code then
+ return copydictionary(object[key])
+ elseif kind == null_object_code then
+ return pdfnull()
+ elseif kind == reference_object_code then
+ return pdfreference(value[3])
+ else
+ -- report("weird: %s", objecttypes[kind] or "?")
+ end
+ end
+
+ copyarray = function(object)
+ local target = pdfarray()
+ local source = object.__raw__
+ for i=1,#source do
+ target[i] = copyobject(object,i,source[i])
+ end
+ return target
+ end
+
+ copydictionary = function(object)
+ local target = pdfdictionary()
+ local source = object.__raw__
+ for key, value in sortedhash(source) do
+ target[key] = copyobject(object,key,value)
+ end
+ return target
+ end
+
+ get_flagged = function(t,f)
+ local kind = t.__type__
+ if kind == name_object_code then
+ return pdfconstant(f)
+ elseif kind == array_object_code then
+ return copyarray(t)
+ elseif kind == dictionary_object_code then
+ return copydictionary(t)
+ elseif kind == stream_object_code then
+ return copydictionary(t)
+ elseif kind == string_object_code then
+ return pdfunicode(f)
+ elseif kind == null_object_code then
+ return pdfnull()
+ elseif kind == reference_object_code then
+ return pdfreference(t[3])
+ else
+ return f
+ end
+ end
+
+ function lpdf_epdf.verboseobject(document,n)
+ if document and n then
+ local object = document.objects[n]
+ if object then
+ local t = { n .. " 0 obj" }
+ if lpdf.epdf.objecttype(object) == "stream" then
+ t[#t+1] = object("dictionary")()
+ t[#t+1] = "stream"
+ t[#t+1] = tostring(object(true))
+ t[#t+1] = "endstream"
+ else
+ t[#t+1] = tostring(object())
+ end
+ t[#t+1] = "endobj"
+ return concat(t,"\n")
+ end
+ end
+ end
+
+else
+
+ get_flagged = function(t,f)
+ return t[k] -- hm
+ end
+
+end
+
some_dictionary = function (d,document)
local f = dictionarytotable(d,true)
local t = setmetatable({ __raw__ = f, __type__ = dictionary_object_code }, {
- __index = function(t,k)
- return get_value(document,f,k)
- end,
- __call = function(t,k)
- return get_flagged(t,f,k)
- end,
+ __index = function(t,k)
+ return get_value(document,f,k)
+ end,
+ __call = function(t)
+ return get_flagged(t,f)
+ end,
} )
return t, "dictionary"
end
@@ -245,8 +323,8 @@ some_array = function (a,document)
__index = function(t,k)
return get_value(document,f,k)
end,
- __call = function(t,k)
- return get_flagged(t,f,k)
+ __call = function(t)
+ return get_flagged(t,f)
end,
__len = function(t,k)
return n
@@ -261,8 +339,10 @@ some_stream = function(s,d,document)
__index = function(t,k)
return get_value(document,f,k)
end,
- __call = function(t,raw)
- if raw == false then
+ __call = function(t,how)
+ if how == "dictionary" then
+ return get_flagged(t,f)
+ elseif how == false then
return readwholestream(s,false) -- original
else
return readwholestream(s,true) -- uncompressed
@@ -293,6 +373,20 @@ some_reference = function(r,document)
return cached
end
+local function some_object(document,n)
+ local kind, object, b, c = getfromobject(document.__data__,n)
+ if kind == dictionary_object_code then
+ return some_dictionary(object,document)
+ elseif kind == array_object_code then
+ return some_array(object,document)
+ elseif kind == stream_object_code then
+ return some_stream(object,b,document)
+ else
+ -- really cache this?
+ return { kind, object, b, c }
+ end
+end
+
local resolvers = { }
lpdf_epdf.resolvers = resolvers
@@ -460,12 +554,14 @@ function lpdf_epdf.load(filename,userpassword,ownerpassword,fromstring)
__data__ = false
end
if __data__ then
+ local __cache__ = { }
+ local __xrefs__ = { }
document = {
filename = filename,
nofcopied = 0,
copied = { },
- __cache__ = { },
- __xrefs__ = { },
+ __cache__ = __cache__,
+ __xrefs__ = __xrefs__,
__fonts__ = { },
__copied__ = { },
__data__ = __data__,
@@ -479,6 +575,17 @@ function lpdf_epdf.load(filename,userpassword,ownerpassword,fromstring)
document.majorversion, document.minorversion = getversion(__data__)
--
document.nofpages = getnofpages(__data__)
+ -- we could also use cached but this proxy hides it
+ -- setmetatableindex(__cache__,function(t,objnum)
+ document.objects = setmetatableindex(function(t,objnum)
+ local cached = __cache__[objnum]
+ if not cached then
+ cached = some_object(document,objnum)
+ __cache__[objnum] = cached
+ __xrefs__[cached] = objnum
+ end
+ return cached
+ end)
else
document = false
end
@@ -1173,11 +1280,11 @@ if images then do
end
lpdf_epdf.image = {
- open = openpdf,
- close = closepdf,
- new = newpdf,
- query = querypdf,
- copy = copypage,
+ open = openpdf,
+ close = closepdf,
+ new = newpdf,
+ query = querypdf,
+ copy = copypage,
}
-- lpdf.injectors.pdf = function(specification)
diff --git a/tex/context/base/mkxl/mlib-lmp.lmt b/tex/context/base/mkxl/mlib-lmp.lmt
index 5608488a3..01c72e4ba 100644
--- a/tex/context/base/mkxl/mlib-lmp.lmt
+++ b/tex/context/base/mkxl/mlib-lmp.lmt
@@ -403,6 +403,21 @@ do
registerdirect("mode", function() injectboolean(modes [scanstring()] and true or false) end)
registerdirect("systemmode", function() injectboolean(systemmodes[scanstring()] and true or false) end)
+ -- for compatibility reasons we keep this (metafun manual):
+
+ local modes = tex.modes
+ local systemmodes = tex.systemmodes
+
+ function mp.mode(s)
+ injectboolean(modes[s] and true or false)
+ end
+
+ function mp.systemmode(s)
+ injectboolean(systemmodes[s] and true or false)
+ end
+
+ mp.processingmode = mp.mode
+
end
-- for alan's nodes:
diff --git a/tex/context/base/mkxl/mlib-pdf.lmt b/tex/context/base/mkxl/mlib-pdf.lmt
index ec13ef289..f537743aa 100644
--- a/tex/context/base/mkxl/mlib-pdf.lmt
+++ b/tex/context/base/mkxl/mlib-pdf.lmt
@@ -457,6 +457,7 @@ function metapost.flush(specification,result)
local object = objects[o]
if stack == object.stacking then
local objecttype = object.type
+ -- print(i,o,stack,objecttype)
if objecttype == "fill" or objecttype == "outline" then
-- we use an indirect table as we want to overload
-- entries but this is not possible in userdata
diff --git a/tex/context/base/mkxl/page-mix.mkxl b/tex/context/base/mkxl/page-mix.mkxl
index 446185e43..32af22114 100644
--- a/tex/context/base/mkxl/page-mix.mkxl
+++ b/tex/context/base/mkxl/page-mix.mkxl
@@ -580,6 +580,7 @@
\d_page_mix_max_width\dimexpr\d_page_mix_max_width-\leftskip-\rightskip\relax
\d_page_mix_leftskip \leftskip
\d_page_mix_rightskip\rightskip
+ % \frozen ?
\leftskip \zeropoint
\rightskip\zeropoint
%
diff --git a/tex/context/base/mkxl/spac-ali.mkxl b/tex/context/base/mkxl/spac-ali.mkxl
index 3ad3dcb91..d6043b4da 100644
--- a/tex/context/base/mkxl/spac-ali.mkxl
+++ b/tex/context/base/mkxl/spac-ali.mkxl
@@ -718,6 +718,7 @@
\defcsname\??aligncommand\v!nothyphenated \endcsname{\toksapp\t_spac_align_collected{\nohyphens}}
\defcsname\??aligncommand\v!collapsed \endcsname{\toksapp\t_spac_align_collected{\dohyphencollapsing}}
\defcsname\??aligncommand\v!notcollapsed \endcsname{\toksapp\t_spac_align_collected{\nohyphencollapsing}}
+\defcsname\??aligncommand\v!explicit \endcsname{\toksapp\t_spac_align_collected{\nohyphens\doexplicithyphens}}
\defcsname\??aligncommand\v!tolerant \endcsname{\toksapp\t_spac_align_collected{\spac_align_set_tolerant}}
\defcsname\??aligncommand\v!verytolerant \endcsname{\toksapp\t_spac_align_collected{\spac_align_set_very_tolerant}}
@@ -872,7 +873,7 @@
\defcsname\??alignhorizontal\v!flushright\endcsname{\enforced\let\raggedbox\spac_align_horizontal_flushright}
\defcsname\??alignhorizontal\v!center \endcsname{\enforced\let\raggedbox\spac_align_horizontal_center}
-% The next one can be in use so we keep it around but oen should
+% The next one can be in use so we keep it around but one should
% be aware of possible interference.
\permanent\protected\def\setraggedskips#1#2#3#4#5#6#7% never change this name (todo: inline this one .. less tracingall)
diff --git a/tex/context/base/mkxl/strc-itm.mklx b/tex/context/base/mkxl/strc-itm.mklx
index efead3d83..65df80f32 100644
--- a/tex/context/base/mkxl/strc-itm.mklx
+++ b/tex/context/base/mkxl/strc-itm.mklx
@@ -966,12 +966,12 @@
\let\startcollectitems\relax
\let\stopcollectitems \relax
-\letvalue{\??itemgroupalign\v!flushleft }\relax
-\letvalue{\??itemgroupalign\v!right }\relax
-\letvalue{\??itemgroupalign\v!flushright}\hfill
-\letvalue{\??itemgroupalign\v!left }\hfill
-\letvalue{\??itemgroupalign\v!middle }\hfil
-\letvalue{\??itemgroupalign\v!center }\hfil
+\letcsname\??itemgroupalign\v!flushleft \endcsname\relax
+\letcsname\??itemgroupalign\v!right \endcsname\relax
+\letcsname\??itemgroupalign\v!flushright\endcsname\hfill
+\letcsname\??itemgroupalign\v!left \endcsname\hfill
+\letcsname\??itemgroupalign\v!middle \endcsname\hfil
+\letcsname\??itemgroupalign\v!center \endcsname\hfil
\def\strc_itemgroups_left_sym_filler
{\csname\??itemgroupalign\itemgroupparameter\c!symalign\endcsname}
@@ -979,10 +979,10 @@
% symbols + states
\def\strc_itemgroups_store_global_symbol#symbol%
- {\letgvalue{\??itemgroupglobal\currentitemgroup:\currentitemlevel}#symbol}
+ {\gletcsname\??itemgroupglobal\currentitemgroup:\currentitemlevel\endcsname#symbol}
\def\strc_itemgroups_store_local_symbol#symbol%
- {\letgvalue{\??itemgrouplocal\currentitemgroup:\currentitemlevel}#symbol}
+ {\gletcsname\??itemgrouplocal\currentitemgroup:\currentitemlevel\endcsname#symbol}
\def\strc_itemgroups_fetch_global_symbol
{\csname\??itemgroupglobal\currentitemgroup:\currentitemlevel\endcsname}
@@ -1336,13 +1336,13 @@
\protected\permanent\def\stopspecialitemgroupitem % todo: frozen
{\stopitemgroupitem}
-\letvalue{\??itemgroupstart\v!item}\strc_itemgroups_start_do_item
-\letvalue{\??itemgroupstart\v!sub }\strc_itemgroups_start_subitem
-\letvalue{\??itemgroupstart\v!sym }\strc_itemgroups_start_symbol
-\letvalue{\??itemgroupstart\v!ran }\strc_itemgroups_start_edge
-\letvalue{\??itemgroupstart\v!its }\strc_itemgroups_start_items
-\letvalue{\??itemgroupstart\v!mar }\strc_itemgroups_start_margin
-\letvalue{\??itemgroupstart\v!txt }\strc_itemgroups_start_text
+\letcsname\??itemgroupstart\v!item\endcsname\strc_itemgroups_start_do_item
+\letcsname\??itemgroupstart\v!sub \endcsname\strc_itemgroups_start_subitem
+\letcsname\??itemgroupstart\v!sym \endcsname\strc_itemgroups_start_symbol
+\letcsname\??itemgroupstart\v!ran \endcsname\strc_itemgroups_start_edge
+\letcsname\??itemgroupstart\v!its \endcsname\strc_itemgroups_start_items
+\letcsname\??itemgroupstart\v!mar \endcsname\strc_itemgroups_start_margin
+\letcsname\??itemgroupstart\v!txt \endcsname\strc_itemgroups_start_text
\def\strc_itemgroups_optimize_breaks
{\ifcase\c_strc_itemgroups_column_depth
diff --git a/tex/context/base/mkxl/strc-mar.mkxl b/tex/context/base/mkxl/strc-mar.mkxl
index 9067b4924..fcce83173 100644
--- a/tex/context/base/mkxl/strc-mar.mkxl
+++ b/tex/context/base/mkxl/strc-mar.mkxl
@@ -93,14 +93,20 @@
{}
\tolerant\def\strc_markings_get_yes[#1]#*[#2]#*[#3]%
- {\ifcstok{\namedmarkingparameter{#1}\c!state}\v!start
+ {\ifarguments\orelse\ifcstok{\namedmarkingparameter{#1}\c!state}\v!start
\begingroup
\setsystemmode\v!marking
\the\everymarking
\ifparameter#3\or
- \clf_getmarking{#1}{#2}{#3}%
+ \ifcstok{#2}\v!page
+ \markingcommand{#1}{\csname\??markingfilter#3\endcsname{#1}}%
+ \else
+ \markingcommand{#1}{\clf_getsynchronizedmarking\begincsname\??markingclass#1\endcsname{#2}{#3}}%
+ \fi
+ \orelse\ifparameter#2\or
+ \markingcommand{#1}{\csname\??markingfilter#2\endcsname{#1}}%
\else
- \clf_getmarking{#1}{\v!page}{#2}%
+ \markingcommand{#1}{\csname\??markingfilter\v!default\endcsname{#1}}%
\fi
\endgroup
\fi}
diff --git a/tex/context/base/mkxl/strc-not.lmt b/tex/context/base/mkxl/strc-not.lmt
index df3b00d78..e05228b2b 100644
--- a/tex/context/base/mkxl/strc-not.lmt
+++ b/tex/context/base/mkxl/strc-not.lmt
@@ -509,9 +509,9 @@ local function check_spacing(index,slot)
local pt = pn + pi
local mt = mn + mi
if trace_insert then
- report_insert("%s %i: %p plus %p minus %p","always ",n,gn,pn,mn)
- report_insert("%s %i: %p plus %p minus %p",i > 1 and "inbetween" or "before ",n,gi,pi,mi)
- report_insert("%s %i: %p plus %p minus %p","effective",n,gt,pt,mt)
+ report_insert("%s %i: %p plus %p minus %p","always ",index,gn,pn,mn)
+ report_insert("%s %i: %p plus %p minus %p",slot > 1 and "inbetween" or "before ",index,gi,pi,mi)
+ report_insert("%s %i: %p plus %p minus %p","effective",index,gt,pt,mt)
end
return gt, pt, mt
end
diff --git a/tex/context/base/mkxl/typo-drp.lmt b/tex/context/base/mkxl/typo-drp.lmt
index de65dd55d..c62b5e718 100644
--- a/tex/context/base/mkxl/typo-drp.lmt
+++ b/tex/context/base/mkxl/typo-drp.lmt
@@ -73,6 +73,7 @@ local v_default = variables.default
local v_margin = variables.margin
local v_auto = variables.auto
local v_first = variables.first
+local v_keep = variables.keep
local v_last = variables.last
local texget = tex.get
@@ -130,6 +131,7 @@ interfaces.implement {
-- a page so this has a low priority
actions[v_default] = function(head,setting)
+ local skip = false
-- begin of par
local first = getnext(head)
local indent = false
@@ -193,6 +195,9 @@ actions[v_default] = function(head,setting)
else
-- keep quote etc with initial
local next = getnext(first)
+ if next and method[v_keep] then
+ skip = first
+ end
if not next then
-- don't start with a quote or so
return head
@@ -242,7 +247,7 @@ actions[v_default] = function(head,setting)
local id = getid(current)
if id == kern_code then
setkern(current,0)
- elseif id == glyph_code then
+ elseif id == glyph_code and skip ~= current then
local next = getnext(current)
if font then
setfont(current,font)
@@ -289,7 +294,11 @@ actions[v_default] = function(head,setting)
--
local hoffset = width + hoffset + distance + (indent and parindent or 0)
for current in nextglyph, first do
- setoffsets(current,-hoffset,-voffset) -- no longer - height here
+ if skip == current then
+ setoffsets(current,-hoffset,0)
+ else
+ setoffsets(current,-hoffset,-voffset) -- no longer - height here
+ end
if current == last then
break
end