kkk-generate.el 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. ;;; kkk-generate.el --- Generate Function -*- lexical-binding: t; -*-
  2. ;; Copyright (C) 2023 Vinicius Teshima <vini.tes@pm.me>
  3. ;; Author: Vinicius Teshima <vini.tes@pm.me>
  4. ;; This program is free software; you can redistribute it and/or modify
  5. ;; it under the terms of the GNU General Public License as published by
  6. ;; the Free Software Foundation, either version 3 of the License, or
  7. ;; (at your option) any later version.
  8. ;; This program is distributed in the hope that it will be useful,
  9. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. ;; GNU General Public License for more details.
  12. ;; You should have received a copy of the GNU General Public License
  13. ;; along with this program. If not, see <https://www.gnu.org/licenses/>.
  14. ;;; Commentary:
  15. ;; Function to generate things
  16. ;;; Code:
  17. (defgroup kkk-generate nil
  18. "Group of generate function."
  19. :group 'files)
  20. (defun kkk-generate-java-getter nil
  21. "Generate Getters from attribute definition.
  22. It will parse until it finds an empty line."
  23. (interactive)
  24. (while (not (string-empty-p (thing-at-point 'line 't)))
  25. (let* ((parsed_line (cdr (split-string (thing-at-point 'line 't))))
  26. (type (pop parsed_line))
  27. (name (car (split-string (pop parsed_line) ";") ))
  28. (beg (point)))
  29. (progn
  30. (kill-whole-line 0)
  31. (insert "public " type " get" (upcase-initials name) "() {\n"
  32. "return this." name ";\n"
  33. "}\n")
  34. (indent-region beg (point))
  35. (line-move 1)))))
  36. (defun kkk-generate-java-setter nil
  37. "Generate Setters from attribute definition.
  38. It will parse until it finds an empty line."
  39. (interactive)
  40. (while (not (string-empty-p (thing-at-point 'line 't)))
  41. (let* ((parsed_line (cdr (split-string (thing-at-point 'line 't))))
  42. (type (pop parsed_line))
  43. (name (car (split-string (pop parsed_line) ";") ))
  44. (beg (point)))
  45. (progn
  46. (kill-whole-line 0)
  47. (insert "public void set" (upcase-initials name) "(" type " " name ") {\n"
  48. "this." name " = " name ";\n"
  49. "}\n")
  50. (indent-region beg (point))
  51. (line-move 1)))))
  52. (defun list-get-odd (LIST)
  53. "Return all the odd index items from LIST."
  54. (if (listp LIST)
  55. (let ((ret '()))
  56. (while (not (null LIST))
  57. (push 'ret (car LIST))
  58. (setq LIST (cddr LIST))
  59. )
  60. ret)))
  61. (defun list-get-even (LIST)
  62. "Return all the even index items from LIST."
  63. (if (listp LIST)
  64. (list-get-odd (cdr LIST))))
  65. (defun list-str-rm-last-chr (LIST)
  66. "LIST is a list."
  67. (let ((ret '()))
  68. (while (not (null LIST))
  69. (push 'ret (substring (car LIST) 0 -1))
  70. (setq LIST (cdr LIST)))
  71. ret))
  72. (defun kkk-generate-java-constructor (BEG END)
  73. "Generate Constructor from attribute definition.
  74. BEG is the beginning of the region.
  75. END is the end of the region.
  76. It will parse until it finds an empty line."
  77. (interactive "r")
  78. (let* ((tmp_args (split-string (buffer-substring-no-properties BEG END)))
  79. (args (remove "protected" (remove "public" (remove "private" tmp_args))))
  80. (types (list-get-odd args))
  81. (names (list-str-rm-last-chr (list-get-even args))))
  82. (if (= (cl-list-length types) (cl-list-length names))
  83. (progn
  84. (kill-region BEG END)
  85. (insert "public TMP(")
  86. (let ((i 0) (limit (cl-list-length types)))
  87. (while (< i limit)
  88. (if (= i (1- limit))
  89. (insert (format "%s %s" (nth i types) (nth i names)))
  90. (insert (format "%s %s, " (nth i types) (nth i names))))
  91. (setq i (1+ i))))
  92. (insert ") {\n")
  93. (let ((i 0) (limit (cl-list-length types)))
  94. (while (< i limit)
  95. (insert (format "this.%s = %s;\n" (nth i names) (nth i names)))
  96. (setq i (1+ i))))
  97. (insert "}\n"))))
  98. (indent-region BEG (point)))
  99. (defun kkk-generate-java-mode-keys ()
  100. "Define my keybinds on java mode."
  101. (define-key java-mode-map (kbd "C-c g g") 'java-generate-getter)
  102. (define-key java-mode-map (kbd "C-c g s") 'java-generate-setter)
  103. (define-key java-mode-map (kbd "C-c g c") 'java-generate-constructor))
  104. ;; (add-hook 'java-mode-hook #'define-my-java-mode-keys)
  105. (defun kkk-generate-cpp-getter-definition ()
  106. "Generate Getters Definition from attribute definition.
  107. It will parse until it finds an empty line."
  108. (interactive)
  109. (while (not (string= "\n" (thing-at-point 'line 't)))
  110. (let* ((parsed_line (split-string
  111. (string-replace ";" "" (thing-at-point 'line 't))))
  112. (type (car parsed_line))
  113. (name (string-remove-prefix "m_" (cadr parsed_line)))
  114. (beg (point)))
  115. (progn
  116. (kill-whole-line 0)
  117. (insert type " get" (upcase-initials name) "();")
  118. (indent-region beg (point))
  119. (line-move 1)))))
  120. (defun kkk-generate-cpp-setter-definition ()
  121. "Generate Getters Definition from attribute definition.
  122. It will parse until it finds an empty line."
  123. (interactive)
  124. (while (not (string= "\n" (thing-at-point 'line 't)))
  125. (let* ((parsed_line (split-string
  126. (string-replace ";" "" (thing-at-point 'line 't))))
  127. (type (car parsed_line))
  128. (name (string-remove-prefix "m_" (cadr parsed_line)))
  129. (beg (point)))
  130. (progn
  131. (kill-whole-line 0)
  132. (insert "void set" (upcase-initials name) "(" type " " name ");")
  133. (indent-region beg (point))
  134. (line-move 1)))))
  135. (defun kkk-generate-cpp-getter-implementation ()
  136. "Generate Getters Definition from attribute definition.
  137. class type name;
  138. It will parse until it finds an empty line."
  139. (interactive)
  140. (while (not (string= "\n" (thing-at-point 'line 't)))
  141. (let* ((parsed_line (split-string
  142. (string-replace ";" "" (thing-at-point 'line 't))))
  143. (class (car parsed_line))
  144. (type (cadr parsed_line))
  145. (name (string-remove-prefix "m_" (caddr parsed_line)))
  146. (beg (point)))
  147. (progn
  148. (kill-whole-line 0)
  149. (insert type " " class "::get" (upcase-initials name)
  150. "() {\nreturn this->m_" name ";\n}")
  151. (indent-region beg (point))
  152. (line-move 1)))))
  153. (defun kkk-generate-cpp-setter-implementation ()
  154. "Generate Getters Definition from attribute definition.
  155. class type name;
  156. It will parse until it finds an empty line."
  157. (interactive)
  158. (while (not (string= "\n" (thing-at-point 'line 't)))
  159. (let* ((parsed_line (split-string
  160. (string-replace ";" "" (thing-at-point 'line 't))))
  161. (class (car parsed_line))
  162. (type (cadr parsed_line))
  163. (name (string-remove-prefix "m_" (caddr parsed_line)))
  164. (beg (point)))
  165. (progn
  166. (kill-whole-line 0)
  167. (insert "void " class "::set" (upcase-initials name)
  168. "(" type " " name ") {\nthis->m_" name " = " name ";\n}")
  169. (indent-region beg (point))
  170. (line-move 1)))))
  171. (defun kkk-generate-cpp-contructor-definition ()
  172. "Generate Constructor from attribute definition.
  173. TODO: IMPLEMENT;"
  174. (interactive) (message "TODO: IMPLEMENT"))
  175. (defun kkk-generate-cpp-contructor-implementation ()
  176. "Generate Constructor from attribute definition.
  177. TODO: IMPLEMENT;"
  178. (interactive) (message "TODO: IMPLEMENT"))
  179. (defun kkk-generate-cpp-mode-keys ()
  180. "Define my keybinds on c++ mode"
  181. (define-key c++-mode-map (kbd "C-c g i g")
  182. #'kkk-generate-cpp-getter-implementation)
  183. (define-key c++-mode-map (kbd "C-c g i s")
  184. #'kkk-generate-cpp-setter-implementation)
  185. (define-key c++-mode-map (kbd "C-c g i c")
  186. #'kkk-generate-cpp-contrutor-implementation)
  187. (define-key c++-mode-map (kbd "C-c g d g")
  188. #'kkk-generate-cpp-getter-definition)
  189. (define-key c++-mode-map (kbd "C-c g d s")
  190. #'kkk-generate-cpp-setter-definition)
  191. (define-key c++-mode-map (kbd "C-c g i c")
  192. #'kkk-generate-cpp-contrutor-definition))
  193. ;; (add-hook 'c++-mode-hook #'kkk/keybinds/cpp/generators)
  194. (provide 'kkk-generate)
  195. ;;; kkk-generate.el ends here