summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Build/source/texk/web2c/xetexdir/ChangeLog4
-rw-r--r--Build/source/texk/web2c/xetexdir/XeTeXFontMgr.cpp9
-rw-r--r--Build/source/texk/web2c/xetexdir/XeTeXLayoutInterface.cpp154
-rw-r--r--Build/source/texk/web2c/xetexdir/XeTeXLayoutInterface.h17
-rw-r--r--Build/source/texk/web2c/xetexdir/XeTeX_ext.c4
-rw-r--r--Build/source/texk/web2c/xetexdir/xetex.web2
-rw-r--r--Build/source/texk/web2c/xetexdir/xetex_version.h2
7 files changed, 109 insertions, 83 deletions
diff --git a/Build/source/texk/web2c/xetexdir/ChangeLog b/Build/source/texk/web2c/xetexdir/ChangeLog
index 260bece38ae..f774702e089 100644
--- a/Build/source/texk/web2c/xetexdir/ChangeLog
+++ b/Build/source/texk/web2c/xetexdir/ChangeLog
@@ -1,3 +1,7 @@
+2013-03-27 Khaled Hosny <khaledhosny@eglug.org>
+
+ XeTeX 0.9999.2
+
2013-03-25 Peter Breitenlohner <peb@mppmu.mpg.de>
* am/xetex.am (EXTRA_DIST): Add NEWS and image/README.
diff --git a/Build/source/texk/web2c/xetexdir/XeTeXFontMgr.cpp b/Build/source/texk/web2c/xetexdir/XeTeXFontMgr.cpp
index 53f595d6555..84dea428393 100644
--- a/Build/source/texk/web2c/xetexdir/XeTeXFontMgr.cpp
+++ b/Build/source/texk/web2c/xetexdir/XeTeXFontMgr.cpp
@@ -504,7 +504,8 @@ XeTeXFontMgr::getDesignSize(XeTeXFont font)
void
XeTeXFontMgr::getOpSizeRecAndStyleFlags(Font* theFont)
{
- XeTeXFont font = createFont(theFont->fontRef, 655360);
+ XeTeXFont font = createFont(theFont->fontRef, 655360);
+ XeTeXFontInst* fontInst = (XeTeXFontInst*) font;
if (font != 0) {
const OpSizeRec* pSizeRec = getOpSize(font);
if (pSizeRec != NULL) {
@@ -521,7 +522,7 @@ XeTeXFontMgr::getOpSizeRecAndStyleFlags(Font* theFont)
}
done_size:
- const TT_OS2* os2Table = (TT_OS2*)getFontTable(font, ft_sfnt_os2);
+ const TT_OS2* os2Table = (TT_OS2*) fontInst->getFontTable(ft_sfnt_os2);
if (os2Table != NULL) {
theFont->weight = os2Table->usWeightClass;
theFont->width = os2Table->usWidthClass;
@@ -531,7 +532,7 @@ XeTeXFontMgr::getOpSizeRecAndStyleFlags(Font* theFont)
theFont->isItalic = (sel & (1 << 0)) != 0;
}
- const TT_Header* headTable = (TT_Header*)getFontTable(font, ft_sfnt_head);
+ const TT_Header* headTable = (TT_Header*) fontInst->getFontTable(ft_sfnt_head);
if (headTable != NULL) {
uint16_t ms = headTable->Mac_Style;
if ((ms & (1 << 0)) != 0)
@@ -540,7 +541,7 @@ XeTeXFontMgr::getOpSizeRecAndStyleFlags(Font* theFont)
theFont->isItalic = true;
}
- const TT_Postscript* postTable = (const TT_Postscript*)getFontTable(font, ft_sfnt_post);
+ const TT_Postscript* postTable = (const TT_Postscript*) fontInst->getFontTable(ft_sfnt_post);
if (postTable != NULL) {
theFont->slant = (int)(1000 * (tan(Fix2D(-postTable->italicAngle) * M_PI / 180.0)));
}
diff --git a/Build/source/texk/web2c/xetexdir/XeTeXLayoutInterface.cpp b/Build/source/texk/web2c/xetexdir/XeTeXLayoutInterface.cpp
index 7744eead793..0788ee19d3e 100644
--- a/Build/source/texk/web2c/xetexdir/XeTeXLayoutInterface.cpp
+++ b/Build/source/texk/web2c/xetexdir/XeTeXLayoutInterface.cpp
@@ -192,12 +192,6 @@ getFontTablePtr(XeTeXFont font, uint32_t tableTag)
return const_cast<void*>(((XeTeXFontInst*)font)->getFontTable(tableTag));
}
-void*
-getFontTable(XeTeXFont font, FT_Sfnt_Tag tableTag)
-{
- return const_cast<void*>(((XeTeXFontInst*)font)->getFontTable(tableTag));
-}
-
Fixed
getSlant(XeTeXFont font)
{
@@ -205,145 +199,171 @@ getSlant(XeTeXFont font)
return D2Fix(tan(-italAngle * M_PI / 180.0));
}
-static uint32_t
-getLargerScriptListTable(XeTeXFont font, hb_tag_t** scriptList, hb_tag_t* tableTag)
+static unsigned int
+getLargerScriptListTable(XeTeXFont font, hb_tag_t** scriptList)
{
+ unsigned int rval = 0;
+
hb_face_t* face = hb_font_get_face(((XeTeXFontInst*)font)->getHbFont());
hb_tag_t* scriptListSub = NULL;
hb_tag_t* scriptListPos = NULL;
- uint32_t scriptCountSub = hb_ot_layout_table_get_script_tags(face, HB_OT_TAG_GSUB, 0, NULL, NULL);
+ unsigned int scriptCountSub = hb_ot_layout_table_get_script_tags(face, HB_OT_TAG_GSUB, 0, NULL, NULL);
scriptListSub = (hb_tag_t*) xmalloc(scriptCountSub * sizeof(hb_tag_t*));
hb_ot_layout_table_get_script_tags(face, HB_OT_TAG_GSUB, 0, &scriptCountSub, scriptListSub);
- uint32_t scriptCountPos = hb_ot_layout_table_get_script_tags(face, HB_OT_TAG_GPOS, 0, NULL, NULL);
+ unsigned int scriptCountPos = hb_ot_layout_table_get_script_tags(face, HB_OT_TAG_GPOS, 0, NULL, NULL);
scriptListPos = (hb_tag_t*) xmalloc(scriptCountPos * sizeof(hb_tag_t*));
hb_ot_layout_table_get_script_tags(face, HB_OT_TAG_GSUB, 0, &scriptCountPos, scriptListPos);
if (scriptCountSub > scriptCountPos) {
if (scriptList != NULL)
*scriptList = scriptListSub;
- if (tableTag != NULL)
- *tableTag = HB_OT_TAG_GSUB;
- return scriptCountSub;
+ rval = scriptCountSub;
} else {
if (scriptList != NULL)
*scriptList = scriptListPos;
- if (tableTag != NULL)
- *tableTag = HB_OT_TAG_GPOS;
- return scriptCountPos;
+ rval = scriptCountPos;
}
+
+ return rval;
}
-uint32_t
+unsigned int
countScripts(XeTeXFont font)
{
- return getLargerScriptListTable(font, NULL, NULL);
+ return getLargerScriptListTable(font, NULL);
}
-uint32_t
-getIndScript(XeTeXFont font, uint32_t index)
+hb_tag_t
+getIndScript(XeTeXFont font, unsigned int index)
{
- hb_tag_t* scriptList;
+ hb_tag_t rval = 0;
- uint32_t scriptCount = getLargerScriptListTable(font, &scriptList, NULL);
- if (scriptList == NULL)
- return 0;
+ hb_tag_t* scriptList;
- if (index < scriptCount)
- return scriptList[index];
+ unsigned int scriptCount = getLargerScriptListTable(font, &scriptList);
+ if (scriptList != NULL) {
+ if (index < scriptCount)
+ rval = scriptList[index];
+ }
- return 0;
+ return rval;
}
-uint32_t
-countScriptLanguages(XeTeXFont font, uint32_t script)
+unsigned int
+countLanguages(XeTeXFont font, hb_tag_t script)
{
+ unsigned int rval = 0;
+
hb_face_t* face = hb_font_get_face(((XeTeXFontInst*)font)->getHbFont());
hb_tag_t* scriptList;
- hb_tag_t tableTag;
- uint32_t scriptCount = getLargerScriptListTable(font, &scriptList, &tableTag);
- if (scriptList == NULL)
- return 0;
-
- for (int i = 0; i < scriptCount; i++) {
- if (scriptList[i] == script) {
- return hb_ot_layout_script_get_language_tags (face, tableTag, i, 0, NULL, NULL);
+ unsigned int scriptCount = getLargerScriptListTable(font, &scriptList);
+ if (scriptList != NULL) {
+ for (int i = 0; i < scriptCount; i++) {
+ if (scriptList[i] == script) {
+ rval += hb_ot_layout_script_get_language_tags (face, HB_OT_TAG_GSUB, i, 0, NULL, NULL);
+ rval += hb_ot_layout_script_get_language_tags (face, HB_OT_TAG_GPOS, i, 0, NULL, NULL);
+ break;
+ }
}
}
- return 0;
+
+ return rval;
}
-uint32_t
-getIndScriptLanguage(XeTeXFont font, uint32_t script, uint32_t index)
+hb_tag_t
+getIndLanguage(XeTeXFont font, hb_tag_t script, unsigned int index)
{
+ hb_tag_t rval = 0;
+
hb_face_t* face = hb_font_get_face(((XeTeXFontInst*)font)->getHbFont());
hb_tag_t* scriptList;
- hb_tag_t tableTag;
- uint32_t scriptCount = getLargerScriptListTable(font, &scriptList, &tableTag);
- if (scriptList == NULL)
- return 0;
+ unsigned int scriptCount = getLargerScriptListTable(font, &scriptList);
+ if (scriptList != NULL) {
+ for (int i = 0; i < scriptCount; i++) {
+ if (scriptList[i] == script) {
+ unsigned int langCount;
+ hb_tag_t* langList;
- for (int i = 0; i < scriptCount; i++) {
- if (scriptList[i] == script) {
- uint32_t langCount = hb_ot_layout_script_get_language_tags(face, tableTag, i, 0, NULL, NULL);
- hb_tag_t* langList = (hb_tag_t*) xmalloc(langCount * sizeof(hb_tag_t*));
- hb_ot_layout_script_get_language_tags(face, tableTag, i, 0, &langCount, langList);
+ langCount = hb_ot_layout_script_get_language_tags(face, HB_OT_TAG_GSUB, i, 0, NULL, NULL);
+ langList = (hb_tag_t*) xcalloc(langCount, sizeof(hb_tag_t*));
+ hb_ot_layout_script_get_language_tags(face, HB_OT_TAG_GSUB, i, 0, &langCount, langList);
+
+ if (index < langCount) {
+ rval = langList[index];
+ break;
+ }
- if (index < langCount)
- return langList[index];
+ free(langList);
- return 0;
+ langCount = hb_ot_layout_script_get_language_tags(face, HB_OT_TAG_GPOS, i, 0, NULL, NULL);
+ langList = (hb_tag_t*) xcalloc(langCount, sizeof(hb_tag_t*));
+ hb_ot_layout_script_get_language_tags(face, HB_OT_TAG_GPOS, i, 0, &langCount, langList);
+
+ if (index < langCount) {
+ rval = langList[index];
+ break;
+ }
+
+ free(langList);
+ }
}
}
- return 0;
+
+ return rval;
}
-uint32_t
-countFeatures(XeTeXFont font, uint32_t script, uint32_t language)
+unsigned int
+countFeatures(XeTeXFont font, hb_tag_t script, hb_tag_t language)
{
+ unsigned int rval = 0;
+
hb_face_t* face = hb_font_get_face(((XeTeXFontInst*)font)->getHbFont());
- uint32_t total = 0;
for (int i = 0; i < 2; ++i) {
- uint32_t scriptIndex, langIndex = 0;
+ unsigned int scriptIndex, langIndex = 0;
hb_tag_t tableTag = i == 0 ? HB_OT_TAG_GSUB : HB_OT_TAG_GPOS;
if (hb_ot_layout_table_find_script(face, tableTag, script, &scriptIndex)) {
if (hb_ot_layout_script_find_language(face, tableTag, scriptIndex, language, &langIndex) || language == 0) {
- total += hb_ot_layout_language_get_feature_tags(face, tableTag, scriptIndex, langIndex, 0, NULL, NULL);
+ rval += hb_ot_layout_language_get_feature_tags(face, tableTag, scriptIndex, langIndex, 0, NULL, NULL);
}
}
}
- return total;
+ return rval;
}
-uint32_t
-getIndFeature(XeTeXFont font, uint32_t script, uint32_t language, uint32_t index)
+hb_tag_t
+getIndFeature(XeTeXFont font, hb_tag_t script, hb_tag_t language, unsigned int index)
{
+ hb_tag_t rval = 0;
+
hb_face_t* face = hb_font_get_face(((XeTeXFontInst*)font)->getHbFont());
for (int i = 0; i < 2; ++i) {
- uint32_t scriptIndex, langIndex = 0;
+ unsigned int scriptIndex, langIndex = 0;
hb_tag_t tableTag = i == 0 ? HB_OT_TAG_GSUB : HB_OT_TAG_GPOS;
if (hb_ot_layout_table_find_script(face, tableTag, script, &scriptIndex)) {
if (hb_ot_layout_script_find_language(face, tableTag, scriptIndex, language, &langIndex) || language == 0) {
- uint32_t featCount = hb_ot_layout_language_get_feature_tags(face, tableTag, scriptIndex, langIndex, 0, NULL, NULL);
+ unsigned int featCount = hb_ot_layout_language_get_feature_tags(face, tableTag, scriptIndex, langIndex, 0, NULL, NULL);
hb_tag_t* featList = (hb_tag_t*) xmalloc(featCount * sizeof(hb_tag_t*));
hb_ot_layout_language_get_feature_tags(face, tableTag, scriptIndex, langIndex, 0, &featCount, featList);
- if (index < featCount)
- return featList[index];
+ if (index < featCount) {
+ rval = featList[index];
+ break;
+ }
index -= featCount;
}
}
}
- return 0;
+ return rval;
}
uint32_t
@@ -565,7 +585,7 @@ getGlyphWidth(XeTeXFont font, uint32_t gid)
return ((XeTeXFontInst*)font)->getGlyphWidth(gid);
}
-uint32_t
+unsigned int
countGlyphs(XeTeXFont font)
{
return ((XeTeXFontInst*)font)->getNumGlyphs();
diff --git a/Build/source/texk/web2c/xetexdir/XeTeXLayoutInterface.h b/Build/source/texk/web2c/xetexdir/XeTeXLayoutInterface.h
index 05240e69efc..4b2b8e2dde3 100644
--- a/Build/source/texk/web2c/xetexdir/XeTeXLayoutInterface.h
+++ b/Build/source/texk/web2c/xetexdir/XeTeXLayoutInterface.h
@@ -88,18 +88,19 @@ double getDesignSize(XeTeXFont font);
void deleteFont(XeTeXFont font);
void* getFontTablePtr(XeTeXFont font, uint32_t tableTag);
-void* getFontTable(XeTeXFont font, FT_Sfnt_Tag tableTag);
Fixed getSlant(XeTeXFont font);
-uint32_t countScripts(XeTeXFont font);
-uint32_t getIndScript(XeTeXFont font, uint32_t index);
-uint32_t countScriptLanguages(XeTeXFont font, uint32_t script);
-uint32_t getIndScriptLanguage(XeTeXFont font, uint32_t script, uint32_t index);
-uint32_t countFeatures(XeTeXFont font, uint32_t script, uint32_t language);
-uint32_t getIndFeature(XeTeXFont font, uint32_t script, uint32_t language, uint32_t index);
+unsigned int countScripts(XeTeXFont font);
+unsigned int countLanguages(XeTeXFont font, hb_tag_t script);
+unsigned int countFeatures(XeTeXFont font, hb_tag_t script, hb_tag_t language);
+unsigned int countGlyphs(XeTeXFont font);
+
+hb_tag_t getIndScript(XeTeXFont font, unsigned int index);
+hb_tag_t getIndLanguage(XeTeXFont font, hb_tag_t script, unsigned int index);
+hb_tag_t getIndFeature(XeTeXFont font, hb_tag_t script, hb_tag_t language, unsigned int index);
+
float getGlyphWidth(XeTeXFont font, uint32_t gid);
-uint32_t countGlyphs(XeTeXFont font);
XeTeXLayoutEngine createLayoutEngine(PlatformFontRef fontRef, XeTeXFont font, hb_tag_t script, hb_tag_t language,
hb_feature_t* features, int nFeatures, char **shapers, uint32_t rgbValue,
diff --git a/Build/source/texk/web2c/xetexdir/XeTeX_ext.c b/Build/source/texk/web2c/xetexdir/XeTeX_ext.c
index e5e9ca3bfb8..4a53cdac119 100644
--- a/Build/source/texk/web2c/xetexdir/XeTeX_ext.c
+++ b/Build/source/texk/web2c/xetexdir/XeTeX_ext.c
@@ -1362,7 +1362,7 @@ otfontget1(integer what, void* pEngine, integer param)
XeTeXFont fontInst = getFont(engine);
switch (what) {
case XeTeX_OT_count_languages:
- return countScriptLanguages(fontInst, param);
+ return countLanguages(fontInst, param);
break;
case XeTeX_OT_script_code:
@@ -1391,7 +1391,7 @@ otfontget2(integer what, void* pEngine, integer param1, integer param2)
XeTeXFont fontInst = getFont(engine);
switch (what) {
case XeTeX_OT_language_code:
- return getIndScriptLanguage(fontInst, param1, param2);
+ return getIndLanguage(fontInst, param1, param2);
break;
case XeTeX_OT_count_features:
diff --git a/Build/source/texk/web2c/xetexdir/xetex.web b/Build/source/texk/web2c/xetexdir/xetex.web
index fef28971141..6afd00105e9 100644
--- a/Build/source/texk/web2c/xetexdir/xetex.web
+++ b/Build/source/texk/web2c/xetexdir/xetex.web
@@ -319,7 +319,7 @@ known as `\eTeX'.
@#
@d XeTeX_version=0 { \.{\\XeTeXversion} }
@d XeTeX_revision==".9999" { \.{\\XeTeXrevision} }
-@d XeTeX_version_string=='-0.9999.1' {current \XeTeX\ version}
+@d XeTeX_version_string=='-0.9999.2' {current \XeTeX\ version}
@#
@d XeTeX_banner=='This is XeTeX, Version 3.1415926',eTeX_version_string,XeTeX_version_string
{printed when \XeTeX\ starts}
diff --git a/Build/source/texk/web2c/xetexdir/xetex_version.h b/Build/source/texk/web2c/xetexdir/xetex_version.h
index ba8ab21dd6f..2907ffcfae5 100644
--- a/Build/source/texk/web2c/xetexdir/xetex_version.h
+++ b/Build/source/texk/web2c/xetexdir/xetex_version.h
@@ -1 +1 @@
-#define XETEX_VERSION "0.9999.1"
+#define XETEX_VERSION "0.9999.2"