- if (EV_IS_DOCUMENT_LINKS (document))
- flags |= EV_PAGE_DATA_INCLUDE_LINKS;
- if (EV_IS_DOCUMENT_IMAGES (document))
- flags |= EV_PAGE_DATA_INCLUDE_IMAGES;
- if (EV_IS_DOCUMENT_FORMS (document))
- flags |= EV_PAGE_DATA_INCLUDE_FORMS;
- if (EV_IS_DOCUMENT_ANNOTATIONS (document))
- flags |= EV_PAGE_DATA_INCLUDE_ANNOTS;
- if (EV_IS_SELECTION (document))
- flags |= EV_PAGE_DATA_INCLUDE_TEXT;
+ if (data->flags == cache->flags && !data->dirty)
+ return cache->flags;
+
+ /* Flags changed or data is dirty */
+ if (cache->flags & EV_PAGE_DATA_INCLUDE_LINKS) {
+ flags = (data->link_mapping) ?
+ flags & ~EV_PAGE_DATA_INCLUDE_LINKS :
+ flags | EV_PAGE_DATA_INCLUDE_LINKS;
+ }
+
+ if (cache->flags & EV_PAGE_DATA_INCLUDE_IMAGES) {
+ flags = (data->image_mapping) ?
+ flags & ~EV_PAGE_DATA_INCLUDE_IMAGES :
+ flags | EV_PAGE_DATA_INCLUDE_IMAGES;
+ }
+
+ if (cache->flags & EV_PAGE_DATA_INCLUDE_FORMS) {
+ flags = (data->form_field_mapping) ?
+ flags & ~EV_PAGE_DATA_INCLUDE_FORMS :
+ flags | EV_PAGE_DATA_INCLUDE_FORMS;
+ }
+
+ if (cache->flags & EV_PAGE_DATA_INCLUDE_ANNOTS) {
+ flags = (data->annot_mapping) ?
+ flags & ~EV_PAGE_DATA_INCLUDE_ANNOTS :
+ flags | EV_PAGE_DATA_INCLUDE_ANNOTS;
+ }
+
+ if (cache->flags & EV_PAGE_DATA_INCLUDE_TEXT_MAPPING) {
+ flags = (data->text_mapping) ?
+ flags & ~EV_PAGE_DATA_INCLUDE_TEXT_MAPPING :
+ flags | EV_PAGE_DATA_INCLUDE_TEXT_MAPPING;
+ }
+
+ if (cache->flags & EV_PAGE_DATA_INCLUDE_TEXT) {
+ flags = (data->text) ?
+ flags & ~EV_PAGE_DATA_INCLUDE_TEXT :
+ flags | EV_PAGE_DATA_INCLUDE_TEXT;
+ }
+
+ if (cache->flags & EV_PAGE_DATA_INCLUDE_TEXT_LAYOUT) {
+ flags = (data->text_layout_length > 0) ?
+ flags & ~EV_PAGE_DATA_INCLUDE_TEXT_LAYOUT :
+ flags | EV_PAGE_DATA_INCLUDE_TEXT_LAYOUT;
+ }