diff --git a/src/HTMLRenderer/HTMLRenderer.h b/src/HTMLRenderer/HTMLRenderer.h
index 89d3d1e..4956588 100644
--- a/src/HTMLRenderer/HTMLRenderer.h
+++ b/src/HTMLRenderer/HTMLRenderer.h
@@ -168,7 +168,6 @@ class HTMLRenderer : public OutputDev
long long install_fill_color(const GfxRGB * rgb);
long long install_stroke_color(const GfxRGB * rgb);
long long install_whitespace(double ws_width, double & actual_width);
- long long install_rise(double rise);
long long install_height(double height);
long long install_left(double left);
@@ -187,7 +186,6 @@ class HTMLRenderer : public OutputDev
void export_fill_color(long long color_id, const GfxRGB * rgb);
void export_stroke_color(long long color_id, const GfxRGB * rgb);
void export_whitespace(long long ws_id, double ws_width);
- void export_rise(long long rise_id, double rise);
void export_height(long long height_id, double height);
void export_left(long long left_id, double left);
@@ -319,9 +317,8 @@ class HTMLRenderer : public OutputDev
bool stroke_color_changed;
// rise
- long long cur_rise_id;
- double cur_rise;
bool rise_changed;
+ RiseManager rise_manager;
// optimize for web
// we try to render the final font size directly
@@ -359,11 +356,9 @@ class HTMLRenderer : public OutputDev
////////////////////////////////////////////////////
std::unordered_map font_name_map;
- std::map font_size_map;
std::map transform_matrix_map;
std::unordered_map fill_color_map, stroke_color_map;
std::map whitespace_map;
- std::map rise_map;
std::map height_map;
std::map left_map;
diff --git a/src/HTMLRenderer/TextLineBuffer.cc b/src/HTMLRenderer/TextLineBuffer.cc
index f0fc599..9a00f07 100644
--- a/src/HTMLRenderer/TextLineBuffer.cc
+++ b/src/HTMLRenderer/TextLineBuffer.cc
@@ -190,7 +190,7 @@ void HTMLRenderer::TextLineBuffer::set_state (State & state)
state.ids[State::STROKE_COLOR_ID] = renderer->cur_stroke_color_id;
state.ids[State::LETTER_SPACE_ID] = renderer->letter_space_manager.get_id();
state.ids[State::WORD_SPACE_ID] = renderer->word_space_manager.get_id();
- state.ids[State::RISE_ID] = renderer->cur_rise_id;
+ state.ids[State::RISE_ID] = renderer->rise_manager.get_id();
const FontInfo * info = renderer->cur_font_info;
state.ascent = info->ascent;
diff --git a/src/HTMLRenderer/export.cc b/src/HTMLRenderer/export.cc
index 742dd68..6332df9 100644
--- a/src/HTMLRenderer/export.cc
+++ b/src/HTMLRenderer/export.cc
@@ -196,11 +196,6 @@ void HTMLRenderer::export_whitespace (long long ws_id, double ws_width)
f_css.fs << "._" << ws_id << "{display:inline;margin-left:" << round(ws_width) << "px;}" << endl;
}
-void HTMLRenderer::export_rise (long long rise_id, double rise)
-{
- f_css.fs << ".r" << rise_id << "{top:" << round(-rise) << "px;}" << endl;
-}
-
void HTMLRenderer::export_height (long long height_id, double height)
{
f_css.fs << ".h" << height_id << "{height:" << round(height) << "px;}" << endl;
diff --git a/src/HTMLRenderer/general.cc b/src/HTMLRenderer/general.cc
index 7bab35c..1b95fdf 100644
--- a/src/HTMLRenderer/general.cc
+++ b/src/HTMLRenderer/general.cc
@@ -56,9 +56,10 @@ HTMLRenderer::HTMLRenderer(const Param * param)
cur_mapping2 = new char* [0x100];
width_list = new int [0x10000];
- font_size_manager .set_param(CSS::FONT_SIZE_CN , EPS);
- letter_space_manager.set_param(CSS::LETTER_SPACE_CN, EPS);
- word_space_manager .set_param(CSS::WORD_SPACE_CN , EPS);
+ font_size_manager .set_param(CSS::FONT_SIZE_CN , EPS );
+ letter_space_manager.set_param(CSS::LETTER_SPACE_CN, EPS );
+ word_space_manager .set_param(CSS::WORD_SPACE_CN , EPS );
+ rise_manager .set_param(CSS::RISE_CN , param->v_eps);
}
HTMLRenderer::~HTMLRenderer()
@@ -339,6 +340,7 @@ void HTMLRenderer::post_process()
font_size_manager .dump_css(f_css.fs);
letter_space_manager.dump_css(f_css.fs);
word_space_manager .dump_css(f_css.fs);
+ rise_manager .dump_css(f_css.fs);
// close files
f_outline.fs.close();
diff --git a/src/HTMLRenderer/install.cc b/src/HTMLRenderer/install.cc
index fda5ae5..4b65151 100644
--- a/src/HTMLRenderer/install.cc
+++ b/src/HTMLRenderer/install.cc
@@ -280,20 +280,6 @@ long long HTMLRenderer::install_whitespace(double ws_width, double & actual_widt
return new_ws_id;
}
-long long HTMLRenderer::install_rise(double rise)
-{
- auto iter = rise_map.lower_bound(rise - param->v_eps);
- if((iter != rise_map.end()) && (abs(iter->first - rise) <= param->v_eps))
- {
- return iter->second;
- }
-
- long long new_rise_id = rise_map.size();
- rise_map.insert(make_pair(rise, new_rise_id));
- export_rise(new_rise_id, rise);
- return new_rise_id;
-}
-
long long HTMLRenderer::install_height(double height)
{
auto iter = height_map.lower_bound(height - EPS);
diff --git a/src/HTMLRenderer/state.cc b/src/HTMLRenderer/state.cc
index dc6225e..d11f93f 100644
--- a/src/HTMLRenderer/state.cc
+++ b/src/HTMLRenderer/state.cc
@@ -116,8 +116,7 @@ void HTMLRenderer::reset_state()
cur_stroke_color_id = install_stroke_color(&cur_stroke_color);
cur_has_stroke = false;
- cur_rise = 0;
- cur_rise_id = install_rise(cur_rise);
+ rise_manager.reset();
cur_tx = cur_ty = 0;
draw_tx = draw_ty = 0;
@@ -408,15 +407,10 @@ void HTMLRenderer::check_state_change(GfxState * state)
// rise
// depends draw_text_scale
- if(all_changed || rise_changed || draw_text_scale_changed)
+ if((all_changed || rise_changed || draw_text_scale_changed)
+ && (rise_manager.install(state->getRise() * draw_text_scale)))
{
- double new_rise = state->getRise();
- if(!equal(cur_rise, new_rise))
- {
- new_line_state = max(new_line_state, NLS_SPAN);
- cur_rise = new_rise;
- cur_rise_id = install_rise(new_rise * draw_text_scale);
- }
+ new_line_state = max(new_line_state, NLS_SPAN);
}
reset_state_change();
diff --git a/src/util/StateManager.h b/src/util/StateManager.h
index 2f98019..edb582a 100644
--- a/src/util/StateManager.h
+++ b/src/util/StateManager.h
@@ -114,6 +114,13 @@ public:
void dump_value(std::ostream & out, double value) { out << "word-spacing:" << round(value) << "px;"; }
};
+class RiseManager : public StateManager
+{
+public:
+ double default_value(void) { return 0; }
+ void dump_value(std::ostream & out, double value) { out << "top:" << round(-value) << "px;"; }
+};
+
} // namespace pdf2htmlEX
#endif //STATEMANAGER_H__