| 
					
				 | 
			
			
				@@ -3750,28 +3750,33 @@ definition can be found, raise an error." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (if (not label) (org-element-contents footnote-reference) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (let ((cache (or (plist-get info :footnote-definition-cache) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		       (let ((hash (make-hash-table :test #'equal))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         ;; Cache all the footnotes in document for 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         ;; later search. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         (org-element-map (plist-get info :parse-tree) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                             '(footnote-definition footnote-reference) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                           (lambda (f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		             ;; Skip any standard footnote reference 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		             ;; since those cannot contain a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		             ;; definition. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                             (unless (eq (org-element-property :type f) 'standard) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                               (puthash 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                (cons :element (org-element-property :label f)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                f 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                hash))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                           info) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			 (plist-put info :footnote-definition-cache hash) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			 hash)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	(or 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 (gethash label cache) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 (puthash label 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		  (org-element-map (plist-get info :parse-tree) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		      '(footnote-definition footnote-reference) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		    (lambda (f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		      (cond 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		       ;; Skip any footnote with a different label. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		       ;; Also skip any standard footnote reference 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		       ;; with the same label since those cannot 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		       ;; contain a definition. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		       ((not (equal (org-element-property :label f) label)) nil) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		       ((eq (org-element-property :type f) 'standard) nil) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		       ((org-element-contents f)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		       ;; Even if the contents are empty, we can not 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		       ;; return nil since that would eventually raise 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		       ;; the error.  Instead, return the equivalent 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		       ;; empty string. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		       (t ""))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		    info t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  (let ((hashed (gethash (cons :element label) cache))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    (when hashed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      (or (org-element-contents hashed) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		          ;; Even if the contents are empty, we can not 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		          ;; return nil since that would eventually raise 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		          ;; the error.  Instead, return the equivalent 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		          ;; empty string. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                          ""))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		  cache) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 (error "Definition not found for footnote %s" label)))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |