summaryrefslogtreecommitdiff
path: root/tex
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2013-09-18 01:14:00 +0200
committerHans Hagen <pragma@wxs.nl>2013-09-18 01:14:00 +0200
commita72a9463a78650d028b891fe8eb6dcbb093bdee2 (patch)
tree10d7cca7a73d7bdd45c5b6a70fe3f54c9ba09b55 /tex
parentdff826c2db3ce210786c0b99ff39bac799d8450c (diff)
downloadcontext-a72a9463a78650d028b891fe8eb6dcbb093bdee2.tar.gz
beta 2013.09.18 01:14
Diffstat (limited to 'tex')
-rw-r--r--tex/context/base/cont-new.mkiv2
-rw-r--r--tex/context/base/context-version.pdfbin4113 -> 4106 bytes
-rw-r--r--tex/context/base/context.mkiv2
-rw-r--r--tex/context/base/font-sty.mkvi1
-rw-r--r--tex/context/base/math-fbk.lua40
-rw-r--r--tex/context/base/page-one.mkiv2
-rw-r--r--tex/context/base/s-abr-04.tex24
-rw-r--r--tex/context/base/status-files.pdfbin24708 -> 24733 bytes
-rw-r--r--tex/context/base/status-lua.log2
-rw-r--r--tex/context/base/strc-flt.mkvi3
-rw-r--r--tex/context/base/typo-cap.lua237
-rw-r--r--tex/context/base/typo-cap.mkiv14
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua2
13 files changed, 214 insertions, 115 deletions
diff --git a/tex/context/base/cont-new.mkiv b/tex/context/base/cont-new.mkiv
index fa34f5791..fbba84639 100644
--- a/tex/context/base/cont-new.mkiv
+++ b/tex/context/base/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2013.09.17 14:39}
+\newcontextversion{2013.09.18 01:14}
%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/context-version.pdf b/tex/context/base/context-version.pdf
index 44005a184..9dd6a9c43 100644
--- a/tex/context/base/context-version.pdf
+++ b/tex/context/base/context-version.pdf
Binary files differ
diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv
index 68dc5e261..c998bbebc 100644
--- a/tex/context/base/context.mkiv
+++ b/tex/context/base/context.mkiv
@@ -25,7 +25,7 @@
%D up and the dependencies are more consistent.
\edef\contextformat {\jobname}
-\edef\contextversion{2013.09.17 14:39}
+\edef\contextversion{2013.09.18 01:14}
\edef\contextkind {beta}
%D For those who want to use this:
diff --git a/tex/context/base/font-sty.mkvi b/tex/context/base/font-sty.mkvi
index 3caa94488..d9781f407 100644
--- a/tex/context/base/font-sty.mkvi
+++ b/tex/context/base/font-sty.mkvi
@@ -404,5 +404,4 @@
\let\dostopattributes\endgroup
-
\protect \endinput
diff --git a/tex/context/base/math-fbk.lua b/tex/context/base/math-fbk.lua
index ce31a9982..b364d1208 100644
--- a/tex/context/base/math-fbk.lua
+++ b/tex/context/base/math-fbk.lua
@@ -467,33 +467,39 @@ virtualcharacters[0xFE303] = function(data) return smashed(data,0x0303,0xFE303)
-- another crazy hack .. doesn't work as we define scrscr first .. we now have smaller
-- primes so we have smaller primes for the moment, big ones will become an option
-local function smashed(data,unicode)
+local function smashed(data,unicode,optional)
local oldchar = data.characters[unicode]
- local height = 1.2 * data.target.parameters.xheight
- local newchar = {
- commands = {
- { "down", oldchar.height - height },
- { "char", unicode },
- },
- height = height,
- width = oldchar.width,
- }
- return newchar
+ if oldchar then
+ local height = 1.2 * data.target.parameters.xheight
+ local newchar = {
+ commands = {
+ { "down", oldchar.height - height },
+ { "char", unicode },
+ },
+ height = height,
+ width = oldchar.width,
+ }
+ return newchar
+ elseif not optional then
+ report_fallbacks("missing %U prime in font %a",unicode,data.target.properties.fullname)
+ end
end
addextra(0xFE932, { description="SMASHED PRIME 0x02032", unicodeslot=0xFE932 } )
addextra(0xFE933, { description="SMASHED PRIME 0x02033", unicodeslot=0xFE933 } )
addextra(0xFE934, { description="SMASHED PRIME 0x02034", unicodeslot=0xFE934 } )
-addextra(0xFE935, { description="SMASHED PRIME 0x02035", unicodeslot=0xFE935 } )
-addextra(0xFE936, { description="SMASHED PRIME 0x02036", unicodeslot=0xFE936 } )
-addextra(0xFE937, { description="SMASHED PRIME 0x02037", unicodeslot=0xFE937 } )
addextra(0xFE957, { description="SMASHED PRIME 0x02057", unicodeslot=0xFE957 } )
+addextra(0xFE935, { description="SMASHED BACKWARD PRIME 0x02035", unicodeslot=0xFE935 } )
+addextra(0xFE936, { description="SMASHED BACKWARD PRIME 0x02036", unicodeslot=0xFE936 } )
+addextra(0xFE937, { description="SMASHED BACKWARD PRIME 0x02037", unicodeslot=0xFE937 } )
+
virtualcharacters[0xFE932] = function(data) return smashed(data,0x02032) end
virtualcharacters[0xFE933] = function(data) return smashed(data,0x02033) end
virtualcharacters[0xFE934] = function(data) return smashed(data,0x02034) end
-virtualcharacters[0xFE935] = function(data) return smashed(data,0x02035) end
-virtualcharacters[0xFE936] = function(data) return smashed(data,0x02036) end
-virtualcharacters[0xFE937] = function(data) return smashed(data,0x02037) end
virtualcharacters[0xFE957] = function(data) return smashed(data,0x02057) end
+virtualcharacters[0xFE935] = function(data) return smashed(data,0x02035,true) end
+virtualcharacters[0xFE936] = function(data) return smashed(data,0x02036,true) end
+virtualcharacters[0xFE937] = function(data) return smashed(data,0x02037,true) end
+
diff --git a/tex/context/base/page-one.mkiv b/tex/context/base/page-one.mkiv
index 6261938b6..941828688 100644
--- a/tex/context/base/page-one.mkiv
+++ b/tex/context/base/page-one.mkiv
@@ -1,4 +1,4 @@
-%D \module
+ %D \module
%D [ file=page-one,
%D version=2000.10.20,
%D title=\CONTEXT\ Page Macros,
diff --git a/tex/context/base/s-abr-04.tex b/tex/context/base/s-abr-04.tex
new file mode 100644
index 000000000..23940b526
--- /dev/null
+++ b/tex/context/base/s-abr-04.tex
@@ -0,0 +1,24 @@
+%D \module
+%D [ file=s-abr-04,
+%D version=1996.01.01,
+%D title=\CONTEXT\ Style File,
+%D subtitle=General Abbreviations 2,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\usemodule[abr-01]
+
+\unprotect
+
+% \definealternativestyle [\v!mixed] [\font_style_pseudoMixedCapped] [\font_style_pseudoMixedCapped]
+
+\setupsorting[logo][\c!style=\font_style_pseudoMixedCapped]
+
+% \setupcapitals[\c!title=\v!no]
+
+\protect \endinput
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index c08e4d130..30c35288f 100644
--- a/tex/context/base/status-files.pdf
+++ b/tex/context/base/status-files.pdf
Binary files differ
diff --git a/tex/context/base/status-lua.log b/tex/context/base/status-lua.log
index 0eb35b36b..6790a5988 100644
--- a/tex/context/base/status-lua.log
+++ b/tex/context/base/status-lua.log
@@ -1,6 +1,6 @@
(cont-yes.mkiv
-ConTeXt ver: 2013.09.17 14:39 MKIV beta fmt: 2013.9.17 int: english/english
+ConTeXt ver: 2013.09.18 01:14 MKIV beta fmt: 2013.9.18 int: english/english
system > 'cont-new.mkiv' loaded
(cont-new.mkiv)
diff --git a/tex/context/base/strc-flt.mkvi b/tex/context/base/strc-flt.mkvi
index 8122b953e..065513db8 100644
--- a/tex/context/base/strc-flt.mkvi
+++ b/tex/context/base/strc-flt.mkvi
@@ -983,6 +983,8 @@
{\let\extrafloatlocation#rightpagelocation}%
{\let\extrafloatlocation#leftpagelocation}}
+\let\extrafloatlocation\empty
+
\installcorenamespace{extrafloataction}
\setvalue{\??extrafloataction \v!inner}#1{\strc_floats_set_extra_action\v!left \v!right}
@@ -1007,6 +1009,7 @@
\processcommacommand[\floatlocation]\strc_floats_check_extra_actions_step
\ifx\extrafloatlocation\empty \else
\edef\floatlocation{\extrafloatlocation,\floatlocation}%
+ \setfloatmethodvariables\floatlocation
\fi}}
\def\strc_floats_check_extra_actions_step#step%
diff --git a/tex/context/base/typo-cap.lua b/tex/context/base/typo-cap.lua
index 70a0e08e9..2988d5474 100644
--- a/tex/context/base/typo-cap.lua
+++ b/tex/context/base/typo-cap.lua
@@ -16,11 +16,9 @@ local report_casing = logs.reporter("typesetting","casing")
local nodes, node = nodes, node
-local traverse_id = nodes.traverse_id
local copy_node = nodes.copy
local end_of_math = nodes.end_of_math
-local free_node = nodes.free
-local remove_node = nodes.remove
+
local nodecodes = nodes.nodecodes
local skipcodes = nodes.skipcodes
@@ -28,6 +26,7 @@ local kerncodes = nodes.kerncodes
local glyph_code = nodecodes.glyph
local kern_code = nodecodes.kern
+local disc_code = nodecodes.disc
local math_code = nodecodes.math
local kerning_code = kerncodes.kerning
@@ -56,13 +55,38 @@ cases.actions = { }
local actions = cases.actions
local a_cases = attributes.private("case")
--- we use char(0) as placeholder for the larger font, so we need to remove it
--- before it can do further harm
+local extract = bit32.extract
+local run = 0 -- a trick to make neighbouring ranges work
+
+local function set(tag,font)
+ if run == 2^6 then
+ run = 1
+ else
+ run = run + 1
+ end
+ return font * 0x10000 + tag * 0x100 + run
+end
+
+local function get(a)
+ local font = extract(a,16,12) -- 4000
+ local tag = extract(a, 8, 8) -- 250
+ local run = extract(a, 0, 8) -- 50
+ return tag, font, run
+end
+
+-- print(get(set( 1, 0)))
+-- print(get(set( 1, 99)))
+-- print(get(set( 2, 96)))
+-- print(get(set( 30, 922)))
+-- print(get(set(250,4000)))
+
+-- a previous implementation used char(0) as placeholder for the larger font, so we needed
+-- to remove it before it can do further harm ... that was too tricky as we use char 0 for
+-- other cases too
--
--- we could do the whole glyph run here (till no more attributes match) but
--- then we end up with more code .. maybe i will clean this up anyway as the
--- lastfont hack is somewhat ugly .. on the other hand, we need to deal with
--- cases like:
+-- we could do the whole glyph run here (till no more attributes match) but then we end up
+-- with more code .. maybe i will clean this up anyway as the lastfont hack is somewhat ugly
+-- ... on the other hand, we need to deal with cases like:
--
-- \WORD {far too \Word{many \WORD{more \word{pushed} in between} useless} words}
@@ -71,34 +95,30 @@ local lccodes = characters.lccodes
-- true false true == mixed
-local function helper(head,start,attr,lastfont,codes,special,once,keepother)
+local function helper(start,attr,lastfont,n,codes,special,once,keepother)
local char = start.char
- local dc = codes[char]
+ local dc = codes[char]
if dc then
local fnt = start.font
- if special then
- -- will become function
- if char == 0 then
- lastfont[attr] = fnt
- head, start = remove_node(head,start,true)
- return head, start and start.prev or head, true
- elseif lastfont[attr] and start.prev.id ~= glyph_code then
- fnt = lastfont[attr]
- start.font = fnt
- end
- elseif char == 0 then
- -- print("removing",char)
- -- head, start = remove_node(head,start,true)
- -- return head, start and getprev(start) or head, true
- end
if keepother and dc == char then
- if lastfont[attr] then
- start.font = lastfont[attr]
- return head, start, true
+ local lfa = lastfont[n]
+ if lfa then
+ start.font = lfa
+ return start, true
else
- return head, start, false
+ return start, false
end
else
+ if special then
+ local lfa = lastfont[n]
+ if lfa then
+ local previd = start.prev.id
+ if previd ~= glyph_code and previd ~= disc_code then
+ fnt = lfa
+ setfield(start,"font",lfa)
+ end
+ end
+ end
local ifc = fontchar[fnt]
if type(dc) == "table" then
local ok = true
@@ -111,7 +131,8 @@ local function helper(head,start,attr,lastfont,codes,special,once,keepother)
end
if ok then
-- todo: use generic injector
- local prev, original = start, start
+ local prev = start
+ local original = start
for i=1,#dc do
local chr = dc[i]
prev = start
@@ -131,27 +152,27 @@ local function helper(head,start,attr,lastfont,codes,special,once,keepother)
end
end
if once then
- lastfont[attr] = nil
+ lastfont[n] = false
end
- return head, prev, true
+ return prev, true
end
if once then
- lastfont[attr] = nil
+ lastfont[n] = false
end
- return head, start, false
+ return start, false
elseif ifc[dc] then
start.char = dc
if once then
- lastfont[attr] = nil
+ lastfont[n] = false
end
- return head, start, true
+ return start, true
end
end
end
if once then
- lastfont[attr] = nil
+ lastfont[n] = false
end
- return head, start, false
+ return start, false
end
local registered, n = { }, 0
@@ -171,70 +192,86 @@ end
cases.register = register
-local function WORD(head,start,attr,lastfont)
- lastfont[attr] = nil
- return helper(head,start,attr,lastfont,uccodes)
+local function WORD(start,attr,lastfont,n)
+ lastfont[n] = false
+ return helper(start,attr,lastfont,n,uccodes)
+end
+
+local function word(start,attr,lastfont,n)
+ lastfont[n] = false
+ return helper(start,attr,lastfont,n,lccodes)
end
-local function word(head,start,attr,lastfont)
- lastfont[attr] = nil
- return helper(head,start,attr,lastfont,lccodes)
+local function blockrest(start)
+ local n = start.next
+ while n do
+ local id = n.id
+ if id == glyph_code or id == disc_node and n[a_cases] == attr then
+ n[a_cases] = unsetvalue
+ else
+ -- break -- we can have nested mess
+ end
+ n = n.next
+ end
end
-local function Word(head,start,attr,lastfont)
- lastfont[attr] = nil
+local function Word(start,attr,lastfont,n) -- looks quite complex
+ lastfont[n] = false
local prev = start.prev
if prev and prev.id == kern_code and prev.subtype == kerning_code then
prev = prev.prev
end
- if not prev or prev.id ~= glyph_code then
+ if not prev then
+ blockrest(start)
+ return helper(start,attr,lastfont,n,uccodes)
+ end
+ local previd = prev.id
+ if previd ~= glyph_code and previd ~= disc_code then
-- only the first character is treated
- for n in traverse_id(glyph_code,start.next) do
- if n[a_cases] == attr then
- n[a_cases] = unsetvalue
- else
- -- break -- we can have nested mess
- end
- end
+ blockrest(start)
-- we could return the last in the range and save some scanning
-- but why bother
- return helper(head,start,attr,lastfont,uccodes)
+ return helper(start,attr,lastfont,n,uccodes)
else
- return head, start, false
+ return start, false
end
end
-local function Words(head,start,attr,lastfont)
- lastfont[attr] = nil
+local function Words(start,attr,lastfont,n)
+ lastfont[n] = false
local prev = start.prev
if prev and prev.id == kern_code and prev.subtype == kerning_code then
prev = prev.prev
end
- if not prev or prev.id ~= glyph_code then
- return helper(head,start,attr,lastfont,uccodes)
+ if not prev then
+ return helper(start,attr,lastfont,n,uccodes)
+ end
+ local previd = prev.id
+ if previd ~= glyph_code and previd ~= disc_code then
+ return helper(start,attr,lastfont,n,uccodes)
else
- return head, start, false
+ return start, false
end
end
-local function capital(head,start,attr,lastfont) -- 3
- return helper(head,start,attr,lastfont,uccodes,true,true)
+local function capital(start,attr,lastfont,n) -- 3
+ return helper(start,attr,lastfont,n,uccodes,true,true)
end
-local function Capital(head,start,attr,lastfont) -- 4
- return helper(head,start,attr,lastfont,uccodes,true,false)
+local function Capital(start,attr,lastfont,n) -- 4
+ return helper(start,attr,lastfont,n,uccodes,true,false)
end
-local function mixed(head,start,attr,lastfont)
- return helper(head,start,attr,lastfont,uccodes,true,false,true)
+local function mixed(start,attr,lastfont,n)
+ return helper(start,attr,lastfont,n,uccodes,false,false,true)
end
-local function none(head,start,attr,lastfont)
- return head, start, false
+local function none(start,attr,lastfont,n)
+ return start, false
end
-local function random(head,start,attr,lastfont)
- lastfont[attr] = nil
+local function random(start,attr,lastfont,n)
+ lastfont[n] = false
local ch = start.char
local tfm = fontchar[start.font]
if lccodes[ch] then
@@ -244,7 +281,7 @@ local function random(head,start,attr,lastfont)
local uc = uccodes[d]
if uc and tfm[uc] then -- this also intercepts tables
start.char = uc
- return head, start, true
+ return start, true
end
end
end
@@ -255,12 +292,12 @@ local function random(head,start,attr,lastfont)
local lc = lccodes[d]
if lc and tfm[lc] then -- this also intercepts tables
start.char = lc
- return head, start, true
+ return start, true
end
end
end
end
- return head, start, false
+ return start, false
end
register(variables.WORD, WORD) -- 1
@@ -290,17 +327,48 @@ function cases.handler(head) -- not real fast but also not used on much data
lastattr = attr
end
start[a_cases] = unsetvalue
- local action = actions[attr%100] -- map back to low number
+ local n, id, m = get(attr)
+ if lastfont[n] == nil then
+ lastfont[n] = id
+ end
+ local action = actions[n] -- map back to low number
if action then
- head, start, ok = action(head,start,attr,lastfont)
+ start, ok = action(start,attr,lastfont,n)
if ok then
done = true
end
if trace_casing then
- report_casing("case trigger %a, instance %a, result %a",attr%100,div(attr,100),ok)
+ report_casing("case trigger %a, instance %a, fontid %a, result %a",n,m,id,ok)
end
elseif trace_casing then
- report_casing("unknown case trigger %a",attr)
+ report_casing("unknown case trigger %a",n)
+ end
+ end
+ elseif id == disc_code then
+ local attr = start[a_cases]
+ if attr and attr > 0 then
+ if attr ~= lastattr then
+ lastattr = attr
+ end
+ start[a_cases] = unsetvalue
+ local n, id, m = get(attr)
+ if lastfont[n] == nil then
+ lastfont[n] = id
+ end
+ local action = actions[n] -- map back to low number
+ if action then
+ local replace = start.replace
+ if replace then
+ action(replace,attr,lastfont,n)
+ end
+ local pre = start.pre
+ if pre then
+ action(pre,attr,lastfont,n)
+ end
+ local post = start.post
+ if post then
+ action(post,attr,lastfont,n)
+ end
end
end
elseif id == math_code then
@@ -313,9 +381,9 @@ function cases.handler(head) -- not real fast but also not used on much data
return head, done
end
-local m, enabled = 0, false -- a trick to make neighbouring ranges work
+local enabled = false
-function cases.set(n)
+function cases.set(n,id)
if n == v_reset then
n = unsetvalue
else
@@ -328,12 +396,7 @@ function cases.set(n)
end
enabled = true
end
- if m == 100 then
- m = 1
- else
- m = m + 1
- end
- n = m * 100 + n
+ n = set(n,id)
else
n = unsetvalue
end
diff --git a/tex/context/base/typo-cap.mkiv b/tex/context/base/typo-cap.mkiv
index 8f859a4e6..0910d78c1 100644
--- a/tex/context/base/typo-cap.mkiv
+++ b/tex/context/base/typo-cap.mkiv
@@ -75,7 +75,7 @@
% test \Word{test TEST \TeX} test
\unexpanded\def\setcharactercasing[#1]%
- {\ctxcommand{setcharactercasing("#1")}}
+ {\ctxcommand{setcharactercasing("#1",\number\fontid\font)}}
% todo: names casings
@@ -166,7 +166,7 @@
\def\typo_capitals_set_fake#1%
{\edef\currentcapitals{#1}%
%\setcharactercasing[\currentcapitals]%
- \ctxcommand{setcharactercasing("\currentcapitals")}%
+ \ctxcommand{setcharactercasing("\currentcapitals",\number\fontid\font)}%
\signalcharacter % retain current style
\usecapitalsstyleparameter\c!style}
@@ -174,7 +174,7 @@
{\edef\currentcapitals{#1}%
\sc
%\setcharactercasing[\currentcapitals]}
- \ctxcommand{setcharactercasing("\currentcapitals")}}
+ \ctxcommand{setcharactercasing("\currentcapitals",\number\fontid\font)}}
\unexpanded\def\pseudosmallcapped{\groupedcommand{\typo_capitals_set_fake\v!WORD }\donothing} % all upper
\unexpanded\def\pseudoSmallcapped{\groupedcommand{\typo_capitals_set_fake\v!capital}\donothing} % one upper + font
@@ -266,15 +266,19 @@
% [MixedCaps]
% [MixedCaps*default cp \the\exheight]
+\definefontfeature
+ [mixeddefault]
+ [default]
+ [extend=1.2]
+
\definefont
[MixedCaps]
- [CurrentFont*default cp \the\exheight]
+ [CurrentFont*default,mixeddefault cp \the\exheight]
\setupcapitals
[\v!mixed]
[\c!style=MixedCaps]
-
% \definestartstop is not yet in available at core-spa time
%
% \startrandomized \input tufte \stoprandomized
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index 1c69e8b65..fbdd27929 100644
--- a/tex/generic/context/luatex/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
-- merged file : luatex-fonts-merged.lua
-- parent file : luatex-fonts.lua
--- merge date : 09/17/13 16:03:54
+-- merge date : 09/18/13 01:14:45
do -- begin closure to overcome local limits and interference