From: Andreas Gerler Date: Thu, 11 May 2023 16:18:10 +0000 (+0200) Subject: update string-inflection X-Git-Url: http://git.bundesbrandschatzamt.de/?a=commitdiff_plain;h=75986839e1c1a8197becd5dd2532aa36d0e32d76;p=emacsconfig.git update string-inflection Signed-off-by: Andreas Gerler --- diff --git a/elpa/string-inflection-20210918.419/string-inflection-autoloads.el b/elpa/string-inflection-20210918.419/string-inflection-autoloads.el deleted file mode 100644 index b44d44c5..00000000 --- a/elpa/string-inflection-20210918.419/string-inflection-autoloads.el +++ /dev/null @@ -1,56 +0,0 @@ -;;; string-inflection-autoloads.el --- automatically extracted autoloads -;; -;;; Code: - -(add-to-list 'load-path (directory-file-name - (or (file-name-directory #$) (car load-path)))) - - -;;;### (autoloads nil "string-inflection" "string-inflection.el" -;;;;;; (0 0 0 0)) -;;; Generated autoloads from string-inflection.el - -(autoload 'string-inflection-ruby-style-cycle "string-inflection" "\ -foo_bar => FOO_BAR => FooBar => foo_bar" t nil) - -(autoload 'string-inflection-python-style-cycle "string-inflection" "\ -foo_bar => FOO_BAR => FooBar => foo_bar" t nil) - -(autoload 'string-inflection-java-style-cycle "string-inflection" "\ -fooBar => FOO_BAR => FooBar => fooBar" t nil) - -(autoload 'string-inflection-all-cycle "string-inflection" "\ -foo_bar => FOO_BAR => FooBar => fooBar => foo-bar => Foo_Bar => foo_bar" t nil) - -(autoload 'string-inflection-toggle "string-inflection" "\ -toggle foo_bar <=> FooBar" t nil) - -(autoload 'string-inflection-camelcase "string-inflection" "\ -FooBar format" t nil) - -(autoload 'string-inflection-lower-camelcase "string-inflection" "\ -fooBar format" t nil) - -(autoload 'string-inflection-underscore "string-inflection" "\ -foo_bar format" t nil) - -(autoload 'string-inflection-capital-underscore "string-inflection" "\ -Foo_Bar format" t nil) - -(autoload 'string-inflection-upcase "string-inflection" "\ -FOO_BAR format" t nil) - -(autoload 'string-inflection-kebab-case "string-inflection" "\ -foo-bar format" t nil) - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "string-inflection" '("string-inflection-"))) - -;;;*** - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; coding: utf-8 -;; End: -;;; string-inflection-autoloads.el ends here diff --git a/elpa/string-inflection-20210918.419/string-inflection-pkg.el b/elpa/string-inflection-20210918.419/string-inflection-pkg.el deleted file mode 100644 index 9d7ff22c..00000000 --- a/elpa/string-inflection-20210918.419/string-inflection-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; Generated package description from /Users/baron/.emacs.d/elpa/string-inflection-20210918.419/string-inflection.el -*- no-byte-compile: t -*- -(define-package "string-inflection" "20210918.419" "underscore -> UPCASE -> CamelCase -> lowerCamelCase conversion of names" 'nil :commit "fd7926ac17293e9124b31f706a4e8f38f6a9b855" :authors '(("akicho8" . "akicho8@gmail.com")) :maintainer '("akicho8" . "akicho8@gmail.com") :keywords '("elisp")) diff --git a/elpa/string-inflection-20210918.419/string-inflection.el b/elpa/string-inflection-20210918.419/string-inflection.el deleted file mode 100644 index f41cf6c1..00000000 --- a/elpa/string-inflection-20210918.419/string-inflection.el +++ /dev/null @@ -1,396 +0,0 @@ -;;; string-inflection.el --- underscore -> UPCASE -> CamelCase -> lowerCamelCase conversion of names -*- lexical-binding: t -*- - -;; Copyright (C) 2004,2014,2016,2017,2018,2020,2021 Free Software Foundation, Inc. - -;; Author: akicho8 -;; Keywords: elisp -;; Package-Version: 20210918.419 -;; Package-Commit: fd7926ac17293e9124b31f706a4e8f38f6a9b855 -;; Version: 1.0.16 - -;; This file is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 2, or (at your option) -;; any later version. - -;; This file is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to -;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Commentary: - -;; There are three main functions: -;; -;; 1. For Ruby -> string-inflection-ruby-style-cycle (foo_bar => FOO_BAR => FooBar => foo_bar) -;; 2. For Python -> string-inflection-python-style-cycle (foo_bar => FOO_BAR => FooBar => foo_bar) -;; 3. For Java -> string-inflection-java-style-cycle (fooBar => FOO_BAR => FooBar => fooBar) -;; 4. For All -> string-inflection-all-cycle (foo_bar => FOO_BAR => FooBar => fooBar => foo-bar => Foo_Bar => foo_bar) -;; -;; -;; Example 1: -;; -;; (require 'string-inflection) -;; (global-unset-key (kbd "C-q")) -;; ;; C-q C-u is the key bindings similar to Vz Editor. -;; (global-set-key (kbd "C-q C-u") 'my-string-inflection-cycle-auto) -;; -;; (defun my-string-inflection-cycle-auto () -;; "switching by major-mode" -;; (interactive) -;; (cond -;; ;; for emacs-lisp-mode -;; ((eq major-mode 'emacs-lisp-mode) -;; (string-inflection-all-cycle)) -;; ;; for java -;; ((eq major-mode 'java-mode) -;; (string-inflection-java-style-cycle)) -;; ;; for python -;; ((eq major-mode 'python-mode) -;; (string-inflection-python-style-cycle)) -;; (t -;; ;; default -;; (string-inflection-ruby-style-cycle)))) -;; -;; -;; Example 2: -;; -;; (require 'string-inflection) -;; -;; ;; default -;; (global-set-key (kbd "C-c C-u") 'string-inflection-all-cycle) -;; -;; ;; for ruby -;; (add-hook 'ruby-mode-hook -;; '(lambda () -;; (local-set-key (kbd "C-c C-u") 'string-inflection-ruby-style-cycle))) -;; -;; ;; for python -;; (add-hook 'python-mode-hook -;; '(lambda () -;; (local-set-key (kbd "C-c C-u") 'string-inflection-python-style-cycle))) -;; -;; ;; for java -;; (add-hook 'java-mode-hook -;; '(lambda () -;; (local-set-key (kbd "C-c C-u") 'string-inflection-java-style-cycle))) -;; -;; You can also set `string-inflection-skip-backward-when-done' to `t' if -;; you don't like `string-inflect' moving your point to the end of the word. - -;;; Code: - -(defgroup string-inflection nil - "Change the casing of words." - :group 'convenience) - -(defcustom string-inflection-skip-backward-when-done nil - "Controls the position of the cursor after an inflection. - -If nil remain at the end of the string after inflecting, else move backward to -the beginning." - :group 'string-inflection - :type 'boolean) - -(defconst string-inflection-word-chars "a-zA-Z0-9_-") - -(defcustom string-inflection-erase-chars-when-region "./" - "When selected in the region, this character is included in the transformation as part of the string. - -Exactly assume that the underscore exists. -For example, when you select `Foo/Bar', it is considered that `Foo_Bar' is selected. -If include `:', select `FOO::VERSION' to run `M-x\ string-inflection-underscore' to `foo_version'." - :group 'string-inflection - :type 'string) - -;; -------------------------------------------------------------------------------- - -;;;###autoload -(defun string-inflection-ruby-style-cycle () - "foo_bar => FOO_BAR => FooBar => foo_bar" - (interactive) - (string-inflection-insert - (string-inflection-ruby-style-cycle-function (string-inflection-get-current-word)))) - -(fset 'string-inflection-cycle 'string-inflection-ruby-style-cycle) - -;;;###autoload -(defun string-inflection-python-style-cycle () - "foo_bar => FOO_BAR => FooBar => foo_bar" - (interactive) - (string-inflection-insert - (string-inflection-python-style-cycle-function (string-inflection-get-current-word)))) - -;;;###autoload -(defun string-inflection-java-style-cycle () - "fooBar => FOO_BAR => FooBar => fooBar" - (interactive) - (string-inflection-insert - (string-inflection-java-style-cycle-function (string-inflection-get-current-word)))) - -;;;###autoload -(defun string-inflection-all-cycle () - "foo_bar => FOO_BAR => FooBar => fooBar => foo-bar => Foo_Bar => foo_bar" - (interactive) - (string-inflection-insert - (string-inflection-all-cycle-function (string-inflection-get-current-word)))) - -;;;###autoload -(defun string-inflection-toggle () - "toggle foo_bar <=> FooBar" - (interactive) - (string-inflection-insert - (string-inflection-toggle-function (string-inflection-get-current-word)))) - -;;;###autoload -(defun string-inflection-camelcase () - "FooBar format" - (interactive) - (string-inflection-insert - (string-inflection-pascal-case-function (string-inflection-get-current-word)))) - -;;;###autoload -(defun string-inflection-lower-camelcase () - "fooBar format" - (interactive) - (string-inflection-insert - (string-inflection-camelcase-function (string-inflection-get-current-word)))) - -;;;###autoload -(defun string-inflection-underscore () - "foo_bar format" - (interactive) - (string-inflection-insert - (string-inflection-underscore-function (string-inflection-get-current-word)))) - -;;;###autoload -(defun string-inflection-capital-underscore () - "Foo_Bar format" - (interactive) - (string-inflection-insert - (string-inflection-capital-underscore-function (string-inflection-get-current-word)))) - -;;;###autoload -(defun string-inflection-upcase () - "FOO_BAR format" - (interactive) - (string-inflection-insert - (string-inflection-upcase-function (string-inflection-get-current-word)))) - -;;;###autoload -(defun string-inflection-kebab-case () - "foo-bar format" - (interactive) - (string-inflection-insert - (string-inflection-kebab-case-function (string-inflection-get-current-word)))) - -(fset 'string-inflection-lisp 'string-inflection-kebab-case) - -;; -------------------------------------------------------------------------------- - -(defun string-inflection-insert (s) - (insert s) - (when string-inflection-skip-backward-when-done (skip-chars-backward string-inflection-word-chars))) - -(defun string-inflection-non-word-chars () - (concat "^" string-inflection-word-chars)) - -(defun string-inflection-get-current-word () - "Gets the symbol near the cursor" - (interactive) - (let* ((start (if (use-region-p) - (region-end) - (progn - (skip-chars-forward string-inflection-word-chars) - - ;; https://github.com/akicho8/string-inflection/issues/30 - ;; - ;; objectName->method --> "objectName-" NG - ;; --> "objectName" OK - (when (and (not (eobp)) (not (bobp))) - (when (string= (buffer-substring (1- (point)) (1+ (point))) "->") - (forward-char -1))) - - (point)))) - (end (if (use-region-p) - (region-beginning) - (progn - (skip-chars-backward string-inflection-word-chars) - (point)))) - (str (buffer-substring start end))) - (prog1 - (progn - (when (use-region-p) - ;; https://github.com/akicho8/string-inflection/issues/31 - ;; Multiple lines will be one line because [:space:] are included to line breaks - (setq str (replace-regexp-in-string (concat "[" string-inflection-erase-chars-when-region "]+") "_" str)) ; 'aa::bb.cc dd/ee' => 'aa_bb_cc dd_ee' - - ;; kebabing a region can insert an unexpected hyphen - ;; https://github.com/akicho8/string-inflection/issues/34 - (with-syntax-table (copy-syntax-table) - (modify-syntax-entry ?_ "w") - (setq str (replace-regexp-in-string "_+\\b" "" str)) ; '__aA__ __aA__' => '__aA __aA' - (setq str (replace-regexp-in-string "\\b_+" "" str)) ; '__aA __aA' => 'aA aA' - ) - ) - str) - (delete-region start end)))) - -;; -------------------------------------------------------------------------------- - -(defun string-inflection-pascal-case-function (str) - "foo_bar => FooBar" - (setq str (string-inflection-underscore-function str)) - (mapconcat 'capitalize (split-string str "_") "")) - -(fset 'string-inflection-upper-camelcase-function 'string-inflection-pascal-case-function) - -(defun string-inflection-camelcase-function (str) - "foo_bar => fooBar" - (setq str (split-string (string-inflection-underscore-function str) "_")) - (concat (downcase (car str)) - (mapconcat 'capitalize (cdr str) ""))) - -(fset 'string-inflection-lower-camelcase-function 'string-inflection-camelcase-function) - -(defun string-inflection-upcase-function (str) - "FooBar => FOO_BAR" - (upcase (string-inflection-underscore-function str))) - -(defun string-inflection-underscore-function (str) - "FooBar => foo_bar" - (let ((case-fold-search nil)) - (setq str (replace-regexp-in-string "\\([a-z0-9]\\)\\([A-Z]\\)" "\\1_\\2" str)) - (setq str (replace-regexp-in-string "\\([A-Z]+\\)\\([A-Z][a-z]\\)" "\\1_\\2" str)) - (setq str (replace-regexp-in-string "-" "_" str)) ; FOO-BAR => FOO_BAR - (setq str (replace-regexp-in-string "_+" "_" str)) - (downcase str))) - -(defun string-inflection-capital-underscore-function (str) - "foo_bar => Foo_Bar" - (setq str (string-inflection-underscore-function str)) - (mapconcat 'capitalize (split-string str "_") "_")) - -(defun string-inflection-kebab-case-function (str) - "foo_bar => foo-bar" - (let ((case-fold-search nil)) - (setq str (string-inflection-underscore-function str)) - (setq str (replace-regexp-in-string "_" "-" str)))) - -(defun string-inflection-all-cycle-function (str) - "foo_bar => FOO_BAR => FooBar => fooBar => foo-bar => Foo_Bar => foo_bar - foo => FOO => Foo => foo" - (cond - ;; foo => FOO - ((string-inflection-word-p str) - (string-inflection-upcase-function str)) - ;; foo_bar => FOO_BAR - ((string-inflection-underscore-p str) - (string-inflection-upcase-function str)) - ;; FOO_BAR => FooBar - ((string-inflection-upcase-p str) - (string-inflection-pascal-case-function str)) - ;; FooBar => fooBar - ;; Foo => foo - ((string-inflection-pascal-case-p str) - (string-inflection-camelcase-function str)) - ;; fooBar => foo-bar - ((string-inflection-camelcase-p str) - (string-inflection-kebab-case-function str)) - ;; foo-bar => Foo_Bar - ((string-inflection-kebab-case-p str) - (string-inflection-capital-underscore-function str)) - ;; foo-bar => foo_bar - (t - (string-inflection-underscore-function str)))) - -(defun string-inflection-ruby-style-cycle-function (str) - "foo_bar => FOO_BAR => FooBar => foo_bar" - (cond - ((string-inflection-underscore-p str) - (string-inflection-upcase-function str)) - ((string-inflection-upcase-p str) - (string-inflection-pascal-case-function str)) - (t - (string-inflection-underscore-function str)))) - -(defalias 'string-inflection-python-style-cycle-function - 'string-inflection-ruby-style-cycle-function) - -(defun string-inflection-java-style-cycle-function (str) - "fooBar => FOO_BAR => FooBar => fooBar" - (cond - ((string-inflection-underscore-p str) - (string-inflection-upcase-function str)) - ((string-inflection-camelcase-p str) - (string-inflection-upcase-function str)) - ((string-inflection-upcase-p str) - (string-inflection-pascal-case-function str)) - (t - (string-inflection-camelcase-function str)))) - -;; Toggle function. But cycle function. -(defun string-inflection-toggle-function (str) - "Not so much the case that in all caps when using normal foo_bar <--> FooBar" - (cond - ((string-inflection-underscore-p str) - (string-inflection-pascal-case-function str)) - ((string-inflection-pascal-case-p str) - (string-inflection-camelcase-function str)) - (t - (string-inflection-underscore-function str)))) - -;; -------------------------------------------------------------------------------- - -(defun string-inflection-word-p (str) - "if foo => t" - (let ((case-fold-search nil)) - (string-match "\\`[a-z0-9]+\\'" str))) - -(defun string-inflection-underscore-p (str) - "if foo_bar => t" - (let ((case-fold-search nil)) - (string-match "\\`[a-z0-9_]+\\'" str))) - -(defun string-inflection-upcase-p (str) - "if FOO_BAR => t" - (let ((case-fold-search nil)) - (string-match "\\`[A-Z0-9_]+\\'" str))) - -(defun string-inflection-pascal-case-p (str) - "if FooBar => t" - (let ((case-fold-search nil)) - (and - (string-match "[a-z]" str) - (string-match "\\`[A-Z][a-zA-Z0-9]+\\'" str)))) - -(fset 'string-inflection-upper-camelcase-p 'string-inflection-pascal-case-p) - -(defun string-inflection-camelcase-p (str) - "if fooBar => t" - (let ((case-fold-search nil)) - (and - (string-match "[A-Z]" str) - (string-match "\\`[a-z][a-zA-Z0-9]+\\'" str)))) - -(fset 'string-inflection-lower-camelcase-p 'string-inflection-camelcase-p) - -(defun string-inflection-kebab-case-p (str) - "if foo-bar => t" - (string-match "-" str)) - -(defun string-inflection-capital-underscore-p (str) - "if Foo_Bar => t" - (let ((case-fold-search nil)) - (and - (string-match "[A-Z]" str) - (string-match "_" str) - (string-match "\\`[A-Z][a-zA-Z0-9_]+\\'" str)))) - -(provide 'string-inflection) -;;; string-inflection.el ends here diff --git a/elpa/string-inflection-20220910.1306/string-inflection-autoloads.el b/elpa/string-inflection-20220910.1306/string-inflection-autoloads.el new file mode 100644 index 00000000..d17357a9 --- /dev/null +++ b/elpa/string-inflection-20220910.1306/string-inflection-autoloads.el @@ -0,0 +1,59 @@ +;;; string-inflection-autoloads.el --- automatically extracted autoloads -*- lexical-binding: t -*- +;; +;;; Code: + +(add-to-list 'load-path (directory-file-name + (or (file-name-directory #$) (car load-path)))) + + +;;;### (autoloads nil "string-inflection" "string-inflection.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from string-inflection.el + +(autoload 'string-inflection-ruby-style-cycle "string-inflection" "\ +foo_bar => FOO_BAR => FooBar => foo_bar" t nil) + +(autoload 'string-inflection-elixir-style-cycle "string-inflection" "\ +foo_bar => FooBar => foo_bar" t nil) + +(autoload 'string-inflection-python-style-cycle "string-inflection" "\ +foo_bar => FOO_BAR => FooBar => foo_bar" t nil) + +(autoload 'string-inflection-java-style-cycle "string-inflection" "\ +fooBar => FOO_BAR => FooBar => fooBar" t nil) + +(autoload 'string-inflection-all-cycle "string-inflection" "\ +foo_bar => FOO_BAR => FooBar => fooBar => foo-bar => Foo_Bar => foo_bar" t nil) + +(autoload 'string-inflection-toggle "string-inflection" "\ +toggle foo_bar <=> FooBar" t nil) + +(autoload 'string-inflection-camelcase "string-inflection" "\ +FooBar format" t nil) + +(autoload 'string-inflection-lower-camelcase "string-inflection" "\ +fooBar format" t nil) + +(autoload 'string-inflection-underscore "string-inflection" "\ +foo_bar format" t nil) + +(autoload 'string-inflection-capital-underscore "string-inflection" "\ +Foo_Bar format" t nil) + +(autoload 'string-inflection-upcase "string-inflection" "\ +FOO_BAR format" t nil) + +(autoload 'string-inflection-kebab-case "string-inflection" "\ +foo-bar format" t nil) + +(register-definition-prefixes "string-inflection" '("string-inflection-")) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; coding: utf-8 +;; End: +;;; string-inflection-autoloads.el ends here diff --git a/elpa/string-inflection-20220910.1306/string-inflection-pkg.el b/elpa/string-inflection-20220910.1306/string-inflection-pkg.el new file mode 100644 index 00000000..bc44cdaf --- /dev/null +++ b/elpa/string-inflection-20220910.1306/string-inflection-pkg.el @@ -0,0 +1,2 @@ +;;; Generated package description from string-inflection.el -*- no-byte-compile: t -*- +(define-package "string-inflection" "20220910.1306" "underscore -> UPCASE -> CamelCase -> lowerCamelCase conversion of names" 'nil :commit "50ad54970b3cc79b6b83979bde9889ad9a9e1a9c" :authors '(("akicho8" . "akicho8@gmail.com")) :maintainers '(("akicho8" . "akicho8@gmail.com")) :maintainer '("akicho8" . "akicho8@gmail.com") :keywords '("elisp")) diff --git a/elpa/string-inflection-20220910.1306/string-inflection.el b/elpa/string-inflection-20220910.1306/string-inflection.el new file mode 100644 index 00000000..90c9dd26 --- /dev/null +++ b/elpa/string-inflection-20220910.1306/string-inflection.el @@ -0,0 +1,422 @@ +;;; string-inflection.el --- underscore -> UPCASE -> CamelCase -> lowerCamelCase conversion of names -*- lexical-binding: t -*- + +;; Copyright (C) 2004,2014,2016,2017,2018,2020,2021 Free Software Foundation, Inc. + +;; Author: akicho8 +;; Keywords: elisp +;; Package-Version: 20220910.1306 +;; Package-Commit: 50ad54970b3cc79b6b83979bde9889ad9a9e1a9c +;; Version: 1.0.16 + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;; There are three main functions: +;; +;; 1. For Ruby -> string-inflection-ruby-style-cycle (foo_bar => FOO_BAR => FooBar => foo_bar) +;; 2. For Elixir -> string-inflection-elixir-style-cycle (foo_bar => FooBar => foo_bar) +;; 3. For Python -> string-inflection-python-style-cycle (foo_bar => FOO_BAR => FooBar => foo_bar) +;; 4. For Java -> string-inflection-java-style-cycle (fooBar => FOO_BAR => FooBar => fooBar) +;; 5. For All -> string-inflection-all-cycle (foo_bar => FOO_BAR => FooBar => fooBar => foo-bar => Foo_Bar => foo_bar) +;; +;; +;; Example 1: +;; +;; (require 'string-inflection) +;; (global-unset-key (kbd "C-q")) +;; ;; C-q C-u is the key bindings similar to Vz Editor. +;; (global-set-key (kbd "C-q C-u") 'my-string-inflection-cycle-auto) +;; +;; (defun my-string-inflection-cycle-auto () +;; "switching by major-mode" +;; (interactive) +;; (cond +;; ;; for emacs-lisp-mode +;; ((eq major-mode 'emacs-lisp-mode) +;; (string-inflection-all-cycle)) +;; ;; for java +;; ((eq major-mode 'java-mode) +;; (string-inflection-java-style-cycle)) +;; ;; for python +;; ((eq major-mode 'python-mode) +;; (string-inflection-python-style-cycle)) +;; ;; for elixir +;; ((eq major-mode 'elixir-mode) +;; (string-inflection-elixir-style-cycle)) +;; (t +;; ;; default +;; (string-inflection-ruby-style-cycle)))) +;; +;; +;; Example 2: +;; +;; (require 'string-inflection) +;; +;; ;; default +;; (global-set-key (kbd "C-c C-u") 'string-inflection-all-cycle) +;; +;; ;; for ruby +;; (add-hook 'ruby-mode-hook +;; '(lambda () +;; (local-set-key (kbd "C-c C-u") 'string-inflection-ruby-style-cycle))) +;; +;; ;; for elixir +;; (add-hook 'elixir-mode-hook +;; '(lambda () +;; (local-set-key (kbd "C-c C-u") 'string-inflection-elixir-style-cycle))) +;; +;; ;; for python +;; (add-hook 'python-mode-hook +;; '(lambda () +;; (local-set-key (kbd "C-c C-u") 'string-inflection-python-style-cycle))) +;; +;; ;; for java +;; (add-hook 'java-mode-hook +;; '(lambda () +;; (local-set-key (kbd "C-c C-u") 'string-inflection-java-style-cycle))) +;; +;; You can also set `string-inflection-skip-backward-when-done' to `t' if +;; you don't like `string-inflect' moving your point to the end of the word. + +;;; Code: + +(defgroup string-inflection nil + "Change the casing of words." + :group 'convenience) + +(defcustom string-inflection-skip-backward-when-done nil + "Controls the position of the cursor after an inflection. + +If nil remain at the end of the string after inflecting, else move backward to +the beginning." + :group 'string-inflection + :type 'boolean) + +(defconst string-inflection-word-chars "a-zA-Z0-9_-") + +(defcustom string-inflection-erase-chars-when-region "./" + "When selected in the region, this character is included in the transformation +as part of the string. + +Exactly assume that the underscore exists. +For example, when you select `Foo/Bar', it is considered that `Foo_Bar' is +selected. If include `:', select `FOO::VERSION' to run +`M-x\ string-inflection-underscore' to `foo_version'." + :group 'string-inflection + :type 'string) + +;; -------------------------------------------------------------------------------- + +;;;###autoload +(defun string-inflection-ruby-style-cycle () + "foo_bar => FOO_BAR => FooBar => foo_bar" + (interactive) + (string-inflection-insert + (string-inflection-ruby-style-cycle-function (string-inflection-get-current-word)))) + +(fset 'string-inflection-cycle 'string-inflection-ruby-style-cycle) + +;;;###autoload +(defun string-inflection-elixir-style-cycle () + "foo_bar => FooBar => foo_bar" + (interactive) + (string-inflection-insert + (string-inflection-elixir-style-cycle-function (string-inflection-get-current-word)))) + +;;;###autoload +(defun string-inflection-python-style-cycle () + "foo_bar => FOO_BAR => FooBar => foo_bar" + (interactive) + (string-inflection-insert + (string-inflection-python-style-cycle-function (string-inflection-get-current-word)))) + +;;;###autoload +(defun string-inflection-java-style-cycle () + "fooBar => FOO_BAR => FooBar => fooBar" + (interactive) + (string-inflection-insert + (string-inflection-java-style-cycle-function (string-inflection-get-current-word)))) + +;;;###autoload +(defun string-inflection-all-cycle () + "foo_bar => FOO_BAR => FooBar => fooBar => foo-bar => Foo_Bar => foo_bar" + (interactive) + (string-inflection-insert + (string-inflection-all-cycle-function (string-inflection-get-current-word)))) + +;;;###autoload +(defun string-inflection-toggle () + "toggle foo_bar <=> FooBar" + (interactive) + (string-inflection-insert + (string-inflection-toggle-function (string-inflection-get-current-word)))) + +;;;###autoload +(defun string-inflection-camelcase () + "FooBar format" + (interactive) + (string-inflection-insert + (string-inflection-pascal-case-function (string-inflection-get-current-word)))) + +;;;###autoload +(defun string-inflection-lower-camelcase () + "fooBar format" + (interactive) + (string-inflection-insert + (string-inflection-camelcase-function (string-inflection-get-current-word)))) + +;;;###autoload +(defun string-inflection-underscore () + "foo_bar format" + (interactive) + (string-inflection-insert + (string-inflection-underscore-function (string-inflection-get-current-word)))) + +;;;###autoload +(defun string-inflection-capital-underscore () + "Foo_Bar format" + (interactive) + (string-inflection-insert + (string-inflection-capital-underscore-function (string-inflection-get-current-word)))) + +;;;###autoload +(defun string-inflection-upcase () + "FOO_BAR format" + (interactive) + (string-inflection-insert + (string-inflection-upcase-function (string-inflection-get-current-word)))) + +;;;###autoload +(defun string-inflection-kebab-case () + "foo-bar format" + (interactive) + (string-inflection-insert + (string-inflection-kebab-case-function (string-inflection-get-current-word)))) + +(fset 'string-inflection-lisp 'string-inflection-kebab-case) + +;; -------------------------------------------------------------------------------- + +(defun string-inflection-insert (s) + (insert s) + (when string-inflection-skip-backward-when-done (skip-chars-backward string-inflection-word-chars))) + +(defun string-inflection-non-word-chars () + (concat "^" string-inflection-word-chars)) + +(defun string-inflection-get-current-word () + "Gets the symbol near the cursor" + (interactive) + (let* ((start (if (use-region-p) + (region-end) + (progn + (skip-chars-forward string-inflection-word-chars) + + ;; https://github.com/akicho8/string-inflection/issues/30 + ;; + ;; objectName->method --> "objectName-" NG + ;; --> "objectName" OK + (when (and (not (eobp)) (not (bobp))) + (when (string= (buffer-substring (1- (point)) (1+ (point))) "->") + (forward-char -1))) + + (point)))) + (end (if (use-region-p) + (region-beginning) + (progn + (skip-chars-backward string-inflection-word-chars) + (point)))) + (str (buffer-substring start end))) + (prog1 + (progn + (when (use-region-p) + ;; https://github.com/akicho8/string-inflection/issues/31 + ;; Multiple lines will be one line because [:space:] are included to line breaks + (setq str (replace-regexp-in-string (concat "[" string-inflection-erase-chars-when-region "]+") "_" str)) ; 'aa::bb.cc dd/ee' => 'aa_bb_cc dd_ee' + + ;; kebabing a region can insert an unexpected hyphen + ;; https://github.com/akicho8/string-inflection/issues/34 + (with-syntax-table (copy-syntax-table) + (modify-syntax-entry ?_ "w") + (setq str (replace-regexp-in-string "_+\\b" "" str)) ; '__aA__ __aA__' => '__aA __aA' + (setq str (replace-regexp-in-string "\\b_+" "" str)) ; '__aA __aA' => 'aA aA' + ) + ) + str) + (delete-region start end)))) + +;; -------------------------------------------------------------------------------- + +(defun string-inflection-pascal-case-function (str) + "foo_bar => FooBar" + (setq str (string-inflection-underscore-function str)) + (mapconcat 'capitalize (split-string str "_") "")) + +(fset 'string-inflection-upper-camelcase-function 'string-inflection-pascal-case-function) + +(defun string-inflection-camelcase-function (str) + "foo_bar => fooBar" + (setq str (split-string (string-inflection-underscore-function str) "_")) + (concat (downcase (car str)) + (mapconcat 'capitalize (cdr str) ""))) + +(fset 'string-inflection-lower-camelcase-function 'string-inflection-camelcase-function) + +(defun string-inflection-upcase-function (str) + "FooBar => FOO_BAR" + (upcase (string-inflection-underscore-function str))) + +(defun string-inflection-underscore-function (str) + "FooBar => foo_bar" + (let ((case-fold-search nil)) + (setq str (replace-regexp-in-string "\\([a-z0-9]\\)\\([A-Z]\\)" "\\1_\\2" str)) + (setq str (replace-regexp-in-string "\\([A-Z]+\\)\\([A-Z][a-z]\\)" "\\1_\\2" str)) + (setq str (replace-regexp-in-string "-" "_" str)) ; FOO-BAR => FOO_BAR + (setq str (replace-regexp-in-string "_+" "_" str)) + (downcase str))) + +(defun string-inflection-capital-underscore-function (str) + "foo_bar => Foo_Bar" + (setq str (string-inflection-underscore-function str)) + (mapconcat 'capitalize (split-string str "_") "_")) + +(defun string-inflection-kebab-case-function (str) + "foo_bar => foo-bar" + (let ((case-fold-search nil)) + (setq str (string-inflection-underscore-function str)) + (setq str (replace-regexp-in-string "_" "-" str)))) + +(defun string-inflection-all-cycle-function (str) + "foo_bar => FOO_BAR => FooBar => fooBar => foo-bar => Foo_Bar => foo_bar + foo => FOO => Foo => foo" + (cond + ;; foo => FOO + ((string-inflection-word-p str) + (string-inflection-upcase-function str)) + ;; foo_bar => FOO_BAR + ((string-inflection-underscore-p str) + (string-inflection-upcase-function str)) + ;; FOO_BAR => FooBar + ((string-inflection-upcase-p str) + (string-inflection-pascal-case-function str)) + ;; FooBar => fooBar + ;; Foo => foo + ((string-inflection-pascal-case-p str) + (string-inflection-camelcase-function str)) + ;; fooBar => foo-bar + ((string-inflection-camelcase-p str) + (string-inflection-kebab-case-function str)) + ;; foo-bar => Foo_Bar + ((string-inflection-kebab-case-p str) + (string-inflection-capital-underscore-function str)) + ;; foo-bar => foo_bar + (t + (string-inflection-underscore-function str)))) + +(defun string-inflection-ruby-style-cycle-function (str) + "foo_bar => FOO_BAR => FooBar => foo_bar" + (cond + ((string-inflection-underscore-p str) + (string-inflection-upcase-function str)) + ((string-inflection-upcase-p str) + (string-inflection-pascal-case-function str)) + (t + (string-inflection-underscore-function str)))) + +(defalias 'string-inflection-python-style-cycle-function + 'string-inflection-ruby-style-cycle-function) + +(defun string-inflection-elixir-style-cycle-function (str) + "foo_bar => FooBar => foo_bar" + (cond + ((string-inflection-underscore-p str) + (string-inflection-pascal-case-function str)) + (t + (string-inflection-underscore-function str)))) + +(defun string-inflection-java-style-cycle-function (str) + "fooBar => FOO_BAR => FooBar => fooBar" + (cond + ((string-inflection-underscore-p str) + (string-inflection-upcase-function str)) + ((string-inflection-camelcase-p str) + (string-inflection-upcase-function str)) + ((string-inflection-upcase-p str) + (string-inflection-pascal-case-function str)) + (t + (string-inflection-camelcase-function str)))) + +;; Toggle function. But cycle function. +(defun string-inflection-toggle-function (str) + "Not so much the case that in all caps when using normal foo_bar <--> FooBar" + (cond + ((string-inflection-underscore-p str) + (string-inflection-pascal-case-function str)) + ((string-inflection-pascal-case-p str) + (string-inflection-camelcase-function str)) + (t + (string-inflection-underscore-function str)))) + +;; -------------------------------------------------------------------------------- + +(defun string-inflection-word-p (str) + "if foo => t" + (let ((case-fold-search nil)) + (string-match "\\`[a-z0-9]+\\'" str))) + +(defun string-inflection-underscore-p (str) + "if foo_bar => t" + (let ((case-fold-search nil)) + (string-match "\\`[a-z0-9_]+\\'" str))) + +(defun string-inflection-upcase-p (str) + "if FOO_BAR => t" + (let ((case-fold-search nil)) + (string-match "\\`[A-Z0-9_]+\\'" str))) + +(defun string-inflection-pascal-case-p (str) + "if FooBar => t" + (let ((case-fold-search nil)) + (and + (string-match "[a-z]" str) + (string-match "\\`[A-Z][a-zA-Z0-9]+\\'" str)))) + +(fset 'string-inflection-upper-camelcase-p 'string-inflection-pascal-case-p) + +(defun string-inflection-camelcase-p (str) + "if fooBar => t" + (let ((case-fold-search nil)) + (and + (string-match "[A-Z]" str) + (string-match "\\`[a-z][a-zA-Z0-9]+\\'" str)))) + +(fset 'string-inflection-lower-camelcase-p 'string-inflection-camelcase-p) + +(defun string-inflection-kebab-case-p (str) + "if foo-bar => t" + (string-match "-" str)) + +(defun string-inflection-capital-underscore-p (str) + "if Foo_Bar => t" + (let ((case-fold-search nil)) + (and + (string-match "[A-Z]" str) + (string-match "_" str) + (string-match "\\`[A-Z][a-zA-Z0-9_]+\\'" str)))) + +(provide 'string-inflection) +;;; string-inflection.el ends here diff --git a/elpa/string-inflection-readme.txt b/elpa/string-inflection-readme.txt new file mode 100644 index 00000000..6daa1c92 --- /dev/null +++ b/elpa/string-inflection-readme.txt @@ -0,0 +1,58 @@ +Main functions are three + + 1. For Ruby -> string-inflection-ruby-style-cycle (foo_bar => FOO_BAR => FooBar => foo_bar) + 2. For Python -> string-inflection-python-style-cycle (foo_bar => FOO_BAR => FooBar => foo_bar) + 3. For Java -> string-inflection-java-style-cycle (fooBar => FOO_BAR => FooBar => fooBar) + 4. For All -> string-inflection-all-cycle (foo_bar => FOO_BAR => FooBar => fooBar => foo-bar => Foo_Bar => foo_bar) + + +Setting Example 1 + + (require 'string-inflection) + (global-unset-key (kbd "C-q")) + ;; C-q C-u is the key bindings similar to Vz Editor. + (global-set-key (kbd "C-q C-u") 'my-string-inflection-cycle-auto) + + (defun my-string-inflection-cycle-auto () + "switching by major-mode" + (interactive) + (cond + ;; for emacs-lisp-mode + ((eq major-mode 'emacs-lisp-mode) + (string-inflection-all-cycle)) + ;; for java + ((eq major-mode 'java-mode) + (string-inflection-java-style-cycle)) + ;; for python + ((eq major-mode 'python-mode) + (string-inflection-python-style-cycle)) + (t + ;; default + (string-inflection-ruby-style-cycle)))) + + +Setting Example 2 + + (require 'string-inflection) + + ;; default + (global-set-key (kbd "C-c C-u") 'string-inflection-all-cycle) + + ;; for ruby + (add-hook 'ruby-mode-hook + '(lambda () + (local-set-key (kbd "C-c C-u") 'string-inflection-ruby-style-cycle))) + + ;; for python + (add-hook 'python-mode-hook + '(lambda () + (local-set-key (kbd "C-c C-u") 'string-inflection-python-style-cycle))) + + ;; for java + (add-hook 'java-mode-hook + '(lambda () + (local-set-key (kbd "C-c C-u") 'string-inflection-java-style-cycle))) + +You may also consider setting `string-inflection-skip-backward-when-done' to +`t' if you don't like `string-inflect' moving your point to the end of the +word