etsavの日記: みんならくだになぁれ
(defun camelize (str)
(mapconcat #'capitalize (split-word (downcase str)) ""))
(defun split-word (str &optional trail)
(cond ((null str) (list trail))
((wordp str) (append (list str)
(if trail (split-word trail))))
(t (append (split-word (substring str 0 -1)
(concat (substring str -1) trail))))))
(defun wordp (word)
(or (numberp (string-match "^[0-9]+$" word))
(and (not (string-match "[0-9]" word))
(string= (car (last (split-string (spell-string word) " ")))
"correct"))))
えーとですね。
C++ でコード書いてて、 クラス名は camel case、 ヘッダ・ソースファイル名はクラス名小文字化+拡張子、 ってことにしてまして。
先月までの派遣先では、 emacs の auto insert で新ファイル作るとテンプレート挿入されるようにしといたのだけど、 クラス名は小文字化ファイルの basename そのままつっこんで、 毎回手直ししてたのです。 暇が出来たので、 そこを何とかしようと変換関数をやっつけで書いてみたり。
まぁやっつけですのでね、 spell-string 関数が動く事前提だったり、 ちょっと条件が厳しいとスタック食い潰したり、 前方から最長一致の単語を採用するので (camelize "alphabeta") の結果が "AlphaBeta" じゃなくて "AlphabetA" になったりしますがねぃ。
みんならくだになぁれ More ログイン