Commit c82c6d0ab8eadac730c72d65677e9af28148b4be
1 parent
e9359c72
Refactor filter name expansion logic into a dedicated method
Moved the filter abbreviation expansion logic from a static map to a new `expand_filter_name` method in `QPDF_Stream::Members`. This simplifies the code, improves maintainability, and consolidates the logic for easier testing and updates.
Showing
3 changed files
with
27 additions
and
13 deletions
libqpdf/QPDF_Stream.cc
| @@ -80,17 +80,34 @@ namespace | @@ -80,17 +80,34 @@ namespace | ||
| 80 | }; | 80 | }; |
| 81 | } // namespace | 81 | } // namespace |
| 82 | 82 | ||
| 83 | -std::map<std::string, std::string> Stream::filter_abbreviations = { | 83 | +std::string |
| 84 | +QPDF_Stream::Members::expand_filter_name(std::string const& name) const | ||
| 85 | +{ | ||
| 84 | // The PDF specification provides these filter abbreviations for use in inline images, but | 86 | // The PDF specification provides these filter abbreviations for use in inline images, but |
| 85 | // according to table H.1 in the pre-ISO versions of the PDF specification, Adobe Reader also | 87 | // according to table H.1 in the pre-ISO versions of the PDF specification, Adobe Reader also |
| 86 | // accepts them for stream filters. | 88 | // accepts them for stream filters. |
| 87 | - {"/AHx", "/ASCIIHexDecode"}, | ||
| 88 | - {"/A85", "/ASCII85Decode"}, | ||
| 89 | - {"/LZW", "/LZWDecode"}, | ||
| 90 | - {"/Fl", "/FlateDecode"}, | ||
| 91 | - {"/RL", "/RunLengthDecode"}, | ||
| 92 | - {"/CCF", "/CCITTFaxDecode"}, | ||
| 93 | - {"/DCT", "/DCTDecode"}, | 89 | + if (name == "/AHx") { |
| 90 | + return "/ASCIIHexDecode"; | ||
| 91 | + } | ||
| 92 | + if (name == "/A85") { | ||
| 93 | + return "/ASCII85Decode"; | ||
| 94 | + } | ||
| 95 | + if (name == "/LZW") { | ||
| 96 | + return "/LZWDecode"; | ||
| 97 | + } | ||
| 98 | + if (name == "/Fl") { | ||
| 99 | + return "/FlateDecode"; | ||
| 100 | + } | ||
| 101 | + if (name == "/RL") { | ||
| 102 | + return "/RunLengthDecode"; | ||
| 103 | + } | ||
| 104 | + if (name == "/CCF") { | ||
| 105 | + return "/CCITTFaxDecode"; | ||
| 106 | + } | ||
| 107 | + if (name == "/DCT") { | ||
| 108 | + return "/DCTDecode"; | ||
| 109 | + } | ||
| 110 | + return name; | ||
| 94 | }; | 111 | }; |
| 95 | 112 | ||
| 96 | std::map<std::string, std::function<std::shared_ptr<QPDFStreamFilter>()>> Stream::filter_factories = | 113 | std::map<std::string, std::function<std::shared_ptr<QPDFStreamFilter>()>> Stream::filter_factories = |
| @@ -333,10 +350,7 @@ Stream::filterable( | @@ -333,10 +350,7 @@ Stream::filterable( | ||
| 333 | bool filterable = true; | 350 | bool filterable = true; |
| 334 | 351 | ||
| 335 | for (auto& filter_name: filter_names) { | 352 | for (auto& filter_name: filter_names) { |
| 336 | - if (filter_abbreviations.count(filter_name)) { | ||
| 337 | - QTC::TC("qpdf", "QPDF_Stream expand filter abbreviation"); | ||
| 338 | - filter_name = filter_abbreviations[filter_name]; | ||
| 339 | - } | 353 | + filter_name = s->expand_filter_name(filter_name); |
| 340 | 354 | ||
| 341 | auto ff = filter_factories.find(filter_name); | 355 | auto ff = filter_factories.find(filter_name); |
| 342 | if (ff == filter_factories.end()) { | 356 | if (ff == filter_factories.end()) { |
libqpdf/qpdf/QPDFObject_private.hh
| @@ -226,6 +226,7 @@ class QPDF_Stream final | @@ -226,6 +226,7 @@ class QPDF_Stream final | ||
| 226 | std::shared_ptr<Buffer> stream_data; | 226 | std::shared_ptr<Buffer> stream_data; |
| 227 | std::shared_ptr<QPDFObjectHandle::StreamDataProvider> stream_provider; | 227 | std::shared_ptr<QPDFObjectHandle::StreamDataProvider> stream_provider; |
| 228 | std::vector<std::shared_ptr<QPDFObjectHandle::TokenFilter>> token_filters; | 228 | std::vector<std::shared_ptr<QPDFObjectHandle::TokenFilter>> token_filters; |
| 229 | + std::string expand_filter_name(std::string const& name) const; | ||
| 229 | }; | 230 | }; |
| 230 | 231 | ||
| 231 | friend class QPDFObject; | 232 | friend class QPDFObject; |
qpdf/qpdf.testcov
| @@ -177,7 +177,6 @@ QPDFObjectHandle prepend page contents 0 | @@ -177,7 +177,6 @@ QPDFObjectHandle prepend page contents 0 | ||
| 177 | QPDFObjectHandle append page contents 0 | 177 | QPDFObjectHandle append page contents 0 |
| 178 | QPDF_Stream getRawStreamData 0 | 178 | QPDF_Stream getRawStreamData 0 |
| 179 | QPDF_Stream getStreamData 0 | 179 | QPDF_Stream getStreamData 0 |
| 180 | -QPDF_Stream expand filter abbreviation 0 | ||
| 181 | qpdf-c called qpdf_read_memory 0 | 180 | qpdf-c called qpdf_read_memory 0 |
| 182 | QPDF stream without newline 0 | 181 | QPDF stream without newline 0 |
| 183 | QPDF stream with CR only 0 | 182 | QPDF stream with CR only 0 |