From 2d1c5d2c248938d0a957c2c811fcb40b7cf81e0b Mon Sep 17 00:00:00 2001 From: matz Date: Sat, 6 Sep 2008 22:30:34 +0000 Subject: [PATCH] * misc/*.el: merged the following patches from Nathan Weizenbaum . [ruby-core:18424] * misc/ruby-mode.el: improve here-doc performance. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19202 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ misc/ruby-mode.el | 26 +++++++++++++------------- misc/ruby-style.el | 14 +++++++------- 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6a7c2f9ab2..76348cd6f4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sun Sep 7 07:24:09 2008 Yukihiro Matsumoto + + * misc/*.el: merged the following patches from Nathan Weizenbaum + . [ruby-core:18424] + + * misc/ruby-mode.el: improve here-doc performance. + Sun Sep 7 06:31:51 2008 Yukihiro Matsumoto * file.c (file_expand_path): applied a patch from Nobuhiro Tachino diff --git a/misc/ruby-mode.el b/misc/ruby-mode.el index 1eeaa6575f..a2755f44e0 100644 --- a/misc/ruby-mode.el +++ b/misc/ruby-mode.el @@ -68,8 +68,8 @@ (let ((match (match-string 1))) (if (and match (> (length match) 0)) (concat "\\(?:-\\([\"']?\\)\\|\\([\"']\\)" (match-string 1) "\\)" - contents "\\(\\1\\|\\2\\)") - (concat "-?\\([\"']\\|\\)" contents "\\1")))))) + contents "\\b\\(\\1\\|\\2\\)") + (concat "-?\\([\"']\\|\\)" contents "\\b\\1")))))) (defconst ruby-delimiter (concat "[?$/%(){}#\"'`.:]\\|<<\\|\\[\\|\\]\\|\\<\\(" @@ -1179,17 +1179,17 @@ buffer position `limit' or the end of the buffer." (string-to-syntax "|")))) (defun ruby-here-doc-end-syntax () - (save-excursion - (goto-char (match-end 0)) - (let ((old-point (point)) - (beg-exists (re-search-backward (ruby-here-doc-beg-match) nil t)) - (eol (save-excursion (end-of-line) (point)))) - (if (and beg-exists ; If there is a heredoc that matches this line... - (null (syntax-ppss-context (syntax-ppss))) ; And that's not inside a heredoc/string/comment... - (progn (goto-char (match-end 0)) ; And it's the last heredoc on its line... - (not (re-search-forward ruby-here-doc-beg-re eol t))) - (eq old-point (ruby-here-doc-find-end old-point))) ; And it ends at this point... - (string-to-syntax "|"))))) + (let ((pss (syntax-ppss))) + (when (eq (syntax-ppss-context pss) 'string) + (save-excursion + (goto-char (nth 8 pss)) + (let ((eol (point))) + (beginning-of-line) + (if (and (re-search-forward (ruby-here-doc-beg-match) eol t) ; If there is a heredoc that matches this line... + (null (syntax-ppss-context (syntax-ppss))) ; And that's not inside a heredoc/string/comment... + (progn (goto-char (match-end 0)) ; And it's the last heredoc on its line... + (not (re-search-forward ruby-here-doc-beg-re eol t)))) + (string-to-syntax "|"))))))) (if (featurep 'xemacs) (put 'ruby-mode 'font-lock-defaults diff --git a/misc/ruby-style.el b/misc/ruby-style.el index 1915419056..b99e71b35c 100644 --- a/misc/ruby-style.el +++ b/misc/ruby-style.el @@ -21,7 +21,7 @@ (save-excursion (back-to-indentation) (unless (progn (backward-up-list) (back-to-indentation) - (> (point) (cdr x))) + (> (point) (cdr x))) (goto-char (cdr x)) (if (looking-at "\\") '*)))) @@ -29,14 +29,14 @@ (save-excursion (back-to-indentation) (unless (progn (backward-up-list) (back-to-indentation) - (>= (point) (cdr x))) + (>= (point) (cdr x))) (goto-char (cdr x)) (condition-case () - (progn - (backward-up-list) - (backward-sexp 2) - (if (looking-at "\\") '/)) - (error))))) + (progn + (backward-up-list) + (backward-sexp 2) + (if (looking-at "\\") '/)) + (error))))) (require 'cc-styles) (c-add-style