summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/pdf/pdfannot.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/pdf/pdfannot.c')
-rw-r--r--Build/source/texk/web2c/luatexdir/pdf/pdfannot.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfannot.c b/Build/source/texk/web2c/luatexdir/pdf/pdfannot.c
new file mode 100644
index 00000000000..e501947c78f
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/pdf/pdfannot.c
@@ -0,0 +1,93 @@
+/*
+
+Copyright 2009-2011 Taco Hoekwater <taco@luatex.org>
+
+This file is part of LuaTeX.
+
+LuaTeX is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2 of the License, or (at your
+option) any later version.
+
+LuaTeX is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU General Public License along
+with LuaTeX; if not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "ptexlib.h"
+
+void do_annot(PDF pdf, halfword p, halfword parent_box, scaledpos cur)
+{
+ scaled_whd alt_rule;
+ int k;
+ if (global_shipping_mode == SHIPPING_FORM)
+ normal_error("pdf backend", "annotations cannot be inside an xform");
+ if (doing_leaders)
+ return;
+ if (is_obj_scheduled(pdf, pdf_annot_objnum(p))) {
+ k = pdf_create_obj(pdf, obj_type_annot, 0);
+ obj_annot_ptr(pdf, pdf_annot_objnum(p)) = p;
+ pdf_annot_objnum(p) = k;
+ }
+ alt_rule.wd = width(p);
+ alt_rule.ht = height(p);
+ alt_rule.dp = depth(p);
+ set_rect_dimens(pdf, p, parent_box, cur, alt_rule, 0);
+ obj_annot_ptr(pdf, pdf_annot_objnum(p)) = p;
+ addto_page_resources(pdf, obj_type_annot, pdf_annot_objnum(p));
+}
+
+/*tex Create a new whatsit node for annotation. */
+
+void new_annot_whatsit(small_number w)
+{
+ scaled_whd alt_rule;
+ new_whatsit(w);
+ alt_rule = scan_alt_rule();
+ set_width(tail_par, alt_rule.wd);
+ set_height(tail_par, alt_rule.ht);
+ set_depth(tail_par, alt_rule.dp);
+ if ((w == pdf_thread_node) || (w == pdf_start_thread_node)) {
+ if (scan_keyword("attr")) {
+ scan_toks(false, true);
+ set_pdf_thread_attr(tail_par, def_ref);
+ } else {
+ set_pdf_thread_attr(tail_par, null);
+ }
+ }
+}
+
+/*tex Scanning at the \TEX\ end: */
+
+void scan_annot(PDF pdf)
+{
+ int k;
+ if (scan_keyword("reserveobjnum")) {
+ k = pdf_create_obj(pdf, obj_type_annot, 0);
+ /*tex Scan an optional space. */
+ get_x_token();
+ if (cur_cmd != spacer_cmd)
+ back_input();
+ } else {
+ if (scan_keyword("useobjnum")) {
+ scan_int();
+ k = cur_val;
+ check_obj_type(pdf, obj_type_annot, k);
+ if (obj_annot_ptr(pdf, k) != 0)
+ normal_error("pdf backend", "annot object in use");
+ } else {
+ k = pdf_create_obj(pdf, obj_type_annot, 0);
+ }
+ new_annot_whatsit(pdf_annot_node);
+ obj_annot_ptr(pdf, k) = tail_par;
+ set_pdf_annot_objnum(tail_par, k);
+ scan_toks(false, true);
+ set_pdf_annot_data(tail_par, def_ref);
+ }
+ pdf_last_annot = k;
+}