On Wed, May 04, 2011 at 10:33:08PM +0100, John-Mark Bell wrote:
Precis:
This changeset introduces a content factory with which content handlers may be
dynamically registered.
Additionally, it inverts the inheritance model of contents such that each content handler
becomes self-contained.
schweeet!
as usual my review will be inline and I shall elide any bits I have no
comment on
Index: render/html_internal.h
===================================================================
--- /dev/null 2009-04-16 19:17:07.000000000 +0100
+++ render/html_internal.h 2011-05-04 22:29:08.000000000 +0100
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2004 James Bursa <bursa(a)users.sourceforge.net>
really? I think its 2011 and you added this file ;-) maybe its a move tho?
+
+/** Data specific to CONTENT_HTML. */
+typedef struct html_content {
+ struct content base;
+
+ void *parser_binding;
+ xmlDoc *document;
+ binding_quirks_mode quirks; /**< Quirkyness of document */
+
+ char *encoding; /**< Encoding of source, 0 if unknown. */
+ binding_encoding_source encoding_source;
+ /**< Source of encoding information. */
+
+ char *base_url; /**< Base URL (may be a copy of content->url). */
+ char *base_target; /**< Base target */
+
+ struct box *layout; /**< Box tree, or 0. */
+ colour background_colour; /**< Document background colour. */
+ const struct font_functions *font_func;
+
+ /** Number of entries in stylesheet_content. */
+ unsigned int stylesheet_count;
+ /** Stylesheets. Each may be 0. */
+ struct html_stylesheet *stylesheets;
+ /**< Style selection context */
+ css_select_ctx *select_ctx;
+
+ /** Number of entries in object_list. */
+ unsigned int num_objects;
+ /** List of objects. */
+ struct content_html_object *object_list;
+ /** Forms, in reverse order to document. */
+ struct form *forms;
+ /** Hash table of imagemaps. */
+ struct imagemap **imagemaps;
+
+ /** Browser window containing this document, or 0 if not open. */
+ struct browser_window *bw;
+
+ /** Frameset information */
+ struct content_html_frames *frameset;
+
+ /** Inline frame information */
+ struct content_html_iframe *iframe;
+
+ /** Content of type CONTENT_HTML containing this, or 0 if not an object
+ * within a page. */
+ struct html_content *page;
+ /** Box containing this, or 0 if not an object. */
+ struct box *box;
+} html_content;
gah make a decision on before or after doccomments within one struct
;-) and are we saying 0 or NULL for empty ponters?
+
+
+bool html_fetch_object(html_content *c, const char *url, struct box *box,
+ content_type permitted_types,
+ int available_width, int available_height,
+ bool background);
+
+void html_set_status(html_content *c, const char *extra);
+
+/* in render/html_redraw.c */
+bool html_redraw(struct content *c, int x, int y,
+ int width, int height, const struct rect *clip,
+ float scale, colour background_colour);
+
+/* in render/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,
+ browser_mouse_state mouse, int x, int y);
+void html_overflow_scroll_callback(void *client_data,
+ struct scroll_msg_data *scroll_data);
+
+#endif
no doccomments?
Index: image/image.c
===================================================================
--- /dev/null 2009-04-16 19:17:07.000000000 +0100
+++ image/image.c 2011-05-04 22:29:39.000000000 +0100
+
+nserror image_init(void)
+{
comment? or at least a ref to the header?
+
+void image_fini(void)
ditto
Index: content/content_factory.c
===================================================================
--- /dev/null 2009-04-16 19:17:07.000000000 +0100
+++ content/content_factory.c 2011-05-04 22:30:17.000000000 +0100
file comment?
+
+typedef struct content_handler_entry {
+ struct content_handler_entry *next;
+
+ lwc_string *mime_type;
+ const content_handler *handler;
+} content_handler_entry;
whassat for then? comment teh struct a bit? tbh i shall shut up about
comments now, its boring
+
+static content_handler_entry *content_handlers;
+
+nserror content_factory_register_handler(lwc_string *mime_type,
+ const content_handler *handler)
+{
+ content_handler_entry *e;
e? really? perhaps entry might have been a little less brief?
+
+content_type content_factory_type_from_mime_type(const char *mime_type)
+{
+ const content_handler *handler;
+ lwc_string *imime_type;
+ lwc_error lerror;
+ content_type type;
+
+ lerror = lwc_intern_string(mime_type, strlen(mime_type), &imime_type);
+ if (lerror != lwc_error_ok)
+ return CONTENT_NONE;
+
+ handler = content_lookup(imime_type);
+ if (handler == NULL) {
+ lwc_string_unref(imime_type);
+ return CONTENT_NONE;
+ }
+
+ type = handler->type(imime_type);
+
+ lwc_string_unref(imime_type);
+
+ return type;
+}
maybe? better as:
content_type type = CONTENT_NONE;
lerror = lwc_intern_string(mime_type, strlen(mime_type), &imime_type);
if (lerror != lwc_error_ok)
return CONTENT_NONE;
handler = content_lookup(imime_type);
if (handler != NULL) {
type = handler->type(imime_type);
}
lwc_string_unref(imime_type);
return type;
Changed files
94 files changed, 4614 insertions(+), 3043 deletions(-)
yikes!
Index: render/html.c
===================================================================
--- render/html.c (revision 12276)
+++ render/html.c (working copy)
+static const content_handler html_content_handler = {
+ html_create,
+ html_process_data,
+ html_convert,
+ html_reformat,
+ html_destroy,
+ html_stop,
+ html_mouse_track,
+ html_mouse_action,
+ html_redraw,
+ NULL,
+ html_open,
+ html_close,
+ html_clone,
+ NULL,
+ html_content_type,
+ true
+};
I was gonna ask about using named initialisors but i ust remembered
why now...grrrr
error:
if (error == BINDING_BADENCODING) {
- LOG(("Bad encoding: %s", html->encoding ? html->encoding :
""));
+ LOG(("Bad encoding: %s", c->encoding ? c->encoding : ""));
msg_data.error = messages_get("ParsingFail");
} else
msg_data.error = messages_get("NoMemory");
- content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
- return false;
+ content_broadcast(&c->base, CONTENT_MSG_ERROR, msg_data);
+
+ return NSERROR_NOMEM;
always no memory?
@@ -1176,26 +1270,22 @@
nserror html_convert_css_callback(hlcache_handle *css,
const hlcache_event *event, void *pw)
{
- struct content *parent = pw;
+ html_content *parent = pw;
unsigned int i;
gahhhh not blooody fortran
/**
@@ -2174,12 +2209,11 @@
*/
hlcache_handle *html_get_favicon(hlcache_handle *h)
kept the API even though the rest of favicon went?
Overall:
wonderful simplification, many #if chains removed. Loved the
consolidation of the image stuff and simplification of content
handling.
I think is ok to merge
--
Regards Vincent
http://www.kyllikki.org/