aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorCarsten Dominik <[email protected]>2006-02-23 10:54:29 +0000
committerCarsten Dominik <[email protected]>2006-02-23 10:54:29 +0000
commit272dfec25a333681630e84a85ce10344fd018fc2 (patch)
tree9966bf737dc4b0819654bdd47b3b7657542d4931 /lisp
parent1caf01c286458e837ce7388b79c7e46223ae7795 (diff)
(org-cleaned-string-for-export, org-solidify-link-text):
New function. (org-add-hook): Use `add-local-hook' instead of `make-local-hook' for XEmacs, just to silence the compiler. (org-export-as-ascii, org-export-as-html-and-open): Use `org-cleaned-string-for-export' and create internal links. (org-follow-mhe-link): Require mh-e, use folder.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/textmodes/org.el100
1 files changed, 88 insertions, 12 deletions
diff --git a/lisp/textmodes/org.el b/lisp/textmodes/org.el
index 4b62eeb87a..ab06318e0e 100644
--- a/lisp/textmodes/org.el
+++ b/lisp/textmodes/org.el
@@ -5,7 +5,7 @@
;; Author: Carsten Dominik <dominik at science dot uva dot nl>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/
-;; Version: 4.05
+;; Version: 4.06
;;
;; This file is part of GNU Emacs.
;;
@@ -81,6 +81,10 @@
;;
;; Changes since version 4.00:
;; ---------------------------
+;; Version 4.06
+;; - HTML exporter treats targeted internal links.
+;; - Bug fixes.
+;;
;; Version 4.05
;; - Changes to internal link system (thanks to David Wainberg for ideas).
;; - in-file links: [[Search String]] instead of <file:::Search String>
@@ -126,7 +130,7 @@
;;; Customization variables
-(defvar org-version "4.05"
+(defvar org-version "4.06"
"The version number of the file org.el.")
(defun org-version ()
(interactive)
@@ -7211,11 +7215,12 @@ onto the ring."
(defun org-follow-mhe-link (folder article)
"Follow an MHE link to FOLDER and ARTICLE."
(setq article (org-add-angle-brackets article))
-;; (require 'mh-e)
- (mh-rmail) ;; mh-e is standard with emacs 22
+ (require 'mh-e)
+ (mh-find-path)
(let* ((show-buf (concat "show-" folder)))
+ (mh-visit-folder folder)
(get-buffer-create show-buf)
- (mh-display-msg
+ (mh-show-msg
(string-to-number
(car (split-string
(with-temp-buffer
@@ -7226,8 +7231,7 @@ onto the ring."
"--message-id"
article)
(buffer-string))
- "\n")))
- folder)
+ "\n"))))
(pop-to-buffer show-buf)))
(defun org-open-file (path &optional in-emacs line search)
@@ -10440,6 +10444,45 @@ The list contains HTML entities for Latin-1, Greek and other symbols.
It is supplemented by a number of commonly used TeX macros with appropriate
translations. There is currently no way for users to extend this.")
+(defun org-cleaned-string-for-export (string)
+ "Cleanup a buffer substring so that links can be created safely."
+ (interactive)
+ (let* ((cb (current-buffer))
+ (re-radio (concat "\\([^<]\\)\\(" org-target-link-regexp "\\)"))
+ rtn)
+ (save-excursion
+ (set-buffer (get-buffer-create " org-mode-tmp"))
+ (erase-buffer)
+ (insert string)
+ (org-mode)
+ ;; Find targets in comments and move them out of comments
+ (goto-char (point-min))
+ (while (re-search-forward "^#.*?\\(<<<?[^>\r\n]+>>>?\\).*" nil t)
+ (replace-match "\\1"))
+ ;; Find matches for radio targets and turn them into links
+ (goto-char (point-min))
+ (while (re-search-forward re-radio nil t)
+ (replace-match "\\1[[\\2]]"))
+ ;; Find all links that contain a newline and put them into a single line
+ (goto-char (point-min))
+ (while (re-search-forward "\\(\\[\\[[^]]*?\\)[ \t]*\n[ \t]*\\([^]]*\\]\\]\\)" nil t)
+ (replace-match "\\1 \\2")
+ (goto-char (match-beginning 0)))
+ ;; Remove comments
+ (goto-char (point-min))
+ (while (re-search-forward "^#.*\n?" nil t)
+ (replace-match ""))
+ (setq rtn (buffer-string)))
+ (kill-buffer " org-mode-tmp")
+ rtn))
+
+(defun org-solidify-link-text (s)
+ "Take link text and make a safe target out of it."
+ (save-match-data
+ (mapconcat
+ 'identity
+ (org-split-string s "[ \t\r\n]+") "--")))
+
(defvar org-last-level nil) ; dynamically scoped variable
(defun org-export-as-ascii (arg)
@@ -10454,7 +10497,10 @@ underlined headlines. The default is 3."
(if (org-region-active-p) (region-beginning) (point-min))
(if (org-region-active-p) (region-end) (point-max))))
(lines (org-export-find-first-heading-line
- (org-skip-comments (org-split-string region "[\r\n]"))))
+ (org-skip-comments
+ (org-split-string
+ (org-cleaned-string-for-export region)
+ "[\r\n]"))))
(org-startup-with-deadline-check nil)
(level 0) line txt
(umax nil)
@@ -10543,6 +10589,14 @@ underlined headlines. The default is 3."
(while (setq line (pop lines))
;; Remove the quoted HTML tags.
(setq line (org-html-expand-for-ascii line))
+ ;; Remove targets
+ (while (string-match "<<<?[^<>]*>>>?[ \t]*\n?" line)
+ (setq line (replace-match "" t t line)))
+ ;; Replace internal links
+ (while (string-match org-bracket-link-regexp line)
+ (setq line (replace-match
+ (if (match-end 3) "[\\3]" "[\\1]")
+ t nil line)))
(cond
((string-match "^\\(\\*+\\)[ \t]*\\(.*\\)" line)
;; a Headline
@@ -10781,7 +10835,9 @@ headlines. The default is 3. Lower levels will become bulleted lists."
(if region-p (region-beginning) (point-min))
(if region-p (region-end) (point-max))))
(all_lines
- (org-skip-comments (org-split-string region "[\r\n]")))
+ (org-skip-comments (org-split-string
+ (org-cleaned-string-for-export region)
+ "[\r\n]")))
(lines (org-export-find-first-heading-line all_lines))
(level 0) (line "") (origline "") txt todo
(umax nil)
@@ -10944,7 +11000,26 @@ headlines. The default is 3. Lower levels will become bulleted lists."
(insert "</pre>\n"))
(throw 'nextline nil))
- ;; Protect the links
+
+ ;; make targets to anchors
+ (while (string-match "<<<?\\([^<>]*\\)>>>?[ \t]*\n?" line)
+ (setq line (replace-match
+ (concat "@<a name=\""
+ (org-solidify-link-text (match-string 1 line))
+ "\">\\nbsp@</a>")
+ t t line)))
+ ;; Replace internal links
+ (while (string-match org-bracket-link-regexp line)
+ (setq line (replace-match
+ (concat
+ "@<a href=\"#"
+ (org-solidify-link-text (match-string 1 line))
+ "\">"
+ (match-string (if (match-end 3) 3 1) line)
+ "@</a>")
+ t t line)))
+
+ ;; Protect the external links
(setq start 0)
(while (string-match org-link-maybe-angles-regexp line start)
(setq start (match-end 0))
@@ -12363,8 +12438,9 @@ work correctly."
(defun org-add-hook (hook function &optional append local)
"Add-hook, compatible with both Emacsen."
- (if (and local org-xemacs-p) (make-local-hook hook)) ;; Needed for XEmacs
- (add-hook hook function append local))
+ (if (and local org-xemacs-p)
+ (add-local-hook hook function append)
+ (add-hook hook function append local)))
(defun org-region-active-p ()
"Is `transient-mark-mode' on and the region active?