summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2011-02-03 10:40:27 +0000
committerTor Andersson <tor@ghostscript.com>2011-02-03 10:40:27 +0000
commit17921bc919273990bbf68e3ec8e8c8ef24246930 (patch)
treee3224082f6542259eea68f041c91133b69260cdc
parent8355256a0fa6eedaa02a4e7b8ba3c2dbd58fe567 (diff)
downloadmupdf-17921bc919273990bbf68e3ec8e8c8ef24246930.tar.xz
Add support for launch, named and complex link actions.
-rw-r--r--mupdf/mupdf.h3
-rw-r--r--mupdf/pdf_annot.c32
2 files changed, 25 insertions, 10 deletions
diff --git a/mupdf/mupdf.h b/mupdf/mupdf.h
index 9528221a..e53ea90a 100644
--- a/mupdf/mupdf.h
+++ b/mupdf/mupdf.h
@@ -454,6 +454,9 @@ typedef enum pdf_linkkind_e
{
PDF_LGOTO = 0,
PDF_LURI,
+ PDF_LLAUNCH,
+ PDF_LNAMED,
+ PDF_LACTION,
} pdf_linkkind;
struct pdf_link_s
diff --git a/mupdf/pdf_annot.c b/mupdf/pdf_annot.c
index 41588c28..2155a19e 100644
--- a/mupdf/pdf_annot.c
+++ b/mupdf/pdf_annot.c
@@ -85,6 +85,24 @@ pdf_loadlink(pdf_xref *xref, fz_obj *dict)
dest = fz_dictgets(action, "URI");
pdf_logpage("action uri %s\n", fz_tostrbuf(dest));
}
+ else if (fz_isname(obj) && !strcmp(fz_toname(obj), "Launch"))
+ {
+ kind = PDF_LLAUNCH;
+ dest = fz_dictgets(action, "F");
+ pdf_logpage("action %s (%d %d R)\n", fz_toname(obj), fz_tonum(dest), fz_togen(dest));
+ }
+ else if (fz_isname(obj) && !strcmp(fz_toname(obj), "Named"))
+ {
+ kind = PDF_LNAMED;
+ dest = fz_dictgets(action, "N");
+ pdf_logpage("action %s (%d %d R)\n", fz_toname(obj), fz_tonum(dest), fz_togen(dest));
+ }
+ else if (fz_isname(obj) && (!strcmp(fz_toname(obj), "GoToR")))
+ {
+ kind = PDF_LACTION;
+ dest = action;
+ pdf_logpage("action %s (%d %d R)\n", fz_toname(obj), fz_tonum(dest), fz_togen(dest));
+ }
else
{
pdf_logpage("unhandled link action, ignoring link\n");
@@ -111,7 +129,6 @@ void
pdf_loadlinks(pdf_link **linkp, pdf_xref *xref, fz_obj *annots)
{
pdf_link *link;
- fz_obj *subtype;
fz_obj *obj;
int i;
@@ -122,16 +139,11 @@ pdf_loadlinks(pdf_link **linkp, pdf_xref *xref, fz_obj *annots)
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)
{
- pdf_link *temp = pdf_loadlink(xref, obj);
- if (temp)
- {
- temp->next = link;
- link = temp;
- }
+ temp->next = link;
+ link = temp;
}
}