Function: verilog-pretty-declarations
verilog-pretty-declarations is an interactive and byte-compiled
function defined in verilog-mode.el.gz.
Signature
(verilog-pretty-declarations &optional QUIET)
Documentation
Line up declarations around point.
Be verbose about progress unless optional QUIET set.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/verilog-mode.el.gz
(defun verilog-pretty-declarations (&optional quiet)
"Line up declarations around point.
Be verbose about progress unless optional QUIET set."
(interactive)
(let* ((m1 (make-marker))
(e (point))
el
r
(here (point))
ind
start
startpos
end
endpos
base-ind
)
(save-excursion
(if (progn
;; (verilog-beg-of-statement-1)
(beginning-of-line)
(verilog-forward-syntactic-ws)
(and (not (verilog-in-directive-p)) ; could have `define input foo
(looking-at verilog-declaration-re)))
(progn
(if (verilog-parenthesis-depth)
;; in an argument list or parameter block
(setq el (verilog-backward-up-list -1)
start (progn
(goto-char e)
(verilog-backward-up-list 1)
(forward-line) ; ignore ( input foo,
(verilog-re-search-forward verilog-declaration-re el 'move)
(goto-char (match-beginning 0))
(skip-chars-backward " \t")
(point))
startpos (set-marker (make-marker) start)
end (progn
(goto-char start)
(verilog-backward-up-list -1)
(forward-char -1)
(verilog-backward-syntactic-ws)
(point))
endpos (set-marker (make-marker) end)
base-ind (progn
(goto-char start)
(forward-char 1)
(skip-chars-forward " \t")
(current-column)))
;; in a declaration block (not in argument list)
(setq
start (progn
(verilog-beg-of-statement-1)
(while (and (looking-at verilog-declaration-re)
(not (bobp)))
(skip-chars-backward " \t")
(setq e (point))
(beginning-of-line)
(verilog-backward-syntactic-ws)
(backward-char)
(verilog-beg-of-statement-1))
e)
startpos (set-marker (make-marker) start)
end (progn
(goto-char here)
(verilog-end-of-statement)
(setq e (point)) ;Might be on last line
(verilog-forward-syntactic-ws)
(while (looking-at verilog-declaration-re)
(verilog-end-of-statement)
(setq e (point))
(verilog-forward-syntactic-ws))
e)
endpos (set-marker (make-marker) end)
base-ind (progn
(goto-char start)
(verilog-do-indent (verilog-calculate-indent))
(verilog-forward-ws&directives)
(current-column))))
;; OK, start and end are set
(goto-char (marker-position startpos))
(if (and (not quiet)
(> (- end start) 100))
(message "Lining up declarations..(please stand by)"))
;; Get the beginning of line indent first
(while (progn (setq e (marker-position endpos))
(< (point) e))
(cond
((save-excursion (skip-chars-backward " \t")
(bolp))
(verilog-forward-ws&directives)
(indent-line-to base-ind)
(verilog-forward-ws&directives)
(if (< (point) e)
(verilog-re-search-forward "[ \t\n\f]" e 'move)))
(t
(just-one-space)
(verilog-re-search-forward "[ \t\n\f]" e 'move)))
;;(forward-line)
)
;; Now find biggest prefix
(setq ind (verilog-get-lineup-indent (marker-position startpos) endpos))
;; Now indent each line.
(goto-char (marker-position startpos))
(while (progn (setq e (marker-position endpos))
(setq r (- e (point)))
(> r 0))
(setq e (point))
(unless quiet (message "%d" r))
;; (verilog-do-indent (verilog-calculate-indent)))
(verilog-forward-ws&directives)
(cond
((or (and verilog-indent-declaration-macros
(looking-at verilog-declaration-re-2-macro))
(looking-at verilog-declaration-re-2-no-macro))
(let ((p (match-end 0)))
(set-marker m1 p)
(if (verilog-re-search-forward "[[#`]" p 'move)
(progn
(forward-char -1)
(just-one-space)
(goto-char (marker-position m1))
(delete-horizontal-space)
(indent-to ind 1))
(progn
(delete-horizontal-space)
(indent-to ind 1)))))
((verilog-continued-line-1 (marker-position startpos))
(goto-char e)
(indent-line-to ind))
((verilog-in-struct-p)
;; could have a declaration of a user defined item
(goto-char e)
(verilog-end-of-statement))
(t ; Must be comment or white space
(goto-char e)
(verilog-forward-ws&directives)
(forward-line -1)))
(forward-line 1))
(unless quiet (message "")))))))