Commit a2c7471e66d87751312cd10dba4905307202b56f
Committed by
GitHub
Merge pull request #920 from m-holger/fixqdf_rl
Refactor QdfFixer::processLines
Showing
6 changed files
with
108 additions
and
48 deletions
include/qpdf/QUtil.hh
| ... | ... | @@ -485,6 +485,11 @@ namespace QUtil |
| 485 | 485 | void read_file_into_memory( |
| 486 | 486 | char const* filename, std::shared_ptr<char>& file_buf, size_t& size); |
| 487 | 487 | |
| 488 | + QPDF_DLL | |
| 489 | + std::string read_file_into_string(char const* filename); | |
| 490 | + QPDF_DLL | |
| 491 | + std::string read_file_into_string(FILE* f, std::string_view filename = ""); | |
| 492 | + | |
| 488 | 493 | // This used to be called strcasecmp, but that is a macro on some |
| 489 | 494 | // platforms, so we have to give it a name that is not likely to |
| 490 | 495 | // be a macro anywhere. | ... | ... |
libqpdf/QPDFJob_config.cc
| ... | ... | @@ -760,11 +760,9 @@ QPDFJob::Config::showObject(std::string const& parameter) |
| 760 | 760 | QPDFJob::Config* |
| 761 | 761 | QPDFJob::Config::jobJsonFile(std::string const& parameter) |
| 762 | 762 | { |
| 763 | - std::shared_ptr<char> file_buf; | |
| 764 | - size_t size; | |
| 765 | - QUtil::read_file_into_memory(parameter.c_str(), file_buf, size); | |
| 766 | 763 | try { |
| 767 | - o.initializeFromJson(std::string(file_buf.get(), size), true); | |
| 764 | + o.initializeFromJson( | |
| 765 | + QUtil::read_file_into_string(parameter.c_str()), true); | |
| 768 | 766 | } catch (std::exception& e) { |
| 769 | 767 | throw std::runtime_error( |
| 770 | 768 | "error with job-json file " + std::string(parameter) + ": " + | ... | ... |
libqpdf/QUtil.cc
| ... | ... | @@ -1243,6 +1243,37 @@ QUtil::read_file_into_memory( |
| 1243 | 1243 | } |
| 1244 | 1244 | } |
| 1245 | 1245 | |
| 1246 | +std::string | |
| 1247 | +QUtil::read_file_into_string(char const* filename) | |
| 1248 | +{ | |
| 1249 | + FILE* f = safe_fopen(filename, "rb"); | |
| 1250 | + FileCloser fc(f); | |
| 1251 | + return read_file_into_string(f, filename); | |
| 1252 | +} | |
| 1253 | + | |
| 1254 | +std::string | |
| 1255 | +QUtil::read_file_into_string(FILE* f, std::string_view filename) | |
| 1256 | +{ | |
| 1257 | + fseek(f, 0, SEEK_END); | |
| 1258 | + auto size = QIntC::to_size(QUtil::tell(f)); | |
| 1259 | + fseek(f, 0, SEEK_SET); | |
| 1260 | + std::string result(size, '\0'); | |
| 1261 | + if (auto read = fread(result.data(), 1, size, f); read != size) { | |
| 1262 | + if (ferror(f)) { | |
| 1263 | + throw std::runtime_error( | |
| 1264 | + std::string("failure reading file ") + std::string(filename) + | |
| 1265 | + " into memory: read " + uint_to_string(read) + "; wanted " + | |
| 1266 | + uint_to_string(size)); | |
| 1267 | + } else { | |
| 1268 | + throw std::runtime_error( | |
| 1269 | + std::string("premature eof reading file ") + | |
| 1270 | + std::string(filename) + " into memory: read " + | |
| 1271 | + uint_to_string(read) + "; wanted " + uint_to_string(size)); | |
| 1272 | + } | |
| 1273 | + } | |
| 1274 | + return result; | |
| 1275 | +} | |
| 1276 | + | |
| 1246 | 1277 | static bool |
| 1247 | 1278 | read_char_from_FILE(char& ch, FILE* f) |
| 1248 | 1279 | { | ... | ... |
libtests/qtest/qutil/qutil.out
| ... | ... | @@ -116,6 +116,7 @@ This file is used for qutil testing. |
| 116 | 116 | It has mixed newlines. |
| 117 | 117 | Some lines are very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long. |
| 118 | 118 | read 24652 bytes |
| 119 | +read 24652 bytes | |
| 119 | 120 | ---- hex encode/decode |
| 120 | 121 | begin hex encode/decode |
| 121 | 122 | end hex encode/decode | ... | ... |
libtests/qutil.cc
| ... | ... | @@ -576,6 +576,12 @@ read_from_file_test() |
| 576 | 576 | auto buf2 = b2.getBufferSharedPointer(); |
| 577 | 577 | assert(buf2->getSize() == size); |
| 578 | 578 | assert(memcmp(buf2->getBuffer(), p, size) == 0); |
| 579 | + | |
| 580 | + auto s = QUtil::read_file_into_string("other-file"); | |
| 581 | + std::cout << "read " << s.size() << " bytes" << std::endl; | |
| 582 | + assert(s.size() == 24652); | |
| 583 | + assert(s.substr(0, 36) == "This file is used for qutil testing."); | |
| 584 | + assert(s.substr(24641, 10) == "very long."); | |
| 579 | 585 | } |
| 580 | 586 | |
| 581 | 587 | void | ... | ... |
qpdf/fix-qdf.cc
| ... | ... | @@ -6,6 +6,7 @@ |
| 6 | 6 | #include <cstring> |
| 7 | 7 | #include <iostream> |
| 8 | 8 | #include <regex> |
| 9 | +#include <string_view> | |
| 9 | 10 | |
| 10 | 11 | static char const* whoami = 0; |
| 11 | 12 | |
| ... | ... | @@ -20,7 +21,7 @@ class QdfFixer |
| 20 | 21 | { |
| 21 | 22 | public: |
| 22 | 23 | QdfFixer(std::string const& filename); |
| 23 | - void processLines(std::list<std::string>& lines); | |
| 24 | + void processLines(std::string const& input); | |
| 24 | 25 | |
| 25 | 26 | private: |
| 26 | 27 | void fatal(std::string const&); |
| ... | ... | @@ -58,9 +59,9 @@ class QdfFixer |
| 58 | 59 | size_t xref_f1_nbytes; |
| 59 | 60 | size_t xref_f2_nbytes; |
| 60 | 61 | size_t xref_size; |
| 61 | - std::vector<std::string> ostream; | |
| 62 | + std::vector<std::string_view> ostream; | |
| 62 | 63 | std::vector<qpdf_offset_t> ostream_offsets; |
| 63 | - std::vector<std::string> ostream_discarded; | |
| 64 | + std::vector<std::string_view> ostream_discarded; | |
| 64 | 65 | size_t ostream_idx; |
| 65 | 66 | int ostream_id; |
| 66 | 67 | std::string ostream_extends; |
| ... | ... | @@ -92,54 +93,71 @@ QdfFixer::fatal(std::string const& msg) |
| 92 | 93 | } |
| 93 | 94 | |
| 94 | 95 | void |
| 95 | -QdfFixer::processLines(std::list<std::string>& lines) | |
| 96 | +QdfFixer::processLines(std::string const& input) | |
| 96 | 97 | { |
| 97 | - static std::regex re_n_0_obj("^(\\d+) 0 obj\n$"); | |
| 98 | - static std::regex re_xref("^xref\n$"); | |
| 99 | - static std::regex re_stream("^stream\n$"); | |
| 100 | - static std::regex re_endobj("^endobj\n$"); | |
| 101 | - static std::regex re_type_objstm("/Type /ObjStm"); | |
| 102 | - static std::regex re_type_xref("/Type /XRef"); | |
| 103 | - static std::regex re_extends("/Extends (\\d+ 0 R)"); | |
| 104 | - static std::regex re_ostream_obj("^%% Object stream: object (\\d+)"); | |
| 105 | - static std::regex re_endstream("^endstream\n$"); | |
| 106 | - static std::regex re_length_or_w("/(Length|W) "); | |
| 107 | - static std::regex re_size("/Size "); | |
| 108 | - static std::regex re_ignore_newline("^%QDF: ignore_newline\n$"); | |
| 109 | - static std::regex re_num("^\\d+\n$"); | |
| 110 | - static std::regex re_trailer("^trailer <<"); | |
| 111 | - static std::regex re_size_n("^ /Size \\d+\n$"); | |
| 112 | - static std::regex re_dict_end("^>>\n$"); | |
| 98 | + using namespace std::literals; | |
| 99 | + | |
| 100 | + static const std::regex re_n_0_obj("^(\\d+) 0 obj\n$"); | |
| 101 | + static const std::regex re_extends("/Extends (\\d+ 0 R)"); | |
| 102 | + static const std::regex re_ostream_obj("^%% Object stream: object (\\d+)"); | |
| 103 | + static const std::regex re_num("^\\d+\n$"); | |
| 104 | + static const std::regex re_size_n("^ /Size \\d+\n$"); | |
| 105 | + | |
| 106 | + auto sv_diff = [](size_t i) { | |
| 107 | + return static_cast<std::string_view::difference_type>(i); | |
| 108 | + }; | |
| 113 | 109 | |
| 114 | 110 | lineno = 0; |
| 115 | - for (auto const& line: lines) { | |
| 111 | + bool more = true; | |
| 112 | + auto len_line = sv_diff(0); | |
| 113 | + | |
| 114 | + std::string_view line; | |
| 115 | + std::string_view input_view{input.data(), input.size()}; | |
| 116 | + size_t offs = 0; | |
| 117 | + | |
| 118 | + auto b_line = input.cbegin(); | |
| 119 | + std::smatch m; | |
| 120 | + auto const matches = [&m, &b_line, &len_line](std::regex const& r) { | |
| 121 | + return std::regex_search(b_line, b_line + len_line, m, r); | |
| 122 | + }; | |
| 123 | + | |
| 124 | + while (more) { | |
| 116 | 125 | ++lineno; |
| 117 | 126 | last_offset = offset; |
| 118 | - offset += QIntC::to_offset(line.length()); | |
| 119 | - std::smatch m; | |
| 120 | - auto matches = [&m, &line](std::regex& r) { | |
| 121 | - return std::regex_search(line, m, r); | |
| 122 | - }; | |
| 127 | + b_line += len_line; | |
| 128 | + | |
| 129 | + offs = input_view.find('\n'); | |
| 130 | + if (offs == std::string::npos) { | |
| 131 | + more = false; | |
| 132 | + line = input_view; | |
| 133 | + } else { | |
| 134 | + offs++; | |
| 135 | + line = input_view.substr(0, offs); | |
| 136 | + input_view.remove_prefix(offs); | |
| 137 | + } | |
| 138 | + len_line = sv_diff(line.size()); | |
| 139 | + offset += len_line; | |
| 140 | + | |
| 123 | 141 | if (state == st_top) { |
| 124 | 142 | if (matches(re_n_0_obj)) { |
| 125 | 143 | checkObjId(m[1].str()); |
| 126 | 144 | state = st_in_obj; |
| 127 | - } else if (matches(re_xref)) { | |
| 145 | + } else if (line.compare("xref\n"sv) == 0) { | |
| 128 | 146 | xref_offset = last_offset; |
| 129 | 147 | state = st_at_xref; |
| 130 | 148 | } |
| 131 | 149 | std::cout << line; |
| 132 | 150 | } else if (state == st_in_obj) { |
| 133 | 151 | std::cout << line; |
| 134 | - if (matches(re_stream)) { | |
| 152 | + if (line.compare("stream\n"sv) == 0) { | |
| 135 | 153 | state = st_in_stream; |
| 136 | 154 | stream_start = offset; |
| 137 | - } else if (matches(re_endobj)) { | |
| 155 | + } else if (line.compare("endobj\n"sv) == 0) { | |
| 138 | 156 | state = st_top; |
| 139 | - } else if (matches(re_type_objstm)) { | |
| 157 | + } else if (line.find("/Type /ObjStm"sv) != line.npos) { | |
| 140 | 158 | state = st_in_ostream_dict; |
| 141 | 159 | ostream_id = last_obj; |
| 142 | - } else if (matches(re_type_xref)) { | |
| 160 | + } else if (line.find("/Type /XRef"sv) != line.npos) { | |
| 143 | 161 | xref_offset = xref.back().getOffset(); |
| 144 | 162 | xref_f1_nbytes = 0; |
| 145 | 163 | auto t = xref_offset; |
| ... | ... | @@ -171,7 +189,7 @@ QdfFixer::processLines(std::list<std::string>& lines) |
| 171 | 189 | state = st_in_xref_stream_dict; |
| 172 | 190 | } |
| 173 | 191 | } else if (state == st_in_ostream_dict) { |
| 174 | - if (matches(re_stream)) { | |
| 192 | + if (line.compare("stream\n"sv) == 0) { | |
| 175 | 193 | state = st_in_ostream_offsets; |
| 176 | 194 | } else { |
| 177 | 195 | ostream_discarded.push_back(line); |
| ... | ... | @@ -200,21 +218,22 @@ QdfFixer::processLines(std::list<std::string>& lines) |
| 200 | 218 | if (matches(re_ostream_obj)) { |
| 201 | 219 | checkObjId(m[1].str()); |
| 202 | 220 | state = st_in_ostream_outer; |
| 203 | - } else if (matches(re_endstream)) { | |
| 221 | + } else if (line.compare("endstream\n"sv) == 0) { | |
| 204 | 222 | stream_length = QIntC::to_size(last_offset - stream_start); |
| 205 | 223 | writeOstream(); |
| 206 | 224 | state = st_in_obj; |
| 207 | 225 | } |
| 208 | 226 | } else if (state == st_in_xref_stream_dict) { |
| 209 | - if (matches(re_length_or_w)) { | |
| 227 | + if ((line.find("/Length"sv) != line.npos) || | |
| 228 | + (line.find("/W"sv) != line.npos)) { | |
| 210 | 229 | // already printed |
| 211 | - } else if (matches(re_size)) { | |
| 230 | + } else if (line.find("/Size"sv) != line.npos) { | |
| 212 | 231 | auto xref_size = 1 + xref.size(); |
| 213 | 232 | std::cout << " /Size " << xref_size << "\n"; |
| 214 | 233 | } else { |
| 215 | 234 | std::cout << line; |
| 216 | 235 | } |
| 217 | - if (matches(re_stream)) { | |
| 236 | + if (line.compare("stream\n"sv) == 0) { | |
| 218 | 237 | writeBinary(0, 1); |
| 219 | 238 | writeBinary(0, xref_f1_nbytes); |
| 220 | 239 | writeBinary(0, xref_f2_nbytes); |
| ... | ... | @@ -238,13 +257,13 @@ QdfFixer::processLines(std::list<std::string>& lines) |
| 238 | 257 | state = st_done; |
| 239 | 258 | } |
| 240 | 259 | } else if (state == st_in_stream) { |
| 241 | - if (matches(re_endstream)) { | |
| 260 | + if (line.compare("endstream\n"sv) == 0) { | |
| 242 | 261 | stream_length = QIntC::to_size(last_offset - stream_start); |
| 243 | 262 | state = st_after_stream; |
| 244 | 263 | } |
| 245 | 264 | std::cout << line; |
| 246 | 265 | } else if (state == st_after_stream) { |
| 247 | - if (matches(re_ignore_newline)) { | |
| 266 | + if (line.compare("%QDF: ignore_newline\n"sv) == 0) { | |
| 248 | 267 | if (stream_length > 0) { |
| 249 | 268 | --stream_length; |
| 250 | 269 | } |
| ... | ... | @@ -273,7 +292,7 @@ QdfFixer::processLines(std::list<std::string>& lines) |
| 273 | 292 | } |
| 274 | 293 | state = st_before_trailer; |
| 275 | 294 | } else if (state == st_before_trailer) { |
| 276 | - if (matches(re_trailer)) { | |
| 295 | + if (line.compare("trailer <<\n"sv) == 0) { | |
| 277 | 296 | std::cout << line; |
| 278 | 297 | state = st_in_trailer; |
| 279 | 298 | } |
| ... | ... | @@ -284,7 +303,7 @@ QdfFixer::processLines(std::list<std::string>& lines) |
| 284 | 303 | } else { |
| 285 | 304 | std::cout << line; |
| 286 | 305 | } |
| 287 | - if (matches(re_dict_end)) { | |
| 306 | + if (line.compare(">>\n"sv) == 0) { | |
| 288 | 307 | std::cout << "startxref\n" << xref_offset << "\n%%EOF\n"; |
| 289 | 308 | state = st_done; |
| 290 | 309 | } |
| ... | ... | @@ -392,17 +411,17 @@ realmain(int argc, char* argv[]) |
| 392 | 411 | } else if (argc == 2) { |
| 393 | 412 | filename = argv[1]; |
| 394 | 413 | } |
| 395 | - std::list<std::string> lines; | |
| 414 | + std::string input; | |
| 396 | 415 | if (filename == 0) { |
| 397 | 416 | filename = "standard input"; |
| 398 | 417 | QUtil::binary_stdin(); |
| 399 | - lines = QUtil::read_lines_from_file(stdin, true); | |
| 418 | + input = QUtil::read_file_into_string(stdin); | |
| 400 | 419 | } else { |
| 401 | - lines = QUtil::read_lines_from_file(filename, true); | |
| 420 | + input = QUtil::read_file_into_string(filename); | |
| 402 | 421 | } |
| 403 | 422 | QUtil::binary_stdout(); |
| 404 | 423 | QdfFixer qf(filename); |
| 405 | - qf.processLines(lines); | |
| 424 | + qf.processLines(input); | |
| 406 | 425 | return 0; |
| 407 | 426 | } |
| 408 | 427 | ... | ... |