move html and text content handlers where they belong

This commit is contained in:
Vincent Sanders 2018-05-10 11:34:26 +01:00 committed by Vincent Sanders
parent 1b892391d7
commit 2a03ea3049
47 changed files with 758 additions and 515 deletions

View File

@ -617,9 +617,6 @@ include frontends/Makefile
# Content sources
include content/Makefile
# render sources
include render/Makefile
# utility sources
include utils/Makefile
@ -636,7 +633,6 @@ include desktop/Makefile
S_COMMON := \
$(S_CONTENT) \
$(S_FETCHERS) \
$(S_RENDER) \
$(S_UTILS) \
$(S_HTTP) \
$(S_NSURL) \

View File

@ -13,4 +13,15 @@ include content/handlers/javascript/Makefile
S_CONTENT += $(addprefix handlers/javascript/,$(S_JAVASCRIPT))
# HTML content handler sources
include content/handlers/html/Makefile
S_CONTENT += $(addprefix handlers/html/,$(S_HTML))
# Text content handler sources
include content/handlers/text/Makefile
S_CONTENT += $(addprefix handlers/text/,$(S_TEXT))
# extend the include search path
INCLUDE_DIRS += content/handlers

View File

@ -0,0 +1,7 @@
# HTML content handler sources
S_HTML := box.c box_construct.c box_normalise.c box_textarea.c \
font.c form.c imagemap.c layout.c search.c table.c \
html.c html_css.c html_css_fetcher.c html_script.c \
html_interaction.c html_redraw.c html_redraw_border.c \
html_forms.c html_object.c

View File

