From 41a383045225d4848cd3b7ec2c69e9fc5a48318b Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: May 17 2022 09:52:46 +0000 Subject: import paps-0.7.1-4.el9 --- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..62aee9b --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +SOURCES/paps-0.6.8.tar.gz +SOURCES/paps-0.7.1.tar.gz diff --git a/.paps.metadata b/.paps.metadata new file mode 100644 index 0000000..bdedd67 --- /dev/null +++ b/.paps.metadata @@ -0,0 +1,2 @@ +83646b0de89deb8321f260c2c5a665bc7c8f5928 SOURCES/paps-0.6.8.tar.gz +2454b902540afe5d653fc5f1eea743d037ce3c98 SOURCES/paps-0.7.1.tar.gz diff --git a/SOURCES/29-paps.conf b/SOURCES/29-paps.conf new file mode 100644 index 0000000..1ae98a4 --- /dev/null +++ b/SOURCES/29-paps.conf @@ -0,0 +1,24 @@ + + + + + + + paps + + + true + + + + + + texttopaps + + + true + + + + + diff --git a/SOURCES/paps-0.6.6-lcnumeric.patch b/SOURCES/paps-0.6.6-lcnumeric.patch new file mode 100644 index 0000000..0276525 --- /dev/null +++ b/SOURCES/paps-0.6.6-lcnumeric.patch @@ -0,0 +1,82 @@ +diff -ruN paps-0.6.6.orig/src/libpaps.c paps-0.6.6/src/libpaps.c +--- paps-0.6.6.orig/src/libpaps.c 2007-03-27 20:25:00.000000000 +0900 ++++ paps-0.6.6/src/libpaps.c 2007-03-27 20:31:15.000000000 +0900 +@@ -28,6 +28,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -263,7 +264,7 @@ + ); + + /* Outline support */ +- g_string_append_printf(paps->header, ++ paps_string_append_printf(paps->header, + "/conicto {\n" + " /to_y exch def\n" + " /to_x exch def\n" +@@ -691,3 +692,28 @@ + return points * 1.0 / 72 * PAPS_DPI * PANGO_SCALE; + } + ++void ++paps_string_append_printf(GString *string, ++ const gchar *fmt, ++ ...) ++{ ++ gchar *buffer, *lc_numeric; ++ gint length; ++ va_list args; ++ ++ va_start(args, fmt); ++ ++ lc_numeric = g_strdup(setlocale(LC_NUMERIC, NULL)); ++ setlocale(LC_NUMERIC, "C"); ++ ++ length = g_vasprintf(&buffer, fmt, args); ++ g_string_append_len(string, buffer, length); ++ ++ setlocale(LC_NUMERIC, lc_numeric); ++ ++ g_free(buffer); ++ g_free(lc_numeric); ++ ++ va_end(args); ++} ++ +diff -ruN paps-0.6.6.orig/src/libpaps.h paps-0.6.6/src/libpaps.h +--- paps-0.6.6.orig/src/libpaps.h 2007-03-27 20:25:00.000000000 +0900 ++++ paps-0.6.6/src/libpaps.h 2007-03-27 20:31:02.000000000 +0900 +@@ -124,4 +124,8 @@ + */ + double paps_postscript_points_to_pango(double points); + ++void paps_string_append_printf(GString *string, ++ const gchar *fmt, ++ ...) G_GNUC_PRINTF (2, 3); ++ + #endif /* LIBPAPS */ +diff -ruN paps-0.6.6.orig/src/paps.c paps-0.6.6/src/paps.c +--- paps-0.6.6.orig/src/paps.c 2007-03-27 20:25:00.000000000 +0900 ++++ paps-0.6.6/src/paps.c 2007-03-27 20:31:33.000000000 +0900 +@@ -992,7 +992,7 @@ + y_top = page_layout->page_height - page_layout->top_margin - page_layout->header_height - page_layout->header_sep / 2; + y_bot = page_layout->bottom_margin - page_layout->footer_height; + +- g_string_append_printf(ps_pages_string, ++ paps_string_append_printf(ps_pages_string, + "%f %f moveto %f %f lineto 0 setlinewidth stroke\n", + x_pos, y_top, + x_pos, y_bot); +@@ -1154,7 +1154,7 @@ + + /* header separator */ + line_pos = page_layout->page_height - page_layout->top_margin - page_layout->header_height - page_layout->header_sep / 2; +- g_string_append_printf(ps_pages_string, ++ paps_string_append_printf(ps_pages_string, + "%d %f moveto %d %f lineto 0 setlinewidth stroke\n", + page_layout->left_margin, line_pos, + page_layout->page_width - page_layout->right_margin, line_pos); diff --git a/SOURCES/paps-0.6.8-shared.patch b/SOURCES/paps-0.6.8-shared.patch new file mode 100644 index 0000000..d1ad6e5 --- /dev/null +++ b/SOURCES/paps-0.6.8-shared.patch @@ -0,0 +1,35 @@ +diff -ruN paps-0.6.8.orig/src/Makefile.am paps-0.6.8/src/Makefile.am +--- paps-0.6.8.orig/src/Makefile.am 2006-04-17 16:42:08.000000000 +0900 ++++ paps-0.6.8/src/Makefile.am 2007-11-16 11:50:07.000000000 +0900 +@@ -1,15 +1,15 @@ + man_MANS = paps.1 +-lib_LIBRARIES = libpaps.a +-libpaps_a_SOURCES = libpaps.c +-libpaps_a_inc_HEADERS = libpaps.h +-libpaps_a_incdir = $(includedir) ++lib_LTLIBRARIES = libpaps.la ++libpaps_la_SOURCES = libpaps.c ++libpapsinc_HEADERS = libpaps.h ++libpapsincdir = $(includedir) + + bin_PROGRAMS = paps + paps_CFLAGS = -Wall + paps_SOURCES = paps.c +-paps_LDADD = $(lib_LIBRARIES) $(all_libraries) ++paps_LDADD = $(lib_LTLIBRARIES) $(all_libraries) + paps_LDFLAGS = `pkg-config --libs pangoft2` +-paps_DEPENDENCIES = $(lib_LIBRARIES) ++paps_DEPENDENCIES = $(lib_LTLIBRARIES) + + EXTRA_DIST = test_libpaps.c paps.1 + +@@ -21,7 +21,7 @@ + + + test_libpaps_SOURCES = test_libpaps.c +-test_libpaps_LDADD = $(lib_LIBRARIES) $(all_libraries) ++test_libpaps_LDADD = $(lib_LTLIBRARIES) $(all_libraries) + test_libpaps_LDFLAGS = `pkg-config --libs pangoft2` +-test_libpaps_DEPENDENCIES = $(lib_LIBRARIES) ++test_libpaps_DEPENDENCIES = $(lib_LTLIBRARIES) + diff --git a/SOURCES/paps-0.6.8-wordwrap.patch b/SOURCES/paps-0.6.8-wordwrap.patch new file mode 100644 index 0000000..381c563 --- /dev/null +++ b/SOURCES/paps-0.6.8-wordwrap.patch @@ -0,0 +1,35 @@ +diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c +--- paps-0.6.8.orig/src/paps.c 2007-04-13 14:04:14.000000000 +0900 ++++ paps-0.6.8/src/paps.c 2007-11-16 12:28:11.000000000 +0900 +@@ -723,9 +723,12 @@ split_text_into_paragraphs (PangoContext + pango_layout_set_alignment (para->layout, + page_layout->pango_dir == PANGO_DIRECTION_LTR + ? PANGO_ALIGN_LEFT : PANGO_ALIGN_RIGHT); +- pango_layout_set_wrap (para->layout, PANGO_WRAP_WORD_CHAR); +- +- pango_layout_set_width (para->layout, paint_width * PANGO_SCALE); ++ if (page_layout->do_wordwrap) { ++ pango_layout_set_wrap (para->layout, PANGO_WRAP_WORD_CHAR); ++ pango_layout_set_width (para->layout, paint_width * PANGO_SCALE); ++ } else { ++ pango_layout_set_width (para->layout, -1); ++ } + para->height = 0; + + result = g_list_prepend (result, para); +@@ -754,9 +757,13 @@ split_text_into_paragraphs (PangoContext + pango_layout_set_alignment (para->layout, + page_layout->pango_dir == PANGO_DIRECTION_LTR + ? PANGO_ALIGN_LEFT : PANGO_ALIGN_RIGHT); +- pango_layout_set_wrap (para->layout, PANGO_WRAP_WORD_CHAR); ++ if (page_layout->do_wordwrap) { ++ pango_layout_set_wrap (para->layout, PANGO_WRAP_WORD_CHAR); ++ pango_layout_set_width (para->layout, paint_width * PANGO_SCALE); ++ } else { ++ pango_layout_set_width (para->layout, -1); ++ } + +- pango_layout_set_width (para->layout, paint_width * PANGO_SCALE); + para->height = 0; + + last_para = next; diff --git a/SOURCES/paps-854897-manpage.patch b/SOURCES/paps-854897-manpage.patch new file mode 100644 index 0000000..c841f44 --- /dev/null +++ b/SOURCES/paps-854897-manpage.patch @@ -0,0 +1,13 @@ +diff -pruN paps-0.6.8.orig/src/paps.1 paps-0.6.8/src/paps.1 +--- paps-0.6.8.orig/src/paps.1 2007-01-19 20:05:27.000000000 +0900 ++++ paps-0.6.8/src/paps.1 2012-09-06 18:04:01.000000000 +0900 +@@ -64,6 +64,9 @@ Draw page header for each page. + .B \-\-markup + Interpret the text as pango markup. + .TP ++.B \-\-encoding=ENCODING ++Assume the documentation encoding is ENCODING. ++.TP + .B \-\-lpi + Set the lines per inch. This determines the line spacing. + .TP diff --git a/SOURCES/paps-a3.patch b/SOURCES/paps-a3.patch new file mode 100644 index 0000000..3628b3a --- /dev/null +++ b/SOURCES/paps-a3.patch @@ -0,0 +1,40 @@ +--- paps-0.6.8/src/paps.c.orig 2015-02-26 14:17:29.351338514 +0530 ++++ paps-0.6.8/src/paps.c 2015-02-26 14:17:29.351338514 +0530 +@@ -45,7 +45,8 @@ + typedef enum { + PAPER_TYPE_A4 = 0, + PAPER_TYPE_US_LETTER = 1, +- PAPER_TYPE_US_LEGAL = 2 ++ PAPER_TYPE_US_LEGAL = 2, ++ PAPER_TYPE_A3 = 3 + } paper_type_t ; + + typedef struct { +@@ -56,7 +57,8 @@ + const paper_size_t paper_sizes[] = { + { 595.28, 841.89}, /* A4 */ + { 612, 792}, /* US letter */ +- { 612, 1008} /* US legal */ ++ { 612, 1008}, /* US legal */ ++ { 842, 1190} /* A3 */ + }; + + typedef struct { +@@ -190,6 +192,8 @@ + paper_type = PAPER_TYPE_US_LETTER; + else if (g_ascii_strcasecmp(value, "a4") == 0) + paper_type = PAPER_TYPE_A4; ++ else if (g_ascii_strcasecmp(value, "a3") == 0) ++ paper_type = PAPER_TYPE_A3; + else { + retval = FALSE; + fprintf(stderr, "Unknown page size name: %s.\n", value); +@@ -300,7 +304,7 @@ + {"rtl", 0, 0, G_OPTION_ARG_NONE, &do_rtl, "Do rtl layout.", NULL}, + {"paper", 0, 0, G_OPTION_ARG_CALLBACK, _paps_arg_paper_cb, + "Choose paper size. Known paper sizes are legal,\n" +- " letter, a4. (Default: a4)", "PAPER"}, ++ " letter, a3, a4. (Default: a4)", "PAPER"}, + {"bottom-margin", 0, 0, G_OPTION_ARG_INT, &bottom_margin, "Set bottom margin in postscript point units (1/72inch). (Default: 36)", "NUM"}, + {"top-margin", 0, 0, G_OPTION_ARG_INT, &top_margin, "Set top margin. (Default: 36)", "NUM"}, + {"right-margin", 0, 0, G_OPTION_ARG_INT, &right_margin, "Set right margin. (Default: 36)", "NUM"}, diff --git a/SOURCES/paps-autoconf262.patch b/SOURCES/paps-autoconf262.patch new file mode 100644 index 0000000..1a1c16b --- /dev/null +++ b/SOURCES/paps-autoconf262.patch @@ -0,0 +1,24 @@ +diff -pruN paps-0.6.8.orig/acinclude.m4 paps-0.6.8/acinclude.m4 +--- paps-0.6.8.orig/acinclude.m4 2006-11-29 05:11:50.000000000 +0900 ++++ paps-0.6.8/acinclude.m4 2008-05-16 20:36:03.000000000 +0900 +@@ -76,9 +76,9 @@ AC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEA + # Require the specified program to be found for the DX_CURRENT_FEATURE to work. + AC_DEFUN([DX_REQUIRE_PROG], [ + AC_PATH_TOOL([$1], [$2]) +-if test "$DX_FLAG_[]DX_CURRENT_FEATURE$$1" = 1; then ++if test "$DX_FLAG_DX_CURRENT_FEATURE$$1" = 1; then + AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION]) +- AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) ++ AC_SUBST([DX_FLAG_DX_CURRENT_FEATURE], 0) + fi + ]) + +@@ -101,7 +101,7 @@ test "$DX_FLAG_$1" = "$2" \ + # ---------------------------------------------------------- + # Turn off the DX_CURRENT_FEATURE if the required feature is off. + AC_DEFUN([DX_CLEAR_DEPEND], [ +-test "$DX_FLAG_$1" = "$2" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) ++test "$DX_FLAG_$1" = "$2" || AC_SUBST([DX_FLAG_DX_CURRENT_FEATURE], 0) + ]) + + # DX_FEATURE_ARG(FEATURE, DESCRIPTION, diff --git a/SOURCES/paps-correct-fsf-address.patch b/SOURCES/paps-correct-fsf-address.patch new file mode 100644 index 0000000..5313f85 --- /dev/null +++ b/SOURCES/paps-correct-fsf-address.patch @@ -0,0 +1,77 @@ +diff -pruN paps-0.6.8.orig/COPYING.LIB paps-0.6.8/COPYING.LIB +--- paps-0.6.8.orig/COPYING.LIB 2005-12-21 04:35:27.000000000 +0900 ++++ paps-0.6.8/COPYING.LIB 2012-11-23 14:30:46.297512335 +0900 +@@ -1,16 +1,15 @@ +- GNU LIBRARY GENERAL PUBLIC LICENSE +- Version 2, June 1991 ++ GNU LIBRARY GENERAL PUBLIC LICENSE ++ Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. +- 59 Temple Place - Suite 330 +- Boston, MA 02111-1307, USA. ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + [This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + +- Preamble ++ Preamble + + The licenses for most software are designed to take away your + freedom to share and change it. By contrast, the GNU General Public +@@ -100,7 +99,7 @@ works together with the library. + Note that it is possible for a library to be covered by the ordinary + General Public License rather than by this special one. + +- GNU LIBRARY GENERAL PUBLIC LICENSE ++ GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +@@ -412,7 +411,7 @@ decision will be guided by the two goals + of all derivatives of our free software and of promoting the sharing + and reuse of software generally. + +- NO WARRANTY ++ NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +@@ -435,8 +434,9 @@ FAILURE OF THE LIBRARY TO OPERATE WITH A + SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + DAMAGES. + +- END OF TERMS AND CONDITIONS +- How to Apply These Terms to Your New Libraries ++ END OF TERMS AND CONDITIONS ++ ++ How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest + possible use to the public, we recommend making it free software that +@@ -453,18 +453,18 @@ convey the exclusion of warranty; and ea + Copyright (C) + + This library is free software; you can redistribute it and/or +- modify it under the terms of the GNU Lesser General Public ++ modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it 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. ++ Library General Public License for more details. + +- You should have received a copy of the GNU Lesser General Public ++ You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free Software +- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + Also add information on how to contact you by electronic and paper mail. + diff --git a/SOURCES/paps-cpilpi.patch b/SOURCES/paps-cpilpi.patch new file mode 100644 index 0000000..522bda6 --- /dev/null +++ b/SOURCES/paps-cpilpi.patch @@ -0,0 +1,80 @@ +diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c +--- paps-0.6.8.orig/src/paps.c 2008-11-07 08:27:54.000000000 +0900 ++++ paps-0.6.8/src/paps.c 2008-11-07 08:29:08.000000000 +0900 +@@ -92,8 +92,8 @@ typedef struct { + gchar *filename; + gchar *header_font_desc; + gchar *owner; +- gint lpi; +- gint cpi; ++ gdouble lpi; ++ gdouble cpi; + } page_layout_t; + + typedef struct { +@@ -378,6 +378,7 @@ int main(int argc, char *argv[]) + page_height = 792; + font = g_strdup(MAKE_FONT_NAME ("Courier", DEFAULT_FONT_SIZE)); + header_font_desc = g_strdup(MAKE_FONT_NAME ("Courier", HEADER_FONT_SCALE)); ++ do_stretch_chars = TRUE; + + if (argc < 6 || argc > 7) { + fprintf(stderr, "ERROR: %s job-id user title copies options [file]\n", prgname); +@@ -595,7 +596,8 @@ int main(int argc, char *argv[]) + /* calculate x-coordinate scale */ + if (page_layout.cpi > 0.0L) + { +- double scale; ++ gint font_size; ++ + fontmap = pango_ft2_font_map_new (); + fontset = pango_font_map_load_fontset (fontmap, pango_context, font_description, get_language ()); + metrics = pango_fontset_get_metrics (fontset); +@@ -607,13 +609,10 @@ int main(int argc, char *argv[]) + pango_font_metrics_unref (metrics); + g_object_unref (G_OBJECT (fontmap)); + +- // Now figure out how to scale the font to get that size +- scale = 1 / page_layout.cpi * 72.0 * PANGO_SCALE / max_width; +- ++ font_size = pango_font_description_get_size (font_description); + // update the font size to that width +- pango_font_description_set_size (font_description, (int)(atoi(DEFAULT_FONT_SIZE) * PANGO_SCALE * scale)); ++ pango_font_description_set_size (font_description, font_size * page_layout.scale_x); + pango_context_set_font_description (pango_context, font_description); +- + } + + page_layout.scale_x = page_layout.scale_y = 1.0; +@@ -1001,6 +1000,7 @@ output_pages(FILE *OUT, + int column_y_pos = 0; + int page_idx = 1; + int pango_column_height = page_layout->column_height * page_layout->pt_to_pixel * PANGO_SCALE; ++ int height = 0; + LineLink *prev_line_link = NULL; + + start_page(OUT, page_idx); +@@ -1038,17 +1038,17 @@ output_pages(FILE *OUT, + ); + } + } ++ if (page_layout->lpi > 0.0L) ++ height = (int)(1.0 / page_layout->lpi * 72.0 * page_layout->pt_to_pixel * PANGO_SCALE); ++ else ++ height = line_link->logical_rect.height; + draw_line_to_page(OUT, + column_idx, +- column_y_pos+line_link->logical_rect.height, ++ column_y_pos+height, + page_layout, + line); + +- if (page_layout->lpi > 0.0L) +- column_y_pos += (int)(1.0 / page_layout->lpi * 72.0 * page_layout->pt_to_pixel * PANGO_SCALE); +- else +- column_y_pos += line_link->logical_rect.height; +- ++ column_y_pos += height; + pango_lines = pango_lines->next; + prev_line_link = line_link; + } diff --git a/SOURCES/paps-cups.patch b/SOURCES/paps-cups.patch new file mode 100644 index 0000000..acedf48 --- /dev/null +++ b/SOURCES/paps-cups.patch @@ -0,0 +1,325 @@ +diff -pruN paps-0.6.8.orig/configure.in paps-0.6.8/configure.in +--- paps-0.6.8.orig/configure.in 2007-01-19 20:06:10.000000000 +0900 ++++ paps-0.6.8/configure.in 2008-11-07 08:21:19.000000000 +0900 +@@ -7,6 +7,19 @@ AC_LANG_C + AC_PROG_CC + AM_PROG_LIBTOOL + ++dnl ====================================================== ++dnl check for CUPS ++dnl ====================================================== ++AC_PATH_PROG(CUPS_CONFIG, cups-config, no) ++if test "$CUPS_CONFIG" = "no"; then ++ AC_MSG_ERROR([Please install cups development packages/files]) ++fi ++CUPS_CFLAGS=`$CUPS_CONFIG --cflags | sed -e 's/-O[0-9]*//' -e 's/-m[^\t]*//g'` ++CUPS_LIBS=`$CUPS_CONFIG --libs` ++ ++AC_SUBST(CUPS_CFLAGS) ++AC_SUBST(CUPS_LIBS) ++ + DX_HTML_FEATURE(ON) + DX_CHM_FEATURE(OFF) + DX_CHI_FEATURE(OFF) +diff -pruN paps-0.6.8.orig/src/Makefile.am paps-0.6.8/src/Makefile.am +--- paps-0.6.8.orig/src/Makefile.am 2008-11-07 08:21:05.000000000 +0900 ++++ paps-0.6.8/src/Makefile.am 2008-11-07 08:21:19.000000000 +0900 +@@ -5,10 +5,10 @@ libpapsinc_HEADERS = libpaps.h + libpapsincdir = $(includedir) + + bin_PROGRAMS = paps +-paps_CFLAGS = -Wall ++paps_CFLAGS = -Wall $(CUPS_CFLAGS) + paps_SOURCES = paps.c + paps_LDADD = $(lib_LTLIBRARIES) $(all_libraries) +-paps_LDFLAGS = `pkg-config --libs pangoft2` ++paps_LDFLAGS = `pkg-config --libs pangoft2` $(CUPS_LIBS) + paps_DEPENDENCIES = $(lib_LTLIBRARIES) + + EXTRA_DIST = test_libpaps.c paps.1 +diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c +--- paps-0.6.8.orig/src/paps.c 2008-11-07 08:21:05.000000000 +0900 ++++ paps-0.6.8/src/paps.c 2008-11-07 08:26:28.000000000 +0900 +@@ -31,6 +31,8 @@ + #include + #include + #include ++#include ++#include + + #define BUFSIZE 1024 + #define DEFAULT_FONT_FAMILY "Monospace" +@@ -86,9 +88,11 @@ typedef struct { + gboolean do_wordwrap; + gboolean do_use_markup; + gboolean do_stretch_chars; ++ gboolean cups_mode; + PangoDirection pango_dir; + gchar *filename; + gchar *header_font_desc; ++ gchar *owner; + gint lpi; + gint cpi; + } page_layout_t; +@@ -320,8 +324,8 @@ int main(int argc, char *argv[]) + int num_pages = 1; + int gutter_width = 40; + int total_gutter_width; +- int page_width = paper_sizes[0].width; +- int page_height = paper_sizes[0].height; ++ int page_width = -1; ++ int page_height = -1; + int do_tumble = -1; /* -1 means not initialized */ + int do_duplex = -1; + gchar *paps_header = NULL; +@@ -331,6 +335,8 @@ int main(int argc, char *argv[]) + int max_width = 0, w; + GIConv cvh = NULL; + GOptionGroup *options; ++ gboolean cups_mode = FALSE; ++ gchar *page_owner = NULL; + + /* Set locale from environment. */ + setlocale(LC_ALL, ""); +@@ -348,6 +354,130 @@ int main(int argc, char *argv[]) + g_option_context_add_main_entries(ctxt, entries, NULL); + #endif + ++ /* check if the process is being invoked as CUPS filter */ ++ G_STMT_START { ++ gchar *prgname = g_path_get_basename(argv[0]); ++ cups_option_t *options = NULL; ++ ppd_file_t *ppd; ++ ppd_size_t *pagesize; ++ int num_options; ++ const char *val; ++ ++ if (strncmp(prgname, "texttopaps", 10) == 0 || ++ getenv("CUPS_SERVER") != NULL) { ++ g_set_prgname(prgname); ++ /* argument format should be job-id user title copies options [file] */ ++ cups_mode = TRUE; ++ /* set default values */ ++ page_layout.lpi = 6.0L; ++ page_layout.cpi = 10.0L; ++ left_margin = 18; ++ right_margin = 18; ++ top_margin = 36; ++ bottom_margin = 36; ++ page_width = 612; ++ page_height = 792; ++ font = g_strdup(MAKE_FONT_NAME ("Courier", DEFAULT_FONT_SIZE)); ++ header_font_desc = g_strdup(MAKE_FONT_NAME ("Courier", HEADER_FONT_SCALE)); ++ ++ if (argc < 6 || argc > 7) { ++ fprintf(stderr, "ERROR: %s job-id user title copies options [file]\n", prgname); ++ exit(1); ++ } ++ if (argc == 6) { ++ filename_in = "stdin"; ++ IN = stdin; ++ } else { ++ filename_in = argv[6]; ++ if ((IN = fopen(filename_in, "rb")) == NULL) { ++ fprintf(stderr, "ERROR: unable to open print file -\n"); ++ exit(1); ++ } ++ } ++ title = argv[3]; ++ page_owner = argv[2]; ++ num_options = cupsParseOptions(argv[5], 0, &options); ++ ++ if ((val = cupsGetOption("prettyprint", num_options, options)) != NULL && ++ g_ascii_strcasecmp(val, "no") && ++ g_ascii_strcasecmp(val, "off") && ++ g_ascii_strcasecmp(val, "false")) { ++ /* XXX: need to support the keywords highlighting */ ++ } ++ ppd = ppdOpenFile(getenv("PPD")); ++ ppdMarkDefaults(ppd); ++ cupsMarkOptions(ppd, num_options, options); ++ ++ if ((pagesize = ppdPageSize(ppd, NULL)) != NULL) { ++ page_width = pagesize->width; ++ page_height = pagesize->length; ++ top_margin = pagesize->length - pagesize->top; ++ bottom_margin = pagesize->bottom; ++ left_margin = pagesize->left; ++ right_margin = pagesize->width - pagesize->right; ++ } ++ ++ if ((val = cupsGetOption("landscape", num_options, options)) != NULL) { ++ if (g_ascii_strcasecmp(val, "no") && ++ g_ascii_strcasecmp(val, "off") && ++ g_ascii_strcasecmp(val, "false")) ++ do_landscape = TRUE; ++ } ++ /* XXX: need to support orientation-requested? */ ++ if ((val = cupsGetOption("page-left", num_options, options)) != NULL) { ++ left_margin = (int)atof(val); ++ } ++ if ((val = cupsGetOption("page-right", num_options, options)) != NULL) { ++ right_margin = (int)atof(val); ++ } ++ if ((val = cupsGetOption("page-bottom", num_options, options)) != NULL) { ++ bottom_margin = (int)atof(val); ++ } ++ if ((val = cupsGetOption("page-top", num_options, options)) != NULL) { ++ top_margin = (int)atof(val); ++ } ++ if (ppdIsMarked(ppd, "Duplex", "DuplexNoTumble") || ++ ppdIsMarked(ppd, "Duplex", "DuplexTumble") || ++ ppdIsMarked(ppd, "JCLDuplex", "DuplexNoTumble") || ++ ppdIsMarked(ppd, "JCLDuplex", "DuplexTumble") || ++ ppdIsMarked(ppd, "EFDuplex", "DuplexNoTumble") || ++ ppdIsMarked(ppd, "EFDuplex", "DuplexTumble") || ++ ppdIsMarked(ppd, "KD03Duplex", "DuplexNoTumble") || ++ ppdIsMarked(ppd, "KD03Duplex", "DuplexTumble")) { ++ do_duplex = TRUE; ++ } ++ if ((val = cupsGetOption("wrap", num_options, options)) != NULL) { ++ do_wordwrap = !g_ascii_strcasecmp(val, "true") || ++ !g_ascii_strcasecmp(val, "on") || ++ !g_ascii_strcasecmp(val, "yes"); ++ } ++ if ((val = cupsGetOption("columns", num_options, options)) != NULL) { ++ num_columns = atoi(val); ++ } ++ if ((val = cupsGetOption("cpi", num_options, options)) != NULL) { ++ page_layout.cpi = atof(val); ++ } ++ if ((val = cupsGetOption("lpi", num_options, options)) != NULL) { ++ page_layout.lpi = atof(val); ++ } ++ if (getenv("CHARSET") != NULL) { ++ char *charset = getenv("CHARSET"); ++ /* Map CUPS charset names to real ones. ++ * http://cups.org/newsgroups.php?s9797+gcups.general+v9797+T1 ++ */ ++ if (!g_ascii_strcasecmp(charset, "windows-932")) { ++ charset = "WINDOWS-31J"; ++ } ++ if (g_ascii_strcasecmp(charset, "utf-8") && ++ g_ascii_strcasecmp(charset, "utf8")) { ++ encoding = g_strdup(charset); ++ } ++ } ++ } ++ } G_STMT_END; ++ ++ if (!cups_mode) { ++ + /* Parse command line */ + if (!g_option_context_parse(ctxt, &argc, &argv, &error)) + { +@@ -374,6 +504,8 @@ int main(int argc, char *argv[]) + IN = stdin; + } + title = filename_in; ++ ++ } /* if (!cups_mode) */ + + paps = paps_new(); + pango_context = paps_get_pango_context (paps); +@@ -392,8 +524,10 @@ int main(int argc, char *argv[]) + pango_context_set_font_description (pango_context, font_description); + + /* Page layout */ +- page_width = paper_sizes[(int)paper_type].width; +- page_height = paper_sizes[(int)paper_type].height; ++ if (page_width < 0) ++ page_width = paper_sizes[(int)paper_type].width; ++ if (page_height < 0) ++ page_height = paper_sizes[(int)paper_type].height; + + if (num_columns == 1) + total_gutter_width = 0; +@@ -456,6 +590,8 @@ int main(int argc, char *argv[]) + page_layout.pango_dir = pango_dir; + page_layout.filename = filename_in; + page_layout.header_font_desc = header_font_desc; ++ page_layout.owner = page_owner; ++ page_layout.cups_mode = cups_mode; + + /* calculate x-coordinate scale */ + if (page_layout.cpi > 0.0L) +@@ -756,6 +892,12 @@ split_text_into_paragraphs (PangoContext + if (wc == (gunichar)-1) + { + fprintf (stderr, "%s: Invalid character in input\n", g_get_prgname ()); ++ if (page_layout->cups_mode) ++ { ++ /* try to continue parsing texts */ ++ p = next; ++ continue; ++ } + wc = 0; + } + if (!*p || !wc || wc == '\n' || wc == '\f') +@@ -925,21 +1067,32 @@ void print_postscript_header(FILE *OUT, + int orientation = page_layout->page_width > page_layout->page_height; + int bb_page_width = page_layout->page_width; + int bb_page_height = page_layout->page_height; ++ char *owner = NULL; + + /* Keep bounding box non-rotated to make ggv happy */ +- if (orientation) ++ /* ensure the correct bounding box for CUPS */ ++ if (orientation && !page_layout->cups_mode) + { + int tmp = bb_page_width; + bb_page_width = bb_page_height; + bb_page_height = tmp; + } + ++ if (page_layout->owner) ++ { ++ owner = g_strdup_printf("%%%%For: %s\n", page_layout->owner); ++ } ++ else ++ { ++ owner = g_strdup(""); ++ } + fprintf(OUT, + "%%!PS-Adobe-3.0\n" ++ "%s" + "%%%%Title: %s\n" + "%%%%Creator: paps version 0.6.7 by Dov Grobgeld\n" + "%%%%Pages: (atend)\n" +- "%%%%BoundingBox: 0 0 %d %d\n" ++ "%%%%BoundingBox: 0 0 %d %d\n%s" + "%%%%BeginProlog\n" + "%%%%Orientation: %s\n" + "/papsdict 1 dict def\n" +@@ -961,7 +1114,7 @@ void print_postscript_header(FILE *OUT, + " pagewidth\n" + " /pagewidth pageheight def\n" + " /pageheight exch def\n" +- " /orientation 3 def\n" ++ " /orientation %d def\n" + " } if\n" + " 2 dict\n" + " dup /PageSize [pagewidth pageheight] put\n" +@@ -986,11 +1139,21 @@ void print_postscript_header(FILE *OUT, + " 90 rotate\n" + " 0 pageheight neg translate\n" + "} def\n", ++ /* ++ * Put %%cupsRotation tag to prevent the rotation in pstops. ++ * This breaks paps's behavior to make it in landscape say. ++ * (RH#222137) ++ */ ++ (page_layout->cups_mode ? "%cupsRotation: 0\n" : ""), + title, + bb_page_width, + bb_page_height, +- orientation_names[orientation] ++ owner, ++ orientation_names[orientation], ++ /* For landscape, rotate page to portrait orientation for CUPS (RH#222137) */ ++ page_layout->cups_mode ? 2 : 3 + ); ++ g_free(owner); + + fprintf(OUT, + "%% User settings\n" diff --git a/SOURCES/paps-dsc-compliant.patch b/SOURCES/paps-dsc-compliant.patch new file mode 100644 index 0000000..3da5f00 --- /dev/null +++ b/SOURCES/paps-dsc-compliant.patch @@ -0,0 +1,94 @@ +diff -pruN paps-0.6.8.orig/src/libpaps.c paps-0.6.8/src/libpaps.c +--- paps-0.6.8.orig/src/libpaps.c 2008-05-14 23:07:14.000000000 +0900 ++++ paps-0.6.8/src/libpaps.c 2008-05-14 23:11:12.000000000 +0900 +@@ -118,7 +118,6 @@ gchar *paps_get_postscript_header_strdup + gchar *ret_str; + g_string_append_printf(paps->header, + "end end\n" +- "%%%%EndPrologue\n" + ); + ret_str = g_strdup(paps->header->str); + g_string_truncate(paps->header, old_len); +@@ -247,7 +246,6 @@ static void + add_postscript_prologue(paps_private_t *paps) + { + g_string_append_printf(paps->header, +- "%%%%BeginProlog\n" + "/papsdict 1 dict def\n" + "papsdict begin\n" + "\n" +@@ -272,10 +270,10 @@ add_postscript_prologue(paps_private_t * + "/start_ol { gsave } bind def\n" + "/end_ol { closepath fill grestore } bind def\n" + /* Specify both x and y. */ +- "/draw_char { fontdict begin gsave %f dup scale last_x last_y translate load exec end grestore} def\n" +- "/goto_xy { fontdict begin /last_y exch def /last_x exch def end } def\n" +- "/goto_x { fontdict begin /last_x exch def end } def\n" +- "/fwd_x { fontdict begin /last_x exch last_x add def end } def\n" ++ "/draw_char { fontdict begin gsave %f dup scale last_x cvi last_y cvi translate load exec end grestore} def\n" ++ "/goto_xy { fontdict begin /last_y exch string_y cvs def /last_x exch string_x cvs def end } def\n" ++ "/goto_x { fontdict begin /last_x exch string_x cvs def end } def\n" ++ "/fwd_x { fontdict begin /last_x exch last_x cvi add string_x cvs def end } def\n" + "/c /curveto load def\n" + "/x /conicto load def\n" + "/l /lineto load def\n" +@@ -344,7 +342,7 @@ add_postscript_prologue(paps_private_t * + + /* Open up dictionaries */ + g_string_append(paps->header, +- "/fontdict 1 dict def\n" ++ "/fontdict 1 dict dup begin 16 string dup /string_x exch def /last_x exch def 16 string dup /string_y exch def /last_y exch def end def\n" + "papsdict begin fontdict begin\n"); + } + +diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c +--- paps-0.6.8.orig/src/paps.c 2008-05-14 23:07:14.000000000 +0900 ++++ paps-0.6.8/src/paps.c 2008-05-14 23:12:53.000000000 +0900 +@@ -659,7 +659,7 @@ int main(int argc, char *argv[]) + fprintf(OUT, "%s", paps_header); + g_free(paps_header); + +- fprintf(OUT, "%%%%EndPrologue\n"); ++ fprintf(OUT, "%%%%EndSetup\n"); + fprintf(OUT, "%s", ps_pages_string->str); + print_postscript_trailer(OUT, num_pages); + +@@ -1089,8 +1089,9 @@ void print_postscript_header(FILE *OUT, + "%%%%Creator: paps version 0.6.7 by Dov Grobgeld\n" + "%%%%Pages: (atend)\n" + "%%%%BoundingBox: 0 0 %d %d\n%s" +- "%%%%BeginProlog\n" + "%%%%Orientation: %s\n" ++ "%%%%EndComments\n" ++ "%%%%BeginProlog\n" + "/papsdict 1 dict def\n" + "papsdict begin\n" + "\n" +@@ -1134,7 +1135,8 @@ void print_postscript_header(FILE *OUT, + "/turnpage {\n" + " 90 rotate\n" + " 0 pageheight neg translate\n" +- "} def\n", ++ "} def\n" ++ "%%%%EndProlog\n", + /* + * Put %%cupsRotation tag to prevent the rotation in pstops. + * This breaks paps's behavior to make it in landscape say. +@@ -1150,6 +1152,7 @@ void print_postscript_header(FILE *OUT, + g_free(owner); + + fprintf(OUT, ++ "%%%%BeginSetup\n" + "%% User settings\n" + "/pagewidth %d def\n" + "/pageheight %d def\n" +@@ -1232,8 +1235,8 @@ void print_postscript_trailer(FILE *OUT, + int num_pages) + { + fprintf(OUT, +- "%%%%Pages: %d\n" + "%%%%Trailer\n" ++ "%%%%Pages: %d\n" + "%%%%EOF\n", + num_pages + ); diff --git a/SOURCES/paps-exitcode.patch b/SOURCES/paps-exitcode.patch new file mode 100644 index 0000000..032b889 --- /dev/null +++ b/SOURCES/paps-exitcode.patch @@ -0,0 +1,66 @@ +diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c +--- paps-0.6.8.orig/src/paps.c 2008-09-01 15:54:11.000000000 +0900 ++++ paps-0.6.8/src/paps.c 2008-09-01 15:54:47.000000000 +0900 +@@ -365,7 +365,7 @@ int main(int argc, char *argv[]) + if (!IN) + { + fprintf(stderr, "Failed to open %s!\n", filename_in); +- exit(-1); ++ exit(1); + } + } + else +@@ -499,7 +499,7 @@ int main(int argc, char *argv[]) + if (cvh == NULL) + { + fprintf(stderr, "%s: Invalid encoding: %s\n", g_get_prgname (), encoding); +- exit(-1); ++ exit(1); + } + } + +@@ -559,7 +559,7 @@ read_file (FILE *file, + { + fprintf(stderr, "%s: Error reading file.\n", g_get_prgname ()); + g_string_free (inbuf, TRUE); +- return NULL; ++ exit(1); + } + else if (bp == NULL) + break; +@@ -573,7 +573,7 @@ read_file (FILE *file, + if (g_iconv (handle, &ib, &iblen, &ob, &oblen) == -1) + { + fprintf (stderr, "%s: Error while converting strings.\n", g_get_prgname ()); +- return NULL; ++ exit(1); + } + obuffer[BUFSIZE * 6 - 1 - oblen] = 0; + } +@@ -637,7 +637,7 @@ split_text_into_paragraphs (PangoContext + if (wtext == NULL) + { + fprintf (stderr, "Failed to convert UTF-8 to UCS-4.\n"); +- return NULL; ++ exit(1); + } + + len = g_utf8_strlen (para->text, para->length); +@@ -650,7 +650,7 @@ split_text_into_paragraphs (PangoContext + { + fprintf (stderr, "Failed to allocate a memory.\n"); + g_free (wtext); +- return NULL; ++ exit(1); + } + for (i = 0; i < len; i++) + { +@@ -665,7 +665,7 @@ split_text_into_paragraphs (PangoContext + if (newtext == NULL) + { + fprintf (stderr, "Failed to convert UCS-4 to UTF-8.\n"); +- return NULL; ++ exit(1); + } + + pango_layout_set_text (para->layout, newtext, -1); diff --git a/SOURCES/paps-fix-cpi.patch b/SOURCES/paps-fix-cpi.patch new file mode 100644 index 0000000..f917296 --- /dev/null +++ b/SOURCES/paps-fix-cpi.patch @@ -0,0 +1,342 @@ +diff --git a/src/libpaps.c b/src/libpaps.c +index b6363a7..1b80257 100644 +--- a/src/libpaps.c ++++ b/src/libpaps.c +@@ -55,6 +55,9 @@ typedef struct { + double last_pos_x; + double scale_x; + double scale_y; ++ double width; ++ double height; ++ double cpi; + } paps_private_t; + + +@@ -88,6 +91,26 @@ paps_t *paps_new() + } + + void ++paps_set_paper_size(paps_t *paps_, ++ gdouble width, ++ gdouble height) ++{ ++ paps_private_t *paps = (paps_private_t *)paps_; ++ ++ paps->width = width; ++ paps->height = height; ++} ++ ++void ++paps_set_cpi(paps_t *paps_, ++ gdouble cpi) ++{ ++ paps_private_t *paps = (paps_private_t *)paps_; ++ ++ paps->cpi = cpi; ++} ++ ++void + paps_set_scale(paps_t *paps_, + gdouble scale_x, + gdouble scale_y) +@@ -401,7 +424,7 @@ static void draw_contour(paps_private_t *paps, + FT_Face ft_face = pango_ft2_font_get_face(font); + int num_glyphs = glyphs->num_glyphs; + int glyph_idx; +- ++ + for (glyph_idx=0; glyph_idxglyphs[glyph_idx].geometry; +@@ -410,7 +433,11 @@ static void draw_contour(paps_private_t *paps, + glyph_pos_x = x_pos + 1.0*geometry.x_offset * scale; + glyph_pos_y = line_start_pos_y - 1.0*geometry.y_offset * scale; + +- x_pos += geometry.width * scale * paps->scale_x; ++ if (paps->cpi > 0.0L) { ++ x_pos += (1 / paps->cpi * 72.0); ++ } else { ++ x_pos += geometry.width * scale * paps->scale_x; ++ } + + if (glyphs->glyphs[glyph_idx].glyph == PANGO_GLYPH_EMPTY) + continue; +diff --git a/src/libpaps.h b/src/libpaps.h +index 0b74321..cbb4042 100644 +--- a/src/libpaps.h ++++ b/src/libpaps.h +@@ -53,10 +53,16 @@ void paps_free(paps_t *paps); + * @param scale_y y-coordinate scale + * + */ +-void +-paps_set_scale(paps_t *paps, +- gdouble scale_x, +- gdouble scale_y); ++void paps_set_scale(paps_t *paps, ++ gdouble scale_x, ++ gdouble scale_y); ++ ++void paps_set_paper_size(paps_t *paps_, ++ gdouble width, ++ gdouble height); ++ ++void paps_set_cpi(paps_t *paps_, ++ gdouble cpi); + + /** + * libpaps may currently be used only with a PangoContext that it +diff --git a/src/paps.c b/src/paps.c +index 334d547..72dbaad 100644 +--- a/src/paps.c ++++ b/src/paps.c +@@ -33,6 +33,8 @@ + #include + #include + #include ++#include ++#include + + #define BUFSIZE 1024 + #define DEFAULT_FONT_FAMILY "Monospace" +@@ -594,6 +596,8 @@ int main(int argc, char *argv[]) + page_layout.owner = page_owner; + page_layout.cups_mode = cups_mode; + ++ paps_set_paper_size(paps, page_width, page_height); ++ + /* calculate x-coordinate scale */ + if (page_layout.cpi > 0.0L) + { +@@ -606,7 +610,7 @@ int main(int argc, char *argv[]) + w = pango_font_metrics_get_approximate_digit_width (metrics); + if (w > max_width) + max_width = w; +- page_layout.scale_x = 1 / page_layout.cpi * 72.0 * PANGO_SCALE / max_width; ++ page_layout.scale_x = 1 / page_layout.cpi * 72.0 * (gdouble)PANGO_SCALE / (gdouble)max_width; + pango_font_metrics_unref (metrics); + g_object_unref (G_OBJECT (fontmap)); + +@@ -614,6 +618,8 @@ int main(int argc, char *argv[]) + // update the font size to that width + pango_font_description_set_size (font_description, font_size * page_layout.scale_x); + pango_context_set_font_description (pango_context, font_description); ++ ++ paps_set_cpi(paps, page_layout.cpi); + } + + page_layout.scale_x = page_layout.scale_y = 1.0; +@@ -727,119 +733,6 @@ read_file (FILE *file, + return text; + } + +-#if 0 +-/* Take a UTF8 string and break it into paragraphs on \n characters. +- * +- * Sorry. I couldn't figure out what this version was supposed to do +- * +- */ +-static GList * +-split_text_into_paragraphs (PangoContext *pango_context, +- page_layout_t *page_layout, +- int paint_width, /* In pixels */ +- char *text) +-{ +- char *p = text; +- char *next; +- gunichar wc; +- GList *result = NULL; +- char *last_para = text; +- +- while (p != NULL && *p) +- { +- wc = g_utf8_get_char (p); +- next = g_utf8_next_char (p); +- if (wc == (gunichar)-1) +- { +- fprintf (stderr, "%s: Invalid character in input\n", g_get_prgname ()); +- wc = 0; +- } +- if (!*p || !wc || wc == '\n' || wc == '\f') +- { +- Paragraph *para = g_new (Paragraph, 1); +- para->text = last_para; +- para->length = p - last_para; +- para->layout = pango_layout_new (pango_context); +- +- if (cpi > 0.0L && page_layout->do_wordwrap) +- { +- PangoRectangle ink_rect, logical_rect; +- wchar_t *wtext, *wnewtext; +- gchar *newtext; +- size_t i, len, wwidth = 0, n; +- +- wtext = g_utf8_to_ucs4 (para->text, para->length, NULL, NULL, NULL); +- if (wtext == NULL) +- { +- fprintf (stderr, "Failed to convert UTF-8 to UCS-4.\n"); +- exit(1); +- } +- +- len = g_utf8_strlen (para->text, para->length); +- /* the amount of characters to be able to put on the line against CPI */ +- n = page_layout->column_width / 72.0 * cpi; +- if (len > n) +- { +- wnewtext = g_new (wchar_t, wcslen (wtext) + 1); +- if (wnewtext == NULL) +- { +- fprintf (stderr, "Failed to allocate a memory.\n"); +- g_free (wtext); +- exit(1); +- } +- for (i = 0; i < len; i++) +- { +- wwidth += wcwidth (wtext[i]); +- if (wwidth > n) +- break; +- wnewtext[i] = wtext[i]; +- } +- wnewtext[i] = 0L; +- +- newtext = g_ucs4_to_utf8 ((const gunichar *)wnewtext, i, NULL, NULL, NULL); +- if (newtext == NULL) +- { +- fprintf (stderr, "Failed to convert UCS-4 to UTF-8.\n"); +- exit(1); +- } +- +- pango_layout_set_text (para->layout, newtext, -1); +- pango_layout_get_extents (para->layout, &ink_rect, &logical_rect); +- /* update paint_width to wrap_against CPI */ +- paint_width = logical_rect.width / PANGO_SCALE; +- g_free (newtext); +- g_free (wnewtext); +- } +- g_free (wtext); +- } +- pango_layout_set_text (para->layout, para->text, para->length); +- pango_layout_set_justify (para->layout, page_layout->do_justify); +- pango_layout_set_alignment (para->layout, +- page_layout->pango_dir == PANGO_DIRECTION_LTR +- ? PANGO_ALIGN_LEFT : PANGO_ALIGN_RIGHT); +- pango_layout_set_width (para->layout, paint_width * PANGO_SCALE); +- if (page_layout->do_wordwrap) +- pango_layout_set_wrap (para->layout, PANGO_WRAP_WORD_CHAR); +- para->height = 0; +- +- if (wc == '\f') +- para->formfeed = 1; +- else +- para->formfeed = 0; +- +- last_para = next; +- +- result = g_list_prepend (result, para); +- } +- if (!wc) /* incomplete character at end */ +- break; +- p = next; +- } +- +- return g_list_reverse (result); +-} +-#endif +- + /* Take a UTF8 string and break it into paragraphs on \n characters + */ + static GList * +@@ -905,18 +798,85 @@ split_text_into_paragraphs (PangoContext *pango_context, + para->text = last_para; + para->length = p - last_para; + para->layout = pango_layout_new (pango_context); +- // pango_layout_set_font_description (para->layout, font_description); +- pango_layout_set_text (para->layout, para->text, para->length); ++ ++ if (page_layout->cpi > 0.0L && page_layout->do_wordwrap) { ++ /* figuring out the correct width from the pango_font_metrics_get_approximate_width() ++ * is really hard and pango_layout_set_wrap() doesn't work properly then. ++ * Those are not reliable to render the characters exactly according to the given CPI. ++ * So Re-calculate the width to wrap up to be comfortable with CPI. ++ */ ++ wchar_t *wtext = NULL, *wnewtext = NULL; ++ gchar *newtext = NULL; ++ gsize len, col, i, wwidth = 0; ++ PangoRectangle ink_rect, logical_rect; ++ ++ wtext = (wchar_t *)g_utf8_to_ucs4(para->text, para->length, NULL, NULL, NULL); ++ if (wtext == NULL) { ++ fprintf(stderr, "%s: Unable to convert UTF-8 to UCS-4.\n", g_get_prgname()); ++ fail: ++ g_free(wtext); ++ g_free(wnewtext); ++ g_free(newtext); ++ if (page_layout->cups_mode) { ++ /* try to continue parsing text */ ++ p = next; ++ continue; ++ } else { ++ exit(1); ++ } ++ } ++ len = g_utf8_strlen(para->text, para->length); ++ /* the amount of characters that can be put on the line against CPI */ ++ col = page_layout->column_width / 72.0 * page_layout->cpi; ++ if (len > col) { ++ /* need to wrap up them */ ++ wnewtext = g_new(wchar_t, wcslen(wtext) + 1); ++ if (wnewtext == NULL) { ++ fprintf(stderr, "%s: Unable to allocate the memory.\n", g_get_prgname()); ++ goto fail; ++ } ++ for (i = 0; i < len; i++) { ++ wwidth += wcwidth(wtext[i]); ++ if (wwidth > col) ++ break; ++ wnewtext[i] = wtext[i]; ++ } ++ wnewtext[i] = 0L; ++ ++ newtext = g_ucs4_to_utf8((const gunichar *)wnewtext, i, NULL, NULL, NULL); ++ if (newtext == NULL) { ++ fprintf(stderr, "%s: Unable to convert UCS-4 to UTF-8.\n", g_get_prgname()); ++ goto fail; ++ } ++ pango_layout_set_text(para->layout, newtext, -1); ++ pango_layout_get_extents(para->layout, &ink_rect, &logical_rect); ++ paint_width = logical_rect.width / PANGO_SCALE; ++ g_free(wnewtext); ++ g_free(newtext); ++ ++ para->length = i; ++ next = g_utf8_offset_to_pointer(para->text, para->length); ++ wc = g_utf8_prev_char(next); ++ } else { ++ pango_layout_set_text(para->layout, para->text, para->length); ++ } ++ g_free(wtext); ++ ++ pango_layout_set_width(para->layout, -1); ++ } else { ++ pango_layout_set_text (para->layout, para->text, para->length); ++ if (page_layout->do_wordwrap) { ++ pango_layout_set_wrap (para->layout, PANGO_WRAP_WORD_CHAR); ++ pango_layout_set_width (para->layout, paint_width * PANGO_SCALE); ++ } else { ++ pango_layout_set_width (para->layout, -1); ++ } ++ } ++ + pango_layout_set_justify (para->layout, page_layout->do_justify); + pango_layout_set_alignment (para->layout, + page_layout->pango_dir == PANGO_DIRECTION_LTR + ? PANGO_ALIGN_LEFT : PANGO_ALIGN_RIGHT); +- if (page_layout->do_wordwrap) { +- pango_layout_set_wrap (para->layout, PANGO_WRAP_WORD_CHAR); +- pango_layout_set_width (para->layout, paint_width * PANGO_SCALE); +- } else { +- pango_layout_set_width (para->layout, -1); +- } + + para->height = 0; + diff --git a/SOURCES/paps-fix-loop-in-split.patch b/SOURCES/paps-fix-loop-in-split.patch new file mode 100644 index 0000000..89bc1fc --- /dev/null +++ b/SOURCES/paps-fix-loop-in-split.patch @@ -0,0 +1,31 @@ +From 6c3fa9959dd454938378ade2fec8e84cee7d6916 Mon Sep 17 00:00:00 2001 +From: Akira TAGOH +Date: Tue, 27 Jul 2010 12:19:30 +0900 +Subject: [PATCH 1/2] Fix rhbz#618483: texttopaps becoms runaway memory hog + + * src/paps.c (split_text_into_paragraphs): fix a infinite loop + when non-printable characters are in the text. +--- + src/paps.c | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + + * paps.c: Erased --justify option since it is not implemented in +diff --git a/src/paps.c b/src/paps.c +index 72dbaad..dcef349 100644 +--- a/src/paps.c ++++ b/src/paps.c +@@ -835,7 +835,10 @@ split_text_into_paragraphs (PangoContext *pango_context, + goto fail; + } + for (i = 0; i < len; i++) { +- wwidth += wcwidth(wtext[i]); ++ gssize w = wcwidth(wtext[i]); ++ ++ if (w >= 0) ++ wwidth += w; + if (wwidth > col) + break; + wnewtext[i] = wtext[i]; +-- +1.7.1.1 + diff --git a/SOURCES/paps-fix-non-weak-symbol.patch b/SOURCES/paps-fix-non-weak-symbol.patch new file mode 100644 index 0000000..8edf596 --- /dev/null +++ b/SOURCES/paps-fix-non-weak-symbol.patch @@ -0,0 +1,26 @@ +diff -pruN paps-0.6.8.orig/src/Makefile.am paps-0.6.8/src/Makefile.am +--- paps-0.6.8.orig/src/Makefile.am 2012-11-23 14:22:51.506176037 +0900 ++++ paps-0.6.8/src/Makefile.am 2012-11-23 14:25:41.828410416 +0900 +@@ -8,13 +8,14 @@ bin_PROGRAMS = paps + paps_CFLAGS = -Wall $(CUPS_CFLAGS) + paps_SOURCES = paps.c + paps_LDADD = $(lib_LTLIBRARIES) $(all_libraries) +-paps_LDFLAGS = `pkg-config --libs pangoft2` $(CUPS_LIBS) ++paps_LDFLAGS = $(CUPS_LIBS) + paps_DEPENDENCIES = $(lib_LTLIBRARIES) + + EXTRA_DIST = test_libpaps.c paps.1 + + # set the include path found by configure + INCLUDES= $(all_includes) `pkg-config --cflags pangoft2` ++LIBS = `pkg-config --libs pangoft2` + + # Test program + noinst_PROGRAMS = test_libpaps +@@ -22,6 +23,5 @@ noinst_PROGRAMS = test_libpaps + + test_libpaps_SOURCES = test_libpaps.c + test_libpaps_LDADD = $(lib_LTLIBRARIES) $(all_libraries) +-test_libpaps_LDFLAGS = `pkg-config --libs pangoft2` + test_libpaps_DEPENDENCIES = $(lib_LTLIBRARIES) + diff --git a/SOURCES/paps-fix-paper-size-truncate.patch b/SOURCES/paps-fix-paper-size-truncate.patch new file mode 100644 index 0000000..90e9fcb --- /dev/null +++ b/SOURCES/paps-fix-paper-size-truncate.patch @@ -0,0 +1,15 @@ +diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c +--- paps-0.6.8.orig/src/paps.c 2015-04-24 11:49:53.220718394 +0900 ++++ paps-0.6.8/src/paps.c 2015-04-24 11:51:30.847718394 +0900 +@@ -532,9 +532,9 @@ int main(int argc, char *argv[]) + + /* Page layout */ + if (page_width < 0) +- page_width = paper_sizes[(int)paper_type].width; ++ page_width = (paper_sizes[(int)paper_type].width + 0.5); + if (page_height < 0) +- page_height = paper_sizes[(int)paper_type].height; ++ page_height = (paper_sizes[(int)paper_type].height + 0.5); + + if (num_columns == 1) + total_gutter_width = 0; diff --git a/SOURCES/paps-fix-tab-width.patch b/SOURCES/paps-fix-tab-width.patch new file mode 100644 index 0000000..a1011ee --- /dev/null +++ b/SOURCES/paps-fix-tab-width.patch @@ -0,0 +1,77 @@ +@@ -, +, @@ +--- + src/libpaps.c | 40 +++++++++++++++++++++++++++++----------- + 1 file changed, 29 insertions(+), 11 deletions(-) +--- a/src/libpaps.c ++++ a/src/libpaps.c +@@ -251,7 +251,6 @@ gchar *paps_layout_line_to_postscript_strdup(paps_t *paps_, + { + paps_private_t *paps = (paps_private_t*)paps_; + GString *layout_str = g_string_new(""); +- gchar *ret_str; + + add_line_to_postscript(paps, + layout_str, +@@ -259,10 +258,7 @@ gchar *paps_layout_line_to_postscript_strdup(paps_t *paps_, + pos_y, + layout_line); + +- ret_str = layout_str->str; +- g_string_free(layout_str, FALSE); +- +- return ret_str; ++ return g_string_free(layout_str, FALSE); + } + + static void +@@ -408,9 +404,26 @@ static void draw_contour(paps_private_t *paps, + { + GSList *runs_list; + double scale = 72.0 / PANGO_SCALE / PAPS_DPI; ++ PangoGlyphUnit avg_width = 1; + + g_string_append(layout_str, "("); +- ++ ++ if (paps->cpi > 0.0L) ++ { ++ /* calculate approximate width per a character */ ++ for (runs_list = pango_line->runs; runs_list != NULL; runs_list = g_slist_next(runs_list)) ++ { ++ PangoLayoutRun *run = runs_list->data; ++ PangoGlyphString *glyphs = run->glyphs; ++ int i; ++ ++ for (i = 0; i < glyphs->num_glyphs; i++) ++ { ++ if (glyphs->glyphs[i].glyph != PANGO_GLYPH_EMPTY) ++ avg_width = MAX (avg_width, glyphs->glyphs[i].geometry.width); ++ } ++ } ++ } + /* Loop over the runs and output font info */ + runs_list = pango_line->runs; + double x_pos = line_start_pos_x; +@@ -433,11 +446,16 @@ static void draw_contour(paps_private_t *paps, + glyph_pos_x = x_pos + 1.0*geometry.x_offset * scale; + glyph_pos_y = line_start_pos_y - 1.0*geometry.y_offset * scale; + +- if (paps->cpi > 0.0L) { +- x_pos += (1 / paps->cpi * 72.0); +- } else { +- x_pos += geometry.width * scale * paps->scale_x; +- } ++ if (paps->cpi > 0.0L) ++ { ++ double n = ((double)geometry.width) / avg_width; ++ ++ x_pos += n * (1 / paps->cpi * 72.0); ++ } ++ else ++ { ++ x_pos += geometry.width * scale * paps->scale_x; ++ } + + if (glyphs->glyphs[glyph_idx].glyph == PANGO_GLYPH_EMPTY) + continue; +-- diff --git a/SOURCES/paps-ft-header.patch b/SOURCES/paps-ft-header.patch new file mode 100644 index 0000000..f2d8a2e --- /dev/null +++ b/SOURCES/paps-ft-header.patch @@ -0,0 +1,15 @@ +diff -pruN paps-0.6.8.orig/src/libpaps.c paps-0.6.8/src/libpaps.c +--- paps-0.6.8.orig/src/libpaps.c 2014-03-20 12:10:50.000000000 +0900 ++++ paps-0.6.8/src/libpaps.c 2014-03-20 12:11:54.000000000 +0900 +@@ -25,8 +25,9 @@ + + #include + #include +-#include +-#include ++#include ++#include FT_GLYPH_H ++#include FT_OUTLINE_H + #include + #include + #include diff --git a/SOURCES/paps-langinfo.patch b/SOURCES/paps-langinfo.patch new file mode 100644 index 0000000..2e5b59f --- /dev/null +++ b/SOURCES/paps-langinfo.patch @@ -0,0 +1,37 @@ +diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c +--- paps-0.6.8.orig/src/paps.c 2008-09-01 15:07:03.000000000 +0900 ++++ paps-0.6.8/src/paps.c 2008-09-01 15:49:10.000000000 +0900 +@@ -25,6 +25,7 @@ + #include + #include "libpaps.h" + #include ++#include + #include + #include + #include +@@ -331,6 +332,9 @@ int main(int argc, char *argv[]) + GIConv cvh = NULL; + GOptionGroup *options; + ++ /* Set locale from environment. */ ++ setlocale(LC_ALL, ""); ++ + /* Prerequisite when using glib. */ + g_type_init(); + +@@ -480,6 +484,15 @@ int main(int argc, char *argv[]) + page_layout.scale_x = page_layout.scale_y = 1.0; + + ++ if (encoding == NULL) ++ { ++ encoding = g_strdup(nl_langinfo(CODESET)); ++ if (!strcmp(encoding, "UTF-8")) ++ { ++ g_free(encoding); ++ encoding = NULL; ++ } ++ } + if (encoding != NULL) + { + cvh = g_iconv_open ("UTF-8", encoding); diff --git a/SOURCES/paps.convs b/SOURCES/paps.convs new file mode 100644 index 0000000..03d406a --- /dev/null +++ b/SOURCES/paps.convs @@ -0,0 +1,8 @@ +# Use the texttopaps filter (from the paps package) in preference to +# the texttops filter shipped as part of CUPS. This is so that we +# have full UTF-8 support. +# +# To use the default CUPS texttops filter instead, remove this file +# (or the package it belongs to). + +text/plain application/postscript 30 texttopaps diff --git a/SPECS/paps.spec b/SPECS/paps.spec new file mode 100644 index 0000000..805f289 --- /dev/null +++ b/SPECS/paps.spec @@ -0,0 +1,443 @@ +Name: paps +Version: 0.7.1 +Release: 4%{?dist} + +License: LGPLv2+ +URL: http://paps.sourceforge.net/ +Source0: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz +Source1: paps.convs +Source2: 29-paps.conf +Source3: http://downloads.sourceforge.net/%{name}/%{name}-0.6.8.tar.gz +BuildRequires: make +BuildRequires: pango-devel automake autoconf libtool doxygen cups-devel intltool +## https://sourceforge.net/tracker/index.php?func=detail&aid=1832897&group_id=153049&atid=786241 +Patch0: paps-0.6.8-shared.patch +## https://sourceforge.net/tracker/index.php?func=detail&aid=1832924&group_id=153049&atid=786241 +Patch1: paps-0.6.8-wordwrap.patch +## https://sourceforge.net/tracker/index.php?func=detail&aid=1832926&group_id=153049&atid=786241 +Patch2: paps-langinfo.patch +## https://sourceforge.net/tracker/index.php?func=detail&aid=1832929&group_id=153049&atid=786241 +Patch3: paps-0.6.6-lcnumeric.patch +## https://sourceforge.net/tracker/index.php?func=detail&aid=1832935&group_id=153049&atid=786241 +Patch4: paps-exitcode.patch +## rhbz#854897 +Patch5: paps-854897-manpage.patch +## Fedora specific patch to integrate with CUPS +Patch50: paps-cups.patch +Patch51: paps-cpilpi.patch +## rhbz#424951 +Patch52: paps-dsc-compliant.patch +Patch53: paps-autoconf262.patch +## rhbz#524883 +Patch54: paps-fix-cpi.patch +## rhbz#618483 +Patch55: paps-fix-loop-in-split.patch +## rhbz#857592 +Patch56: paps-fix-tab-width.patch +Patch57: paps-fix-non-weak-symbol.patch +Patch58: paps-correct-fsf-address.patch +## rhbz#1078519 +Patch59: %{name}-ft-header.patch +## rhbz#1196997 +Patch60: %{name}-a3.patch +## rhbz#1214939 +Patch61: %{name}-fix-paper-size-truncate.patch + +Summary: Plain Text to PostScript converter +%description +paps is a PostScript converter from plain text file using Pango. + +%package -n texttopaps +Summary: CUPS filter based on paps +Obsoletes: %{name}-libs < %{version} +Obsoletes: %{name}-devel < %{version} +Requires: cups-filesystem fontpackages-filesystem +%description -n texttopaps + +paps is a PostScript converter from plain text file using Pango. + +This package contains a CUPS filter based on paps. + + +%prep +%setup -q -a 3 +pushd %{name}-0.6.8 +%patch0 -p1 -b .shared +%patch1 -p1 -b .wordwrap +%patch2 -p1 -b .langinfo +%patch3 -p1 -b .lcnumeric +%patch4 -p1 -b .exitcode +%patch5 -p1 -b .manpage +%patch50 -p1 -b .cups +%patch51 -p1 -b .cpilpi +%patch52 -p1 -b .dsc +%patch53 -p1 -b .autoconf262 +%patch54 -p1 -b .fixcpi +%patch55 -p1 -b .loop +%patch56 -p1 -b .tab +%patch57 -p1 -b .weak-symbol +%patch58 -p1 -b .fsf +%patch59 -p1 -b .ft-header +%patch60 -p1 -b .a3 +%patch61 -p1 -b .paper-size +libtoolize -f -c +autoreconf -f -i +popd + + +%build +%configure --disable-static +make %{?_smp_mflags} + +pushd %{name}-0.6.8 +%configure --disable-static +make %{?_smp_mflags} +popd + +%install +pushd %{name}-0.6.8 +make install DESTDIR=$RPM_BUILD_ROOT INSTALL="/usr/bin/install -p" + +# remove unnecessary files +rm $RPM_BUILD_ROOT%{_libdir}/libpaps.la + +# make a symlink for CUPS filter +install -d $RPM_BUILD_ROOT%{_cups_serverbin}/filter # Not libdir +mv $RPM_BUILD_ROOT%{_bindir}/paps $RPM_BUILD_ROOT%{_cups_serverbin}/filter/texttopaps +mv $RPM_BUILD_ROOT%{_mandir}/man1/paps.1 $RPM_BUILD_ROOT%{_mandir}/man1/texttopaps.1 + +install -d $RPM_BUILD_ROOT%{_datadir}/cups/mime +install -p -m0644 %{SOURCE1} $RPM_BUILD_ROOT%{_datadir}/cups/mime/ + +install -d $RPM_BUILD_ROOT%{_sysconfdir}/fonts/conf.d +install -p -m0644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/fonts/conf.d/ + +rm -rf $RPM_BUILD_ROOT%{_includedir} +rm $RPM_BUILD_ROOT%{_libdir}/libpaps.so +popd + +make install DESTDIR=$RPM_BUILD_ROOT INSTALL="/usr/bin/install -p" + +%ldconfig_scriptlets libs + +%files +%doc AUTHORS COPYING.LIB README +%{_bindir}/paps +%{_mandir}/man1/paps.1* + +%files -n texttopaps +%doc %{name}-0.6.8/COPYING.LIB %{name}-0.6.8/AUTHORS %{name}-0.6.8/README +%{_mandir}/man1/texttopaps.1* +%{_libdir}/libpaps.so.* +%{_cups_serverbin}/filter/texttopaps +%{_datadir}/cups/mime/paps.convs +%{_sysconfdir}/fonts/conf.d/29-paps.conf + + +%changelog +* Mon Aug 09 2021 Mohan Boddu - 0.7.1-4 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Fri Apr 16 2021 Mohan Boddu - 0.7.1-3 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Tue Jan 26 2021 Fedora Release Engineering - 0.7.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Thu Oct 8 2020 Akira TAGOH - 0.7.1-1 +- New upstream release. + Resolves: rhbz#1254352 +- Sub-package texttopaps with old code. + +* Tue Jul 28 2020 Fedora Release Engineering - 0.6.8-46 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed Jan 29 2020 Fedora Release Engineering - 0.6.8-45 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Jul 26 2019 Fedora Release Engineering - 0.6.8-44 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Fri Feb 01 2019 Fedora Release Engineering - 0.6.8-43 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Fri Jul 13 2018 Fedora Release Engineering - 0.6.8-42 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Thu Feb 08 2018 Fedora Release Engineering - 0.6.8-41 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Jan 20 2018 Björn Esser - 0.6.8-40 +- Rebuilt for switch to libxcrypt + +* Thu Aug 03 2017 Fedora Release Engineering - 0.6.8-39 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 0.6.8-38 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Sat Feb 11 2017 Fedora Release Engineering - 0.6.8-37 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Feb 04 2016 Fedora Release Engineering - 0.6.8-36 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Jun 18 2015 Fedora Release Engineering - 0.6.8-35 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Fri Apr 24 2015 Akira TAGOH - 0.6.8-34 +- Fix wrong paper size due to the integer cast. + +* Mon Mar 2 2015 Akira TAGOH - 0.6.8-33 +- Support A3 paper size. + +* Sat Feb 21 2015 Till Maas - 0.6.8-32 +- Rebuilt for Fedora 23 Change + https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code + +* Fri Oct 31 2014 Akira TAGOH - 0.6.8-31 +- Add a fontconfig config to force the scalable font. + +* Sun Aug 17 2014 Fedora Release Engineering - 0.6.8-30 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Fri Jun 06 2014 Fedora Release Engineering - 0.6.8-29 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Thu Mar 20 2014 Akira TAGOH - 0.6.8-28 +- Fix FTBFS against freetype's header files location change. (#1078519) + +* Mon Dec 16 2013 Akira TAGOH - 0.6.8-27 +- Move the place of paps.convs to %%{_datadir}/cups/mime. (#1042984) + +* Wed Jul 31 2013 Akira TAGOH - 0.6.8-26 +- Fix the width calculation with CPI enabled. (#990228) + +* Thu Apr 18 2013 Akira TAGOH - 0.6.8-25 +- Rebuilt for aarch64 support. (#926309) + +* Thu Feb 14 2013 Fedora Release Engineering - 0.6.8-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Fri Nov 23 2012 Akira TAGOH - 0.6.8-23 +- the spec file cleanup +- Fix the undefined symbol issue in libpaps.so.0 +- Correct FSF address in the COPYING.LIB + +* Mon Sep 24 2012 Akira TAGOH - 0.6.8-22 +- Ensure the latest version of paps-libs are installed. + +* Fri Sep 21 2012 Akira TAGOH - 0.6.8-21 +- Fix wrong width for whitespaces when enabling CPI feature. (#857592) + +* Thu Sep 6 2012 Akira TAGOH - 0.6.8-20 +- Add a missing description of --encoding in manpage. (#854897) + +* Fri Jul 20 2012 Fedora Release Engineering - 0.6.8-19 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Wed Jan 11 2012 Akira TAGOH - 0.6.8-18 +- Use %%{_cups_serverbin} instead of the hardcoded path. (#772240) + +* Mon Dec 5 2011 Akira TAGOH - 0.6.8-17 +- Add ldconfig in %%post/%%postun for paps-libs (#759880) + +* Fri Jun 24 2011 Akira TAGOH - 0.6.8-16 +- Fix FTBFS issue. (#716211) + +* Tue Feb 08 2011 Fedora Release Engineering - 0.6.8-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Tue Jul 27 2010 Akira TAGOH - 0.6.8-14 +- Fix the infinite loop in splitting paragraphs (#618483) + +* Fri Mar 12 2010 Akira TAGOH - 0.6.8-13 +- Fix the directory's group ownership. (#572733) + +* Tue Dec 8 2009 Akira TAGOH - 0.6.8-12 +- Add paps.convs to behaves the cups filter without the hardcoded thing + in cups. (#545031) + +* Wed Oct 14 2009 Akira TAGOH - 0.6.8-11 +- Fix code that deal with CPI parameter to be accurate. (#524883) + +* Sat Jul 25 2009 Fedora Release Engineering - 0.6.8-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Thu Feb 26 2009 Fedora Release Engineering - 0.6.8-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Nov 17 2008 Akira TAGOH - 0.6.8-8 +- Courier font to be a default font for texttopaps. (#469325) + +* Mon Sep 1 2008 Akira TAGOH - 0.6.8-7 +- paps-langinfo.patch: Updated. +- paps-exitcode.patch: Updated. + +* Fri May 16 2008 Akira TAGOH - 0.6.8-6 +- paps-cups.patch: Fix printing with -o landscape in CUPS. (#222137) +- paps-autoconf262.patch: Fix an error on autoreconf. + +* Tue Feb 12 2008 Akira TAGOH - 0.6.8-5 +- Rebuild for gcc-4.3. + +* Wed Jan 23 2008 Akira TAGOH - 0.6.8-4 +- Fix an exception on ghostscript. (#429275) + +* Tue Jan 15 2008 Akira TAGOH - 0.6.8-3 +- Put %%%%Pages: after %%%%Trailer. (#424951) + +* Thu Jan 10 2008 Akira TAGOH - 0.6.8-2 +- paps-0.6.8-dsc-compliant.patch: Patch out to be DSC compliant. (#424951) + +* Fri Nov 30 2007 Akira TAGOH - 0.6.8-1 +- New upstream release. + - Remove patches merged and unnecessary anymore: + - paps-makefile.patch + - paps-formfeed.patch + - paps-0.6.6-encoding.patch + - paps-typo-font-scale.patch + - paps-0.6.6-segfault.patch + - paps-0.6.6-font-option.patch + - paps-0.6.6-lcctype.patch +- paps-0.6.8-shared.patch: Enable building shared library. +- paps-0.6.8-wordwrap.patch: Update a bit to get it working without an wordwrap + mode. +- Add paps-libs and paps-devel package. +- paps-cups.patch: Update. +- paps-cpilpi.patch: Update. +- Fix the wrong rendering with CPI option. (#237202) +- Fix the unnecessary rotation with the landscape option when paps is running + as CUPS filter. (#222137) + +* Thu Aug 23 2007 Akira TAGOH - 0.6.6-21 +- Rebuild + +* Fri Aug 10 2007 Akira TAGOH +- Update License tag. + +* Wed May 30 2007 Akira TAGOH - 0.6.6-20 +- Fix to not do wordwrap when 'wrap=false' is given. (#240588) + +* Tue Mar 27 2007 Akira TAGOH - 0.6.6-19 +- Fix PostScript breakage following the non-monetary numeric format from + current locale. (#231916) + +* Wed Mar 7 2007 Akira TAGOH - 0.6.6-18 +- default to lpi=6 and cpi=10 if paps is bringing up as cups filter. (#223862) + +* Tue Jan 23 2007 Akira TAGOH +- Better the encoding guess by looking at current locale. (#212154) + +* Mon Dec 4 2006 Akira TAGOH - 0.6.6-17 +- Fix a segfault on non-printable character. (#216296) + +* Sat Sep 30 2006 Akira TAGOH - 0.6.6-16 +- paps-0.6.6-exitcode.patch: exit immediately with proper exit code + when unrecoverable error occurs. (#208592) + +* Fri Sep 29 2006 Tim Waugh - 0.6.6-15 +- Avoid using iconv when not needed (bug #206259). + +* Thu Sep 14 2006 Akira TAGOH - 0.6.6-14 +- paps-cups.patch: try to parse input even if any invalid character appears. + (#206259) + +* Thu Aug 31 2006 Akira TAGOH - 0.6.6-13 +- paps-formfeed.patch: fixed to not insert an extra line in next page. + (#202731) + +* Thu Aug 17 2006 Tim Waugh - 0.6.6-12 +- Map CUPS charset names to real ones (bug #197577). + +* Mon Jul 17 2006 Akira TAGOH - 0.6.6-11 +- add an owner info to PS. + +* Wed Jul 12 2006 Jesse Keating - 0.6.6-10.2 +- rebuild + +* Tue Jul 4 2006 Akira TAGOH - 0.6.6-10 +- paps-0.6.6-cpilpi.patch: add --cpi and --lpi option to support the characters + per inch and the lines per inch. +- paps-cups.patch: add cpi and lpi support. + +* Thu Jun 29 2006 Tim Waugh - 0.6.6-9 +- Fixed font-option patch. +- Adjusted CUPS patch: CUPS invokes the filter with the destination + printer name in argv[0], not the binary name. +- CUPS filter lives in CUPS_SERVERBIN, which is /usr/lib/cups on all + architectures -- not %%{_libdir}/cups. + +* Thu Jun 29 2006 Akira TAGOH - 0.6.6-8 +- use dist tag. +- paps-cups.patch: applied to work paps as CUPS filter. +- paps-0.6.6-encoding.patch: null-terminates the output. + +* Tue Jun 27 2006 Akira TAGOH - 0.6.6-7 +- rebuilt to import into Core. + +* Wed Jun 21 2006 Akira TAGOH - 0.6.6-6 +- paps-0.6.6-wordwrap.patch: applied to do a wordwrap. + +* Tue Jun 20 2006 Akira TAGOH - 0.6.6-5 +- paps-typo-font-scale.patch: backported from CVS. +- paps-0.6.6-font-option.patch: integrated --font-family and --font-scale + options to --font. +- paps-0.6.6-lcctype.patch: follow LC_CTYPE to determine the default language. + +* Fri Jun 16 2006 Akira TAGOH - 0.6.6-4 +- added libtool and doxygen to BuildReq. +- removed NEWS file which is empty. + +* Mon Jun 12 2006 Akira TAGOH - 0.6.6-3 +- use make install DESTDIR=... instead of %%makeinstall +- add automake and autoconf to BuildReq. + +* Thu May 25 2006 Akira TAGOH - 0.6.6-2 +- paps-0.6.6-encoding.patch: support --encoding option to be able to convert + the input file to UTF-8. +- paps-0.6.6-segfault.patch: fixed a possible segfault issue when reading is + failed. + +* Fri May 19 2006 Akira TAGOH - 0.6.6-1 +- New upstream release. + +* Mon Apr 17 2006 Akira TAGOH - 0.6.5-1 +- New upstream release. + - paps-0.6.3-fix-pagesize.patch: removed. it has been merged in upstream. + - paps-0.6.3-goption.patch: removed. it has been merged in upstream. + - paps-0.6.3-header.patch: removed. it has been merged in upstream. +- paps-makefile.patch: rework to be applied. + +* Fri Mar 31 2006 Akira TAGOH - 0.6.3-4 +- paps-0.6.3-formfeed.patch: applied to deal with the formfeed mark properly. +- paps-0.6.3-goption.patch: rewritten option parser using GOption. and segfault + gone as well. (#187205) +- paps-0.6.3-header.patch: applied to support the output of the page header. + +* Fri Mar 24 2006 Akira TAGOH - 0.6.3-3 +- paps-0.6.3-fix-pagesize.patch: fixed displaying the beginning of line at out of page. (#176207) + +* Thu Mar 2 2006 Akira TAGOH - 0.6.3-2 +- rebuilt. + +* Wed Jan 11 2006 Akira TAGOH - 0.6.3-1 +- New upstream release. +- paps-0.6.2-fix-bufferoverflow.patch: removed. + +* Wed Dec 21 2005 Akira TAGOH - 0.6.2-1 +- New upstream release. + - the bitmap font is now ignored. (#176206) +- paps-0.6.2-fix-bufferoverflow.patch: applied to fix the buffer overflow. + +* Tue Dec 13 2005 Akira TAGOH - 0.6.1-1 +- New upstream release. +- paps-0.6.1-makefile.patch: applied to install docs on the proper dir. + +* Fri Nov 4 2005 Akira TAGOH - 0.5-1 +- New upstream release. + +* Tue Oct 18 2005 Akira TAGOH - 0.3-1 +- Initial package. +