pdf-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [pdf-devel] Patch for FS#117


From: gerel
Subject: Re: [pdf-devel] Patch for FS#117
Date: Mon, 19 Apr 2010 08:23:53 -0300

 > From: Aleksander Morgado <address@hidden>
 > Date: Mon, 19 Apr 2010 09:53:04 +0200
 > 
 > 
 > > Here is a patch for #117, text object and ASCII concat (doc and tests are a
 > > gift :-) ).
 > > 
 > 
 > Wow, thanks, that was fast! Just a minor comment: use current year 2010
 > in the copyright notice of the new files.
 > 

Ouch, corrected. :-)

##
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# target_branch: file:///home/gerel/PROJECTS/libgnupdf/trunk/
# testament_sha1: 57e1baa33322166419a32ff471d0a601b76d5461
# timestamp: 2010-04-19 08:21:53 -0300
# base_revision_id: address@hidden
# 
# Begin patch
=== modified file 'ChangeLog'
--- ChangeLog   2010-04-18 11:13:22 +0000
+++ ChangeLog   2010-04-19 11:21:49 +0000
@@ -1,3 +1,19 @@
+2010-04-18  Gerardo E. Gidoni  <address@hidden>
+
+       Added new method pdf_text_concat_ascii()
+       * doc/gnupdf.texi: added its documentation.
+       
+       * src/base/pdf-text.c: added implementation.
+       
+       * src/base/pdf-text.h: likewise.
+
+       * torture/unit/Makefile.am: test implementation.
+
+       * torture/unit/base/text/tsuite-text.c: likewise.
+       
+       * torture/unit/base/text/pdf-text-concat-ascii.c: likewise.
+
+
 2010-04-15  Jose E. Marchesi  <address@hidden>
 
        Remove spurious blank lines before EOF in the codebase.

=== modified file 'doc/gnupdf.texi'
--- doc/gnupdf.texi     2010-04-13 20:50:45 +0000
+++ doc/gnupdf.texi     2010-04-19 11:21:49 +0000
@@ -6573,6 +6573,39 @@
 @end table
 @end deftypefun
 
+
address@hidden pdf_status_t pdf_text_concat_ascii (pdf_text_t @var{text1}, 
const pdf_char_t * @var{ascii_str})
+
+Concatenate the contents of text variable @var{text1} with ASCII string 
@var{ascii_str},
+and store the result in @var{text1}.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden text1
+The first text variable to concatenate. The contents of this variable
+are modified with the output of the concatenation.
address@hidden ascii_str
+The ascii string to concatenate. The contents of this variable
+are left unchanged.
address@hidden table
address@hidden Returns
+The status of the operation.
address@hidden Usage Example
address@hidden
+pdf_text_t text1;
+pdf_char_t * str;
+
+/* ...initialize `text1' and `str... */
+if (pdf_text_concat_ascii (text1, str) != PDF_OK)
address@hidden
+   /* Manage the error */
address@hidden
address@hidden example
address@hidden table
address@hidden deftypefun
+
+
 @deftypefun pdf_status_t pdf_text_replace (pdf_text_t @var{text}, const 
pdf_text_t @var{new_pattern}, const pdf_text_t @var{old_pattern})
 
 Replace a fixed pattern in the content of a given text variable.

=== modified file 'src/base/pdf-text.c'
--- src/base/pdf-text.c 2010-02-20 16:02:07 +0000
+++ src/base/pdf-text.c 2010-04-19 11:21:49 +0000
@@ -1024,6 +1024,52 @@
 }
 
 
+/* Concatenate a text variable with an ascii string */
+pdf_status_t
+pdf_text_concat_ascii (pdf_text_t text1,
+                       const pdf_char_t * ascii_str)
+{
+  pdf_size_t len;
+
+  len = (pdf_size_t) strlen ((char*)ascii_str);
+  if (!pdf_text_is_ascii7 (ascii_str, len))
+    {
+      return PDF_EBADDATA;
+    }
+
+  /* now convert to utf32he and concatenate */
+  if(len > 0)
+    {
+      pdf_char_t * newbuf;
+      pdf_status_t ret;
+      pdf_char_t *tmp_data;
+      pdf_size_t tmp_size;
+
+      /* ascii string is valid utf8 */
+      ret = pdf_text_utf8_to_utf32he (ascii_str, len, &tmp_data, &tmp_size);
+      if (ret != PDF_OK)
+        {
+          return ret;
+        }     
+
+      newbuf = (pdf_char_t *)pdf_realloc (text1->data, text1->size + tmp_size);
+      if (newbuf == NULL)
+        {
+          return PDF_ENOMEM;
+        }
+      else
+        {
+          text1->data = newbuf;
+        }
+
+      memcpy (&(text1->data[text1->size]), tmp_data, tmp_size);
+      text1->size += tmp_size;
+      pdf_dealloc (tmp_data);
+    }
+
+  return PDF_OK;
+}
+
 
 /* Default initial size of the list of replacements */
 #define PDF_TEXT_ISLR   32

