aboutsummaryrefslogtreecommitdiffstats
path: root/chinese
diff options
context:
space:
mode:
authorijliao <ijliao@FreeBSD.org>2002-04-20 09:16:17 +0800
committerijliao <ijliao@FreeBSD.org>2002-04-20 09:16:17 +0800
commitcf8c6be22e51fe6293f43986bcbbac16dd4a69e6 (patch)
tree03ae7d04b872d637df1df5dd6117f276284f44d5 /chinese
parentebb5a1da64e5fe86c64b89b77af3722f3d72a531 (diff)
downloadfreebsd-ports-gnome-cf8c6be22e51fe6293f43986bcbbac16dd4a69e6.tar.gz
freebsd-ports-gnome-cf8c6be22e51fe6293f43986bcbbac16dd4a69e6.tar.zst
freebsd-ports-gnome-cf8c6be22e51fe6293f43986bcbbac16dd4a69e6.zip
get TTFINFO_FONT_PSNAME
PR: 37246 Submitted by: Statue <statue@softwareliberty.org>
Diffstat (limited to 'chinese')
-rw-r--r--chinese/ttfm/files/patch-ttfinfo.c141
1 files changed, 141 insertions, 0 deletions
diff --git a/chinese/ttfm/files/patch-ttfinfo.c b/chinese/ttfm/files/patch-ttfinfo.c
new file mode 100644
index 000000000000..8c52e5a5eb82
--- /dev/null
+++ b/chinese/ttfm/files/patch-ttfinfo.c
@@ -0,0 +1,141 @@
+--- ttfinfo.c.orig Fri Apr 19 18:30:44 2002
++++ ttfinfo.c Fri Apr 19 18:31:02 2002
+@@ -112,6 +112,7 @@
+ static void usage (const char *name);
+ static const char *get_foundry (const TT_Char orig_code[4]);
+ static const char *get_name (TT_Face face);
++static const char *get_psname (TT_Face face);
+ static void add_mapping (struct xlfdmapping **listhead,
+ char *file_name,
+ const char *foundry_name,
+@@ -684,6 +685,7 @@
+ TT_Face face;
+ TT_Face_Properties properties;
+ const char *font_name;
++ const char *font_psname;
+ const char *foundry_name;
+ const char *weight_name;
+ const char *width_name;
+@@ -722,6 +724,7 @@
+ }
+
+ font_name = get_name (face);
++ font_psname = get_psname (face);
+ foundry_name = get_foundry (properties.os2->achVendID);
+ weight_name = get_weight (path, &properties);
+ width_name = get_width_name (path, &properties);
+@@ -729,6 +732,7 @@
+ /* basic fone information */
+ fprintf(outstream,"TTFINFO_FONT_FILE=\"%s\"\n",path);
+ fprintf(outstream,"TTFINFO_FONT_NAME=\"%s\"\n",font_name);
++ fprintf(outstream,"TTFINFO_FONT_PSNAME=\"%s\"\n",font_psname);
+ fprintf(outstream,"TTFINFO_FOUNDRY_NAME=\"%s\"\n",foundry_name);
+ fprintf(outstream,"TTFINFO_WEIGHT_NAME=\"%s\"\n",weight_name);
+ fprintf(outstream,"TTFINFO_WIDTH=\"%s\"\n",width_name);
+@@ -1206,7 +1210,7 @@
+ function returns as soon as an english name for the font is found,
+ so most of the time one loop is enough; however some fonts have only
+ non-english names in their font faminly entry, so the second loop
+- to try the Postscript name as last ressort
++ to try the Postscript name as last resort
+ */
+ for (k = 0; k < 2; k++) {
+
+@@ -1276,6 +1280,97 @@
+ }
+ }
+ }
++ }
++
++ /* Not found */
++ return "unknown";
++}
++
++/* This get_psname() function is copied from get_name(). I probably should
++ try to merge the two functions somehow, but unfortunately, I do not have
++ the time right now. :-) Anthony Fok <anthony@thizlinux.com>
++*/
++
++const char *
++get_psname (TT_Face face)
++{
++ int i, j, k, n;
++
++ TT_UShort platform;
++ TT_UShort encoding;
++ TT_UShort language;
++ TT_UShort NameId;
++
++ /* get the number of name strings in this font */
++ if ((n = TT_Get_Name_Count (face)) < 0) {
++ return NULL;
++ }
++ /* printf("\nn=%d\n",n); */
++
++ /* for (k = 0; k < 2; k++) { */
++
++ k = 1;
++ /* now look at every entry */
++ for (i = 0; i < n; i++) {
++ TT_Get_Name_ID (face, i, &platform, &encoding, &language, &NameId);
++ /* printf("k=%d, face=%d, i=%d, platform=%d, encoding=%d, lang=%d, Id=%d\n",k ,face, i, platform, encoding, language, NameId); */
++
++ if (NameId == TT_NAME_ID_PS_NAME) {
++
++ /* Try a Macintosh english name */
++ if ((platform == TT_PLATFORM_MACINTOSH) &&
++ (language == TT_MAC_LANGID_ENGLISH))
++ {
++ char* string;
++ TT_UShort string_len;
++ static char name_buffer[257];
++ int name_len;
++ int english=1;
++
++ TT_Get_Name_String (face, i, &string, &string_len);
++ string_len = string_len < 257 ? string_len : 257;
++ name_len = 0;
++
++ for (j = 0; j < string_len; j++) {
++ /* some font names claim to be in english but aren't */
++ if ((string[j] & 0xff) > 0x7f) english=0;
++ name_buffer[name_len++] = string[j];
++ }
++
++ name_buffer[name_len] = '\0';
++ if (english) return name_buffer;
++ }
++ /* Try to find an Apple Unicode or Microsoft English name */
++ if ((platform == TT_PLATFORM_APPLE_UNICODE) ||
++ ((platform == TT_PLATFORM_MICROSOFT) &&
++ ((language & 0x00FF) ==
++ (TT_MS_LANGID_ENGLISH_UNITED_STATES & 0x00FF))) ||
++ (((platform == TT_PLATFORM_MICROSOFT) &&
++ (encoding == TT_MS_ID_UNICODE_CS)) &&
++ (NameId == TT_NAME_ID_PS_NAME)))
++ {
++ /* The following code was inspired from Mark Leisher's */
++ /* ttf2bdf package */
++ char* string;
++ TT_UShort string_len;
++ static char name_buffer[513];
++ int name_len;
++
++ TT_Get_Name_String (face, i, &string, &string_len);
++ string_len = string_len < 512 ? string_len : 512;
++ name_len = 0;
++ /* convert from unicode to ASCII */
++ for (j = 0; j < string_len; j ++) {
++ /* drop the NULL part, dont't use j+=2 to avoid
++ endian problem. */
++ if (string[j] != '\0'){
++ name_buffer[name_len++] = string[j];
++ }
++ }
++ name_buffer[name_len] = '\0';
++ return name_buffer;
++ }
++ }
+ }
+
+ /* Not found */