Function: wisent-python-lex-beginning-of-line
wisent-python-lex-beginning-of-line is a byte-compiled function
defined in python.el.gz.
Signature
(wisent-python-lex-beginning-of-line)
Documentation
Detect and create Python indentation tokens at beginning of line.
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/semantic/wisent/python.el.gz
(define-lex-analyzer wisent-python-lex-beginning-of-line
"Detect and create Python indentation tokens at beginning of line."
(and
(bolp) (not (wisent-python-implicit-line-joining-p))
(let ((last-indent (car wisent-python-indent-stack))
(last-pos (point))
(curr-indent (current-indentation)))
(skip-syntax-forward "-")
(cond
;; Skip comments and blank lines. No change in indentation.
((or (eolp) (looking-at semantic-lex-comment-regex))
(forward-comment (point-max))
(or (eobp) (beginning-of-line))
(setq semantic-lex-end-point (point))
;; Loop lexer to handle the next line.
t)
;; No change in indentation.
((= curr-indent last-indent)
(setq semantic-lex-end-point (point))
;; Try next analyzers.
nil)
;; Indentation increased
((> curr-indent last-indent)
(if (or (not semantic-lex-maximum-depth)
(< semantic-lex-current-depth semantic-lex-maximum-depth))
(progn
;; Return an INDENT lexical token
(setq semantic-lex-current-depth (1+ semantic-lex-current-depth))
(push curr-indent wisent-python-indent-stack)
(semantic-lex-push-token
(semantic-lex-token 'INDENT last-pos (point))))
;; Add an INDENT_BLOCK token
(semantic-lex-push-token
(semantic-lex-token
'INDENT_BLOCK
(progn (beginning-of-line) (point))
(semantic-lex-unterminated-syntax-protection 'INDENT_BLOCK
(wisent-python-end-of-block)
(point)))))
;; Loop lexer to handle tokens in current line.
t)
;; Indentation decreased
(t
;; Pop items from indentation stack
(while (< curr-indent last-indent)
(pop wisent-python-indent-stack)
(setq semantic-lex-current-depth (1- semantic-lex-current-depth)
last-indent (car wisent-python-indent-stack))
(semantic-lex-push-token
(semantic-lex-token 'DEDENT last-pos (point))))
;; (if (= last-pos (point))
;; ;; If pos did not change, then we must return nil so that
;; ;; other lexical analyzers can be run.
;; nil)
))))
;; All the work was done in the above analyzer matching condition.
)