summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2014-03-14 21:47:39 +0000
committerKarl Berry <karl@freefriends.org>2014-03-14 21:47:39 +0000
commit1c7a73fbd40f13ad63c7f7a40c1947e98578895c (patch)
tree751ea3d9bd22375790aea0bcb0e23d13cd02e805 /Master/texmf-dist/tex/generic
parent0c27b92841f29375f8faf1e42527c90fd7c226df (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')
-rw-r--r--Master/texmf-dist/tex/generic/babel-french/frenchb.ldf55
-rw-r--r--Master/texmf-dist/tex/generic/babel-french/frenchb.lua145
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.