浏览代码

Merge branch 'hotfix-7.8.06'

Bastien Guerry 13 年之前
父节点
当前提交
98b8cdd333
共有 2 个文件被更改,包括 35 次插入44 次删除
  1. 2 42
      lisp/org-lparse.el
  2. 33 2
      lisp/org-odt.el

+ 2 - 42
lisp/org-lparse.el

@@ -809,6 +809,8 @@ version."
       (setq umax-toc (if (integerp org-export-with-toc)
 			 (min org-export-with-toc umax)
 		       umax))
+      (setq org-lparse-opt-plist
+	    (plist-put org-lparse-opt-plist :headline-levels  umax))
 
       (when (and org-export-with-toc (not body-only))
 	(setq lines (org-lparse-prepare-toc
@@ -845,48 +847,6 @@ version."
 	      (org-lparse-end-environment 'fixedwidth))
 	    (throw 'nextline nil))
 
-	  ;; Notes: The baseline version of org-html.el (git commit
-	  ;; 3d802e), while encountering a *line-long* protected text,
-	  ;; does one of the following two things based on the state
-	  ;; of the export buffer.
-
-	  ;; 1. If a paragraph element has just been opened and
-	  ;;    contains only whitespace as content, insert the
-	  ;;    protected text as part of the previous paragraph.
-
-	  ;; 2. If the paragraph element has already been opened and
-	  ;;    contains some valid content insert the protected text
-	  ;;    as part of the current paragraph.
-
-	  ;; I think --->
-
-	  ;; Scenario 1 mentioned above kicks in when a block of
-	  ;; protected text has to be inserted en bloc. For example,
-	  ;; this happens, when inserting an source or example block
-	  ;; or preformatted content enclosed in #+backend,
-	  ;; #+begin_backend ... #+end_backend)
-
-	  ;; Scenario 2 mentioned above kicks in when the protected
-	  ;; text is part of a running sentence. For example this
-	  ;; happens in the case of an *multiline* LaTeX equation that
-	  ;; needs to be inserted verbatim.
-
-	  ;; org-html.el in the master branch seems to do some
-	  ;; jugglery by moving paragraphs around. Inorder to make
-	  ;; these changes backend-agnostic introduce a new text
-	  ;; property org-native-text and impose the added semantics
-	  ;; that these protected blocks appear outside of a
-	  ;; conventional paragraph element.
-	  ;;
-	  ;; Extra Note: Check whether org-example and org-native-text
-	  ;; are entirely equivalent.
-
-	  ;; Fixes bug reported by Christian Moe concerning verbatim
-	  ;; LaTeX fragments.
-	  ;; on git commit 533ba3f90250a1f25f494c390d639ea6274f235c
-	  ;; http://repo.or.cz/w/org-mode/org-jambu.git/shortlog/refs/heads/staging
-	  ;; See http://lists.gnu.org/archive/html/emacs-orgmode/2011-03/msg01379.html
-
 	  ;; Native Text
 	  (when (and (get-text-property 0 'org-native-text line)
 		     ;; Make sure it is the entire line that is protected

+ 33 - 2
lisp/org-odt.el

@@ -1184,6 +1184,16 @@ styles congruent with the ODF-1.2 specification."
   (org-lparse-end-paragraph))
 
 (defun org-odt-begin-toc (lang-specific-heading max-level)
+  ;; Strings in `org-export-language-setup' can contain named html
+  ;; entities.  Replace those with utf-8 equivalents.
+  (let ((i 0) entity rpl)
+    (while (string-match "&\\([^#].*?\\);" lang-specific-heading i)
+      (setq entity (match-string 1 lang-specific-heading))
+      (if (not (setq rpl (org-entity-get-representation entity 'utf8)))
+	  (setq i (match-end 0))
+	(setq i (+ (match-beginning 0) (length rpl)))
+	(setq lang-specific-heading
+	      (replace-match rpl t t lang-specific-heading)))))
   (insert
    (format "
     <text:table-of-content text:style-name=\"Sect2\" text:protected=\"true\" text:name=\"Table of Contents1\">
@@ -1243,10 +1253,13 @@ styles congruent with the ODF-1.2 specification."
 (defun org-odt-format-link (desc href &optional attr)
   (cond
    ((and (= (string-to-char href) ?#) (not org-odt-suppress-xref))
-    (setq href (concat org-export-odt-bookmark-prefix (substring href 1)))
+    (setq href (substring href 1))
     (let ((xref-format "text"))
       (when (numberp desc)
 	(setq desc (format "%d" desc) xref-format "number"))
+      (when (listp desc)
+	(setq desc (mapconcat 'identity desc ".") xref-format "chapter"))
+      (setq href (concat org-export-odt-bookmark-prefix href))
       (org-odt-format-tags
        '("<text:bookmark-ref text:reference-format=\"%s\" text:ref-name=\"%s\">" .
 	 "</text:bookmark-ref>")
@@ -1613,7 +1626,8 @@ ATTR is a string of other attributes of the a element."
 		 (not fragment)))
 	   (type (if (equal type-1 "id") "file" type-1))
 	   (filename path)
-	   (thefile path))
+	   (thefile path)
+	   sec-frag sec-nos)
       (cond
        ;; check for inlined images
        ((and (member type '("file"))
@@ -1629,6 +1643,7 @@ ATTR is a string of other attributes of the a element."
 	     (org-odt-is-formula-link-p filename)
 	     (or (not descp)))
 	(org-odt-format-inline-formula thefile))
+       ;; code references
        ((string= type "coderef")
 	(let* ((ref fragment)
 	       (lineno-or-ref (cdr (assoc ref org-export-code-refs)))
@@ -1651,6 +1666,22 @@ ATTR is a string of other attributes of the a element."
 			  (or desc "%s"))
 			lineno-or-ref))
 	    (org-odt-format-link (org-xml-format-desc desc) href)))))
+       ;; links to headlines
+       ((and (string= type "")
+	     (or (not thefile) (string= thefile ""))
+	     (setq sec-frag fragment)
+	     (org-find-text-property-in-string 'org-no-description fragment)
+	     (or (string-match  "\\`sec\\(\\(-[0-9]+\\)+\\)" sec-frag)
+		 (and (setq sec-frag
+			    (loop for alias in org-export-target-aliases do
+				  (when (member fragment (cdr alias))
+				    (return (car alias)))))
+		      (string-match  "\\`sec\\(\\(-[0-9]+\\)+\\)" sec-frag)))
+	     (setq sec-nos (org-split-string (match-string 1 sec-frag) "-"))
+	     (<= (length sec-nos) (plist-get org-lparse-opt-plist
+					     :headline-levels)))
+	(let ((org-odt-suppress-xref nil))
+	  (org-odt-format-link sec-nos (concat "#" sec-frag) attr)))
        (t
 	(when (string= type "file")
 	  (setq thefile