Browse Source

ox-beamer: Fix labels

* lisp/ox-beamer.el (org-beamer--get-label): Remove protective braces
  when extracting label from options.
(org-beamer--format-frame): Protect label with braces if it contains
colons.

Based off a patch from Fabrice
Popineau (<http://permalink.gmane.org/gmane.emacs.orgmode/101933>).
Nicolas Goaziou 9 years ago
parent
commit
0ee8ba3e0d
1 changed files with 15 additions and 6 deletions
  1. 15 6
      lisp/ox-beamer.el

+ 15 - 6
lisp/ox-beamer.el

@@ -331,13 +331,17 @@ channel."
 INFO is a plist used as a communication channel.
 
 The value is either the label specified in \"BEAMER_opt\"
-property, or a fallback value built from headline's number.  This
-function assumes HEADLINE will be treated as a frame."
+property, or a unique internal label.  This function assumes
+HEADLINE will be treated as a frame."
   (let ((opt (org-element-property :BEAMER_OPT headline)))
     (if (and (stringp opt)
 	     (string-match "\\(?:^\\|,\\)label=\\(.*?\\)\\(?:$\\|,\\)" opt))
-	(match-string 1 opt)
-      (format "{sec:%s}" (org-export-get-reference headline info)))))
+	(let ((label (match-string 1 opt)))
+	  ;; Strip protective braces, if any.
+	  (if (org-string-match-p "\\`{.*}\\'" label)
+	      (substring label 1 -1)
+	    label))
+      (format "sec:%s" (org-export-get-reference headline info)))))
 
 (defun org-beamer--frame-level (headline info)
   "Return frame level in subtree containing HEADLINE.
@@ -441,8 +445,13 @@ used as a communication channel."
 				  (or (string-match "\\(^\\|,\\)label=" beamer-opt)
 				      (string-match "allowframebreaks" beamer-opt)))
 		       (list
-			(format "label=%s"
-				(org-beamer--get-label headline info)))))))
+			(let ((label (org-beamer--get-label headline info)))
+			  ;; Labels containing colons need to be
+			  ;; wrapped within braces.
+			  (format (if (org-string-match-p ":" label)
+				      "label={%s}"
+				    "label=%s")
+				  label)))))))
 	      ;; Change options list into a string.
 	      (org-beamer--normalize-argument
 	       (mapconcat