From 4631790fb90cc46bc205ccbf53689ced3fa33f0a Mon Sep 17 00:00:00 2001 From: Ihor Radchenko Date: Sat, 23 Jul 2022 14:07:20 +0800 Subject: [PATCH 1/3] ox-ascii: Fix export with broken links * lisp/ox-ascii.el (org-ascii--describe-links): Skip broken links. --- lisp/ox-ascii.el | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/lisp/ox-ascii.el b/lisp/ox-ascii.el index 38b2a5772..88a75a815 100644 --- a/lisp/ox-ascii.el +++ b/lisp/ox-ascii.el @@ -948,12 +948,17 @@ channel." (when description (let ((dest (if (equal type "fuzzy") (org-export-resolve-fuzzy-link link info) - (org-export-resolve-id-link link info)))) - (concat - (org-ascii--fill-string - (format "[%s] %s" anchor (org-ascii--describe-datum dest info)) - width info) - "\n\n")))) + ;; Ignore broken links. On broken link, + ;; `org-export-resolve-id-link' will throw an + ;; error and `ignore-error' will return nil. + (ignore-error 'org-link-broken + (org-export-resolve-id-link link info))))) + (when dest + (concat + (org-ascii--fill-string + (format "[%s] %s" anchor (org-ascii--describe-datum dest info)) + width info) + "\n\n"))))) ;; Do not add a link that cannot be resolved and doesn't have ;; any description: destination is already visible in the ;; paragraph. From 14532ec6a5c9f3dfdb03cb838934c3df86d14e02 Mon Sep 17 00:00:00 2001 From: Ihor Radchenko Date: Sat, 23 Jul 2022 14:05:43 +0800 Subject: [PATCH 2/3] ox-md: Fix export with broken links * lisp/ox-md.el (org-md--headline-referred-p): Allow exporting headlines when the document contains broken links and `org-export-with-broken-links' is non-nil. For broken links, `org-export-resolve-link' throws an error - catch it and do not match the headline against such broken link. --- lisp/ox-md.el | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lisp/ox-md.el b/lisp/ox-md.el index ad684d803..91b7ee657 100644 --- a/lisp/ox-md.el +++ b/lisp/ox-md.el @@ -193,11 +193,10 @@ of contents can refer to headlines." ;; A link refers internally to HEADLINE. (org-element-map (plist-get info :parse-tree) 'link (lambda (link) - (eq headline - (pcase (org-element-property :type link) - ((or "custom-id" "id") (org-export-resolve-id-link link info)) - ("fuzzy" (org-export-resolve-fuzzy-link link info)) - (_ nil)))) + (equal headline + ;; Ignore broken links. + (ignore-error 'org-link-broken + (org-export-resolve-link link info)))) info t)))) (defun org-md--headline-title (style level title &optional anchor tags) From e5cf0bc840d5d198c1da4e55e945ccadda7edb60 Mon Sep 17 00:00:00 2001 From: Ihor Radchenko Date: Sat, 23 Jul 2022 14:10:45 +0800 Subject: [PATCH 3/3] org-export: Do not use broken link handler on non-link elements * lisp/ox.el (org-export-data): Only catch 'org-link-broken on link objects. Signaling 'org-link-broken for other element types, should not happen and we should _not_ export such elements as "" or "[BROKEN LINK...]". --- lisp/ox.el | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lisp/ox.el b/lisp/ox.el index 2a3edaa50..a6209ee98 100644 --- a/lisp/ox.el +++ b/lisp/ox.el @@ -1908,8 +1908,10 @@ Return a string." (org-element-property :archivedp data))) (let ((transcoder (org-export-transcoder data info))) (or (and (functionp transcoder) - (broken-link-handler - (funcall transcoder data nil info))) + (if (eq type 'link) + (broken-link-handler + (funcall transcoder data nil info)) + (funcall transcoder data nil info))) ;; Export snippets never return a nil value so ;; that white spaces following them are never ;; ignored.