Browse files

* 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
  • Loading branch information...
1 parent bb19bcf commit e21d7c12841be9d2ae6166b0c6c09dd752b7e625 @knu knu committed Jan 22, 2012
Showing with 64 additions and 11 deletions.
  1. +8 −0 ChangeLog
  2. +56 −11 misc/rdoc-mode.el
View
8 ChangeLog
@@ -1,3 +1,11 @@
+Mon Jan 23 00:45:34 2012 Akinori MUSHA <knu@iDaemons.org>
+
+ * 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.
+
Sun Jan 22 15:41:26 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
* parse.y (rb_intern3): split to registration check and new
View
67 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)

0 comments on commit e21d7c1

Please sign in to comment.