diff options
author | Karl Berry <karl@freefriends.org> | 2014-03-14 21:47:39 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2014-03-14 21:47:39 +0000 |
commit | 1c7a73fbd40f13ad63c7f7a40c1947e98578895c (patch) | |
tree | 751ea3d9bd22375790aea0bcb0e23d13cd02e805 /Master/texmf-dist/tex/generic/babel-french | |
parent | 0c27b92841f29375f8faf1e42527c90fd7c226df (diff) |
babel-french (14mar14)
git-svn-id: svn://tug.org/texlive/trunk@33177 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/babel-french')
-rw-r--r-- | Master/texmf-dist/tex/generic/babel-french/frenchb.ldf | 55 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/babel-french/frenchb.lua | 145 |
2 files changed, 181 insertions, 19 deletions
diff --git a/Master/texmf-dist/tex/generic/babel-french/frenchb.ldf b/Master/texmf-dist/tex/generic/babel-french/frenchb.ldf index 910bab413da..2862ce94b67 100644 --- a/Master/texmf-dist/tex/generic/babel-french/frenchb.ldf +++ b/Master/texmf-dist/tex/generic/babel-french/frenchb.ldf @@ -33,7 +33,7 @@ %% extension .ins) which are part of the distribution. %% \ProvidesLanguage{frenchb} - [2014/02/28 v3.0a French support from the babel system] + [2014/03/14 v3.0b French support from the babel system] %% %% File `frenchb.ldf' %% Babel package for LaTeX version 2e @@ -185,20 +185,27 @@ \newskip\FBthinskip \FBthinskip=1.66672pt \relax \ifFB@luatex@punct - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname newluatexattribute\endcsname\relax - \input luaotfload.sty - \fi - \newluatexattribute\FB@addDPspace \FB@addDPspace=1 \relax - \newluatexattribute\FB@addGUILspace \FB@addGUILspace=0 \relax \ifLaTeXe + \AtEndOfPackage{% + \RequirePackage{luatexbase}% + \newluatexattribute\FB@addDPspace \FB@addDPspace=1 \relax + \newluatexattribute\FB@addGUILspace \FB@addGUILspace=0 \relax + } \PackageInfo{frenchb.ldf}{No need for active punctuation characters% \MessageBreak with this version of LuaTeX!% \MessageBreak reported} \else - \fb@info{No need for active punctuation characters\\ - with this version of LuaTeX!} + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname newluatexattribute\endcsname\relax + \input luaotfload.sty + \newluatexattribute\FB@addDPspace \FB@addDPspace=1 \relax + \newluatexattribute\FB@addGUILspace \FB@addGUILspace=0 \relax + \fb@info{No need for active punctuation characters\\ + with this version of LuaTeX!} + \fi \fi +\fi +\ifFB@luatex@punct \newcommand*{\FB@luatex@punct@french}{% \ifx\shorthandoffORI\@undefined \let\shorthandonORI\shorthandon @@ -226,15 +233,24 @@ \FB@addto{extras}{\FB@luatex@punct@french} \FB@addto{noextras}{\FB@luatex@punct@nonfrench} \def\activate@luatexpunct{% - \directlua{% - FR = \the\l@french - local f = dofile("frenchb.lua") - luatexbase.add_to_callback("pre_linebreak_filter", - f, "frenchb.french_punctuation",1) - luatexbase.add_to_callback("hpack_filter", - f, "frenchb.french_punctuation",1) - }% - } + \directlua{% + FR = \the\l@french + local path = kpse.find_file("frenchb.lua", "lua") + if path then + local f = dofile(path) + luatexbase.add_to_callback("pre_linebreak_filter", + f, "frenchb.french_punctuation",1) + luatexbase.add_to_callback("hpack_filter", + f, "frenchb.french_punctuation",1) + else + texio.write_nl('') + texio.write_nl('*****************************') + texio.write_nl('Error: frenchb.lua not found.') + texio.write_nl('*****************************') + texio.write_nl('') + end + }% + } \fi \newcount\FB@interchartokenstateORI \ifFB@xetex@punct @@ -415,11 +431,12 @@ \FBAutoSpacePunctuationtrue} \def\NoAutoSpaceBeforeFDP{\noautospace@beforeFDP \FBAutoSpacePunctuationfalse} + \AtEndOfPackage{\AutoSpaceBeforeFDP} \else \let\AutoSpaceBeforeFDP\autospace@beforeFDP \let\NoAutoSpaceBeforeFDP\noautospace@beforeFDP + \AutoSpaceBeforeFDP \fi -\AutoSpaceBeforeFDP \ifLaTeXe %\let\ttfamilyORI\ttfamily %\let\rmfamilyORI\rmfamily diff --git a/Master/texmf-dist/tex/generic/babel-french/frenchb.lua b/Master/texmf-dist/tex/generic/babel-french/frenchb.lua new file mode 100644 index 00000000000..7d0ffb50de4 --- /dev/null +++ b/Master/texmf-dist/tex/generic/babel-french/frenchb.lua @@ -0,0 +1,145 @@ +-- +-- File `frenchb.lua' generated from frenchb.dtx [2014/03/14 v3.0b] +-- +-- Copyright (C) 2014 Daniel Flipo <daniel.flipo at free.fr> +-- License LPPL: see frenchb.dtx. +-- +local FB_punct_thin = + {[string.byte("!")] = true, + [string.byte("?")] = true, + [string.byte(";")] = true} +local FB_punct_thick = + {[string.byte(":")] = true} +local FB_punct_left = + {[string.byte("!")] = true, + [string.byte("?")] = true, + [string.byte(";")] = true, + [string.byte(":")] = true, + [0xBB] = true} +local FB_punct_right = + {[0xAB] = true} +local FB_punct_null = + {[string.byte("!")] = true, + [string.byte("?")] = true, + [string.byte("[")] = true, + [string.byte("(")] = true, + [0xA0] = true, + [0x202F] = true} +local FB_guil_null = + {[0xA0] = true, + [0x202F] = true} +local new_node = node.new +local copy_node = node.copy +local node_id = node.id +local GLUE = node_id("glue") +local GSPEC = node_id("glue_spec") +local GLYPH = node_id("glyph") +local PENALTY = node_id("penalty") +local nobreak = new_node(PENALTY) +nobreak.penalty = 10000 +local insert_node_before = node.insert_before +local insert_node_after = node.insert_after +local remove_node = node.remove +local thin10 = tex.skip['FBthinskip'] +local thinwd = thin10.width/65536/3.33 +local thinst = thin10.stretch/65536/1.665 +local thinsh = thin10.shrink/655.36/1.11 +local coln10 = tex.skip['FBcolonskip'] +local colnwd = coln10.width/65536/3.33 +local colnst = coln10.stretch/65536/1.665 +local colnsh = coln10.shrink/65536/1.11 +local guil10 = tex.skip['FBguillskip'] +local guilwd = guil10.width/65536/3.33 +local guilst = guil10.stretch/65536/1.665 +local guilsh = guil10.shrink/65536/1.11 +local font_table = {} +local function new_glue_scaled (fid,width,stretch,shrink) + local fp = font_table[fid] + if not fp then + font_table[fid] = font.getfont(fid).parameters + fp = font_table[fid] + end + local gl = new_node(GLUE,0) + local gl_spec = new_node(GSPEC) + gl_spec.width = width * fp.space + gl_spec.stretch = stretch * fp.space_stretch + gl_spec.shrink = shrink * fp.space_shrink + gl.spec = gl_spec + return gl +end +local addDPspace = luatexbase.attributes['FB@addDPspace'] +local addGUILspace = luatexbase.attributes['FB@addGUILspace'] +local has_attribute = node.has_attribute +local function french_punctuation (head) + for item in node.traverse_id(GLYPH, head) do + local lang = item.lang + local char = item.char + local SIG = has_attribute(item, addGUILspace) + if lang == FR and FB_punct_left[char] then + local fid = item.font + local prev = item.prev + local prev_id, prev_subtype, prev_char + if prev then + prev_id = prev.id + prev_subtype = prev.subtype + if prev_id == GLYPH then + prev_char = prev.char + end + end + local glue = prev_id == GLUE and prev_subtype == 0 + if FB_punct_thin[char] or FB_punct_thick[char] then + local SBDP = has_attribute(item, addDPspace) + local fbglue + if FB_punct_thick[char] then + fbglue = new_glue_scaled(fid,colnwd,colnst,colnsh) + else + fbglue = new_glue_scaled(fid,thinwd,thinst,thinsh) + end + local auto = + SBDP and SBDP > 0 and + (prev_char and not FB_punct_null[prev_char]) or + (not prev_char and (prev_id ~= 0 or prev_subtype ~= 3)) + if glue or auto then + if glue then + head = remove_node(head,prev,true) + end + insert_node_before(head, item, copy_node(nobreak)) + insert_node_before(head, item, copy_node(fbglue)) + end + elseif SIG and SIG > 0 then + if glue or (prev_char and not FB_guil_null[prev_char]) then + if glue then + head = remove_node(head,prev,true) + end + local fbglue = new_glue_scaled(fid,guilwd,guilst,guilsh) + insert_node_before(head, item, copy_node(nobreak)) + insert_node_before(head, item, copy_node(fbglue)) + end + end + end + if lang == FR and FB_punct_right[char] and SIG and SIG > 0 then + local next = item.next + local next_id, next_subtype, next_char + if next then + next_id = next.id + next_subtype = next.subtype + if next_id == GLYPH then + next_char = next.char + end + end + local glue = next_id == GLUE and next_subtype == 0 + if glue or (next_char and not FB_guil_null[next_char]) then + if glue then + head = remove_node(head,next,true) + end + local fid = item.font + local fbglue = new_glue_scaled(fid,guilwd,guilst,guilsh) + insert_node_after(head, item, copy_node(fbglue)) + insert_node_after(head, item, copy_node(nobreak)) + end + end + end + return head +end +return french_punctuation +-- End of File frenchb.lua. |