Skip to content

Commit

Permalink
* misc/rdoc-mode.el (rdoc-imenu-create-index): Add imenu support
Browse files Browse the repository at this point in the history
  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
knu committed Jan 22, 2012
1 parent bb19bcf commit e21d7c1
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 11 deletions.
8 changes: 8 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
Mon Jan 23 00:45:34 2012 Akinori MUSHA <[email protected]>

* 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 <[email protected]>

* parse.y (rb_intern3): split to registration check and new
Expand Down
67 changes: 56 additions & 11 deletions misc/rdoc-mode.el
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand All @@ -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.