Hi GNUsuperblovers. Here is a patch for FS#116. New pdf_text_get_printable. Aleks, tell me if this was what you meant.
## # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: [email protected] # target_branch: file:///home/gerel/PROJECTS/libgnupdf/trunk/ # testament_sha1: d607f174bf2b3c7d25e3829b7893806a5624acae # timestamp: 2010-04-17 19:49:21 -0300 # base_revision_id: jema...@termi-20100415170352-xrpun2k7cqbeu79j # # Begin patch === modified file 'ChangeLog' --- ChangeLog 2010-04-15 15:58:08 +0000 +++ ChangeLog 2010-04-17 22:49:14 +0000 @@ -1,3 +1,11 @@ +2010-04-17 Gerardo E. Gidoni <[email protected]> + + Added new method pdf_text_get_printable(). + * src/base/pdf-text.c: new method. + + * src/base/pdf-text.h: new method. + + 2010-04-15 Jose E. Marchesi <[email protected]> Remove spurious blank lines before EOF in the codebase. === 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-17 22:49:14 +0000 @@ -157,6 +157,8 @@ /* Initialize all contents */ (*text)->data = NULL; (*text)->size = 0; + (*text)->printable = NULL; + (*text)->modified = PDF_FALSE; memset(&((*text)->lang[0]), 0, PDF_TEXT_CCL); memset(&((*text)->country[0]), 0, PDF_TEXT_CCL); @@ -183,6 +185,11 @@ text->data = NULL; } + if(text->printable != NULL) + { + pdf_dealloc(text->printable); + } + /* Destroy word boundaries list */ pdf_text_destroy_word_boundaries_list(&text->word_boundaries); @@ -224,7 +231,7 @@ memcpy(element->country, text->country, (size_t) PDF_TEXT_CCL); /* We don't really need to duplicate the contents of the word - * boundaries list, as it is a side product */ + * boundaries list, as it is a side product, same with printable */ /* Set output element...*/ return element; @@ -1018,6 +1025,8 @@ /* Update size of first element */ text1->size += text2->size; + + text1->modified = PDF_TRUE; } return PDF_OK; @@ -1267,6 +1276,8 @@ /* Dealloc list of pointers to replacements */ pdf_dealloc(rep_ptrs); } + + text->modified = PDF_TRUE; } return PDF_OK; @@ -1389,16 +1400,42 @@ } /* 0x01000000 */ - if((filter & PDF_TEXT_FILTER_REMOVE_LINE_ENDINGS) && \ - (pdf_text_filter_remove_line_endings(text) != PDF_OK)) + if((filter & PDF_TEXT_FILTER_REMOVE_LINE_ENDINGS) && \ + (pdf_text_filter_remove_line_endings(text) != PDF_OK)) { PDF_DEBUG_BASE("Error applying Line Ending Removal filter"); return PDF_ETEXTENC; } + text->modified = PDF_TRUE; return PDF_OK; } +const pdf_char_t * +pdf_text_get_printable (pdf_text_t text) +{ + pdf_size_t size; + + if (text->printable != NULL){ + if (text->modified == PDF_FALSE){ + return text->printable; + }else{ + pdf_dealloc(text->printable); + } + } + +#ifdef PDF_HOST_WIN32 + pdf_text_get_unicode(&text->printable, &size, text, PDF_TEXT_UTF16_HE, + PDF_TEXT_UNICODE_NO_OPTION); +#else + pdf_text_get_unicode(&text->printable, &size, text, PDF_TEXT_UTF8, + PDF_TEXT_UNICODE_NO_OPTION); +#endif /*PDF_HOST_WIN32*/ + + text->modified = PDF_FALSE; + + return text->printable; +} pdf_i32_t @@ -1638,6 +1675,12 @@ memset(&(text->country[0]), 0, PDF_TEXT_CCL); /* Reset data size */ text->size = 0; + + text->modified = PDF_FALSE; + if (text->printable != NULL){ + pdf_dealloc(text->printable); + text->printable = NULL; + } } === 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-17 22:49:14 +0000 @@ -301,6 +301,9 @@ pdf_text_filter (pdf_text_t text, const pdf_u32_t filter); +/* Returns a read-only string to be used with printf's "%s" like format */ +const pdf_char_t * +pdf_text_get_printable (pdf_text_t text); /* ------------------------- Text Comparison -------------------------------- */ @@ -328,6 +331,8 @@ pdf_list_t word_boundaries; /* List of Word boundaries (optional) */ pdf_char_t lang[PDF_TEXT_CCL]; /* Associated language code (optional) */ pdf_char_t country[PDF_TEXT_CCL]; /* Associated country code (optional) */ + pdf_bool_t modified; /* set to PDF_TRUE each time the data is modified */ + pdf_char_t * printable; }; /* Structure containing the word boundary information */ # Begin bundle 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 ### cheers, -gerel
