diff options
Diffstat (limited to 'src/pdf_doc.c')
-rw-r--r-- | src/pdf_doc.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/pdf_doc.c b/src/pdf_doc.c new file mode 100644 index 0000000..9b92bd0 --- /dev/null +++ b/src/pdf_doc.c @@ -0,0 +1,47 @@ + +#include <stdint.h> +#include <stddef.h> +#include <stdbool.h> + +#include "nspdferror.h" +#include "byte_class.h" +#include "cos_object.h" +#include "pdf_doc.h" + +/** + * move offset to next non whitespace byte + */ +int doc_skip_ws(struct pdf_doc *doc, uint64_t *offset) +{ + uint8_t c; + /* TODO sort out keeping offset in range */ + c = DOC_BYTE(doc, *offset); + while ((bclass[c] & (BC_WSPC | BC_CMNT) ) != 0) { + (*offset)++; + /* skip comments */ + if ((bclass[c] & BC_CMNT) != 0) { + c = DOC_BYTE(doc, *offset); + while ((bclass[c] & BC_EOLM ) == 0) { + (*offset)++; + c = DOC_BYTE(doc, *offset); + } + } + c = DOC_BYTE(doc, *offset); + } + return 0; +} + +/** + * move offset to next non eol byte + */ +int doc_skip_eol(struct pdf_doc *doc, uint64_t *offset) +{ + uint8_t c; + /* TODO sort out keeping offset in range */ + c = DOC_BYTE(doc, *offset); + while ((bclass[c] & BC_EOLM) != 0) { + (*offset)++; + c = DOC_BYTE(doc, *offset); + } + return 0; +} |