From 51a8ea2acf100a3a0ab783632c5fbcdb665a2e14 Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Tue, 24 Apr 2012 12:00:08 -0400 Subject: [PATCH] * lisp/progmodes/ruby-mode.el: Handle Cucumber defs (bug#6286). (ruby-syntax-propertize-regexp): New function. (ruby-syntax-propertize-function): Use it to handle regexp not preceded by a special keyword. --- lisp/ChangeLog | 5 +++++ lisp/progmodes/ruby-mode.el | 20 +++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 03fbfd83255..2328cf99c1a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,10 @@ 2012-04-24 Dmitry Gutov + * progmodes/ruby-mode.el: Handle Cucumber defs (bug#6286). + (ruby-syntax-propertize-regexp): New function. + (ruby-syntax-propertize-function): Use it to handle regexp not preceded + by a special keyword. + * progmodes/ruby-mode.el: Handle general delimited literals (bug#6286). (ruby-syntax-general-delimiters-goto-beg) (ruby-syntax-propertize-general-delimiters): New functions. diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 05a4042b67d..8818911159b 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -1131,9 +1131,8 @@ See `add-log-current-defun-function'." (nth 3 (syntax-ppss (match-beginning 0)))) (string-to-syntax "\\")))) ;; regexps - ("\\(^\\|[[=(,~?:;<>]\\|\\(^\\|\\s \\)\\(if\\|elsif\\|unless\\|while\\|until\\|when\\|and\\|or\\|&&\\|||\\)\\|g?sub!?\\|scan\\|split!?\\)\\s *\\(/\\)[^/\n\\\\]*\\(\\\\.[^/\n\\\\]*\\)*\\(/\\)" - (4 "\"/") - (6 "\"/")) + ("\\(^\\|[[=(,~?:;<>]\\|\\(?:^\\|\\s \\)\\(?:if\\|elsif\\|unless\\|while\\|until\\|when\\|and\\|or\\|&&\\|||\\)\\|g?sub!?\\|scan\\|split!?\\)?\\s *\\(/\\)[^/\n\\\\]*\\(?:\\\\.[^/\n\\\\]*\\)*\\(/\\)" + (2 (ruby-syntax-propertize-regexp))) ("^=en\\(d\\)\\_>" (1 "!")) ("^\\(=\\)begin\\_>" (1 "!")) ;; Handle here documents. @@ -1144,6 +1143,21 @@ See `add-log-current-defun-function'." (1 (prog1 "|" (ruby-syntax-propertize-general-delimiters end))))) (point) end)) + (defun ruby-syntax-propertize-regexp () + (let ((syn (string-to-syntax "\"/"))) + (goto-char (match-end 3)) + (if (or + ;; after paren, comma, operator, control flow keyword, + ;; or a method from hardcoded list + (match-beginning 1) + ;; followed by comma or block + (looking-at "[imxo]*\\s *\\(?:,\\|\\\\)")) + (progn + (put-text-property (1- (point)) (point) + 'syntax-table syn) + syn) + (goto-char (match-end 2))))) + (defun ruby-syntax-propertize-heredoc (limit) (let ((ppss (syntax-ppss)) (res '())) -- 2.11.4.GIT