Accepting request 1235636 from graphics

- Update to xfig 3.2.9a
  this is Patchlevel 9a (Dez 2024)
  CHANGES:
  Ticket numbers refer to https://sourceforge.net/p/mcj/tickets/#.
  * Remove application resource fixedFontSet, fontSetSize.
  * Use float fontsizes, ticket #168.
  BUGS FIXED:
  * Enable compilation with libxaw, instead of libxaw3d, #138, #174.
  * Speed up drawing of a lot (thousands) of text objects, ticket #166.
  * Draw text in a user color, ticket #180.
  * Correctly place text into dimension lines, ticket #179.
  * Enable compilation on Mac Darwin, ticket #177.
  * Only print active layers if required, ticket #172.
  * Place line length values at saner locations, ticket #167.
  * Do not crash on export to pdf/latex under some circumstances, #165.
  * Export only active layers, ticket #163.
  * Sanitize sed script for build on Darwin, ticket #162.
  * Show symbol and dingbats fonts, ticket #159.
- Remove obsolete patches now upstream 
  * xfig-3.2.9-gcc14.patch
  * Fix-exporting-only-active-layers-ticket-163.patch
  * Sanitize-a-call-to-realloc-ticket-165.patch
  * 042708.patch
  * 7e0157.patch
  * a038d6.patch
  * f3466c.patch
- Remove patch xfig.3.2.3d-international-std-fonts.dif as outdated with UTF-8
- Remove patch xfig-3.2.9-dingbats.dif as we use now URW fonts only
- Port patches
  * xfig-3.2.6.dif

OBS-URL: https://build.opensuse.org/request/show/1235636
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/xfig?expand=0&rev=59
This commit is contained in:
Ana Guerrero 2025-01-15 16:42:40 +00:00 committed by Git OBS Bridge
commit 8d2d71204d
18 changed files with 58 additions and 1082 deletions

View File

@ -1,124 +0,0 @@
From 042708a455f264e5b78d55f4df51ce3e508cc2ba Mon Sep 17 00:00:00 2001
From: Thomas Loimer <thomas.loimer@tuwien.ac.at>
Date: Mon, 2 Sep 2024 21:01:08 +0200
Subject: [PATCH] Place the dimension line text into the widget, #179
Draw the text that should appear in the example dimension line into
the dimension line widget, not onto the canvas.
---
src/w_indpanel.c | 45 +++++++++++++++++++++++++++++----------------
1 file changed, 29 insertions(+), 16 deletions(-)
diff --git src/w_indpanel.c src/w_indpanel.c
index 95218fd..bde8298 100644
--- src/w_indpanel.c
+++ src/w_indpanel.c
@@ -2499,7 +2499,6 @@ static Widget tick_thick_w;
static Widget box_thick_w, font_size_w, dimline_style_panel;
static Widget left_arrow_type_panel, right_arrow_type_panel;
static Widget font_button;
-static Pixmap dimline_examp_pixmap = (Pixmap) 0;
static Widget exampline;
static Widget fixed_chk, actual_chk;
static Widget dimline_precw;
@@ -2599,15 +2598,7 @@ void popup_dimline_panel(ind_sw_info *isw)
/* make an example line that shows current settings as a label */
- /* make a pixmap to draw it into */
- if (dimline_examp_pixmap == (Pixmap) 0)
- dimline_examp_pixmap = XCreatePixmap(tool_d, canvas_win,
- DIMLINE_PIXMAP_WIDTH, DIMLINE_PIXMAP_HEIGHT, tool_dpth);
- /* clear it */
- XFillRectangle(tool_d, dimline_examp_pixmap, ind_blank_gc, 0, 0,
- DIMLINE_PIXMAP_WIDTH, 30);
-
- /* now make the label widget to display the pixmap */
+ /* make the label widget to display the pixmap */
FirstArg(XtNfromVert, below);
NextArg(XtNborderWidth, 0);
NextArg(XtNwidth, DIMLINE_PIXMAP_WIDTH);
@@ -2619,7 +2610,9 @@ void popup_dimline_panel(ind_sw_info *isw)
NextArg(XtNinternational, False);
exampline = XtCreateManagedWidget("", labelWidgetClass,
form, Args, ArgCount);
- draw_cur_dimline(); /* this draws it into dimline_examp_pixmap */
+
+ /* draws the example dimension line into the label */
+ draw_cur_dimline();
/******************************/
/* frame for Line information */
@@ -3098,6 +3091,7 @@ void draw_cur_dimline(void)
F_compound *dimline_example;
F_point *point;
Boolean save_showlen, save_shownums;
+ static Pixmap dimline_examp_pixmap = (Pixmap)0;
/* make the a dimension line */
line = create_line();
@@ -3114,8 +3108,15 @@ void draw_cur_dimline(void)
/* make it 3-3/4 inches long */
append_point((int)((appres.INCHES? DIMLINE_IP_LENGTH*PIX_PER_INCH:
DIMLINE_SI_LENGTH*PIX_PER_CM)+75), 275, &point);
- /* make a dimension line from that line */
- dimline_example = create_dimension_line(line, False);
+
+ /*
+ * With xfig -debug, create_dimension_line() already draws the bounding
+ * boxes of some elements into the canvas. First create the pixmap to draw
+ * the dimension line into.
+ */
+ if (!dimline_examp_pixmap)
+ dimline_examp_pixmap = XCreatePixmap(tool_d, canvas_win,
+ DIMLINE_PIXMAP_WIDTH, DIMLINE_PIXMAP_HEIGHT, tool_dpth);
/* clear it */
XFillRectangle(tool_d, dimline_examp_pixmap, ind_blank_gc, 0, 0,
@@ -3127,8 +3128,19 @@ void draw_cur_dimline(void)
appres.showlengths = appres.shownums = False;
/* now draw it into our pixmap */
- canvas_win = (Window) dimline_examp_pixmap;
+ canvas_win = (Window)dimline_examp_pixmap;
+ XftDrawChange(canvas_draw, dimline_examp_pixmap);
preview_in_progress = True;
+
+ /* Now create an (empty) dimension line compound, with the side effect that
+ * under appres.DEBUG some boxes are drawn. */
+ if ((dimline_example = create_dimension_line(line, False)) == NULL) {
+ free_linestorage(line);
+ XFreePixmap(tool_d, dimline_examp_pixmap);
+ dimline_examp_pixmap = (Pixmap)0;
+ return;
+ }
+
/* locate the line components of the dimension line */
dimline_components(dimline_example, &line, &tick1, &tick2, &poly);
draw_line(line,PAINT);
@@ -3141,6 +3153,7 @@ void draw_cur_dimline(void)
/* restore the canvas */
canvas_win = main_canvas;
+ XftDrawChange(canvas_draw, main_canvas);
/* and the showlengths and shownums settings */
appres.showlengths = save_showlen;
appres.shownums = save_shownums;
@@ -3148,12 +3161,12 @@ void draw_cur_dimline(void)
/* fool the toolkit... you know the drill by now */
XtUnmanageChild(exampline);
- FirstArg(XtNbitmap, (Pixmap) 0);
+ FirstArg(XtNbitmap, (Pixmap)0);
SetValues(exampline);
FirstArg(XtNbitmap, dimline_examp_pixmap);
SetValues(exampline);
XtManageChild(exampline);
- /* finally, free the dimline */
+ /* finally, free the dimline and the pixmap*/
free_compound(&dimline_example);
}
--
2.35.3

View File

@ -1,56 +0,0 @@
From 7e0157b422b696d848c312aace78c89f3f914192 Mon Sep 17 00:00:00 2001
From: Thomas Loimer <thomas.loimer@tuwien.ac.at>
Date: Mon, 2 Sep 2024 21:30:00 +0200
Subject: [PATCH] Correctly scale the example dimension line in the widget
Draw the example dimension line into the correct position into its
widget. Before, moving the canvas, probably changing the zoom, then
entering line drawing mode and clicking on the dimension line widget in
the indicator panel would not render the example line correctly.
---
src/w_indpanel.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git src/w_indpanel.c src/w_indpanel.c
index bde8298..5ab33f6 100644
--- src/w_indpanel.c
+++ src/w_indpanel.c
@@ -3091,6 +3091,9 @@ void draw_cur_dimline(void)
F_compound *dimline_example;
F_point *point;
Boolean save_showlen, save_shownums;
+ int save_zoomxoff, save_zoomyoff;
+ float save_zoomscale;
+ float save_display_zoomscale;
static Pixmap dimline_examp_pixmap = (Pixmap)0;
/* make the a dimension line */
@@ -3126,6 +3129,14 @@ void draw_cur_dimline(void)
save_showlen = appres.showlengths;
save_shownums = appres.shownums;
appres.showlengths = appres.shownums = False;
+ /* and draw at scale 1 into the correct position */
+ save_zoomxoff = zoomxoff;
+ save_zoomyoff = zoomyoff;
+ save_zoomscale = zoomscale;
+ save_display_zoomscale = display_zoomscale;
+ zoomxoff = zoomyoff = 0;
+ display_zoomscale = 1.0f;
+ zoomscale = display_zoomscale / ZOOM_FACTOR;
/* now draw it into our pixmap */
canvas_win = (Window)dimline_examp_pixmap;
@@ -3157,6 +3168,10 @@ void draw_cur_dimline(void)
/* and the showlengths and shownums settings */
appres.showlengths = save_showlen;
appres.shownums = save_shownums;
+ zoomxoff = save_zoomxoff;
+ zoomyoff = save_zoomyoff;
+ zoomscale = save_zoomscale;
+ display_zoomscale = save_display_zoomscale;
preview_in_progress = False;
/* fool the toolkit... you know the drill by now */
--
2.35.3

