Variable: semantic-lex-c-namespace-begin-macro

semantic-lex-c-namespace-begin-macro is a variable defined in c.el.gz.

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)))