pdftex[869] branches/stable: structure destination support from
commits+karl at tug.org
commits+karl at tug.org
Thu Nov 4 22:46:36 CET 2021
Revision: 869
http://tug.org/svn/pdftex?view=revision&revision=869
Author: karl
Date: 2021-11-04 22:46:36 +0100 (Thu, 04 Nov 2021)
Log Message:
-----------
structure destination support from Marcel
Modified Paths:
--------------
branches/stable/doc/manual/ChangeLog
branches/stable/doc/manual/pdftex-t.tex
branches/stable/source/src/texk/web2c/pdftexdir/ChangeLog
branches/stable/source/src/texk/web2c/pdftexdir/NEWS
branches/stable/source/src/texk/web2c/pdftexdir/pdftex.web
Added Paths:
-----------
branches/stable/tests/21-structdest/
branches/stable/tests/21-structdest/Makefile
branches/stable/tests/21-structdest/test-structdest.tex
Modified: branches/stable/doc/manual/ChangeLog
===================================================================
--- branches/stable/doc/manual/ChangeLog 2021-11-04 17:23:17 UTC (rev 868)
+++ branches/stable/doc/manual/ChangeLog 2021-11-04 21:46:36 UTC (rev 869)
@@ -1,3 +1,14 @@
+2021-11-04 Karl Berry <karl at freefriends.org>
+
+ * pdftex-t.tex: size GFDL for two pages, since it was spilling over.
+ Let first bodyfont size stand.
+ Rearrange some text for new font size.
+
+2021-11-04 Marcel Kr\"uger <tex at 2krueger.de>
+
+ * pdftex-t.tex: document structured destinations.
+ Also bump document font size to 11pt.
+
2021-09-25 Karl Berry <karl at freefriends.org>
* pdftex-t.tex (\pdfstartlink): organize into lists.
Modified: branches/stable/doc/manual/pdftex-t.tex
===================================================================
--- branches/stable/doc/manual/pdftex-t.tex 2021-11-04 17:23:17 UTC (rev 868)
+++ branches/stable/doc/manual/pdftex-t.tex 2021-11-04 21:46:36 UTC (rev 869)
@@ -141,9 +141,6 @@
\useURL [thanh_truetype_tub] [https://tug.org/TUGboat/tb30-1/tb94thanh.pdf]
\useURL [jbig2enc] [https://github.com/agl/jbig2enc]
-%D The primitive definitions are specified a bit fuzzy using the next set of
-%D commands. Some day I'll write some proper macros to deal with this.
-
% keep next 2 lines as temporary kludge for a while to make \type{} of
% older ConTeXt versions handle these two new primitives; the original
% problem with \type{} is already solved in ConTeXt as of 2006-02-14.
@@ -152,7 +149,8 @@
\def\Syntax #1{\strut\kern-.25em{#1}\kern-.25em\relax}
\def\Next {\crlf\hbox to 2em{}\nobreak}
-\def\Sugar #1{\unskip\unskip\unskip\kern.25em{#1}\kern.25em\ignorespaces}
+\def\Sugar #1{\unskip\unskip\unskip\kern.25em{#1}\kern.25em
+ \penalty0 \ignorespaces} % allow break
%
\def\Lbrace {\Sugar{\tttf\leftargument}}
\def\Literal #1{\Sugar{\type{#1}}}
@@ -346,7 +344,7 @@
\usetypescript [palatino][\defaultencoding]
\setupbodyfont
- [palatino,10pt]
+ [palatino,11pt]
\definefontsynonym[TitleFont][SerifBold]
@@ -873,15 +871,14 @@
options can be specified with one or two dashes and unambiguously
abbreviated.
+\begingroup
\startnotmode[screen]
- \switchtobodyfont[9pt] % squeeze everything on one page
+ \switchtobodyfont[10pt] % keep line lengths shorter
\stopnotmode
\typefile{pdftex-help.txt}
-\startnotmode[screen]
- \switchtobodyfont[10pt] % squeeze everything on one page
-\stopnotmode
+\endgroup
%***********************************************************************
@@ -1450,14 +1447,19 @@
\Something{general text}
}
-%HE Check:
\Syntax{
+\Something{goto-action struct spec} \Means %
+ \Literal{struct} (\Something{numid} \Or \Literal{nameid} \Or \Something{general text})
+}
+
+% keep in sync with redundant copy below.
+\Syntax{
\Something{goto-action spec} \Means %
- \Something{numid}
- \Or \Next \Optional{\Something{file spec}} \Something{nameid}
- \Or \Next \Optional{\Something{file spec}} \Optional{\Something{page spec}} \Something{general text}
- \Or \Next \Something{file spec} \Something{nameid} \Something{newwindow spec}
- \Or \Next \Something{file spec} \Optional{\Something{page spec}} \Something{general text} \Something{newwindow spec}
+ \Optional{\Something{goto-action struct spec}} \Something{numid}
+ \Or \Next \Optional{\Something{file spec}} \Optional{\Something{goto-action struct spec}} \Something{nameid}
+ \Or \Next \Optional{\Something{file spec}} \Optional{\Something{goto-action struct spec}} \Optional{\Something{page spec}} \Something{general text}
+ \Or \Next \Something{file spec} \Optional{\Something{goto-action struct spec}} \Something{nameid} \Something{newwindow spec}
+ \Or \Next \Something{file spec} \Optional{\Something{goto-action struct spec}} \Optional{\Something{page spec}} \Something{general text} \Something{newwindow spec}
}
\Syntax{
@@ -1508,8 +1510,9 @@
\Syntax{
\Something{dest spec} \Means %
- \Something{numid} \Something{dest type}
- \Or \Something{nameid} \Something{dest type}
+ \Optional{\Literal{struct} \Something{number}} \\
+ (\Something{numid} \Or \Something{nameid})
+ \Something{dest type}
}
\Syntax{
@@ -3352,7 +3355,11 @@
for links and bookmark outlines; the link is identified by either
a number or a symbolic name, and the way the viewer is to display the
page must be specified in \Something{dest type}\unkern, which must be
-one of those mentioned in \in{table}[appearance].
+one of those mentioned in \in{table}[appearance]. If \Literal{struct}
+\Something{number} is used, a structure destination is created instead of a
+regular destination, referring to the structure element defined in object
+\Something{number}. Structure destinations use a separate namespace and
+therefore may have the same identifiers as a regular destination.
\startbuffer
\starttabulate[|l|l|]
@@ -3436,11 +3443,11 @@
\Syntax{
\Something{goto-action spec} \Means %
- \Something{numid}
- \Or \Next \Optional{\Something{file spec}} \Something{nameid}
- \Or \Next \Optional{\Something{file spec}} \Optional{\Something{page spec}} \Something{general text}
- \Or \Next \Something{file spec} \Something{nameid} \Something{newwindow spec}
- \Or \Next \Something{file spec} \Optional{\Something{page spec}} \Something{general text} \Something{newwindow spec}
+ \Optional{\Something{goto-action struct spec}} \Something{numid}
+ \Or \Next \Optional{\Something{file spec}} \Optional{\Something{goto-action struct spec}} \Something{nameid}
+ \Or \Next \Optional{\Something{file spec}} \Optional{\Something{goto-action struct spec}} \Optional{\Something{page spec}} \Something{general text}
+ \Or \Next \Something{file spec} \Optional{\Something{goto-action struct spec}} \Something{nameid} \Something{newwindow spec}
+ \Or \Next \Something{file spec} \Optional{\Something{goto-action struct spec}} \Optional{\Something{page spec}} \Something{general text} \Something{newwindow spec}
}
\startitemize
@@ -3452,6 +3459,9 @@
destination. In this case, the zoom factor is given by
\Something{general text}\unkern.
+\item The default behavior of the \Something{newwindow
+spec} depends on the browser setting.
+
\item A destination in another \PDF\ file can be specified with
\Something{file spec}\unkern, in which case \Something{newwindow spec}
specifies whether the file should be opened in a new window. A
@@ -3458,8 +3468,15 @@
\Something{file spec} can be either a \type{(string)} or a
\type{<<}\type{dictionary}\type{>>}.
-\item The default behavior of the \Something{newwindow
-spec} depends on the browser setting.
+\item If a \Something{goto-action spec} contains a
+\Something{goto-action struct spec}, then a structure destination is
+referenced in addition to the regular destination. The form with
+\Something{general text} is used if and only if a \Something{file spec}
+is present; then the \Something{general text} should expand to a literal
+\PDF\ dictionary describing a structure destination. Otherwise, the
+\Something{numid} or \Something{nameid} directly after the
+\Literal{struct} keyword identify a destination which must have been
+created with \type{\pdfdest} \Literal{struct}\unskip.
\stopitemize
@@ -4881,8 +4898,8 @@
\startframedtext
\starttyping
% Thomas Esser, 1998. public domain.
-% This is used for pdftex and pdfetex, which are now identical: both
-% with e-TeX extensions, both with pdf output.
+% This is used for pdftex and pdfetex, which are now identical:
+% both with e-TeX extensions, both with pdf (and dvi) output.
\input pdftexconfig.tex
\input etex.src
\input pdftexmagfix.tex
@@ -5115,9 +5132,6 @@
\type{-}\type{-pages=odd} and \type{-}\type{-pages=even} options
(which might require some disciplined shuffling of sheet).
-This also demonstrates that \PDFTEX\ can be used for page imposition
-purposes (given that \PDFTEX\ and the fonts are set up properly).
-
%***********************************************************************
\page
@@ -5132,7 +5146,7 @@
\section{GNU Free Documentation License}
\startnotmode[screen]
- \switchtobodyfont[4.6pt] % squeeze everything on one page :-}
+ \switchtobodyfont[6.4pt] % squeeze everything onto two pages}
\setuplayout[grid=yes]
\setupcolumns[n=7]
\stopnotmode
Modified: branches/stable/source/src/texk/web2c/pdftexdir/ChangeLog
===================================================================
--- branches/stable/source/src/texk/web2c/pdftexdir/ChangeLog 2021-11-04 17:23:17 UTC (rev 868)
+++ branches/stable/source/src/texk/web2c/pdftexdir/ChangeLog 2021-11-04 21:46:36 UTC (rev 869)
@@ -1,3 +1,7 @@
+2021-11-04 Marcel Kr\"uger <tex at 2krueger.de>
+
+ * pdftex.web: Implement support for PDF 2.0 structure destinations.
+
2021-09-25 Karl Berry <karl at freefriends.org>
* pdftex.web: always call pdf_warning with prepend_nl true,
Modified: branches/stable/source/src/texk/web2c/pdftexdir/NEWS
===================================================================
--- branches/stable/source/src/texk/web2c/pdftexdir/NEWS 2021-11-04 17:23:17 UTC (rev 868)
+++ branches/stable/source/src/texk/web2c/pdftexdir/NEWS 2021-11-04 21:46:36 UTC (rev 869)
@@ -1,3 +1,6 @@
+- changes:
+ - support structured destinations from PDF 2.0.
+
pdfTeX 3.141592653-2.6-1.40.23 (TeX Live 2021 post-release) (June 28, 2021)
- changes:
- for letterspaced fonts, use explicit \fontdimen6 if specified.
Modified: branches/stable/source/src/texk/web2c/pdftexdir/pdftex.web
===================================================================
--- branches/stable/source/src/texk/web2c/pdftexdir/pdftex.web 2021-11-04 17:23:17 UTC (rev 868)
+++ branches/stable/source/src/texk/web2c/pdftexdir/pdftex.web 2021-11-04 21:46:36 UTC (rev 869)
@@ -16437,10 +16437,11 @@
@d obj_type_font == 3 {index of linked list of Fonts objects}
@d obj_type_outline == 4 {index of linked list of outline objects}
@d obj_type_dest == 5 {index of linked list of destination objects}
- at d obj_type_obj == 6 {index of linked list of raw objects}
- at d obj_type_xform == 7 {index of linked list of XObject forms}
- at d obj_type_ximage == 8 {index of linked list of XObject image}
- at d obj_type_thread == 9 {index of linked list of num article threads}
+ at d obj_type_struct_dest == 6 {index of linked list of structure destination objects}
+ at d obj_type_obj == 7 {index of linked list of raw objects}
+ at d obj_type_xform == 8 {index of linked list of XObject forms}
+ at d obj_type_ximage == 9 {index of linked list of XObject image}
+ at d obj_type_thread == 10 {index of linked list of num article threads}
@d head_tab_max == obj_type_thread {max index of |head_tab|}
@# {max number of kids for balanced trees}
@@ -16558,7 +16559,7 @@
@d pdf_action_user == 3 {user-defined action}
@# {data structure of actions}
- at d pdf_action_size == 3 {size of action structure in |mem|}
+ at d pdf_action_size == 4 {size of action structure in |mem|}
@d pdf_action_type == type {action type}
@d pdf_action_named_id == subtype {identifier is type of name}
@d pdf_action_id == link {destination/thread name identifier}
@@ -16567,6 +16568,7 @@
@d pdf_action_page_tokens(#) == info(# + 2) {specification of GoTo page action}
@d pdf_action_user_tokens(#) == info(# + 2) {user-defined action string}
@d pdf_action_refcount(#) == link(# + 2) {counter of references to this action}
+ at d pdf_action_struct_id(#) == link(# + 3) {structure destination identifier}
@# {data structure of outlines; it's not able to write out outline entries
before all outline entries are defined, so memory allocated for outline
@@ -16597,7 +16599,7 @@
@d pdf_dest_fitbv == 6
@d pdf_dest_fitr == 7
-@# {data structure of destinations}
+@# {data structure of structure and regular destinations}
@d obj_dest_ptr == obj_aux {pointer to |pdf_dest_node|}
@d pdf_dest_node_size == 7 {size of whatsit node for destination;
words |1..4| hold dest dimensions, word |6| identifier type, subtype
@@ -19518,13 +19520,18 @@
"destination has been already written (this shouldn't happen)")
else begin
i := obj_dest_ptr(info(k));
- if pdf_dest_named_id(i) > 0 then begin
+ if (pdf_dest_named_id(i) > 0) and (pdf_dest_objnum(i) = null) then begin
pdf_begin_dict(info(k), 1);
pdf_print("/D ");
end
else
pdf_begin_obj(info(k), 1);
- pdf_out("["); pdf_print_int(pdf_last_page); pdf_print(" 0 R ");
+ pdf_out("[");
+ if pdf_dest_objnum(i) = null then
+ pdf_print_int(pdf_last_page)
+ else
+ pdf_print_int(pdf_dest_objnum(i));
+ pdf_print(" 0 R ");
case pdf_dest_type(i) of
pdf_dest_xyz: begin
pdf_print("/XYZ ");
@@ -19565,7 +19572,7 @@
othercases pdf_error("ext5", "unknown dest type");
endcases;
pdf_print_ln("]");
- if pdf_dest_named_id(i) > 0 then
+ if (pdf_dest_named_id(i) > 0) and (pdf_dest_objnum(i) = null) then
pdf_end_dict
else
pdf_end_obj;
@@ -19838,6 +19845,7 @@
@<Check for non-existing pages@>;
@<Reverse the linked list of Page and Pages objects@>;
@<Check for non-existing destinations@>;
+ @<Check for non-existing structure destinations@>;
@<Output fonts definition@>;
@<Output pages tree@>;
@<Output outlines@>;
@@ -19902,6 +19910,39 @@
k := obj_link(k);
end
+@ The same for structure destinations, except that there is no sensible default
+object to point to.
+
+ at p procedure pdf_fix_struct_dest(k: integer);
+begin
+ if obj_dest_ptr(k) <> null then
+ return;
+ pdf_warning("structure dest", "", false, false);
+ if obj_info(k) < 0 then begin
+ print("name{");
+ print(-obj_info(k));
+ print("}");
+ end
+ else begin
+ print("num");
+ print_int(obj_info(k));
+ end;
+ print(" has been referenced but does not exist");
+ print_ln; print_ln;
+ {pdf_begin_obj(k, 1);
+ pdf_out("[");
+ pdf_print_int(head_tab[obj_type_page]);
+ pdf_print_ln(" 0 R /Fit]");
+ pdf_end_obj;}
+end;
+
+@ @<Check for non-existing structure destinations@>=
+k := head_tab[obj_type_struct_dest];
+while k <> 0 do begin
+ pdf_fix_struct_dest(k);
+ k := obj_link(k);
+end
+
@ @<Check for non-existing pages@>=
k := head_tab[obj_type_page];
while obj_aux(k) = 0 do begin
@@ -33931,8 +33972,10 @@
delete_token_ref(pdf_action_file(#));
if pdf_action_type(#) = pdf_action_page then
delete_token_ref(pdf_action_page_tokens(#))
- else if pdf_action_named_id(#) > 0 then
+ else if (pdf_action_named_id(#) and 1) = 1 then
delete_token_ref(pdf_action_id(#));
+ if (pdf_action_named_id(#) and 2) = 2 then
+ delete_token_ref(pdf_action_struct_id(#));
end;
free_node(#, pdf_action_size);
end
@@ -34528,7 +34571,7 @@
else
pdf_create_obj(t, i);
r := obj_ptr;
- if t = obj_type_dest then
+ if (t = obj_type_dest) or (t = obj_type_struct_dest) then
obj_dest_ptr(r) := null;
end;
if s <> 0 then
@@ -34570,10 +34613,35 @@
pdf_action_user_tokens(p) := def_ref;
return;
end;
+ pdf_action_named_id(p) := 0;
if scan_keyword("file") then begin
scan_pdf_ext_toks;
pdf_action_file(p) := def_ref;
end;
+ if scan_keyword("struct") then begin
+ if pdf_action_type(p) <> pdf_action_goto then
+ pdf_error("ext1", "only GoTo action can be used with `struct'");
+ if pdf_action_file(p) <> null then begin
+ scan_pdf_ext_toks;
+ pdf_action_named_id(p) := pdf_action_named_id(p) + 2;
+ pdf_action_struct_id(p) := def_ref;
+ end
+ else if scan_keyword("name") then begin
+ scan_pdf_ext_toks;
+ pdf_action_named_id(p) := pdf_action_named_id(p) + 2;
+ pdf_action_struct_id(p) := def_ref;
+ end
+ else if scan_keyword("num") then begin
+ scan_int;
+ if cur_val <= 0 then
+ pdf_error("ext1", "num identifier must be positive");
+ pdf_action_struct_id(p) := cur_val;
+ end
+ else
+ pdf_error("ext1", "identifier type missing");
+ end
+ else
+ pdf_action_struct_id(p) := null;
if scan_keyword("page") then begin
if pdf_action_type(p) <> pdf_action_goto then
pdf_error("ext1", "only GoTo action can be used with `page'");
@@ -34582,13 +34650,12 @@
if cur_val <= 0 then
pdf_error("ext1", "page number must be positive");
pdf_action_id(p) := cur_val;
- pdf_action_named_id(p) := 0;
scan_pdf_ext_toks;
pdf_action_page_tokens(p) := def_ref;
end
else if scan_keyword("name") then begin
scan_pdf_ext_toks;
- pdf_action_named_id(p) := 1;
+ pdf_action_named_id(p) := pdf_action_named_id(p) + 1;
pdf_action_id(p) := def_ref;
end
else if scan_keyword("num") then begin
@@ -34599,7 +34666,6 @@
scan_int;
if cur_val <= 0 then
pdf_error("ext1", "num identifier must be positive");
- pdf_action_named_id(p) := 0;
pdf_action_id(p) := cur_val;
end
else
@@ -34819,6 +34885,16 @@
check_pdfoutput("\pdfdest", true);
q := tail;
new_whatsit(pdf_dest_node, pdf_dest_node_size);
+ if scan_keyword("struct") then begin
+ scan_int;
+ if cur_val <= 0 then
+ pdf_error("ext1", "struct identifier must be positive");
+ pdf_dest_objnum(tail) := cur_val;
+ j := obj_type_struct_dest;
+ end else begin
+ pdf_dest_objnum(tail) := null;
+ j := obj_type_dest;
+ end;
if scan_keyword("num") then begin
scan_int;
if cur_val <= 0 then
@@ -34871,11 +34947,11 @@
end;
if pdf_dest_named_id(tail) <> 0 then begin
i := tokens_to_string(pdf_dest_id(tail));
- k := find_obj(obj_type_dest, i, true);
+ k := find_obj(j, i, true);
flush_str(i);
end
else
- k := find_obj(obj_type_dest, pdf_dest_id(tail), false);
+ k := find_obj(j, pdf_dest_id(tail), false);
if (k <> 0) and (obj_dest_ptr(k) <> null) then begin
warn_dest_dup(pdf_dest_id(tail), pdf_dest_named_id(tail),
"ext4", "has been already used, duplicate ignored");
@@ -35410,7 +35486,7 @@
end;
case pdf_action_type(pdf_link_action(p)) of
pdf_action_goto: begin
- if pdf_action_named_id(pdf_link_action(p)) > 0 then begin
+ if (pdf_action_named_id(pdf_link_action(p)) mod 2) = 1 then begin
print(" goto name");
print_mark(pdf_action_id(pdf_link_action(p)));
end
@@ -35425,7 +35501,7 @@
print_mark(pdf_action_page_tokens(pdf_link_action(p)));
end;
pdf_action_thread: begin
- if pdf_action_named_id(pdf_link_action(p)) > 0 then begin
+ if (pdf_action_named_id(pdf_link_action(p)) mod 2) = 1 then begin
print(" thread name");
print_mark(pdf_action_id(pdf_link_action(p)));
end
@@ -36102,11 +36178,11 @@
if pdf_action_file(p) = null then begin
pdf_print("/S /GoTo ");
d := get_obj(obj_type_dest, pdf_action_id(p),
- pdf_action_named_id(p));
+ pdf_action_named_id(p) mod 2);
end
else
pdf_print("/S /GoToR ");
- if pdf_action_named_id(p) > 0 then begin
+ if (pdf_action_named_id(p) mod 2) = 1 then begin
pdf_str_entry("D", tokens_to_string(pdf_action_id(p)));
flush_str(last_tokens_string);
end
@@ -36119,8 +36195,8 @@
pdf_print("/S /Thread ");
if pdf_action_file(p) = null then
d := get_obj(obj_type_thread, pdf_action_id(p),
- pdf_action_named_id(p));
- if pdf_action_named_id(p) > 0 then begin
+ pdf_action_named_id(p) mod 2);
+ if (pdf_action_named_id(p) mod 2) = 1 then begin
pdf_str_entry("D", tokens_to_string(pdf_action_id(p)));
flush_str(last_tokens_string);
end
@@ -36130,6 +36206,18 @@
pdf_int_entry("D", pdf_action_id(p));
end;
endcases;
+ if pdf_action_struct_id(p) <> null then begin
+ pdf_out(" ");
+ if pdf_action_file(p) = null then
+ pdf_indirect("SD", get_obj(obj_type_struct_dest,
+ pdf_action_struct_id(p),
+ (pdf_action_named_id(p) div 2) mod 2))
+ else begin
+ pdf_print("/SD ");
+ pdf_print(tokens_to_string(pdf_action_struct_id(p)));
+ flush_str(last_tokens_string);
+ end;
+ end;
pdf_print_ln(" >>");
end;
@@ -36410,7 +36498,10 @@
pdf_error("ext4", "destinations cannot be inside an XForm");
if doing_leaders then
return;
- k := get_obj(obj_type_dest, pdf_dest_id(p), pdf_dest_named_id(p));
+ if pdf_dest_objnum(p) = null then
+ k := get_obj(obj_type_dest, pdf_dest_id(p), pdf_dest_named_id(p))
+ else
+ k := get_obj(obj_type_struct_dest, pdf_dest_id(p), pdf_dest_named_id(p));
if obj_dest_ptr(k) <> null then begin
warn_dest_dup(pdf_dest_id(p), pdf_dest_named_id(p),
"ext4", "has been already used, duplicate ignored");
Index: branches/stable/tests/21-structdest
===================================================================
--- branches/stable/tests/21-structdest 2021-11-04 17:23:17 UTC (rev 868)
+++ branches/stable/tests/21-structdest 2021-11-04 21:46:36 UTC (rev 869)
Property changes on: branches/stable/tests/21-structdest
___________________________________________________________________
Added: svn:ignore
## -0,0 +1 ##
+test-structdest.pdf
Added: branches/stable/tests/21-structdest/Makefile
===================================================================
--- branches/stable/tests/21-structdest/Makefile (rev 0)
+++ branches/stable/tests/21-structdest/Makefile 2021-11-04 21:46:36 UTC (rev 869)
@@ -0,0 +1,13 @@
+# $Id$
+# Public domain.
+# Test structure destinations.
+
+include ../Common.mak
+
+default: test-struct
+
+test-struct: test-structdest.tex
+ $(prog) $<
+
+clean:
+ $(clean)
Property changes on: branches/stable/tests/21-structdest/Makefile
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Date Author Id Revision
\ No newline at end of property
Added: branches/stable/tests/21-structdest/test-structdest.tex
===================================================================
--- branches/stable/tests/21-structdest/test-structdest.tex (rev 0)
+++ branches/stable/tests/21-structdest/test-structdest.tex 2021-11-04 21:46:36 UTC (rev 869)
@@ -0,0 +1,39 @@
+% $Id$
+% Public domain. Originally by Marcel Kr\"uger, 2021.
+% Make some structured destinations with various syntax combinations.
+% Output is just checked by hand.
+
+\pdfcompresslevel=0 \pdfobjcompresslevel=0
+\pdfoutput=1
+\catcode`\{=1 \catcode`\}=2
+\output={\global\advance\count0 by 1 \shipout\box255 }
+
+\def\eject{\par\penalty-10000 }
+\def\space{ }
+
+\pdfdest num 42 fit
+% Assuming that 12345 0 R is a valid reference to the non-existing
+% structure element at this location...
+\pdfdest struct 12345 num 42 fit
+Hello
+
+\hfill\eject
+\pdfdest name {earth} fit
+\pdfdest struct 1337 name {earth} fit
+World
+
+\vfill\eject
+\noindent
+\pdfstartlink goto struct num 42 num 42 First\pdfendlink
+\space
+\pdfstartlink goto struct name {earth} num 42 Combination 1\pdfendlink
+\space
+\pdfstartlink goto struct num 42 name {earth} Combination 1\pdfendlink
+\space
+\pdfstartlink goto struct name {earth} name {earth} Second\pdfendlink
+\space
+\pdfstartlink goto struct name {i_dont_exists} name {me neither} Third\pdfendlink
+\space
+\pdfstartlink goto file {f.pdf} struct {[(external_element_id) /Fit]}
+ name {marcel} Forth\pdfendlink
+\end
Property changes on: branches/stable/tests/21-structdest/test-structdest.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Date Author Id Revision
\ No newline at end of property
More information about the pdftex-commits
mailing list.