1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102 |
- /*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
- /* $XConsortium: Font.c /main/11 1996/04/13 11:54:17 ageorge $ */
- /************************************<+>*************************************
- ****************************************************************************
- **
- ** (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 Hewlett-Packard Company
- **
- ** (c) Copyright 1993, 1994 Hewlett-Packard Company
- ** (c) Copyright 1993, 1994 International Business Machines Corp.
- ** (c) Copyright 1993, 1994 Sun Microsystems, Inc.
- ** (c) Copyright 1993, 1994 Novell, Inc.
- **
- ****************************************************************************
- ************************************<+>*************************************/
- /*
- * system includes
- */
- #include <stdlib.h>
- #include <X11/Xlib.h>
- #include <X11/Xlibint.h>
- #include <X11/Xresource.h>
- #include <Xm/Xm.h>
- /*
- * private includes
- */
- #include "DisplayAreaP.h"
- #include "FontI.h"
- #include "Lock.h"
- /*
- * private core engine
- */
- #include "StringFuncsI.h"
- #ifdef NLS16
- #endif
- /******** Private Function Declarations ********/
- /******** End Public Function Declarations ********/
- /******************************************************************************
- *
- * Private variables and defines.
- *
- *****************************************************************************/
- static const char *FontResources[] =
- {
- /*! The serif proportional family */
- /*! medium upright */
- "*p.6.roman.medium.serif.*.ISO-8859-1: -dt-application-medium-r-normal-serif-*-80-*-*-p-*-iso8859-1",
- "*p.8.roman.medium.serif.*.ISO-8859-1: -dt-application-medium-r-normal-serif-*-100-*-*-p-*-iso8859-1",
- "*p.10.roman.medium.serif.*.ISO-8859-1: -dt-application-medium-r-normal-serif-*-120-*-*-p-*-iso8859-1",
- "*p.12.roman.medium.serif.*.ISO-8859-1: -dt-application-medium-r-normal-serif-*-140-*-*-p-*-iso8859-1",
- "*p.14.roman.medium.serif.*.ISO-8859-1: -dt-application-medium-r-normal-serif-*-180-*-*-p-*-iso8859-1",
- /*! bold upright */
- "*p.6.roman.bold.serif.*.ISO-8859-1: -dt-application-bold-r-normal-serif-*-80-*-*-p-*-iso8859-1",
- "*p.8.roman.bold.serif.*.ISO-8859-1: -dt-application-bold-r-normal-serif-*-100-*-*-p-*-iso8859-1",
- "*p.10.roman.bold.serif.*.ISO-8859-1: -dt-application-bold-r-normal-serif-*-120-*-*-p-*-iso8859-1",
- "*p.12.roman.bold.serif.*.ISO-8859-1: -dt-application-bold-r-normal-serif-*-140-*-*-p-*-iso8859-1",
- "*p.14.roman.bold.serif.*.ISO-8859-1: -dt-application-bold-r-normal-serif-*-180-*-*-p-*-iso8859-1",
- /*! medium italic */
- "*p.6.italic.medium.serif.*.ISO-8859-1: -dt-application-medium-i-normal-serif-*-80-*-*-p-*-iso8859-1",
- "*p.8.italic.medium.serif.*.ISO-8859-1: -dt-application-medium-i-normal-serif-*-100-*-*-p-*-iso8859-1",
- "*p.10.italic.medium.serif.*.ISO-8859-1: -dt-application-medium-i-normal-serif-*-120-*-*-p-*-iso8859-1",
- "*p.12.italic.medium.serif.*.ISO-8859-1: -dt-application-medium-i-normal-serif-*-140-*-*-p-*-iso8859-1",
- "*p.14.italic.medium.serif.*.ISO-8859-1: -dt-application-medium-i-normal-serif-*-180-*-*-p-*-iso8859-1",
- /*! bold italic */
- "*p.6.italic.bold.serif.*.ISO-8859-1: -dt-application-bold-i-normal-serif-*-80-*-*-p-*-iso8859-1",
- "*p.8.italic.bold.serif.*.ISO-8859-1: -dt-application-bold-i-normal-serif-*-100-*-*-p-*-iso8859-1",
- "*p.10.italic.bold.serif.*.ISO-8859-1: -dt-application-bold-i-normal-serif-*-120-*-*-p-*-iso8859-1",
- "*p.12.italic.bold.serif.*.ISO-8859-1: -dt-application-bold-i-normal-serif-*-140-*-*-p-*-iso8859-1",
- "*p.14.italic.bold.serif.*.ISO-8859-1: -dt-application-bold-i-normal-serif-*-180-*-*-p-*-iso8859-1",
- /*! The sans serif proportional family */
- /*! medium upright */
- "*p.6.roman.medium.sans_serif.*.ISO-8859-1: -dt-application-medium-r-normal-sans-*-80-*-*-p-*-iso8859-1",
- "*p.8.roman.medium.sans_serif.*.ISO-8859-1: -dt-application-medium-r-normal-sans-*-100-*-*-p-*-iso8859-1",
- "*p.10.roman.medium.sans_serif.*.ISO-8859-1: -dt-application-medium-r-normal-sans-*-120-*-*-p-*-iso8859-1",
- "*p.12.roman.medium.sans_serif.*.ISO-8859-1: -dt-application-medium-r-normal-sans-*-140-*-*-p-*-iso8859-1",
- "*p.14.roman.medium.sans_serif.*.ISO-8859-1: -dt-application-medium-r-normal-sans-*-180-*-*-p-*-iso8859-1",
- /*!bold upright */
- "*p.6.roman.bold.sans_serif.*.ISO-8859-1: -dt-application-bold-r-normal-sans-*-80-*-*-p-*-iso8859-1",
- "*p.8.roman.bold.sans_serif.*.ISO-8859-1: -dt-application-bold-r-normal-sans-*-100-*-*-p-*-iso8859-1",
- "*p.10.roman.bold.sans_serif.*.ISO-8859-1: -dt-application-bold-r-normal-sans-*-120-*-*-p-*-iso8859-1",
- "*p.12.roman.bold.sans_serif.*.ISO-8859-1: -dt-application-bold-r-normal-sans-*-140-*-*-p-*-iso8859-1",
- "*p.14.roman.bold.sans_serif.*.ISO-8859-1: -dt-application-bold-r-normal-sans-*-180-*-*-p-*-iso8859-1",
- /*! medium italic */
- "*p.6.italic.medium.sans_serif.*.ISO-8859-1: -dt-application-medium-i-normal-sans-*-80-*-*-p-*-iso8859-1",
- "*p.8.italic.medium.sans_serif.*.ISO-8859-1: -dt-application-medium-i-normal-sans-*-100-*-*-p-*-iso8859-1",
- "*p.10.italic.medium.sans_serif.*.ISO-8859-1: -dt-application-medium-i-normal-sans-*-120-*-*-p-*-iso8859-1",
- "*p.12.italic.medium.sans_serif.*.ISO-8859-1: -dt-application-medium-i-normal-sans-*-140-*-*-p-*-iso8859-1",
- "*p.14.italic.medium.sans_serif.*.ISO-8859-1: -dt-application-medium-i-normal-sans-*-180-*-*-p-*-iso8859-1",
- /*! bold italic */
- "*p.6.italic.bold.sans_serif.*.ISO-8859-1: -dt-application-bold-i-normal-sans-*-80-*-*-p-*-iso8859-1",
- "*p.8.italic.bold.sans_serif.*.ISO-8859-1: -dt-application-bold-i-normal-sans-*-100-*-*-p-*-iso8859-1",
- "*p.10.italic.bold.sans_serif.*.ISO-8859-1: -dt-application-bold-i-normal-sans-*-120-*-*-p-*-iso8859-1",
- "*p.12.italic.bold.sans_serif.*.ISO-8859-1: -dt-application-bold-i-normal-sans-*-140-*-*-p-*-iso8859-1",
- "*p.14.italic.bold.sans_serif.*.ISO-8859-1: -dt-application-bold-i-normal-sans-*-180-*-*-p-*-iso8859-1",
- /*! The monospace family - lump serif & sans serif together */
- /*! medium upright */
- "*m.6.roman.medium.*.*.ISO-8859-1: -dt-application-medium-r-normal-*-*-80-*-*-m-*-iso8859-1",
- "*m.8.roman.medium.*.*.ISO-8859-1: -dt-application-medium-r-normal-*-*-100-*-*-m-*-iso8859-1",
- "*m.10.roman.medium.*.*.ISO-8859-1: -dt-application-medium-r-normal-*-*-120-*-*-m-*-iso8859-1",
- "*m.12.roman.medium.*.*.ISO-8859-1: -dt-application-medium-r-normal-*-*-140-*-*-m-*-iso8859-1",
- "*m.14.roman.medium.*.*.ISO-8859-1: -dt-application-medium-r-normal-*-*-180-*-*-m-*-iso8859-1",
- /*! bold upright */
- "*m.6.roman.bold.*.*.ISO-8859-1: -dt-application-bold-r-normal-*-*-80-*-*-m-*-iso8859-1",
- "*m.8.roman.bold.*.*.ISO-8859-1: -dt-application-bold-r-normal-*-*-100-*-*-m-*-iso8859-1",
- "*m.10.roman.bold.*.*.ISO-8859-1: -dt-application-bold-r-normal-*-*-120-*-*-m-*-iso8859-1",
- "*m.12.roman.bold.*.*.ISO-8859-1: -dt-application-bold-r-normal-*-*-140-*-*-m-*-iso8859-1",
- "*m.14.roman.bold.*.*.ISO-8859-1: -dt-application-bold-r-normal-*-*-180-*-*-m-*-iso8859-1",
- /*! medium italic */
- "*m.6.italic.medium.*.*.ISO-8859-1: -dt-application-medium-i-normal-*-*-80-*-*-m-*-iso8859-1",
- "*m.8.italic.medium.*.*.ISO-8859-1: -dt-application-medium-i-normal-*-*-100-*-*-m-*-iso8859-1",
- "*m.10.italic.medium.*.*.ISO-8859-1: -dt-application-medium-i-normal-*-*-120-*-*-m-*-iso8859-1",
- "*m.12.italic.medium.*.*.ISO-8859-1: -dt-application-medium-i-normal-*-*-140-*-*-m-*-iso8859-1",
- "*m.14.italic.medium.*.*.ISO-8859-1: -dt-application-medium-i-normal-*-*-180-*-*-m-*-iso8859-1",
- /*! bold italic */
- "*m.6.italic.bold.*.*.ISO-8859-1: -dt-application-bold-i-normal-*-*-80-*-*-m-*-iso8859-1",
- "*m.8.italic.bold.*.*.ISO-8859-1: -dt-application-bold-i-normal-*-*-100-*-*-m-*-iso8859-1",
- "*m.10.italic.bold.*.*.ISO-8859-1: -dt-application-bold-i-normal-*-*-120-*-*-m-*-iso8859-1",
- "*m.12.italic.bold.*.*.ISO-8859-1: -dt-application-bold-i-normal-*-*-140-*-*-m-*-iso8859-1",
- "*m.14.italic.bold.*.*.ISO-8859-1: -dt-application-bold-i-normal-*-*-180-*-*-m-*-iso8859-1",
- /*! SYMBOL */
- "*6.*.*.*.*.DT-SYMBOL-1: -dt-application-medium-r-normal-*-*-80-*-*-*-*-dtsymbol-1",
- "*8.*.*.*.*.DT-SYMBOL-1: -dt-application-medium-r-normal-*-*-100-*-*-*-*-dtsymbol-1",
- "*10.*.*.*.*.DT-SYMBOL-1: -dt-application-medium-r-normal-*-*-120-*-*-*-*-dtsymbol-1",
- "*12.*.*.*.*.DT-SYMBOL-1: -dt-application-medium-r-normal-*-*-140-*-*-*-*-dtsymbol-1",
- "*14.*.*.*.*.DT-SYMBOL-1: -dt-application-medium-r-normal-*-*-180-*-*-*-*-dtsymbol-1",
- /* for ISO-8859-2 */
- "*.6.*.*.*.*.ISO-8859-2: -dt-interface user-medium-r-normal-xs*-*-*-*-*-*-*-*-*:",
- "*.8.*.*.*.*.ISO-8859-2: -dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*:",
- "*.10.*.*.*.*.ISO-8859-2: -dt-interface user-medium-r-normal-m*-*-*-*-*-*-*-*-*:",
- "*.12.*.*.*.*.ISO-8859-2: -dt-interface user-medium-r-normal-l*-*-*-*-*-*-*-*-*:",
- "*.14.*.*.*.*.ISO-8859-2: -dt-interface user-medium-r-normal-xl*-*-*-*-*-*-*-*-*:",
- /* for ISO-8859-5 */
- "*.6.*.*.*.*.ISO-8859-5: -dt-interface user-medium-r-normal-xs*-*-*-*-*-*-*-*-*:",
- "*.8.*.*.*.*.ISO-8859-5: -dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*:",
- "*.10.*.*.*.*.ISO-8859-5: -dt-interface user-medium-r-normal-m*-*-*-*-*-*-*-*-*:",
- "*.12.*.*.*.*.ISO-8859-5: -dt-interface user-medium-r-normal-l*-*-*-*-*-*-*-*-*:",
- "*.14.*.*.*.*.ISO-8859-5: -dt-interface user-medium-r-normal-xl*-*-*-*-*-*-*-*-*:",
- /* for ISO-8859-6 */
- "*.6.*.*.*.*.ISO-8859-6: -dt-interface user-medium-r-normal-xs*-*-*-*-*-*-*-*-*:",
- "*.8.*.*.*.*.ISO-8859-6: -dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*:",
- "*.10.*.*.*.*.ISO-8859-6: -dt-interface user-medium-r-normal-m*-*-*-*-*-*-*-*-*:",
- "*.12.*.*.*.*.ISO-8859-6: -dt-interface user-medium-r-normal-l*-*-*-*-*-*-*-*-*:",
- "*.14.*.*.*.*.ISO-8859-6: -dt-interface user-medium-r-normal-xl*-*-*-*-*-*-*-*-*:",
- /* for ISO-8859-7 */
- "*.6.*.*.*.*.ISO-8859-7: -dt-interface user-medium-r-normal-xs*-*-*-*-*-*-*-*-*:",
- "*.8.*.*.*.*.ISO-8859-7: -dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*:",
- "*.10.*.*.*.*.ISO-8859-7: -dt-interface user-medium-r-normal-m*-*-*-*-*-*-*-*-*:",
- "*.12.*.*.*.*.ISO-8859-7: -dt-interface user-medium-r-normal-l*-*-*-*-*-*-*-*-*:",
- "*.14.*.*.*.*.ISO-8859-7: -dt-interface user-medium-r-normal-xl*-*-*-*-*-*-*-*-*:",
- /* for ISO-8859-8 */
- "*.6.*.*.*.*.ISO-8859-8: -dt-interface user-medium-r-normal-xs*-*-*-*-*-*-*-*-*:",
- "*.8.*.*.*.*.ISO-8859-8: -dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*:",
- "*.10.*.*.*.*.ISO-8859-8: -dt-interface user-medium-r-normal-m*-*-*-*-*-*-*-*-*:",
- "*.12.*.*.*.*.ISO-8859-8: -dt-interface user-medium-r-normal-l*-*-*-*-*-*-*-*-*:",
- "*.14.*.*.*.*.ISO-8859-8: -dt-interface user-medium-r-normal-xl*-*-*-*-*-*-*-*-*:",
- /* for ISO-8859-9 */
- "*.6.*.*.*.*.ISO-8859-9: -dt-interface user-medium-r-normal-xs*-*-*-*-*-*-*-*-*:",
- "*.8.*.*.*.*.ISO-8859-9: -dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*:",
- "*.10.*.*.*.*.ISO-8859-9: -dt-interface user-medium-r-normal-m*-*-*-*-*-*-*-*-*:",
- "*.12.*.*.*.*.ISO-8859-9: -dt-interface user-medium-r-normal-l*-*-*-*-*-*-*-*-*:",
- "*.14.*.*.*.*.ISO-8859-9: -dt-interface user-medium-r-normal-xl*-*-*-*-*-*-*-*-*:",
- /* for EUC-KR */
- "*.6.*.*.*.*.EUC-KR: -dt-interface user-medium-r-normal-xs*-*-*-*-*-*-*-*-*:",
- "*.8.*.*.*.*.EUC-KR: -dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*:",
- "*.10.*.*.*.*.EUC-KR: -dt-interface user-medium-r-normal-m*-*-*-*-*-*-*-*-*:",
- "*.12.*.*.*.*.EUC-KR: -dt-interface user-medium-r-normal-l*-*-*-*-*-*-*-*-*:",
- "*.14.*.*.*.*.EUC-KR: -dt-interface user-medium-r-normal-xl*-*-*-*-*-*-*-*-*:",
- /* for EUC-JP */
- "*.6.*.*.*.*.EUC-JP: -dt-interface user-medium-r-normal-xs*-*-*-*-*-*-*-*-*:",
- "*.8.*.*.*.*.EUC-JP: -dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*:",
- "*.10.*.*.*.*.EUC-JP: -dt-interface user-medium-r-normal-m*-*-*-*-*-*-*-*-*:",
- "*.12.*.*.*.*.EUC-JP: -dt-interface user-medium-r-normal-l*-*-*-*-*-*-*-*-*:",
- "*.14.*.*.*.*.EUC-JP: -dt-interface user-medium-r-normal-xl*-*-*-*-*-*-*-*-*:",
- /* for EUC-TW */
- "*.6.*.*.*.*.EUC-TW: -dt-interface user-medium-r-normal-xs*-*-*-*-*-*-*-*-*:",
- "*.8.*.*.*.*.EUC-TW: -dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*:",
- "*.10.*.*.*.*.EUC-TW: -dt-interface user-medium-r-normal-m*-*-*-*-*-*-*-*-*:",
- "*.12.*.*.*.*.EUC-TW: -dt-interface user-medium-r-normal-l*-*-*-*-*-*-*-*-*:",
- "*.14.*.*.*.*.EUC-TW: -dt-interface user-medium-r-normal-xl*-*-*-*-*-*-*-*-*:",
- /* for EUC-CN */
- "*.6.*.*.*.*.EUC-CN: -dt-interface user-medium-r-normal-xs*-*-*-*-*-*-*-*-*:",
- "*.8.*.*.*.*.EUC-CN: -dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*:",
- "*.10.*.*.*.*.EUC-CN: -dt-interface user-medium-r-normal-m*-*-*-*-*-*-*-*-*:",
- "*.12.*.*.*.*.EUC-CN: -dt-interface user-medium-r-normal-l*-*-*-*-*-*-*-*-*:",
- "*.14.*.*.*.*.EUC-CN: -dt-interface user-medium-r-normal-xl*-*-*-*-*-*-*-*-*:",
- /* for IBM-437 */
- "*.6.*.*.*.*.IBM-437: -dt-interface user-medium-r-normal-xs*-*-*-*-*-*-*-*-*:",
- "*.8.*.*.*.*.IBM-437: -dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*:",
- "*.10.*.*.*.*.IBM-437: -dt-interface user-medium-r-normal-m*-*-*-*-*-*-*-*-*:",
- "*.12.*.*.*.*.IBM-437: -dt-interface user-medium-r-normal-l*-*-*-*-*-*-*-*-*:",
- "*.14.*.*.*.*.IBM-437: -dt-interface user-medium-r-normal-xl*-*-*-*-*-*-*-*-*:",
- /* for IBM-850 */
- "*.6.*.*.*.*.IBM-850: -dt-interface user-medium-r-normal-xs*-*-*-*-*-*-*-*-*:",
- "*.8.*.*.*.*.IBM-850: -dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*:",
- "*.10.*.*.*.*.IBM-850: -dt-interface user-medium-r-normal-m*-*-*-*-*-*-*-*-*:",
- "*.12.*.*.*.*.IBM-850: -dt-interface user-medium-r-normal-l*-*-*-*-*-*-*-*-*:",
- "*.14.*.*.*.*.IBM-850: -dt-interface user-medium-r-normal-xl*-*-*-*-*-*-*-*-*:",
- /* for IBM-856 */
- "*.6.*.*.*.*.IBM-856: -dt-interface user-medium-r-normal-xs*-*-*-*-*-*-*-*-*:",
- "*.8.*.*.*.*.IBM-856: -dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*:",
- "*.10.*.*.*.*.IBM-856: -dt-interface user-medium-r-normal-m*-*-*-*-*-*-*-*-*:",
- "*.12.*.*.*.*.IBM-856: -dt-interface user-medium-r-normal-l*-*-*-*-*-*-*-*-*:",
- "*.14.*.*.*.*.IBM-856: -dt-interface user-medium-r-normal-xl*-*-*-*-*-*-*-*-*:",
- /* for IBM-932 */
- "*.6.*.*.*.*.IBM-932: -dt-interface user-medium-r-normal-xs*-*-*-*-*-*-*-*-*:",
- "*.8.*.*.*.*.IBM-932: -dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*:",
- "*.10.*.*.*.*.IBM-932: -dt-interface user-medium-r-normal-m*-*-*-*-*-*-*-*-*:",
- "*.12.*.*.*.*.IBM-932: -dt-interface user-medium-r-normal-l*-*-*-*-*-*-*-*-*:",
- "*.14.*.*.*.*.IBM-932: -dt-interface user-medium-r-normal-xl*-*-*-*-*-*-*-*-*:",
- /* for IBM-1046 */
- "*.6.*.*.*.*.IBM-1046: -dt-interface user-medium-r-normal-xs*-*-*-*-*-*-*-*-*:",
- "*.8.*.*.*.*.IBM-1046: -dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*:",
- "*.10.*.*.*.*.IBM-1046: -dt-interface user-medium-r-normal-m*-*-*-*-*-*-*-*-*:",
- "*.12.*.*.*.*.IBM-1046: -dt-interface user-medium-r-normal-l*-*-*-*-*-*-*-*-*:",
- "*.14.*.*.*.*.IBM-1046: -dt-interface user-medium-r-normal-xl*-*-*-*-*-*-*-*-*:",
- /* for UTF-8 */
- "*.6.*.*.*.*.UTF-8: -dt-interface user-medium-r-normal-xs*-*-*-*-*-*-*-*-*:",
- "*.8.*.*.*.*.UTF-8: -dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*:",
- "*.10.*.*.*.*.UTF-8: -dt-interface user-medium-r-normal-m*-*-*-*-*-*-*-*-*:",
- "*.12.*.*.*.*.UTF-8: -dt-interface user-medium-r-normal-l*-*-*-*-*-*-*-*-*:",
- "*.14.*.*.*.*.UTF-8: -dt-interface user-medium-r-normal-xl*-*-*-*-*-*-*-*-*:",
- NULL,
- };
- #define GROW_SIZE 5
- static Boolean QuarksInited = FALSE;
- static XrmQuark StringFontQuark = 0;
- static XrmName DefaultFontQuarks[_DtHelpFontQuarkNumber];
- static XrmName CasualFontQuarks[_DtHelpFontQuarkNumber];
- static XrmBinding FontBindings[_DtHelpFontQuarkNumber] =
- { XrmBindLoosely, XrmBindLoosely, XrmBindLoosely, XrmBindLoosely,
- XrmBindLoosely, XrmBindLoosely, XrmBindLoosely };
- static DtHelpDAFSMetrics DefaultMetrics = { FALSE, { 0, 0 } };
- static DtHelpDAFontInfo DefFontInfo = { NULL, NULL, NULL, NULL, NULL,
- NULL, 0, NULL, 0, 0, 0, 0, 0};
- /******************************************************************************
- *
- * Semi Public variables.
- *
- *****************************************************************************/
- /******************************************************************************
- *
- * Private Functions
- *
- *****************************************************************************/
- /******************************************************************************
- * Function: SaveFontStruct (font_struct)
- *
- *****************************************************************************/
- static int
- SaveFontStruct (
- XFontStruct *font_struct,
- DtHelpDAFontInfo *font_info)
- {
- int fontIndex;
- fontIndex = font_info->struct_cnt++;
- if (font_info->struct_cnt >= font_info->max_structs)
- {
- font_info->max_structs += GROW_SIZE;
- if (font_info->font_structs != NULL)
- font_info->font_structs = (XFontStruct **) realloc (
- ((char *) font_info->font_structs),
- (sizeof (XFontStruct *) * font_info->max_structs));
- else
- font_info->font_structs = (XFontStruct **) malloc (
- sizeof (XFontStruct *) * font_info->max_structs);
- }
- font_info->font_structs[fontIndex] = font_struct;
- return (fontIndex);
- }
- /******************************************************************************
- * Function: SaveFontSet (font_set)
- *
- *****************************************************************************/
- static int
- SaveFontSet (
- XFontSet font_set,
- DtHelpDAFontInfo *font_info)
- {
- int fontIndex = 0;
- fontIndex = font_info->set_cnt++;
- if (font_info->set_cnt >= font_info->max_sets)
- {
- font_info->max_sets += GROW_SIZE;
- if (font_info->font_sets != NULL)
- {
- font_info->font_sets = (XFontSet *) realloc (
- ((char *) font_info->font_sets),
- (sizeof (XFontSet) * font_info->max_sets));
- font_info->fs_metrics = (DtHelpDAFSMetrics *) realloc (
- ((char *) font_info->fs_metrics),
- (sizeof (DtHelpDAFSMetrics) * font_info->max_sets));
- }
- else
- {
- font_info->font_sets = (XFontSet *) malloc (
- sizeof(XFontSet) * font_info->max_sets);
- font_info->fs_metrics = (DtHelpDAFSMetrics *) malloc (
- sizeof (DtHelpDAFSMetrics) * font_info->max_sets);
- }
- }
- font_info->font_sets[fontIndex] = font_set;
- font_info->fs_metrics[fontIndex] = DefaultMetrics;
- /*
- * want the font sets to go from -1 to -n because negative numbers
- * indicate a font set.
- */
- fontIndex++;
- return (-fontIndex);
- }
- /******************************************************************************
- * Function: LoadFont (char *font_string, int *ret_index)
- *
- *****************************************************************************/
- static short
- LoadFont (
- Display *dpy,
- DtHelpDAFontInfo *font_info,
- char *font_string,
- long *ret_index)
- {
- short found = False;
- short colon = False;
- int len;
- char *junk;
- char *strPtr;
- char **missingFontSet = NULL;
- XFontStruct *fontStruct = NULL;
- XFontSet fontSet;
- strPtr = font_string;
- /*
- * if working with one byte environment, do it the fast, cheap way.
- */
- if (MB_CUR_MAX == 1)
- {
- len = strlen(strPtr);
- if (len > 0)
- len--;
- while (len > 0 && strPtr[len] == ' ')
- len--;
- if (strPtr[len] == ':')
- {
- colon = True;
- junk = strPtr + len;
- }
- }
- else
- {
- /*
- * Multibyte environment, have to go through the characters one at
- * a time.
- */
- while (*strPtr != '\0')
- {
- /*
- * Process looking for a colon.
- */
- len = mblen(strPtr, MB_CUR_MAX);
- if (len == -1)
- len = 1;
- else if (len == 1 && *strPtr == ':')
- {
- colon = True;
- junk = strPtr;
- }
- else if (len != 1 || *strPtr != ' ')
- colon = False;
-
- strPtr += len;
- }
- }
- if (colon == False)
- {
- fontStruct = XLoadQueryFont (dpy, font_string);
- if (fontStruct != NULL)
- {
- *ret_index = SaveFontStruct (fontStruct, font_info);
- found = True;
- }
- }
- else
- {
- *junk = '\0';
- fontSet = XCreateFontSet (dpy, font_string, &missingFontSet,
- &len, NULL);
- if (fontSet != NULL)
- {
- /*
- * want the font sets to go from -1 to -n because 0 is
- * the default font.
- */
- *ret_index = SaveFontSet (fontSet, font_info);
- found = True;
- }
- if (len)
- XFreeStringList (missingFontSet);
- /*
- * restore colon
- */
- *junk = ':';
- }
- return found;
- }
- /******************************************************************************
- *
- * Semi Public Functions
- *
- *****************************************************************************/
- /******************************************************************************
- * Function: int __DtHelpFontIndexGet (Display dpy, XrmQuarkList xrm_list)
- *
- * Parameters: xrm_list Specifies the quark list for the font desired.
- *
- * Return Value: 0 if successful, -1 if using default font index.
- *
- * Purpose: Find the appropriate font to use for a quark set.
- *
- *****************************************************************************/
- int
- __DtHelpFontIndexGet (
- DtHelpDispAreaStruct *pDAS,
- XrmQuarkList xrm_list,
- long *ret_idx)
- {
- int result = -1;
- long fontIndex = pDAS->font_info.def_idx;
- XrmRepresentation retType;
- XrmValue retValue;
- char buffer[10];
- char *fontSpec;
- XrmName xrmList[3];
- DtHelpDAFontInfo *fontInfo = &(pDAS->font_info);
- Display *dpy = XtDisplay(pDAS->dispWid);
- /*
- * look in my font data base to see if I've already processed
- * this sequence of quarks.
- */
- if (XrmQGetResource (fontInfo->font_idx_db, xrm_list, xrm_list, &retType,
- &retValue))
- {
- fontIndex = *((int *)retValue.addr);
- result = 0;
- }
- else
- {
- /*
- * Check my parent's data base for an XLFD spec.
- */
- fontSpec = NULL;
- if (XrmQGetResource (XrmGetDatabase(dpy), xrm_list, xrm_list,
- &retType, &retValue))
- {
- fontSpec = ((char *) retValue.addr);
- if (LoadFont (dpy, fontInfo, fontSpec, &fontIndex))
- result = 0;
- }
- /*
- * If my parent didn't have anything, check my private database.
- */
- if (result != 0 &&
- XrmQGetResource (fontInfo->def_font_db, xrm_list, xrm_list,
- &retType, &retValue))
- {
- fontSpec = ((char *) retValue.addr);
- if (LoadFont (dpy, fontInfo, fontSpec, &fontIndex))
- result = 0;
- }
- /*
- * if unsuccessful on finding a font for this quark list.
- * save out using the default font
- */
- retValue.size = sizeof (int);
- retValue.addr = (XtPointer) &fontIndex;
- XrmQPutResource (&(fontInfo->font_idx_db),
- ((XrmBindingList) FontBindings),
- xrm_list, _DtHelpXrmInt, &retValue);
- /*
- * remember the character set for this font.
- */
- sprintf (buffer, "%ld", fontIndex);
- retValue.size = sizeof (XrmQuark);
- retValue.addr = (XtPointer) &xrm_list[_DT_HELP_FONT_CHAR_SET];
- xrmList[0] = XrmStringToQuark (buffer);
- xrmList[1] = XrmStringToQuark ("code_set");
- xrmList[2] = 0;
- XrmQPutResource (&(fontInfo->font_idx_db),
- ((XrmBindingList) FontBindings),
- xrmList, _DtHelpXrmQuark, &retValue);
- /*
- * remember the language for this font.
- */
- retValue.addr = (XtPointer) &xrm_list[_DT_HELP_FONT_LANG_TER];
- xrmList[1] = XrmStringToQuark ("language");
- XrmQPutResource (&(fontInfo->font_idx_db),
- ((XrmBindingList) FontBindings),
- xrmList, _DtHelpXrmQuark, &retValue);
- }
- *ret_idx = fontIndex;
- return result;
- }
- /******************************************************************************
- * Function: int __DtHelpFontCharSetQuarkGet (font_index, XrmQuark *ret_quark)
- *
- * Parameters: font_index Specifies the font in the font table.
- * ret_quark Returns the quark specifying the character
- * set of the font.
- *
- * Return Value: Returns 0 if successful, -1 if failed.
- *
- * Purpose: Gets the character set associated with a font.
- *
- *****************************************************************************/
- int
- __DtHelpFontCharSetQuarkGet (
- DtHelpDispAreaStruct *pDAS,
- long font_index,
- XrmQuark *ret_quark )
- {
- XrmRepresentation retType;
- XrmValue retValue;
- char buffer[10];
- XrmName xrmList[3];
- int result = 0;
- /*
- * quarkize the font index
- */
- sprintf (buffer, "%ld", font_index);
- xrmList[0] = XrmStringToQuark (buffer);
- xrmList[1] = XrmStringToQuark ("code_set");
- xrmList[2] = 0;
- /*
- * look in my font data base for the quark.
- */
- if (XrmQGetResource (pDAS->font_info.font_idx_db, xrmList, xrmList,
- &retType, &retValue))
- *ret_quark = *((XrmQuark *)retValue.addr);
- else
- result = -1;
- return result;
- }
- /******************************************************************************
- * Function: int __DtHelpFontLangQuarkGet (font_index, XrmQuark *ret_quark)
- *
- * Parameters: font_index Specifies the font in the font table.
- * ret_quark Returns the quark specifying the character
- * set of the font.
- *
- * Return Value: Returns 0 if successful, -1 if failed.
- *
- * Purpose: Gets the character set associated with a font.
- *
- *****************************************************************************/
- int
- __DtHelpFontLangQuarkGet (
- DtHelpDispAreaStruct *pDAS,
- long font_index,
- XrmQuark *ret_quark )
- {
- XrmRepresentation retType;
- XrmValue retValue;
- char buffer[10];
- XrmName xrmList[3];
- int result = 0;
- /*
- * quarkize the font index
- */
- sprintf (buffer, "%ld", font_index);
- xrmList[0] = XrmStringToQuark (buffer);
- xrmList[1] = XrmStringToQuark ("language");
- xrmList[2] = 0;
- /*
- * look in my font data base for the quark.
- */
- if (XrmQGetResource (pDAS->font_info.font_idx_db, xrmList, xrmList,
- &retType, &retValue))
- *ret_quark = *((XrmQuark *)retValue.addr);
- else
- result = -1;
- return result;
- }
- /******************************************************************************
- * Function: void _DtHelpCopyDefaultList (xrm_name)
- *
- * Parameters: xrm_name The quark list to fill out.
- *
- * Return Value: void
- *
- * Purpose: Initializes the font data base.
- *****************************************************************************/
- void
- _DtHelpCopyDefaultList (
- XrmName *xrm_list)
- {
- int n;
- for (n = 0; n < _DT_HELP_FONT_END + 1; n++)
- xrm_list[n] = DefaultFontQuarks[n];
- }
- /******************************************************************************
- * Function: void _DtHelpCopyCasualList (xrm_name)
- *
- * Parameters: xrm_name The quark list to fill out.
- *
- * Return Value: void
- *
- * Purpose:
- *****************************************************************************/
- void
- _DtHelpCopyCasualList (
- XrmName *xrm_list)
- {
- int n;
- for (n = 0; n < _DT_HELP_FONT_END + 1; n++)
- xrm_list[n] = CasualFontQuarks[n];
- }
- /******************************************************************************
- * Function: void _DtHelpGetStringQuarks (xrm_name)
- *
- * Parameters: xrm_name The quark list to fill out.
- *
- * Return Value: void
- *
- * Purpose: Initializes the font data base.
- *****************************************************************************/
- void
- _DtHelpGetStringQuarks (
- XrmName *xrm_list)
- {
- _DtHelpCopyDefaultList(xrm_list);
- xrm_list[_DT_HELP_FONT_CHAR_SET] = StringFontQuark;
- }
- /******************************************************************************
- * Function: void __DtHelpFontDatabaseInit (dpy, default_font, type, tmp)
- *
- * Parameters: dpy Specifies the connection to the display server.
- * default_font Specifies the base font.
- * type Specifies the type of font 'default_font' is.
- *
- * Return Value: void
- *
- * Purpose: Initializes the font data base.
- *
- *****************************************************************************/
- void
- __DtHelpFontDatabaseInit (
- DtHelpDispAreaStruct *pDAS,
- XtPointer string_font,
- XmFontType type,
- XFontStruct *user_font)
- {
- int n;
- int strIdx;
- int found = FALSE;
- Display *dpy = XtDisplay(pDAS->dispWid);
- DtHelpDAFontInfo *fontInfo = &(pDAS->font_info);
- XrmValue retValue;
- XrmRepresentation retType;
- XrmName xrmList[_DtHelpFontQuarkNumber];
- /*
- * build our default data base
- */
- *fontInfo = DefFontInfo;
- for (n = 0; FontResources[n]; n++)
- XrmPutLineResource (&(fontInfo->def_font_db), FontResources[n]);
- /*
- * build the default quark set.
- */
- _DtHelpProcessLock();
- if (QuarksInited == False)
- {
- StringFontQuark = XrmStringToQuark ("String");
- DefaultFontQuarks[_DT_HELP_FONT_SPACING] = XrmStringToQuark ("p");
- DefaultFontQuarks[_DT_HELP_FONT_SIZE] = XrmStringToQuark ("10");
- DefaultFontQuarks[_DT_HELP_FONT_ANGLE] = XrmStringToQuark ("roman");
- DefaultFontQuarks[_DT_HELP_FONT_WEIGHT] = XrmStringToQuark ("medium");
- DefaultFontQuarks[_DT_HELP_FONT_TYPE] =
- XrmStringToQuark ("sans_serif");
- DefaultFontQuarks[_DT_HELP_FONT_LANG_TER] = XrmStringToQuark ("C");
- DefaultFontQuarks[_DT_HELP_FONT_CHAR_SET] =
- XrmStringToQuark ("ISO-8859-1");
- DefaultFontQuarks[_DT_HELP_FONT_END] = 0;
- for (n = 0; n < _DT_HELP_FONT_END; ++n)
- CasualFontQuarks[n] = XrmStringToQuark("*");
- CasualFontQuarks[_DT_HELP_FONT_END] = 0;
- QuarksInited = True;
- }
- _DtHelpProcessUnlock();
- /*
- * if the string_font is null, used the default user's font for strings.
- */
- if (string_font == NULL)
- {
- /*
- * WARNING...what if the user_font is null? And what type is it?
- */
- string_font = (XtPointer) user_font;
- type = XmFONT_IS_FONT;
- }
- /*
- * save the string font in the lists
- */
- if (type == XmFONT_IS_FONTSET)
- strIdx = SaveFontSet ((XFontSet) string_font, fontInfo);
- else
- strIdx = SaveFontStruct ((XFontStruct *) string_font, fontInfo);
- /*
- * Save this idx font for ascii files and strings.
- */
- _DtHelpGetStringQuarks(xrmList);
- retValue.size = sizeof (int);
- retValue.addr = (XtPointer) &(strIdx);
- XrmQPutResource (&(fontInfo->font_idx_db), ((XrmBindingList) FontBindings),
- xrmList, _DtHelpXrmInt, &retValue);
- /*
- * try to get the default font for help information
- * from the parent's database.
- */
- if (XrmQGetResource (XrmGetDatabase(dpy), DefaultFontQuarks,
- DefaultFontQuarks, &retType, &retValue))
- found = LoadFont (dpy, fontInfo, ((char *) retValue.addr),
- &(fontInfo->def_idx));
- /*
- * If the XLFD font spec wasn't in the parent's database,
- * look at my private database.
- */
- if (found == False &&
- XrmQGetResource (fontInfo->def_font_db,
- DefaultFontQuarks, DefaultFontQuarks,
- &retType, &retValue))
- found = LoadFont (dpy, fontInfo, ((char *) retValue.addr),
- &(fontInfo->def_idx));
- /*
- * If still no luck, use the string font passed in.
- */
- if (found == False)
- fontInfo->def_idx = strIdx;
- /*
- * Remember we got this font for this quark string.
- */
- retValue.size = sizeof (int);
- retValue.addr = (XtPointer) &(fontInfo->def_idx);
- XrmQPutResource (&(fontInfo->font_idx_db), ((XrmBindingList) FontBindings),
- DefaultFontQuarks, _DtHelpXrmInt, &retValue);
- }
- /******************************************************************************
- * Function: XFontStruct *__DtHelpFontStructGet (long font_index );
- *
- * Parameters: font_index Specifies an index into the Font Structure
- * List.
- *
- * Return Value: Returns the font structure.
- *
- * Purpose:
- *
- *****************************************************************************/
- XFontStruct *
- __DtHelpFontStructGet (
- DtHelpDAFontInfo font_info,
- long font_index)
- {
- if (font_index > -1 && font_index < font_info.struct_cnt)
- return font_info.font_structs[font_index];
- return NULL;
- }
- /******************************************************************************
- * Function: XFontSet __DtHelpFontSetGet (long font_index);
- *
- * Parameters: font_index Specifies an index into the Font Set List.
- *
- * Return Value: Returns the font structure.
- *
- * Purpose:
- *
- *****************************************************************************/
- XFontSet
- __DtHelpFontSetGet (
- DtHelpDAFontInfo font_info,
- long font_index)
- {
- if (font_index < 0)
- {
- font_index = -font_index;
- font_index--;
- if (font_index < font_info.set_cnt)
- return font_info.font_sets[font_index];
- }
- return NULL;
- }
- /******************************************************************************
- * Function: long __DtHelpDefaultFontIndexGet ();
- *
- * Parameters:
- *
- * Return Value: Returns the index for the default font set/structure.
- *
- * Purpose:
- *
- *****************************************************************************/
- long
- __DtHelpDefaultFontIndexGet (
- DtHelpDispAreaStruct *pDAS)
- {
- return (pDAS->font_info.def_idx);
- }
- /******************************************************************************
- * Function: int __DtHelpFontMetrics (int font_index, int &ret_ascent,
- * &ret_descent);
- *
- * Parameters:
- *
- * Return Value: Returns the index for the default font set/structure.
- *
- * Purpose:
- *
- *****************************************************************************/
- void
- __DtHelpFontMetrics (
- DtHelpDAFontInfo font_info,
- long font_index,
- _DtCvUnit *ret_ascent,
- _DtCvUnit *ret_descent,
- _DtCvUnit *ret_char_width,
- _DtCvUnit *ret_super,
- _DtCvUnit *ret_sub)
- {
- XFontStruct **fontList;
- char **fontNames;
- int fontCount;
- _DtCvUnit maxAscent = -1;
- _DtCvUnit maxDescent = -1;
- _DtCvUnit maxCharW = -1;
- _DtCvUnit superOffset = 0;
- _DtCvUnit subOffset = 0;
- int i;
- if (font_index < 0)
- {
- font_index = -font_index;
- font_index--;
- if (font_index < font_info.set_cnt)
- {
- if (font_info.fs_metrics[font_index].inited == True)
- {
- maxAscent = font_info.fs_metrics[font_index].fm.ascent;
- maxDescent = font_info.fs_metrics[font_index].fm.descent;
- maxCharW = font_info.fs_metrics[font_index].fm.average_width;
- }
- else /* if (font_info.fs_metrics[font_index].inited == False) */
- {
- fontCount = XFontsOfFontSet(font_info.font_sets[font_index],
- &fontList, &fontNames);
- for (i = 0; i < fontCount; i++)
- {
- if (fontList[i]->ascent > maxAscent)
- maxAscent = fontList[i]->ascent;
- if (fontList[i]->descent > maxDescent)
- maxDescent = fontList[i]->descent;
- if (fontList[i]->max_bounds.width > maxCharW)
- maxCharW = fontList[i]->max_bounds.width;
- }
- font_info.fs_metrics[font_index].fm.ascent = maxAscent;
- font_info.fs_metrics[font_index].fm.descent = maxDescent;
- font_info.fs_metrics[font_index].fm.average_width = maxCharW;
- font_info.fs_metrics[font_index].inited = True;
- }
- }
- }
- else if (font_index < font_info.struct_cnt)
- {
- maxAscent = font_info.font_structs[font_index]->ascent;
- maxDescent = font_info.font_structs[font_index]->descent;
- maxCharW = font_info.font_structs[font_index]->max_bounds.width;
- }
- superOffset = (maxAscent * 40) / 100 + ((maxAscent % 40) > 19 ? 1 : 0);
- subOffset = superOffset;
- if (ret_ascent)
- *ret_ascent = maxAscent;
- if (ret_descent)
- *ret_descent = maxDescent;
- if (ret_char_width)
- *ret_char_width = maxCharW;
- if (ret_super)
- *ret_super = superOffset;
- if (ret_sub)
- *ret_sub = subOffset;
- }
- /******************************************************************************
- * Function: int _DtHelpGetExactFontIndex(Display dpy, char *xlfd_spec)
- *
- * Parameters:
- *
- * Return Value: 0 if successful, -1 if using default font index.
- *
- * Purpose: Try to load the specified font.
- *
- *****************************************************************************/
- int
- _DtHelpGetExactFontIndex (
- DtHelpDispAreaStruct *pDAS,
- const char *lang,
- const char *char_set,
- char *xlfd_spec,
- long *ret_idx)
- {
- int i = 0;
- int result = -1;
- long fontIndex = pDAS->font_info.def_idx;
- char **nameList;
- DtHelpDAFontInfo *fontInfo = &(pDAS->font_info);
- Display *dpy = XtDisplay(pDAS->dispWid);
- /*
- * look in my font data base to see if I've already processed
- * this xlfd_spec.
- */
- #ifndef REALLOC_INCR
- #define REALLOC_INCR 10
- #endif
- nameList = fontInfo->exact_fonts;
- if (NULL != nameList)
- {
- for (i = 0; NULL != *nameList && strcmp(*nameList, xlfd_spec); i++)
- nameList++;
- }
- if (NULL != nameList && NULL != *nameList)
- {
- fontIndex = fontInfo->exact_idx[i];
- result = 0;
- }
- else if (LoadFont(dpy, fontInfo, xlfd_spec, &fontIndex))
- {
- /*
- * make a copy of the font spec
- */
- xlfd_spec = strdup(xlfd_spec);
- if (NULL != xlfd_spec)
- {
- /*
- * now save it away for later tests.
- */
- fontInfo->exact_fonts = (char **) _DtHelpCeAddPtrToArray(
- (void **)fontInfo->exact_fonts,
- (void *) xlfd_spec);
- if (NULL != fontInfo->exact_fonts)
- {
- if (NULL == fontInfo->exact_idx)
- fontInfo->exact_idx = (int *) malloc(
- sizeof(int)*REALLOC_INCR);
- else if ((i + 1) % REALLOC_INCR == 0)
- fontInfo->exact_idx = (int *) realloc(fontInfo->exact_idx,
- sizeof(int) * (i + 1 + REALLOC_INCR));
-
- if (NULL != fontInfo->exact_idx)
- {
- char buffer[10];
- XrmValue retValue;
- XrmName xrmList[3];
- XrmQuark myQuark;
-
- fontInfo->exact_idx[i] = fontIndex;
- result = 0;
-
- /*
- * remember the character set for this font.
- */
- myQuark = XrmStringToQuark(char_set);
- sprintf (buffer, "%ld", fontIndex);
- retValue.size = sizeof (XrmQuark);
- retValue.addr = (XtPointer) &myQuark;
- xrmList[0] = XrmStringToQuark (buffer);
- xrmList[1] = XrmStringToQuark ("code_set");
- xrmList[2] = 0;
- XrmQPutResource (&(fontInfo->font_idx_db),
- ((XrmBindingList) FontBindings),
- xrmList, _DtHelpXrmQuark, &retValue);
-
- /*
- * remember the language for this font.
- */
- myQuark = XrmStringToQuark(lang);
- xrmList[1] = XrmStringToQuark ("language");
- XrmQPutResource (&(fontInfo->font_idx_db),
- ((XrmBindingList) FontBindings),
- xrmList, _DtHelpXrmQuark, &retValue);
- }
- }
- }
- }
- *ret_idx = fontIndex;
- return result;
- }
|