Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

269 lines
11 KiB

  1. //+-----------------------------------------------------------------------------
  2. //
  3. // make_altfont.cxx
  4. //
  5. // [email protected], June 1998.
  6. //
  7. //
  8. // Compile and run this file to make the tables for src\intl\intlcore\altfont.cxx
  9. //
  10. //------------------------------------------------------------------------------
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #ifndef WCHAR
  14. typedef unsigned short WCHAR;
  15. #endif
  16. #ifndef BOOL
  17. typedef int BOOL;
  18. #endif
  19. inline BOOL InRange( WCHAR chmin, WCHAR ch, WCHAR chmax)
  20. {
  21. return (unsigned)(ch - chmin) <= (unsigned)(chmax - chmin);
  22. }
  23. int StrCmpIC( const WCHAR * s0, const WCHAR * s1 )
  24. {
  25. int ch1, ch2;
  26. do {
  27. ch1 = *s0++;
  28. if (ch1 >= L'A' && ch1 <= L'Z')
  29. ch1 += L'a' - L'A';
  30. ch2 = *s1++;
  31. if (ch2 >= L'A' && ch2 <= L'Z')
  32. ch2 += L'a' - L'A';
  33. } while (ch1 && (ch1 == ch2));
  34. return ch1 - ch2;
  35. }
  36. struct NAMEPAIR
  37. {
  38. WCHAR * pszAName;
  39. WCHAR * pszBName;
  40. };
  41. // NB (cthrash) Data comes from chrispr in Office.
  42. struct NAMEPAIR anpTable[] =
  43. {
  44. { L"\x0041\x0052\x884C\x6977\x9023\x7DBF\x4F53\x0048", L"Arphic Gyokailenmentai Heavy JIS" },
  45. { L"\x0041\x0052\x884C\x6977\x9023\x7DBF\x4F53\x004C", L"Arphic Gyokailenmentai Light JIS" },
  46. { L"\x0041\x0052\x884C\x6977\x66F8\x4F53\x0048", L"Arphic Gyokaisho Heavy JIS" },
  47. { L"\x0041\x0052\x884C\x6977\x66F8\x4F53\x004C", L"Arphic Gyokaisho Light JIS" },
  48. { L"\x0041\x0052\x6977\x66F8\x4F53 \x004D", L"Arphic Kaisho Medium JIS" },
  49. { L"\x0041\x0052\x52D8\x4EAD\x6D41\x0048", L"Arphic Kanteiryu Heavy JIS" },
  50. { L"\x0041\x0052\x53E4\x5370\x4F53\x0042", L"Arphic Koin-Tai Bold JIS" },
  51. { L"\x0041\x0052\x9ED2\x4E38\xFF30\xFF2F\xFF30\x4F53\x0048", L"Arphic Kuro-Maru-POP Heavy JIS" },
  52. { L"\x0041\x0052\x0020\x0050\x884C\x6977\x66F8\x4F53\x0048", L"Arphic PGyokaisho Heavy JIS" },
  53. { L"\x0041\x0052\x0020\x0050\x884C\x6977\x66F8\x4F53\x004C", L"Arphic PGyokaisho Light JIS" },
  54. { L"\x0041\x0052\x0020\x0050\x6977\x66F8\x4F53\x4F53 \x004D", L"Arphic PKaisho Medium JIS" },
  55. { L"\x0041\x0052\x0020\x0050\x52D8\x4EAD\x6D41\x0048", L"Arphic PKanteiryu Heavy JIS" },
  56. { L"\x0041\x0052\x0020\x0050\x53E4\x5370\x4F53\x0042", L"Arphic PKoin-Tai Bold JIS" },
  57. { L"\x0041\x0052\x0020\x0050\x9ED2\x4E38\xFF30\xFF2F\xFF30\x4F53\x0048", L"Arphic PKuro-Maru-POP Heavy JIS" },
  58. { L"\x0041\x0052\x0020\x0050\x30DA\x30F3\x884C\x6977\x66F8\x4F53 \x004C", L"Arphic PPengyokaisho Light JIS" },
  59. { L"\x0041\x0052\x0020\x0050\x30DA\x30F3\x6977\x66F8\x4F53\x004C", L"Arphic PPenkaisho Light JIS" },
  60. { L"\x0041\x0052\x0020\x0050\x96B7\x66F8\x4F53 \x004D", L"Arphic PReisho Medium JIS" },
  61. { L"\x0041\x0052\x0020\x0050\x767D\x4E38\xFF30\xFF2F\xFF30\x4F53\x0048", L"Arphic PSiro-Maru-POP Heavy JIS" },
  62. { L"\x0041\x0052\x30DA\x30F3\x884C\x6977\x66F8\x4F53 \x004C", L"Arphic Pengyokaisho Light JIS" },
  63. { L"\x0041\x0052\x30DA\x30F3\x6977\x66F8\x4F53\x004C", L"Arphic Penkaisho Light JIS" },
  64. { L"\x0041\x0052\x96B7\x66F8\x4F53 \x004D", L"Arphic Reisho Medium JIS" },
  65. { L"\x0041\x0052\x767D\x4E38\xFF30\xFF2F\xFF30\x4F53\x0048", L"Arphic Siro-Maru-POP Heavy JIS" },
  66. { L"\xFF24\xFF26\x7279\x592A\x30B4\x30B7\x30C3\x30AF\x4F53", L"DFGothic-EB" },
  67. { L"\xFF24\xFF26\xFF30\x7279\x592A\x30B4\x30B7\x30C3\x30AF\x4F53", L"DFPGothic-EB" },
  68. { L"\xFF24\xFF26\x0050\x004F\x0050\x4F53", L"DFPOP-SB" },
  69. { L"\xFF24\xFF26\xFF30\x0050\x004F\x0050\x4F53", L"DFPPOP-SB" },
  70. { L"\x0048\x0047\xFF7A\xFF9E\xFF7C\xFF6F\xFF78\x0045", L"HGGothicE" },
  71. { L"\x0048\x0047\xFF7A\xFF9E\xFF7C\xFF6F\xFF78\x004D", L"HGGothicM" },
  72. { L"\x0048\x0047\x884C\x66F8\x4F53", L"HGGyoshotai" },
  73. { L"\x0048\x0047\x6559\x79D1\x66F8\x4F53", L"HGKyokashotai" },
  74. { L"\x0048\x0047\x660E\x671D\x0042", L"HGMinchoB" },
  75. { L"\x0048\x0047\x660E\x671D\x0045", L"HGMinchoE" },
  76. { L"\x0048\x0047\x0050\xFF7A\xFF9E\xFF7C\xFF6F\xFF78\x0045", L"HGPGothicE" },
  77. { L"\x0048\x0047\x0050\xFF7A\xFF9E\xFF7C\xFF6F\xFF78\x004D", L"HGPGothicM" },
  78. { L"\x0048\x0047\x0050\x884C\x66F8\x4F53", L"HGPGyoshotai" },
  79. { L"\x0048\x0047\x0050\x6559\x79D1\x66F8\x4F53", L"HGPKyokashotai" },
  80. { L"\x0048\x0047\x0050\x660E\x671D\x0042", L"HGPMinchoB" },
  81. { L"\x0048\x0047\x0050\x660E\x671D\x0045", L"HGPMinchoE" },
  82. { L"\x0048\x0047\x0050\x5275\x82F1\x89D2\xFF7A\xFF9E\xFF7C\xFF6F\xFF78\x0055\x0042", L"HGPSoeiKakugothicUB" },
  83. { L"\x0048\x0047\x0050\x5275\x82F1\x89D2\xFF8E\xFF9F\xFF6F\xFF8C\xFF9F\x4F53", L"HGPSoeiKakupoptai" },
  84. { L"\x0048\x0047\x0050\x5275\x82F1\xFF8C\xFF9F\xFF9A\xFF7E\xFF9E\xFF9D\xFF7D\x0045\x0042", L"HGPSoeiPresenceEB" },
  85. { L"\x0048\x0047\x0053\xFF7A\xFF9E\xFF7C\xFF6F\xFF78\x0045", L"HGSGothicE" },
  86. { L"\x0048\x0047\x0053\xFF7A\xFF9E\xFF7C\xFF6F\xFF78\x004D", L"HGSGothicM" },
  87. { L"\x0048\x0047\x0053\x884C\x66F8\x4F53", L"HGSGyoshotai" },
  88. { L"\x0048\x0047\x0053\x6559\x79D1\x66F8\x4F53", L"HGSKyokashotai" },
  89. { L"\x0048\x0047\x0053\x660E\x671D\x0042", L"HGSMinchoB" },
  90. { L"\x0048\x0047\x0053\x660E\x671D\x0045", L"HGSMinchoE" },
  91. { L"\x0048\x0047\x0053\x5275\x82F1\x89D2\xFF7A\xFF9E\xFF7C\xFF6F\xFF78\x0055\x0042", L"HGSSoeiKakugothicUB" },
  92. { L"\x0048\x0047\x0053\x5275\x82F1\x89D2\xFF8E\xFF9F\xFF6F\xFF8C\xFF9F\x4F53", L"HGSSoeiKakupoptai" },
  93. { L"\x0048\x0047\x0053\x5275\x82F1\xFF8C\xFF9F\xFF9A\xFF7E\xFF9E\xFF9D\xFF7D\x0045\x0042", L"HGSSoeiPresenceEB" },
  94. { L"\x0048\x0047\x5275\x82F1\x89D2\xFF7A\xFF9E\xFF7C\xFF6F\xFF78\x0055\x0042", L"HGSoeiKakugothicUB" },
  95. { L"\x0048\x0047\x5275\x82F1\x89D2\xFF8E\xFF9F\xFF6F\xFF8C\xFF9F\x4F53", L"HGSoeiKakupoptai" },
  96. { L"\x0048\x0047\x5275\x82F1\xFF8C\xFF9F\xFF9A\xFF7E\xFF9E\xFF9D\xFF7D\x0045\x0042", L"HGSoeiPresenceEB" },
  97. { L"\xFF2D\xFF33\x0020\x30B4\x30B7\x30C3\x30AF", L"MS Gothic" },
  98. { L"\xFF2D\xFF33\x0020\x660E\x671D", L"MS Mincho" },
  99. { L"\xFF2D\xFF33\x0020\xFF30\x30B4\x30B7\x30C3\x30AF", L"MS PGothic" },
  100. { L"\xFF2D\xFF33\x0020\xFF30\x660E\x671D", L"MS PMincho" },
  101. { L"\x4EFF\x5B8B\x005F\x0047\x0042\x0047\x0032\x0033\x0031\x0032", L"FangSong_GB2312" },
  102. { L"\x6977\x4F53\x005F\x0047\x0042\x0047\x0032\x0033\x0031\x0032", L"KaiTi_GB2312" },
  103. { L"\x96B6\x4E66", L"LiSu" },
  104. { L"\x65B0\x5B8B\x4F53", L"NSimSun" },
  105. { L"\x9ED1\x4F53", L"SimHei" },
  106. { L"\x5B8B\x4F53", L"SimSun" },
  107. { L"\x5E7C\x5706", L"YouYuan" },
  108. { L"\x534e\x6587\x5b8b\x4f53", L"STSong" },
  109. { L"\x534e\x6587\x4e2d\x5b8b", L"STZhongsong" },
  110. { L"\x534e\x6587\x6977\x4f53", L"STKaii" },
  111. { L"\x534e\x6587\x4eff\x5b8b", L"STFangsong" },
  112. { L"\x534e\x6587\x7ec6\x9ed1", L"STXihei" },
  113. { L"\x534e\x6587\x96b6\x4e66", L"STLiti" },
  114. { L"\x534e\x6587\x884c\x6977", L"STXingkai" },
  115. { L"\x534e\x6587\x65b0\x9b4f", L"STXinwei" },
  116. { L"\x534e\x6587\x7425\x73c0", L"STHupo" },
  117. { L"\x534e\x6587\x5f69\x4e91", L"STCaiyun" },
  118. { L"\x65b9\x6b63\x59da\x4f53\x7b80\x4f53", L"FZYaoTi" },
  119. { L"\x65b9\x6b63\x8212\x4f53\x7b80\x4f53", L"FZShuTi" },
  120. { L"\xD734\xBA3C\xC544\xBBF8\xCCB4", L"Ami R" },
  121. { L"\xBC14\xD0D5", L"Batang" },
  122. { L"\xBC14\xD0D5\xCCB4", L"BatangChe" },
  123. { L"\xB3CB\xC6C0", L"Dotum" },
  124. { L"\xB3CB\xC6C0\xCCB4", L"DotumChe" },
  125. { L"\xD734\xBA3C\xC5D1\xC2A4\xD3EC", L"Expo M" },
  126. { L"\xAD74\xB9BC", L"Gulim" },
  127. { L"\xAD74\xB9BC\xCCB4", L"GulimChe" },
  128. { L"\xAD81\xC11C", L"Gungsuh" },
  129. { L"\xAD81\xC11C\xCCB4", L"GungsuhChe" },
  130. { L"\x0048\x0059\xBAA9\xAC01\xD30C\xC784\x0042", L"HYPMokGak-Bold" },
  131. { L"\x0048\x0059\xC595\xC740\xC0D8\xBB3C\x004D", L"HYShortSamul-Medium" },
  132. { L"\x0048\x0059\xC5FD\xC11C\x004D", L"HYPost-Medium" },
  133. { L"\xD734\xBA3C\xB465\xADFC\xD5E4\xB4DC\xB77C\xC778", L"Headline R" },
  134. { L"\xD734\xBA3C\xBAA8\xC74C\x0054", L"MoeumT R" },
  135. { L"\xD734\xBA3C\xD3B8\xC9C0\xCCB4", L"Pyunji R" },
  136. { L"\x0048\x0059\xACAC\xACE0\xB515", L"HYGothic-Extra" },
  137. { L"\x0048\x0059\xC2E0\xBB38\xBA85\xC870", L"HYSinMun-MyeongJo" },
  138. { L"\x0048\x0059\xACAC\xBA85\xC870", L"HYMyeongJo-Extra" },
  139. { L"\x0048\x0059\xD0C0\xC790\x004D", L"HYTaJa-Medium" },
  140. { L"\xD734\xBA3C\xAC01\xC9C4\xD5E4\xB4DC\xB77C\xC778", L"Headline Sans R" },
  141. { L"\xD734\xBA3C\xC61B\xCCB4", L"Yet R" },
  142. { L"\x6A19\x6977\x9AD4", L"DFKai-SB" },
  143. { L"\x83EF\x5EB7\x5137\x7C97\x9ED1", L"DFLiHeiBold" },
  144. { L"\x83EF\x5EB7\x65B0\x5137\x7C97\x9ED1", L"DFLiHeiBold(P)" },
  145. { L"\x7D30\x660E\x9AD4", L"MingLiU" },
  146. { L"\x7d30\x660e\x9ad4_HKSCS", L"MingLiU_HKSCS" },
  147. { L"\x65B0\x7D30\x660E\x9AD4", L"PMingLiU" },
  148. { L"\xff28\xff27\xff7a\xff9e\xff7c\xff6f\xff78\x0045-PRO", L"\xff28\xff27\x30b4\x30b7\x30c3\x30af\x0045-PRO" } // HACK (cthrash) For Outlook/OE (see IE5 #76530)
  149. };
  150. #define NUM sizeof(anpTable) / sizeof(WCHAR *)
  151. void OutString( FILE *f, WCHAR * pch )
  152. {
  153. int fLastWasHex = 0;
  154. printf("L\"");
  155. while (*pch)
  156. {
  157. WCHAR c = *pch++;
  158. if ( c < 128
  159. && ( !fLastWasHex
  160. || ( !InRange(L'0', c, L'9')
  161. && !InRange(L'a', c, L'f')
  162. && !InRange(L'A', c, L'F'))))
  163. {
  164. fputc(c,f);
  165. fLastWasHex = 0;
  166. }
  167. else
  168. {
  169. fprintf(f,"\\x%04x", c);
  170. fLastWasHex = 1;
  171. }
  172. }
  173. fprintf(f, "\"");
  174. }
  175. struct NAMEINDEX
  176. {
  177. WCHAR * pchName;
  178. int nIndex;
  179. };
  180. struct NAMEINDEX *aniTable;
  181. void MakeTable()
  182. {
  183. int i;
  184. struct NAMEINDEX * pni;
  185. aniTable = (struct NAMEINDEX *)malloc( NUM * sizeof(struct NAMEINDEX ));
  186. pni = aniTable;
  187. for (i=0; i<NUM/2; i++)
  188. {
  189. pni->pchName = anpTable[i].pszAName;
  190. pni->nIndex = i;
  191. pni++;
  192. pni->pchName = anpTable[i].pszBName;
  193. pni->nIndex = NUM + i;
  194. pni++;
  195. }
  196. }
  197. int __cdecl cmpfunc( const void *v0, const void *v1)
  198. {
  199. return StrCmpIC( ((struct NAMEINDEX *)v0)->pchName,
  200. ((struct NAMEINDEX *)v1)->pchName );
  201. }
  202. void main(void)
  203. {
  204. const int c = NUM;
  205. int i;
  206. MakeTable();
  207. qsort( aniTable, c, sizeof(struct NAMEINDEX), cmpfunc );
  208. for (i=0; i<c; i++)
  209. {
  210. printf("const TCHAR g_pszAltFontName%03d[] = ", i);
  211. OutString(stdout, aniTable[i].pchName);
  212. printf(";\n");
  213. }
  214. printf("\nconst TCHAR * const pszAltFontNames[] = \n{\n");
  215. for (i=0; i<c; i++)
  216. {
  217. printf(" g_pszAltFontName%03d,\n", i);
  218. }
  219. printf("};\n");
  220. printf("\nconst TCHAR * const pszAltFontNamesAlt[] = \n{\n");
  221. for (i=0; i<c; i++)
  222. {
  223. struct NAMEINDEX ni;
  224. struct NAMEINDEX *pni;
  225. ni.pchName = aniTable[i].nIndex >= NUM
  226. ? anpTable[aniTable[i].nIndex-NUM].pszAName
  227. : anpTable[aniTable[i].nIndex].pszBName;
  228. pni = (struct NAMEINDEX *)bsearch( &ni,
  229. aniTable,
  230. c,
  231. sizeof(struct NAMEINDEX),
  232. cmpfunc);
  233. printf(" g_pszAltFontName%03d,\n", pni - aniTable);
  234. }
  235. printf("};\n");
  236. }