aboutsummaryrefslogtreecommitdiffstats
path: root/include/qpdf/QUtil.hh
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2022-08-18 16:23:35 +0200
committerm-holger <m-holger@kubitscheck.org>2022-08-18 16:23:35 +0200
commit45a6100cbb014f5d4b89b7af1d03e8a846c474d9 (patch)
treef8cf57128df9cde6ccf3bed809bb0e49359f0edb /include/qpdf/QUtil.hh
parentc08bb0ec0208683ecd0ad89c3d46d4d66b938fbd (diff)
downloadqpdf-45a6100cbb014f5d4b89b7af1d03e8a846c474d9.tar.zst
Inline QUtil functions used by QPDFTokenizer
Diffstat (limited to 'include/qpdf/QUtil.hh')
-rw-r--r--include/qpdf/QUtil.hh55
1 files changed, 51 insertions, 4 deletions
diff --git a/include/qpdf/QUtil.hh b/include/qpdf/QUtil.hh
index 32aeae1f..41b89da4 100644
--- a/include/qpdf/QUtil.hh
+++ b/include/qpdf/QUtil.hh
@@ -25,6 +25,7 @@
#include <qpdf/DLL.h>
#include <qpdf/PointerHolder.hh>
#include <qpdf/Types.h>
+#include <cstring>
#include <functional>
#include <list>
#include <memory>
@@ -489,16 +490,16 @@ namespace QUtil
// classes without using ctype, which we avoid because of locale
// considerations.
QPDF_DLL
- bool is_hex_digit(char);
+ inline bool is_hex_digit(char);
QPDF_DLL
- bool is_space(char);
+ inline bool is_space(char);
QPDF_DLL
- bool is_digit(char);
+ inline bool is_digit(char);
QPDF_DLL
- bool is_number(char const*);
+ inline bool is_number(char const*);
// This method parses the numeric range syntax used by the qpdf
// command-line tool. May throw std::runtime_error.
@@ -526,4 +527,50 @@ namespace QUtil
#endif // QPDF_NO_WCHAR_T
}; // namespace QUtil
+inline bool
+QUtil::is_hex_digit(char ch)
+{
+ return (ch && (strchr("0123456789abcdefABCDEF", ch) != nullptr));
+}
+
+inline bool
+QUtil::is_space(char ch)
+{
+ return (ch && (strchr(" \f\n\r\t\v", ch) != nullptr));
+}
+
+inline bool
+QUtil::is_digit(char ch)
+{
+ return ((ch >= '0') && (ch <= '9'));
+}
+
+inline bool
+QUtil::is_number(char const* p)
+{
+ // ^[\+\-]?(\.\d*|\d+(\.\d*)?)$
+ if (!*p) {
+ return false;
+ }
+ if ((*p == '-') || (*p == '+')) {
+ ++p;
+ }
+ bool found_dot = false;
+ bool found_digit = false;
+ for (; *p; ++p) {
+ if (*p == '.') {
+ if (found_dot) {
+ // only one dot
+ return false;
+ }
+ found_dot = true;
+ } else if (QUtil::is_digit(*p)) {
+ found_digit = true;
+ } else {
+ return false;
+ }
+ }
+ return found_digit;
+}
+
#endif // QUTIL_HH