From b18f59af6dca120a9be8f1670ea6c831cfa7d491 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Tue, 5 Feb 2013 14:51:00 +0800 Subject: [PATCH] height --- src/HTMLRenderer/HTMLRenderer.h | 5 ++--- src/HTMLRenderer/TextLineBuffer.cc | 4 +++- src/HTMLRenderer/export.cc | 4 ---- src/HTMLRenderer/general.cc | 2 ++ src/HTMLRenderer/install.cc | 13 ------------- src/HTMLRenderer/state.cc | 3 ++- src/util/StateManager.h | 7 +++++++ 7 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/HTMLRenderer/HTMLRenderer.h b/src/HTMLRenderer/HTMLRenderer.h index 4956588..968dd74 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_height(double height); long long install_left(double left); //////////////////////////////////////////////////// @@ -186,7 +185,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_height(long long height_id, double height); void export_left(long long left_id, double left); // depending on single-html, to embed the content or add a link to it @@ -320,6 +318,8 @@ class HTMLRenderer : public OutputDev bool rise_changed; RiseManager rise_manager; + HeightManager height_manager; + // optimize for web // we try to render the final font size directly // to reduce the effect of ctm as much as possible @@ -359,7 +359,6 @@ class HTMLRenderer : public OutputDev std::map transform_matrix_map; std::unordered_map fill_color_map, stroke_color_map; std::map whitespace_map; - std::map height_map; std::map left_map; const Param * param; diff --git a/src/HTMLRenderer/TextLineBuffer.cc b/src/HTMLRenderer/TextLineBuffer.cc index 9a00f07..93571ea 100644 --- a/src/HTMLRenderer/TextLineBuffer.cc +++ b/src/HTMLRenderer/TextLineBuffer.cc @@ -83,13 +83,15 @@ void HTMLRenderer::TextLineBuffer::flush(void) } ostream & out = renderer->f_pages.fs; + renderer->height_manager.install(max_ascent); + out << "
install_left(x) - << " h" << renderer->install_height(max_ascent) + << " h" << renderer->height_manager.get_id() << "\">"; auto cur_state_iter = states.begin(); diff --git a/src/HTMLRenderer/export.cc b/src/HTMLRenderer/export.cc index 6332df9..2fed1d8 100644 --- a/src/HTMLRenderer/export.cc +++ b/src/HTMLRenderer/export.cc @@ -196,10 +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_height (long long height_id, double height) -{ - f_css.fs << ".h" << height_id << "{height:" << round(height) << "px;}" << endl; -} void HTMLRenderer::export_left (long long left_id, double left) { f_css.fs << ".L" << left_id << "{left:" << round(left) << "px;}" << endl; diff --git a/src/HTMLRenderer/general.cc b/src/HTMLRenderer/general.cc index 1b95fdf..1c46054 100644 --- a/src/HTMLRenderer/general.cc +++ b/src/HTMLRenderer/general.cc @@ -60,6 +60,7 @@ HTMLRenderer::HTMLRenderer(const Param * param) 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); + height_manager .set_param(CSS::HEIGHT_CN , EPS ); } HTMLRenderer::~HTMLRenderer() @@ -341,6 +342,7 @@ void HTMLRenderer::post_process() letter_space_manager.dump_css(f_css.fs); word_space_manager .dump_css(f_css.fs); rise_manager .dump_css(f_css.fs); + height_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 4b65151..4a569f4 100644 --- a/src/HTMLRenderer/install.cc +++ b/src/HTMLRenderer/install.cc @@ -280,19 +280,6 @@ long long HTMLRenderer::install_whitespace(double ws_width, double & actual_widt return new_ws_id; } -long long HTMLRenderer::install_height(double height) -{ - auto iter = height_map.lower_bound(height - EPS); - if((iter != height_map.end()) && (abs(iter->first - height) <= EPS)) - { - return iter->second; - } - - long long new_height_id = height_map.size(); - height_map.insert(make_pair(height, new_height_id)); - export_height(new_height_id, height); - return new_height_id; -} long long HTMLRenderer::install_left(double left) { auto iter = left_map.lower_bound(left - param->h_eps); diff --git a/src/HTMLRenderer/state.cc b/src/HTMLRenderer/state.cc index d11f93f..0f1d7d0 100644 --- a/src/HTMLRenderer/state.cc +++ b/src/HTMLRenderer/state.cc @@ -116,7 +116,8 @@ void HTMLRenderer::reset_state() cur_stroke_color_id = install_stroke_color(&cur_stroke_color); cur_has_stroke = false; - rise_manager.reset(); + rise_manager .reset(); + height_manager.reset(); cur_tx = cur_ty = 0; draw_tx = draw_ty = 0; diff --git a/src/util/StateManager.h b/src/util/StateManager.h index edb582a..38dac86 100644 --- a/src/util/StateManager.h +++ b/src/util/StateManager.h @@ -121,6 +121,13 @@ public: void dump_value(std::ostream & out, double value) { out << "top:" << round(-value) << "px;"; } }; +class HeightManager : public StateManager +{ +public: + double default_value(void) { return 0; } + void dump_value(std::ostream & out, double value) { out << "height:" << round(value) << "px;"; } +}; + } // namespace pdf2htmlEX #endif //STATEMANAGER_H__