Commit 4fb7d1335a4660bb8748773294f2dea979fcdbb7

Authored by m-holger
Committed by Jay Berkenbilt
1 parent 77111086

Tune QPDF_String::useHexString()

Showing 1 changed file with 10 additions and 15 deletions
libqpdf/QPDF_String.cc
... ... @@ -7,12 +7,6 @@
7 7 // be used.
8 8 #include <string.h>
9 9  
10   -// See above about ctype.
11   -static bool
12   -is_ascii_printable(char ch)
13   -{
14   - return ((ch >= 32) && (ch <= 126));
15   -}
16 10 static bool
17 11 is_iso_latin1_printable(char ch)
18 12 {
... ... @@ -92,19 +86,20 @@ QPDF_String::useHexString() const
92 86 // there are any non-printable (in PDF Doc encoding) characters or
93 87 // if too large of a proportion of the string consists of
94 88 // non-ASCII characters.
95   - bool nonprintable = false;
96 89 unsigned int non_ascii = 0;
97   - for (unsigned int i = 0; i < this->val.length(); ++i) {
98   - char ch = this->val.at(i);
99   - if ((ch == 0) ||
100   - (!(is_ascii_printable(ch) || strchr("\n\r\t\b\f", ch)))) {
101   - if ((ch >= 0) && (ch < 24)) {
102   - nonprintable = true;
103   - }
  90 + for (auto const ch: this->val) {
  91 + if (ch > 126) {
  92 + ++non_ascii;
  93 + } else if (ch >= 32) {
  94 + continue;
  95 + } else if (ch < 0 || ch >= 24) {
104 96 ++non_ascii;
  97 + } else if (!(ch == '\n' || ch == '\r' || ch == '\t' || ch == '\b' ||
  98 + ch == '\f')) {
  99 + return true;
105 100 }
106 101 }
107   - return (nonprintable || (5 * non_ascii > val.length()));
  102 + return 5 * non_ascii > val.length();
108 103 }
109 104  
110 105 std::string
... ...