improved xact iteration so fontify-whole-buffer doesn't miss xact separated by more than a single empty line

This commit is contained in:
Craig Earls 2014-09-04 22:31:34 -07:00
parent 91fc39c68d
commit d3d5c333f5
2 changed files with 30 additions and 4 deletions

View file

@ -40,14 +40,14 @@
(save-excursion
(message "Ledger fontify whole buffer")
(goto-char (point-min))
(while (not (eobp))
(cond ((looking-at ledger-xact-start-regex)
(cond ((looking-at ledger-xact-start-regex)
(ledger-fontify-xact-at (point)))
((looking-at ledger-directive-start-regex)
(ledger-fontify-directive-at (point))))
(forward-paragraph)
(forward-char))))
(ledger-xact-next-xact-or-directive) ;; gets to beginning of next xact
)))
(defun ledger-fontify-activate ()
"add hook to fontify after buffer changes"

View file

@ -206,6 +206,32 @@ correct chronological place in the buffer."
(insert (car args) " \n\n")
(end-of-line -1)))))
(defun ledger-xact-start-xact-or-directive-p ()
"return t if at the beginning of an empty line or line
beginning with whitespace"
(not (looking-at "[ \t]\\|\\(^$\\)")))
(defun ledger-xact-next-xact-or-directive ()
"move to the beginning of the next xact"
(interactive)
(beginning-of-line)
(if (ledger-xact-start-xact-or-directive-p) ; if we are the start of an xact, move forward to the next xact
(progn
(forward-line)
(if (not (ledger-xact-start-xact-or-directive-p)) ; we have moved forward and are not at another xact, recurse forward
(ledger-xact-next-xact-or-directive)))
(while (not (or (eobp) ; we didn't start off at the beginning of an xact
(ledger-xact-start-xact-or-directive-p)))
(forward-line))))
(defun ledger-xact-next-xact ()
(interactive)
(beginning-of-line)
(if (looking-at ledger-xact-start-regex)
(forward-line))
(re-search-forward ledger-xact-start-regex)
(forward-line -1))
(provide 'ledger-xact)