diff options
author | joerg <joerg@pkgsrc.org> | 2007-08-05 19:20:19 +0000 |
---|---|---|
committer | joerg <joerg@pkgsrc.org> | 2007-08-05 19:20:19 +0000 |
commit | 2b3c50ae3991ce2a59bff61c47deb39bfb002506 (patch) | |
tree | b7f6a08c8045809498ced1b8725a55510f14f676 | |
parent | fd0508f2a229a2e65374112efb6f1f773a2ddc6f (diff) | |
download | pkgsrc-2b3c50ae3991ce2a59bff61c47deb39bfb002506.tar.gz |
Replace bdftruncate.pl with a small C program. Original code is
from Martin Husemann with a number of improvements from me.
Bump revision.
-rw-r--r-- | fonts/font-util/Makefile | 9 | ||||
-rw-r--r-- | fonts/font-util/distinfo | 4 | ||||
-rw-r--r-- | fonts/font-util/files/bdftruncate.c | 222 | ||||
-rw-r--r-- | fonts/font-util/patches/patch-aa | 29 | ||||
-rw-r--r-- | fonts/font-util/patches/patch-ab | 66 |
5 files changed, 325 insertions, 5 deletions
diff --git a/fonts/font-util/Makefile b/fonts/font-util/Makefile index 0c7591588c0..166d054d738 100644 --- a/fonts/font-util/Makefile +++ b/fonts/font-util/Makefile @@ -1,7 +1,8 @@ -# $NetBSD: Makefile,v 1.3 2007/05/07 20:13:27 joerg Exp $ +# $NetBSD: Makefile,v 1.4 2007/08/05 19:20:19 joerg Exp $ # DISTNAME= font-util-1.0.1 +PKGREVISION= 1 CATEGORIES= fonts MASTER_SITES= http://xorg.freedesktop.org/releases/individual/font/ EXTRACT_SUFX= .tar.bz2 @@ -14,9 +15,9 @@ PKG_DESTDIR_SUPPORT= user-destdir GNU_CONFIGURE= yes -USE_TOOLS+= perl:run -REPLACE_PERL+= bdftruncate.pl - CONFIGURE_ENV+= APP_MAN_SUFFIX=1 +post-extract: + ${CP} ${FILESDIR}/bdftruncate.c ${WRKSRC} + .include "../../mk/bsd.pkg.mk" diff --git a/fonts/font-util/distinfo b/fonts/font-util/distinfo index 3e9f8d9d726..27f8ed7cfd3 100644 --- a/fonts/font-util/distinfo +++ b/fonts/font-util/distinfo @@ -1,5 +1,7 @@ -$NetBSD: distinfo,v 1.1.1.1 2006/11/14 20:15:05 joerg Exp $ +$NetBSD: distinfo,v 1.2 2007/08/05 19:20:19 joerg Exp $ SHA1 (font-util-1.0.1.tar.bz2) = 97c2880c5f664e655f5bc2b194c52fbd496bab19 RMD160 (font-util-1.0.1.tar.bz2) = a9c758164ebc1da1a743fa73b68fae0fc5c215cc Size (font-util-1.0.1.tar.bz2) = 98637 bytes +SHA1 (patch-aa) = dd254f9f21b052371c9dabe90c403e7ae5b73d98 +SHA1 (patch-ab) = cf487b4ad2c6089e66aab3e4c28596225bf98e95 diff --git a/fonts/font-util/files/bdftruncate.c b/fonts/font-util/files/bdftruncate.c new file mode 100644 index 00000000000..9bb204b3160 --- /dev/null +++ b/fonts/font-util/files/bdftruncate.c @@ -0,0 +1,222 @@ +/*- + * Copyright (c) 2006 Martin Husemann. + * Copyright (c) 2007 Joerg Sonnenberger. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This program is derived (in a straight forward way) from + * bdftruncate.pl -- Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> + * + * This utility allows you to generate from an ISO10646-1 encoded + * BDF font other ISO10646-1 BDF fonts in which all characters above + * a threshold code value are stored unencoded. + */ + +#include <ctype.h> +#include <errno.h> +#include <limits.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +static int iswide(unsigned int); +static void usage(void); + +static int opt_minus_w; +static int opt_plus_w; +static int removewide; +static unsigned long threshold; + +static int +parse_threshold(const char *str) +{ + int base; + char *end_ptr; + + if (!isdigit((unsigned char)*str)) + return 1; + if (str[0] == 0 && (str[1] == 'x' || str[1] == 'X')) + base = 16; + else + base = 10; + + errno = 0; + threshold = strtoul(str, &end_ptr, base); + if (errno != 0 || threshold == 0) + return 1; + return 0; +} + +static void +process_line(const char *line) +{ + if (strncmp(line, "ENCODING", 8) == 0) { + unsigned long enc; + const char *v; + + v = line + 9; + + while (*v && isspace((unsigned char)(*v))) + ++v; + enc = strtoul(v, NULL, 10); + /* XXX Check for line-ending? */ + if (enc >= threshold || (removewide && iswide(enc))) { + printf("ENCODING -1\n"); + } else { + fputs(line, stdout); + } + return; + } + if (strncmp(line, "STARTFONT", 9) == 0) { + fputs(line, stdout); + printf("COMMENT AUTOMATICALLY GENERATED FILE. DO NOT EDIT!\n" + "COMMENT In this version of the font file, " + "all characters >= U+%04lx are\n" + "COMMENT not encoded to keep XFontStruct small.\n", + threshold); + return; + } + if (strncmp(line, "COMMENT", 7) == 0) { + const char *v = line + 8; + + while (*v && isspace((unsigned char)(*v))) + v++; + if (strncmp(v, "$id: ", 5) == 0 || + strncmp(v, "$Id: ", 5) == 0) { + const char *id = strchr(v+1, '$'); + if (id) { + printf("COMMENT Derived from %.*s", + (int)(id - v - 4), v + 5); + return; + } + } + } + fputs(line, stdout); +} + +int +main(int argc, char **argv) +{ + int removewide; + char *line, *input_ptr; + size_t line_len, rest_len; + + --argc; + ++argv; + if (argc == 0) + usage(); + + if (strcmp(*argv, "-w") == 0 || strcmp(*argv, "+w") == 0) { + if (**argv == '-') + opt_minus_w = 1; + else + opt_plus_w = 1; + --argc; + ++argv; + } + + if (argc != 1 || (opt_plus_w && opt_minus_w)) + usage(); + if (parse_threshold(*argv)) { + fprintf(stderr, "Illegal threshold %s", *argv); + usage(); + } + + if (opt_minus_w) + removewide = 1; + else if (opt_plus_w) + removewide = 0; + else + removewide = (threshold <= 0x3200); + + line_len = 1024; + if ((line = malloc(line_len)) == NULL) { + fprintf(stderr, "malloc failed"); + exit(EXIT_FAILURE); + } + + for (;;) { + if (fgets(line, line_len, stdin) == NULL) + break; + while (strlen(line) == line_len - 1 && !feof(stdin)) { + if (line_len > SSIZE_MAX) { + fprintf(stderr, "input line too large"); + exit(EXIT_FAILURE); + } + line = realloc(line, line_len * 2); + if (line == NULL) { + fprintf(stderr, "realloc failed"); + exit(EXIT_FAILURE); + } + input_ptr = line + line_len - 1; + rest_len = line_len + 1; + line_len *= 2; + if (fgets(input_ptr, rest_len, stdin) == NULL) { + /* Should not happen, but handle as EOF */ + break; + } + } + process_line(line); + } + + return EXIT_SUCCESS; +} + +/* + * Subroutine to identify whether the ISO 10646/Unicode character code + * ucs belongs into the East Asian Wide (W) or East Asian FullWidth + * (F) category as defined in Unicode Technical Report #11. + */ +static int +iswide(unsigned int ucs) +{ + return (ucs >= 0x1100 && + (ucs <= 0x115f || /* Hangul Jamo */ + (ucs >= 0x2e80 && ucs <= 0xa4cf && + (ucs & ~0x0011) != 0x300a && ucs != 0x303f) || /* CJK .. Yi */ + (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */ + (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Comp. Ideographs */ + (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Comp. Forms */ + (ucs >= 0xff00 && ucs <= 0xff5f) || /* Fullwidth Forms */ + (ucs >= 0xffe0 && ucs <= 0xffe6) || + (ucs >= 0x20000 && ucs <= 0x2ffff))); +} + +static void +usage(void) +{ + fprintf(stderr, + "Usage: bdftruncate [+w|-w] threshold <source.bdf >destination.bdf\n" + "\n" + "Example:\n" + "\n" + " bdftruncate 0x3200 <6x13.bdf >6x13t.bdf\n" + "\n" + "will generate the file 6x13t.bdf in which all glyphs with codes\n" + ">= 0x3200 will only be stored unencoded (i.e., ENCODING -1).\n" + "Option -w removes East Asian Wide and East Asian FullWidth characters\n" + "(default if threshold <= 0x3200), and option +w keeps them.\n"); + exit(EXIT_FAILURE); +} diff --git a/fonts/font-util/patches/patch-aa b/fonts/font-util/patches/patch-aa new file mode 100644 index 00000000000..a19c15a8f3c --- /dev/null +++ b/fonts/font-util/patches/patch-aa @@ -0,0 +1,29 @@ +$NetBSD: patch-aa,v 1.1 2007/08/05 19:20:19 joerg Exp $ + +--- Makefile.am.orig 2007-08-05 19:48:51.000000000 +0200 ++++ Makefile.am +@@ -19,14 +19,10 @@ + # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-bin_PROGRAMS = ucs2any +-bin_SCRIPTS = bdftruncate ++bin_PROGRAMS = bdftruncate ucs2any + + ucs2any_SOURCES = ucs2any.c +- +-bdftruncate: $(top_srcdir)/bdftruncate.pl +- @rm -f $@ +- cp $(top_srcdir)/bdftruncate.pl $@ ++bdftruncate_SOURCES = bdftruncate.c + + aclocaldir = $(datadir)/aclocal + aclocal_DATA = fontutil.m4 +@@ -63,7 +59,6 @@ CLEANFILES = bdftruncate $(appman_DATA) + EXTRA_DIST = $(mapfiles_DATA) \ + $(appman_PRE) \ + autogen.sh \ +- bdftruncate.pl \ + fontutil.pc.in \ + $(aclocal_DATA) + diff --git a/fonts/font-util/patches/patch-ab b/fonts/font-util/patches/patch-ab new file mode 100644 index 00000000000..41ac8fb96c6 --- /dev/null +++ b/fonts/font-util/patches/patch-ab @@ -0,0 +1,66 @@ +$NetBSD: patch-ab,v 1.1 2007/08/05 19:20:19 joerg Exp $ + +--- Makefile.in.orig 2007-08-05 20:07:51.000000000 +0200 ++++ Makefile.in +@@ -59,7 +59,7 @@ PRE_UNINSTALL = : + POST_UNINSTALL = : + build_triplet = @build@ + host_triplet = @host@ +-bin_PROGRAMS = ucs2any$(EXEEXT) ++bin_PROGRAMS = bdftruncate$(EXEEXT) ucs2any$(EXEEXT) + DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(srcdir)/fontutil.pc.in $(top_srcdir)/configure AUTHORS \ +@@ -80,6 +80,9 @@ am__installdirs = "$(DESTDIR)$(bindir)" + "$(DESTDIR)$(mapfilesdir)" "$(DESTDIR)$(pkgconfigdir)" + binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) + PROGRAMS = $(bin_PROGRAMS) ++am_bdftruncate_OBJECTS = bdftruncate.$(OBJEXT) ++bdftruncate_OBJECTS = $(am_bdftruncate_OBJECTS) ++bdftruncate_LDADD = $(LDADD) + am_ucs2any_OBJECTS = ucs2any.$(OBJEXT) + ucs2any_OBJECTS = $(am_ucs2any_OBJECTS) + ucs2any_LDADD = $(LDADD) +@@ -92,8 +95,8 @@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUD + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) + CCLD = $(CC) + LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +-SOURCES = $(ucs2any_SOURCES) +-DIST_SOURCES = $(ucs2any_SOURCES) ++SOURCES = $(bdftruncate_SOURCES) $(ucs2any_SOURCES) ++DIST_SOURCES = $(bdftruncate_SOURCES) $(ucs2any_SOURCES) + am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; + am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ +@@ -212,8 +215,8 @@ sbindir = @sbindir@ + sharedstatedir = @sharedstatedir@ + sysconfdir = @sysconfdir@ + target_alias = @target_alias@ +-bin_SCRIPTS = bdftruncate + ucs2any_SOURCES = ucs2any.c ++bdftruncate_SOURCES = bdftruncate.c + aclocaldir = $(datadir)/aclocal + aclocal_DATA = fontutil.m4 + mapfilesdir = @MAPDIR@ +@@ -339,6 +342,9 @@ uninstall-binPROGRAMS: + + clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) ++bdftruncate$(EXEEXT): $(bdftruncate_OBJECTS) $(bdftruncate_DEPENDENCIES) ++ @rm -f bdftruncate$(EXEEXT) ++ $(LINK) $(bdftruncate_OBJECTS) $(bdftruncate_LDADD) $(LIBS) + ucs2any$(EXEEXT): $(ucs2any_OBJECTS) $(ucs2any_DEPENDENCIES) + @rm -f ucs2any$(EXEEXT) + $(LINK) $(ucs2any_LDFLAGS) $(ucs2any_OBJECTS) $(ucs2any_LDADD) $(LIBS) +@@ -732,11 +738,6 @@ uninstall-am: uninstall-aclocalDATA unin + uninstall-binPROGRAMS uninstall-binSCRIPTS uninstall-info-am \ + uninstall-mapfilesDATA uninstall-pkgconfigDATA + +- +-bdftruncate: $(top_srcdir)/bdftruncate.pl +- @rm -f $@ +- cp $(top_srcdir)/bdftruncate.pl $@ +- + .man.$(APP_MAN_SUFFIX): + sed $(MAN_SUBSTS) < $< > $@ + # Tell versions [3.59,3.63) of GNU make to not export all variables. |