aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArtur Malabarba <bruce.connor.am@gmail.com>2014-12-18 17:45:42 -0200
committerArtur Malabarba <bruce.connor.am@gmail.com>2014-12-22 10:46:41 -0200
commitf97bc0633c6803e2f2f7a46d8c814f1bc2763b66 (patch)
tree0f2dff82c1cf440e3e11a5a6ad482f4dc4ad587e
parent44ee0f1369e00db9aadd2985e1968573ee873a22 (diff)
Refactor and simplify sx-question-mode--skip-FOO functions.
They no longer need to worry about restoring point. Just move point to its destination and return non-nil if it worked.
-rw-r--r--sx-question-print.el53
1 files changed, 19 insertions, 34 deletions
diff --git a/sx-question-print.el b/sx-question-print.el
index 6fa84a9..5fcf015 100644
--- a/sx-question-print.el
+++ b/sx-question-print.el
@@ -373,19 +373,19 @@ E.g.:
(defun sx-question-mode--dont-fill-here ()
"If text shouldn't be filled here, return t and skip over it."
- (or (sx-question-mode--skip-and-fontify-pre)
- (sx-question-mode--skip-comments)
- ;; Skip headers and references
- (let ((pos (point)))
- (skip-chars-forward "\r\n[:blank:]")
- (goto-char (line-beginning-position))
- (if (or (looking-at-p (format sx-question-mode--reference-regexp ".+"))
- (looking-at-p "^#"))
- ;; Returns non-nil
- (forward-paragraph)
- ;; Go back and return nil
- (goto-char pos)
- nil))))
+ (catch 'sx-question-mode-done
+ (let ((before (point)))
+ (skip-chars-forward "\r\n[:blank:]")
+ (let ((first-non-blank (point)))
+ (dolist (it '(sx-question-mode--skip-and-fontify-pre
+ sx-question-mode--skip-comments))
+ ;; If something worked, keep point where it is and return t.
+ (if (funcall it) (throw 'sx-question-mode-done t)
+ ;; Before calling each new function. Go back to the first
+ ;; non-blank char.
+ (goto-char first-non-blank)))
+ ;; If nothing matched, go back to the very beginning.
+ (goto-char before)))))
(defun sx-question-mode--process-links-in-buffer ()
"Turn all markdown links in this buffer into compact format."
@@ -434,32 +434,17 @@ If ID is nil, use FALLBACK-ID instead."
"If there's a pre block ahead, handle it, skip it and return t.
Handling means to turn it into a button and remove erroneous
font-locking."
- (let ((before (point))
- beg end)
- (if (markdown-match-pre-blocks
- (save-excursion
- (skip-chars-forward "\r\n[:blank:]")
- (setq beg (point))))
- (progn
- (setq end (point))
- (sx-babel--make-pre-button
- (save-excursion
- (goto-char beg)
- (line-beginning-position))
- end))
- (goto-char before)
- nil)))
+ (let ((beg (line-beginning-position)))
+ ;; To identify code-blocks we need to be at start of line.
+ (goto-char beg)
+ (when (markdown-match-pre-blocks (line-end-position))
+ (sx-babel--make-pre-button beg (point)))))
(defun sx-question-mode--skip-comments ()
"If there's an html comment ahead, skip it and return t."
;; @TODO: Handle the comment.
;; "Handling means to store any relevant metadata it might be holding."
- (let ((before (point)))
- (skip-chars-forward "\r\n[:blank:]")
- (if (markdown-match-comments (line-end-position))
- t
- (goto-char before)
- nil)))
+ (markdown-match-comments (line-end-position)))
(provide 'sx-question-print)
;;; sx-question-print.el ends here