@ -41,9 +41,9 @@
#include "desktop/scrollbar.h"
#include "desktop/gui_internal.h"
#include "render/box.h"
#include "render/form_internal.h"
#include "render/html_internal.h"
#include "html/box.h"
#include "html/form_internal.h"
#include "html/html_internal.h"
#define box_is_float(box) (box->type == BOX_FLOAT_LEFT || \
box->type == BOX_FLOAT_RIGHT)
@ -62,7 +62,7 @@ static int box_talloc_destructor(struct box *b)
css_computed_style_destroy(b->style);
b->style = NULL;
}
if (b->styles != NULL) {
css_select_results_destroy(b->styles);
b->styles = NULL;
@ -112,7 +112,7 @@ static int box_talloc_destructor(struct box *b)
*/
struct box * box_create(css_select_results *styles, css_computed_style *style,
bool style_owned, nsurl *href, const char *target,
bool style_owned, nsurl *href, const char *target,
const char *title, lwc_string *id, void *context)
{
unsigned int i;
@ -448,7 +448,7 @@ static bool box_contains_point(
*physically = true;
return true;
}
if ((box->style && css_computed_overflow_x(box->style) ==
if ((box->style && css_computed_overflow_x(box->style) ==
CSS_OVERFLOW_VISIBLE) || !box->style) {
if (box->descendant_x0 <= x &&
x < box->descendant_x1) {
@ -456,7 +456,7 @@ static bool box_contains_point(
return true;
}
}
if ((box->style && css_computed_overflow_y(box->style) ==
if ((box->style && css_computed_overflow_y(box->style) ==
CSS_OVERFLOW_VISIBLE) || !box->style) {
if (box->descendant_y0 <= y &&
y < box->descendant_y1) {
@ -981,7 +981,7 @@ struct box *box_find_by_id(struct box *box, lwc_string *id)
bool box_visible(struct box *box)
{
/* visibility: hidden */
if (box->style && css_computed_visibility(box->style) ==
if (box->style && css_computed_visibility(box->style) ==
CSS_VISIBILITY_HIDDEN)
return false;
@ -1040,7 +1040,7 @@ void box_dump(FILE *stream, struct box *box, unsigned int depth, bool style)
if (box->space)
fprintf(stream, "space ");
if (box->object) {
fprintf(stream, "(object '%s') ",
fprintf(stream, "(object '%s') ",
nsurl_access(hlcache_handle_get_url(box->object)));
}
if (box->iframe) {
@ -1206,10 +1206,10 @@ bool box_handle_scrollbars(struct content *c, struct box *box,
visible_width, full_width);
}
}
if (right && bottom)
scrollbar_make_pair(box->scroll_x, box->scroll_y);
return true;
}
@ -1239,4 +1239,3 @@ bool box_hscrollbar_present(const struct box * const box)
return box->padding[LEFT] + box->width + box->padding[RIGHT] +
box->border[RIGHT].width < box->descendant_x1;
}

View File

@ -17,7 +17,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/** \file
/**
* \file
* Box tree construction and manipulation (interface).
*
* This stage of rendering converts a tree of dom_nodes (produced by libdom)
@ -83,8 +84,8 @@
* \endcode
*/
#ifndef _NETSURF_RENDER_BOX_H_
#define _NETSURF_RENDER_BOX_H_
#ifndef NETSURF_HTML_BOX_H
#define NETSURF_HTML_BOX_H
#include <limits.h>
#include <stdbool.h>
@ -321,7 +322,7 @@ extern const char *TARGET_BLANK;
struct box * box_create(css_select_results *styles, css_computed_style *style,
bool style_owned, struct nsurl *href, const char *target,
bool style_owned, struct nsurl *href, const char *target,
const char *title, lwc_string *id, void *context);
void box_add_child(struct box *parent, struct box *child);
void box_insert_sibling(struct box *box, struct box *new_box);

View File

@ -49,10 +49,10 @@
#include "css/utils.h"
#include "desktop/gui_internal.h"
#include "render/box.h"
#include "render/box_textarea.h"
#include "render/form_internal.h"
#include "render/html_internal.h"
#include "html/box.h"
#include "html/box_textarea.h"
#include "html/form_internal.h"
#include "html/html_internal.h"
/**
* Context for box tree construction
@ -751,8 +751,8 @@ bool box_construct_element(struct box_construct_ctx *ctx,
if (props.containing_block != NULL) {
/* In case the containing block is a pre block, we clear
* the PRE_STRIP flag since it is not used if we follow
* the pre with a tag */
* the PRE_STRIP flag since it is not used if we follow
* the pre with a tag */
props.containing_block->flags &= ~PRE_STRIP;
}
@ -2068,9 +2068,9 @@ bool box_create_frameset(struct content_html_frames *f, dom_node *n,
/* common extension: frameborder="yes|no" to control all children */
err = dom_element_get_attribute(n, corestring_dom_frameborder, &s);
if (err == DOM_NO_ERR && s != NULL) {
if (dom_string_caseless_lwc_isequal(s,
corestring_lwc_no) == 0)
default_border = false;
if (dom_string_caseless_lwc_isequal(s,
corestring_lwc_no) == 0)
default_border = false;
dom_string_unref(s);
}
@ -2214,8 +2214,8 @@ bool box_create_frameset(struct content_html_frames *f, dom_node *n,
/* copy url */
if (url != NULL) {
/* no self-references */
if (nsurl_compare(content->base_url, url,
/* no self-references */
if (nsurl_compare(content->base_url, url,
NSURL_COMPLETE) == false)
frame->url = url;
url = NULL;
@ -3064,7 +3064,7 @@ bool box_get_attribute(dom_node *n, const char *attribute,
}
/* exported function documented in render/box.h */
/* exported function documented in html/box.h */
bool
box_extract_link(const html_content *content,
const dom_string *dsrel,
@ -3132,6 +3132,3 @@ box_extract_link(const html_content *content,
return true;
}

View File

@ -19,7 +19,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/** \file
/**
* \file
* Box tree normalisation (implementation).
*/
@ -31,9 +32,9 @@
#include "utils/errors.h"
#include "css/select.h"
#include "render/box.h"
#include "render/html_internal.h"
#include "render/table.h"
#include "html/box.h"
#include "html/html_internal.h"
#include "html/table.h"
/* Define to enable box normalise debug */
#undef BOX_NORMALISE_DEBUG
@ -76,7 +77,7 @@ static bool box_normalise_table_spans(
html_content *c);
static bool box_normalise_table_row_group(
struct box *row_group,
const struct box *root,
const struct box *root,
struct columns *col_info,
html_content *c);
static bool box_normalise_table_row(
@ -460,7 +461,7 @@ bool box_normalise_table_spans(
/* Clear span data */
memset(spans, 0, table->columns * sizeof(struct span_info));
/* Scan table, filling in width and height of table cells with
/* Scan table, filling in width and height of table cells with
* colspan = 0 and rowspan = 0. Also generate empty cells */
for (table_row_group = table->children;
table_row_group != NULL;
@ -509,34 +510,34 @@ bool box_normalise_table_spans(
css_computed_style *style;
struct box *cell, *prev;
/* If it's already zero, then we need
* to generate an empty cell for the
* gap in the row that spans as many
* columns as remain blank.
/* If it's already zero, then we need
* to generate an empty cell for the
* gap in the row that spans as many
* columns as remain blank.
*/
assert(table_row->style != NULL);
/* Find width of gap */
while (col < table->columns &&
spans[col].row_span ==
spans[col].row_span ==
0) {
col++;
}
ctx.ctx = c->select_ctx;
ctx.quirks = (c->quirks ==
ctx.quirks = (c->quirks ==
DOM_DOCUMENT_QUIRKS_MODE_FULL);
ctx.base_url = c->base_url;
ctx.universal = c->universal;
style = nscss_get_blank_style(&ctx,
style = nscss_get_blank_style(&ctx,
table_row->style);
if (style == NULL)
return false;
cell = box_create(NULL, style, true,
table_row->href,
table_row->target,
cell = box_create(NULL, style, true,
table_row->href,
table_row->target,
NULL, NULL, c->bctx);
if (cell == NULL) {
css_computed_style_destroy(
@ -553,8 +554,8 @@ bool box_normalise_table_spans(
for (prev = table_row->children;
prev != NULL;
prev = prev->next) {
if (prev->start_column +
prev->columns ==
if (prev->start_column +
prev->columns ==
start)
break;
if (prev->next == NULL)
@ -569,7 +570,7 @@ bool box_normalise_table_spans(
else
table_row->last = cell;
cell->next =
cell->next =
table_row->children;
table_row->children = cell;
} else {
@ -867,7 +868,7 @@ bool box_normalise_table_row(
/* Update row spanning details for all columns */
for (i = 0; i < col_info->num_columns; i++) {
if (col_info->spans[i].row_span != 0 &&
if (col_info->spans[i].row_span != 0 &&
col_info->spans[i].auto_row == false) {
/* This cell spans rows, and is not an auto row.
* Reduce number of rows left to span */
@ -926,12 +927,12 @@ bool calculate_table_row(struct columns *col_info,
* No other browser supports colspan=0, anyway. */
if (col_span == 0)
col_span = 1;
cell_end_col = cell_start_col + col_span;
if (col_info->num_columns < cell_end_col) {
/* It appears that this row has more columns than
* the maximum recorded for the table so far.
* the maximum recorded for the table so far.
* Allocate more span records. */
spans = realloc(col_info->spans,
sizeof *spans * (cell_end_col + 1));
@ -946,7 +947,7 @@ bool calculate_table_row(struct columns *col_info,
col_info->spans[cell_end_col].auto_row = false;
}
/* This cell may span multiple columns. If it also wants to span
/* This cell may span multiple columns. If it also wants to span
* multiple rows, temporarily assume it spans 1 row only. This will
* be fixed up in box_normalise_table_spans() */
for (i = cell_start_col; i < cell_end_col; i++) {

View File

@ -16,7 +16,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/** \file
/**
* \file
* Box tree treeview box replacement (implementation).
*/
@ -27,9 +28,9 @@
#include "netsurf/keypress.h"
#include "desktop/textarea.h"
#include "render/box_textarea.h"
#include "render/font.h"
#include "render/form_internal.h"
#include "html/box_textarea.h"
#include "html/font.h"
#include "html/form_internal.h"
bool box_textarea_keypress(html_content *html, struct box *box, uint32_t key)
@ -347,4 +348,3 @@ bool box_textarea_create_textarea(html_content *html,
return true;
}

View File

@ -16,18 +16,17 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/** \file
/**
* \file
* Box tree treeview box replacement (interface).
*/
#ifndef NETSURF_HTML_BOX_TEXTAREA_H
#define NETSURF_HTML_BOX_TEXTAREA_H
#ifndef _NETSURF_RENDER_BOX_TEXTAREA_H_
#define _NETSURF_RENDER_BOX_TEXTAREA_H_
#include "render/box.h"
#include "render/html_internal.h"
#include "html/box.h"
#include "html/html_internal.h"
struct dom_node;

View File

@ -19,23 +19,23 @@
/**
* \file
*
* Renderer internal font handling implementation.
* HTML internal font handling implementation.
*/
#include "utils/nsoption.h"
#include "netsurf/plot_style.h"
#include "css/utils.h"
#include "render/font.h"
#include "html/font.h"
/**
* Map a generic CSS font family to a generic plot font family
*
* \param css Generic CSS font family
* \param css Generic CSS font family
* \return Plot font family
*/
static plot_font_generic_family_t plot_font_generic_family(
enum css_font_family_e css)
static plot_font_generic_family_t
plot_font_generic_family(enum css_font_family_e css)
{
plot_font_generic_family_t plot;
@ -131,7 +131,7 @@ static plot_font_flags_t plot_font_flags(enum css_font_style_e style,
}
/* exported function documented in render/font.h */
/* exported function documented in html/font.h */
void font_plot_style_from_css(
const nscss_len_ctx *len_ctx,
const css_computed_style *css,

View File

@ -16,16 +16,16 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/** \file
*
/**
* \file
* Internal font handling interfaces.
*
* These functions provide font related services. They all work on
* UTF-8 strings with lengths given.
*/
#ifndef _NETSURF_RENDER_FONT_H_
#define _NETSURF_RENDER_FONT_H_
#ifndef NETSURF_HTML_FONT_H
#define NETSURF_HTML_FONT_H
struct plot_font_style;
@ -36,9 +36,8 @@ struct plot_font_style;
* \param css Computed style to consider
* \param fstyle Font style to populate
*/
void font_plot_style_from_css(
const nscss_len_ctx *len_ctx,
const css_computed_style *css,
struct plot_font_style *fstyle);
void font_plot_style_from_css(const nscss_len_ctx *len_ctx,
const css_computed_style *css,
struct plot_font_style *fstyle);
#endif

View File

@ -52,12 +52,12 @@
#include "desktop/textarea.h"
#include "desktop/gui_internal.h"
#include "render/box.h"
#include "render/font.h"
#include "render/form_internal.h"
#include "render/html.h"
#include "render/html_internal.h"
#include "render/layout.h"
#include "html/box.h"
#include "html/font.h"
#include "html/form_internal.h"
#include "html/html.h"
#include "html/html_internal.h"
#include "html/layout.h"
#define MAX_SELECT_HEIGHT 210
#define SELECT_LINE_SPACING 0.2
@ -96,9 +96,9 @@ static void form_select_menu_clicked(struct form_control *control,
static void form_select_menu_scroll_callback(void *client_data,
struct scrollbar_msg_data *scrollbar_data);
/* exported interface documented in render/form_internal.h */
struct form *form_new(void *node, const char *action, const char *target,
form_method method, const char *charset,
/* exported interface documented in html/form_internal.h */
struct form *form_new(void *node, const char *action, const char *target,
form_method method, const char *charset,
const char *doc_charset)
{
struct form *form;
@ -146,7 +146,7 @@ struct form *form_new(void *node, const char *action, const char *target,
}
/* exported interface documented in render/form_internal.h */
/* exported interface documented in html/form_internal.h */
void form_free(struct form *form)
{
struct form_control *c, *d;
@ -165,7 +165,7 @@ void form_free(struct form *form)
free(form);
}
/* exported interface documented in render/form_internal.h */
/* exported interface documented in html/form_internal.h */
struct form_control *form_new_control(void *node, form_control_type type)
{
struct form_control *control;
@ -327,7 +327,7 @@ bool form_add_option(struct form_control *control, char *value, char *text,
}
/* exported interface documented in render/form_internal.h */
/* exported interface documented in html/form_internal.h */
bool form_successful_controls_dom(struct form *_form,
struct form_control *_submit_button,
struct fetch_multipart_data **successful_controls)
@ -347,7 +347,7 @@ bool form_successful_controls_dom(struct form *_form,
last_success = &sentinel;
sentinel.next = NULL;
/** \todo Replace this call with something DOMish */
charset = form_acceptable_charset(_form);
if (charset == NULL) {
@ -361,22 +361,22 @@ bool form_successful_controls_dom(struct form *_form,
form_encode_item(dom_string_data(i), dom_string_byte_length(i), \
charset, _form->document_charset) \
))
err = dom_html_form_element_get_elements(form, &form_elements);
if (err != DOM_NO_ERR) {
NSLOG(netsurf, INFO, "Could not get form elements");
goto dom_no_memory;
}
err = dom_html_collection_get_length(form_elements, &element_count);
if (err != DOM_NO_ERR) {
NSLOG(netsurf, INFO, "Could not get form element count");
goto dom_no_memory;
}
for (index = 0; index < element_count; index++) {
if (form_element != NULL) {
dom_node_unref(form_element);
@ -501,7 +501,7 @@ bool form_successful_controls_dom(struct form *_form,
continue;
if (inputname == NULL)
continue;
if (dom_string_isequal(nodename, corestring_dom_TEXTAREA)) {
err = dom_html_text_area_element_get_value(
(dom_html_text_area_element *)form_element,
@ -565,17 +565,17 @@ bool form_successful_controls_dom(struct form *_form,
"Could not get option value");
goto dom_no_memory;
}
success_new = calloc(1, sizeof(*success_new));
if (success_new == NULL) {
NSLOG(netsurf, INFO,
"Could not allocate data for option");
goto dom_no_memory;
}
last_success->next = success_new;
last_success = success_new;
success_new->name = ENCODE_ITEM(inputname);
if (success_new->name == NULL) {
NSLOG(netsurf, INFO,
@ -668,7 +668,7 @@ bool form_successful_controls_dom(struct form *_form,
if ((dom_node *)submit_button !=
(dom_node *)form_element)
continue;
err = dom_node_get_user_data(
form_element,
corestring_dom___ns_key_image_coords_node_data,
@ -683,9 +683,9 @@ bool form_successful_controls_dom(struct form *_form,
"No XY data on the image input");
goto dom_no_memory;
}
basename = ENCODE_ITEM(inputname);
success_new = calloc(1, sizeof(*success_new));
if (success_new == NULL) {
free(basename);
@ -693,10 +693,10 @@ bool form_successful_controls_dom(struct form *_form,
"Could not allocate data for image.x");
goto dom_no_memory;
}
last_success->next = success_new;
last_success = success_new;
success_new->name = malloc(strlen(basename) + 3);
if (success_new->name == NULL) {
free(basename);
@ -713,7 +713,7 @@ bool form_successful_controls_dom(struct form *_form,
}
sprintf(success_new->name, "%s.x", basename);
sprintf(success_new->value, "%d", coords->x);
success_new = calloc(1, sizeof(*success_new));
if (success_new == NULL) {
free(basename);
@ -721,10 +721,10 @@ bool form_successful_controls_dom(struct form *_form,
"Could not allocate data for image.y");
goto dom_no_memory;
}
last_success->next = success_new;
last_success = success_new;
success_new->name = malloc(strlen(basename) + 3);
if (success_new->name == NULL) {
free(basename);
@ -820,17 +820,17 @@ bool form_successful_controls_dom(struct form *_form,
/* Fall out to the allocation */
}
}
success_new = calloc(1, sizeof(*success_new));
if (success_new == NULL) {
NSLOG(netsurf, INFO,
"Could not allocate data for generic");
goto dom_no_memory;
}
last_success->next = success_new;
last_success = success_new;
success_new->name = ENCODE_ITEM(inputname);
if (success_new->name == NULL) {
NSLOG(netsurf, INFO,
@ -849,7 +849,7 @@ bool form_successful_controls_dom(struct form *_form,
rawfile_temp = NULL;
}
}
free(charset);
if (form_element != NULL) {
@ -889,13 +889,13 @@ bool form_successful_controls_dom(struct form *_form,
}
*successful_controls = sentinel.next;
return true;
dom_no_memory:
free(charset);
fetch_multipart_data_destroy(sentinel.next);
if (form_elements != NULL)
dom_html_collection_unref(form_elements);
if (form_element != NULL)
@ -914,7 +914,7 @@ dom_no_memory:
dom_string_unref(inputtype);
if (rawfile_temp != NULL)
free(rawfile_temp);
return false;
}
#undef ENCODE_ITEM
@ -1091,7 +1091,7 @@ char *form_encode_item(const char *item, uint32_t len, const char *charset,
if (err == NSERROR_BAD_ENCODING) {
/* nope, try fallback charset (if any) */
if (fallback) {
snprintf(cset, sizeof cset,
snprintf(cset, sizeof cset,
"%s//TRANSLIT", fallback);
err = utf8_to_enc(item, cset, 0, &ret);
@ -1122,7 +1122,7 @@ char *form_encode_item(const char *item, uint32_t len, const char *charset,
return ret;
}
/* exported interface documented in render/form_internal.h */
/* exported interface documented in html/form_internal.h */
bool form_open_select_menu(void *client_data,
struct form_control *control,
select_menu_redraw_callback callback,
@ -1179,7 +1179,7 @@ bool form_open_select_menu(void *client_data,
menu->callback = callback;
if (scrollbar_create(false,
menu->height,
total_height,
total_height,
menu->height,
control,
form_select_menu_scroll_callback,
@ -1197,7 +1197,7 @@ bool form_open_select_menu(void *client_data,
}
/* exported interface documented in render/form_internal.h */
/* exported interface documented in html/form_internal.h */
void form_free_select_menu(struct form_control *control)
{
if (control->data.select.menu->scrollbar != NULL)
@ -1207,7 +1207,7 @@ void form_free_select_menu(struct form_control *control)
}
/* exported interface documented in render/form_internal.h */
/* exported interface documented in html/form_internal.h */
bool form_redraw_select_menu(struct form_control *control, int x, int y,
float scale, const struct rect *clip,
const struct redraw_context *ctx)
@ -1229,24 +1229,24 @@ bool form_redraw_select_menu(struct form_control *control, int x, int y,
nserror res;
box = control->box;
x_cp = x;
y_cp = y;
width = menu->width;
height = menu->height;
line_height = menu->line_height;
line_height_with_spacing = line_height +
line_height * SELECT_LINE_SPACING;
scroll = scrollbar_get_offset(menu->scrollbar);
if (scale != 1.0) {
x *= scale;
y *= scale;
width *= scale;
height *= scale;
scrollbar_width *= scale;
i = scroll / line_height_with_spacing;
scroll -= i * line_height_with_spacing;
line_height *= scale;
@ -1254,8 +1254,8 @@ bool form_redraw_select_menu(struct form_control *control, int x, int y,
scroll *= scale;
scroll += i * line_height_with_spacing;
}
x0 = x;
y0 = y;
x1 = x + width - 1;
@ -1302,7 +1302,7 @@ bool form_redraw_select_menu(struct form_control *control, int x, int y,
option = control->data.select.items;
item_y = line_height_with_spacing;
while (item_y < scroll) {
option = option->next;
item_y += line_height_with_spacing;
@ -1311,14 +1311,14 @@ bool form_redraw_select_menu(struct form_control *control, int x, int y,
text_pos_offset = y - scroll +
(int) (line_height * (0.75 + SELECT_LINE_SPACING));
text_x = x + (box->border[LEFT].width + box->padding[LEFT]) * scale;
plot_fstyle_entry.size = menu->f_size;
while (option && item_y - scroll < height) {
if (option->selected) {
y2 = y + item_y - scroll;
y3 = y + item_y + line_height_with_spacing - scroll;
if (option->selected) {
y2 = y + item_y - scroll;
y3 = y + item_y + line_height_with_spacing - scroll;
rect.x0 = x0;
rect.y0 = y0 > y2 ? y0 : y2;
@ -1328,7 +1328,7 @@ bool form_redraw_select_menu(struct form_control *control, int x, int y,
if (res != NSERROR_OK) {
return false;
}
}
}
y2 = text_pos_offset + item_y;
res = ctx->plot->text(ctx,
@ -1368,16 +1368,16 @@ bool form_clip_inside_select_menu(struct form_control *control, float scale,
{
struct form_select_menu *menu = control->data.select.menu;
int width, height;
width = menu->width;
height = menu->height;
if (scale != 1.0) {
width *= scale;
height *= scale;
}
if (clip->x0 >= 0 && clip->x1 <= width &&
clip->y0 >= 0 && clip->y1 <= height)
return true;
@ -1509,26 +1509,26 @@ nserror form_control_bounding_rect(struct form_control *control, struct rect *r)
/**
* Handle a click on the area of the currently opened select menu.
*
*
* \param control the select menu which received the click
* \param x X coordinate of click
* \param y Y coordinate of click
*/
void form_select_menu_clicked(struct form_control *control, int x, int y)
{
{
struct form_select_menu *menu = control->data.select.menu;
struct form_option *option;
html_content *html = (html_content *)menu->c;
int line_height, line_height_with_spacing;
int line_height, line_height_with_spacing;
int item_bottom_y;
int scroll, i;
scroll = scrollbar_get_offset(menu->scrollbar);
line_height = menu->line_height;
line_height_with_spacing = line_height +
line_height * SELECT_LINE_SPACING;
option = control->data.select.items;
item_bottom_y = line_height_with_spacing;
i = 0;
@ -1537,11 +1537,11 @@ void form_select_menu_clicked(struct form_control *control, int x, int y)
option = option->next;
i++;
}
if (option != NULL) {
form__select_process_selection(html, control, i);
}
menu->callback(menu->client_data, 0, 0, menu->width, menu->height);
}
@ -1553,7 +1553,7 @@ void form_select_menu_clicked(struct form_control *control, int x, int y)
* \param x X coordinate of click
* \param y Y coordinate of click
* \return text for the browser status bar or NULL if the menu has
* to be closed
* to be closed
*/
const char *form_select_mouse_action(struct form_control *control,
browser_mouse_state mouse, int x, int y)
@ -1562,13 +1562,13 @@ const char *form_select_mouse_action(struct form_control *control,
int x0, y0, x1, y1, scrollbar_x;
const char *status = NULL;
bool multiple = control->data.select.multiple;
x0 = 0;
y0 = 0;
x1 = menu->width;
y1 = menu->height;
scrollbar_x = x1 - SCROLLBAR_WIDTH;
if (menu->scroll_capture ||
(x > scrollbar_x && x < x1 && y > y0 && y < y1)) {
/* The scroll is currently capturing all events or the mouse
@ -1579,25 +1579,25 @@ const char *form_select_mouse_action(struct form_control *control,
scrollbar_mouse_action(menu->scrollbar,
mouse, x, y));
}
if (x > x0 && x < scrollbar_x && y > y0 && y < y1) {
/* over option area */
if (mouse & (BROWSER_MOUSE_CLICK_1 | BROWSER_MOUSE_CLICK_2))
/* button 1 or 2 click */
form_select_menu_clicked(control, x, y);
if (!(mouse & BROWSER_MOUSE_CLICK_1 && !multiple))
/* anything but a button 1 click over a single select
menu */
status = messages_get(control->data.select.multiple ?
"SelectMClick" : "SelectClick");
} else if (!(mouse & (BROWSER_MOUSE_CLICK_1 | BROWSER_MOUSE_CLICK_2)))
/* if not a button 1 or 2 click*/
status = messages_get("SelectClose");
return status;
}
@ -1634,13 +1634,13 @@ void form_select_mouse_drag_end(struct form_control *control,
scrollbar_mouse_drag_end(menu->scrollbar, mouse, x, y);
return;
}
x0 = 0;
y0 = 0;
x1 = menu->width;
y1 = menu->height;
if (x > x0 && x < x1 - SCROLLBAR_WIDTH && y > y0 && y < y1)
/* handle drag end above the option area like a regular click */
form_select_menu_clicked(control, x, y);
@ -1655,13 +1655,13 @@ void form_select_menu_scroll_callback(void *client_data,
struct form_control *control = client_data;
struct form_select_menu *menu = control->data.select.menu;
html_content *html = (html_content *)menu->c;
switch (scrollbar_data->msg) {
case SCROLLBAR_MSG_MOVED:
menu->callback(menu->client_data,
0, 0,
0, 0,
menu->width,
menu->height);
menu->height);
break;
case SCROLLBAR_MSG_SCROLL_START:
{
@ -1712,10 +1712,10 @@ void form_select_menu_callback(void *client_data,
html_content *html = client_data;
int menu_x, menu_y;
struct box *box;
box = html->visible_select_menu->box;
box_coords(box, &menu_x, &menu_y);
menu_x -= box->border[LEFT].width;
menu_y += box->height + box->border[BOTTOM].width +
box->padding[BOTTOM] +
@ -1802,7 +1802,7 @@ void form_submit(nsurl *page_url, struct browser_window *target,
}
/* Replace query segment */
error = nsurl_replace_query(action_url, data, &action_query);
error = nsurl_replace_query(action_url, data, &action_query);
if (error != NSERROR_OK) {
nsurl_unref(action_query);
free(data);
@ -1842,12 +1842,12 @@ void form_submit(nsurl *page_url, struct browser_window *target,
break;
case method_POST_MULTIPART:
browser_window_navigate(target,
action_url,
browser_window_navigate(target,
action_url,
page_url,
BW_NAVIGATE_HISTORY,
NULL,
success,
NULL,
success,
NULL);
break;

View File

@ -18,11 +18,11 @@
/**
* \file
* Interface to form handling functions internal to render.
* Interface to form handling functions internal to HTML content handler.
*/
#ifndef _NETSURF_RENDER_FORM_INTERNAL_H_
#define _NETSURF_RENDER_FORM_INTERNAL_H_
#ifndef NETSURF_HTML_FORM_INTERNAL_H
#define NETSURF_HTML_FORM_INTERNAL_H
#include <stdbool.h>
@ -229,7 +229,7 @@ bool form_successful_controls_dom(struct form *form,
bool form_open_select_menu(void *client_data,
struct form_control *control,
select_menu_redraw_callback redraw_callback,
struct content *c);
struct content *c);
void form_select_menu_callback(void *client_data,

View File

@ -19,7 +19,7 @@
/**
* \file
* Content for text/html (implementation).
* Implementation of HTML content handling.
*/
#include <assert.h>
@ -54,12 +54,12 @@
#include "javascript/js.h"
#include "desktop/gui_internal.h"
#include "render/box.h"
#include "render/form_internal.h"
#include "render/html_internal.h"
#include "render/imagemap.h"
#include "render/layout.h"
#include "render/search.h"
#include "html/box.h"
#include "html/form_internal.h"
#include "html/html_internal.h"
#include "html/imagemap.h"
#include "html/layout.h"
#include "html/search.h"
#define CHUNK 4096
@ -139,7 +139,7 @@ static void html_box_convert_done(html_content *c, bool success)
exc = dom_document_get_document_element(c->document, (void *) &html);
if ((exc != DOM_NO_ERR) || (html == NULL)) {
/** @todo should this call html_object_free_objects(c);
* like the other error paths
* like the other error paths
*/
NSLOG(netsurf, INFO, "error retrieving html element from dom");
content_broadcast_errorcode(&c->base, NSERROR_DOM);
@ -568,7 +568,7 @@ static bool html_process_img(html_content *c, dom_node *node)
return success;
}
/* exported function documented in render/html_internal.h */
/* exported function documented in html/html_internal.h */
void html_finish_conversion(html_content *htmlc)
{
union content_msg_data msg_data;
@ -998,8 +998,8 @@ html_create(const content_handler *handler,
static nserror
html_process_encoding_change(struct content *c,
const char *data,
html_process_encoding_change(struct content *c,
const char *data,
unsigned int size)
{
html_content *html = (html_content *) c;
@ -1010,7 +1010,7 @@ html_process_encoding_change(struct content *c,
unsigned long source_size;
/* Retrieve new encoding */
encoding = dom_hubbub_parser_get_encoding(html->parser,
encoding = dom_hubbub_parser_get_encoding(html->parser,
&html->encoding_source);
if (encoding == NULL) {
return NSERROR_NOMEM;
@ -1070,10 +1070,10 @@ html_process_encoding_change(struct content *c,
/* Reprocess all the data. This is safe because
* the encoding is now specified at parser start which means
* it cannot be changed again.
* it cannot be changed again.
*/
error = dom_hubbub_parser_parse_chunk(html->parser,
(const uint8_t *)source_data,
error = dom_hubbub_parser_parse_chunk(html->parser,
(const uint8_t *)source_data,
source_size);
return libdom_hubbub_error_to_nserror(error);
@ -1091,8 +1091,8 @@ html_process_data(struct content *c, const char *data, unsigned int size)
dom_hubbub_error dom_ret;
nserror err = NSERROR_OK; /* assume its all going to be ok */
dom_ret = dom_hubbub_parser_parse_chunk(html->parser,
(const uint8_t *) data,
dom_ret = dom_hubbub_parser_parse_chunk(html->parser,
(const uint8_t *) data,
size);
err = libdom_hubbub_error_to_nserror(dom_ret);
@ -1108,7 +1108,7 @@ html_process_data(struct content *c, const char *data, unsigned int size)
return false;
}
return true;
return true;
}
@ -1188,14 +1188,14 @@ html_begin_conversion(html_content *htmlc)
dom_string *node_name = NULL;
dom_hubbub_error error;
/* The act of completing the parse can result in additional data
* being flushed through the parser. This may result in new style or
* script nodes, upon which the conversion depends. Thus, once we
* have completed the parse, we must check again to see if we can
* begin the conversion. If we can't, we must stop and wait for the
/* The act of completing the parse can result in additional data
* being flushed through the parser. This may result in new style or
* script nodes, upon which the conversion depends. Thus, once we
* have completed the parse, we must check again to see if we can
* begin the conversion. If we can't, we must stop and wait for the
* new styles/scripts to be processed. Once they have been processed,
* we will be called again to begin the conversion for real. Thus,
* we must also ensure that we don't attempt to complete the parse
* we will be called again to begin the conversion for real. Thus,
* we must also ensure that we don't attempt to complete the parse
* multiple times, so store a flag to indicate that parsing is
* complete to avoid repeating the completion pointlessly.
*/
@ -1205,8 +1205,8 @@ html_begin_conversion(html_content *htmlc)
error = dom_hubbub_parser_completed(htmlc->parser);
if (error != DOM_HUBBUB_OK) {
NSLOG(netsurf, INFO, "Parsing failed");
content_broadcast_errorcode(&htmlc->base,
content_broadcast_errorcode(&htmlc->base,
libdom_hubbub_error_to_nserror(error));
return false;
@ -1243,14 +1243,14 @@ html_begin_conversion(html_content *htmlc)
encoding = dom_hubbub_parser_get_encoding(htmlc->parser,
&htmlc->encoding_source);
if (encoding == NULL) {
content_broadcast_errorcode(&htmlc->base,
content_broadcast_errorcode(&htmlc->base,
NSERROR_NOMEM);
return false;
}
htmlc->encoding = strdup(encoding);
if (htmlc->encoding == NULL) {
content_broadcast_errorcode(&htmlc->base,
content_broadcast_errorcode(&htmlc->base,
NSERROR_NOMEM);
return false;
}
@ -1268,7 +1268,7 @@ html_begin_conversion(html_content *htmlc)
if ((exc != DOM_NO_ERR) ||
(node_name == NULL) ||
(!dom_string_caseless_lwc_isequal(node_name,
corestring_lwc_html))) {
corestring_lwc_html))) {
NSLOG(netsurf, INFO, "root element not html");
content_broadcast_errorcode(&htmlc->base, NSERROR_DOM);
dom_node_unref(html);
@ -1287,11 +1287,11 @@ html_begin_conversion(html_content *htmlc)
/* HTML5 4.10.22.3 step 9 */
nsurl *doc_addr = content_get_url(&htmlc->base);
ns_error = nsurl_join(htmlc->base_url,
nsurl_access(doc_addr),
nsurl_access(doc_addr),
&action);
} else {
ns_error = nsurl_join(htmlc->base_url,
f->action,
ns_error = nsurl_join(htmlc->base_url,
f->action,
&action);
}
@ -1306,7 +1306,7 @@ html_begin_conversion(html_content *htmlc)
f->action = strdup(nsurl_access(action));
nsurl_unref(action);
if (f->action == NULL) {
content_broadcast_errorcode(&htmlc->base,
content_broadcast_errorcode(&htmlc->base,
NSERROR_NOMEM);
dom_node_unref(html);
@ -1317,7 +1317,7 @@ html_begin_conversion(html_content *htmlc)
if (f->document_charset == NULL) {
f->document_charset = strdup(htmlc->encoding);
if (f->document_charset == NULL) {
content_broadcast_errorcode(&htmlc->base,
content_broadcast_errorcode(&htmlc->base,
NSERROR_NOMEM);
dom_node_unref(html);
return false;
@ -1363,7 +1363,7 @@ static void html_stop(struct content *c)
html_object_abort_objects(htmlc);
/* If there are no further active fetches and we're still
* in the READY state, transition to the DONE state. */
* in the READY state, transition to the DONE state. */
if (c->status == CONTENT_STATUS_READY && c->active == 0) {
content_set_done(c);
}
@ -1493,8 +1493,8 @@ static void html_destroy_frameset(struct content_html_frames *frameset)
nsurl_unref(frameset->children[i].url);
frameset->children[i].url = NULL;
}
if (frameset->children[i].children)
html_destroy_frameset(&frameset->children[i]);
if (frameset->children[i].children)
html_destroy_frameset(&frameset->children[i]);
}
talloc_free(frameset->children);
frameset->children = NULL;
@ -1522,7 +1522,7 @@ static void html_free_layout(html_content *htmlc)
{
if (htmlc->bctx != NULL) {
/* freeing talloc context should let the entire box
* set be destroyed
* set be destroyed
*/
talloc_free(htmlc->bctx);
}
@ -1577,8 +1577,8 @@ static void html_destroy(struct content *c)
/* Free base target */
if (html->base_target != NULL) {
free(html->base_target);
html->base_target = NULL;
free(html->base_target);
html->base_target = NULL;
}
/* Free frameset */
@ -1947,9 +1947,9 @@ static void html__set_file_gadget_filename(struct content *c,
NSLOG(netsurf, INFO,
"utf8 to local encoding conversion failed");
/* Load was for us - just no memory */
return;
return;
}
form_gadget_update_value(gadget, utf8_fn);
/* corestring_dom___ns_key_file_name_node_data */
@ -1962,7 +1962,7 @@ static void html__set_file_gadget_filename(struct content *c,
}
/* Redraw box. */
html__redraw_a_box(html, file_box);
html__redraw_a_box(html, file_box);
}
void html_set_file_gadget_filename(struct hlcache_handle *hl,
@ -2260,7 +2260,8 @@ dom_document *html_get_document(hlcache_handle *h)
* \param h HTML content to retrieve tree from
* \return Pointer to box tree
*
* \todo This API must die, as must all use of the box tree outside render/
* \todo This API must die, as must all use of the box tree outside of
* HTML content handler
*/
struct box *html_get_box_tree(hlcache_handle *h)
{

View File

@ -16,14 +16,15 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/** \file
* Content for text/html (interface).
/**
* \file
* Interface to text/html content handler.
*
* These functions should in general be called via the content interface.
*/
#ifndef _NETSURF_RENDER_HTML_H_
#define _NETSURF_RENDER_HTML_H_
#ifndef NETSURF_HTML_HTML_H
#define NETSURF_HTML_HTML_H
#include <stdbool.h>
@ -88,7 +89,9 @@ struct html_script {
};
/** An object (img, object, etc. tag) in a CONTENT_HTML document. */
/**
* An object (img, object, etc. tag) in a CONTENT_HTML document.
*/
struct content_html_object {
struct content *parent; /**< Parent document */
struct content_html_object *next; /**< Next in chain */
@ -128,7 +131,7 @@ struct content_html_frames {
/** Inline frame list (iframe tag) */
struct content_html_iframe {
struct box *box;
struct box *box;
int margin_width; /** frame margin width */
int margin_height; /** frame margin height */
@ -140,7 +143,7 @@ struct content_html_iframe {
bool border; /** frame has a border */
colour border_colour; /** frame border colour */
struct content_html_iframe *next;
struct content_html_iframe *next;
};
/* entries in stylesheet_content */
@ -157,19 +160,6 @@ void html_redraw_a_box(struct hlcache_handle *h, struct box *box);
void html_overflow_scroll_drag_end(struct scrollbar *scrollbar,
browser_mouse_state mouse, int x, int y);
bool text_redraw(const char *utf8_text, size_t utf8_len,
size_t offset, int space,
const struct plot_font_style *fstyle,
int x, int y,
const struct rect *clip,
int height,
float scale,
bool excluded,
struct content *c,
const struct selection *sel,
struct search_context *search,
const struct redraw_context *ctx);
dom_document *html_get_document(struct hlcache_handle *h);
struct box *html_get_box_tree(struct hlcache_handle *h);
struct content_html_frames *html_get_frameset(struct hlcache_handle *h);

View File

@ -16,7 +16,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/** \file
/**
* \file
* Processing for html content css operations.
*/
@ -37,7 +38,7 @@
#include "css/css.h"
#include "desktop/gui_internal.h"
#include "render/html_internal.h"
#include "html/html_internal.h"
static nsurl *html_default_stylesheet_url;
static nsurl *html_adblock_stylesheet_url;
@ -472,7 +473,7 @@ no_memory:
return false;
}
/* exported interface documented in render/html.h */
/* exported interface documented in html/html.h */
struct html_stylesheet *html_get_stylesheets(hlcache_handle *h, unsigned int *n)
{
html_content *c = (html_content *) hlcache_handle_get_content(h);
@ -486,7 +487,7 @@ struct html_stylesheet *html_get_stylesheets(hlcache_handle *h, unsigned int *n)
}
/* exported interface documented in render/html_internal.h */
/* exported interface documented in html/html_internal.h */
nserror html_css_free_stylesheets(html_content *html)
{
unsigned int i;
@ -506,7 +507,7 @@ nserror html_css_free_stylesheets(html_content *html)
return NSERROR_OK;
}
/* exported interface documented in render/html_internal.h */
/* exported interface documented in html/html_internal.h */
nserror html_css_quirks_stylesheets(html_content *c)
{
nserror ns_error = NSERROR_OK;
@ -534,7 +535,7 @@ nserror html_css_quirks_stylesheets(html_content *c)
return ns_error;
}
/* exported interface documented in render/html_internal.h */
/* exported interface documented in html/html_internal.h */
nserror html_css_new_stylesheets(html_content *c)
{
nserror ns_error;

View File

@ -17,6 +17,11 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* \file
* HTML fetcher for CSS objects
*/
#include <assert.h>
#include <stdbool.h>
#include <stdlib.h>
@ -33,7 +38,7 @@
#include "content/fetch.h"
#include "content/fetchers.h"
#include "render/html_internal.h"
#include "html/html_internal.h"
typedef struct html_css_fetcher_item {
uint32_t key;
@ -51,7 +56,7 @@ typedef struct html_css_fetcher_context {
bool aborted;
bool locked;
struct html_css_fetcher_context *r_next, *r_prev;
} html_css_fetcher_context;
@ -86,7 +91,7 @@ static void *html_css_fetcher_setup(struct fetch *parent_fetch, nsurl *url,
lwc_string *path;
uint32_t key;
html_css_fetcher_item *item, *found = NULL;
/* format of a x-ns-css URL is:
* x-ns-url:<key>
* Where key is an unsigned 32bit integer
@ -131,7 +136,7 @@ static void *html_css_fetcher_setup(struct fetch *parent_fetch, nsurl *url,
ctx->item = found;
RING_INSERT(ring, ctx);
return ctx;
}
@ -160,14 +165,14 @@ static void html_css_fetcher_abort(void *ctx)
html_css_fetcher_context *c = ctx;
/* To avoid the poll loop having to deal with the fetch context
* disappearing from under it, we simply flag the abort here.
* disappearing from under it, we simply flag the abort here.
* The poll loop itself will perform the appropriate cleanup.
*/
c->aborted = true;
}
static void html_css_fetcher_send_callback(const fetch_msg *msg,
html_css_fetcher_context *c)
static void html_css_fetcher_send_callback(const fetch_msg *msg,
html_css_fetcher_context *c)
{
c->locked = true;
fetch_send_callback(msg, c->parent_fetch);
@ -178,16 +183,16 @@ static void html_css_fetcher_poll(lwc_string *scheme)
{
fetch_msg msg;
html_css_fetcher_context *c, *next;
if (ring == NULL) return;
/* Iterate over ring, processing each pending fetch */
c = ring;
do {
/* Ignore fetches that have been flagged as locked.
* This allows safe re-entrant calls to this function.
* Re-entrancy can occur if, as a result of a callback,
* the interested party causes fetch_poll() to be called
* the interested party causes fetch_poll() to be called
* again.
*/
if (c->locked == true) {
@ -213,26 +218,26 @@ static void html_css_fetcher_poll(lwc_string *scheme)
msg.type = FETCH_HEADER;
msg.data.header_or_data.buf = (const uint8_t *) header;
msg.data.header_or_data.len = strlen(header);
html_css_fetcher_send_callback(&msg, c);
html_css_fetcher_send_callback(&msg, c);
if (c->aborted == false) {
snprintf(header, sizeof header,
snprintf(header, sizeof header,
"Content-Length: %"PRIsizet,
dom_string_byte_length(c->item->data));
msg.type = FETCH_HEADER;
msg.data.header_or_data.buf =
msg.data.header_or_data.buf =
(const uint8_t *) header;
msg.data.header_or_data.len = strlen(header);
html_css_fetcher_send_callback(&msg, c);
}
if (c->aborted == false) {
snprintf(header, sizeof header,
snprintf(header, sizeof header,
"X-NS-Base: %.*s",
(int) nsurl_length(c->item->base_url),
nsurl_access(c->item->base_url));
msg.type = FETCH_HEADER;
msg.data.header_or_data.buf =
msg.data.header_or_data.buf =
(const uint8_t *) header;
msg.data.header_or_data.len = strlen(header);
html_css_fetcher_send_callback(&msg, c);
@ -240,8 +245,8 @@ static void html_css_fetcher_poll(lwc_string *scheme)
if (c->aborted == false) {
msg.type = FETCH_DATA;
msg.data.header_or_data.buf =
(const uint8_t *)
msg.data.header_or_data.buf =
(const uint8_t *)
dom_string_data(c->item->data);
msg.data.header_or_data.len =
dom_string_byte_length(c->item->data);
@ -256,7 +261,7 @@ static void html_css_fetcher_poll(lwc_string *scheme)
NSLOG(netsurf, INFO, "Processing of %s failed!",
nsurl_access(c->url));
/* Ensure that we're unlocked here. If we aren't,
/* Ensure that we're unlocked here. If we aren't,
* then html_css_fetcher_process() is broken.
*/
assert(c->locked == false);
@ -318,4 +323,3 @@ html_css_fetcher_add_item(dom_string *data, nsurl *base_url, uint32_t *key)
return NSERROR_OK;
}

View File

@ -16,14 +16,19 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* \file
* HTML form handling implementation
*/
#include "utils/config.h"
#include "utils/corestrings.h"
#include "utils/log.h"
#include "render/form_internal.h"
#include "render/html_internal.h"
#include "html/form_internal.h"
#include "html/html_internal.h"
/**
/**
* process form element from dom
*/
static struct form *
@ -572,4 +577,3 @@ struct form_control *html_forms_get_control_for_node(struct form *forms,
return ctl;
}

View File

@ -2,7 +2,7 @@
* Copyright 2006 James Bursa <bursa@users.sourceforge.net>
* Copyright 2006 Richard Wilson <info@tinct.net>
* Copyright 2008 Michael Drake <tlsa@netsurf-browser.org>
* Copyright 2009 Paul Blokus <paul_pl@users.sourceforge.net>
* Copyright 2009 Paul Blokus <paul_pl@users.sourceforge.net>
*
* This file is part of NetSurf, http://www.netsurf-browser.org/
*
@ -21,7 +21,7 @@
/**
* \file
* User interaction with a CONTENT_HTML (implementation).
* implementation of user interaction with a CONTENT_HTML.
*/
#include <assert.h>
@ -48,13 +48,13 @@
#include "javascript/js.h"
#include "desktop/gui_internal.h"
#include "render/box.h"
#include "render/box_textarea.h"
#include "render/font.h"
#include "render/form_internal.h"
#include "render/html_internal.h"
#include "render/imagemap.h"
#include "render/search.h"
#include "html/box.h"
#include "html/box_textarea.h"
#include "html/font.h"
#include "html/form_internal.h"
#include "html/html_internal.h"
#include "html/imagemap.h"
#include "html/search.h"
/**
* Get pointer shape for given box
@ -505,7 +505,7 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
assert(html->drag_type == HTML_DRAG_NONE);
/* search the box tree for a link, imagemap, form control, or
* box with scrollbars
* box with scrollbars
*/
box = html->layout;
@ -515,7 +515,7 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
box_y = box->margin[TOP];
/* descend through visible boxes setting more specific values for:
* box - deepest box at point
* box - deepest box at point
* html_object_box - html object
* html_object_pos_x - html object
* html_object_pos_y - html object
@ -540,13 +540,13 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
* scrollbar - inside padding box stops decent
* scroll_mouse_x - inside padding box stops decent
* scroll_mouse_y - inside padding box stops decent
*
*
* text_box - text box
* text_box_x - text_box
*/
do {
if ((box->style != NULL) &&
(css_computed_visibility(box->style) ==
if ((box->style != NULL) &&
(css_computed_visibility(box->style) ==
CSS_VISIBILITY_HIDDEN)) {
continue;
}
@ -598,8 +598,8 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
}
pointer = get_pointer_shape(box, false);
if ((box->scroll_x != NULL) ||
if ((box->scroll_x != NULL) ||
(box->scroll_y != NULL)) {
if (drag_candidate == NULL) {
@ -614,29 +614,29 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
scrollbar_get_offset(box->scroll_y);
padding_bottom = padding_top + box->padding[TOP] +
box->height + box->padding[BOTTOM];
if ((x > padding_left) &&
if ((x > padding_left) &&
(x < padding_right) &&
(y > padding_top) &&
(y > padding_top) &&
(y < padding_bottom)) {
/* mouse inside padding box */
if ((box->scroll_y != NULL) &&
if ((box->scroll_y != NULL) &&
(x > (padding_right -
SCROLLBAR_WIDTH))) {
/* mouse above vertical box scroll */
scrollbar = box->scroll_y;
scroll_mouse_x = x - (padding_right -
SCROLLBAR_WIDTH);
scroll_mouse_y = y - padding_top;
break;
} else if ((box->scroll_x != NULL) &&
(y > (padding_bottom -
SCROLLBAR_WIDTH))) {
SCROLLBAR_WIDTH))) {
/* mouse above horizontal box scroll */
scrollbar = box->scroll_x;
scroll_mouse_x = x - padding_left;
scroll_mouse_y = y - (padding_bottom -
@ -894,7 +894,7 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
/* if clicking in the main page, remove the selection from any
* text areas */
if (!done) {
if (click && html->focus_type != HTML_FOCUS_SELF) {
union html_focus_owner fo;
fo.self = true;
@ -1190,7 +1190,7 @@ void html_overflow_scroll_callback(void *client_data,
union content_msg_data msg_data;
html_drag_type drag_type;
union html_drag_owner drag_owner;
switch(scrollbar_data->msg) {
case SCROLLBAR_MSG_MOVED:

View File

@ -18,18 +18,19 @@
/**
* \file
* Content for text/html (private data).
* Private data for text/html content.
*/
#ifndef NETSURF_RENDER_HTML_INTERNAL_H_
#define NETSURF_RENDER_HTML_INTERNAL_H_
#ifndef NETSURF_HTML_HTML_INTERNAL_H
#define NETSURF_HTML_HTML_INTERNAL_H
#include <libcss/libcss.h>
#include "content/handlers/css/utils.h"
#include "content/content_protected.h"
#include "desktop/selection.h"
#include "render/html.h"
#include "html/html.h"
struct gui_layout_table;
@ -113,7 +114,7 @@ typedef struct html_content {
/* Title element node */
dom_node *title;
/** A talloc context purely for the render box tree */
/** A talloc context purely for the render box tree */
int *bctx;
/** Box tree, or NULL. */
struct box *layout;
@ -157,7 +158,7 @@ typedef struct html_content {
/** Inline frame information */
struct content_html_iframe *iframe;
/** Content of type CONTENT_HTML containing this, or NULL if not an
/** Content of type CONTENT_HTML containing this, or NULL if not an
* object within a page. */
struct html_content *page;
@ -258,11 +259,11 @@ bool html_can_begin_conversion(html_content *htmlc);
*/
bool html_begin_conversion(html_content *htmlc);
/* in render/html_redraw.c */
/* in html/html_redraw.c */
bool html_redraw(struct content *c, struct content_redraw_data *data,
const struct rect *clip, const struct redraw_context *ctx);
/* in render/html_redraw_border.c */
/* in html/html_redraw_border.c */
bool html_redraw_borders(struct box *box, int x_parent, int y_parent,
int p_width, int p_height, const struct rect *clip, float scale,
const struct redraw_context *ctx);
@ -271,7 +272,7 @@ bool html_redraw_inline_borders(struct box *box, struct rect b,
const struct rect *clip, float scale, bool first, bool last,
const struct redraw_context *ctx);
/* in render/html_interaction.c */
/* in html/html_interaction.c */
void html_mouse_track(struct content *c, struct browser_window *bw,
browser_mouse_state mouse, int x, int y);
void html_mouse_action(struct content *c, struct browser_window *bw,
@ -284,7 +285,7 @@ void html_search(struct content *c, void *context,
void html_search_clear(struct content *c);
/* in render/html_script.c */
/* in html/html_script.c */
dom_hubbub_error html_process_script(void *ctx, dom_node *node);
/**
@ -314,12 +315,12 @@ nserror html_script_free(html_content *htmlc);
*/
nserror html_script_invalidate_ctx(html_content *htmlc);
/* in render/html_forms.c */
/* in html/html_forms.c */
struct form *html_forms_get_forms(const char *docenc, dom_html_document *doc);
struct form_control *html_forms_get_control_for_node(struct form *forms,
dom_node *node);
/* in render/html_css.c */
/* in html/html_css.c */
nserror html_css_init(void);
void html_css_fini(void);
@ -340,7 +341,7 @@ bool html_css_update_style(html_content *c, dom_node *style);
nserror html_css_new_selection_context(html_content *c,
css_select_ctx **ret_select_ctx);
/* in render/html_css_fetcher.c */
/* in html/html_css_fetcher.c */
/**
* Register the fetcher for the pseudo x-ns-css scheme.
*
@ -350,7 +351,7 @@ nserror html_css_fetcher_register(void);
nserror html_css_fetcher_add_item(dom_string *data, nsurl *base_url,
uint32_t *key);
/* in render/html_object.c */
/* in html/html_object.c */
/**
* Start a fetch for an object required by a page.
@ -406,5 +407,3 @@ extern struct dom_string *html_dom_string_type;
extern struct dom_string *html_dom_string_src;
#endif

View File

@ -16,7 +16,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/** \file
/**
* \file
* Processing for html content object operations.
*/
@ -39,8 +40,8 @@
#include "desktop/scrollbar.h"
#include "desktop/gui_internal.h"
#include "render/box.h"
#include "render/html_internal.h"
#include "html/box.h"
#include "html/html_internal.h"
/* break reference loop */
static void html_object_refresh(void *p);
@ -450,40 +451,40 @@ html_object_callback(hlcache_handle *object,
}
if (c->base.status == CONTENT_STATUS_READY &&
c->base.active == 0 &&
(event->type == CONTENT_MSG_LOADING ||
event->type == CONTENT_MSG_DONE ||
event->type == CONTENT_MSG_ERROR ||
event->type == CONTENT_MSG_ERRORCODE)) {
c->base.active == 0 &&
(event->type == CONTENT_MSG_LOADING ||
event->type == CONTENT_MSG_DONE ||
event->type == CONTENT_MSG_ERROR ||
event->type == CONTENT_MSG_ERRORCODE)) {
/* all objects have arrived */
content__reformat(&c->base, false, c->base.available_width,
c->base.height);
content_set_done(&c->base);
} else if (nsoption_bool(incremental_reflow) &&
event->type == CONTENT_MSG_DONE &&
box != NULL &&
!(box->flags & REPLACE_DIM) &&
(c->base.status == CONTENT_STATUS_READY ||
c->base.status == CONTENT_STATUS_DONE)) {
/* 1) the configuration option to reflow pages while
* objects are fetched is set
* 2) an object is newly fetched & converted,
* 3) the box's dimensions need to change due to being replaced
* 4) the object's parent HTML is ready for reformat,
*/
uint64_t ms_now;
nsu_getmonotonic_ms(&ms_now);
if (ms_now > c->base.reformat_time) {
/* The time since the previous reformat is
* more than the configured minimum time
* between reformats so reformat the page to
* display newly fetched objects
*/
content__reformat(&c->base,
false,
c->base.available_width,
c->base.height);
}
event->type == CONTENT_MSG_DONE &&
box != NULL &&
!(box->flags & REPLACE_DIM) &&
(c->base.status == CONTENT_STATUS_READY ||
c->base.status == CONTENT_STATUS_DONE)) {
/* 1) the configuration option to reflow pages while
* objects are fetched is set
* 2) an object is newly fetched & converted,
* 3) the box's dimensions need to change due to being replaced
* 4) the object's parent HTML is ready for reformat,
*/
uint64_t ms_now;
nsu_getmonotonic_ms(&ms_now);
if (ms_now > c->base.reformat_time) {
/* The time since the previous reformat is
* more than the configured minimum time
* between reformats so reformat the page to
* display newly fetched objects
*/
content__reformat(&c->base,
false,
c->base.available_width,
c->base.height);
}
}
return NSERROR_OK;
@ -676,7 +677,7 @@ nserror html_object_free_objects(html_content *html)
/* exported interface documented in render/html_internal.h */
/* exported interface documented in html/html_internal.h */
bool html_fetch_object(html_content *c, nsurl *url, struct box *box,
content_type permitted_types,
int available_width, int available_height,
@ -710,7 +711,7 @@ bool html_fetch_object(html_content *c, nsurl *url, struct box *box,
content_get_url(&c->base), NULL,
html_object_callback, object, &child,
object->permitted_types, &object->content);
if (error != NSERROR_OK) {
if (error != NSERROR_OK) {
free(object);
return error != NSERROR_NOMEM;
}

View File

@ -5,7 +5,7 @@
* Copyright 2005-2006 Adrian Lees <adrianl@users.sourceforge.net>
* Copyright 2006 Rob Kendrick <rjek@netsurf-browser.org>
* Copyright 2008 Michael Drake <tlsa@netsurf-browser.org>
* Copyright 2009 Paul Blokus <paul_pl@users.sourceforge.net>
* Copyright 2009 Paul Blokus <paul_pl@users.sourceforge.net>
*
* This file is part of NetSurf, http://www.netsurf-browser.org/
*
@ -53,12 +53,12 @@
#include "desktop/textarea.h"
#include "desktop/gui_internal.h"
#include "render/box.h"
#include "render/font.h"
#include "render/form_internal.h"
#include "render/html_internal.h"
#include "render/layout.h"
#include "render/search.h"
#include "html/box.h"
#include "html/font.h"
#include "html/form_internal.h"
#include "html/html_internal.h"
#include "html/layout.h"
#include "html/search.h"
bool html_redraw_debug = false;
@ -150,7 +150,7 @@ static struct box *html_redraw_find_bg_box(struct box *box)
* \return true iff successful and redraw should proceed
*/
bool
static bool
text_redraw(const char *utf8_text,
size_t utf8_len,
size_t offset,
@ -401,7 +401,7 @@ static bool html_redraw_checkbox(int x, int y, int width, int height,
return false;
}
/* light line across bottom */
/* light line across bottom */
rect.x0 = x;
rect.y0 = y + height;
res = ctx->plot->line(ctx, plot_style_stroke_lightwbasec, &rect);
@ -661,7 +661,7 @@ static bool html_redraw_background(int x, int y, struct box *box, float scale,
css_computed_background_position(background->style,
&hpos, &hunit, &vpos, &vunit);
if (hunit == CSS_UNIT_PCT) {
x += (width -
x += (width -
content_get_width(background->background)) *
scale * FIXTOFLT(hpos) / 100.;
} else {
@ -670,7 +670,7 @@ static bool html_redraw_background(int x, int y, struct box *box, float scale,
}
if (vunit == CSS_UNIT_PCT) {
y += (height -
y += (height -
content_get_height(background->background)) *
scale * FIXTOFLT(vpos) / 100.;
} else {
@ -724,10 +724,10 @@ static bool html_redraw_background(int x, int y, struct box *box, float scale,
/* if the background content is opaque there
* is no need to plot underneath it.
*/
if ((r.x0 >= r.x1) ||
if ((r.x0 >= r.x1) ||
(r.y0 >= r.y1) ||
(nscss_color_is_transparent(bgcol) == false) ||
((clip_box->background != NULL) &&
((clip_box->background != NULL) &&
content_get_opaque(clip_box->background)))
continue;
}
@ -843,7 +843,7 @@ static bool html_redraw_inline_background(int x, int y, struct box *box,
case CSS_BACKGROUND_REPEAT_REPEAT:
repeat_x = repeat_y = true;
/* optimisation: only plot the colour if
* bitmap is not opaque
* bitmap is not opaque
*/
plot_colour = !content_get_opaque(box->background);
break;
@ -868,10 +868,10 @@ static bool html_redraw_inline_background(int x, int y, struct box *box,
&hpos, &hunit, &vpos, &vunit);
if (hunit == CSS_UNIT_PCT) {
x += (b.x1 - b.x0 -
content_get_width(box->background) *
content_get_width(box->background) *
scale) * FIXTOFLT(hpos) / 100.;
if (!repeat_x && ((hpos < 2 && !first) ||
if (!repeat_x && ((hpos < 2 && !first) ||
(hpos > 98 && !last))){
plot_content = false;
}
@ -1082,7 +1082,7 @@ static bool html_redraw_text_decoration(struct box *box,
if (!box->inline_end)
return true;
for (i = 0; i != NOF_ELEMENTS(decoration); i++)
if (css_computed_text_decoration(box->style) &
if (css_computed_text_decoration(box->style) &
decoration[i])
if (!html_redraw_text_decoration_inline(box,
x_parent, y_parent, scale,
@ -1090,7 +1090,7 @@ static bool html_redraw_text_decoration(struct box *box,
return false;
} else {
for (i = 0; i != NOF_ELEMENTS(decoration); i++)
if (css_computed_text_decoration(box->style) &
if (css_computed_text_decoration(box->style) &
decoration[i])
if (!html_redraw_text_decoration_block(box,
x_parent + box->x,
@ -1365,7 +1365,7 @@ bool html_redraw_box(const html_content *html, struct box *box,
}
/* if visibility is hidden render children only */
if (box->style && css_computed_visibility(box->style) ==
if (box->style && css_computed_visibility(box->style) ==
CSS_VISIBILITY_HIDDEN) {
if ((ctx->plot->group_start) &&
(ctx->plot->group_start(ctx, "hidden box") != NSERROR_OK))
@ -1855,11 +1855,11 @@ bool html_redraw_box(const html_content *html, struct box *box,
if (!box_handle_scrollbars((struct content *)html,
box, has_x_scroll, has_y_scroll))
return false;
if (box->scroll_x != NULL)
scrollbar_redraw(box->scroll_x,
x_parent + box->x,
y_parent + box->y + box->padding[TOP] +
y_parent + box->y + box->padding[TOP] +
box->height + box->padding[BOTTOM] -
SCROLLBAR_WIDTH, clip, scale, ctx);
if (box->scroll_y != NULL)
@ -1919,16 +1919,16 @@ bool html_redraw(struct content *c, struct content_redraw_data *data,
select_only = form_clip_inside_select_menu(control,
data->scale, clip);
}
if (!select_only) {
/* clear to background colour */
result = (ctx->plot->clip(ctx, clip) == NSERROR_OK);
if (html->background_colour != NS_TRANSPARENT)
pstyle_fill_bg.fill_colour = html->background_colour;
result &= (ctx->plot->rectangle(ctx, &pstyle_fill_bg, clip) == NSERROR_OK);
result &= html_redraw_box(html, box, data->x, data->y, clip,
data->scale, pstyle_fill_bg.fill_colour, ctx);
}
@ -1937,7 +1937,7 @@ bool html_redraw(struct content *c, struct content_redraw_data *data,
int menu_x, menu_y;
box = html->visible_select_menu->box;
box_coords(box, &menu_x, &menu_y);
menu_x -= box->border[LEFT].width;
menu_y += box->height + box->border[BOTTOM].width +
box->padding[BOTTOM] + box->padding[TOP];

View File

@ -29,8 +29,8 @@
#include "netsurf/plotters.h"
#include "netsurf/css.h"
#include "render/box.h"
#include "render/html_internal.h"
#include "html/box.h"
#include "html/html_internal.h"
static plot_style_t plot_style_bdr = {

View File

@ -16,8 +16,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/** \file
* Content for text/html scripts (implementation).
/**
* \file
* implementation of content handling for text/html scripts.
*/
#include <assert.h>
@ -38,7 +39,7 @@
#include "content/fetch.h"
#include "content/hlcache.h"
#include "render/html_internal.h"
#include "html/html_internal.h"
typedef bool (script_handler_t)(struct jscontext *jscontext, const char *data, size_t size) ;
@ -52,7 +53,7 @@ static script_handler_t *select_script_handler(content_type ctype)
}
/* exported internal interface documented in render/html_internal.h */
/* exported internal interface documented in html/html_internal.h */
nserror html_script_exec(html_content *c)
{
unsigned int i;
@ -568,7 +569,7 @@ html_process_script(void *ctx, dom_node *node)
return err;
}
/* exported internal interface documented in render/html_internal.h */
/* exported internal interface documented in html/html_internal.h */
nserror html_script_free(html_content *html)
{
unsigned int i;
@ -595,7 +596,7 @@ nserror html_script_free(html_content *html)
return NSERROR_OK;
}
/* exported internal interface documented in render/html_internal.h */
/* exported internal interface documented in html/html_internal.h */
nserror html_script_invalidate_ctx(html_content *htmlc)
{
htmlc->jscontext = NULL;

View File

@ -16,8 +16,11 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Much of this shamelessly copied from utils/messages.c
/**
* \file
* Implementation of HTML image maps
*
* \todo should this should use the general hashmap instead of its own
*/
#include <assert.h>
@ -32,9 +35,9 @@
#include "content/content_protected.h"
#include "content/hlcache.h"
#include "render/box.h"
#include "render/html_internal.h"
#include "render/imagemap.h"
#include "html/box.h"
#include "html/html_internal.h"
#include "html/imagemap.h"
#define HASH_SIZE 31 /* fixed size hash table */

View File

@ -16,8 +16,13 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _NETSURF_RENDER_IMAGEMAP_H_
#define _NETSURF_RENDER_IMAGEMAP_H_
/**
* \file
* Interface to HTML imagemap
*/
#ifndef NETSURF_HTML_IMAGEMAP_H
#define NETSURF_HTML_IMAGEMAP_H
#include <dom/dom.h>

View File

@ -56,12 +56,12 @@
#include "desktop/scrollbar.h"
#include "desktop/textarea.h"
#include "render/box.h"
#include "render/font.h"
#include "render/form_internal.h"
#include "render/html_internal.h"
#include "render/layout.h"
#include "render/table.h"
#include "html/box.h"
#include "html/font.h"
#include "html/form_internal.h"
#include "html/html_internal.h"
#include "html/layout.h"
#include "html/table.h"
#define AUTO INT_MIN
@ -2188,7 +2188,7 @@ static bool layout_table(struct box *table, int available_width,
/* calculate width required by cells */
for (i = 0; i != columns; i++) {
NSLOG(layout, DEBUG,
NSLOG(layout, DEBUG,
"table %p, column %u: type %s, width %i, min %i, max %i",
table,
i,
@ -2225,7 +2225,7 @@ static bool layout_table(struct box *table, int available_width,
required_width += (columns + 1 - positioned_columns) *
border_spacing_h;
NSLOG(layout, DEBUG,
NSLOG(layout, DEBUG,
"width %i, min %i, max %i, auto %i, required %i", table_width,
table->min_width, table->max_width, auto_width, required_width);
@ -3124,7 +3124,7 @@ layout_line(struct box *first,
const struct gui_layout_table *font_func = content->font_func;
plot_font_style_t fstyle;
NSLOG(layout, DEBUG,
NSLOG(layout, DEBUG,
"first %p, first->text '%.*s', width %i, y %i, cx %i, cy %i",
first,
(int)first->length,
@ -3653,7 +3653,7 @@ layout_line(struct box *first,
used_height = 0;
if (left) {
NSLOG(layout, DEBUG,
NSLOG(layout, DEBUG,
"cy %i, left->y %i, left->height %i",
cy,
left->y,
@ -3848,7 +3848,7 @@ static bool layout_inline_container(struct box *inline_container, int width,
assert(inline_container->type == BOX_INLINE_CONTAINER);
NSLOG(layout, DEBUG,
NSLOG(layout, DEBUG,
"inline_container %p, width %i, cont %p, cx %i, cy %i",
inline_container,
width,
@ -5381,7 +5381,7 @@ static void layout_calculate_descendant_bboxes(
}
/* exported function documented in render/layout.h */
/* exported function documented in html/layout.h */
bool layout_document(html_content *content, int width, int height)
{
bool ret;

View File

@ -18,15 +18,15 @@
/**
* \file
* HTML layout (interface).
* interface to HTML layout.
*
* The main interface to the layout code is layout_document(), which takes a
* normalized box tree and assigns coordinates and dimensions to the boxes, and
* also adds boxes to the tree (eg. when formatting lines of text).
*/
#ifndef _NETSURF_RENDER_LAYOUT_H_
#define _NETSURF_RENDER_LAYOUT_H_
#ifndef NETSURF_HTML_LAYOUT_H
#define NETSURF_HTML_LAYOUT_H
struct box;
struct html_content;

View File

@ -17,7 +17,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* \file
* Free text search (core)
@ -38,11 +38,11 @@
#include "netsurf/misc.h"
#include "desktop/gui_internal.h"
#include "render/box.h"
#include "render/html.h"
#include "render/html_internal.h"
#include "render/search.h"
#include "render/textplain.h"
#include "text/textplain.h"
#include "html/box.h"
#include "html/html.h"
#include "html/html_internal.h"
#include "html/search.h"
#ifndef NOF_ELEMENTS
#define NOF_ELEMENTS(array) (sizeof(array)/sizeof(*(array)))
@ -128,7 +128,7 @@ static void free_matches(struct search_context *context)
{
struct list_entry *a;
struct list_entry *b;
a = context->found->next;
/* empty the list before clearing and deleting the
@ -179,11 +179,11 @@ static const char *find_pattern(const char *string, int s_len,
if (p < pattern || *p == '*') {
char ch;
/* skip any further asterisks; one is the same as many
/* skip any further asterisks; one is the same as many
*/
do p++; while (p < ep && *p == '*');
/* if we're at the end of the pattern, yes, it matches
/* if we're at the end of the pattern, yes, it matches
*/
if (p >= ep) break;
@ -193,7 +193,7 @@ static const char *find_pattern(const char *string, int s_len,
ch = *p;
if (ch != '#') {
/* scan forwards until we find a match for
/* scan forwards until we find a match for
this char */
if (!case_sens) ch = toupper(ch);
while (s < es) {
@ -206,7 +206,7 @@ static const char *find_pattern(const char *string, int s_len,
}
if (s < es) {
/* remember where we are in case the match
/* remember where we are in case the match
fails; we may then resume */
if (top < (int)NOF_ELEMENTS(context)) {
context[top].ss = ss;

View File

@ -16,8 +16,13 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _NETSURF_RENDER_SEARCH_H_
#define _NETSURF_RENDER_SEARCH_H_
/**
* \file
* Interface to HTML searching.
*/
#ifndef NETSURF_HTML_SEARCH_H
#define NETSURF_HTML_SEARCH_H
#include <ctype.h>
#include <string.h>

View File

@ -17,8 +17,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/** \file
* Table processing and layout (implementation).
/**
* \file
* implementation of HTML table processing and layout.
*/
#include <assert.h>
@ -28,8 +29,8 @@
#include "utils/talloc.h"
#include "css/utils.h"
#include "render/box.h"
#include "render/table.h"
#include "html/box.h"
#include "html/table.h"
/* Define to enable verbose table debug */
#undef TABLE_DEBUG
@ -130,9 +131,9 @@ bool table_calculate_column_types(
continue;
i = cell->start_column;
if (css_computed_position(cell->style) !=
if (css_computed_position(cell->style) !=
CSS_POSITION_ABSOLUTE &&
css_computed_position(cell->style) !=
css_computed_position(cell->style) !=
CSS_POSITION_FIXED) {
col[i].positioned = false;
}
@ -181,7 +182,7 @@ bool table_calculate_column_types(
for (j = i; j < i + cell->columns; j++) {
col[j].positioned = false;
}
/* count column types in spanned cells */
for (j = 0; j != cell->columns; j++) {
if (col[i + j].type == COLUMN_WIDTH_FIXED) {
@ -208,7 +209,7 @@ bool table_calculate_column_types(
fixed_columns + unknown_columns ==
cell->columns) {
int width = (FIXTOFLT(nscss_len2px(len_ctx, value, unit,
cell->style)) - fixed_width) /
cell->style)) - fixed_width) /
unknown_columns;
if (width < 0)
width = 0;
@ -274,48 +275,48 @@ void table_used_border_for_cell(
assert(cell->type == BOX_TABLE_CELL);
if (css_computed_border_collapse(cell->style) ==
if (css_computed_border_collapse(cell->style) ==
CSS_BORDER_COLLAPSE_SEPARATE) {
css_fixed width = 0;
css_unit unit = CSS_UNIT_PX;
/* Left border */
cell->border[LEFT].style =
cell->border[LEFT].style =
css_computed_border_left_style(cell->style);
css_computed_border_left_color(cell->style,
&cell->border[LEFT].c);
css_computed_border_left_width(cell->style, &width, &unit);
cell->border[LEFT].width =
cell->border[LEFT].width =
FIXTOINT(nscss_len2px(len_ctx,
width, unit, cell->style));
/* Top border */
cell->border[TOP].style =
cell->border[TOP].style =
css_computed_border_top_style(cell->style);
css_computed_border_top_color(cell->style,
&cell->border[TOP].c);
css_computed_border_top_width(cell->style, &width, &unit);
cell->border[TOP].width =
cell->border[TOP].width =
FIXTOINT(nscss_len2px(len_ctx,
width, unit, cell->style));
/* Right border */
cell->border[RIGHT].style =
cell->border[RIGHT].style =
css_computed_border_right_style(cell->style);
css_computed_border_right_color(cell->style,
&cell->border[RIGHT].c);
css_computed_border_right_width(cell->style, &width, &unit);
cell->border[RIGHT].width =
cell->border[RIGHT].width =
FIXTOINT(nscss_len2px(len_ctx,
width, unit, cell->style));
/* Bottom border */
cell->border[BOTTOM].style =
cell->border[BOTTOM].style =
css_computed_border_bottom_style(cell->style);
css_computed_border_bottom_color(cell->style,
&cell->border[BOTTOM].c);
css_computed_border_bottom_width(cell->style, &width, &unit);
cell->border[BOTTOM].width =
cell->border[BOTTOM].width =
FIXTOINT(nscss_len2px(len_ctx,
width, unit, cell->style));
} else {
@ -332,11 +333,11 @@ void table_used_border_for_cell(
table_used_bottom_border_for_cell(len_ctx, cell);
}
/* Finally, ensure that any borders configured as
/* Finally, ensure that any borders configured as
* hidden or none have zero width. (c.f. layout_find_dimensions) */
for (side = 0; side != 4; side++) {
if (cell->border[side].style == CSS_BORDER_STYLE_HIDDEN ||
cell->border[side].style ==
cell->border[side].style ==
CSS_BORDER_STYLE_NONE)
cell->border[side].width = 0;
}
@ -378,10 +379,10 @@ void table_used_left_border_for_cell(
/* Spanned from a previous row in current row group */
for (row = cell->parent; row != NULL; row = row->prev) {
for (prev = row->children; prev != NULL;
for (prev = row->children; prev != NULL;
prev = prev->next) {
if (prev->start_column +
prev->columns ==
if (prev->start_column +
prev->columns ==
cell->start_column)
break;
}
@ -444,7 +445,7 @@ void table_used_left_border_for_cell(
b.width = nscss_len2px(len_ctx, b.width, b.unit, group->style);
b.unit = CSS_UNIT_PX;
b_src = BOX_TABLE_ROW_GROUP;
if (table_border_is_more_eyecatching(len_ctx,
&a, a_src, &b, b_src)) {
a = b;
@ -458,7 +459,7 @@ void table_used_left_border_for_cell(
b.width = nscss_len2px(len_ctx, b.width, b.unit, table->style);
b.unit = CSS_UNIT_PX;
b_src = BOX_TABLE;
if (table_border_is_more_eyecatching(len_ctx,
&a, a_src, &b, b_src)) {
a = b;
@ -594,7 +595,7 @@ void table_used_right_border_for_cell(
a.unit = CSS_UNIT_PX;
a_src = BOX_TABLE_CELL;
if (cell->next != NULL || cell->start_column + cell->columns !=
if (cell->next != NULL || cell->start_column + cell->columns !=
cell->parent->parent->parent->columns) {
/* Cell is not at right edge of table -- no right border */
a.style = CSS_BORDER_STYLE_NONE;
@ -638,7 +639,7 @@ void table_used_right_border_for_cell(
b.width = nscss_len2px(len_ctx, b.width, b.unit, group->style);
b.unit = CSS_UNIT_PX;
b_src = BOX_TABLE_ROW_GROUP;
if (table_border_is_more_eyecatching(len_ctx,
&a, a_src, &b, b_src)) {
a = b;
@ -648,12 +649,12 @@ void table_used_right_border_for_cell(
/* The table itself -- consider its right border */
b.style = css_computed_border_right_style(table->style);
b.color = css_computed_border_right_color(table->style, &b.c);
css_computed_border_right_width(table->style,
css_computed_border_right_width(table->style,
&b.width, &b.unit);
b.width = nscss_len2px(len_ctx, b.width, b.unit, table->style);
b.unit = CSS_UNIT_PX;
b_src = BOX_TABLE;
if (table_border_is_more_eyecatching(len_ctx,
&a, a_src, &b, b_src)) {
a = b;
@ -714,7 +715,7 @@ void table_used_bottom_border_for_cell(
b.width = nscss_len2px(len_ctx, b.width, b.unit, row->style);
b.unit = CSS_UNIT_PX;
b_src = BOX_TABLE_ROW;
if (table_border_is_more_eyecatching(len_ctx,
&a, a_src, &b, b_src)) {
a = b;
@ -724,12 +725,12 @@ void table_used_bottom_border_for_cell(
/* Row group -- consider its bottom border */
b.style = css_computed_border_bottom_style(group->style);
b.color = css_computed_border_bottom_color(group->style, &b.c);
css_computed_border_bottom_width(group->style,
css_computed_border_bottom_width(group->style,
&b.width, &b.unit);
b.width = nscss_len2px(len_ctx, b.width, b.unit, group->style);
b.unit = CSS_UNIT_PX;
b_src = BOX_TABLE_ROW_GROUP;
if (table_border_is_more_eyecatching(len_ctx,
&a, a_src, &b, b_src)) {
a = b;
@ -739,12 +740,12 @@ void table_used_bottom_border_for_cell(
/* The table itself -- consider its bottom border */
b.style = css_computed_border_bottom_style(table->style);
b.color = css_computed_border_bottom_color(table->style, &b.c);
css_computed_border_bottom_width(table->style,
css_computed_border_bottom_width(table->style,
&b.width, &b.unit);
b.width = nscss_len2px(len_ctx, b.width, b.unit, table->style);
b.unit = CSS_UNIT_PX;
b_src = BOX_TABLE;
if (table_border_is_more_eyecatching(len_ctx,
&a, a_src, &b, b_src)) {
a = b;
@ -790,7 +791,7 @@ bool table_border_is_more_eyecatching(
return true;
/* 3a -- wider borders beat narrow ones */
/* The widths must be absolute, which will be the case
/* The widths must be absolute, which will be the case
* if they've come from a computed style. */
assert(a->unit != CSS_UNIT_EM && a->unit != CSS_UNIT_EX);
assert(b->unit != CSS_UNIT_EM && b->unit != CSS_UNIT_EX);
@ -1027,7 +1028,7 @@ bool table_cell_top_process_row(
return false;
} else {
/* Process cells that are directly above the cell being
/* Process cells that are directly above the cell being
* considered. They may not be in this row, but in one of the
* rows above it in the case where rowspan > 1. */
struct box *c;
@ -1077,4 +1078,3 @@ bool table_cell_top_process_row(
return true;
}

View File

@ -17,12 +17,13 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/** \file
* Table processing and layout (interface).
/**
* \file
* Interface to HTML table processing and layout.
*/
#ifndef _NETSURF_RENDER_TABLE_H_
#define _NETSURF_RENDER_TABLE_H_
#ifndef NETSURF_HTML_TABLE_H
#define NETSURF_HTML_TABLE_H
#include <stdbool.h>

View File

@ -14,7 +14,7 @@ prologue Document()
#include "utils/libdom.h"
#include "utils/utils.h"
#include "content/hlcache.h"
#include "render/html_internal.h"
#include "html/html_internal.h"
#include "content/urldb.h"
#define HANDLER_MAGIC MAGIC(HANDLER_MAP)

View File

@ -15,8 +15,8 @@ class Window {
#include "utils/nsurl.h"
#include "netsurf/browser_window.h"
#include "content/hlcache.h"
#include "render/html.h"
#include "render/html_internal.h"
#include "html/html.h"
#include "html/html_internal.h"
%};
};

View File

@ -0,0 +1,3 @@
# text content handler sources
S_TEXT := textplain.c

View File

@ -52,10 +52,8 @@
#include "desktop/selection.h"
#include "desktop/gui_internal.h"
#include "render/search.h"
#include "render/textplain.h"
#include "render/html.h"
#include "render/search.h"
#include "html/search.h"
#include "text/textplain.h"
struct textplain_line {
size_t start;
@ -811,6 +809,223 @@ static void textplain_search(struct content *c, void *gui_data,
}
/**
* Redraw a text string with highlighting
* (for selection/search)
*
* \param utf8_text pointer to UTF-8 text string
* \param utf8_len length of string, in bytes
* \param offset byte offset within textual representation
* \param x x ordinate at which to plot text
* \param y y ordinate at which to plot text
* \param clip pointer to current clip rectangle
* \param height height of text string
* \param scale current display scale (1.0 = 100%)
* \param text Content being redrawn.
* \param sel Selection context
* \param search Search context
* \param ctx current redraw context
* \return true iff successful and redraw should proceed
*/
static bool
text_draw(const char *utf8_text,
size_t utf8_len,
size_t offset,
int x,
int y,
const struct rect *clip,
int height,
float scale,
textplain_content *text,
const struct selection *sel,
struct search_context *search,
const struct redraw_context *ctx)
{
bool highlighted = false;
plot_font_style_t plot_fstyle;
nserror res;
/* Need scaled text size to pass to plotters */
plot_fstyle = textplain_style;
plot_fstyle.size *= scale;
/* is this box part of a selection? */
if (ctx->interactive == true) {
unsigned len = utf8_len;
unsigned start_idx;
unsigned end_idx;
/* first try the browser window's current selection */
if (selection_defined(sel) &&
selection_highlighted(sel,
offset,
offset + len,
&start_idx,
&end_idx)) {
highlighted = true;
}
/* what about the current search operation, if any? */
if (!highlighted &&
(search != NULL) &&
search_term_highlighted((struct content *)text,
offset,
offset + len,
&start_idx,
&end_idx,
search)) {
highlighted = true;
}
/* \todo make search terms visible within selected text */
if (highlighted) {
struct rect r;
unsigned endtxt_idx = end_idx;
bool clip_changed = false;
bool text_visible = true;
int startx, endx;
plot_style_t pstyle_fill_hback = *plot_style_fill_white;
plot_font_style_t fstyle_hback = plot_fstyle;
if (end_idx > utf8_len) {
/* adjust for trailing space, not present in
* utf8_text
*/
assert(end_idx == utf8_len + 1);
endtxt_idx = utf8_len;
}
res = guit->layout->width(&textplain_style,
utf8_text,
start_idx,
&startx);
if (res != NSERROR_OK) {
startx = 0;
}
res = guit->layout->width(&textplain_style,
utf8_text,
endtxt_idx,
&endx);
if (res != NSERROR_OK) {
endx = 0;
}
if (scale != 1.0) {
startx *= scale;
endx *= scale;
}
/* draw any text preceding highlighted portion */
if (start_idx > 0) {
res = ctx->plot->text(ctx,
&plot_fstyle,
x,
y + (int)(height * 0.75 * scale),
utf8_text,
start_idx);
if (res != NSERROR_OK) {
return false;
}
}
pstyle_fill_hback.fill_colour = textplain_style.foreground;
/* highlighted portion */
r.x0 = x + startx;
r.y0 = y;
r.x1 = x + endx;
r.y1 = y + height * scale;
res = ctx->plot->rectangle(ctx, &pstyle_fill_hback, &r);
if (res != NSERROR_OK) {
return false;
}
if (start_idx > 0) {
int px0 = max(x + startx, clip->x0);
int px1 = min(x + endx, clip->x1);
if (px0 < px1) {
r.x0 = px0;
r.y0 = clip->y0;
r.x1 = px1;
r.y1 = clip->y1;
res = ctx->plot->clip(ctx, &r);
if (res != NSERROR_OK) {
return false;
}
clip_changed = true;
} else {
text_visible = false;
}
}
fstyle_hback.background =
pstyle_fill_hback.fill_colour;
fstyle_hback.foreground = colour_to_bw_furthest(
pstyle_fill_hback.fill_colour);
if (text_visible &&
(ctx->plot->text(ctx,
&fstyle_hback,
x,
y + (int)(height * 0.75 * scale),
utf8_text,
endtxt_idx) != NSERROR_OK)) {
return false;
}
/* draw any text succeeding highlighted portion */
if (endtxt_idx < utf8_len) {
int px0 = max(x + endx, clip->x0);
if (px0 < clip->x1) {
r.x0 = px0;
r.y0 = clip->y0;
r.x1 = clip->x1;
r.y1 = clip->y1;
res = ctx->plot->clip(ctx, &r);
if (res != NSERROR_OK) {
return false;
}
clip_changed = true;
res = ctx->plot->text(ctx,
&plot_fstyle,
x,
y + (int)(height * 0.75 * scale),
utf8_text,
utf8_len);
if (res != NSERROR_OK) {
return false;
}
}
}
if (clip_changed &&
(ctx->plot->clip(ctx, clip) != NSERROR_OK)) {
return false;
}
}
}
if (!highlighted) {
res = ctx->plot->text(ctx,
&plot_fstyle,
x,
y + (int) (height * 0.75 * scale),
utf8_text,
utf8_len);
if (res != NSERROR_OK) {
return false;
}
}
return true;
}
/**
* Draw a CONTENT_TEXTPLAIN using the current set of plotters (plot).
*
@ -892,17 +1107,27 @@ textplain_redraw(struct content *c,
int ntx;
nserror res;
while (next_offset < length && text_d[next_offset] != '\t')
next_offset = utf8_next(text_d, length, next_offset);
while ((next_offset < length) &&
(text_d[next_offset] != '\t')) {
next_offset = utf8_next(text_d,
length,
next_offset);
}
if (!text_redraw(text_d + offset, next_offset - offset,
line[lineno].start + offset, 0,
&textplain_style,
tx, y + (lineno * scaled_line_height),
clip, line_height, data->scale, false,
(struct content *)text, &text->sel,
text->search, ctx))
if (!text_draw(text_d + offset,
next_offset - offset,
line[lineno].start + offset,
tx,
y + (lineno * scaled_line_height),
clip,
line_height,
data->scale,
text,
&text->sel,
text->search,
ctx)) {
return false;
}
if (next_offset >= length)
break;
@ -1087,7 +1312,7 @@ static const content_handler textplain_content_handler = {
};
/* exported interface documented in render/textplain.h */
/* exported interface documented in html/textplain.h */
nserror textplain_init(void)
{
lwc_error lerror;
@ -1110,7 +1335,7 @@ nserror textplain_init(void)
}
/* exported interface documented in render/textplain.h */
/* exported interface documented in html/textplain.h */
unsigned long textplain_line_count(struct content *c)
{
textplain_content *text = (textplain_content *) c;
@ -1121,7 +1346,7 @@ unsigned long textplain_line_count(struct content *c)
}
/* exported interface documented in render/textplain.h */
/* exported interface documented in html/textplain.h */
size_t textplain_size(struct content *c)
{
textplain_content *text = (textplain_content *) c;
@ -1132,7 +1357,7 @@ size_t textplain_size(struct content *c)
}
/* exported interface documented in render/textplain.h */
/* exported interface documented in html/textplain.h */
size_t textplain_offset_from_coords(struct content *c, int x, int y, int dir)
{
textplain_content *textc = (textplain_content *) c;
@ -1207,7 +1432,7 @@ size_t textplain_offset_from_coords(struct content *c, int x, int y, int dir)
}
/* exported interface documented in render/textplain.h */
/* exported interface documented in html/textplain.h */
void
textplain_coords_from_range(struct content *c,
unsigned start,
@ -1261,7 +1486,7 @@ textplain_coords_from_range(struct content *c,
}
/* exported interface documented in render/textplain.h */
/* exported interface documented in html/textplain.h */
char *
textplain_get_line(struct content *c,
unsigned lineno,
@ -1283,7 +1508,7 @@ textplain_get_line(struct content *c,
}
/* exported interface documented in render/textplain.h */
/* exported interface documented in html/textplain.h */
int textplain_find_line(struct content *c, unsigned offset)
{
textplain_content *text = (textplain_content *) c;
@ -1312,7 +1537,7 @@ int textplain_find_line(struct content *c, unsigned offset)
}
/* exported interface documented in render/textplain.h */
/* exported interface documented in html/textplain.h */
char *
textplain_get_raw_data(struct content *c,
unsigned start,
@ -1339,7 +1564,7 @@ textplain_get_raw_data(struct content *c,
}
/* exported interface documented in render/textplain.h */
/* exported interface documented in html/textplain.h */
struct browser_window *textplain_get_browser_window(struct content *c)
{
textplain_content *text = (textplain_content *) c;

View File

@ -23,8 +23,8 @@
* Interface to content handler for plain text.
*/
#ifndef NETSURF_RENDER_TEXTPLAIN_H
#define NETSURF_RENDER_TEXTPLAIN_H
#ifndef NETSURF_HTML_TEXTPLAIN_H
#define NETSURF_HTML_TEXTPLAIN_H
#include <stddef.h>
#include "netsurf/mouse.h"
@ -103,7 +103,7 @@ char *textplain_get_line(struct content *c, unsigned lineno,
/**
* Find line number of byte in text
*
*
* Given a byte offset within the text, return the line number
* of the line containing that offset.
*

View File

@ -56,9 +56,9 @@
#include "content/hlcache.h"
#include "content/urldb.h"
#include "css/utils.h"
#include "render/form_internal.h"
#include "render/html.h"
#include "render/box.h"
#include "html/form_internal.h"
#include "html/html.h"
#include "html/box.h"
#include "javascript/js.h"
#include "desktop/browser_history.h"

View File

@ -33,8 +33,8 @@
#include "utils/utils.h"
#include "netsurf/content.h"
#include "content/hlcache.h"
#include "render/html.h"
#include "render/box.h"
#include "html/html.h"
#include "html/box.h"
#include "desktop/browser_private.h"
#include "desktop/frames.h"

View File

@ -41,8 +41,8 @@
#include "image/image.h"
#include "image/image_cache.h"
#include "javascript/js.h"
#include "render/html.h"
#include "render/textplain.h"
#include "html/html.h"
#include "text/textplain.h"
#include "netsurf/browser_window.h"
#include "desktop/system_colour.h"

View File

@ -34,7 +34,7 @@
#include "netsurf/plotters.h"
#include "content/hlcache.h"
#include "css/utils.h"
#include "render/box.h"
#include "html/box.h"
#include "desktop/print.h"
#include "desktop/printer.h"

View File

@ -43,8 +43,8 @@
#include "netsurf/content.h"
#include "content/hlcache.h"
#include "css/css.h"
#include "render/box.h"
#include "render/html.h"
#include "html/box.h"
#include "html/html.h"
#include "netsurf/misc.h"
#include "desktop/gui_internal.h"

View File

@ -32,8 +32,8 @@
#include "utils/utf8.h"
#include "utils/utils.h"
#include "netsurf/content.h"
#include "render/box.h"
#include "render/html.h"
#include "html/box.h"
#include "html/html.h"
#include "netsurf/utf8.h"
#include "desktop/gui_internal.h"

View File

@ -32,10 +32,10 @@
#include "utils/utf8.h"
#include "utils/utils.h"
#include "netsurf/form.h"
#include "render/box.h"
#include "render/html_internal.h"
#include "render/font.h"
#include "render/textplain.h"
#include "html/box.h"
#include "html/html_internal.h"
#include "html/font.h"
#include "text/textplain.h"
#include "netsurf/mouse.h"
#include "desktop/browser_private.h"

View File

@ -37,9 +37,9 @@
#include "netsurf/form.h"
#include "netsurf/window.h"
#include "netsurf/keypress.h"
#include "render/box.h"
#include "render/html_internal.h"
#include "render/layout.h"
#include "html/box.h"
#include "html/html_internal.h"
#include "html/layout.h"
#include "desktop/browser_private.h"
#include "desktop/textinput.h"

View File

@ -33,7 +33,7 @@
#include "utils/messages.h"
#include "netsurf/plotters.h"
#include "netsurf/content.h"
#include "render/box.h"
#include "html/box.h"
#include "content/llcache.h"
#include "content/content_protected.h"

View File

@ -1,10 +0,0 @@
# Render sources
S_RENDER := box.c box_construct.c box_normalise.c box_textarea.c \
font.c form.c imagemap.c layout.c search.c table.c textplain.c \
html.c html_css.c html_css_fetcher.c html_script.c \
html_interaction.c html_redraw.c html_redraw_border.c \
html_forms.c html_object.c
S_RENDER := $(addprefix render/,$(S_RENDER))