summaryrefslogtreecommitdiff
path: root/content/content.h
blob: ed93e7c241e443f74a0beee15084003da00082de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/**
 * $Id: content.h,v 1.1 2003/02/09 12:58:14 bursa Exp $
 */

#ifndef _NETSURF_DESKTOP_CONTENT_H_
#define _NETSURF_DESKTOP_CONTENT_H_

#include "libxml/HTMLparser.h"
#include "netsurf/content/cache.h"
#include "netsurf/render/css.h"
#include "netsurf/render/box.h"
#include "netsurf/riscos/font.h"


/**
 * A struct content corresponds to a single url.
 *
 * It is in one of the following states:
 *   CONTENT_FETCHING - the data is being fetched and/or converted
 *                      for use by the browser
 *   CONTENT_READY - the content has been processed and is ready
 *                      to display
 *
 * The converted data is stored in the cache, not the source data.
 * Users of the structure are counted in use_count; when use_count = 0
 * the content may be removed from the memory cache.
 */

typedef enum {CONTENT_HTML, CONTENT_TEXTPLAIN, CONTENT_CSS,
	CONTENT_PNG, CONTENT_OTHER} content_type;

struct box_position
{
  struct box* box;
  int actual_box_x;
  int actual_box_y;
  int plot_index;
  int pixel_offset;
  int char_offset;
};

struct content
{
  char *url;
  content_type type;
  enum {CONTENT_LOADING, CONTENT_READY} status;

  union
  {
    struct
    {
      htmlParserCtxt* parser;
      xmlDoc* document;
      xmlNode* markup;
      struct box* layout;
      struct css_stylesheet* stylesheet;
      struct css_style* style;
      struct {
        struct box_position start;
        struct box_position end;
        enum {alter_UNKNOWN, alter_START, alter_END} altering;
        int selected; /* 0 = unselected, 1 = selected */
      } text_selection;
      struct font_set* fonts;
      struct page_elements elements;
    } html;

    struct
    {
      struct css_stylesheet * stylesheet;
    } css;

    struct
    {
      unsigned long width, height;
      char * sprite;
    } image;
  
  } data;

  struct cache_entry *cache;
  unsigned long size;
  char *title;
};


content_type content_lookup(const char *mime_type);
struct content * content_create(content_type type, char *url);
void content_process_data(struct content *c, char *data, unsigned long size);
int content_convert(struct content *c, unsigned long width, unsigned long height);
void content_revive(struct content *c, unsigned long width, unsigned long height);
void content_reformat(struct content *c, unsigned long width, unsigned long height);
void content_destroy(struct content *c);

#endif