branch: externals/phps-mode commit e1b71600d5a1b1c488d2ec15fec0af9ecd6112c6 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
(newline-and-indent) now working --- phps-functions.el | 97 +++++++++++++++++++++++++++---------------------------- 1 file changed, 48 insertions(+), 49 deletions(-) diff --git a/phps-functions.el b/phps-functions.el index 0990be5..85efa86 100644 --- a/phps-functions.el +++ b/phps-functions.el @@ -41,58 +41,57 @@ (autoload 'phps-mode/lexer-get-point-data "phps-lexer") -;; TODO Should also format white-space inside the line, i.e. after function declarations +;; TODO Should also format white-space inside the line, i.e. after function declarations? +;; TODO Should indent doc blocks with 1 space (defun phps-mode/indent-line () "Indent line." (let ((data (phps-mode/lexer-get-point-data))) - (save-excursion - (beginning-of-line) - (let* ((start (nth 0 data)) - (end (nth 1 data)) - (in-scripting (nth 0 start))) - - ;; Are we in scripting? - (when in-scripting - (let ((start-bracket-level (nth 1 start)) - (start-parenthesis-level (nth 2 start)) - (start-token-number (nth 4 start)) - (end-bracket-level (nth 1 end)) - (end-parenthesis-level (nth 2 end)) - (end-token-number (nth 4 end))) - (let* ((indent-start (+ start-bracket-level start-parenthesis-level)) - (indent-end (+ end-bracket-level end-parenthesis-level)) - (indent-level indent-start)) - ;; (message "indent-start %s, indent-end %s" indent-start indent-end) - (when (and - (boundp 'phps-mode/lexer-tokens) - (> indent-start indent-end)) - (let ((token-number start-token-number) - (valid-tokens t)) - ;; (message "token start %s, token end %s" start-token-number end-token-number) - (while (and valid-tokens - (<= token-number end-token-number)) - (let ((token (car (nth token-number phps-mode/lexer-tokens))) - (token-start (car (cdr (nth token-number phps-mode/lexer-tokens))))) - (when (and valid-tokens - (>= token-start (point)) - (not (or - (string= token "{") - (string= token "}") - (string= token "(") - (string= token ")") - (string= token "[") - (string= token "]") - (string= token ";") - (eq token 'T_CLOSE_TAG)))) - ;; (message "Token %s - %s in %s was invalid" token token-number phps-mode/lexer-tokens) - (setq valid-tokens nil))) - (setq token-number (+ token-number 1))) - (when valid-tokens - ;; (message "Tokens was valid, decreasing indent %s - %s" (line-beginning-position) (line-end-position)) - (setq indent-level (- indent-level (- indent-start indent-end)))))) - ;; (message "inside scripting, start: %s, end: %s, indenting to column %s " start end indent-level) - (indent-line-to (* indent-level tab-width)) - (phps-mode/run-incremental-lex)))))))) + (let* ((start (nth 0 data)) + (end (nth 1 data)) + (in-scripting (nth 0 start))) + + ;; Are we in scripting? + (when in-scripting + (let ((start-bracket-level (nth 1 start)) + (start-parenthesis-level (nth 2 start)) + (start-token-number (nth 4 start)) + (end-bracket-level (nth 1 end)) + (end-parenthesis-level (nth 2 end)) + (end-token-number (nth 4 end))) + (let* ((indent-start (+ start-bracket-level start-parenthesis-level)) + (indent-end (+ end-bracket-level end-parenthesis-level)) + (indent-level indent-start)) + ;; (message "indent-start %s, indent-end %s" indent-start indent-end) + (when (and + (boundp 'phps-mode/lexer-tokens) + (> indent-start indent-end)) + (let ((token-number start-token-number) + (valid-tokens t)) + ;; (message "token start %s, token end %s" start-token-number end-token-number) + (while (and valid-tokens + (<= token-number end-token-number)) + (let ((token (car (nth token-number phps-mode/lexer-tokens))) + (token-start (car (cdr (nth token-number phps-mode/lexer-tokens))))) + (when (and valid-tokens + (>= token-start (point)) + (not (or + (string= token "{") + (string= token "}") + (string= token "(") + (string= token ")") + (string= token "[") + (string= token "]") + (string= token ";") + (eq token 'T_CLOSE_TAG)))) + ;; (message "Token %s - %s in %s was invalid" token token-number phps-mode/lexer-tokens) + (setq valid-tokens nil))) + (setq token-number (+ token-number 1))) + (when valid-tokens + ;; (message "Tokens was valid, decreasing indent %s - %s" (line-beginning-position) (line-end-position)) + (setq indent-level (- indent-level (- indent-start indent-end)))))) + ;; (message "inside scripting, start: %s, end: %s, indenting to column %s " start end indent-level) + (indent-line-to (* indent-level tab-width)) + (phps-mode/run-incremental-lex))))))) ;; TODO Implement this (defun phps-mode/indent-region ()