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 "")))))))