aboutsummaryrefslogtreecommitdiffstats
path: root/misc/rdoc-mode.el
diff options
context:
space:
mode:
authorknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-01-22 15:56:03 +0000
committerknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-01-22 15:56:03 +0000
commite21d7c12841be9d2ae6166b0c6c09dd752b7e625 (patch)
tree51713eeb1e92726765a185790715160ecf420dfc /misc/rdoc-mode.el
parentbb19bcf93ed0414ebe7542f20f395388d325c157 (diff)
downloadruby-e21d7c12841be9d2ae6166b0c6c09dd752b7e625.tar.gz
* misc/rdoc-mode.el (rdoc-imenu-create-index): Add imenu support
to rdoc-mode. * misc/rdoc-mode.el (rdoc-mode): Fix regexp patterns containing "\s " where CR/LF is not supposed to match. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34355 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'misc/rdoc-mode.el')
-rw-r--r--misc/rdoc-mode.el67
1 files changed, 56 insertions, 11 deletions
diff --git a/misc/rdoc-mode.el b/misc/rdoc-mode.el
index a5fea70ce3..ec715798ae 100644
--- a/misc/rdoc-mode.el
+++ b/misc/rdoc-mode.el
@@ -12,7 +12,7 @@
"Major mode for RD editing.
\\{rdoc-mode-map}"
(make-local-variable 'paragraph-separate)
- (setq paragraph-separate "^\\(=+\\|\\*+\\)\\s \\|^\\s *$")
+ (setq paragraph-separate "^\\(=+\\|\\*+\\)[ \t\v\f]*\\|^\\s *$")
(make-local-variable 'paragraph-start)
(setq paragraph-start paragraph-separate)
(make-local-variable 'require-final-newline)
@@ -22,7 +22,7 @@
(make-local-variable 'font-lock-keywords)
(setq font-lock-keywords rdoc-font-lock-keywords)
(make-local-variable 'outline-regexp)
- (setq outline-regexp "^\\(=+\\)\\s ")
+ (setq outline-regexp "^\\(=+\\)[ \t\v\f]*")
(outline-minor-mode t)
(setq show-trailing-whitespace t)
(rdoc-setup-keys)
@@ -56,19 +56,19 @@
(defvar rdoc-font-lock-keywords
(list
- (list "^= .*$"
+ (list "^=([^=\r\n].*)?$"
0 rdoc-heading1-face)
- (list "^== .*$"
+ (list "^==([^=\r\n].*)?$"
0 rdoc-heading2-face)
- (list "^=== .*$"
+ (list "^===([^=\r\n].*)?$"
0 rdoc-heading3-face)
- (list "^=====* .*$"
+ (list "^====+.*$"
0 rdoc-heading4-face)
- (list "\\(^\\|\\s \\)\\(\\*\\(\\sw\\|[-_:]\\)+\\*\\)\\($\\|\\s \\)"
+ (list "\\(^\\|[ \t\v\f]\\)\\(\\*\\(\\sw\\|[-_:]\\)+\\*\\)\\($\\|[ \t\v\f]\\)"
2 rdoc-bold-face) ; *bold*
- (list "\\(^\\|\\s \\)\\(_\\(\\sw\\|[-_:]\\)+_\\)\\($\\|\\s \\)"
+ (list "\\(^\\|[ \t\v\f]\\)\\(_\\(\\sw\\|[-_:]\\)+_\\)\\($\\|[ \t\v\f]\\)"
2 rdoc-emphasis-face) ; _emphasis_
- (list "\\(^\\|\\s \\)\\(\\+\\(\\sw\\|[-_:]\\)+\\+\\)\\($\\|\\s \\)"
+ (list "\\(^\\|[ \t\v\f]\\)\\(\\+\\(\\sw\\|[-_:]\\)+\\+\\)\\($\\|[ \t\v\f]\\)"
2 rdoc-code-face) ; +code+
(list "<em>[^<>]*</em>" 0 rdoc-emphasis-face)
(list "<i>[^<>]*</i>" 0 rdoc-emphasis-face)
@@ -77,9 +77,54 @@
(list "<code>[^<>]*</code>" 0 rdoc-code-face)
(list "^\\([-*]\\|[0-9]+\\.\\|[A-Za-z]\\.\\)\\s "
1 rdoc-description-face) ; bullet | numbered | alphabetically numbered
- (list "^\\[[^\]]*\\]\\|\\S .*::\\)\\(\\s \\|$\\)"
+ (list "^\\[[^\]]*\\]\\|\\S .*::\\)\\([ \t\v\f]\\|$\\)"
1 rdoc-description-face) ; labeled | node
- ;(list "^\\s +\\(.*\\)" 1 rdoc-verbatim-face)
+ ;(list "^[ \t\v\f]+\\(.*\\)" 1 rdoc-verbatim-face)
))
+(defun rdoc-imenu-create-index ()
+ (let ((root '(nil . nil))
+ cur-alist
+ (cur-level 0)
+ (pattern (concat outline-regexp "\\(.*?\\)[ \t\v\f]*$"))
+ (empty-heading "-")
+ (self-heading ".")
+ pos level heading alist)
+ (save-excursion
+ (goto-char (point-min))
+ (while (re-search-forward pattern (point-max) t)
+ (setq heading (match-string-no-properties 2)
+ level (min 6 (length (match-string-no-properties 1)))
+ pos (match-beginning 1))
+ (if (= (length heading) 0)
+ (setq heading empty-heading))
+ (setq alist (list (cons heading pos)))
+ (cond
+ ((= cur-level level) ; new sibling
+ (setcdr cur-alist alist)
+ (setq cur-alist alist))
+ ((< cur-level level) ; first child
+ (dotimes (i (- level cur-level 1))
+ (setq alist (list (cons empty-heading alist))))
+ (if cur-alist
+ (let* ((parent (car cur-alist))
+ (self-pos (cdr parent)))
+ (setcdr parent (cons (cons self-heading self-pos) alist)))
+ (setcdr root alist)) ; primogenitor
+ (setq cur-alist alist
+ cur-level level))
+ (t ; new sibling of an ancestor
+ (let ((sibling-alist (last (cdr root))))
+ (dotimes (i (1- level))
+ (setq sibling-alist (last (cdar sibling-alist))))
+ (setcdr sibling-alist alist)
+ (setq cur-alist alist
+ cur-level level))))))
+ (cdr root)))
+
+(defun rdoc-set-imenu-create-index-function ()
+ (setq imenu-create-index-function 'rdoc-imenu-create-index))
+
+(add-hook 'rdoc-mode-hook 'rdoc-set-imenu-create-index-function)
+
(provide 'rdoc-mode)