emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/progmodes/cperl-mode.el


From: Stefan Monnier
Subject: [Emacs-diffs] Changes to emacs/lisp/progmodes/cperl-mode.el
Date: Sat, 22 Feb 2003 21:19:02 -0500

Index: emacs/lisp/progmodes/cperl-mode.el
diff -c emacs/lisp/progmodes/cperl-mode.el:1.42 
emacs/lisp/progmodes/cperl-mode.el:1.43
*** emacs/lisp/progmodes/cperl-mode.el:1.42     Sat Feb 22 20:42:24 2003
--- emacs/lisp/progmodes/cperl-mode.el  Sat Feb 22 21:19:02 2003
***************
*** 69,74 ****
--- 69,77 ----
  
  ;; Some macros are needed for `defcustom'
  (eval-when-compile
+   (condition-case nil
+       (require 'man)
+     (error nil))
    (defconst cperl-xemacs-p (string-match "XEmacs\\|Lucid" emacs-version))
    (defvar cperl-can-font-lock
      (or cperl-xemacs-p
***************
*** 120,127 ****
        `(goto-line (string-to-int (elt ,elt 1))))
      ;;)
      (defmacro cperl-etags-goto-tag-location (elt)
!       `(etags-goto-tag-location ,elt)))
!   (autoload 'tmm-prompt "tmm"))
  
  (defconst cperl-xemacs-p (string-match "XEmacs\\|Lucid" emacs-version))
  
--- 123,129 ----
        `(goto-line (string-to-int (elt ,elt 1))))
      ;;)
      (defmacro cperl-etags-goto-tag-location (elt)
!       `(etags-goto-tag-location ,elt))))
  
  (defconst cperl-xemacs-p (string-match "XEmacs\\|Lucid" emacs-version))
  
***************
*** 321,326 ****
--- 323,333 ----
    :type '(choice (const null) boolean)
    :group 'cperl-affected-by-hairy)
  
+ (defcustom cperl-electric-backspace-untabify t
+   "*Not-nil means electric-backspace will untabify in CPerl."
+   :type 'boolean
+   :group 'cperl-autoinsert-details)
+ 
  (defcustom cperl-hairy nil
    "*Not-nil means most of the bells and whistles are enabled in CPerl.
  Affects: `cperl-font-lock', `cperl-electric-lbrace-space',
***************
*** 335,342 ****
    :type 'integer
    :group 'cperl-indentation-details)
  
! (defcustom cperl-vc-header-alist '((SCCS "$sccs = '%W\%' ;")
!                                  (RCS "$rcs = ' $Id\$ ' ;"))
    "*What to use as `vc-header-alist' in CPerl."
    :type '(repeat (list symbol string))
    :group 'cperl)
--- 342,349 ----
    :type 'integer
    :group 'cperl-indentation-details)
  
! (defcustom cperl-vc-header-alist '((SCCS "($sccs) = ('%W\%' =~ 
/(\\d+(\\.\\d+)+)/) ;")
!                                  (RCS "($rcs) = (' $Id\$ ' =~ 
/(\\d+(\\.\\d+)+)/) ;"))
    "*What to use as `vc-header-alist' in CPerl."
    :type '(repeat (list symbol string))
    :group 'cperl)
***************
*** 1128,1184 ****
  ;;;        ["Add tags for Perl files in (sub)directories"
  ;;;         (cperl-etags t 'recursive) t])
  ;;;; cperl-write-tags (&optional file erase recurse dir inbuffer)
!           ["Create tags for current file" (cperl-write-tags nil t) t]
!           ["Add tags for current file" (cperl-write-tags) t]
!           ["Create tags for Perl files in directory"
!            (cperl-write-tags nil t nil t) t]
!           ["Add tags for Perl files in directory"
!            (cperl-write-tags nil nil nil t) t]
!           ["Create tags for Perl files in (sub)directories"
!            (cperl-write-tags nil t t t) t]
!           ["Add tags for Perl files in (sub)directories"
!            (cperl-write-tags nil nil t t) t]))
!         ("Perl docs"
!          ["Define word at point" imenu-go-find-at-position
!           (fboundp 'imenu-go-find-at-position)]
!          ["Help on function" cperl-info-on-command t]
!          ["Help on function at point" cperl-info-on-current-command t]
!          ["Help on symbol at point" cperl-get-help t]
!          ["Perldoc" cperl-perldoc t]
!          ["Perldoc on word at point" cperl-perldoc-at-point t]
!          ["View manpage of POD in this file" cperl-pod-to-manpage t]
!          ["Auto-help on" cperl-lazy-install
!           (and (fboundp 'run-with-idle-timer)
!                (not cperl-lazy-installed))]
!          ["Auto-help off" (eval '(cperl-lazy-unstall))
!           (and (fboundp 'run-with-idle-timer)
!                cperl-lazy-installed)])
!         ("Toggle..."
!          ["Auto newline" cperl-toggle-auto-newline t]
!          ["Electric parens" cperl-toggle-electric t]
!          ["Electric keywords" cperl-toggle-abbrev t]
!          ["Fix whitespace on indent" cperl-toggle-construct-fix t]
!          ["Auto fill" auto-fill-mode t])
!         ("Indent styles..."
!          ["CPerl" (cperl-set-style "CPerl") t]
!          ["PerlStyle" (cperl-set-style "PerlStyle") t]
!          ["GNU" (cperl-set-style "GNU") t]
!          ["C++" (cperl-set-style "C++") t]
!          ["FSF" (cperl-set-style "FSF") t]
!          ["BSD" (cperl-set-style "BSD") t]
!          ["Whitesmith" (cperl-set-style "Whitesmith") t]
!          ["Current" (cperl-set-style "Current") t]
!          ["Memorized" (cperl-set-style-back) cperl-old-style])
!         ("Micro-docs"
!          ["Tips" (describe-variable 'cperl-tips) t]
!          ["Problems" (describe-variable 'cperl-problems) t]
!          ["Speed" (describe-variable 'cperl-speed) t]
!          ["Praise" (describe-variable 'cperl-praise) t]
!          ["Faces" (describe-variable 'cperl-tips-faces) t]
!          ["CPerl mode" (describe-function 'cperl-mode) t]
!          ["CPerl version"
!           (message "The version of master-file for this CPerl is %s-emacs"
!                    cperl-version) t]))))
    (error nil))
  
  (autoload 'c-macro-expand "cmacexp"
--- 1135,1192 ----
  ;;;        ["Add tags for Perl files in (sub)directories"
  ;;;         (cperl-etags t 'recursive) t])
  ;;;; cperl-write-tags (&optional file erase recurse dir inbuffer)
!          ["Create tags for current file" (cperl-write-tags nil t) t]
!          ["Add tags for current file" (cperl-write-tags) t]
!          ["Create tags for Perl files in directory"
!           (cperl-write-tags nil t nil t) t]
!          ["Add tags for Perl files in directory"
!           (cperl-write-tags nil nil nil t) t]
!          ["Create tags for Perl files in (sub)directories"
!           (cperl-write-tags nil t t t) t]
!          ["Add tags for Perl files in (sub)directories"
!           (cperl-write-tags nil nil t t) t]))
!        ("Perl docs"
!         ["Define word at point" imenu-go-find-at-position 
!          (fboundp 'imenu-go-find-at-position)]
!         ["Help on function" cperl-info-on-command t]
!         ["Help on function at point" cperl-info-on-current-command t]
!         ["Help on symbol at point" cperl-get-help t]
!         ["Perldoc" cperl-perldoc t]
!         ["Perldoc on word at point" cperl-perldoc-at-point t]
!         ["View manpage of POD in this file" cperl-build-manpage t]
!         ["Auto-help on" cperl-lazy-install 
!          (and (fboundp 'run-with-idle-timer)
!               (not cperl-lazy-installed))]
!         ["Auto-help off" cperl-lazy-unstall
!          (and (fboundp 'run-with-idle-timer)
!               cperl-lazy-installed)])
!        ("Toggle..."
!         ["Auto newline" cperl-toggle-auto-newline t]
!         ["Electric parens" cperl-toggle-electric t]
!         ["Electric keywords" cperl-toggle-abbrev t]
!         ["Fix whitespace on indent" cperl-toggle-construct-fix t]
!         ["Auto-help on Perl constructs" cperl-toggle-autohelp t]
!         ["Auto fill" auto-fill-mode t]) 
!        ("Indent styles..."
!         ["CPerl" (cperl-set-style "CPerl") t]
!         ["PerlStyle" (cperl-set-style "PerlStyle") t]
!         ["GNU" (cperl-set-style "GNU") t]
!         ["C++" (cperl-set-style "C++") t]
!         ["FSF" (cperl-set-style "FSF") t]
!         ["BSD" (cperl-set-style "BSD") t]
!         ["Whitesmith" (cperl-set-style "Whitesmith") t]
!         ["Current" (cperl-set-style "Current") t]
!         ["Memorized" (cperl-set-style-back) cperl-old-style])
!        ("Micro-docs"
!         ["Tips" (describe-variable 'cperl-tips) t]
!         ["Problems" (describe-variable 'cperl-problems) t]
!         ["Speed" (describe-variable 'cperl-speed) t]
!         ["Praise" (describe-variable 'cperl-praise) t]
!         ["Faces" (describe-variable 'cperl-tips-faces) t]
!         ["CPerl mode" (describe-function 'cperl-mode) t]
!         ["CPerl version"
!          (message "The version of master-file for this CPerl is %s-Emacs"
!                   cperl-version) t]))))
    (error nil))
  
  (autoload 'c-macro-expand "cmacexp"
***************
*** 1469,1475 ****
    (make-local-variable 'comment-start-skip)
    (setq comment-start-skip "#+ *")
    (make-local-variable 'defun-prompt-regexp)
!   (setq defun-prompt-regexp "^[ \t]*sub[ \t]+\\([^ \t\n{(;]+\\)[ \t]*")
    (make-local-variable 'comment-indent-function)
    (setq comment-indent-function 'cperl-comment-indent)
    (make-local-variable 'parse-sexp-ignore-comments)
--- 1477,1483 ----
    (make-local-variable 'comment-start-skip)
    (setq comment-start-skip "#+ *")
    (make-local-variable 'defun-prompt-regexp)
!   (setq defun-prompt-regexp "^[ \t]*sub[ \t]+\\([^ \t\n{(;]+\\)\\([ 
\t]*([^()]*)[ \t]*\\)?[ \t]*")
    (make-local-variable 'comment-indent-function)
    (setq comment-indent-function 'cperl-comment-indent)
    (make-local-variable 'parse-sexp-ignore-comments)
***************
*** 1692,1698 ****
                    (save-excursion
                      (up-list (- (prefix-numeric-value arg)))
                      ;;(cperl-after-block-p (point-min))
!                     (cperl-after-expr-p nil "{;)"))
                  (error nil))))
          ;; Just insert the guy
          (self-insert-command (prefix-numeric-value arg))
--- 1700,1708 ----
                    (save-excursion
                      (up-list (- (prefix-numeric-value arg)))
                      ;;(cperl-after-block-p (point-min))
!                     (or (cperl-after-expr-p nil "{;)")
!                         ;; after sub, else, continue
!                         (cperl-after-block-p nil 'pre)))
                  (error nil))))
          ;; Just insert the guy
          (self-insert-command (prefix-numeric-value arg))
***************
*** 1772,1778 ****
                (goto-char pos)))))
  
  (defun cperl-electric-paren (arg)
!   "Insert a matching pair of parentheses."
    (interactive "P")
    (let ((beg (save-excursion (beginning-of-line) (point)))
        (other-end (if (and cperl-electric-parens-mark
--- 1782,1789 ----
                (goto-char pos)))))
  
  (defun cperl-electric-paren (arg)
!   "Insert an opening parenthesis or a matching pair of parentheses.
! See `cperl-electric-parens'."
    (interactive "P")
    (let ((beg (save-excursion (beginning-of-line) (point)))
        (other-end (if (and cperl-electric-parens-mark
***************
*** 1807,1813 ****
  
  (defun cperl-electric-rparen (arg)
    "Insert a matching pair of parentheses if marking is active.
! If not, or if we are not at the end of marking range, would self-insert."
    (interactive "P")
    (let ((beg (save-excursion (beginning-of-line) (point)))
        (other-end (if (and cperl-electric-parens-mark
--- 1818,1825 ----
  
  (defun cperl-electric-rparen (arg)
    "Insert a matching pair of parentheses if marking is active.
! If not, or if we are not at the end of marking range, would self-insert.
! Affected by `cperl-electric-parens'."
    (interactive "P")
    (let ((beg (save-excursion (beginning-of-line) (point)))
        (other-end (if (and cperl-electric-parens-mark
***************
*** 1867,1872 ****
--- 1879,1886 ----
                                   (not (eq (get-text-property (point)
                                                               'syntax-type)
                                            'pod))))))
+        (save-excursion (forward-sexp -1)
+                        (not (memq (following-char) (append "address@hidden&*" 
nil))))
         (progn
           (and (eq (preceding-char) ?y)
                (progn                  ; "foreachmy"
***************
*** 1896,1902 ****
                             (if my
                                 (forward-char 1)
                               (delete-char 1)))
!            (search-backward ")"))
           (if delete
               (cperl-putback-char cperl-del-back-ch))
           (if cperl-message-electric-keyword
--- 1910,1920 ----
                             (if my
                                 (forward-char 1)
                               (delete-char 1)))
!            (search-backward ")")
!            (if (eq last-command-char ?\()
!                (progn                 ; Avoid "if (())"
!                  (delete-backward-char 1)
!                  (delete-backward-char -1))))
           (if delete
               (cperl-putback-char cperl-del-back-ch))
           (if cperl-message-electric-keyword
***************
*** 2185,2192 ****
        (self-insert-command (prefix-numeric-value arg)))))
  
  (defun cperl-electric-backspace (arg)
!   "Backspace-untabify, or remove the whitespace around the point inserted
! by an electric key."
    (interactive "p")
    (if (and cperl-auto-newline
           (memq last-command '(cperl-electric-semi
--- 2203,2210 ----
        (self-insert-command (prefix-numeric-value arg)))))
  
  (defun cperl-electric-backspace (arg)
!   "Backspace, or remove the whitespace around the point inserted by an 
electric
! key.  Will untabify if `cperl-electric-backspace-untabify' is non-nil."
    (interactive "p")
    (if (and cperl-auto-newline
           (memq last-command '(cperl-electric-semi
***************
*** 2210,2216 ****
          (setq p (point))
          (skip-chars-backward " \t\n")
          (delete-region (point) p))
!       (backward-delete-char-untabify arg))))
  
  (defun cperl-inside-parens-p ()
    (condition-case ()
--- 2228,2236 ----
          (setq p (point))
          (skip-chars-backward " \t\n")
          (delete-region (point) p))
!       (if cperl-electric-backspace-untabify
!         (backward-delete-char-untabify arg)
!       (delete-backward-char arg)))))
  
  (defun cperl-inside-parens-p ()
    (condition-case ()
***************
*** 2370,2375 ****
--- 2390,2396 ----
  
  Will not correct the indentation for labels, but will correct it for braces
  and closing parentheses and brackets."
+   (cperl-update-syntaxification (point) (point))
    (save-excursion
      (if (or
         (and (memq (get-text-property (point) 'syntax-type)
***************
*** 2467,2473 ****
                                   (progn
                                     (forward-sexp -1)
                                     (skip-chars-backward " \t")
!                                    (looking-at "[ \t]*[a-zA-Z_][a-zA-Z_0-9]*[ 
\t]*:"))))
                          (progn
                            (if (and parse-data
                                     (not (eq char-after ?\C-j)))
--- 2488,2495 ----
                                   (progn
                                     (forward-sexp -1)
                                     (skip-chars-backward " \t")
!                                    (looking-at "[ \t]*[a-zA-Z_][a-zA-Z_0-9]*[ 
\t]*:")))
!                             (get-text-property (point) 'first-format-line))
                          (progn
                            (if (and parse-data
                                     (not (eq char-after ?\C-j)))
***************
*** 2545,2551 ****
                                    (append (if is-block " ;{" " ,;{") '(nil)))
                              (and (eq (preceding-char) ?\})
                                   (cperl-after-block-and-statement-beg
!                                   containing-sexp))))
                     ;; This line is continuation of preceding line's statement;
                     ;; indent  `cperl-continued-statement-offset'  more than 
the
                     ;; previous line of the statement.
--- 2567,2574 ----
                                    (append (if is-block " ;{" " ,;{") '(nil)))
                              (and (eq (preceding-char) ?\})
                                   (cperl-after-block-and-statement-beg
!                                   containing-sexp))
!                             (get-text-property (point) 'first-format-line)))
                     ;; This line is continuation of preceding line's statement;
                     ;; indent  `cperl-continued-statement-offset'  more than 
the
                     ;; previous line of the statement.
***************
*** 2586,2596 ****
                      (forward-char 1)
                      (setq old-indent (current-indentation))
                      (let ((colon-line-end 0))
!                       (while (progn (skip-chars-forward " \t\n")
!                                     (looking-at "#\\|[a-zA-Z0-9_$]*:[^:]"))
                          ;; Skip over comments and labels following openbrace.
                          (cond ((= (following-char) ?\#)
                                 (forward-line 1))
                                ;; label:
                                (t
                                 (save-excursion (end-of-line)
--- 2609,2624 ----
                      (forward-char 1)
                      (setq old-indent (current-indentation))
                      (let ((colon-line-end 0))
!                       (while
!                           (progn (skip-chars-forward " \t\n")
!                                  (looking-at 
"#\\|[a-zA-Z0-9_$]*:[^:]\\|=[a-zA-Z]"))
                          ;; Skip over comments and labels following openbrace.
                          (cond ((= (following-char) ?\#)
                                 (forward-line 1))
+                               ((= (following-char) ?\=)
+                                (goto-char
+                                 (or (next-single-property-change (point) 
'in-pod)
+                                     (point-max)))) ; do not loop if no 
syntaxification
                                ;; label:
                                (t
                                 (save-excursion (end-of-line)
***************
*** 3050,3056 ****
  ;;            The body is marked `syntax-type' ==> `here-doc'
  ;;            The delimiter is marked `syntax-type' ==> `here-doc-delim'
  ;;    c) FORMATs:
! ;;            After-initial-line--to-end is marked `syntax-type' ==> `format'
  ;;    d) 'Q'uoted string:
  ;;            part between markers inclusive is marked `syntax-type' ==> 
`string'
  ;;            part between `q' and the first marker is marked `syntax-type' 
==> `prestring'
--- 3078,3085 ----
  ;;            The body is marked `syntax-type' ==> `here-doc'
  ;;            The delimiter is marked `syntax-type' ==> `here-doc-delim'
  ;;    c) FORMATs:
! ;;            First line (to =) marked `first-format-line' ==> t
! ;;            After-this--to-end is marked `syntax-type' ==> `format'
  ;;    d) 'Q'uoted string:
  ;;            part between markers inclusive is marked `syntax-type' ==> 
`string'
  ;;            part between `q' and the first marker is marked `syntax-type' 
==> `prestring'
***************
*** 3147,3153 ****
           "\\([^\"'`\n]*\\)"           ; 3 + 1
           "\\3"
           "\\|"
!          ;; Second variant: Identifier or \ID or empty
           "\\\\?\\(\\([a-zA-Z_][a-zA-Z_0-9]*\\)?\\)" ; 4 + 1, 5 + 1
           ;; Do not have <<= or << 30 or <<30 or << $blah.
           ;; "\\([^= address@hidden&]\\|[ \t]+[^ address@hidden&]\\)" ; 6 + 1
--- 3176,3182 ----
           "\\([^\"'`\n]*\\)"           ; 3 + 1
           "\\3"
           "\\|"
!          ;; Second variant: Identifier or \ID (same as 'ID') or empty
           "\\\\?\\(\\([a-zA-Z_][a-zA-Z_0-9]*\\)?\\)" ; 4 + 1, 5 + 1
           ;; Do not have <<= or << 30 or <<30 or << $blah.
           ;; "\\([^= address@hidden&]\\|[ \t]+[^ address@hidden&]\\)" ; 6 + 1
***************
*** 3178,3184 ****
                "__\\(END\\|DATA\\)__"
                ;; 1+6+2+1+1+2+1+1+1=16 extra () before this:
                "\\|"
!               "\\\\\\(['`\"]\\)")
             ""))))
      (unwind-protect
        (progn
--- 3207,3213 ----
                "__\\(END\\|DATA\\)__"
                ;; 1+6+2+1+1+2+1+1+1=16 extra () before this:
                "\\|"
!               "\\\\\\(['`\"($]\\)")
             ""))))
      (unwind-protect
        (progn
***************
*** 3195,3200 ****
--- 3224,3231 ----
                                                  cperl-postpone t
                                                  syntax-subtype t
                                                  rear-nonsticky t
+                                                 here-doc-group t
+                                                 first-format-line t
                                                  indentable t))
            ;; Need to remove face as well...
            (goto-char min)
***************
*** 3239,3245 ****
--- 3270,3278 ----
                          max e '(syntax-type t in-pod t syntax-table t
                                              cperl-postpone t
                                              syntax-subtype t
+                                             here-doc-group t
                                              rear-nonsticky t
+                                             first-format-line t
                                              indentable t))
                         (setq tmpend tb)))
                  (put-text-property b e 'in-pod t)
***************
*** 3287,3292 ****
--- 3320,3326 ----
               ;;"<<"
               ;;  "\\("                        ; 1 + 1
               ;;  ;; First variant "BLAH" or just ``.
+              ;;     "[ \t]*"                  ; Yes, whitespace is allowed!
               ;;     "\\([\"'`]\\)"    ; 2 + 1
               ;;     "\\([^\"'`\n]*\\)"        ; 3 + 1
               ;;     "\\3"
***************
*** 3328,3357 ****
                  (setq b (point))
                  ;; We do not search to max, since we may be called from
                  ;; some hook of fontification, and max is random
!                 (cond ((re-search-forward (concat "^" qtag "$")
!                                           stop-point 'toend)
!                        (if cperl-pod-here-fontify
!                            (progn
!                              ;; Highlight the ending delimiter
!                              (cperl-postpone-fontification (match-beginning 
0) (match-end 0)
!                                                            'face 
font-lock-constant-face)
!                              (cperl-put-do-not-fontify b (match-end 0) t)
!                              ;; Highlight the HERE-DOC
!                              (cperl-postpone-fontification b (match-beginning 
0)
!                                                            'face here-face)))
!                        (setq e1 (cperl-1+ (match-end 0)))
!                        (put-text-property b (match-beginning 0)
!                                           'syntax-type 'here-doc)
!                        (put-text-property (match-beginning 0) e1
!                                           'syntax-type 'here-doc-delim)
!                        (put-text-property b e1
!                                           'here-doc-group t)
!                        (cperl-commentify b e1 nil)
!                        (cperl-put-do-not-fontify b (match-end 0) t)
!                        (if (> e1 max)
!                            (setq tmpend tb)))
!                       (t (message "End of here-document `%s' not found." tag)
!                          (or (car err-l) (setcar err-l b))))))
               ;; format
               ((match-beginning 8)
                ;; 1+6=7 extra () before this:
--- 3362,3395 ----
                  (setq b (point))
                  ;; We do not search to max, since we may be called from
                  ;; some hook of fontification, and max is random
!                 (or (and (re-search-forward (concat "^" qtag "$")
!                                             stop-point 'toend)
!                          (eq (following-char) ?\n))
!                   (progn              ; Pretend we matched at the end
!                     (goto-char (point-max))
!                     (re-search-forward "\\'")
!                     (message "End of here-document `%s' not found." tag)
!                     (or (car err-l) (setcar err-l b))))
!                 (if cperl-pod-here-fontify
!                     (progn
!                       ;; Highlight the ending delimiter
!                       (cperl-postpone-fontification (match-beginning 0) 
(match-end 0)
!                                                     'face 
font-lock-constant-face)
!                       (cperl-put-do-not-fontify b (match-end 0) t)
!                       ;; Highlight the HERE-DOC
!                       (cperl-postpone-fontification b (match-beginning 0)
!                                                     'face here-face)))
!                 (setq e1 (cperl-1+ (match-end 0)))
!                 (put-text-property b (match-beginning 0)
!                                    'syntax-type 'here-doc)
!                 (put-text-property (match-beginning 0) e1
!                                    'syntax-type 'here-doc-delim)
!                 (put-text-property b e1
!                                    'here-doc-group t)
!                 (cperl-commentify b e1 nil)
!                 (cperl-put-do-not-fontify b (match-end 0) t)
!                 (if (> e1 max)
!                     (setq tmpend tb))))
               ;; format
               ((match-beginning 8)
                ;; 1+6=7 extra () before this:
***************
*** 3363,3368 ****
--- 3401,3410 ----
                             "")
                      tb (match-beginning 0))
                (setq argument nil)
+               (put-text-property (save-excursion
+                                    (beginning-of-line)
+                                    (point))
+                                  b 'first-format-line 't)
                (if cperl-pod-here-fontify
                    (while (and (eq (forward-line) 0)
                                (not (looking-at "^[.;]$")))
***************
*** 3415,3427 ****
                      bb (char-after (1- (match-beginning b1))) ; tmp holder
                      ;; bb == "Not a stringy"
                      bb (if (eq b1 10) ; user variables/whatever
!                            (or
!                             (memq bb '(?\$ ?\@ ?\% ?\* ?\#)) ; $#y
!                             (and (eq bb ?-) (eq c ?s)) ; -s file test
!                             (and (eq bb ?\&)
!                                  (not (eq (char-after ; &&m/blah/
!                                            (- (match-beginning b1) 2))
!                                           ?\&))))
                           ;; <file> or <$file>
                           (and (eq c ?\<)
                                ;; Do not stringify <FH>, <$fh> :
--- 3457,3477 ----
                      bb (char-after (1- (match-beginning b1))) ; tmp holder
                      ;; bb == "Not a stringy"
                      bb (if (eq b1 10) ; user variables/whatever
!                            (and (memq bb (append "address@hidden:-&>" nil)) ; 
$#y)
!                                 (cond ((eq bb ?-) (eq c ?s)) ; -s file test
!                                       ((eq bb ?\:) ; $opt::s
!                                        (eq (char-after
!                                             (- (match-beginning b1) 2))
!                                            ?\:))
!                                       ((eq bb ?\>) ; $foo->s
!                                        (eq (char-after
!                                             (- (match-beginning b1) 2))
!                                            ?\-))
!                                       ((eq bb ?\&)
!                                        (not (eq (char-after   ; &&m/blah/
!                                                  (- (match-beginning b1) 2))
!                                                 ?\&)))
!                                       (t t)))
                           ;; <file> or <$file>
                           (and (eq c ?\<)
                                ;; Do not stringify <FH>, <$fh> :
***************
*** 3434,3439 ****
--- 3484,3490 ----
                (or bb
                    (if (eq b1 11)      ; bare /blah/ or ?blah? or <foo>
                        (setq argument ""
+                             b1 nil
                              bb        ; Not a regexp?
                              (progn
                                (not
***************
*** 3472,3487 ****
                                          (looking-at "\\s|")))))))
                              b (1- b))
                      ;; s y tr m
!                     ;; Check for $a->y
!                     (if (and (eq (preceding-char) ?>)
!                              (eq (char-after (- (point) 2)) ?-))
                          ;; Not a regexp
                          (setq bb t))))
                (or bb (setq state (parse-partial-sexp
                                    state-point b nil nil state)
                             state-point b))
                (goto-char b)
!               (if (or bb (nth 3 state) (nth 4 state))
                    (goto-char i)
                  ;; Skip whitespace and comments...
                  (if (looking-at "[ \t\n\f]+\\(#[^\n]*\n[ \t\n\f]*\\)+")
--- 3523,3580 ----
                                          (looking-at "\\s|")))))))
                              b (1- b))
                      ;; s y tr m
!                     ;; Check for $a -> y
!                     (setq b1 (preceding-char)
!                           go (point))
!                     (if (and (eq b1 ?>)
!                              (eq (char-after (- go 2)) ?-))
                          ;; Not a regexp
                          (setq bb t))))
                (or bb (setq state (parse-partial-sexp
                                    state-point b nil nil state)
                             state-point b))
+               (setq bb (or bb (nth 3 state) (nth 4 state)))
                (goto-char b)
!               (or bb
!                   (progn
!                     (if (looking-at "[ \t\n\f]+\\(#[^\n]*\n[ \t\n\f]*\\)+")
!                         (goto-char (match-end 0))
!                       (skip-chars-forward " \t\n\f"))
!                     (cond ((and (eq (following-char) ?\})
!                                 (eq b1 ?\{))
!                            ;; Check for $a[23]->{ s }, @{s} and *{s::foo}
!                            (goto-char (1- go))
!                            (skip-chars-backward " \t\n\f")
!                            (if (memq (preceding-char) (append 
"address@hidden&*" nil))
!                                (setq bb t) ; @{y}
!                              (condition-case nil
!                                  (forward-sexp -1)
!                                (error nil)))
!                            (if (or bb
!                                    (looking-at ; $foo -> {s}
!                                     
"address@hidden([a-zA-Z0-9_:]+\\|[^{]\\)\\([ \t\n]*->\\)?[ \t\n]*{")
!                                    (and ; $foo[12] -> {s}
!                                     (memq (following-char) '(?\{ ?\[))
!                                     (progn
!                                       (forward-sexp 1)
!                                       (looking-at "\\([ \t\n]*->\\)?[ 
\t\n]*{"))))
!                                (setq bb t)
!                              (goto-char b)))
!                           ((and (eq (following-char) ?=)
!                                 (eq (char-after (1+ (point))) ?\>))
!                            ;; Check for { foo => 1, s => 2 }
!                            ;; Apparently s=> is never a substitution...
!                            (setq bb t))
!                           ((and (eq (following-char) ?:)
!                                 (eq b1 ?\{) ; Check for $ { s::bar }
!                                 (looking-at "::[a-zA-Z0-9_:]*[ \t\n\f]*}")
!                                 (progn 
!                                   (goto-char (1- go))
!                                   (skip-chars-backward " \t\n\f")
!                                   (memq (preceding-char)
!                                         (append "address@hidden&*" nil))))
!                            (setq bb t)))))
!               (if bb
                    (goto-char i)
                  ;; Skip whitespace and comments...
                  (if (looking-at "[ \t\n\f]+\\(#[^\n]*\n[ \t\n\f]*\\)+")
***************
*** 3703,3709 ****
                  (cperl-commentify b bb nil)
                  (setq end t))
                (goto-char bb))
!              ((match-beginning 17)    ; "\\\\\\(['`\"]\\)"
                (setq bb (match-end 0)
                      b (match-beginning 0))
                (goto-char b)
--- 3796,3803 ----
                  (cperl-commentify b bb nil)
                  (setq end t))
                (goto-char bb))
!              ((match-beginning 17)    ; "\\\\\\(['`\"($]\\)"
!               ;; Trailing backslash ==> non-quoting outside string/comment
                (setq bb (match-end 0)
                      b (match-beginning 0))
                (goto-char b)
***************
*** 3752,3770 ****
            (if (< p (point)) (goto-char p))
            (setq stop t)))))))
  
! (defun cperl-after-block-p (lim)
    ;; We suppose that the preceding char is }.
    (save-excursion
      (condition-case nil
        (progn
!         (forward-sexp -1)
          (cperl-backward-to-noncomment lim)
          (or (eq (point) lim)
              (eq (preceding-char) ?\) ) ; if () {}    sub f () {}
              (if (eq (char-syntax (preceding-char)) ?w) ; else {}
                  (save-excursion
                    (forward-sexp -1)
!                   (or (looking-at 
"\\(else\\|grep\\|map\\|BEGIN\\|END\\|CHECK\\|INIT\\)\\>")
                        ;; sub f {}
                        (progn
                          (cperl-backward-to-noncomment lim)
--- 3846,3867 ----
            (if (< p (point)) (goto-char p))
            (setq stop t)))))))
  
! (defun cperl-after-block-p (lim &optional pre-block)
!   "Return true if the preceeding } ends a block or a following { starts one.
! Would not look before LIM.  If PRE-BLOCK is nil checks preceeding }.
! otherwise following {."
    ;; We suppose that the preceding char is }.
    (save-excursion
      (condition-case nil
        (progn
!         (or pre-block (forward-sexp -1))
          (cperl-backward-to-noncomment lim)
          (or (eq (point) lim)
              (eq (preceding-char) ?\) ) ; if () {}    sub f () {}
              (if (eq (char-syntax (preceding-char)) ?w) ; else {}
                  (save-excursion
                    (forward-sexp -1)
!                   (or (looking-at 
"\\(else\\|continue\\|grep\\|map\\|BEGIN\\|END\\|CHECK\\|INIT\\)\\>")
                        ;; sub f {}
                        (progn
                          (cperl-backward-to-noncomment lim)
***************
*** 3781,3795 ****
  CHARS is a string that contains good characters to have before us (however,
  `}' is treated \"smartly\" if it is not in the list)."
    (let ((lim (or lim (point-min)))
!       stop p)
      (save-excursion
        (while (and (not stop) (> (point) lim))
        (skip-chars-backward " \t\n\f" lim)
        (setq p (point))
        (beginning-of-line)
        (if (looking-at "^[ \t]*\\(#\\|$\\)") nil ; Only comment, skip
          ;; Else: last iteration, or a label
!         (cperl-to-comment-or-eol)
          (skip-chars-backward " \t")
          (if (< p (point)) (goto-char p))
          (setq p (point))
--- 3878,3905 ----
  CHARS is a string that contains good characters to have before us (however,
  `}' is treated \"smartly\" if it is not in the list)."
    (let ((lim (or lim (point-min)))
!       stop p pr)
!     (cperl-update-syntaxification (point) (point))
      (save-excursion
        (while (and (not stop) (> (point) lim))
        (skip-chars-backward " \t\n\f" lim)
        (setq p (point))
        (beginning-of-line)
+       ;;(memq (setq pr (get-text-property (point) 'syntax-type))
+       ;;      '(pod here-doc here-doc-delim))
+       (if (get-text-property (point) 'here-doc-group)
+           (progn
+             (goto-char
+              (previous-single-property-change (point) 'here-doc-group))
+             (beginning-of-line 0)))
+       (if (get-text-property (point) 'in-pod)
+           (progn
+             (goto-char
+              (previous-single-property-change (point) 'in-pod))
+             (beginning-of-line 0)))
        (if (looking-at "^[ \t]*\\(#\\|$\\)") nil ; Only comment, skip
          ;; Else: last iteration, or a label
!         (cperl-to-comment-or-eol)     ; Will not move past "." after a format
          (skip-chars-backward " \t")
          (if (< p (point)) (goto-char p))
          (setq p (point))
***************
*** 3808,3814 ****
            (if test (eval test)
              (or (memq (preceding-char) (append (or chars "{;") nil))
                  (and (eq (preceding-char) ?\})
!                      (cperl-after-block-p lim)))))))))
  
  (defun cperl-backward-to-start-of-continued-exp (lim)
    (if (memq (preceding-char) (append ")]}\"'`" nil))
--- 3918,3927 ----
            (if test (eval test)
              (or (memq (preceding-char) (append (or chars "{;") nil))
                  (and (eq (preceding-char) ?\})
!                      (cperl-after-block-p lim))
!                 (and (eq (following-char) ?.) ; in format: see comment above
!                      (eq (get-text-property (point) 'syntax-type)
!                          'format)))))))))
  
  (defun cperl-backward-to-start-of-continued-exp (lim)
    (if (memq (preceding-char) (append ")]}\"'`" nil))
***************
*** 3931,3937 ****
        (if (looking-at
             "[ \t]*\\<for\\(each\\)?[ \t]+\\(my\\|local\\|our\\)[ 
\t]*\\$[_a-zA-Z0-9]+\\(\t*\\|[ \t][ \t]+\\)[^ \t\n#]")
            (progn
!             (forward-word 3)
              (delete-horizontal-space)
              (insert
               (make-string cperl-indent-region-fix-constructs ?\ ))
--- 4044,4050 ----
        (if (looking-at
             "[ \t]*\\<for\\(each\\)?[ \t]+\\(my\\|local\\|our\\)[ 
\t]*\\$[_a-zA-Z0-9]+\\(\t*\\|[ \t][ \t]+\\)[^ \t\n#]")
            (progn
!             (forward-sexp 3)
              (delete-horizontal-space)
              (insert
               (make-string cperl-indent-region-fix-constructs ?\ ))
***************
*** 5394,5406 ****
           (if (cperl-val 'cperl-electric-parens) "" "not ")))
  
  (defun cperl-toggle-autohelp ()
!   "Toggle the state of automatic help message in CPerl mode.
! See `cperl-lazy-help-time' too."
    (interactive)
    (if (fboundp 'run-with-idle-timer)
        (progn
        (if cperl-lazy-installed
!           (eval '(cperl-lazy-unstall))
          (cperl-lazy-install))
        (message "Perl help messages will %sbe automatically shown now."
                 (if cperl-lazy-installed "" "not ")))
--- 5507,5519 ----
           (if (cperl-val 'cperl-electric-parens) "" "not ")))
  
  (defun cperl-toggle-autohelp ()
!   "Toggle the state of Auto-Help on Perl constructs (put in the message area).
! Delay of auto-help controlled by `cperl-lazy-help-time'."
    (interactive)
    (if (fboundp 'run-with-idle-timer)
        (progn
        (if cperl-lazy-installed
!           (cperl-lazy-unstall)
          (cperl-lazy-install))
        (message "Perl help messages will %sbe automatically shown now."
                 (if cperl-lazy-installed "" "not ")))
***************
*** 6131,6142 ****
  (defvar cperl-short-docs 'please-ignore-this-line
    ;; Perl4 version was written by Johan Vromans (address@hidden)
    "# based on '@(#)@ perl-descr.el 1.9 - describe-perl-symbol' [Perl 5]
  ! ... Logical negation.
  ... != ...    Numeric inequality.
  ... !~ ...    Search pattern, substitution, or translation (negated).
  $!    In numeric context: errno.  In a string context: error string.
  $\"   The separator which joins elements of arrays interpolated in strings.
! $#    The output format for printed numbers.  Initial value is %.15g or close.
  $$    Process number of this script.  Changes in the fork()ed child process.
  $%    The current page number of the currently selected output channel.
  
--- 6244,6256 ----
  (defvar cperl-short-docs 'please-ignore-this-line
    ;; Perl4 version was written by Johan Vromans (address@hidden)
    "# based on '@(#)@ perl-descr.el 1.9 - describe-perl-symbol' [Perl 5]
+ ...   Range (list context); flip/flop [no flop when flip] (scalar context).
  ! ... Logical negation.
  ... != ...    Numeric inequality.
  ... !~ ...    Search pattern, substitution, or translation (negated).
  $!    In numeric context: errno.  In a string context: error string.
  $\"   The separator which joins elements of arrays interpolated in strings.
! $#    The output format for printed numbers.  Default is %.15g or close.
  $$    Process number of this script.  Changes in the fork()ed child process.
  $%    The current page number of the currently selected output channel.
  
***************
*** 6163,6169 ****
  $-    The number of lines left on the page.
  $.    The current input line number of the last filehandle that was read.
  $/    The input record separator, newline by default.
! $0    Name of the file containing the perl script being executed.  May be set.
  $:     String may be broken after these characters to fill ^-lines in a 
format.
  $;    Subscript separator for multi-dim array emulation.  Default \"\\034\".
  $<    The real uid of this process.
--- 6277,6283 ----
  $-    The number of lines left on the page.
  $.    The current input line number of the last filehandle that was read.
  $/    The input record separator, newline by default.
! $0    Name of the file containing the current perl script (read/write).
  $:     String may be broken after these characters to fill ^-lines in a 
format.
  $;    Subscript separator for multi-dim array emulation.  Default \"\\034\".
  $<    The real uid of this process.
***************
*** 6240,6251 ****
  -x    File is executable by effective uid.
  -z    File has zero size.
  .     Concatenate strings.
! ..    Alternation, also range operator.
  .=    Concatenate assignment strings
  ... / ...     Division.       /PATTERN/ioxsmg Pattern match
  ... /= ...    Division assignment.
  /PATTERN/ioxsmg       Pattern match.
! ... < ...     Numeric less than.      <pattern>       Glob.   See <NAME>, <> 
as well.
  <NAME>        Reads line from filehandle NAME (a bareword or dollar-bareword).
  <pattern>     Glob (Unless pattern is bareword/dollar-bareword - see <NAME>).
  <>    Reads line from union of files in @ARGV (= command line) and STDIN.
--- 6354,6365 ----
  -x    File is executable by effective uid.
  -z    File has zero size.
  .     Concatenate strings.
! ..    Range (list context); flip/flop (scalar context) operator.
  .=    Concatenate assignment strings
  ... / ...     Division.       /PATTERN/ioxsmg Pattern match
  ... /= ...    Division assignment.
  /PATTERN/ioxsmg       Pattern match.
! ... < ...    Numeric less than.       <pattern>       Glob.   See <NAME>, <> 
as well.
  <NAME>        Reads line from filehandle NAME (a bareword or dollar-bareword).
  <pattern>     Glob (Unless pattern is bareword/dollar-bareword - see <NAME>).
  <>    Reads line from union of files in @ARGV (= command line) and STDIN.
***************
*** 6263,6269 ****
  ?PATTERN?     One-time pattern match.
  @ARGV Command line arguments (not including the command name - see $0).
  @INC  List of places to look for perl scripts during do/include/use.
! @_    Parameter array for subroutines.  Also used by split unless in array 
context.
  \\  Creates reference to what follows, like \$var, or quotes non-\w in 
strings.
  \\0   Octal char, e.g. \\033.
  \\E   Case modification terminator.  See \\Q, \\L, and \\U.
--- 6377,6383 ----
  ?PATTERN?     One-time pattern match.
  @ARGV Command line arguments (not including the command name - see $0).
  @INC  List of places to look for perl scripts during do/include/use.
! @_    Parameter array for subroutines; result of split() unless in list 
context.
  \\  Creates reference to what follows, like \$var, or quotes non-\w in 
strings.
  \\0   Octal char, e.g. \\033.
  \\E   Case modification terminator.  See \\Q, \\L, and \\U.
***************
*** 6969,6982 ****
                   default-entry)
               input))))
    (require 'man)
!   (let* ((is-func (and
                   (string-match "^[a-z]+$" word)
                   (string-match (concat "^" word "\\>")
                                 (documentation-property
                                  'cperl-short-docs
                                  'variable-documentation))))
         (manual-program (if is-func "perldoc -f" "perldoc")))
!     (Man-getpage-in-background word)))
  
  (defun cperl-perldoc-at-point ()
    "Run a `perldoc' on the word around point."
--- 7083,7103 ----
                   default-entry)
               input))))
    (require 'man)
!   (let* ((case-fold-search nil)
!        (is-func (and
                   (string-match "^[a-z]+$" word)
                   (string-match (concat "^" word "\\>")
                                 (documentation-property
                                  'cperl-short-docs
                                  'variable-documentation))))
         (manual-program (if is-func "perldoc -f" "perldoc")))
!     (cond
!      (cperl-xemacs-p
!       (let ((Manual-program "perldoc")
!           (Manual-switches (if is-func (list "-f"))))
!       (manual-entry word)))
!      (t
!       (Man-getpage-in-background word)))))
  
  (defun cperl-perldoc-at-point ()
    "Run a `perldoc' on the word around point."
***************
*** 7006,7011 ****
--- 7127,7145 ----
                          (format (cperl-pod2man-build-command) pod2man-args))
           'Man-bgproc-sentinel)))))
  
+ ;;; Updated version by him too
+ (defun cperl-build-manpage ()
+   "Create a virtual manpage in Emacs from the POD in the file."
+   (interactive)
+   (require 'man)
+   (cond
+    (cperl-xemacs-p
+     (let ((Manual-program "perldoc"))
+       (manual-entry buffer-file-name)))
+    (t
+     (let* ((manual-program "perldoc"))
+       (Man-getpage-in-background buffer-file-name)))))
+ 
  (defun cperl-pod2man-build-command ()
    "Builds the entire background manpage and cleaning command."
    (let ((command (concat pod2man-program " %s 2>/dev/null"))
***************
*** 7024,7029 ****
--- 7158,7164 ----
      command))
  
  (defun cperl-lazy-install ())         ; Avoid a warning
+ (defun cperl-lazy-unstall ())         ; Avoid a warning
  
  (if (fboundp 'run-with-idle-timer)
      (progn
***************
*** 7034,7039 ****
--- 7169,7176 ----
        "Non-nil means that the lazy-help handlers are installed now.")
  
        (defun cperl-lazy-install ()
+       "Switches on Auto-Help on Perl constructs (put in the message area).
+ Delay of auto-help controlled by `cperl-lazy-help-time'."
        (interactive)
        (make-variable-buffer-local 'cperl-help-shown)
        (if (and (cperl-val 'cperl-lazy-help-time)
***************
*** 7047,7052 ****
--- 7184,7191 ----
              (setq cperl-lazy-installed t))))
  
        (defun cperl-lazy-unstall ()
+       "Switches off Auto-Help on Perl constructs (put in the message area).
+ Delay of auto-help controlled by `cperl-lazy-help-time'."
        (interactive)
        (remove-hook 'post-command-hook 'cperl-lazy-hook)
        (cancel-function-timers 'cperl-get-help-defer)
***************
*** 7123,7129 ****
          (cperl-fontify-syntaxically to)))))
  
  (defvar cperl-version
!   (let ((v  "Revision: 4.35"))
      (string-match ":\\s *\\([0-9.]+\\)" v)
      (substring v (match-beginning 1) (match-end 1)))
    "Version of IZ-supported CPerl package this file is based on.")
--- 7262,7268 ----
          (cperl-fontify-syntaxically to)))))
  
  (defvar cperl-version
!   (let ((v  "Revision: 5.0"))
      (string-match ":\\s *\\([0-9.]+\\)" v)
      (substring v (match-beginning 1) (match-end 1)))
    "Version of IZ-supported CPerl package this file is based on.")




reply via email to

[Prev in Thread] Current Thread [Next in Thread]