=== modified file 'src/base/pdf-text.h'
--- src/base/pdf-text.h 2010-02-20 16:02:07 +0000
+++ src/base/pdf-text.h 2010-04-19 11:21:49 +0000
@@ -282,6 +282,10 @@
                  const pdf_text_t text2,
                  const pdf_bool_t override_langinfo);
 
+/* Concatenate a text variable with an ascii string */
+pdf_status_t
+pdf_text_concat_ascii (pdf_text_t text1,
+                       const pdf_char_t * ascii_str);
 
 /* Replace a fixed pattern in the content of a given text variable */
 pdf_status_t

=== modified file 'torture/unit/Makefile.am'
--- torture/unit/Makefile.am    2010-02-19 01:03:33 +0000
+++ torture/unit/Makefile.am    2010-04-19 11:21:49 +0000
@@ -151,6 +151,7 @@
                   base/text/pdf-text-set-pdfdocenc.c \
                   base/text/pdf-text-set-unicode.c \
                   base/text/pdf-text-concat.c \
+                  base/text/pdf-text-concat-ascii.c \
                   base/text/pdf-text-replace.c \
                   base/text/pdf-text-replace-ascii.c \
                   base/text/pdf-text-filter.c \

=== added file 'torture/unit/base/text/pdf-text-concat-ascii.c'
--- torture/unit/base/text/pdf-text-concat-ascii.c      1970-01-01 00:00:00 
+0000
+++ torture/unit/base/text/pdf-text-concat-ascii.c      2010-04-19 11:21:49 
+0000
@@ -0,0 +1,227 @@
+/* -*- mode: C -*-
+ *
+ *       File:         pdf-text-concat-ascii.c
+ *       Date:         Mon Mar 10 18:30:01 2008
+ *
+ *       GNU PDF Library - Text Module - pdf_text_concat_ascii test case
+ *
+ */
+
+/* Copyright (C) 2010 Free Software Foundation, Inc. */
+
+/* This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <string.h>
+#include <pdf.h>
+#include <check.h>
+
+/*
+ * Test: pdf_text_concat_ascii_001
+ * Description:
+ *   Concatenate text object and non-empty ascii string.
+ * Success conditions:
+ *   1. The call to  pdf_text_concat_ascii should return PDF_OK.
+ *   2. The contents of the output text object must be the expected ones.
+ *   3. The lang/country information in the output object must remain 
unchanged.
+ */
+START_TEST(pdf_text_concat_ascii_001)
+{
+  pdf_char_t *output_data = NULL;
+  pdf_text_t text1 = NULL;
+  pdf_char_t * text2 = " Unix";
+  pdf_char_t *country = (pdf_char_t *)"GB";
+  pdf_char_t *language = (pdf_char_t *)"en";
+  
+  /* Always INIT! Check runs each test in a different process */
+  fail_if(pdf_init() != PDF_OK);
+  
+  fail_if(pdf_text_new (&text1) != PDF_OK);
+
+  fail_if(pdf_text_set_pdfdocenc(text1, (pdf_char_t *)"GNU's not") != PDF_OK);
+
+  fail_if(pdf_text_set_language(text1, language) != PDF_OK);
+  fail_if(pdf_text_set_country(text1, country) != PDF_OK);
+
+  /* 1. The call to  pdf_text_concat_ascii should return PDF_OK. */
+  fail_unless(pdf_text_concat_ascii(text1, text2) == PDF_OK);
+
+  /* 2. The contents of the output text object must be the expected ones. */
+  fail_if(pdf_text_get_pdfdocenc(&output_data, text1) != PDF_OK);
+  fail_unless(strlen((char *)output_data) == strlen("GNU's not Unix"));
+  fail_unless(strcmp((char *)output_data, "GNU's not Unix") == 0);
+  
+  /* 3. The lang/country information in the output object must remain
+   *    unchanged. */
+  fail_unless(strcmp((char *)pdf_text_get_language(text1),
+                     (char *)language) == 0);
+  fail_unless(strcmp((char *)pdf_text_get_country(text1),
+                     (char *)country) == 0);
+  
+  pdf_text_destroy(text1);
+  pdf_dealloc(output_data);
+}
+END_TEST
+
+
+/*
+ * Test: pdf_text_concat_ascii_002
+ * Description:
+ *   Concatenate text object without lang/country with non-empty ascii string.
+ * Success conditions:
+ *   1. The call to  pdf_text_concat_ascii should return PDF_OK.
+ *   2. The contents of the output text object must be the expected ones.
+ *   3. The lang/country information in the output object must be empty.
+ */
+START_TEST(pdf_text_concat_ascii_002)
+{
+  pdf_char_t *output_data = NULL;
+  pdf_text_t text1 = NULL;
+  pdf_char_t * text2 = " Unix";
+  
+  /* Always INIT! Check runs each test in a different process */
+  fail_if(pdf_init() != PDF_OK);
+  
+  fail_if(pdf_text_new (&text1) != PDF_OK);
+  
+  fail_if(pdf_text_set_pdfdocenc(text1, (pdf_char_t *)"GNU's not") != PDF_OK);
+  
+  /* 1. The call to  pdf_text_concat_ascii should return PDF_OK. */
+  fail_unless(pdf_text_concat_ascii(text1, text2) == PDF_OK);
+  
+  /* 2. The contents of the output text object must be the expected ones. */
+  fail_if(pdf_text_get_pdfdocenc(&output_data, text1) != PDF_OK);
+  fail_unless(strlen((char *)output_data) == strlen("GNU's not Unix"));
+  fail_unless(strcmp((char *)output_data, "GNU's not Unix") == 0);
+  
+  /* 3. The lang/country information in the output object must be empty. */
+  fail_unless(strlen((char *)pdf_text_get_language(text1)) == 0);
+  fail_unless(strlen((char *)pdf_text_get_country(text1)) == 0);
+  
+  pdf_text_destroy(text1);
+  pdf_dealloc(output_data);
+}
+END_TEST
+
+
+/*
+ * Test: pdf_text_concat_ascii_003
+ * Description:
+ *   Concatenate text object with empty string.
+ * Success conditions:
+ *   1. The call to  pdf_text_concat_ascii should return PDF_OK.
+ *   2. The contents of the output text object should be empty.
+ *   3. The lang/country information in the output object must remain 
unchanged.
+ */
+START_TEST(pdf_text_concat_ascii_003)
+{
+  pdf_char_t *output_data = NULL;
+  pdf_text_t text1 = NULL;
+  pdf_char_t * text2 = "";
+  pdf_char_t *country = (pdf_char_t *)"GB";
+  pdf_char_t *language = (pdf_char_t *)"en";
+  
+  /* Always INIT! Check runs each test in a different process */
+  fail_if(pdf_init() != PDF_OK);
+  
+  fail_if(pdf_text_new (&text1) != PDF_OK);
+  
+  fail_if(pdf_text_set_pdfdocenc(text1, (pdf_char_t *)"GNU's not Unix") != 
PDF_OK);
+  fail_if(pdf_text_set_language(text1, language) != PDF_OK);
+  fail_if(pdf_text_set_country(text1, country) != PDF_OK);
+  
+  /* 1. The call to  pdf_text_concat_ascii should return PDF_OK. */
+  fail_unless(pdf_text_concat_ascii(text1, text2) == PDF_OK);
+  
+  /* 2. The contents of the output text object should be empty. */
+  fail_if(pdf_text_get_pdfdocenc(&output_data, text1) != PDF_OK);
+  fail_unless(strlen((char *)output_data) == strlen("GNU's not Unix"));
+  fail_unless(strcmp((char *)output_data, "GNU's not Unix") == 0);
+  
+  /* 3. The lang/country information in the output object must remain
+   *    unchanged. */
+  fail_unless(strcmp((char *)pdf_text_get_language(text1),
+                     (char *)language) == 0);
+  fail_unless(strcmp((char *)pdf_text_get_country(text1),
+                     (char *)country) == 0);
+  
+  pdf_text_destroy(text1);
+  pdf_dealloc(output_data);
+}
+END_TEST
+
+/*
+ * Test: pdf_text_concat_ascii_004
+ * Description:
+ *   Concatenate empty text object with empty string.
+ * Success conditions:
+ *   1. The call to  pdf_text_concat_ascii should return PDF_OK.
+ *   2. The contents of the output text object should be empty.
+ *   3. The lang/country information in the output object must remain 
unchanged.
+ */
+START_TEST(pdf_text_concat_ascii_004)
+{
+  pdf_char_t *output_data = NULL;
+  pdf_text_t text1 = NULL;
+  pdf_char_t * text2 = "";
+  pdf_char_t *country = (pdf_char_t *)"GB";
+  pdf_char_t *language = (pdf_char_t *)"en";
+  
+  /* Always INIT! Check runs each test in a different process */
+  fail_if(pdf_init() != PDF_OK);
+  
+  fail_if(pdf_text_new (&text1) != PDF_OK);
+  
+  fail_if(pdf_text_set_pdfdocenc(text1, (pdf_char_t *)"") != PDF_OK);
+  fail_if(pdf_text_set_language(text1, language) != PDF_OK);
+  fail_if(pdf_text_set_country(text1, country) != PDF_OK);
+  
+  /* 1. The call to  pdf_text_concat_ascii should return PDF_OK. */
+  fail_unless(pdf_text_concat_ascii(text1, text2) == PDF_OK);
+  
+  /* 2. The contents of the output text object should be empty. */
+  fail_if(pdf_text_get_pdfdocenc(&output_data, text1) != PDF_OK);
+  fail_unless(strlen((char *)output_data) == 0);
+  
+  /* 3. The lang/country information in the output object must remain
+   *    unchanged. */
+  fail_unless(strcmp((char *)pdf_text_get_language(text1),
+                     (char *)language) == 0);
+  fail_unless(strcmp((char *)pdf_text_get_country(text1),
+                     (char *)country) == 0);
+  
+  pdf_text_destroy(text1);
+  pdf_dealloc(output_data);
+}
+END_TEST
+
+
+
+/*
+ * Test case creation function
+ */
+TCase *
+test_pdf_text_concat_ascii (void)
+{
+  TCase *tc = tcase_create("pdf_text_concat_ascii");
+  tcase_add_test(tc, pdf_text_concat_ascii_001);
+  tcase_add_test(tc, pdf_text_concat_ascii_002);
+  tcase_add_test(tc, pdf_text_concat_ascii_003);
+  tcase_add_test(tc, pdf_text_concat_ascii_004);
+  return tc;
+}
+
+/* End of pdf-text-concat-ascii.c */

