diff options
author | Karl Berry <karl@freefriends.org> | 2018-09-26 20:48:48 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2018-09-26 20:48:48 +0000 |
commit | 24e0da01ec79bfa74f109e457721fc6f51a04295 (patch) | |
tree | e848f65660e9b745ebfd4276fab635d5d0599b05 /Master/texmf-dist/tex/generic/babel/luababel.def | |
parent | d1fff759e03eca70de32c79c2b9fcd3eacbda5c0 (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.def | 71 |
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: |