summaryrefslogtreecommitdiff
path: root/poppler/Lexer.h
diff options
context:
space:
mode:
Diffstat (limited to 'poppler/Lexer.h')
-rw-r--r--poppler/Lexer.h131
1 files changed, 68 insertions, 63 deletions
diff --git a/poppler/Lexer.h b/poppler/Lexer.h
index 02b6cdc6..a117dbe0 100644
--- a/poppler/Lexer.h
+++ b/poppler/Lexer.h
@@ -13,10 +13,11 @@
// All changes made under the Poppler project to this file are licensed
// under GPL version 2 or later
//
-// Copyright (C) 2006, 2007, 2010, 2013 Albert Astals Cid <aacid@kde.org>
+// Copyright (C) 2006, 2007, 2010, 2013, 2017-2019 Albert Astals Cid <aacid@kde.org>
// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com>
// Copyright (C) 2013 Adrian Johnson <ajohnson@redneon.com>
// Copyright (C) 2013 Thomas Freitag <Thomas.Freitag@alfa.de>
+// Copyright (C) 2019 Adam Reichold <adam.reichold@t-online.de>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
@@ -26,83 +27,87 @@
#ifndef LEXER_H
#define LEXER_H
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
#include "Object.h"
#include "Stream.h"
class XRef;
-#define tokBufSize 128 // size of token buffer
+#define tokBufSize 128 // size of token buffer
//------------------------------------------------------------------------
// Lexer
//------------------------------------------------------------------------
-class Lexer {
+class POPPLER_PRIVATE_EXPORT Lexer
+{
public:
-
- // Construct a lexer for a single stream. Deletes the stream when
- // lexer is deleted.
- Lexer(XRef *xrefA, Stream *str);
-
- // Construct a lexer for a stream or array of streams (assumes obj
- // is either a stream or array of streams).
- Lexer(XRef *xrefA, Object *obj);
-
- // Destructor.
- ~Lexer();
-
- // Get the next object from the input stream.
- Object *getObj(Object *obj, int objNum = -1);
- Object *getObj(Object *obj, const char *cmdA, int objNum);
-
- // Skip to the beginning of the next line in the input stream.
- void skipToNextLine();
-
- // Skip over one character.
- void skipChar() { getChar(); }
-
- // Get stream.
- Stream *getStream()
- { return curStr.isStream() ? curStr.getStream() : (Stream *)NULL; }
-
- // Get current position in file. This is only used for error
- // messages.
- Goffset getPos()
- { return curStr.isStream() ? curStr.streamGetPos() : -1; }
-
- // Set position in file.
- void setPos(Goffset pos, int dir = 0)
- { if (curStr.isStream()) curStr.streamSetPos(pos, dir); }
-
- // Returns true if <c> is a whitespace character.
- static GBool isSpace(int c);
-
-
- // often (e.g. ~30% on PDF Refernce 1.6 pdf file from Adobe site) getChar
- // is called right after lookChar. In order to avoid expensive re-doing
- // getChar() of underlying stream, we cache the last value found by
- // lookChar() in lookCharLastValueCached. A special value
- // LOOK_VALUE_NOT_CACHED that should never be part of stream indicates
- // that no value was cached
- static const int LOOK_VALUE_NOT_CACHED = -3;
- int lookCharLastValueCached;
+ // Construct a lexer for a single stream. Deletes the stream when
+ // lexer is deleted.
+ Lexer(XRef *xrefA, Stream *str);
+
+ // Construct a lexer for a stream or array of streams (assumes obj
+ // is either a stream or array of streams).
+ Lexer(XRef *xrefA, Object *obj);
+
+ // Destructor.
+ ~Lexer();
+
+ Lexer(const Lexer &) = delete;
+ Lexer &operator=(const Lexer &) = delete;
+
+ // Get the next object from the input stream.
+ Object getObj(int objNum = -1);
+ Object getObj(const char *cmdA, int objNum);
+ template<typename T>
+ Object getObj(T) = delete;
+
+ // Skip to the beginning of the next line in the input stream.
+ void skipToNextLine();
+
+ // Skip over one character.
+ void skipChar() { getChar(); }
+
+ // Get stream.
+ Stream *getStream() { return curStr.isStream() ? curStr.getStream() : nullptr; }
+
+ // Get current position in file. This is only used for error
+ // messages.
+ Goffset getPos() const { return curStr.isStream() ? curStr.getStream()->getPos() : -1; }
+
+ // Set position in file.
+ void setPos(Goffset pos)
+ {
+ if (curStr.isStream()) {
+ curStr.getStream()->setPos(pos);
+ }
+ }
+
+ // Returns true if <c> is a whitespace character.
+ static bool isSpace(int c);
+
+ // often (e.g. ~30% on PDF Refernce 1.6 pdf file from Adobe site) getChar
+ // is called right after lookChar. In order to avoid expensive re-doing
+ // getChar() of underlying stream, we cache the last value found by
+ // lookChar() in lookCharLastValueCached. A special value
+ // LOOK_VALUE_NOT_CACHED that should never be part of stream indicates
+ // that no value was cached
+ static const int LOOK_VALUE_NOT_CACHED = -3;
+ int lookCharLastValueCached;
+
+ XRef *getXRef() const { return xref; }
+ bool hasXRef() const { return xref != nullptr; }
private:
+ int getChar(bool comesFromLook = false);
+ int lookChar();
- int getChar(GBool comesFromLook = gFalse);
- int lookChar();
-
- Array *streams; // array of input streams
- int strPtr; // index of current stream
- Object curStr; // current stream
- GBool freeArray; // should lexer free the streams array?
- char tokBuf[tokBufSize]; // temporary token buffer
+ Array *streams; // array of input streams
+ int strPtr; // index of current stream
+ Object curStr; // current stream
+ bool freeArray; // should lexer free the streams array?
+ char tokBuf[tokBufSize]; // temporary token buffer
- XRef *xref;
+ XRef *xref;
};
#endif