dotfiles/comments.el
Tanguy MAZE fa348ac8c1 Let there be light
init commit
2019-03-01 11:44:25 +01:00

211 lines
7.0 KiB
EmacsLisp

;******************************************************************************;
; ;
; comments.el for automatic comments generation ;
; Created on : Fri Oct 21 17:36:51 2011 ;
; Made by : David "Thor" GIRON <thor@epitech.net> ;
; ;
;******************************************************************************;
(require 'string)
(set 'line-std-width 80)
;******************************************************************************;
; ;
; Comments tokens primitives ;
; ;
;******************************************************************************;
(defun comments-start-token ()
"Returns the comment start string of the current mode"
comment-start
)
(defun comments-end-token ()
"Returns the comment end string of the current mode if any, or a
reversed string of the comment start otherwise."
(if (/= (length comment-end) 0)
comment-end
(string-reverse comment-start)
)
)
(defun comments-start-token-length ()
"Returns the length of the comment start string of the current mode."
(string-length (comments-start-token))
)
(defun comments-end-token-length ()
"Returns the length of the comment end string of the current mode."
(string-length (comments-end-token))
)
(defun comments-tokens-length ()
"Returns the total length of the comments tokens."
(+ (comments-start-token-length) (comments-end-token-length))
)
;******************************************************************************;
; ;
; Padding primitives ;
; ;
;******************************************************************************;
(defun comments-compute-left-padding (s-text i-offset)
"Returns a pair (lpad . rpad) for a left padded comments line."
(let* ((i-len (+ (string-length s-text) i-offset))
(i-rpad (- line-std-width i-len (comments-tokens-length))))
(cons 0 i-rpad)
)
)
(defun comments-compute-center-padding (s-text)
"Returns a pair (lpad . rpad) for a center padded comments line."
(let* ((i-len (string-length s-text))
(i-tpad (- line-std-width i-len (comments-tokens-length))))
(if (= (% i-tpad 2) 0)
(cons (/ i-tpad 2) (/ i-tpad 2))
(cons (/ i-tpad 2) (+ (/ i-tpad 2) 1))
)
)
)
(defun comments-compute-right-padding (s-text i-offset)
"Returns a pair (lpad . rpad) for a right padded comments line."
(let* ((i-len (+ (string-length s-text) i-offset))
(i-lpad (- line-std-width i-len (comments-tokens-length))))
(cons i-lpad 0)
)
)
;******************************************************************************;
; ;
; Contents producers ;
; ;
;******************************************************************************;
(defun comments-make-padded-line (s-text i-lpad i-rpad)
"Returns a comments string padded on line-std-width columns."
(concat (comments-start-token)
(make-string i-lpad ? )
s-text
(make-string i-rpad ? )
(comments-end-token)
"\n"
)
)
(defun comments-make-left-padded-line (s-text i-offset)
"Returns a comments string left padded on line-std-width columns."
(let* ((pad (comments-compute-left-padding s-text i-offset)))
(comments-make-padded-line
(concat (make-string i-offset ? ) s-text)
(car pad)
(cdr pad))
)
)
(defun comments-make-center-padded-line (s-text)
"Returns a comments string center padded on line-std-width columns."
(let* ((pad (comments-compute-center-padding s-text)))
(comments-make-padded-line s-text (car pad) (cdr pad))
)
)
(defun comments-make-right-padded-line (s-text i-offset)
"Returns a comments string right padded on line-std-width columns."
(let* ((pad (comments-compute-right-padding s-text i-offset)))
(comments-make-padded-line
(concat s-text (make-string i-offset ? ))
(car pad)
(cdr pad))
)
)
(defun comments-make-bar ()
"Returns as a string a full comments bar of line-std-width."
(concat (comments-start-token)
(make-string (- line-std-width (comments-tokens-length)) ?*)
(comments-end-token) "\n")
)
(defun comments-make-empty-line ()
"Returns as a string an empty comments line of line-std-width."
(concat (comments-start-token)
(make-string (- line-std-width (comments-tokens-length)) ? )
(comments-end-token) "\n")
)
;******************************************************************************;
; ;
; Interactives functions ;
; ;
;******************************************************************************;
(defun comments-insert-left-padded-line (s-text i-offset)
"Inserts in the current buffer a comments string left padded on
line-std-width columns."
(interactive)
(insert (comments-make-left-padded-line s-text i-offset))
)
(defun comments-insert-center-padded-line (s-text)
"Inserts in the current buffer a comments string center padded on
line-std-width columns."
(interactive)
(insert (comments-make-center-padded-line s-text))
)
(defun comments-insert-right-padded-line (s-text i-offset)
"Inserts in the current buffer a comments string right padded on
line-std-width columns."
(interactive)
(insert (comments-make-right-padded-line s-text i-offset))
)
(defun comments-insert-bar ()
"Inserts in the current buffer a line-std-width comments bar."
(interactive)
(insert (comments-make-bar))
)
(defun comments-insert-empty-line ()
"Inserts in the current buffer a line-std-width comments empty line."
(interactive)
(insert (comments-make-empty-line))
)
(defun comments-insert-box (s-text)
"Inserts a box of std-width with center padded 's-text'."
(interactive "sBox content: ")
(comments-insert-bar)
(comments-insert-empty-line)
(comments-insert-center-padded-line s-text)
(comments-insert-empty-line)
(comments-insert-bar)
)
(defun comments-insert-small-box (s-text)
"Inserts a small box of std-width with center padded 's-text'."
(interactive "sBox content: ")
(comments-insert-bar)
(comments-insert-center-padded-line s-text)
(comments-insert-bar)
)
;******************************************************************************;
(provide 'comments)