1
0
mirror of https://github.com/pdf2htmlEX/pdf2htmlEX.git synced 2024-07-07 18:30:34 +00:00
pdf2htmlEX/src/HTMLRenderer/TextLineBuffer.h

91 lines
2.0 KiB
C
Raw Normal View History

2012-12-11 12:48:10 +00:00
#ifndef TEXTLINEBUFFER_H__
#define TEXTLINEBUFFER_H__
#include <iostream>
#include <vector>
namespace pdf2htmlEX {
2013-01-19 11:19:15 +00:00
/*
* Store a series of
* - Text
* - Shift
* - State change
* within a line
*/
2012-12-11 12:52:36 +00:00
class HTMLRenderer;
2012-12-11 12:48:10 +00:00
class HTMLRenderer::TextLineBuffer
{
public:
TextLineBuffer (HTMLRenderer * renderer) : renderer(renderer) { }
class State {
public:
2013-01-19 11:33:29 +00:00
// before output
2012-12-11 12:48:10 +00:00
void begin(std::ostream & out, const State * prev_state);
2013-01-19 11:33:29 +00:00
// after output
2012-12-11 12:48:10 +00:00
void end(std::ostream & out) const;
2013-01-19 11:33:29 +00:00
// calculate the hash code
2012-12-11 12:48:10 +00:00
void hash(void);
2013-01-19 11:33:29 +00:00
// calculate the difference between another State
2012-12-11 12:48:10 +00:00
int diff(const State & s) const;
enum {
FONT_ID,
FONT_SIZE_ID,
2013-01-31 22:21:57 +00:00
FILL_COLOR_ID,
STROKE_COLOR_ID,
2012-12-11 12:48:10 +00:00
LETTER_SPACE_ID,
WORD_SPACE_ID,
RISE_ID,
ID_COUNT
};
long long ids[ID_COUNT];
double ascent;
double descent;
double draw_font_size;
size_t start_idx; // index of the first Text using this state
// for optimzation
long long hash_value;
bool need_close;
2013-02-05 10:19:25 +00:00
static const char * const css_class_names []; // class names for each id
2012-12-11 12:48:10 +00:00
};
class Offset {
public:
size_t start_idx; // should put this Offset right before text[start_idx];
2012-12-11 12:48:10 +00:00
double width;
};
void reset(GfxState * state);
void append_unicodes(const Unicode * u, int l);
void append_offset(double width);
void append_state(void);
void flush(void);
private:
// retrieve state from renderer
void set_state(State & state);
HTMLRenderer * renderer;
double x, y;
long long tm_id;
std::vector<State> states;
std::vector<Offset> offsets;
std::vector<Unicode> text;
// for flush
std::vector<State*> stack;
};
} // namespace pdf2htmlEX
#endif //TEXTLINEBUFFER_H__