* lisp/progmodes/ruby-mode.el (ruby-forward-string): Document.
authorCameron Desautels <camdez@gmail.com>
Mon, 9 Dec 2013 03:43:34 +0000 (05:43 +0200)
committerDmitry Gutov <dgutov@yandex.ru>
Mon, 9 Dec 2013 03:43:34 +0000 (05:43 +0200)
Handle caret-delimited strings.

Fixes: debbugs:16079

lisp/ChangeLog
lisp/progmodes/ruby-mode.el

index 2e36fdb..6e26318 100644 (file)
@@ -1,3 +1,8 @@
+2013-12-09  Cameron Desautels  <camdez@gmail.com>  (tiny change)
+
+       * progmodes/ruby-mode.el (ruby-forward-string): Document.  Handle
+       caret-delimited strings (Bug#16079).
+
 2013-12-09  Dmitry Gutov  <dgutov@yandex.ru>
 
        * progmodes/ruby-mode.el (ruby-accurate-end-of-block): When
index 0f5a2a5..fe36e72 100644 (file)
@@ -795,11 +795,28 @@ Can be one of `heredoc', `modifier', `expr-qstr', `expr-re'."
                   (t nil)))))))))
 
 (defun ruby-forward-string (term &optional end no-error expand)
-  "TODO: document."
+  "Move forward across one balanced pair of string delimiters.
+Skips escaped delimiters. If EXPAND is non-nil, also ignores
+delimiters in interpolated strings.
+
+TERM should be a string containing either a single, self-matching
+delimiter (e.g. \"/\"), or a pair of matching delimiters with the
+close delimiter first (e.g. \"][\").
+
+When non-nil, search is bounded by position END.
+
+Throws an error if a balanced match is not found, unless NO-ERROR
+is non-nil, in which case nil will be returned.
+
+This command assumes the character after point is an opening
+delimiter."
   (let ((n 1) (c (string-to-char term))
-        (re (if expand
-                (concat "[^\\]\\(\\\\\\\\\\)*\\([" term "]\\|\\(#{\\)\\)")
-              (concat "[^\\]\\(\\\\\\\\\\)*[" term "]"))))
+        (re (concat "[^\\]\\(\\\\\\\\\\)*\\("
+                    (if (string= term "^") ;[^] is not a valid regexp
+                        "\\^"
+                      (concat "[" term "]"))
+                    (when expand "\\|\\(#{\\)")
+                    "\\)")))
     (while (and (re-search-forward re end no-error)
                 (if (match-beginning 3)
                     (ruby-forward-string "}{" end no-error nil)