mirror of
https://github.com/storytold/pdfcraft.git
synced 2026-10-31 13:37:35 -06:00
* M3: a Launch link that names a PDF opens it in PdfCraft (#4168) Documents that cross-reference each other often use Launch actions to open another PDF next to them (#4168: 268 links such as ..\se\se_ST.pdf). PdfCraft follows no Launch action, so clicking them did nothing, while the same link written as a GoToR opens. ISO 32000-2 §12.6.4.6: a Launch action "launches an application or opens or prints a document". Starting programs is not something a document should be able to do, but opening a PDF is what a remote Go-To already does. So a Launch action whose /F names a .pdf file, and that has no /Win launch parameters (application, operation, arguments), is read as the remote Go-To to that file's first page (LinkTarget::RemoteGoTo with launch: true). It then goes through the same path as one: PDF only, --root confinement, confirmation for absolute paths, opened as a document and never handed to the OS. Windows writers separate such paths with \, where §7.11.2.1 uses /, so a path without any / has its \ read as /. doc_info's link target says "action": "Launch" or "GoToR". Tests: launch_actions_that_name_a_pdf_open_it_like_a_remote_link (relative with \, a file specification, an executable, /Win, a bare .pdf, a mixed path, a URL file system) and a_launch_link_to_a_pdf_opens_it_like_a_remote_link (link_open opens the PDF in the root; a program link opens nothing). Mutants, each failing: the /Win check dropped, \ always or never read as /, any extension, a bare ".pdf", case-sensitive ".pdf", Launch not read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * M3: a Launch link with a stray /D still opens its PDF (#4168) Launch (ISO 32000-2 Table 207) has no /D, but launch_pdf went through remote_go_to, which rejects the action when /D isn't a valid GoToR destination. A Launch naming c.pdf with /D 0 stayed Other(Launch). The /F parsing is now shared (action_file) and Launch ignores /D. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175FWj4xFhMhSH3UpMU8DSC --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>