=== modified file 'torture/unit/base/text/tsuite-text.c'
--- torture/unit/base/text/tsuite-text.c        2010-02-20 16:02:07 +0000
+++ torture/unit/base/text/tsuite-text.c        2010-04-19 11:21:49 +0000
@@ -49,6 +49,7 @@
 extern TCase *test_pdf_text_set_pdfdocenc (void);
 extern TCase *test_pdf_text_set_unicode (void);
 extern TCase *test_pdf_text_concat (void);
+extern TCase *test_pdf_text_concat_ascii (void);
 extern TCase *test_pdf_text_replace (void);
 extern TCase *test_pdf_text_replace_ascii (void);
 extern TCase *test_pdf_text_filter (void);
@@ -83,6 +84,7 @@
   suite_add_tcase (s, test_pdf_text_set_pdfdocenc());
   suite_add_tcase (s, test_pdf_text_set_unicode());
   suite_add_tcase (s, test_pdf_text_concat());
+  suite_add_tcase (s, test_pdf_text_concat_ascii());
   suite_add_tcase (s, test_pdf_text_replace());
   suite_add_tcase (s, test_pdf_text_replace_ascii());
   suite_add_tcase (s, test_pdf_text_filter());

# Begin bundle
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

###

-gerel




reply via email to

[Prev in Thread] Current Thread [Next in Thread]