* toogle block not perfect, but more or less working

This commit is contained in:
capitaomorte 2010-04-06 17:12:08 +00:00
parent 900e9b7cec
commit 455f044382

View File

@ -21,24 +21,60 @@
(interactive) (interactive)
(let* ((do-block-start (save-excursion (let* ((do-block-start (save-excursion
(ruby-beginning-of-block) (ruby-beginning-of-block)
(when (looking-at ".*[^\w]\\(do\\)[^\w]\\(|.*|\\)?") (when (search-forward-regexp ".*[^\w]\\(do\\)[^\w]\\(|.*|\\)?" nil t)
(point)))) (match-beginning 1))))
(brace-block-start (save-excursion (brace-block-start (condition-case nil
(condition-case nil (let ((syntax-info (syntax-ppss)))
(if (fourth syntax-info)
(goto-char (ninth syntax-info)))
(while (progn (up-list -1) (not (eq (char-after) ?{)))) (while (progn (up-list -1) (not (eq (char-after) ?{))))
(point)) (point))
(error nil)))) (error nil)))
(block-region))
(if (and do-block-start brace-block-start) (if (and do-block-start brace-block-start)
(if (< do-block-start brace-block-start) (if (< do-block-start brace-block-start)
(setq do-block-start nil) (setq do-block-start nil)
(setq brace-block-start nil))) (setq brace-block-start nil)))
(cond (do-block-start (cond (do-block-start
(message "found a do block")
(goto-char do-block-start)
(ruby-end-of-block) (ruby-end-of-block)
(forward-word) (setq block-region (buffer-substring (+ 2 do-block-start) (point)))
(insert "}") (delete-region do-block-start (+ 3(point)))
(goto-char do-block-start)) (insert "{")
(mapc #'(lambda (string)
(let* ((chomped (replace-regexp-in-string "^[\s\t]*\\(.*\\)[\s\t]*$" "\\1" string))
(lastchar (and (not (zerop (length chomped)))
(aref chomped (1- (length chomped))))))
(when lastchar
(insert " " chomped)
(unless (member lastchar '(?;
?|))
(insert ";")))))
(split-string block-region "\n"))
(insert " }")
(backward-char 1))
(brace-block-start (brace-block-start
)))) (message "found a brace block")
(goto-char brace-block-start)
(forward-sexp)
(setq block-region (buffer-substring (+ 1 brace-block-start) (1- (point))))
(delete-region brace-block-start (point))
(insert "do")
(when (string-match "\\(|.*|\\).*" block-region)
(insert " " (match-string 1 block-region))
(setq block-region (substring block-region (match-end 1))))
(mapc #'(lambda (string)
(let* ((chomped (replace-regexp-in-string "^[\s\t]*\\(.*\\)[\s\t]*$" "\\1" string)))
(unless (zerop (length chomped))
(insert "\n" chomped)
(indent-according-to-mode))))
(split-string block-region ";"))
(insert "\nend")
(backward-char 3)
(indent-according-to-mode))
(t
(message "found no block at all")))))
(defvar yas/ruby-require-regexps (defvar yas/ruby-require-regexps
'(("abbrev" . ("abbrev")) '(("abbrev" . ("abbrev"))
@ -178,6 +214,7 @@
;; ${1/([\w&&[^_]]+)|./\u$1/g} =yyas> ${1:$(replace-regexp-in-string "[_/]" "" (capitalize yas/text))} ;; ${1/([\w&&[^_]]+)|./\u$1/g} =yyas> ${1:$(replace-regexp-in-string "[_/]" "" (capitalize yas/text))}
;; ;;
;; 0F940CBC-2173-49FF-B6FD-98A62863F8F2 =yyas> (yas/ruby-wrap-in-begin-rescue) ;; 0F940CBC-2173-49FF-B6FD-98A62863F8F2 =yyas> (yas/ruby-wrap-in-begin-rescue)
;; 7990EE60-C850-4779-A8C0-7FD2C853B99B =yyas> (yas/ruby-toggle-single-multi-line-block)
;; 7E084412-80E6-4B70-8092-C03D1ECE4CD2 =yyas> (yas/ruby-require "eac")(yas/expand-uuid 'ruby-mode "FDD73070-6D32-4301-A86A-C55B77C3D8ED") ;; 7E084412-80E6-4B70-8092-C03D1ECE4CD2 =yyas> (yas/ruby-require "eac")(yas/expand-uuid 'ruby-mode "FDD73070-6D32-4301-A86A-C55B77C3D8ED")
;; ;;
@ -660,7 +697,6 @@
;; DAA69A0C-FC1E-4509-9931-DFFB38B4D6AE =yyas> (yas/unknown) ;; DAA69A0C-FC1E-4509-9931-DFFB38B4D6AE =yyas> (yas/unknown)
;; ;;
;; # as in Macros/Toggle Single Multi Line Block.yasnippet ;; # as in Macros/Toggle Single Multi Line Block.yasnippet
;; 7990EE60-C850-4779-A8C0-7FD2C853B99B =yyas> (yas/unknown)
;; ;;
;; # as in Commands/Omit from RDoc.yasnippet ;; # as in Commands/Omit from RDoc.yasnippet
;; BF4CA9F1-51CD-48D4-8357-852234F59046 =yyas> (yas/unknown) ;; BF4CA9F1-51CD-48D4-8357-852234F59046 =yyas> (yas/unknown)