summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/babel/luababel.def
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-09-26 20:48:48 +0000
committerKarl Berry <karl@freefriends.org>2018-09-26 20:48:48 +0000
commit24e0da01ec79bfa74f109e457721fc6f51a04295 (patch)
treee848f65660e9b745ebfd4276fab635d5d0599b05 /Master/texmf-dist/tex/generic/babel/luababel.def
parentd1fff759e03eca70de32c79c2b9fcd3eacbda5c0 (diff)
babel (26sep18)
git-svn-id: svn://tug.org/texlive/trunk@48768 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/babel/luababel.def')
-rw-r--r--Master/texmf-dist/tex/generic/babel/luababel.def71
1 files changed, 71 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/babel/luababel.def b/Master/texmf-dist/tex/generic/babel/luababel.def
index 6b5912ba4bd..22bc238a7c7 100644
--- a/Master/texmf-dist/tex/generic/babel/luababel.def
+++ b/Master/texmf-dist/tex/generic/babel/luababel.def
@@ -306,6 +306,77 @@
{\csname bbl@patterns@\bbl@tempa\endcsname\space}%
#2}}}%
\fi}}
+\def\bbl@intraspace#1 #2 #3\@@{%
+ \directlua{
+ Babel = Babel or {}
+ Babel.intraspaces = Babel.intraspaces or {}
+ Babel.intraspaces['\csname bbl@sbcp@\languagename\endcsname'] = %
+ {b = #1, p = #2, m = #3}
+ }}
+\def\bbl@intrapenalty#1\@@{%
+ \directlua{
+ Babel = Babel or {}
+ Babel.intrapenalties = Babel.intrapenalties or {}
+ Babel.intrapenalties['\csname bbl@sbcp@\languagename\endcsname'] = #1
+ }}
+\begingroup
+\catcode`\%=12
+\catcode`\^=14
+\catcode`\'=12
+\catcode`\~=12
+\gdef\bbl@seaintraspace{^
+ \let\bbl@seaintraspace\relax
+ \directlua{
+ Babel = Babel or {}
+ Babel.sea_ranges = Babel.sea_ranges or {}
+ function Babel.set_chranges (script, chrng)
+ local c = 0
+ for s, e in string.gmatch(chrng..' ', '(.-)%.%.(.-)%s') do
+ Babel.sea_ranges[script..c]={tonumber(s,16), tonumber(e,16)}
+ c = c + 1
+ end
+ end
+ function Babel.sea_disc_to_space (head)
+ local sea_ranges = Babel.sea_ranges
+ local last_char = nil
+ local quad = 655360 ^^ 10 pt = 655360 = 10 * 65536
+ for item in node.traverse(head) do
+ local i = item.id
+ if i == node.id'glyph' then
+ last_char = item
+ elseif i == 7 and item.subtype == 3 and last_char
+ and last_char.char > 0x0C99 then
+ quad = font.getfont(last_char.font).size
+ for lg, rg in pairs(sea_ranges) do
+ if last_char.char > rg[1] and last_char.char < rg[2] then
+ lg = lg:sub(1, 4)
+ local intraspace = Babel.intraspaces[lg]
+ local intrapenalty = Babel.intrapenalties[lg]
+ local n
+ if intrapenalty ~= 0 then
+ n = node.new(14, 0) ^^ penalty
+ n.penalty = intrapenalty
+ node.insert_before(head, item, n)
+ end
+ n = node.new(12, 13) ^^ (glue, spaceskip)
+ node.setglue(n, intraspace.b * quad,
+ intraspace.p * quad,
+ intraspace.m * quad)
+ node.insert_before(head, item, n)
+ node.remove(head, item)
+ end
+ end
+ end
+ end
+ end
+ luatexbase.add_to_callback('hyphenate',
+ function (head, tail)
+ lang.hyphenate(head)
+ Babel.sea_disc_to_space(head)
+ end,
+ 'Babel.sea_disc_to_space')
+}}
+\endgroup
\AddBabelHook{luatex}{loadkernel}{%
\begingroup
% Reset chars "80-"C0 to category "other", no case mapping: