summaryrefslogtreecommitdiff
path: root/Build/source
diff options
context:
space:
mode:
authorJonathan Kew <jfkthame@googlemail.com>2009-06-24 23:13:35 +0000
committerJonathan Kew <jfkthame@googlemail.com>2009-06-24 23:13:35 +0000
commitf791e26933b1c183b411265d2bf1a5bfec461916 (patch)
tree4ccd5d78695fe63b63a17de714609dc90b80a6de /Build/source
parent50599e1112b7dff581717734e0ff64fedbba90a7 (diff)
xetex v0.994.2, fix performance issue when loading fonts by filename with extension
git-svn-id: svn://tug.org/texlive/trunk@13951 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source')
-rw-r--r--Build/source/texk/web2c/xetexdir/xetex.ch45
1 files changed, 44 insertions, 1 deletions
diff --git a/Build/source/texk/web2c/xetexdir/xetex.ch b/Build/source/texk/web2c/xetexdir/xetex.ch
index e5911c59117..9db3f8e2ce2 100644
--- a/Build/source/texk/web2c/xetexdir/xetex.ch
+++ b/Build/source/texk/web2c/xetexdir/xetex.ch
@@ -65,7 +65,7 @@ authorization from SIL International.
@d XeTeX_version=0
@d XeTeX_revision==".9994"
-@d XeTeX_version_string=='-0.9994.1' {current \XeTeX\ version}
+@d XeTeX_version_string=='-0.9994.2' {current \XeTeX\ version}
@z
@x
@@ -458,8 +458,23 @@ incr(str_ptr); str_start_macro(str_ptr):=pool_ptr;
@x
@d flush_string==begin decr(str_ptr); pool_ptr:=str_start[str_ptr];
+ end
@y
@d flush_string==begin decr(str_ptr); pool_ptr:=str_start_macro(str_ptr);
+ end
+
+@p procedure append_str(@!s:str_number); { append an existing string to the current string }
+var i: integer;
+ j: pool_pointer;
+begin
+ i:=length(s);
+ str_room(i);
+ j:=str_start_macro(s);
+ while (i > 0) do begin
+ append_char(str_pool[j]);
+ incr(j); decr(i);
+ end;
+end;
@z
@x
@@ -6668,10 +6683,38 @@ def_family: begin p:=cur_chr; scan_math_fam_int; p:=p+cur_val;
@z
@x
+for f:=font_base+1 to font_ptr do
if str_eq_str(font_name[f],cur_name)and str_eq_str(font_area[f],cur_area) then
+ begin if s>0 then
+ begin if s=font_size[f] then goto common_ending;
+ end
+ else if font_size[f]=xn_over_d(font_dsize[f],-s,1000) then
+ goto common_ending;
+ end
@y
+for f:=font_base+1 to font_ptr do begin
if str_eq_str(font_name[f],cur_name) and
(((cur_area = "") and is_native_font(f)) or str_eq_str(font_area[f],cur_area)) then
+ begin if s>0 then
+ begin if s=font_size[f] then goto common_ending;
+ end
+ else if font_size[f]=xn_over_d(font_dsize[f],-s,1000) then
+ goto common_ending;
+ end;
+ { could be a native font whose "name" ended up partly in area or extension }
+ append_str(cur_area); append_str(cur_name); append_str(cur_ext);
+ if str_eq_str(font_name[f], make_string) then begin
+ flush_string;
+ if is_native_font(f) then
+ begin if s>0 then
+ begin if s=font_size[f] then goto common_ending;
+ end
+ else if font_size[f]=xn_over_d(font_dsize[f],-s,1000) then
+ goto common_ending;
+ end
+ end
+ else flush_string;
+ end
@z
@x