Function: cc-imenu-objc-method-to-selector
cc-imenu-objc-method-to-selector is a byte-compiled function defined
in cc-menus.el.gz.
Signature
(cc-imenu-objc-method-to-selector METHOD)
Documentation
Return the objc selector style string of METHOD.
Example:
- perform: (SEL)aSelector withObject: object1 withObject: object2; /* METHOD */
=>
-perform:withObject:withObject:withObject: /* selector */
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/cc-menus.el.gz
;; Imenu support for objective-c uses functions.
(defsubst cc-imenu-objc-method-to-selector (method)
"Return the objc selector style string of METHOD.
Example:
- perform: (SEL)aSelector withObject: object1 withObject: object2; /* METHOD */
=>
-perform:withObject:withObject:withObject: /* selector */"
(let ((return "") ; String to be returned
(p 0) ; Current scanning position in METHOD
(pmax (length method)) ;
char ; Current scanning target
(betweenparen 0) ; CHAR is in parentheses.
argreq ; An argument is required.
inargvar) ; position of CHAR is in an argument variable.
(while (< p pmax)
(setq char (aref method p)
p (1+ p))
(cond
;; Is CHAR part of an objc token?
((and (not inargvar) ; Ignore if CHAR is part of an argument variable.
(eq 0 betweenparen) ; Ignore if CHAR is in parentheses.
(or (and (<= ?a char) (<= char ?z))
(and (<= ?A char) (<= char ?Z))
(and (<= ?0 char) (<= char ?9))
(= ?_ char)))
(if argreq
(setq inargvar t
argreq nil)
(setq return (concat return (char-to-string char)))))
;; Or a white space?
((and inargvar (or (eq ?\ char) (eq ?\n char))
(setq inargvar nil)))
;; Or a method separator?
;; If a method separator, the next token will be an argument variable.
((eq ?: char)
(setq argreq t
return (concat return (char-to-string char))))
;; Or an open parentheses?
((eq ?\( char)
(setq betweenparen (1+ betweenparen)))
;; Or a close parentheses?
((eq ?\) char)
(setq betweenparen (1- betweenparen)))))
return))