Variable: semantic-lex-c-namespace-begin-macro
semantic-lex-c-namespace-begin-macro is a variable defined in c.el.gz.
Value
Large value
((looking-at "\\(_GLIBCXX_BEGIN_NAMESPACE\\)(\\s-*\\(\\(?:\\w\\|\\s_\\)+\\)\\s-*)")
(let*
((nsend
(match-end 1))
(sym-start
(match-beginning 2))
(sym-end
(match-end 2))
(ms
(buffer-substring-no-properties sym-start sym-end)))
(semantic-lex-push-token
(semantic-lex-token 'NAMESPACE
(match-beginning 0)
nsend "namespace"))
(semantic-lex-push-token
(semantic-lex-token 'symbol sym-start sym-end ms)))
(goto-char
(match-end 0))
(let
((start
(point))
(end 0))
(when
(re-search-forward "_GLIBCXX_END_NAMESPACE" nil t)
(setq end
(point))
(semantic-lex-push-token
(semantic-lex-token 'semantic-list start end
(list 'prefix-fake)))))
(setq semantic-lex-end-point
(point)))
Documentation
Handle G++'s namespace macros which the pre-processor can't handle.
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/semantic/bovine/c.el.gz
(define-lex-regex-analyzer semantic-lex-c-namespace-begin-macro
"Handle G++'s namespace macros which the pre-processor can't handle."
"\\(_GLIBCXX_BEGIN_NAMESPACE\\)(\\s-*\\(\\(?:\\w\\|\\s_\\)+\\)\\s-*)"
(let* ((nsend (match-end 1))
(sym-start (match-beginning 2))
(sym-end (match-end 2))
(ms (buffer-substring-no-properties sym-start sym-end)))
;; Push the namespace keyword.
(semantic-lex-push-token
(semantic-lex-token 'NAMESPACE (match-beginning 0) nsend "namespace"))
;; Push the name.
(semantic-lex-push-token
(semantic-lex-token 'symbol sym-start sym-end ms))
)
(goto-char (match-end 0))
(let ((start (point))
(end 0))
;; If we can't find a matching end, then create the fake list.
(when (re-search-forward "_GLIBCXX_END_NAMESPACE" nil t)
(setq end (point))
(semantic-lex-push-token
(semantic-lex-token 'semantic-list start end
(list 'prefix-fake)))))
(setq semantic-lex-end-point (point)))