From 6d7b506c8a380e4dd97f337590ca079d810a360a Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Tue, 15 Sep 2026 13:46:50 -0300 Subject: Follow embedded PDF links through Look --- src/pdf_bridge.h | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src/pdf_bridge.h') diff --git a/src/pdf_bridge.h b/src/pdf_bridge.h index 81287578..8c73f688 100644 --- a/src/pdf_bridge.h +++ b/src/pdf_bridge.h @@ -149,6 +149,20 @@ typedef struct pardes_pdf_outline_result { size_t bytes_len; } pardes_pdf_outline_result; +/* URI borrows the current page's lazily loaded link list. Copy it before any + * other document operation. A NULL URI means the point has no usable link. */ +typedef struct pardes_pdf_link { + const unsigned char *uri; + size_t uri_len; + pardes_pdf_quad quad; + int destination_kind; + int page; + float x; + float y; + unsigned char has_x; + unsigned char has_y; +} pardes_pdf_link; + enum { PARDES_PDF_OK = 0, PARDES_PDF_ERROR = -1, @@ -168,7 +182,8 @@ enum { /* Outline conversion is atomic: crossing any bound returns no rows. */ PARDES_PDF_MAX_OUTLINE_ITEMS = 8192, PARDES_PDF_MAX_OUTLINE_DEPTH = 64, - PARDES_PDF_MAX_OUTLINE_BYTES = 4 * 1024 * 1024 + PARDES_PDF_MAX_OUTLINE_BYTES = 4 * 1024 * 1024, + PARDES_PDF_MAX_LINK_URI_BYTES = 64 * 1024 }; pardes_pdf_document *pardes_pdf_open(const char *path, int *page_count); @@ -282,6 +297,19 @@ void pardes_pdf_drop_outline_result( void *outline ); +int pardes_pdf_link_at( + pardes_pdf_document *document, + int page_number, + pardes_pdf_point point, + pardes_pdf_link *out +); +int pardes_pdf_copy_rectangle( + pardes_pdf_document *document, + int page_number, + pardes_pdf_quad quad, + pardes_pdf_owned_text *out +); + #ifdef __cplusplus } #endif -- cgit v1.3