[#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

[PATCH] ruby-mode.el

From: Ryan Pavlik <rpav@...>
Date: 2003-08-21 19:59:02 UTC
List: ruby-core #1447
Attached is a patch for ruby-mode.el that adds font hilighting for
<<HERE documents, as well as identation handling that's identical to
=begin/=end.  (That's where I stole the code from. ;)

I'd actually like to have nicer indentation handling, but I'm afraid I
don't quite get how ruby-calculate-indent works. ;-)  If someone had a
pointer or two, I'd like to try making it work somewhat like text-mode.

Anyhow, here's what I've got currently.

-- 
Ryan Pavlik <rpav@users.sf.net>

"Let super-dimensional physics take its course!" - 8BT

Attachments (1)

ruby-mode.el.patch (2.04 KB, text/x-diff)
--- ruby-mode.el	2003-08-21 11:52:27.000000000 -0700
+++ ruby-mode.el-rpav	2003-08-21 12:38:50.000000000 -0700
@@ -61,7 +61,7 @@
   (concat "[?$/%(){}#\"'`.:]\\|\\[\\|\\]\\|\\<\\("
 	  ruby-block-beg-re
 	  "\\|" ruby-block-end-re
-	  "\\)\\>\\|^=begin")
+	  "\\)\\>\\|^=begin\\|\\<\\<[-]?[\"']?\\([A-Z]+\\)[\"']?")
   )
 
 (defconst ruby-negative
@@ -452,6 +452,11 @@
 		    (forward-line 1)
 		  (setq in-string (match-end 0))
 		  (goto-char indent-point)))
+	       ((looking-at "\\<\\<[-]?[\"']?\\([A-Z]+\\)[\"']?")
+		(if (re-search-forward (match-string 1) indent-point t)
+		    (forward-line 1)
+		  (setq in-string (match-end 0))
+		  (goto-char indent-point)))
 	       (t
 		(error (format "bad string %s"
 			       (buffer-substring (point) pnt)
@@ -775,6 +780,33 @@
 	    t)
 	nil)))
 
+  (defun ruby-font-lock-here-docs (limit)
+    (if (re-search-forward "\\<\\<[-]?[\"']?\\([A-Z]+\\)[\"']?" limit t)
+	(let (beg)
+	  (beginning-of-line)
+          (forward-line)
+	  (setq beg (point))
+	  (forward-line 1)
+	  (if (re-search-forward (match-string 1) 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 "\\<\\<[-]?[\"']?\\([A-Z]+\\)[\"']?" nil t)
+	    (progn
+	      (beginning-of-line)
+              (forward-line)
+	      (setq beg (point)))))
+      (if (and beg (re-search-forward (match-string 1) nil t))
+	  (progn
+	    (set-match-data (list beg (point)))
+	    t)
+	nil)))
+
+
   (defvar ruby-font-lock-keywords
     (list
      (cons (concat
@@ -833,6 +865,13 @@
        0 font-lock-comment-face t)
      '(ruby-font-lock-maybe-docs
        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)
+     '("\\(\\<\\<[-]?[\"']?[A-Z]+[\"']?\\)"
+       1 font-lock-string-face t)
      ;; constants
      '("\\(^\\|[^_]\\)\\b\\([A-Z]+\\(\\w\\|_\\)*\\)"
        2 font-lock-type-face)

In This Thread

Prev Next