void litehtml::el_image::draw( uint_ptr hdc, int x, int y, const position* clip ) { position pos = m_pos; pos.x += x; pos.y += y; position el_pos = pos; el_pos += m_padding; el_pos += m_borders; // draw standard background here if (el_pos.does_intersect(clip)) { const background* bg = get_background(); if (bg) { background_paint bg_paint; init_background_paint(pos, bg_paint, bg); get_document()->container()->draw_background(hdc, bg_paint); } } // draw image as background if(pos.does_intersect(clip)) { if (pos.width > 0 && pos.height > 0) { background_paint bg; bg.image = m_src; bg.clip_box = pos; bg.origin_box = pos; bg.border_box = pos; bg.border_box += m_padding; bg.border_box += m_borders; bg.repeat = background_repeat_no_repeat; bg.image_size.width = pos.width; bg.image_size.height = pos.height; bg.border_radius = m_css_borders.radius.calc_percents(bg.border_box.width, bg.border_box.height); bg.position_x = pos.x; bg.position_y = pos.y; get_document()->container()->draw_background(hdc, bg); } } // draw borders if (el_pos.does_intersect(clip)) { position border_box = pos; border_box += m_padding; border_box += m_borders; borders bdr = m_css_borders; bdr.radius = m_css_borders.radius.calc_percents(border_box.width, border_box.height); get_document()->container()->draw_borders(hdc, bdr, border_box, have_parent() ? false : true); } }
void litehtml::el_before_after_base::add_text( const tstring& txt ) { tstring word; tstring esc; for(tstring::size_type i = 0; i < txt.length(); i++) { if( (txt.at(i) == _t(' ')) || (txt.at(i) == _t('\t')) || (txt.at(i) == _t('\\') && !esc.empty()) ) { if(esc.empty()) { if(!word.empty()) { element::ptr el = std::make_shared<el_text>(word.c_str(), get_document()); appendChild(el); word.clear(); } element::ptr el = std::make_shared<el_space>(txt.substr(i, 1).c_str(), get_document()); appendChild(el); } else { word += convert_escape(esc.c_str() + 1); esc.clear(); if(txt.at(i) == _t('\\')) { esc += txt.at(i); } } } else { if(!esc.empty() || txt.at(i) == _t('\\')) { esc += txt.at(i); } else { word += txt.at(i); } } } if(!esc.empty()) { word += convert_escape(esc.c_str() + 1); } if(!word.empty()) { element::ptr el = std::make_shared<el_text>(word.c_str(), get_document()); appendChild(el); word.clear(); } }
void litehtml::el_image::parse_styles( bool is_reparse /*= false*/ ) { html_tag::parse_styles(is_reparse); if(!m_src.empty()) { if(!m_css_height.is_predefined() && !m_css_width.is_predefined()) { get_document()->container()->load_image(m_src.c_str(), 0, true); } else { get_document()->container()->load_image(m_src.c_str(), 0, false); } } }
gint main(gint argc, gchar **argv) { gint i, n; gint result = EXIT_SUCCESS; /* html header */ g_printf("<html><head></head><body>"); if (argc <= 1) { g_printf("<div>No arguments specified.</div>\n"); result = EXIT_FAILURE; } for (n = 0, i = 1; i < argc; ++i) { gchar *doc = get_document(argv[i]); if (doc && ++n) g_printf("%s", doc); g_free(doc); } if (argc > 1 && n == 0) { g_printf("<div>No documentation found.</div>\n"); result = EXIT_FAILURE; } /* html footer */ g_printf("</body></html>"); return result; }
void litehtml::el_link::parse_attributes() { bool processed = false; document::ptr doc = get_document(); const tchar_t* rel = get_attr(_t("rel")); if(rel && !t_strcmp(rel, _t("stylesheet"))) { const tchar_t* media = get_attr(_t("media")); const tchar_t* href = get_attr(_t("href")); if(href && href[0]) { tstring css_text; tstring css_baseurl; doc->container()->import_css(css_text, href, css_baseurl); if(!css_text.empty()) { doc->add_stylesheet(css_text.c_str(), css_baseurl.c_str(), media); processed = true; } } } if(!processed) { doc->container()->link(doc, shared_from_this()); } }
void litehtml::el_table::parse_styles(bool is_reparse) { html_tag::parse_styles(is_reparse); m_border_collapse = (border_collapse) value_index(get_style_property(_t("border-collapse"), true, _t("separate")), border_collapse_strings, border_collapse_separate); if(m_border_collapse == border_collapse_separate) { m_css_border_spacing_x.fromString(get_style_property(_t("-litehtml-border-spacing-x"), true, _t("0px"))); m_css_border_spacing_y.fromString(get_style_property(_t("-litehtml-border-spacing-y"), true, _t("0px"))); int fntsz = get_font_size(); document::ptr doc = get_document(); m_border_spacing_x = doc->cvt_units(m_css_border_spacing_x, fntsz); m_border_spacing_y = doc->cvt_units(m_css_border_spacing_y, fntsz); } else { m_border_spacing_x = 0; m_border_spacing_y = 0; m_padding.bottom = 0; m_padding.top = 0; m_padding.left = 0; m_padding.right = 0; m_css_padding.bottom.set_value(0, css_units_px); m_css_padding.top.set_value(0, css_units_px); m_css_padding.left.set_value(0, css_units_px); m_css_padding.right.set_value(0, css_units_px); } }
void litehtml::el_before_after_base::add_function( const tstring& fnc, const tstring& params ) { int idx = value_index(fnc.c_str(), _t("attr;counter;url")); switch(idx) { // attr case 0: { tstring p_name = params; trim(p_name); lcase(p_name); element::ptr el_parent = parent(); if (el_parent) { const tchar_t* attr_value = el_parent->get_attr(p_name.c_str()); if (attr_value) { add_text(attr_value); } } } break; // counter case 1: break; // url case 2: { tstring p_url = params; trim(p_url); if(!p_url.empty()) { if(p_url.at(0) == _t('\'') || p_url.at(0) == _t('\"')) { p_url.erase(0, 1); } } if(!p_url.empty()) { if(p_url.at(p_url.length() - 1) == _t('\'') || p_url.at(p_url.length() - 1) == _t('\"')) { p_url.erase(p_url.length() - 1, 1); } } if(!p_url.empty()) { element::ptr el = std::make_shared<el_image>(get_document()); el->set_attr(_t("src"), p_url.c_str()); el->set_attr(_t("style"), _t("display:inline-block")); el->set_tagName(_t("img")); appendChild(el); el->parse_attributes(); } } break; } }
void toc_choicehandler(Evas *e, Evas_Object *parent,int choice, bool lp) { Ecore_List *list=(Ecore_List *)choicebox_get_userdata(e,parent); Epdf_Index_Item *curitem=(Epdf_Index_Item *)ecore_list_index_goto(list,choice); Ecore_List *childlist=epdf_index_item_children_get (curitem); if(!childlist) { Evas_Object *curcb=parent; Evas_Object *nextcb; while((nextcb=choicebox_get_parent(e,curcb))) { fini_choicebox(e,curcb,false); curcb=nextcb; } evas_object_focus_set(curcb,1); goto_page(epdf_index_item_page_get(get_document(),curitem)); } else { TOCDialog(e,parent,childlist); } }
void litehtml::el_base::parse_attributes() { get_document()->container()->set_base_url(get_attr(_t("href"))); }
int litehtml::el_image::render( int x, int y, int max_width, bool second_pass ) { int parent_width = max_width; calc_outlines(parent_width); m_pos.move_to(x, y); document::ptr doc = get_document(); litehtml::size sz; doc->container()->get_image_size(m_src.c_str(), 0, sz); m_pos.width = sz.width; m_pos.height = sz.height; if(m_css_height.is_predefined() && m_css_width.is_predefined()) { m_pos.height = sz.height; m_pos.width = sz.width; // check for max-height if(!m_css_max_width.is_predefined()) { int max_width = doc->cvt_units(m_css_max_width, m_font_size, parent_width); if(m_pos.width > max_width) { m_pos.width = max_width; } if(sz.width) { m_pos.height = (int) ((float) m_pos.width * (float) sz.height / (float)sz.width); } else { m_pos.height = sz.height; } } // check for max-height if(!m_css_max_height.is_predefined()) { int max_height = doc->cvt_units(m_css_max_height, m_font_size); if(m_pos.height > max_height) { m_pos.height = max_height; } if(sz.height) { m_pos.width = (int) (m_pos.height * (float)sz.width / (float)sz.height); } else { m_pos.width = sz.width; } } } else if(!m_css_height.is_predefined() && m_css_width.is_predefined()) { if (!get_predefined_height(m_pos.height)) { m_pos.height = (int)m_css_height.val(); } // check for max-height if(!m_css_max_height.is_predefined()) { int max_height = doc->cvt_units(m_css_max_height, m_font_size); if(m_pos.height > max_height) { m_pos.height = max_height; } } if(sz.height) { m_pos.width = (int) (m_pos.height * (float)sz.width / (float)sz.height); } else { m_pos.width = sz.width; } } else if(m_css_height.is_predefined() && !m_css_width.is_predefined()) { m_pos.width = (int) m_css_width.calc_percent(parent_width); // check for max-width if(!m_css_max_width.is_predefined()) { int max_width = doc->cvt_units(m_css_max_width, m_font_size, parent_width); if(m_pos.width > max_width) { m_pos.width = max_width; } } if(sz.width) { m_pos.height = (int) ((float) m_pos.width * (float) sz.height / (float)sz.width); } else { m_pos.height = sz.height; } } else { m_pos.width = (int) m_css_width.calc_percent(parent_width); m_pos.height = 0; if (!get_predefined_height(m_pos.height)) { m_pos.height = (int)m_css_height.val(); } // check for max-height if(!m_css_max_height.is_predefined()) { int max_height = doc->cvt_units(m_css_max_height, m_font_size); if(m_pos.height > max_height) { m_pos.height = max_height; } } // check for max-height if(!m_css_max_width.is_predefined()) { int max_width = doc->cvt_units(m_css_max_width, m_font_size, parent_width); if(m_pos.width > max_width) { m_pos.width = max_width; } } } calc_auto_margins(parent_width); m_pos.x += content_margins_left(); m_pos.y += content_margins_top(); return m_pos.width + content_margins_left() + content_margins_right(); }
void litehtml::el_image::get_content_size( size& sz, int max_width ) { get_document()->container()->get_image_size(m_src.c_str(), 0, sz); }
element element::operator[](stdx::string_view key) const { if (_raw == nullptr || type() != bsoncxx::type::k_document) return element(); document::view doc = get_document(); return doc[key]; }
void litehtml::el_title::parse_attributes() { tstring text; get_text(text); get_document()->container()->set_caption(text.c_str()); }
element element::operator[](stdx::string_view key) const { document::view doc = get_document(); return doc[key]; }