void pdf_loadannots(pdf_comment **cp, pdf_link **lp, pdf_xref *xref, fz_obj *annots) { pdf_comment *comment; pdf_link *link; fz_obj *subtype; fz_obj *obj; int i; comment = nil; link = nil; pdf_logpage("load annotations {\n"); for (i = 0; i < fz_arraylen(annots); i++) { obj = fz_arrayget(annots, i); subtype = fz_dictgets(obj, "Subtype"); if (fz_isname(subtype) && !strcmp(fz_toname(subtype), "Link")) { pdf_link *temp = pdf_loadlink(xref, obj); if (temp) { temp->next = link; link = temp; } } } pdf_logpage("}\n"); *cp = comment; *lp = link; }
static fz_error * loadoutline(pdf_outline **nodep, pdf_xref *xref, fz_obj *dict) { fz_error *error; pdf_outline *node; fz_obj *obj; node = fz_malloc(sizeof(pdf_outline)); node->title = "<unknown>"; node->link = nil; node->child = nil; node->next = nil; pdf_logpage("load outline {\n"); obj = fz_dictgets(dict, "Title"); if (obj) { error = pdf_toutf8(&node->title, obj); if (error) return error; pdf_logpage("title %s\n", node->title); } if (fz_dictgets(dict, "Dest") || fz_dictgets(dict, "A")) { error = pdf_loadlink(&node->link, xref, dict); if (error) return error; } obj = fz_dictgets(dict, "First"); if (obj) { error = pdf_resolve(&obj, xref); if (error) return error; error = loadoutline(&node->child, xref, obj); fz_dropobj(obj); if (error) return error; } pdf_logpage("}\n"); obj = fz_dictgets(dict, "Next"); if (obj) { error = pdf_resolve(&obj, xref); if (error) return error; error = loadoutline(&node->next, xref, obj); fz_dropobj(obj); if (error) return error; } *nodep = node; return nil; }
fz_error * pdf_loadannots(pdf_comment **cp, pdf_link **lp, pdf_xref *xref, fz_obj *annots) { fz_error *error; pdf_comment *comment; pdf_link *link; fz_obj *subtype; fz_obj *obj; int i; comment = nil; link = nil; pdf_logpage("load annotations {\n"); for (i = 0; i < fz_arraylen(annots); i++) { obj = fz_arrayget(annots, i); error = pdf_resolve(&obj, xref); if (error) goto cleanup; subtype = fz_dictgets(obj, "Subtype"); if (!strcmp(fz_toname(subtype), "Link")) { pdf_link *temp = nil; error = pdf_loadlink(&temp, xref, obj); fz_dropobj(obj); if (error) goto cleanup; if (temp) { temp->next = link; link = temp; } } else { error = loadcomment(&comment, xref, obj); fz_dropobj(obj); if (error) goto cleanup; } } pdf_logpage("}\n"); *cp = comment; *lp = link; return nil; cleanup: pdf_droplink(link); return error; }
fz_error pdf_loadannots(pdf_comment **cp, pdf_link **lp, pdf_xref *xref, fz_obj *annots) { fz_error error; pdf_comment *comment; pdf_link *link; fz_obj *subtype; fz_obj *obj; int i; comment = nil; link = nil; pdf_logpage("load annotations {\n"); for (i = 0; i < fz_arraylen(annots); i++) { obj = fz_arrayget(annots, i); subtype = fz_dictgets(obj, "Subtype"); if (fz_isname(subtype) && !strcmp(fz_toname(subtype), "Link")) { pdf_link *temp = nil; error = pdf_loadlink(&temp, xref, obj); if (error) { if (link) pdf_droplink(link); return fz_rethrow(error, "cannot load annotation link"); } if (temp) { temp->next = link; link = temp; } } else { error = loadcomment(&comment, xref, obj); if (error) { if (link) pdf_droplink(link); return fz_rethrow(error, "cannot load annotation comment"); } } } pdf_logpage("}\n"); *cp = comment; *lp = link; return fz_okay; }
static pdf_outline * pdf_loadoutlineimp(pdf_xref *xref, fz_obj *dict) { pdf_outline *node; fz_obj *obj; if (fz_isnull(dict)) return nil; node = fz_malloc(sizeof(pdf_outline)); node->title = nil; node->link = nil; node->child = nil; node->next = nil; node->count = 0; pdf_logpage("load outline {\n"); obj = fz_dictgets(dict, "Title"); if (obj) { node->title = pdf_toutf8(obj); pdf_logpage("title %s\n", node->title); } obj = fz_dictgets(dict, "Count"); if (obj) { node->count = fz_toint(obj); } if (fz_dictgets(dict, "Dest") || fz_dictgets(dict, "A")) { node->link = pdf_loadlink(xref, dict); } obj = fz_dictgets(dict, "First"); if (obj) { node->child = pdf_loadoutlineimp(xref, obj); } pdf_logpage("}\n"); obj = fz_dictgets(dict, "Next"); if (obj) { node->next = pdf_loadoutlineimp(xref, obj); } return node; }
static fz_error loadoutline(pdf_outline **nodep, pdf_xref *xref, fz_obj *dict) { fz_error error; pdf_outline *node; fz_obj *obj; node = fz_malloc(sizeof(pdf_outline)); node->title = nil; node->link = nil; node->child = nil; node->next = nil; pdf_logpage("load outline {\n"); obj = fz_dictgets(dict, "Title"); if (obj) { error = pdf_toutf8(&node->title, obj); if (error) return fz_rethrow(error, "cannot convert Title to UTF-8"); pdf_logpage("title %s\n", node->title); } if (fz_dictgets(dict, "Dest") || fz_dictgets(dict, "A")) { error = pdf_loadlink(&node->link, xref, dict); if (error) return fz_rethrow(error, "cannot load link"); } obj = fz_dictgets(dict, "First"); if (obj) { error = loadoutline(&node->child, xref, obj); if (error) return fz_rethrow(error, "cannot load outline"); } pdf_logpage("}\n"); obj = fz_dictgets(dict, "Next"); if (obj) { error = loadoutline(&node->next, xref, obj); if (error) return fz_rethrow(error, "cannot load outline"); } *nodep = node; return fz_okay; }