[#1378] differences between Module and Class ? — Mathieu Bouchard <matju@...>

25 messages 2003/08/11
[#1387] Re: differences between Module and Class ? — matz@... (Yukihiro Matsumoto) 2003/08/12

Hi,

[#1442] Re: differences between Module and Class ? — Mathieu Bouchard <matju@...> 2003/08/21

[#1406] _id2ref bug? — Ryan Pavlik <rpav@...>

While debugging some caching code, I've come across a segfault related

22 messages 2003/08/14
[#1407] Re: _id2ref bug? — matz@... (Yukihiro Matsumoto) 2003/08/14

Hi,

[#1413] Re: _id2ref bug? (REPRODUCED, short) — Ryan Pavlik <rpav@...> 2003/08/14

On Fri, 15 Aug 2003 01:57:18 +0900

Re: [PATCH] my next attempt... (Was: [PATCH] ruby-mode.el)

From: matz@... (Yukihiro Matsumoto)
Date: 2003-08-23 02:45:31 UTC
List: ruby-core #1467
Hi,

In message "[PATCH] my next attempt... (Was: [PATCH] ruby-mode.el)"
    on 03/08/23, Ryan Pavlik <rpav@mephle.com> writes:

|I did not realize this. :-)  Thanks.  Here's an updated version, plus a
|test-case file that I hope catches most variation.

Nice.  Here's the one I made from the latest CVS.
Can you confirm?

							matz.
Index: ruby-mode.el
===================================================================
RCS file: /src/ruby/misc/ruby-mode.el,v
retrieving revision 1.69
diff -p -u -1 -r1.69 ruby-mode.el
--- ruby-mode.el	15 Apr 2003 15:14:15 -0000	1.69
+++ ruby-mode.el	23 Aug 2003 02:44:17 -0000
@@ -49,2 +49,17 @@
 
+(defconst ruby-here-doc-beg-re
+  (concat "<<\\([-]\\)?\\([a-zA-Z0-9]+\\)\\|"
+          "<<\\([-]\\)?[\"]\\([^\"]+\\)[\"]\\|"
+           "<<\\([-]\\)?[']\\([^']+\\)[']"))
+
+(defun ruby-here-doc-end-match ()
+  (concat "^"
+          (if (or (match-string 1)
+                  (match-string 3)
+                  (match-string 5))
+              "[ \t]*" nil)
+          (or (match-string 2)
+              (match-string 4)
+              (match-string 6))))
+
 (defconst ruby-delimiter
@@ -53,3 +68,3 @@
 	  "\\|" ruby-block-end-re
-	  "\\)\\>\\|^=begin")
+	  "\\)\\>\\|^=begin\\|" ruby-here-doc-beg-re)
   )
@@ -520,2 +535,8 @@ The variable ruby-indent-level controls 
 	(goto-char pnt))
+       ((looking-at ruby-here-doc-beg-re)
+	(if (re-search-forward (ruby-here-doc-end-match)
+			       indent-point t)
+	    (forward-line 1)
+	  (setq in-string (match-end 0))
+	  (goto-char indent-point)))
        (t
@@ -1049,2 +1070,31 @@ balanced expression is found."
 
+  (defun ruby-font-lock-here-docs (limit)
+    (if (re-search-forward ruby-here-doc-beg-re limit t)
+	(let (beg)
+	  (beginning-of-line)
+          (forward-line)
+	  (setq beg (point))
+	  (if (re-search-forward (ruby-here-doc-end-match) nil t)
+	      (progn
+		(set-match-data (list beg (point)))
+		t)))))
+
+  (defun ruby-font-lock-maybe-here-docs (limit)
+    (let (beg)
+      (save-excursion
+	(if (re-search-backward ruby-here-doc-beg-re nil t)
+	    (progn
+	      (beginning-of-line)
+              (forward-line)
+	      (setq beg (point)))))
+      (let ((end-match (ruby-here-doc-end-match)))
+        (if (and beg
+                 (not (re-search-backward end-match beg t))
+                 (re-search-forward end-match nil t))
+            (progn
+              (set-match-data (list beg (point)))
+              t)
+          nil))))
+
+
   (defvar ruby-font-lock-keywords
@@ -1111,2 +1161,9 @@ balanced expression is found."
        0 font-lock-comment-face t)
+     ;; "here" document
+     '(ruby-font-lock-here-docs
+       0 font-lock-string-face t)
+     '(ruby-font-lock-maybe-here-docs
+       0 font-lock-string-face t)
+     `(,ruby-here-doc-beg-re
+       0 font-lock-string-face t)
      ;; constants

In This Thread