typedef struct text_fragment_Tag text_fragment;
typedef struct xref_Tag xref;
typedef struct xref_dest_Tag xref_dest;
+typedef struct rect_Tag rect;
+typedef struct outline_element_Tag outline_element;
/*
* This data structure represents the overall document, in the form
int paper_width, paper_height;
font_list *fonts;
page_data *pages;
+ outline_element *outline_elements;
+ int n_outline_elements;
};
/*
*/
struct para_data_Tag {
+ para_data *next;
/*
* Data about the fonts used in this paragraph. Indices are the
* FONT_* constants defined above.
*/
line_data *first; /* first line in paragraph */
line_data *last; /* last line in paragraph */
+ /*
+ * Some paragraphs have associated graphics; currently this is
+ * nothing more complex than a single black rectangle.
+ */
+ enum {
+ RECT_NONE, RECT_CHAPTER_UNDERLINE, RECT_RULE
+ } rect_type;
+ /*
+ * We left- and right-justify in special circumstances.
+ */
+ enum {
+ JUST, LEFT, RIGHT
+ } justification;
+ /*
+ * For constructing the page outline.
+ */
+ int outline_level; /* 0=title 1=C 2=H 3=S 4=S2... */
+ wchar_t *outline_title;
+ /*
+ * For adding the page number of a contents entry afterwards.
+ */
+ paragraph *contents_entry;
};
struct line_data_Tag {
word *end;
int xpos;
int hshortfall, nspaces; /* for justifying paragraphs */
+ int real_shortfall;
/*
* Auxiliary text: a section number in a margin, or a list item
* bullet or number. Also mention where to display this text
/*
* These fields are used in the page breaking algorithm.
*/
- int bestcost;
- int vshortfall, text, space;
- line_data *page_last; /* last line on a page starting here */
+ int *bestcost;
+ int *vshortfall, *text, *space;
+ line_data **page_last; /* last line on a page starting here */
/*
* After page breaking, we can assign an actual y-coordinate on
* the page to each line. Also we store a pointer back to the
xref *first_xref;
xref *last_xref;
/*
+ * Rectangles to be drawn. (These are currently only used for
+ * underlining chapter titles and drawing horizontal rules.)
+ */
+ rect *first_rect;
+ rect *last_rect;
+ /*
+ * The page number, as a string.
+ */
+ wchar_t *number;
+ /*
* This spare pointer field is for use by the client backends.
*/
void *spare;
font_encoding *fe;
int fontsize;
char *text;
+ int width;
};
struct xref_dest_Tag {
xref_dest dest;
};
+struct rect_Tag {
+ rect *next;
+ int x, y, w, h;
+};
+
+struct outline_element_Tag {
+ int level; /* 0=title 1=C 2=H 3=S 4=S2... */
+ para_data *pdata;
+};
+
/*
* Functions and data exported from psdata.c.
*/