View File

@ -1,29 +0,0 @@
From a4a2f3f3aa29ec7fc84f9d782306b37bbe75025c Mon Sep 17 00:00:00 2001
From: Thomas Loimer <thomas.loimer@tuwien.ac.at>
Date: Sun, 31 Dec 2023 22:51:29 +0100
Subject: [PATCH] Fix exporting only active layers, ticket #163
---
src/u_print.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/u_print.c b/src/u_print.c
index c24c096..57921b3 100644
--- a/src/u_print.c
+++ b/src/u_print.c
@@ -861,10 +861,10 @@ build_layer_list(char *layers)
}
if (len < notlen && firstyes != -1) {
/* use list of layers TO print */
- sprintf(layers," -D +%s ",list);
+ sprintf(layers, "+%s", list);
} else if (firstno != -1){
/* use list of layers to NOT print */
- sprintf(layers," -D -%s ",notlist);
+ sprintf(layers, "-%s", notlist);
}
}
--
2.39.2

View File

@ -1,44 +0,0 @@
From 68403622a6f6c7d74f73e38989cfc0ed86fb83fc Mon Sep 17 00:00:00 2001
From: Thomas Loimer <thomas.loimer@tuwien.ac.at>
Date: Sun, 31 Dec 2023 15:18:45 +0100
Subject: [PATCH] Sanitize a call to realloc(), ticket #165
---
src/u_print.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/u_print.c b/src/u_print.c
index 2ed385f..c24c096 100644
--- a/src/u_print.c
+++ b/src/u_print.c
@@ -130,7 +130,7 @@ start_argumentlist(char *arg[restrict], char argbuf[restrict][ARGBUF_SIZE],
arg[0] = fig2dev_cmd;
arg[1] = "-L";
*a = 2; /* arg[2] will be the output language */
- if (appres.magnification < 99.99 | appres.magnification > 100.01) {
+ if (appres.magnification < 99.99 || appres.magnification > 100.01) {
int n;
arg[++*a] = "-m";
n = snprintf(argbuf[++*b], ARGBUF_SIZE,
@@ -531,6 +531,7 @@ print_export(char *file, int xoff, int yoff, char *backgrnd, char *transparent,
} else if (cur_exp_lang == LANG_PSTEX ||
cur_exp_lang == LANG_PDFTEX) {
size_t len = strlen(outfile);
+ char *s;
/* Options were already set above
- output the first file */
@@ -544,8 +545,9 @@ print_export(char *file, int xoff, int yoff, char *backgrnd, char *transparent,
goto free_outfile;
}
memcpy(tmp_name, outfile, len + 1);
- if (!realloc(outfile, len + 3)) {
+ if (!(outfile = realloc(s = outfile, len + 3))) {
ret = 1;
+ outfile = s; /* for free(outfile) below */
goto free_tmp_name;
}
strcpy(outfile + len, "_t");
--
2.39.2

View File

@ -1,33 +0,0 @@
From a038d6624eb0bb4479d11f5b2bf472714c200365 Mon Sep 17 00:00:00 2001
From: Thomas Loimer <thomas.loimer@tuwien.ac.at>
Date: Sun, 1 Sep 2024 23:00:42 +0200
Subject: [PATCH] Do not lose input in xfig -debug mode
Starting with xfig -debug, entering line drawing mode and clicking on
the dimension line attributes in the indicator panel (below the canvas)
would lose the input, one has to quit xfig from the window manager or by
signal.
---
src/w_indpanel.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git src/w_indpanel.c src/w_indpanel.c
index 5ab33f6..9e4755b 100644
--- src/w_indpanel.c
+++ src/w_indpanel.c
@@ -2995,10 +2995,8 @@ void popup_dimline_panel(ind_sw_info *isw)
actions_added = True;
}
- if (appres.DEBUG)
- XtPopup(choice_popup, XtGrabNone); /* makes debugging easier */
- else
- XtPopup(choice_popup, XtGrabExclusive);
+ XtPopup(choice_popup, XtGrabExclusive);
+
/* if the file message window is up add it to the grab */
file_msg_add_grab();
(void) XSetWMProtocols(tool_d, XtWindow(choice_popup), &wm_delete_window, 1);
--
2.35.3

View File

@ -1,63 +0,0 @@
Based on f3466c988d67b90d8767c8173d9fae1b64211759 Mon Sep 17 00:00:00 2001
From: Thomas Loimer <thomas.loimer@tuwien.ac.at>
Date: Mon, 2 Sep 2024 21:57:04 +0200
Subject: [PATCH] With xfig -debug, do not draw bounding boxes into widgets
Do not draw bounding boxes into the example libraries and
example dimension line.
---
src/u_draw.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git src/u_draw.c src/u_draw.c
index 71edbab..22740db 100644
--- src/u_draw.c
+++ src/u_draw.c
@@ -3,7 +3,7 @@
* Copyright (c) 1985-1988 by Supoj Sutanthavibul
* Parts Copyright (c) 1989-2015 by Brian V. Smith
* Parts Copyright (c) 1991 by Paul King
- * Parts Copyright (c) 2016-2023 by Thomas Loimer
+ * Parts Copyright (c) 2016-2024 by Thomas Loimer
*
* Parts Copyright (c) 1992 by James Tough
* Parts Copyright (c) 1998 by Georg Stemmer
@@ -1336,7 +1336,7 @@ void draw_text(F_text *text, int op)
return;
/* outline the text bounds in red if debug resource is set */
- if (appres.DEBUG) {
+ if (appres.DEBUG && !preview_in_progress) {
pw_vector(canvas_win, x1, y1, x2, y2, op, 1, RUBBER_LINE, 0.0, RED);
pw_vector(canvas_win, x2, y2, x3, y3, op, 1, RUBBER_LINE, 0.0, RED);
pw_vector(canvas_win, x3, y3, x4, y4, op, 1, RUBBER_LINE, 0.0, RED);
@@ -1593,7 +1593,7 @@ void clip_arrows(F_line *obj, int objtype, int op, int skip)
}
n = i;
/* draw the clipping area for debugging */
- if (appres.DEBUG) {
+ if (appres.DEBUG && !preview_in_progress) {
for (i=0; i<n; i++) {
if (i==n-1)
j=0;
@@ -1632,7 +1632,7 @@ void clip_arrows(F_line *obj, int objtype, int op, int skip)
}
n = i;
/* draw the clipping area for debugging */
- if (appres.DEBUG) {
+ if (appres.DEBUG && !preview_in_progress) {
int j;
for (i=0; i<n; i++) {
if (i==n-1)
@@ -2127,7 +2127,7 @@ void debug_depth(int depth, int x, int y)
char str[10];
PR_SIZE size;
- if (appres.DEBUG) {
+ if (appres.DEBUG && !preview_in_progress) {
sprintf(str,"%d",depth);
size = textsize(roman_font, strlen(str), str);
pw_text(canvas_win, x-size.length-round(3.0/zoomscale), round(y-3.0/zoomscale),
--
2.35.3

View File

@ -12,7 +12,7 @@
! Image editor - can edit imported image
Fig.image_editor: xdg-open
@@ -166,8 +167,11 @@ Fig*canvas.shadowWidth: 0
@@ -180,8 +181,11 @@ Fig*canvas.shadowWidth: 0
! If on monochrome server, or no Fig-color app-defaults file
! This background resource shows between the buttons like a border
@ -25,7 +25,7 @@
! Specify a private Compose key database file. If this resource contains a "/"
! then the wired-in name of the xfig global directory will not be prefixed
@@ -638,7 +642,29 @@ Fig*sideruler.background: gray95
@@ -652,7 +656,29 @@ Fig*sideruler.background: gray95
! file panel and scrollbar
Fig*FigList*background: gray95
Fig*List*background: gray95

View File

@ -1,619 +0,0 @@
---
src/u_fonts.c | 497 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
src/u_fonts.h | 11 +
src/w_drawprim.c | 17 +
3 files changed, 513 insertions(+), 12 deletions(-)
--- src/u_fonts.c
+++ src/u_fonts.c 2023-09-19 10:03:39.825796406 +0000
@@ -124,9 +124,9 @@ const char *const xft_name[NUM_FONTS] =
"palatino:italic", /* Palatino-Italic */
"palatino:bold", /* Palatino-Bold */
"palatino:bold:italic", /* Palatino-BoldItalic */
- "symbol", /* Symbol */
+ "symbol,StandardSymbolsPS,StandardSymbolsL", /* Symbol */
"zapfchancery:medium:italic", /* ZapfChancery-MediumItalic */
- "zapfdingbats" /* ZapfDingbats */
+ "zapfdingbats,ITCZapfDingbats,Dingbats,D050000L" /* ZapfDingbats */
};
@@ -307,6 +307,7 @@ textextents(F_text *t)
{
XGlyphInfo extents;
XftFont *rotfont;
+ map_f map = NULL;
int len = (int)strlen(t->cstring);
/* shortcut, nothing to do for an empty string */
@@ -325,8 +326,20 @@ textextents(F_text *t)
/* Get the font at native Fig resolution (often, 1200 ppi) */
rotfont = getfont(psfont_text(t), t->font, t->size * ZOOM_FACTOR,
(double)t->angle);
- XftTextExtentsUtf8(tool_d, rotfont, (XftChar8 *)t->cstring, len,
- &extents);
+ if ((map = adobe_charset(rotfont))) {
+ XftChar32 glyphs[len], *glyph;
+ XftChar8 *s = (XftChar8 *)t->cstring;
+ int glen = 0;
+
+ for (XftChar8 *chr = s; chr < s+len; chr++) {
+ XftChar32 glyph = XftCharIndex(tool_d, rotfont, map(*chr));
+ if (glyph)
+ glyphs[glen++] = glyph;
+ }
+ XftGlyphExtents(tool_d, rotfont, glyphs, glen, &extents);
+ } else
+ XftTextExtentsUtf8(tool_d, rotfont, (XftChar8 *)t->cstring, len,
+ &extents);
/* libxft keeps the last 16, closed fonts in cache.
Hence, no need to keep rotfont open, in our own cache. */
closefont(rotfont);
@@ -409,13 +422,26 @@ textextents(F_text *t)
} else {
/* a font at an angle */
XftFont *horfont;
+ map_f map = NULL;
double cosa, sina;
struct f_pos tl, bl, tr, br;
horfont = getfont(psfont_text(t), t->font,
t->size * ZOOM_FACTOR, 0.0);
- XftTextExtentsUtf8(tool_d, horfont, (XftChar8 *)t->cstring, len,
- &extents);
+ if ((map = adobe_charset(horfont))) {
+ XftChar32 glyphs[len], *glyph;
+ XftChar8 *s = (XftChar8 *)t->cstring;
+ int glen = 0;
+
+ for (XftChar8 *chr = s; chr < s+len; chr++) {
+ XftChar32 glyph = XftCharIndex(tool_d, horfont, map(*chr));
+ if (glyph)
+ glyphs[glen++] = glyph;
+ }
+ XftGlyphExtents(tool_d, horfont, glyphs, glen, &extents);
+ } else
+ XftTextExtentsUtf8(tool_d, horfont, (XftChar8 *)t->cstring,
+ len, &extents);
/* See above, libxft keeps a cache of 16 closed fonts. */
closefont(horfont);
@@ -453,11 +479,24 @@ int
textlength(XftFont *horfont, XftChar8 *string, int len)
{
XGlyphInfo extents;
+ map_f map = NULL;
if (len == 0)
return 0;
- XftTextExtentsUtf8(tool_d, horfont, string, len, &extents);
+ if ((map = adobe_charset(horfont))) {
+ XftChar32 glyphs[len], *glyph;
+ XftChar8 *chr, *s = string;
+ int glen = 0;
+
+ for (XftChar8 *chr = s; chr < s+len; chr++) {
+ XftChar32 glyph = XftCharIndex(tool_d, horfont, map(*chr));
+ if (glyph)
+ glyphs[glen++] = glyph;
+ }
+ XftGlyphExtents(tool_d, horfont, glyphs, glen, &extents);
+ } else
+ XftTextExtentsUtf8(tool_d, horfont, string, len, &extents);
return (int)extents.xOff;
}
@@ -473,16 +512,29 @@ textmaxheight(int psflag, int font, int
XGlyphInfo extents;
XftFont *horfont;
XftChar8 max_height_str[] = "{|(fgjOÜ";
+ map_f map = NULL;
+ size_t len = sizeof(max_height_str);
horfont = getfont(psflag, font, size * ZOOM_FACTOR, 0.0);
- XftTextExtentsUtf8(tool_d, horfont, max_height_str,
- (int)sizeof(max_height_str), &extents);
+ if ((map = adobe_charset(horfont))) {
+ XftChar32 glyphs[len], *glyph;
+ XftChar8 *s = max_height_str;
+ int glen = 0;
+
+ for (XftChar8 *chr = s; chr < s+len; chr++) {
+ XftChar32 glyph = XftCharIndex(tool_d, horfont, map(*chr));
+ if (glyph)
+ glyphs[glen++] = glyph;
+ }
+ XftGlyphExtents(tool_d, horfont, glyphs, glen, &extents);
+ } else
+ XftTextExtentsUtf8(tool_d, horfont, max_height_str,
+ (int)len, &extents);
closefont(horfont);
*ascent = extents.y;
*descent = extents.height - extents.y;
}
-
/*
* Return the drawing origin, given the marker position (base_x, base_y)
* and the alignment.
@@ -510,3 +562,428 @@ text_origin(int *draw_x, int *draw_y, in
break;
}
}
+/*
+ * Unicode mapping found in
+ * /usr/share/fonts/encodings/adobe-dingbats.enc.gz
+ */
+XftChar32 map_dingbats(XftChar8 in)
+{
+ switch (in) {
+ case 0x20: return 0x0020; /* SPACE */
+ case 0x21: return 0x2701; /* UPPER BLADE SCISSORS */
+ case 0x22: return 0x2702; /* BLACK SCISSORS */
+ case 0x23: return 0x2703; /* LOWER BLADE SCISSORS */
+ case 0x24: return 0x2704; /* WHITE SCISSORS */
+ case 0x25: return 0x260E; /* BLACK TELEPHONE */
+ case 0x26: return 0x2706; /* TELEPHONE LOCATION SIGN */
+ case 0x27: return 0x2707; /* TAPE DRIVE */
+ case 0x28: return 0x2708; /* AIRPLANE */
+ case 0x29: return 0x2709; /* ENVELOPE */
+ case 0x2A: return 0x261B; /* BLACK RIGHT POINTING INDEX */
+ case 0x2B: return 0x261E; /* WHITE RIGHT POINTING INDEX */
+ case 0x2C: return 0x270C; /* VICTORY HAND */
+ case 0x2D: return 0x270D; /* WRITING HAND */
+ case 0x2E: return 0x270E; /* LOWER RIGHT PENCIL */
+ case 0x2F: return 0x270F; /* PENCIL */
+ case 0x30: return 0x2710; /* UPPER RIGHT PENCIL */
+ case 0x31: return 0x2711; /* WHITE NIB */
+ case 0x32: return 0x2712; /* BLACK NIB */
+ case 0x33: return 0x2713; /* CHECK MARK */
+ case 0x34: return 0x2714; /* HEAVY CHECK MARK */
+ case 0x35: return 0x2715; /* MULTIPLICATION X */
+ case 0x36: return 0x2716; /* HEAVY MULTIPLICATION X */
+ case 0x37: return 0x2717; /* BALLOT X */
+ case 0x38: return 0x2718; /* HEAVY BALLOT X */
+ case 0x39: return 0x2719; /* OUTLINED GREEK CROSS */
+ case 0x3A: return 0x271A; /* HEAVY GREEK CROSS */
+ case 0x3B: return 0x271B; /* OPEN CENTRE CROSS */
+ case 0x3C: return 0x271C; /* HEAVY OPEN CENTRE CROSS */
+ case 0x3D: return 0x271D; /* LATIN CROSS */
+ case 0x3E: return 0x271E; /* SHADOWED WHITE LATIN CROSS */
+ case 0x3F: return 0x271F; /* OUTLINED LATIN CROSS */
+ case 0x40: return 0x2720; /* MALTESE CROSS */
+ case 0x41: return 0x2721; /* STAR OF DAVID */
+ case 0x42: return 0x2722; /* FOUR TEARDROP-SPOKED ASTERISK */
+ case 0x43: return 0x2723; /* FOUR BALLOON-SPOKED ASTERISK */
+ case 0x44: return 0x2724; /* HEAVY FOUR BALLOON-SPOKED ASTERISK */
+ case 0x45: return 0x2725; /* FOUR CLUB-SPOKED ASTERISK */
+ case 0x46: return 0x2726; /* BLACK FOUR POINTED STAR */
+ case 0x47: return 0x2727; /* WHITE FOUR POINTED STAR */
+ case 0x48: return 0x2605; /* BLACK STAR */
+ case 0x49: return 0x2729; /* STRESS OUTLINED WHITE STAR */
+ case 0x4A: return 0x272A; /* CIRCLED WHITE STAR */
+ case 0x4B: return 0x272B; /* OPEN CENTRE BLACK STAR */
+ case 0x4C: return 0x272C; /* BLACK CENTRE WHITE STAR */
+ case 0x4D: return 0x272D; /* OUTLINED BLACK STAR */
+ case 0x4E: return 0x272E; /* HEAVY OUTLINED BLACK STAR */
+ case 0x4F: return 0x272F; /* PINWHEEL STAR */
+ case 0x50: return 0x2730; /* SHADOWED WHITE STAR */
+ case 0x51: return 0x2731; /* HEAVY ASTERISK */
+ case 0x52: return 0x2732; /* OPEN CENTRE ASTERISK */
+ case 0x53: return 0x2733; /* EIGHT SPOKED ASTERISK */
+ case 0x54: return 0x2734; /* EIGHT POINTED BLACK STAR */
+ case 0x55: return 0x2735; /* EIGHT POINTED PINWHEEL STAR */
+ case 0x56: return 0x2736; /* SIX POINTED BLACK STAR */
+ case 0x57: return 0x2737; /* EIGHT POINTED RECTILINEAR BLACK STAR */
+ case 0x58: return 0x2738; /* HEAVY EIGHT POINTED RECTILINEAR BLACK STAR */
+ case 0x59: return 0x2739; /* TWELVE POINTED BLACK STAR */
+ case 0x5A: return 0x273A; /* SIXTEEN POINTED ASTERISK */
+ case 0x5B: return 0x273B; /* TEARDROP-SPOKED ASTERISK */
+ case 0x5C: return 0x273C; /* OPEN CENTRE TEARDROP-SPOKED ASTERISK */
+ case 0x5D: return 0x273D; /* HEAVY TEARDROP-SPOKED ASTERISK */
+ case 0x5E: return 0x273E; /* SIX PETALLED BLACK AND WHITE FLORETTE */
+ case 0x5F: return 0x273F; /* BLACK FLORETTE */
+ case 0x60: return 0x2740; /* WHITE FLORETTE */
+ case 0x61: return 0x2741; /* EIGHT PETALLED OUTLINED BLACK FLORETTE */
+ case 0x62: return 0x2742; /* CIRCLED OPEN CENTRE EIGHT POINTED STAR */
+ case 0x63: return 0x2743; /* HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK */
+ case 0x64: return 0x2744; /* SNOWFLAKE */
+ case 0x65: return 0x2745; /* TIGHT TRIFOLIATE SNOWFLAKE */
+ case 0x66: return 0x2746; /* HEAVY CHEVRON SNOWFLAKE */
+ case 0x67: return 0x2747; /* SPARKLE */
+ case 0x68: return 0x2748; /* HEAVY SPARKLE */
+ case 0x69: return 0x2749; /* BALLOON-SPOKED ASTERISK */
+ case 0x6A: return 0x274A; /* EIGHT TEARDROP-SPOKED PROPELLER ASTERISK */
+ case 0x6B: return 0x274B; /* HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK */
+ case 0x6C: return 0x25CF; /* BLACK CIRCLE */
+ case 0x6D: return 0x274D; /* SHADOWED WHITE CIRCLE */
+ case 0x6E: return 0x25A0; /* BLACK SQUARE */
+ case 0x6F: return 0x274F; /* LOWER RIGHT DROP-SHADOWED WHITE SQUARE */
+ case 0x70: return 0x2750; /* UPPER RIGHT DROP-SHADOWED WHITE SQUARE */
+ case 0x71: return 0x2751; /* LOWER RIGHT SHADOWED WHITE SQUARE */
+ case 0x72: return 0x2752; /* UPPER RIGHT SHADOWED WHITE SQUARE */
+ case 0x73: return 0x25B2; /* BLACK UP-POINTING TRIANGLE */
+ case 0x74: return 0x25BC; /* BLACK DOWN-POINTING TRIANGLE */
+ case 0x75: return 0x25C6; /* BLACK DIAMOND */
+ case 0x76: return 0x2756; /* BLACK DIAMOND MINUS WHITE X */
+ case 0x77: return 0x25D7; /* RIGHT HALF BLACK CIRCLE */
+ case 0x78: return 0x2758; /* LIGHT VERTICAL BAR */
+ case 0x79: return 0x2759; /* MEDIUM VERTICAL BAR */
+ case 0x7A: return 0x275A; /* HEAVY VERTICAL BAR */
+ case 0x7B: return 0x275B; /* HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT */
+ case 0x7C: return 0x275C; /* HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT */
+ case 0x7D: return 0x275D; /* HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT */
+ case 0x7E: return 0x275E; /* HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT */
+ case 0x80: return 0xF8D7; /* MEDIUM LEFT PARENTHESIS ORNAMENT */
+ case 0x81: return 0xF8D8; /* MEDIUM RIGHT PARENTHESIS ORNAMENT */
+ case 0x82: return 0xF8D9; /* MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT */
+ case 0x83: return 0xF8DA; /* MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT */
+ case 0x84: return 0xF8DB; /* MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT */
+ case 0x85: return 0xF8DC; /* MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT */
+ case 0x86: return 0xF8DD; /* HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT */
+ case 0x87: return 0xF8DE; /* HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT */
+ case 0x88: return 0xF8DF; /* HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT */
+ case 0x89: return 0xF8E0; /* HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT */
+ case 0x8A: return 0xF8E1; /* LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT */
+ case 0x8B: return 0xF8E2; /* LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT */
+ case 0x8C: return 0xF8E3; /* MEDIUM LEFT CURLY BRACKET ORNAMENT */
+ case 0x8D: return 0xF8E4; /* MEDIUM RIGHT CURLY BRACKET ORNAMENT */
+ case 0xA1: return 0x2761; /* CURVED STEM PARAGRAPH SIGN ORNAMENT */
+ case 0xA2: return 0x2762; /* HEAVY EXCLAMATION MARK ORNAMENT */
+ case 0xA3: return 0x2763; /* HEAVY HEART EXCLAMATION MARK ORNAMENT */
+ case 0xA4: return 0x2764; /* HEAVY BLACK HEART */
+ case 0xA5: return 0x2765; /* ROTATED HEAVY BLACK HEART BULLET */
+ case 0xA6: return 0x2766; /* FLORAL HEART */
+ case 0xA7: return 0x2767; /* ROTATED FLORAL HEART BULLET */
+ case 0xA8: return 0x2663; /* BLACK CLUB SUIT */
+ case 0xA9: return 0x2666; /* BLACK DIAMOND SUIT */
+ case 0xAA: return 0x2665; /* BLACK HEART SUIT */
+ case 0xAB: return 0x2660; /* BLACK SPADE SUIT */
+ case 0xAC: return 0x2460; /* CIRCLED DIGIT ONE */
+ case 0xAD: return 0x2461; /* CIRCLED DIGIT TWO */
+ case 0xAE: return 0x2462; /* CIRCLED DIGIT THREE */
+ case 0xAF: return 0x2463; /* CIRCLED DIGIT FOUR */
+ case 0xB0: return 0x2464; /* CIRCLED DIGIT FIVE */
+ case 0xB1: return 0x2465; /* CIRCLED DIGIT SIX */
+ case 0xB2: return 0x2466; /* CIRCLED DIGIT SEVEN */
+ case 0xB3: return 0x2467; /* CIRCLED DIGIT EIGHT */
+ case 0xB4: return 0x2468; /* CIRCLED DIGIT NINE */
+ case 0xB5: return 0x2469; /* CIRCLED NUMBER TEN */
+ case 0xB6: return 0x2776; /* DINGBAT NEGATIVE CIRCLED DIGIT ONE */
+ case 0xB7: return 0x2777; /* DINGBAT NEGATIVE CIRCLED DIGIT TWO */
+ case 0xB8: return 0x2778; /* DINGBAT NEGATIVE CIRCLED DIGIT THREE */
+ case 0xB9: return 0x2779; /* DINGBAT NEGATIVE CIRCLED DIGIT FOUR */
+ case 0xBA: return 0x277A; /* DINGBAT NEGATIVE CIRCLED DIGIT FIVE */
+ case 0xBB: return 0x277B; /* DINGBAT NEGATIVE CIRCLED DIGIT SIX */
+ case 0xBC: return 0x277C; /* DINGBAT NEGATIVE CIRCLED DIGIT SEVEN */
+ case 0xBD: return 0x277D; /* DINGBAT NEGATIVE CIRCLED DIGIT EIGHT */
+ case 0xBE: return 0x277E; /* DINGBAT NEGATIVE CIRCLED DIGIT NINE */
+ case 0xBF: return 0x277F; /* DINGBAT NEGATIVE CIRCLED NUMBER TEN */
+ case 0xC0: return 0x2780; /* DINGBAT CIRCLED SANS-SERIF DIGIT ONE */
+ case 0xC1: return 0x2781; /* DINGBAT CIRCLED SANS-SERIF DIGIT TWO */
+ case 0xC2: return 0x2782; /* DINGBAT CIRCLED SANS-SERIF DIGIT THREE */
+ case 0xC3: return 0x2783; /* DINGBAT CIRCLED SANS-SERIF DIGIT FOUR */
+ case 0xC4: return 0x2784; /* DINGBAT CIRCLED SANS-SERIF DIGIT FIVE */
+ case 0xC5: return 0x2785; /* DINGBAT CIRCLED SANS-SERIF DIGIT SIX */
+ case 0xC6: return 0x2786; /* DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN */
+ case 0xC7: return 0x2787; /* DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT */
+ case 0xC8: return 0x2788; /* DINGBAT CIRCLED SANS-SERIF DIGIT NINE */
+ case 0xC9: return 0x2789; /* DINGBAT CIRCLED SANS-SERIF NUMBER TEN */
+ case 0xCA: return 0x278A; /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE */
+ case 0xCB: return 0x278B; /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO */
+ case 0xCC: return 0x278C; /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE */
+ case 0xCD: return 0x278D; /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR */
+ case 0xCE: return 0x278E; /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE */
+ case 0xCF: return 0x278F; /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX */
+ case 0xD0: return 0x2790; /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN */
+ case 0xD1: return 0x2791; /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT */
+ case 0xD2: return 0x2792; /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE */
+ case 0xD3: return 0x2793; /* DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN */
+ case 0xD4: return 0x2794; /* HEAVY WIDE-HEADED RIGHTWARDS ARROW */
+ case 0xD5: return 0x2192; /* RIGHTWARDS ARROW */
+ case 0xD6: return 0x2194; /* LEFT RIGHT ARROW */
+ case 0xD7: return 0x2195; /* UP DOWN ARROW */
+ case 0xD8: return 0x2798; /* HEAVY SOUTH EAST ARROW */
+ case 0xD9: return 0x2799; /* HEAVY RIGHTWARDS ARROW */
+ case 0xDA: return 0x279A; /* HEAVY NORTH EAST ARROW */
+ case 0xDB: return 0x279B; /* DRAFTING POINT RIGHTWARDS ARROW */
+ case 0xDC: return 0x279C; /* HEAVY ROUND-TIPPED RIGHTWARDS ARROW */
+ case 0xDD: return 0x279D; /* TRIANGLE-HEADED RIGHTWARDS ARROW */
+ case 0xDE: return 0x279E; /* HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW */
+ case 0xDF: return 0x279F; /* DASHED TRIANGLE-HEADED RIGHTWARDS ARROW */
+ case 0xE0: return 0x27A0; /* HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW */
+ case 0xE1: return 0x27A1; /* BLACK RIGHTWARDS ARROW */
+ case 0xE2: return 0x27A2; /* THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD */
+ case 0xE3: return 0x27A3; /* THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD */
+ case 0xE4: return 0x27A4; /* BLACK RIGHTWARDS ARROWHEAD */
+ case 0xE5: return 0x27A5; /* HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW */
+ case 0xE6: return 0x27A6; /* HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW */
+ case 0xE7: return 0x27A7; /* SQUAT BLACK RIGHTWARDS ARROW */
+ case 0xE8: return 0x27A8; /* HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW */
+ case 0xE9: return 0x27A9; /* RIGHT-SHADED WHITE RIGHTWARDS ARROW */
+ case 0xEA: return 0x27AA; /* LEFT-SHADED WHITE RIGHTWARDS ARROW */
+ case 0xEB: return 0x27AB; /* BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW */
+ case 0xEC: return 0x27AC; /* FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW */
+ case 0xED: return 0x27AD; /* HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW */
+ case 0xEE: return 0x27AE; /* HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW */
+ case 0xEF: return 0x27AF; /* NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW */
+ case 0xF1: return 0x27B1; /* NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW */
+ case 0xF2: return 0x27B2; /* CIRCLED HEAVY WHITE RIGHTWARDS ARROW */
+ case 0xF3: return 0x27B3; /* WHITE-FEATHERED RIGHTWARDS ARROW */
+ case 0xF4: return 0x27B4; /* BLACK-FEATHERED SOUTH EAST ARROW */
+ case 0xF5: return 0x27B5; /* BLACK-FEATHERED RIGHTWARDS ARROW */
+ case 0xF6: return 0x27B6; /* BLACK-FEATHERED NORTH EAST ARROW */
+ case 0xF7: return 0x27B7; /* HEAVY BLACK-FEATHERED SOUTH EAST ARROW */
+ case 0xF8: return 0x27B8; /* HEAVY BLACK-FEATHERED RIGHTWARDS ARROW */
+ case 0xF9: return 0x27B9; /* HEAVY BLACK-FEATHERED NORTH EAST ARROW */
+ case 0xFA: return 0x27BA; /* TEARDROP-BARBED RIGHTWARDS ARROW */
+ case 0xFB: return 0x27BB; /* HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW */
+ case 0xFC: return 0x27BC; /* WEDGE-TAILED RIGHTWARDS ARROW */
+ case 0xFD: return 0x27BD; /* HEAVY WEDGE-TAILED RIGHTWARDS ARROW */
+ case 0xFE: return 0x27BE; /* OPEN-OUTLINED RIGHTWARDS ARROW */
+ default: return 0x0000;
+ }
+};
+
+/*
+ * Unicode mapping found in
+ * /usr/share/fonts/encodings/adobe-symbol.enc.gz
+ * Duplicates are disabled
+ */
+XftChar32 map_symbols(XftChar8 in)
+{
+ switch(in) {
+ case 0x20: return 0x0020; /* SPACE */
+ case 0x21: return 0x0021; /* EXCLAMATION MARK */
+ case 0x23: return 0x0023; /* NUMBER SIGN */
+ case 0x25: return 0x0025; /* PERCENT SIGN */
+ case 0x26: return 0x0026; /* AMPERSAND */
+ case 0x28: return 0x0028; /* OPENING PARENTHESIS */
+ case 0x29: return 0x0029; /* CLOSING PARENTHESIS */
+ case 0x2B: return 0x002B; /* PLUS SIGN */
+ case 0x2C: return 0x002C; /* COMMA */
+ case 0x2E: return 0x002E; /* PERIOD */
+ case 0x2F: return 0x002F; /* SLASH */
+ case 0x30: return 0x0030; /* DIGIT ZERO */
+ case 0x31: return 0x0031; /* DIGIT ONE */
+ case 0x32: return 0x0032; /* DIGIT TWO */
+ case 0x33: return 0x0033; /* DIGIT THREE */
+ case 0x34: return 0x0034; /* DIGIT FOUR */
+ case 0x35: return 0x0035; /* DIGIT FIVE */
+ case 0x36: return 0x0036; /* DIGIT SIX */
+ case 0x37: return 0x0037; /* DIGIT SEVEN */
+ case 0x38: return 0x0038; /* DIGIT EIGHT */
+ case 0x39: return 0x0039; /* DIGIT NINE */
+ case 0x3A: return 0x003A; /* COLON */
+ case 0x3B: return 0x003B; /* SEMICOLON */
+ case 0x3C: return 0x003C; /* LESS-THAN SIGN */
+ case 0x3D: return 0x003D; /* EQUALS SIGN */
+ case 0x3E: return 0x003E; /* GREATER-THAN SIGN */
+ case 0x3F: return 0x003F; /* QUESTION MARK */
+ case 0x5B: return 0x005B; /* OPENING SQUARE BRACKET */
+ case 0x5D: return 0x005D; /* CLOSING SQUARE BRACKET */
+ case 0x5F: return 0x005F; /* SPACING UNDERSCORE */
+ case 0x7B: return 0x007B; /* OPENING CURLY BRACKET */
+ case 0x7C: return 0x007C; /* VERTICAL BAR */
+ case 0x7D: return 0x007D; /* CLOSING CURLY BRACKET */
+ case 0xD3: return 0x00A9; /* COPYRIGHT SIGN */
+ case 0xE3: return 0x00A9; /* COPYRIGHT SIGN */
+ case 0xD8: return 0x00AC; /* NOT SIGN */
+ case 0xD2: return 0x00AE; /* REGISTERED TRADE MARK SIGN */
+ case 0xE2: return 0x00AE; /* REGISTERED TRADE MARK SIGN */
+ case 0xB0: return 0x00B0; /* DEGREE SIGN */
+ case 0xB1: return 0x00B1; /* PLUS-OR-MINUS SIGN */
+ case 0xB4: return 0x00D7; /* MULTIPLICATION SIGN */
+ case 0xB8: return 0x00F7; /* DIVISION SIGN */
+ case 0xA6: return 0x0192; /* LATIN SMALL LETTER SCRIPT F */
+ case 0x41: return 0x0391; /* GREEK CAPITAL LETTER ALPHA */
+ case 0x42: return 0x0392; /* GREEK CAPITAL LETTER BETA */
+ case 0x47: return 0x0393; /* GREEK CAPITAL LETTER GAMMA */
+ case 0x44: return 0x0394; /* GREEK CAPITAL LETTER DELTA */
+ case 0x45: return 0x0395; /* GREEK CAPITAL LETTER EPSILON */
+ case 0x5A: return 0x0396; /* GREEK CAPITAL LETTER ZETA */
+ case 0x48: return 0x0397; /* GREEK CAPITAL LETTER ETA */
+ case 0x51: return 0x0398; /* GREEK CAPITAL LETTER THETA */
+ case 0x49: return 0x0399; /* GREEK CAPITAL LETTER IOTA */
+ case 0x4B: return 0x039A; /* GREEK CAPITAL LETTER KAPPA */
+ case 0x4C: return 0x039B; /* GREEK CAPITAL LETTER LAMBDA */
+ case 0x4D: return 0x039C; /* GREEK CAPITAL LETTER MU */
+ case 0x4E: return 0x039D; /* GREEK CAPITAL LETTER NU */
+ case 0x58: return 0x039E; /* GREEK CAPITAL LETTER XI */
+ case 0x4F: return 0x039F; /* GREEK CAPITAL LETTER OMICRON */
+ case 0x50: return 0x03A0; /* GREEK CAPITAL LETTER PI */
+ case 0x52: return 0x03A1; /* GREEK CAPITAL LETTER RHO */
+ case 0x53: return 0x03A3; /* GREEK CAPITAL LETTER SIGMA */
+ case 0x54: return 0x03A4; /* GREEK CAPITAL LETTER TAU */
+ case 0x55: return 0x03A5; /* GREEK CAPITAL LETTER UPSILON */
+ case 0x46: return 0x03A6; /* GREEK CAPITAL LETTER PHI */
+ case 0x43: return 0x03A7; /* GREEK CAPITAL LETTER CHI */
+ case 0x59: return 0x03A8; /* GREEK CAPITAL LETTER PSI */
+ case 0x57: return 0x03A9; /* GREEK CAPITAL LETTER OMEGA */
+ case 0x61: return 0x03B1; /* GREEK SMALL LETTER ALPHA */
+ case 0x62: return 0x03B2; /* GREEK SMALL LETTER BETA */
+ case 0x67: return 0x03B3; /* GREEK SMALL LETTER GAMMA */
+ case 0x64: return 0x03B4; /* GREEK SMALL LETTER DELTA */
+ case 0x65: return 0x03B5; /* GREEK SMALL LETTER EPSILON */
+ case 0x7A: return 0x03B6; /* GREEK SMALL LETTER ZETA */
+ case 0x68: return 0x03B7; /* GREEK SMALL LETTER ETA */
+ case 0x71: return 0x03B8; /* GREEK SMALL LETTER THETA */
+ case 0x69: return 0x03B9; /* GREEK SMALL LETTER IOTA */
+ case 0x6B: return 0x03BA; /* GREEK SMALL LETTER KAPPA */
+ case 0x6C: return 0x03BB; /* GREEK SMALL LETTER LAMBDA */
+ case 0x6D: return 0x03BC; /* GREEK SMALL LETTER MU */
+ case 0x6E: return 0x03BD; /* GREEK SMALL LETTER NU */
+ case 0x78: return 0x03BE; /* GREEK SMALL LETTER XI */
+ case 0x6F: return 0x03BF; /* GREEK SMALL LETTER OMICRON */
+ case 0x70: return 0x03C0; /* GREEK SMALL LETTER PI */
+ case 0x72: return 0x03C1; /* GREEK SMALL LETTER RHO */
+ case 0x56: return 0x03C2; /* GREEK SMALL LETTER FINAL SIGMA */
+ case 0x73: return 0x03C3; /* GREEK SMALL LETTER SIGMA */
+ case 0x74: return 0x03C4; /* GREEK SMALL LETTER TAU */
+ case 0x75: return 0x03C5; /* GREEK SMALL LETTER UPSILON */
+ case 0x66: return 0x03C6; /* GREEK SMALL LETTER PHI */
+ case 0x63: return 0x03C7; /* GREEK SMALL LETTER CHI */
+ case 0x79: return 0x03C8; /* GREEK SMALL LETTER PSI */
+ case 0x77: return 0x03C9; /* GREEK SMALL LETTER OMEGA */
+ case 0x4A: return 0x03D1; /* GREEK SMALL LETTER SCRIPT THETA */
+ case 0xA1: return 0x03D2; /* GREEK CAPITAL LETTER UPSILON HOOK */
+ case 0x6A: return 0x03D5; /* GREEK SMALL LETTER SCRIPT PHI */
+ case 0x76: return 0x03D6; /* GREEK SMALL LETTER OMEGA PI */
+ case 0xB7: return 0x2022; /* BULLET */
+ case 0xBC: return 0x2026; /* HORIZONTAL ELLIPSIS */
+ case 0xA2: return 0x2032; /* PRIME */
+ case 0xB2: return 0x2033; /* DOUBLE PRIME */
+ case 0x60: return 0x203E; /* SPACING OVERSCORE */
+ case 0xA4: return 0x2044; /* FRACTION SLASH */
+ case 0xC1: return 0x2111; /* BLACK-LETTER I */
+ case 0xC3: return 0x2118; /* SCRIPT P */
+ case 0xC2: return 0x211C; /* BLACK-LETTER R */
+ case 0xD4: return 0x2122; /* TRADEMARK */
+ case 0xE4: return 0x2122; /* TRADEMARK */
+/* case 0x57: return 0x2126; /* OHM */
+ case 0xC0: return 0x2135; /* FIRST TRANSFINITE CARDINAL */
+ case 0xAC: return 0x2190; /* LEFT ARROW */
+ case 0xAD: return 0x2191; /* UP ARROW */
+ case 0xAE: return 0x2192; /* RIGHT ARROW */
+ case 0xAF: return 0x2193; /* DOWN ARROW */
+ case 0xAB: return 0x2194; /* LEFT RIGHT ARROW */
+ case 0xBF: return 0x21B5; /* DOWN ARROW WITH CORNER LEFT */
+ case 0xDC: return 0x21D0; /* LEFT DOUBLE ARROW */
+ case 0xDD: return 0x21D1; /* UP DOUBLE ARROW */
+ case 0xDE: return 0x21D2; /* RIGHT DOUBLE ARROW */
+ case 0xDF: return 0x21D3; /* DOWN DOUBLE ARROW */
+ case 0xDB: return 0x21D4; /* LEFT RIGHT DOUBLE ARROW */
+ case 0x22: return 0x2200; /* FOR ALL */
+ case 0xB6: return 0x2202; /* PARTIAL DIFFERENTIAL */
+ case 0x24: return 0x2203; /* THERE EXISTS */
+ case 0xC6: return 0x2205; /* EMPTY SET */
+/* case 0x44: return 0x2206; /* INCREMENT */
+ case 0xD1: return 0x2207; /* NABLA */
+ case 0xCE: return 0x2208; /* ELEMENT OF */
+ case 0xCF: return 0x2209; /* NOT AN ELEMENT OF */
+ case 0x27: return 0x220B; /* CONTAINS AS MEMBER */
+ case 0xD5: return 0x220F; /* N-ARY PRODUCT */
+ case 0xE5: return 0x2211; /* N-ARY SUMMATION */
+ case 0x2D: return 0x2212; /* MINUS SIGN */
+/* case 0xA4: return 0x2215; /* DIVISION SLASH */
+ case 0x2A: return 0x2217; /* ASTERISK OPERATOR */
+ case 0xD6: return 0x221A; /* SQUARE ROOT */
+ case 0xB5: return 0x221D; /* PROPORTIONAL TO */
+ case 0xA5: return 0x221E; /* INFINITY */
+ case 0xD0: return 0x2220; /* ANGLE */
+ case 0xD9: return 0x2227; /* LOGICAL AND */
+ case 0xDA: return 0x2228; /* LOGICAL OR */
+ case 0xC7: return 0x2229; /* INTERSECTION */
+ case 0xC8: return 0x222A; /* UNION */
+ case 0xF2: return 0x222B; /* INTEGRAL */
+ case 0x5C: return 0x2234; /* THEREFORE */
+ case 0x7E: return 0x223C; /* TILDE OPERATOR */
+ case 0x40: return 0x2245; /* APPROXIMATELY EQUAL TO */
+ case 0xBB: return 0x2248; /* ALMOST EQUAL TO */
+ case 0xB9: return 0x2260; /* NOT EQUAL TO */
+ case 0xBA: return 0x2261; /* IDENTICAL TO */
+ case 0xA3: return 0x2264; /* LESS THAN OR EQUAL TO */
+ case 0xB3: return 0x2265; /* GREATER THAN OR EQUAL TO */
+ case 0xCC: return 0x2282; /* SUBSET OF */
+ case 0xC9: return 0x2283; /* SUPERSET OF */
+ case 0xCB: return 0x2284; /* NOT A SUBSET OF */
+ case 0xCD: return 0x2286; /* SUBSET OF OR EQUAL TO */
+ case 0xCA: return 0x2287; /* SUPERSET OF OR EQUAL TO */
+ case 0xC5: return 0x2295; /* CIRCLED PLUS */
+ case 0xC4: return 0x2297; /* CIRCLED TIMES */
+ case 0x5E: return 0x22A5; /* UP TACK */
+ case 0xD7: return 0x22C5; /* DOT OPERATOR */
+ case 0xF3: return 0x2320; /* TOP HALF INTEGRAL */
+ case 0xF5: return 0x2321; /* BOTTOM HALF INTEGRAL */
+ case 0xE1: return 0x2329; /* BRA */
+ case 0xF1: return 0x232A; /* KET */
+ case 0xE0: return 0x25CA; /* LOZENGE */
+ case 0xAA: return 0x2660; /* BLACK SPADE SUIT */
+ case 0xA7: return 0x2663; /* BLACK CLUB SUIT */
+ case 0xA9: return 0x2665; /* BLACK HEART SUIT */
+ case 0xA8: return 0x2666; /* BLACK DIAMOND SUIT */
+ default: return 0x0000;
+ }
+};
+
+map_f adobe_charset(XftFont *font)
+{
+ map_f map = NULL;
+
+ /*
+ * Hack: does this font has small a in its charset?
+ * If not it is likly a Symbol or a Dingbats derivate.
+ */
+ if (XftCharExists(tool_d, font, 0x61))
+ return NULL;
+ else {
+ XftChar8 *pattern = FcNameUnparse(font->pattern);
+ char *fullname;
+
+ if ((fullname = strcasestr((char*)pattern, "fullname="))) {
+ char *colon;
+
+ fullname += 9;
+ if (colon = strchr(fullname, ':'))
+ *colon = '\0';
+ if (strcasestr(fullname, "symbol"))
+ map = map_symbols;
+ else if (strcasestr(fullname, "dingbats"))
+ map = map_dingbats;
+ else if (strcasestr(fullname, "d050000l"))
+ map = map_dingbats;
+ free(pattern);
+ }
+ }
+ return map;
+}
--- src/u_fonts.h
+++ src/u_fonts.h 2023-09-19 10:01:32.672091235 +0000
@@ -71,4 +71,15 @@ extern void text_origin(int *draw_x, int
extern struct _fstruct ps_fontinfo[];
extern struct _fstruct latex_fontinfo[];
+/*
+ * For (ITC) Zapf Dingbats, URW Dingbats, or URW D050000L as well
+ * as Symbol, Standard Symbols PS, or URW Standard Symbols L we
+ * need to map the byte characters into UTF-8 multi byte characters.
+ * This to make XftTextExtentsUtf8() and XftDrawStringUtf8() working.
+ */
+typedef XftChar8 *(*map_f)(XftChar8);
+extern XftChar32 map_dingbats(XftChar8);
+extern XftChar32 map_symbols(XftChar8);
+extern map_f adobe_charset(XftFont *font);
+
#endif /* U_FONTS_H */
--- src/w_drawprim.c
+++ src/w_drawprim.c 2023-09-19 10:01:32.672091235 +0000
@@ -162,6 +162,8 @@ pw_xfttext(XftDraw *xftdraw, int x, int
{
int zy = ZOOMY(y);
int zx = ZOOMX(x);
+ size_t len = strlen(s);
+ map_f map = NULL;
/* XGlyphInfo extents; */
if (*s == '\0')
@@ -181,8 +183,19 @@ pw_xfttext(XftDraw *xftdraw, int x, int
if (check_cancel())
return;
- XftDrawStringUtf8(xftdraw, &xftcolor[c], font, zx, zy, (XftChar8 *)s,
- (int)strlen(s));
+ if ((map = adobe_charset(font))) {
+ XftChar32 glyphs[len];
+ int glen = 0;
+
+ for (XftChar8 *chr = (XftChar8 *)s; chr < s+len; chr++) {
+ XftChar32 glyph = XftCharIndex(tool_d, font, map(*chr));
+ if (glyph)
+ glyphs[glen++] = glyph;
+ }
+ XftDrawGlyphs(xftdraw, &xftcolor[c], font, zx, zy, glyphs, glen);
+ } else
+ XftDrawStringUtf8(xftdraw, &xftcolor[c], font, zx, zy,
+ (XftChar8*)s, (int)len);
}
/* print "string" in window "w" using font specified in fstruct

View File

@ -1,15 +0,0 @@
---
src/u_fonts.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- src/u_fonts.h
+++ src/u_fonts.h 2024-08-28 07:00:30.512232174 +0000
@@ -77,7 +77,7 @@ extern struct _fstruct latex_fontinfo[];
* need to map the byte characters into UTF-8 multi byte characters.
* This to make XftTextExtentsUtf8() and XftDrawStringUtf8() working.
*/
-typedef XftChar8 *(*map_f)(XftChar8);
+typedef XftChar32 (*map_f)(XftChar8);
extern XftChar32 map_dingbats(XftChar8);
extern XftChar32 map_symbols(XftChar8);
extern map_f adobe_charset(XftFont *font);

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8e02e971991f3340d86fc8529e51ec000809f71207f3276856414172718d61d6
size 5380408

3
xfig-3.2.9a.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:933293bccca0d0e1d12aae49f0b1a27d117c92c4c7078d7aaafc122b76dc66f9
size 5378540

View File

@ -1,45 +0,0 @@
---
src/main.c | 32 ++++++++++++++++++++++++++++++--
1 file changed, 30 insertions(+), 2 deletions(-)
--- src/main.c
+++ src/main.c 2023-09-13 09:37:09.600980464 +0000
@@ -366,8 +366,36 @@ static XtResource application_resources[
XtOffset(appresPtr, font_menu_language), XtRString, (caddr_t) ""},
{"fixedFontSet", "FontSet", XtRFontSet, sizeof(XFontSet),
XtOffset(appresPtr, fixed_fontset), XtRString,
- (caddr_t) "-*-times-medium-r-normal--16-*-*-*-*-*-*-*,"
- "-*-*-medium-r-normal--16-*-*-*-*-*-*-*,*--16-*" },
+ (caddr_t) "-urw-nimbus roman no9 l-medium-r-normal--34-*-*-*-*-*-*-*,"
+ "-*-*-medium-r-normal--24-*-*-*-*-*-jisx0208.1983-0,"
+ "-*-*-medium-r-normal--24-*-*-*-*-*-ksc5601.1987-0,"
+ "-*-times-medium-r-normal--24-*-*-*-*-*-*-*,"
+ "-*-*-medium-r-normal--24-*-*-*-*-*-*-*,*--24-*,"
+ "-*-times-medium-r-normal--16-*-*-*-*-*-*-*,"
+ "-*-*-medium-r-normal--16-*-*-*-*-*-*-*,*--16-*"
+ }, /*
+ {"normalFontSet", "NormalFontSet", XtRFontSet, sizeof(XFontSet),
+ XtOffset(appresPtr, normal_fontset), XtRString,
+ (caddr_t) "-urw-nimbus roman no9 l-medium-r-normal--34-*-*-*-*-*-*-*,"
+ "-*-*-medium-r-normal--24-*-*-*-*-*-jisx0208.1983-0,"
+ "-*-*-medium-r-normal--24-*-*-*-*-*-ksc5601.1987-0,"
+ "-*-times-medium-r-normal--24-*-*-*-*-*-*-*,"
+ "-*-*-medium-r-normal--24-*-*-*-*-*-*-*,"
+ "-*-*-*-r-*--24-*-*-*-*-*-*-*,"
+ "-*-times-medium-r-normal--16-*-*-*-*-*-*-*,"
+ "-*-*-medium-r-normal--16-*-*-*-*-*-*-*,*--16-*"
+ },
+ {"boldFontSet", "BoldFontSet", XtRFontSet, sizeof(XFontSet),
+ XtOffset(appresPtr, bold_fontset), XtRString,
+ (caddr_t) "-urw-nimbus roman no9 l-bold-r-normal--34-*-*-*-*-*-*-*,"
+ "-*-*-bold-r-normal--24-*-*-*-*-*-jisx0208.1983-0,"
+ "-*-*-bold-r-normal--24-*-*-*-*-*-ksc5601.1987-0,"
+ "-*-times-bold-r-normal--24-*-*-*-*-*-*-*,"
+ "-*-*-bold-r-normal--24-*-*-*-*-*-*-*,"
+ "-*-*-*-r-*--24-*-*-*-*-*-*-*,"
+ "-*-times-medium-r-normal--16-*-*-*-*-*-*-*,"
+ "-*-*-medium-r-normal--16-*-*-*-*-*-*-*,*--16-*"
+ }, */
{"fontSetSize", "FontSetSize", XtRInt, sizeof(int),
XtOffset(appresPtr, fontset_size), XtRImmediate, (caddr_t)0 },
{"inputStyle", "InputStyle", XtRString, sizeof(char *),

View File

@ -4,7 +4,7 @@
--- src/w_layers.c
+++ src/w_layers.c 2016-09-22 08:45:38.381908911 +0000
@@ -128,9 +128,27 @@ init_depth_panel(Widget parent)
@@ -121,9 +121,27 @@ init_depth_panel(Widget parent)
{
Widget label, below;
Widget layer_viewform;
@ -34,7 +34,7 @@
/* main form to hold all the layer stuff */
@@ -385,11 +403,18 @@ void
@@ -335,11 +353,18 @@ void
setup_depth_panel(void)
{
Dimension ind_ht, snap_ht=0;

View File

@ -12,7 +12,7 @@
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
@@ -805,9 +806,6 @@ main(int argc, char **argv)
@@ -780,9 +781,6 @@ main(int argc, char **argv)
}
}
@ -22,7 +22,7 @@
/*
* save the command line arguments
*/
@@ -914,6 +912,10 @@ main(int argc, char **argv)
@@ -889,6 +887,10 @@ main(int argc, char **argv)
else
setup_icons_big();
@ -33,7 +33,7 @@
/*************************************************/
/* indicate if the international option is unset */
/*************************************************/
@@ -1663,6 +1665,9 @@ setup_visual(int *argc_p, char **argv, A
@@ -1638,6 +1640,9 @@ setup_visual(int *argc_p, char **argv, A
*/
tool = XtAppInitialize (&tool_app, "Fig", options, XtNumber (options),
argc_p, argv, fallback_resources, args, 0);

View File

@ -6,7 +6,7 @@
--- src/w_dir.c
+++ src/w_dir.c 2023-09-13 09:39:27.454515496 +0000
@@ -151,6 +151,8 @@ FileSelected(Widget w, XtPointer client_
@@ -148,6 +148,8 @@ FileSelected(Widget w, XtPointer client_
XawListReturnStruct *ret_struct = (XawListReturnStruct *) call_data;
@ -15,7 +15,7 @@
strcpy(CurrentSelectionName, ret_struct->string);
FirstArg(XtNstring, CurrentSelectionName);
if (browse_up) {
@@ -185,6 +187,8 @@ DirSelected(Widget w, XtPointer client_d
@@ -182,6 +184,8 @@ DirSelected(Widget w, XtPointer client_d
XawListReturnStruct *ret_struct = (XawListReturnStruct *) call_data;
@ -26,7 +26,7 @@
}
--- src/w_library.c
+++ src/w_library.c 2023-09-13 09:38:05.523980529 +0000
@@ -514,6 +514,8 @@ NewObjectSel(Widget w, XtPointer closure
@@ -503,6 +503,8 @@ NewObjectSel(Widget w, XtPointer closure
int new_obj;
XawListReturnStruct *ret_struct = (XawListReturnStruct *) call_data;
@ -37,7 +37,7 @@
/* unhighlight the current view icon */
--- src/w_srchrepl.c
+++ src/w_srchrepl.c 2023-09-13 09:40:26.341462455 +0000
@@ -918,6 +918,9 @@ spell_select_word(Widget widget, XtPoint
@@ -921,6 +921,9 @@ spell_select_word(Widget widget, XtPoint
(void)widget; (void)closure;
XawListReturnStruct *ret_struct = (XawListReturnStruct *) call_data;

View File

@ -1,3 +1,40 @@
-------------------------------------------------------------------
Tue Jan 7 13:34:13 UTC 2025 - Dr. Werner Fink <werner@suse.de>
- Update to xfig 3.2.9a
this is Patchlevel 9a (Dez 2024)
CHANGES:
Ticket numbers refer to https://sourceforge.net/p/mcj/tickets/#.
* Remove application resource fixedFontSet, fontSetSize.
* Use float fontsizes, ticket #168.
BUGS FIXED:
* Enable compilation with libxaw, instead of libxaw3d, #138, #174.
* Speed up drawing of a lot (thousands) of text objects, ticket #166.
* Draw text in a user color, ticket #180.
* Correctly place text into dimension lines, ticket #179.
* Enable compilation on Mac Darwin, ticket #177.
* Only print active layers if required, ticket #172.
* Place line length values at saner locations, ticket #167.
* Do not crash on export to pdf/latex under some circumstances, #165.
* Export only active layers, ticket #163.
* Sanitize sed script for build on Darwin, ticket #162.
* Show symbol and dingbats fonts, ticket #159.
- Remove obsolete patches now upstream
* xfig-3.2.9-gcc14.patch
* Fix-exporting-only-active-layers-ticket-163.patch
* Sanitize-a-call-to-realloc-ticket-165.patch
* 042708.patch
* 7e0157.patch
* a038d6.patch
* f3466c.patch
- Remove patch xfig.3.2.3d-international-std-fonts.dif as outdated with UTF-8
- Remove patch xfig-3.2.9-dingbats.dif as we use now URW fonts only
- Port patches
* xfig-3.2.6.dif
* xfig.3.2.5b-fixes.dif
* xfig.3.2.5b-locale.dif
* xfig.3.2.5b-null.dif
-------------------------------------------------------------------
Mon Sep 9 08:00:03 UTC 2024 - Dr. Werner Fink <werner@suse.de>

View File

@ -1,10 +0,0 @@
[Desktop Entry]
Categories=VectorGraphics
Exec=@@BINDIR@@/xfig
InitialPreference=2
MimeType=image/x-xfig;
Name=xfig
GenericName=Vector Drawing
Terminal=false
Type=Application
Icon=xfig

View File

@ -1,7 +1,7 @@
#
# spec file for package xfig
#
# Copyright (c) 2024 SUSE LLC
# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -17,7 +17,7 @@
Name: xfig
Version: 3.2.9
Version: 3.2.9a
Release: 0
Summary: Facility for Interactive Generation of Figures under the X Window System
License: MIT
@ -32,25 +32,10 @@ URL: https://sourceforge.net/projects/mcj/
#Source: https://sourceforge.net/projects/mcj/files/xfig-%{version}.tar.xz/download#/xfig-%{version}.tar.xz
Source: xfig-%{version}.tar.xz
Source1: font-test.fig
Source4: xfig.desktop
Patch0: xfig-3.2.6.dif
Patch1: xfig-3.2.9-dingbats.dif
Patch3: xfig.3.2.3d-international-std-fonts.dif
# PATCH-FIX-UPSTREAM xfig.3.2.5b-mediaboxrealnb.dif [debian#530898]
Patch5: xfig.3.2.5b-null.dif
Patch6: xfig.3.2.5b-locale.dif
Patch7: xfig.3.2.5b-fixes.dif
# PATCH-FIX-UPSTREAM
Patch8: Sanitize-a-call-to-realloc-ticket-165.patch
# PATCH-FIX-UPSTREAM
Patch9: Fix-exporting-only-active-layers-ticket-163.patch
# PATCH-FIX-UPSTREAM
Patch10: xfig-3.2.9-gcc14.patch
# PATCH-FIX-UPSTREAM for boo#1230298 / upstream bug report #179
Patch11: 042708.patch
Patch12: 7e0157.patch
Patch13: a038d6.patch
Patch14: f3466c.patch
BuildRequires: dos2unix
BuildRequires: fdupes
BuildRequires: flex
@ -74,7 +59,7 @@ BuildRequires: pkgconfig(xt)
Requires: efont-unicode
Requires: fontconfig
%if 0%{?suse_version} >= 1699
Requires: (ghostscript-fonts-std or urw-base35-fonts)
Requires: urw-base35-fonts
%else
Requires: ghostscript-fonts-std
%endif
@ -109,18 +94,9 @@ find -type f | while read file; do
done
set -x
%patch -P0
%patch -P1 -b .dingbats
%patch -P3 -b .international-std-fonts
%patch -P5 -b .null
%patch -P6 -b .locale
%patch -P7 -b .fixes
%patch -P8 -p1
%patch -P9 -p1
%patch -P10
%patch -P11
%patch -P12
%patch -P13
%patch -P14
cp %{SOURCE1} .
test ! -e Libraries/Examples/aircraft.fig || { echo forbidden file found 1>&2; exit 1; }
@ -147,7 +123,7 @@ find -name '*.bak' -exec rm -vf '{}' \+
mv %{buildroot}%{_mandir}/man1/xfig.1 %{buildroot}%{_mandir}/man1/xfig.1x
gzip -9 %{buildroot}%{_mandir}/man1/xfig.1x
%fdupes %{buildroot}
%suse_update_desktop_file xfig VectorGraphics
%suse_update_desktop_file %{buildroot}%{_datadir}/applications/org.%name.%name.desktop VectorGraphics
%files
%defattr(-,root,root,755)
@ -155,9 +131,10 @@ gzip -9 %{buildroot}%{_mandir}/man1/xfig.1x
%dir %{_datadir}/X11/app-defaults
%{_datadir}/X11/app-defaults/Fig
%{_bindir}/xfig*
%{_datadir}/applications/xfig.desktop
%{_datadir}/applications/*xfig.desktop
%{_datadir}/metainfo/*xfig.metainfo.xml
%{_datadir}/pixmaps/xfig.png
%{_datadir}/xfig
%{_mandir}/man1/xfig.1*.gz
%{_mandir}/man1/xfig.1*%{?ext_man}
%changelog