Kean Johnston writes: > > Yes, if we don't have an improved version by the end of the week > > I will revert this. > I didnt see any comment on my message ... did you see my patch from > yesterday that implements the -r and -n options? >
I'm sorry I have overlooked your posting. I've combined Juliusz's and your patch. Juliusz, Kean, please check below and tell me if it does what you expect. Egbert. Index: config/cf/X11.tmpl =================================================================== RCS file: /home/x-cvs/xc/config/cf/X11.tmpl,v retrieving revision 1.208 diff -u -r1.208 X11.tmpl --- config/cf/X11.tmpl 27 Jun 2003 14:53:08 -0000 1.208 +++ config/cf/X11.tmpl 2 Jul 2003 19:16:40 -0000 @@ -3823,7 +3823,7 @@ #endif #endif -#ifndef MakeTblHtmlDoc(file,srcs) +#ifndef MakeTblHtmlDoc #ifdef HTMLroffCmd #define MakeTblHtmlDoc(file,srcs) @@\ file.html: srcs @@\ @@ -3835,7 +3835,7 @@ #endif #endif -#ifndef MakeEqnHtmlDoc(file,srcs) +#ifndef MakeEqnHtmlDoc #ifdef HTMLroffCmd #define MakeEqnHtmlDoc(file,srcs) @@\ file.html: srcs @@\ Index: programs/mkfontscale/mkfontscale.c =================================================================== RCS file: /home/x-cvs/xc/programs/mkfontscale/mkfontscale.c,v retrieving revision 1.9 diff -u -r1.9 mkfontscale.c --- programs/mkfontscale/mkfontscale.c 1 Jul 2003 13:05:34 -0000 1.9 +++ programs/mkfontscale/mkfontscale.c 2 Jul 2003 19:16:52 -0000 @@ -74,21 +74,24 @@ #define countof(_a) (sizeof(_a)/sizeof((_a)[0])) -int doDirectory(char*, int, ListPtr); +static int doDirectory(char*, int, ListPtr); static int checkEncoding(FT_Face face, char *encoding_name); static int checkExtraEncoding(FT_Face face, char *encoding_name, int found); static int find_cmap(int type, int pid, int eid, FT_Face face); static char* notice_foundry(char *notice); static char* vendor_foundry(signed char *vendor); -int readFontScale(HashTablePtr entries, char *dirname); +static int readFontScale(HashTablePtr entries, char *dirname); ListPtr makeXLFD(char *filename, FT_Face face, int); +static int readEncodings(ListPtr encodings, char *dirname); static FT_Library ft_library; static float bigEncodingFuzz = 0.02; +static int relative; static int doScalable; static int doBitmaps; -static int doEncodings; +static int onlyEncodings; +static int onlyEncodings; static ListPtr encodingsToDo; static int reencodeLegacy; char *encodingPrefix = NULL; @@ -99,7 +102,7 @@ fprintf(stderr, "mkfontscale [ -b ] [ -s ] [ -o filename ] \n" " [ -x encoding ] [ -f fuzz ] [ -l ] " - "[ -e directory ] [ -p prefix ]\n" + "[ -e directory ] [ -p prefix ] [ -n ] [ -r ] \n" " [ directory ]...\n"); } @@ -108,7 +111,7 @@ { int argn; FT_Error ftrc; - int rc; + int rc, ll = 0; char prefix[NPREFIX]; if(getcwd(prefix, NPREFIX - 1) == NULL) { @@ -117,6 +120,7 @@ } if(prefix[strlen(prefix) - 1] != '/') strcat(prefix, "/"); + encodingPrefix = dsprintf("%s", prefix); outfilename = NULL; @@ -127,8 +131,9 @@ NULL, 0); doBitmaps = 0; doScalable = 1; + onlyEncodings = 0; + relative = 0; reencodeLegacy = 1; - doEncodings = 0; encodingsToDo = NULL; argn = 1; @@ -154,14 +159,14 @@ usage(); exit(1); } - strcpy(prefix, argv[argn + 1]); + free(encodingPrefix); + encodingPrefix = dsprintf("%s", argv[argn + 1]); argn += 2; } else if(strcmp(argv[argn], "-e") == 0) { if(argn >= argc - 1) { usage(); exit(1); } - doEncodings = 1; rc = readEncodings(encodingsToDo, argv[argn + 1]); if(rc < 0) exit(1); @@ -172,6 +177,12 @@ } else if(strcmp(argv[argn], "-s") == 0) { doScalable = 0; argn++; + } else if(strcmp(argv[argn], "-n") == 0) { + onlyEncodings = 1; + argn++; + } else if(strcmp(argv[argn], "-r") == 0) { + relative = 1; + argn++; } else if(strcmp(argv[argn], "-l") == 0) { reencodeLegacy = !reencodeLegacy; argn++; @@ -199,8 +210,6 @@ } } - encodingPrefix = dsprintf("%s", prefix); - if(outfilename == NULL) { if(doBitmaps) outfilename = "fonts.dir"; @@ -213,13 +222,14 @@ fprintf(stderr, "Could not initialise FreeType library: %d\n", ftrc); exit(1); } - + + ll = listLength(encodingsToDo); if (argn == argc) - doDirectory(".", doEncodings, encodingsToDo); + doDirectory(".", ll, encodingsToDo); else while(argn < argc) { - doDirectory(argv[argn], doEncodings, encodingsToDo); + doDirectory(argv[argn], ll, encodingsToDo); argn++; } return 0; @@ -629,7 +639,7 @@ return xlfd; } -int +static int readFontScale(HashTablePtr entries, char *dirname) { int n = strlen(dirname); @@ -695,11 +705,11 @@ return 0; } -int -doDirectory(char *dirname_given, int doEncodings, ListPtr encodingsToDo) +static int +doDirectory(char *dirname_given, int numEncodings, ListPtr encodingsToDo) { - char *dirname, *fontscale_name, *filename; - FILE *fontscale; + char *dirname, *fontscale_name, *filename, *encdir; + FILE *fontscale, *encfile; DIR *dirp; struct dirent *entry; FT_Error ftrc; @@ -708,7 +718,7 @@ HashTablePtr entries; HashBucketPtr *array; int i, n, found, rc; - int isBitmap; + int isBitmap=0; i = strlen(dirname_given); if(i == 0) @@ -723,27 +733,9 @@ exit(1); } - if(doEncodings) { - char *e = dsprintf("%s%s", dirname, "encodings.dir"); - FILE *out; - ListPtr l; - - if(e == NULL) { - perror("encodings"); - exit(1); - } - unlink(e); - out = fopen(e, "w"); - if(out == NULL) { - perror("open(encodings.dir)"); - exit(1); - } - fprintf(out, "%d\n", listLength(encodingsToDo)); - for(l = encodingsToDo; l; l = l->next) { - fprintf(out, "%s\n", l->value); - } - } - + if (onlyEncodings) + goto encodings; + entries = makeHashTable(); if(doBitmaps && !doScalable) { readFontScale(entries, dirname); @@ -915,6 +907,29 @@ fclose(fontscale); free(fontscale_name); } + + encodings: + encdir = dsprintf("%s%s", dirname, "encodings.dir"); + + if(encdir == NULL) { + perror("encodings"); + exit(1); + } + unlink(encdir); + + if (numEncodings) { + encfile = fopen(encdir, "w"); + if(encfile == NULL) { + perror("open(encodings.dir)"); + exit(1); + } + fprintf(encfile, "%d\n", numEncodings); + for(lp = encodingsToDo; lp; lp = lp->next) { + fprintf(encfile, "%s\n", lp->value); + } + fclose (encfile); + } + free(dirname); return 1; } @@ -1172,11 +1187,10 @@ return NULL; } -int +static int readEncodings(ListPtr encodings, char *dirname) { char *fullname; - int slash; DIR *dirp; struct dirent *file; char **names, **name; @@ -1203,7 +1217,7 @@ continue; for(name = names; *name; name++) { - if(fullname[0] != '/') { + if(fullname[0] != '/' && !relative) { char *n; n = dsprintf("%s%s", encodingPrefix, fullname); if(n == NULL) { @@ -1211,10 +1225,12 @@ closedir(dirp); return -1; } - free(fullname); - fullname = n; + encodingsToDo = listConsF(encodingsToDo, "%s %s", *name, n); + free(n); + } else { + encodingsToDo = + listConsF(encodingsToDo, "%s %s", *name, fullname); } - encodingsToDo = listConsF(encodingsToDo, "%s %s", *name ,fullname); if(encodingsToDo == NULL) { fprintf(stderr, "Couldn't allocate encodings\n"); closedir(dirp); Index: programs/mkfontscale/mkfontscale.man =================================================================== RCS file: /home/x-cvs/xc/programs/mkfontscale/mkfontscale.man,v retrieving revision 1.4 diff -u -r1.4 mkfontscale.man --- programs/mkfontscale/mkfontscale.man 20 Jun 2003 15:49:52 -0000 1.4 +++ programs/mkfontscale/mkfontscale.man 2 Jul 2003 19:16:52 -0000 @@ -27,6 +27,12 @@ .B \-p .I prefix ] [ +.B \-r +.I prefix +] [ +.B \-n +.I prefix +] [ .B \-\- ] [ .I directory @@ -98,6 +104,17 @@ when they are written to the "encodings.dir" file. The prefix is prepended litterally: if a `/' is required between the prefix and the path names, it must be supplied explicitly as part of the prefix. +.TP +.B \-r +Keep non-absolute encoding directories in their relative form when +writing the "encodings.dir" file. The default is to convert relative +encoding directories to absolute directories by prepending the current +directory. The positioning of this options is significant, as this +option only applies to subsequent +.TP +.B \-n +do not scan for fonts, do not write font directory files. This option +is useful when generating encoding directories only. .TP .B \-\- end of options. _______________________________________________ Devel mailing list [EMAIL PROTECTED] http://XFree86.Org/mailman/listinfo/devel