-;;; In fact the version of font-lock that this version supports can be
-;;; much newer than the version you actually have. This means that a
-;;; lot of faces can be set up, but are not visible on your screen
-;;; since the coloring rules for this faces are not defined.
-
-;;; Updates: ========================================
-
-;;; Made less hairy by default: parentheses not electric,
-;;; linefeed not magic. Bug with abbrev-mode corrected.
-
-;;;; After 1.4:
-;;; Better indentation:
-;;; subs inside braces should work now,
-;;; Toplevel braces obey customization.
-;;; indent-for-comment knows about bad cases, cperl-indent-for-comment
-;;; moves cursor to a correct place.
-;;; cperl-indent-exp written from the scratch! Slow... (quadratic!) :-(
-;;; (50 secs on DB::DB (sub of 430 lines), 486/66)
-;;; Minor documentation fixes.
-;;; Imenu understands packages as prefixes (including nested).
-;;; Hairy options can be switched off one-by-one by setting to null.
-;;; Names of functions and variables changed to conform to `cperl-' style.
-
-;;;; After 1.5:
-;;; Some bugs with indentation of labels (and embedded subs) corrected.
-;;; `cperl-indent-region' done (slow :-()).
-;;; `cperl-fill-paragraph' done.
-;;; Better package support for `imenu'.
-;;; Progress indicator for indentation (with `imenu' loaded).
-;;; `Cperl-set' was busted, now setting the individual hairy option
-;;; should be better.
-
-;;;; After 1.6:
-;;; `cperl-set-style' done.
-;;; `cperl-check-syntax' done.
-;;; Menu done.
-;;; New config variables `cperl-close-paren-offset' and `cperl-comment-column'.
-;;; Bugs with `cperl-auto-newline' corrected.
-;;; `cperl-electric-lbrace' can work with `cperl-auto-newline' in situation
-;;; like $hash{.
-
-;;;; 1.7 XEmacs (arius@informatik.uni-erlangen.de):
-;;; - use `next-command-event', if `next-command-events' does not exist
-;;; - use `find-face' as def. of `is-face'
-;;; - corrected def. of `x-color-defined-p'
-;;; - added const defs for font-lock-comment-face,
-;;; font-lock-keyword-face and font-lock-function-name-face
-;;; - added def. of font-lock-variable-name-face
-;;; - added (require 'easymenu) inside an `eval-when-compile'
-;;; - replaced 4-argument `substitute-key-definition' with ordinary
-;;; `define-key's
-;;; - replaced `mark-active' in menu definition by `cperl-use-region-p'.
-;;; Todo (at least):
-;;; - use emacs-vers.el (http://www.cs.utah.edu/~eeide/emacs/emacs-vers.el.gz)
-;;; for portable code?
-;;; - should `cperl-mode' do a
-;;; (if (featurep 'easymenu) (easy-menu-add cperl-menu))
-;;; or should this be left to the user's `cperl-mode-hook'?
-
-;;; Some bugs introduced by the above fix corrected (IZ ;-).
-;;; Some bugs under XEmacs introduced by the correction corrected.
-
-;;; Some more can remain since there are two many different variants.
-;;; Please feedback!
-
-;;; We do not support fontification of arrays and hashes under
-;;; obsolete font-lock any more. Upgrade.
-
-;;;; after 1.8 Minor bug with parentheses.
-;;;; after 1.9 Improvements from Joe Marzot.
-;;;; after 1.10
-;;; Does not need easymenu to compile under XEmacs.
-;;; `vc-insert-headers' should work better.
-;;; Should work with 19.29 and 19.12.
-;;; Small improvements to fontification.
-;;; Expansion of keywords does not depend on C-? being backspace.
-
-;;; after 1.10+
-;;; 19.29 and 19.12 supported.
-;;; `cperl-font-lock-enhanced' deprecated. Use font-lock-extra.el.
-;;; Support for font-lock-extra.el.
-
-;;;; After 1.11:
-;;; Tools submenu.
-;;; Support for perl5-info.
-;;; `imenu-go-find-at-position' in Tools requires imenu-go.el (see hints above)
-;;; Imenu entries do not work with stock imenu.el. Patch sent to maintainers.
-;;; Fontifies `require a if b;', __DATA__.
-;;; Arglist for auto-fill-mode was incorrect.
-
-;;;; After 1.12:
-;;; `cperl-lineup-step' and `cperl-lineup' added: lineup constructions
-;;; vertically.
-;;; `cperl-do-auto-fill' updated for 19.29 style.
-;;; `cperl-info-on-command' now has a default.
-;;; Workaround for broken C-h on XEmacs.
-;;; VC strings escaped.
-;;; C-h f now may prompt for function name instead of going on,
-;;; controlled by `cperl-info-on-command-no-prompt'.
-
-;;;; After 1.13:
-;;; Msb buffer list includes perl files
-;;; Indent-for-comment uses indent-to
-;;; Can write tag files using etags.
-
-;;;; After 1.14:
-;;; Recognizes (tries to ;-) {...} which are not blocks during indentation.
-;;; `cperl-close-paren-offset' affects ?\] too (and ?\} if not block)
-;;; Bug with auto-filling comments started with "##" corrected.
-
-;;;; Very slow now: on DB::DB 0.91, 486/66:
-
-;;;Function Name Call Count Elapsed Time Average Time
-;;;======================================== ========== ============ ============
-;;;cperl-block-p 469 3.7799999999 0.0080597014
-;;;cperl-get-state 505 163.39000000 0.3235445544
-;;;cperl-comment-indent 12 0.0299999999 0.0024999999
-;;;cperl-backward-to-noncomment 939 4.4599999999 0.0047497337
-;;;cperl-calculate-indent 505 172.22000000 0.3410297029
-;;;cperl-indent-line 505 172.88000000 0.3423366336
-;;;cperl-use-region-p 40 0.0299999999 0.0007499999
-;;;cperl-indent-exp 1 177.97000000 177.97000000
-;;;cperl-to-comment-or-eol 1453 3.9800000000 0.0027391603
-;;;cperl-backward-to-start-of-continued-exp 9 0.0300000000 0.0033333333
-;;;cperl-indent-region 1 177.94000000 177.94000000
-
-;;;; After 1.15:
-;;; Takes into account white space after opening parentheses during indent.
-;;; May highlight pods and here-documents: see `cperl-pod-here-scan',
-;;; `cperl-pod-here-fontify', `cperl-pod-face'. Does not use this info
-;;; for indentation so far.
-;;; Fontification updated to 19.30 style.
-;;; The change 19.29->30 did not add all the required functionality,
-;;; but broke "font-lock-extra.el". Get "choose-color.el" from
-;;; http://ilyaz.org/software/emacs
-
-;;;; After 1.16:
-;;; else # comment
-;;; recognized as a start of a block.
-;;; Two different font-lock-levels provided.
-;;; `cperl-pod-head-face' introduced. Used for highlighting.
-;;; `imenu' marks pods, +Packages moved to the head.
-
-;;;; After 1.17:
-;;; Scan for pods highlights here-docs too.
-;;; Note that the tag of here-doc may be rehighlighted later by lazy-lock.
-;;; Only one here-doc-tag per line is supported, and one in comment
-;;; or a string may break fontification.
-;;; POD headers were supposed to fill one line only.
-
-;;;; After 1.18:
-;;; `font-lock-keywords' were set in 19.30 style _always_. Current scheme
-;;; may break under XEmacs.
-;;; `cperl-calculate-indent' dis suppose that `parse-start' was defined.
-;;; `fontified' tag is added to fontified text as well as `lazy-lock' (for
-;;; compatibility with older lazy-lock.el) (older one overfontifies
-;;; something nevertheless :-().
-;;; Will not indent something inside pod and here-documents.
-;;; Fontifies the package name after import/no/bootstrap.
-;;; Added new entry to menu with meta-info about the mode.
-
-;;;; After 1.19:
-;;; Prefontification works much better with 19.29. Should be checked
-;;; with 19.30 as well.
-;;; Some misprints in docs corrected.
-;;; Now $a{-text} and -text => "blah" are fontified as strings too.
-;;; Now the pod search is much stricter, so it can help you to find
-;;; pod sections which are broken because of whitespace before =blah
-;;; - just observe the fontification.
-
-;;;; After 1.20
-;;; Anonymous subs are indented with respect to the level of
-;;; indentation of `sub' now.
-;;; {} is recognized as hash after `bless' and `return'.
-;;; Anonymous subs are split by `cperl-linefeed' as well.
-;;; Electric parens embrace a region if present.
-;;; To make `cperl-auto-newline' useful,
-;;; `cperl-auto-newline-after-colon' is introduced.
-;;; `cperl-electric-parens' is now t or nul. The old meaning is moved to
-;;; `cperl-electric-parens-string'.
-;;; `cperl-toggle-auto-newline' introduced, put on C-c C-a.
-;;; `cperl-toggle-abbrev' introduced, put on C-c C-k.
-;;; `cperl-toggle-electric' introduced, put on C-c C-e.
-;;; Beginning-of-defun-regexp was not anchored.
-
-;;;; After 1.21
-;;; Auto-newline grants `cperl-extra-newline-before-brace' if "{" is typed
-;;; after ")".
-;;; {} is recognized as expression after `tr' and friends.
-
-;;;; After 1.22
-;;; Entry Hierarchy added to imenu. Very primitive so far.
-;;; One needs newer `imenu-go'.el. A patch to `imenu' is needed as well.
-;;; Writes its own TAGS files.
-;;; Class viewer based on TAGS files. Does not trace @ISA so far.
-;;; 19.31: Problems with scan for PODs corrected.
-;;; First POD header correctly fontified.
-;;; I needed (setq imenu-use-keymap-menu t) to get good imenu in 19.31.
-;;; Apparently it makes a lot of hierarchy code obsolete...
-
-;;;; After 1.23
-;;; Tags filler now scans *.xs as well.
-;;; The info from *.xs scan is used by the hierarchy viewer.
-;;; Hierarchy viewer documented.
-;;; Bug in 19.31 imenu documented.
-
-;;;; After 1.24
-;;; New location for info-files mentioned,
-;;; Electric-; should work better.
-;;; Minor bugs with POD marking.
-
-;;;; After 1.25 (probably not...)
-;;; `cperl-info-page' introduced.
-;;; To make `uncomment-region' working, `comment-region' would
-;;; not insert extra space.
-;;; Here documents delimiters better recognized
-;;; (empty one, and non-alphanums in quotes handled). May be wrong with 1<<14?
-;;; `cperl-db' added, used in menu.
-;;; imenu scan removes text-properties, for better debugging
-;;; - but the bug is in 19.31 imenu.
-;;; formats highlighted by font-lock and prescan, embedded comments
-;;; are not treated.
-;;; POD/friends scan merged in one pass.
-;;; Syntax class is not used for analyzing the code, only char-syntax
-;;; may be checked against _ or'ed with w.
-;;; Syntax class of `:' changed to be _.
-;;; `cperl-find-bad-style' added.
-
-;;;; After 1.25
-;;; When search for here-documents, we ignore commented << in simplest cases.
-;;; `cperl-get-help' added, available on C-h v and from menu.
-;;; Auto-help added. Default with `cperl-hairy', switchable on/off
-;;; with startup variable `cperl-lazy-help-time' and from
-;;; menu. Requires `run-with-idle-timer'.
-;;; Highlighting of @abc{@efg} was wrong - interchanged two regexps.
-
-;;;; After 1.27
-;;; Indentation: At toplevel after a label - fixed.
-;;; 1.27 was put to archives in binary mode ===> DOSish :-(
-
-;;;; After 1.28
-;;; Thanks to Martin Buchholz <mrb@Eng.Sun.COM>: misprints in
-;;; comments and docstrings corrected, XEmacs support cleaned up.
-;;; The closing parenths would enclose the region into matching
-;;; parens under the same conditions as the opening ones.
-;;; Minor updates to `cperl-short-docs'.
-;;; Will not consider <<= as start of here-doc.
-
-;;;; After 1.29
-;;; Added an extra advice to look into Micro-docs. ;-).
-;;; Enclosing of region when you press a closing parenth is regulated by
-;;; `cperl-electric-parens-string'.
-;;; Minor updates to `cperl-short-docs'.
-;;; `initialize-new-tags-table' called only if present (Does this help
-;;; with generation of tags under XEmacs?).
-;;; When creating/updating tag files, new info is written at the old place,
-;;; or at the end (is this a wanted behaviour? I need this in perl build directory).
-
-;;;; After 1.30
-;;; All the keywords from keywords.pl included (maybe with dummy explanation).
-;;; No auto-help inside strings, comment, here-docs, formats, and pods.
-;;; Shrinkwrapping of info, regulated by `cperl-max-help-size',
-;;; `cperl-shrink-wrap-info-frame'.
-;;; Info on variables as well.
-;;; Recognision of HERE-DOCS improved yet more.
-;;; Autonewline works on `}' without warnings.
-;;; Autohelp works again on $_[0].
-
-;;;; After 1.31
-;;; perl-descr.el found its author - hi, Johan!
-;;; Some support for correct indent after here-docs and friends (may
-;;; be superseeded by eminent change to Emacs internals).
-;;; Should work with older Emaxen as well ( `-style stuff removed).
-
-;;;; After 1.32
-
-;;; Started to add support for `syntax-table' property (should work
-;;; with patched Emaxen), controlled by
-;;; `cperl-use-syntax-table-text-property'. Currently recognized:
-;;; All quote-like operators: m, s, y, tr, qq, qw, qx, q,
-;;; // in most frequent context:
-;;; after block or
-;;; ~ { ( = | & + - * ! , ;
-;;; or
-;;; while if unless until and or not xor split grep map
-;;; Here-documents, formats, PODs,
-;;; ${...}
-;;; 'abc$'
-;;; sub a ($); sub a ($) {}
-;;; (provide 'cperl-mode) was missing!
-;;; `cperl-after-expr-p' is now much smarter after `}'.
-;;; `cperl-praise' added to mini-docs.
-;;; Utilities try to support subs-with-prototypes.
-
-;;;; After 1.32.1
-;;; `cperl-after-expr-p' is now much smarter after "() {}" and "word {}":
-;;; if word is "else, map, grep".
-;;; Updated for new values of syntax-table constants.
-;;; Uses `help-char' (at last!) (disabled, does not work?!)
-;;; A couple of regexps where missing _ in character classes.
-;;; -s could be considered as start of regexp, 1../blah/ was not,
-;;; as was not /blah/ at start of file.
-
-;;;; After 1.32.2
-;;; "\C-hv" was wrongly "\C-hf"
-;;; C-hv was not working on `[index()]' because of [] in skip-chars-*.
-;;; `__PACKAGE__' supported.
-;;; Thanks for Greg Badros: `cperl-lazy-unstall' is more complete,
-;;; `cperl-get-help' is made compatible with `query-replace'.
-
-;;;; As of Apr 15, development version of 19.34 supports
-;;;; `syntax-table' text properties. Try setting
-;;;; `cperl-use-syntax-table-text-property'.
-
-;;;; After 1.32.3
-;;; We scan for s{}[] as well (in simplest situations).
-;;; We scan for $blah'foo as well.
-;;; The default is to use `syntax-table' text property if Emacs is good enough.
-;;; `cperl-lineup' is put on C-M-| (=C-M-S-\\).
-;;; Start of `cperl-beautify-regexp'.
-
-;;;; After 1.32.4
-;;; `cperl-tags-hier-init' did not work in text-mode.
-;;; `cperl-noscan-files-regexp' had a misprint.
-;;; Generation of Class Hierarchy was broken due to a bug in `x-popup-menu'
-;;; in 19.34.
-
-;;;; After 1.33:
-;;; my,local highlight vars after {} too.
-;;; TAGS could not be created before imenu was loaded.
-;;; `cperl-indent-left-aligned-comments' created.
-;;; Logic of `cperl-indent-exp' changed a little bit, should be more
-;;; robust w.r.t. multiline strings.
-;;; Recognition of blah'foo takes into account strings.
-;;; Added '.al' to the list of Perl extensions.
-;;; Class hierarchy is "mostly" sorted (need to rethink algorthm
-;;; of pruning one-root-branch subtrees to get yet better sorting.)
-;;; Regeneration of TAGS was busted.
-;;; Can use `syntax-table' property when generating TAGS
-;;; (governed by `cperl-use-syntax-table-text-property-for-tags').
-
-;;;; After 1.35:
-;;; Can process several =pod/=cut sections one after another.
-;;; Knows of `extproc' when under `emx', indents with `__END__' and `__DATA__'.
-;;; `cperl-under-as-char' implemented (XEmacs people like broken behaviour).
-;;; Beautifier for regexps fixed.
-;;; `cperl-beautify-level', `cperl-contract-level' coded
-;;;
-;;;; Emacs's 20.2 problems:
-;;; `imenu.el' has bugs, `imenu-add-to-menubar' does not work.
-;;; Couple of others problems with 20.2 were reported, my ability to check/fix
-;;; them is very reduced now.
-
-;;;; After 1.36:
-;;; 'C-M-|' in XEmacs fixed
-
-;;;; After 1.37:
-;;; &&s was not recognized as start of regular expression;
-;;; Will "preprocess" the contents of //e part of s///e too;
-;;; What to do with s# blah # foo #e ?
-;;; Should handle s;blah;foo;; better.
-;;; Now the only known problems with regular expression recognition:
-;;;;;;; s<foo>/bar/ - different delimiters (end ignored)
-;;;;;;; s/foo/\\bar/ - backslash at start of subst (made into one chunk)
-;;;;;;; s/foo// - empty subst (made into one chunk + '/')
-;;;;;;; s/foo/(bar)/ - start-group at start of subst (internal group will not match backwards)
-
-;;;; After 1.38:
-;;; We highlight closing / of s/blah/foo/e;
-;;; This handles s# blah # foo #e too;
-;;; s//blah/, s///, s/blah// works again, and s#blah## too, the algorithm
-;;; is much simpler now;
-;;; Next round of changes: s\\\ works, s<blah>/foo/,
-;;; comments between the first and the second part allowed
-;;; Another problem discovered:
-;;;;;;; s[foo] <blah>e - e part delimited by different <> (will not match)
-;;; `cperl-find-pods-heres' somehow maybe called when string-face is undefined
-;;; - put a stupid workaround for 20.1
-
-;;;; After 1.39:
-;;; Could indent here-docs for comments;
-;;; These problems fixed:
-;;;;;;; s/foo/\\bar/ - backslash at start of subst (made into two chunk)
-;;;;;;; s[foo] <blah>e - "e" part delimited by "different" <> (will match)
-;;; Matching brackets honor prefices, may expand abbreviations;
-;;; When expanding abbrevs, will remove last char only after
-;;; self-inserted whitespace;
-;;; More convenient "Refress hard constructs" in menu;
-;;; `cperl-add-tags-recurse', `cperl-add-tags-recurse-noxs'
-;;; added (for -batch mode);
-;;; Better handling of errors when scanning for Perl constructs;
-;;;;;;; Possible "problem" with class hierarchy in Perl distribution
-;;;;;;; directory: ./ext duplicates ./lib;
-;;; Write relative paths for generated TAGS;
-
-;;;; After 1.40:
-;;; s /// may be separated by "\n\f" too;
-;;; `s #blah' recognized as a comment;
-;;; Would highlight s/abc//s wrong;
-;;; Debugging code in `cperl-electric-keywords' was leaking a message;
-
-;;;; After 1.41:
-;;; RMS changes for 20.3 merged
-
-;;;; 2.0.1.0: RMS mode (has 3 misprints)
-
-;;;; After 2.0:
-;;; RMS whitespace changes for 20.3 merged
-
-;;;; After 2.1:
-;;; History updated
-
-;;;; After 2.2:
-;;; Merge `c-style-alist' since `c-mode' is no more. (Somebody who
-;;; uses the styles should check that they work OK!)
-;;; All the variable warnings go away, some undef functions too.
-
-;;;; After 2.3:
-;;; Added `cperl-perldoc' (thanks to Anthony Foiani <afoiani@uswest.com>)
-;;; Added `cperl-pod-to-manpage' (thanks to Nick Roberts <Nick.Roberts@src.bae.co.uk>)
-;;; All the function warnings go away.
-
-;;;; After 2.4:
-;;; `Perl doc', `Regexp' submenus created (latter to allow short displays).
-;;; `cperl-clobber-lisp-bindings' added.
-;;; $a->y() is not y///.
-;;; `cperl-after-block-p' was missing a `save-excursion' => wrong results.
-;;; `cperl-val' was defined too late.
-;;; `cperl-init-faces' was failing.
-;;; Init faces when loading `ps-print'.
-
-;;;; After 2.4:
-;;; `cperl-toggle-autohelp' implemented.
-;;; `while SPACE LESS' was buggy.
-;;; `-text' in `[-text => 1]' was not highlighted.
-;;; `cperl-after-block-p' was FALSE after `sub f {}'.
-
-;;;; After 2.5:
-;;; `foreachmy', `formy' expanded too.
-;;; Expand `=pod-directive'.
-;;; `cperl-linefeed' behaves reasonable in POD-directive lines.
-;;; `cperl-electric-keyword' prints a message, governed by
-;;; `cperl-message-electric-keyword'.
-
-;;;; After 2.6:
-;;; Typing `}' was not checking for being block or not.
-;;; Beautifying levels in RE: Did not know about lookbehind;
-;;; finding *which* level was not intuitive;
-;;; `cperl-beautify-levels' added.
-;;; Allow here-docs contain `=head1' and friends (at least for keywords).
-
-;;;; After 2.7:
-;;; Fix for broken `font-lock-unfontify-region-function'. Should
-;;; preserve `syntax-table' properties even with `lazy-lock'.
-
-;;;; After 2.8:
-;;; Some more compile time warnings crept in.
-;;; `cperl-indent-region-fix-else' implemented.
-;;; `cperl-fix-line-spacing' implemented.
-;;; `cperl-invert-if-unless' implemented (C-c C-t and in Menu).
-;;; Upgraded hints to mention 20.2's goods/bads.
-;;; Started to use `cperl-extra-newline-before-brace-multiline',
-;;; `cperl-break-one-line-blocks-when-indent',
-;;; `cperl-fix-hanging-brace-when-indent', `cperl-merge-trailing-else'.
-
-;;;; After 2.9:
-;;; Workaround for another `font-lock's `syntax-table' text-property bug.
-;;; `zerop' could be applied to nil.
-;;; At last, may work with `font-lock' without setting `cperl-font-lock'.
-;;; (We expect that starting from 19.33, `font-lock' supports keywords
-;;; being a function - what is a correct version?)
-;;; Rename `cperl-indent-region-fix-else' to
-;;; `cperl-indent-region-fix-constructs'.
-;;; `cperl-fix-line-spacing' could be triggered inside strings, would not
-;;; know what to do with BLOCKs of map/printf/etc.
-;;; `cperl-merge-trailing-else' and `cperl-fix-line-spacing' handle
-;;; `continue' too.
-;;; Indentation after {BLOCK} knows about map/printf/etc.
-;;; Finally: treat after-comma lines as continuation lines.
-
-;;;; After 2.10:
-;;; `continue' made electric.
-;;; Electric `do' inserts `do/while'.
-;;; Some extra compile-time warnings crept in.
-;;; `font-lock' of 19.33 could not handle font-lock-keywords being a function
-;;; returning a symbol.
-
-;;;; After 2.11:
-;;; Changes to make syntaxification to be autoredone via `font-lock'.
-;;; Switched on by `cperl-syntaxify-by-font-lock', off by default so far.
-
-;;;; After 2.12:
-;;; Remove some commented out chunks.
-;;; Styles are slightly updated (a lot of work is needed, especially
-;;; with new `cperl-fix-line-spacing').
-
-;;;; After 2.13:
-;;; Old value of style is memorized when choosing a new style, may be
-;;; restored from the same menu.
-;;; Mode-documentation added to micro-docs.
-;;; `cperl-praise' updated.
-;;; `cperl-toggle-construct-fix' added on C-c C-w and menu.
-;;; `auto-fill-mode' added on C-c C-f and menu.
-;;; `PerlStyle' style added.
-;;; Message for termination of scan corrected.
-
-;;;; After 2.14:
-
-;;; Did not work with -q
-
-;;;; After 2.15:
-
-;;; `cperl-speed' hints added.
-;;; Minor style fixes.
-
-;;;; After 2.15:
-;;; Make backspace electric after expansion of `else/continue' too.
-
-;;;; After 2.16:
-;;; Starting to merge changes to RMS emacs version.
-
-;;;; After 2.17:
-;;; Merged custom stuff and darn `font-lock-constant-face'.
-
-;;;; After 2.18:
-;;; Bumped the version to 3.1
-
-;;;; After 3.1:
-;;; Fixed customization to honor cperl-hairy.
-;;; Created customization groups. Sent to RMS to include into 2.3.
-
-;;;; After 3.2:
-;;; Interaction of `font-lock-hot-pass' and `cperl-syntaxify-by-font-lock'.
-;;; (`cperl-after-block-and-statement-beg'):
-;;; (`cperl-after-block-p'):
-;;; (`cperl-after-expr-p'): It is BLOCK if we reach lim when backup sexp.
-;;; (`cperl-indent-region'): Make a marker for END - text added/removed.
-;;; (`cperl-style-alist', `cperl-styles-entries')
-;;; Include `cperl-merge-trailing-else' where the value is clear.
-
-;;;; After 3.3:
-;;; (`cperl-tips'):
-;;; (`cperl-problems'): Improvements to docs.
-
-;;;; After 3.4:
-;;; (`cperl-mode'): Make lazy syntaxification possible.
-;;; (`cperl-find-pods-heres'): Safe a position in buffer where it is safe to
-;;; restart syntaxification.
-;;; (`cperl-syntaxify-by-font-lock'): Set to t, should be safe now.
-
-;;;; After 3.5:
-;;; (`cperl-syntaxify-by-font-lock'): Better default, customizes to
-;;; `message' too.
-
-;;;; After 3.6:
-;;; (`cperl-find-pods-heres'): changed so that -d ?foo? is a RE.
-;;; (`cperl-array-face'): changed name from `font-lock-emphasized-face'.
-;;; (`cperl-hash-face'): changed name from `font-lock-other-emphasized-face'.
-;;; Use `defface' to define these two extra faces.
-
-;;;; After 3.7:
-;;; Can use linear algorithm for indentation if Emacs supports it:
-;;; indenting DB::DB (800+ lines) improved from 69 sec to 11 sec
-;;; (73 vs 15 with imenu).
-;;; (`cperl-emacs-can-parse'): New state.
-;;; (`cperl-indent-line'): Corrected to use global state.
-;;; (`cperl-calculate-indent'): Likewise.
-;;; (`cperl-fix-line-spacing'): Likewise (not used yet).
-
-;;;; After 3.8:
-;;; (`cperl-choose-color'): Converted to a function (to be compilable in text-mode).
-
-;;;; After 3.9:
-;;; (`cperl-dark-background '): Disable without window-system.
-
-;;;; After 3.10:
-;;; Do `defface' only if window-system.
-
-;;;; After 3.11:
-;;; (`cperl-fix-line-spacing'): sped up to bail out early.
-;;; (`cperl-indent-region'): Disable hooks during the call (how to call them later?).
-
-;;; Now indents 820-line-long function in 6.5 sec (including syntaxification) the first time
-;;; (when buffer has few properties), 7.1 sec the second time.
-
-;;;Function Name Call Count Elapsed Time Average Time
-;;;========================================= ========== ============ ============
-;;;cperl-indent-exp 1 10.039999999 10.039999999
-;;;cperl-indent-region 1 10.0 10.0
-;;;cperl-indent-line 821 6.2100000000 0.0075639464
-;;;cperl-calculate-indent 821 5.0199999999 0.0061144945
-;;;cperl-backward-to-noncomment 2856 2.0500000000 0.0007177871
-;;;cperl-fontify-syntaxically 2 1.78 0.8900000000
-;;;cperl-find-pods-heres 2 1.78 0.8900000000
-;;;cperl-update-syntaxification 1 1.78 1.78
-;;;cperl-fix-line-spacing 769 1.4800000000 0.0019245773
-;;;cperl-after-block-and-statement-beg 163 1.4100000000 0.0086503067
-;;;cperl-block-p 775 1.1800000000 0.0015225806
-;;;cperl-to-comment-or-eol 3652 1.1200000000 0.0003066812
-;;;cperl-after-block-p 165 1.0500000000 0.0063636363
-;;;cperl-commentify 141 0.22 0.0015602836
-;;;cperl-get-state 813 0.16 0.0001968019
-;;;cperl-backward-to-start-of-continued-exp 26 0.12 0.0046153846
-;;;cperl-delay-update-hook 2107 0.0899999999 4.271...e-05
-;;;cperl-protect-defun-start 141 0.0700000000 0.0004964539
-;;;cperl-after-label 407 0.0599999999 0.0001474201
-;;;cperl-forward-re 139 0.0299999999 0.0002158273
-;;;cperl-comment-indent 26 0.0299999999 0.0011538461
-;;;cperl-use-region-p 8 0.0 0.0
-;;;cperl-lazy-hook 15 0.0 0.0
-;;;cperl-after-expr-p 8 0.0 0.0
-;;;cperl-font-lock-unfontify-region-function 1 0.0 0.0
-
-;;;Function Name Call Count Elapsed Time Average Time
-;;;========================================= ========== ============ ============
-;;;cperl-fix-line-spacing 769 1.4500000000 0.0018855656
-;;;cperl-indent-line 13 0.3100000000 0.0238461538
-;;;cperl-after-block-and-statement-beg 69 0.2700000000 0.0039130434
-;;;cperl-after-block-p 69 0.2099999999 0.0030434782
-;;;cperl-calculate-indent 13 0.1000000000 0.0076923076
-;;;cperl-backward-to-noncomment 177 0.0700000000 0.0003954802
-;;;cperl-get-state 13 0.0 0.0
-;;;cperl-to-comment-or-eol 179 0.0 0.0
-;;;cperl-get-help-defer 1 0.0 0.0
-;;;cperl-lazy-hook 11 0.0 0.0
-;;;cperl-after-expr-p 2 0.0 0.0
-;;;cperl-block-p 13 0.0 0.0
-;;;cperl-after-label 5 0.0 0.0
-
-;;;; After 3.12:
-;;; (`cperl-find-pods-heres'): do not warn on `=cut' if doing a chunk only.
-
-;;;; After 3.13:
-;;; (`cperl-mode'): load pseudo-faces on `cperl-find-pods-heres' (for 19.30).
-;;; (`x-color-defined-p'): was not compiling on XEmacs
-;;; (`cperl-find-pods-heres'): 1 << 6 was OK, but 1<<6 was considered as HERE
-;;; <file/glob> made into a string.
-
-;;;; After 3.14:
-;;; (`cperl-find-pods-heres'): Postpone addition of faces after syntactic step
-;;; Recognition of <FH> was wrong.
-;;; (`cperl-clobber-lisp-bindings'): if set, C-c variants are the old ones
-;;; (`cperl-unwind-to-safe'): New function.
-;;; (`cperl-fontify-syntaxically'): Use `cperl-unwind-to-safe' to start at reasonable position.
-
-;;;; After 3.15:
-;;; (`cperl-forward-re'): Highlight the trailing / in s/foo// as string.
-;;; Highlight the starting // in s//foo/ as function-name.
-
-;;;; After 3.16:
-;;; (`cperl-find-pods-heres'): Highlight `gem' in s///gem as a keyword.
-
-;;;; After 4.0:
-;;; (`cperl-find-pods-heres'): `qr' added
-;;; (`cperl-electric-keyword'): Likewise
-;;; (`cperl-electric-else'): Likewise
-;;; (`cperl-to-comment-or-eol'): Likewise
-;;; (`cperl-make-regexp-x'): Likewise
-;;; (`cperl-init-faces'): Likewise, and `lock' (as overridable?).
-;;; (`cperl-find-pods-heres'): Knows that split// is null-RE.
-;;; Highlights separators in 3-parts expressions
-;;; as labels.
-
-;;;; After 4.1:
-;;; (`cperl-find-pods-heres'): <> was considered as a glob
-;;; (`cperl-syntaxify-unwind'): New configuration variable
-;;; (`cperl-fontify-m-as-s'): New configuration variable
-
-;;;; After 4.2:
-;;; (`cperl-find-pods-heres'): of the last line being `=head1' fixed.
-
-;;; Handling of a long construct is still buggy if only the part of
-;;; construct touches the updated region (we unwind to the start of
-;;; long construct, but the end may have residual properties).
-
-;;; (`cperl-unwind-to-safe'): would not go to beginning of buffer.
-;;; (`cperl-electric-pod'): check for after-expr was performed
-;;; inside of POD too.
-
-;;;; After 4.3:
-;;; (`cperl-backward-to-noncomment'): better treatment of PODs and HEREs.
-
-;;; Indent-line works good, but indent-region does not - at toplevel...
-;;; (`cperl-unwind-to-safe'): Signature changed.
-;;; (`x-color-defined-p'): was defmacro'ed with a tick. Remove another def.
-;;; (`cperl-clobber-mode-lists'): New configuration variable.
-;;; (`cperl-array-face'): One of definitions was garbled.
-
-;;;; After 4.4:
-;;; (`cperl-not-bad-style-regexp'): Updated.
-;;; (`cperl-make-regexp-x'): Misprint in a message.
-;;; (`cperl-find-pods-heres'): $a-1 ? foo : bar; was a regexp.
-;;; `<< (' was considered a start of POD.
-;;; Init: `cperl-is-face' was busted.
-;;; (`cperl-make-face'): New macros.
-;;; (`cperl-force-face'): New macros.
-;;; (`cperl-init-faces'): Corrected to use new macros;
-;;; `if' for copying `reference-face' to
-;;; `constant-face' was backward.
-;;; (`font-lock-other-type-face'): Done via `defface' too.
-
-;;;; After 4.5:
-;;; (`cperl-init-faces-weak'): use `cperl-force-face'.
-;;; (`cperl-after-block-p'): After END/BEGIN we are a block.
-;;; (`cperl-mode'): `font-lock-unfontify-region-function'
-;;; was set to a wrong function.
-;;; (`cperl-comment-indent'): Commenting __END__ was not working.
-;;; (`cperl-indent-for-comment'): Likewise.
-;;; (Indenting is still misbehaving at toplevel.)
-
-;;;; After 4.5:
-;;; (`cperl-unwind-to-safe'): Signature changed, unwinds end too.
-;;; (`cperl-find-pods-heres'): mark qq[]-etc sections as syntax-type=string
-;;; (`cperl-fontify-syntaxically'): Unwinds start and end to go out of
-;;; long strings (not very successful).
-
-;;; >>>> CPerl should be usable in write mode too now <<<<
-
-;;; (`cperl-syntaxify-by-font-lock'): Better default - off in text-mode.
-;;; (`cperl-tips'): Updated docs.
-;;; (`cperl-problems'): Updated docs.
-
-;;;; After 4.6:
-;;; (`cperl-calculate-indent'): Did not consider `,' as continuation mark for statements.
-;;; (`cperl-write-tags'): Correct for XEmacs's `visit-tags-table-buffer'.
-
-;;;; After 4.7:
-;;; (`cperl-calculate-indent'): Avoid parse-data optimization at toplevel.
-;;; Should indent correctly at toplevel too.
-;;; (`cperl-tags-hier-init'): Gross hack to pretend we work (are we?).
-;;; (`cperl-find-pods-heres'): Was not processing sub protos after a comment ine.
-;;; Was treating $a++ <= 5 as a glob.
-
-;;;; After 4.8:
-;;; (toplevel): require custom unprotected => failure on 19.28.
-;;; (`cperl-xemacs-p') defined when compile too
-;;; (`cperl-tags-hier-init'): Another try to work around XEmacs problems
-;;; Better progress messages.
-;;; (`cperl-find-tags'): Was writing line/pos in a wrong order,
-;;; pos off by 1 and not at beg-of-line.
-;;; (`cperl-etags-snarf-tag'): New macro
-;;; (`cperl-etags-goto-tag-location'): New macro
-;;; (`cperl-write-tags'): When removing old TAGS info was not
-;;; relativizing filename
-
-;;;; After 4.9:
-;;; (`cperl-version'): New variable. New menu entry
-
-;;;; After 4.10:
-;;; (`cperl-tips'): Updated.
-;;; (`cperl-non-problems'): Updated.
-;;; random: References to future 20.3 removed.
-
-;;;; After 4.11:
-;;; (`perl-font-lock-keywords'): Would not highlight `sub foo($$);'.
-;;; Docstrings: Menu was described as `CPerl' instead of `Perl'
-
-;;;; After 4.12:
-;;; (`cperl-toggle-construct-fix'): Was toggling to t instead of 1.
-;;; (`cperl-ps-print-init'): Associate `cperl-array-face', `cperl-hash-face'
-;;; remove `font-lock-emphasized-face'.
-;;; remove `font-lock-other-emphasized-face'.
-;;; remove `font-lock-reference-face'.
-;;; remove `font-lock-keyword-face'.
-;;; Use `eval-after-load'.
-;;; (`cperl-init-faces'): remove init `font-lock-other-emphasized-face'.
-;;; remove init `font-lock-emphasized-face'.
-;;; remove init `font-lock-keyword-face'.
-;;; (`cperl-tips-faces'): New variable and an entry into Mini-docs.
-;;; (`cperl-indent-region'): Do not indent whitespace lines
-;;; (`cperl-indent-exp'): Was not processing else-blocks.
-;;; (`cperl-calculate-indent'): Remove another parse-data optimization
-;;; at toplevel: would indent correctly.
-;;; (`cperl-get-state'): NOP line removed.
-
-;;;; After 4.13:
-;;; (`cperl-ps-print-init'): Remove not-CPerl-related faces.
-;;; (`cperl-ps-print'): New function and menu entry.
-;;; (`cperl-ps-print-face-properties'): New configuration variable.
-;;; (`cperl-invalid-face'): New configuration variable.
-;;; (`cperl-nonoverridable-face'): New face. Renamed from
-;;; `font-lock-other-type-face'.
-;;; (`perl-font-lock-keywords'): Highlight trailing whitespace
-;;; (`cperl-contract-levels'): Documentation corrected.
-;;; (`cperl-contract-level'): Likewise.
-
-;;;; After 4.14:
-;;; (`cperl-ps-print'): `ps-print-face-extension-alist' was not in old Emaxen,
-;;; same with `ps-extend-face-list'
-;;; (`cperl-ps-extend-face-list'): New macro.
-
-;;;; After 4.15:
-;;; (`cperl-init-faces'): Interpolate `cperl-invalid-face'.
-;;; (`cperl-forward-re'): Emit a meaningful error instead of a cryptic
-;;; one for uncomplete REx near end-of-buffer.
-;;; (`cperl-find-pods-heres'): Tolerate unfinished REx at end-of-buffer.
-
-;;;; After 4.16:
-;;; (`cperl-find-pods-heres'): `unwind-protect' was left commented.
-
-;;;; After 4.17:
-;;; (`cperl-invalid-face'): Change to ''underline.
-
-;;;; After 4.18:
-;;; (`cperl-find-pods-heres'): / and ? after : start a REx.
-;;; (`cperl-after-expr-p'): Skip labels when checking
-;;; (`cperl-calculate-indent'): Correct for labels when calculating
-;;; indentation of continuations.
-;;; Docstring updated.
-
-;;;; After 4.19:
-;;; Minor (mostly spelling) corrections from 20.3.3 merged.
-
-;;;; After 4.20:
-;;; (`cperl-tips'): Another workaround added. Sent to RMS for 20.4.
-
-;;;; After 4.21:
-;;; (`cperl-praise'): Mention linear-time indent.
-;;; (`cperl-find-pods-heres'): @if ? a : b was considered a REx.
-
-;;;; After 4.22:
-;;; (`cperl-after-expr-p'): Make true after __END__.
-;;; (`cperl-electric-pod'): "SYNOPSIS" was misspelled.
-
-;;;; After 4.23:
-;;; (`cperl-beautify-regexp-piece'): Was not allowing for *? after a class.
-;;; Allow for POSIX char-classes.
-;;; Remove trailing whitespace when
-;;; adding new linebreak.
-;;; Add a level counter to stop shallow.
-;;; Indents unprocessed groups rigidly.
-;;; (`cperl-beautify-regexp'): Add an optional count argument to go that
-;;; many levels deep.
-;;; (`cperl-beautify-level'): Likewise
-;;; Menu: Add new entries to Regexp menu to do one level
-;;; (`cperl-contract-level'): Was entering an infinite loop
-;;; (`cperl-find-pods-heres'): Typo (double quoting).
-;;; Was detecting < $file > as FH instead of glob.
-;;; Support for comments in RExen (except
-;;; for m#\#comment#x), governed by
-;;; `cperl-regexp-scan'.
-;;; (`cperl-regexp-scan'): New customization variable.
-;;; (`cperl-forward-re'): Improve logic of resetting syntax table.
-
-;;;; After 4.23 and: After 4.24:
-;;; (`cperl-contract-levels'): Restore position.
-;;; (`cperl-beautify-level'): Likewise.
-;;; (`cperl-beautify-regexp'): Likewise.
-;;; (`cperl-commentify'): Rudimental support for length=1 runs
-;;; (`cperl-find-pods-heres'): Process 1-char long REx comments too /a#/x
-;;; Processes REx-comments in #-delimited RExen.
-;;; MAJOR BUG CORRECTED: after a misparse
-;;; a body of a subroutine could be corrupted!!!
-;;; One might need to reeval the function body
-;;; to fix things. (A similar bug was
-;;; present in `cperl-indent-region' eons ago.)
-;;; To reproduce:
-;; (defun foo () (let ((a '(t))) (insert (format "%s" a)) (setcar a 'BUG) t))
-;; (foo)
-;; (foo)
-;;; C-x C-e the above three lines (at end-of-line). First evaluation
-;;; of `foo' inserts (t), second one inserts (BUG) ?!
-;;;
-;;; In CPerl it was triggered by inserting then deleting `/' at start of
-;;; / a (?# asdf {[(}asdf )ef,/;
-
-;;;; After 4.25:
-;;; (`cperl-commentify'): Was recognizing length=2 "strings" as length=1.
-;;; (`imenu-example--create-perl-index'):
-;;; Was not enforcing syntaxification-to-the-end.
-;;; (`cperl-invert-if-unless'): Allow `for', `foreach'.
-;;; (`cperl-find-pods-heres'): Quote `cperl-nonoverridable-face'.
-;;; Mark qw(), m()x as indentable.
-;;; (`cperl-init-faces'): Highlight `sysopen' too.
-;;; Highlight $var in `for my $var' too.
-;;; (`cperl-invert-if-unless'): Was leaving whitespace at end.
-;;; (`cperl-linefeed'): Was splitting $var{$foo} if point after `{'.
-;;; (`cperl-calculate-indent'): Remove old commented out code.
-;;; Support (primitive) indentation of qw(), m()x.
-
-
-;;;; After 4.26:
-;;; (`cperl-problems'): Mention `fill-paragraph' on comment. \"" and
-;;; q [] with intervening newlines.
-;;; (`cperl-autoindent-on-semi'): New customization variable.
-;;; (`cperl-electric-semi'): Use `cperl-autoindent-on-semi'.
-;;; (`cperl-tips'): Mention how to make CPerl the default mode.
-;;; (`cperl-mode'): Support `outline-minor-mode'
-;;; (Thanks to Mark A. Hershberger).
-;;; (`cperl-outline-level'): New function.
-;;; (`cperl-highlight-variables-indiscriminately'): New customization var.
-;;; (`cperl-init-faces'): Use `cperl-highlight-variables-indiscriminately'.
-;;; (Thanks to Sean Kamath <kamath@pogo.wv.tek.com>).
-;;; (`cperl-after-block-p'): Support CHECK and INIT.
-;;; (`cperl-init-faces'): Likewise and "our".
-;;; (Thanks to Doug MacEachern <dougm@covalent.net>).
-;;; (`cperl-short-docs'): Likewise and "our".
-
-
-;;;; After 4.27:
-;;; (`cperl-find-pods-heres'): Recognize \"" as a string.
-;;; Mark whitespace and comments between q and []
-;;; as `syntax-type' => `prestring'.
-;;; Allow whitespace between << and "FOO".
-;;; (`cperl-problems'): Remove \"" and q [] with intervening newlines.
-;;; Mention multiple <<EOF as unsupported.
-;;; (`cperl-highlight-variables-indiscriminately'): Doc misprint fixed.
-;;; (`cperl-indent-parens-as-block'): New configuration variable.
-;;; (`cperl-calculate-indent'): Merge cases of indenting non-BLOCK groups.
-;;; Use `cperl-indent-parens-as-block'.
-;;; (`cperl-find-pods-heres'): Test for =cut without empty line instead of
-;;; complaining about no =cut.
-;;; (`cperl-electric-pod'): Change the REx for POD from "\n\n=" to "^\n=".
-;;; (`cperl-find-pods-heres'): Likewise.
-;;; (`cperl-electric-pod'): Change `forward-sexp' to `forward-word':
-;;; POD could've been marked as comment already.
-;;; (`cperl-unwind-to-safe'): Unwind before start of POD too.
-
-;;;; After 4.28:
-;;; (`cperl-forward-re'): Throw an error at proper moment REx unfinished.
-
-;;;; After 4.29:
-;;; (`x-color-defined-p'): Make an extra case to peacify the warning.
-;;; Toplevel: `defvar' to peacify the warnings.
-;;; (`cperl-find-pods-heres'): Could access `font-lock-comment-face' in -nw.
-;;;; No -nw-compile time warnings now.
-;;; (`cperl-find-tags'): TAGS file had too short substring-to-search.
-;;; Be less verbose in non-interactive mode
-;;; (`imenu-example--create-perl-index'): Set index-marker after name
-;;; (`cperl-outline-regexp'): New variable.
-;;; (`cperl-outline-level'): Made compatible with `cperl-outline-regexp'.
-;;; (`cperl-mode'): Made use `cperl-outline-regexp'.
-
-;;;; After 4.30:
-;;; (`cperl-find-pods-heres'): =cut the last thing, no blank line, was error.
-;;; (`cperl-outline-level'): Make start-of-file same level as `package'.
-
-;;;; After 4.31:
-;;; (`cperl-electric-pod'): `head1' and `over' electric only if empty.
-;;; (`cperl-unreadable-ok'): New variable.
-;;; (`cperl-find-tags'): Use `cperl-unreadable-ok', do not fail
-;;; on an unreadable file
-;;; (`cperl-write-tags'): Use `cperl-unreadable-ok', do not fail
-;;; on an unreadable directory
-
-;;;; After 4.32:
-;;; Syncronized with v1.60 from Emacs 21.3.
-;;; Mostly docstring and formatting changes, and:
-
-;;; (`cperl-noscan-files-regexp'): Do not scan CVS subdirs
-;;; (`cperl-problems'): Note that newer XEmacsen may syntaxify too
-;;; (`imenu-example--create-perl-index'):
-;;; Renamed to `cperl-imenu--create-perl-index'
-;;; (`cperl-mode'): Replace `make-variable-buffer-local' by `make-local-variable'
-;;; (`cperl-setup-tmp-buf'): Likewise
-;;; (`cperl-fix-line-spacing'): Fix a misprint of "t" for "\t"
-;;; (`cperl-next-bad-style'): Fix misprints in character literals
-
-;;;; After 4.33:
-;;; (`cperl-font-lock-keywords'): +etc: Aliased to perl-font-lock-keywords.
-
-;;;; After 4.34:
-;;; Further updates of whitespace and spelling w.r.t. RMS version.
-;;; (`cperl-font-lock-keywords'): +etc: Avoid warnings when aliasing.
-;;; (`cperl-mode'): Use `normal-auto-fill-function' if present.
-;;; (`cperl-use-major-mode'): New variable
-;;; (`cperl-can-font-lock'): New variable; replaces `window-system'
-;;; (`cperl-tags-hier-init'): use `display-popup-menus-p' (if present)
-;;; to choose `x-popup-menu' vs `tmm-prompt'
-
-;;;; 4.35 has the following differences from version 1.40+ of RMS Emacs:
-
-;;; New variables `cperl-use-major-mode', `cperl-can-font-lock';
-;;; `cperl-use-major-mode' is (effectively) 'cperl-mode in RMS.
-;;; `cperl-under-as-char' is nil in RMS.
-;;; Minor differences in docstrings, and `cperl-non-problems'.
-;;; Backward compatibility addressed: (`); (function (lambda ...)); font-lock;
-;;; (:italic t bold t) vs (:slant italic :weight bold) in faces;
-;;; `normal-auto-fill-function'.
-;;; RMS version has wrong logic in `cperl-calculate-indent': $a = { } is
-;;; wrongly indented if the closing brace is on a separate line.
-;;; Different choice of ordering if's for is-x-REx and (eq (char-after b) ?\#)
-;;; in `cperl-find-pods-heres'. [Cosmetic]
-
-;;;; After 4.35:
-;;; (`cperl-find-pods-heres'): If no end of HERE-doc found, mark to the end
-;;; of buffer. This enables recognition of end
-;;; of HERE-doc "as one types".
-;;; Require "\n" after trailing tag of HERE-doc.
-;;; \( made non-quoting outside of string/comment
-;;; (gdj-contributed).
-;;; Likewise for \$.
-;;; Remove `here-doc-group' text property at start
-;;; (makes this property reliable).
-;;; Text property `first-format-line' ==> t.
-;;; Do not recognize $opt_s and $opt::s as s///.
-;;; (`cperl-perldoc'): Use case-sensitive search (contributed).
-;;; (`cperl-fix-line-spacing'): Allow "_" in $vars of foreach etc. when
-;;; underscore isn't a word char (gdj-contributed).
-;;; (`defun-prompt-regexp'): Allow prototypes.
-;;; (`cperl-vc-header-alist'): Extract numeric version from the Id.
-;;; Toplevel: Put toggle-autohelp into the mode menu.
-;;; Better docs for toggle/set/unset autohelp.
-;;; (`cperl-electric-backspace-untabify'): New customization variable
-;;; (`cperl-after-expr-p'): Works after here-docs, formats, and PODs too
-;;; (affects many electric constructs).
-;;; (`cperl-calculate-indent'): Takes into account `first-format-line' ==>
-;;; works after format.
-;;; (`cperl-short-docs'): Make it work with ... too.
-;;; "array context" ==> "list context"
-;;; (`cperl-electric-keyword'): make $if (etc: "$@%&*") non-electric
-;;; '(' after keyword would insert a doubled paren
-;;; (`cperl-electric-paren'): documented affected by `cperl-electric-parens'
-;;; (`cperl-electric-rparen'): Likewise
-;;; (`cperl-build-manpage'): New function by Nick Roberts
-;;; (`cperl-perldoc'): Make it work in XEmacs too
-
-;;;; After 4.36:
-;;; (`cperl-find-pods-heres'): Recognize s => 1 and {s} (as a key or varname),
-;;; { s:: } and { s::bar::baz } as varnames.
-;;; (`cperl-after-expr-p'): Updates syntaxification before checks
-;;; (`cperl-calculate-indent'): Likewise
-;;; Fix wrong indent of blocks starting with POD
-;;; (`cperl-after-block-p'): Optional argument for checking for a pre-block
-;;; Recognize `continue' blocks too.
-;;; (`cperl-electric-brace'): use `cperl-after-block-p' for detection;
-;;; Now works for else/continue/sub blocks
-;;; (`cperl-short-docs'): Minor edits; make messages fit 80-column screen
-
-;;;; After 5.0:
-;;; `cperl-add-tags-recurse-noxs-fullpath': new function (for -batch mode)
-
-;;;; After 5.1:
-;;;;;; Major edit. Summary of most visible changes:
-
-;;;;;; a) Multiple <<HERE per line allowed.
-;;;;;; b) Handles multiline subroutine declaration headers (with comments).
-;;;;;; (The exception is `cperl-etags' - but it is not used in the rest
-;;;;;; of the mode.)
-;;;;;; c) Fontifies multiline my/our declarations (even with comments,
-;;;;;; and with legacy `font-lock').
-;;;;;; d) Major speedup of syntaxification, both immediate and postponed
-;;;;;; (3.5x to 15x [for different CPUs and versions of Emacs] on the
-;;;;;; huge real-life document I tested).
-;;;;;; e) New bindings, edits to imenu.
-;;;;;; f) "_" is made into word-char during fontification/syntaxification;
-;;;;;; some attempts to recognize non-word "_" during other operations too.
-;;;;;; g) Detect bug in Emacs with `looking-at' inside `narrow' and bulk out.
-;;;;;; h) autoload some more perldoc-related stuff
-;;;;;; i) Some new convenience features: ISpell POD/HEREDOCs, narrow-to-HEREDOC
-;;;;;; j) Attempt to incorporate XEmacs edits which reached me
-
-;;;; Fine-grained changelog:
-;;; `cperl-hook-after-change': New configuration variable
-;;; `cperl-vc-sccs-header': Likewise
-;;; `cperl-vc-sccs-header': Likewise
-;;; `cperl-vc-header-alist': Default via two preceding variables
-;;; `cperl-invalid-face': Remove double quoting under XEmacs
-;;; (still needed under 21.2)
-;;; `cperl-tips': Update URLs for resources
-;;; `cperl-problems': Likewise
-;;; `cperl-praise': Mention new features
-;;; New C-c key bindings: for `cperl-find-bad-style',
-;;; `cperl-pod-spell', `cperl-here-doc-spell', `cperl-narrow-to-here-doc',
-;;; `cperl-perdoc', `cperl-perldoc-at-point'
-;;; CPerl Mode menu changes: "Fix style by spaces", "Imenu on Perl Info"
-;;; moved, new submenu of Tools with Ispell entries and narrowing.
-;;; `cperl-after-sub-regexp': New defsubst
-;;; `cperl-imenu--function-name-regexp-perl': Use `cperl-after-sub-regexp',
-;;; Allows heads up to head4
-;;; Allow "package;"
-;;; `defun-prompt-regexp': Use `cperl-after-sub-regexp',
-;;; `paren-backwards-message': ??? Something for XEmacs???
-;;; `cperl-mode': Never auto-switch abbrev-mode off
-;;; Try to allow '_' be non-word char
-;;; Do not use `font-lock-unfontify-region-function' on XEmacs
-;;; Reset syntax cache on mode start
-;;; Support multiline facification (even
-;;; on legacy `font-lock')
-;;; `cperl-facemenu-add-face-function': ??? Some contributed code ???
-;;; `cperl-after-change-function': Since `font-lock' and `lazy-lock'
-;;; refuse to inform us whether the fontification is due to lazy
-;;; calling or due to edit to a buffer, install our own hook
-;;; (controlled by `cperl-hook-after-change')
-;;; `cperl-electric-pod': =cut may have been recognized as start
-;;; `cperl-block-p': Moved, updated for attributes
-;;; `cperl-calculate-indent': Try to allow '_' be non-word char
-;;; Support subs with attributes
-;;; `cperl-where-am-i': Queit (?) a warning
-;;; `cperl-cached-syntax-table' New function
-;;; `cperl-forward-re': Use `cperl-cached-syntax-table'
-;;; `cperl-unwind-to-safe': Recognize `syntax-type' property
-;;; changing in a middle of line
-;;; `cperl-find-sub-attrs': New function
-;;; `cperl-find-pods-heres': Allow many <<EOP per line
-;;; Allow subs with attributes
-;;; Major speedups (3.5x..15x on a real-life
-;;; test file nph-proxy.pl)
-;;; Recognize "extproc " (OS/2)
-;;; case-folded and only at start
-;;; /x on s///x with empty replacement was
-;;; not recognized
-;;; Better comments
-;;; `cperl-after-block-p': Remarks on diff with `cperl-block-p'
-;;; Allow subs with attributes, labels
-;;; Do not confuse "else::foo" with "else"
-;;; Minor optimizations...
-;;; `cperl-after-expr-p': Try to allow '_' be non-word char
-;;; `cperl-fill-paragraph': Try to detect a major bug in Emacs
-;;; with `looking-at' inside `narrow' and bulk out if found
-;;; `cperl-imenu--create-perl-index': Updates for new
-;;; `cperl-imenu--function-name-regexp-perl'
-;;; `cperl-outline-level': Likewise
-;;; `cperl-init-faces': Allow multiline subroutine headers
-;;; and my/our declarations, and ones with comments
-;;; Allow subroutine attributes
-;;; `cperl-imenu-on-info': Better docstring.
-;;; `cperl-etags' Rudimentary support for attributes
-;;; Support for packages and "package;"
-;;; `cperl-add-tags-recurse-noxs': Better (?) docstring
-;;; `cperl-add-tags-recurse-noxs-fullpath': Likewise
-;;; `cperl-tags-hier-init': Misprint for `fboundp' fixed
-;;; `cperl-not-bad-style-regexp': Try to allow '_' be non-word char
-;;; `cperl-perldoc': Add autoload
-;;; `cperl-perldoc-at-point': Likewise
-;;; `cperl-here-doc-spell': New function
-;;; `cperl-pod-spell': Likewise
-;;; `cperl-map-pods-heres': Likewise
-;;; `cperl-get-here-doc-region': Likewise
-;;; `cperl-font-lock-fontify-region-function': Likewise (backward compatibility
-;;; for legacy `font-lock')
-;;; `cperl-font-lock-unfontify-region-function': Fix style
-;;; `cperl-fontify-syntaxically': Recognize and optimize away
-;;; deferred calls with no-change. Governed by `cperl-hook-after-change'
-;;; `cperl-fontify-update': Recognize that syntaxification region
-;;; can be larger than fontification one.
-;;; XXXX we leave `cperl-postpone' property, so this is quadratic...
-;;; `cperl-fontify-update-bad': Temporary placeholder until
-;;; it is clear how to implement `cperl-fontify-update'.
-;;; `cperl-time-fontification': New function
-;;; `attrib-group': New text attribute
-;;; `multiline': New value: `syntax-type' text attribute
-
-;;;; After 5.2:
-;;; `cperl-emulate-lazy-lock': New function
-;;; `cperl-fontify-syntaxically': Would skip large regions
-;;; Add `cperl-time-fontification', `cperl-emulate-lazy-lock' to menu
-;;; Some globals were declared, but uninitialized
-
-;;;; After 5.3, 5.4:
-;;; `cperl-facemenu-add-face-function': Add docs, fix U<>
-;;; Copyright message updated.
-;;; `cperl-init-faces': Work around a bug in `font-lock'. May slow
-;;; facification down a bit.
-;;; Misprint for my|our|local for old `font-lock'
-;;; "our" was not fontified same as "my|local"
-;;; Highlight variables after "my" etc even in
-;;; a middle of an expression
-;;; Do not facify multiple variables after my etc
-;;; unless parentheses are present
-
-;;; After 5.5, 5.6
-;;; `cperl-fontify-syntaxically': after-change hook could reset
-;;; `cperl-syntax-done-to' to a middle of line; unwind to BOL.
-
-;;; After 5.7:
-;;; `cperl-init-faces': Allow highlighting of local ($/)
-;;; `cperl-problems-old-emaxen': New variable (for the purpose of DOCSTRING).
-;;; `cperl-problems': Remove fixed problems.
-;;; `cperl-find-pods-heres': Recognize #-comments in m##x too
-;;; Recognize charclasses (unless delimiter is \).
-;;; `cperl-fontify-syntaxically': Unwinding to safe was done in wrong order
-;;; `cperl-regexp-scan': Update docs
-;;; `cperl-beautify-regexp-piece': use information got from regexp scan
-
-;;; After 5.8:
-;;; Major user visible changes:
-;;; Recognition and fontification of character classes in RExen.
-;;; Variable indentation of RExen according to groups
-;;;
-;;; `cperl-find-pods-heres': Recognize POSIX classes in REx charclasses
-;;; Fontify REx charclasses in variable-name face
-;;; Fontify POSIX charclasses in "type" face
-;;; Fontify unmatched "]" in function-name face
-;;; Mark first-char of HERE-doc as `front-sticky'
-;;; Reset `front-sticky' property when needed
-;;; `cperl-calculate-indent': Indents //x -RExen accordning to parens level
-;;; `cperl-to-comment-or-eol': Recognize ends of `syntax-type' constructs
-;;; `cperl-backward-to-noncomment': Recognize stringy `syntax-type' constructs
-;;; Support `narrow'ed buffers.
-;;; `cperl-praise': Remove a reservation
-;;; `cperl-make-indent': New function
-;;; `cperl-indent-for-comment': Use `cperl-make-indent'
-;;; `cperl-indent-line': Likewise
-;;; `cperl-lineup': Likewise
-;;; `cperl-beautify-regexp-piece': Likewise
-;;; `cperl-contract-level': Likewise
-;;; `cperl-toggle-set-debug-unwind': New function
-;;; New menu entry for this
-;;; `fill-paragraph-function': Use when `boundp'
-;;; `cperl-calculate-indent': Take into account groups when indenting RExen
-;;; `cperl-to-comment-or-eol': Recognize # which end a string
-;;; `cperl-modify-syntax-type': Make only syntax-table property non-sticky
-;;; `cperl-fill-paragraph': Return t: needed for `fill-paragraph-function'
-;;; `cperl-fontify-syntaxically': More clear debugging message
-;;; `cperl-pod2man-build-command': XEmacs portability: check `Man-filter-list'
-;;; `cperl-init-faces': More complicated highlight even on XEmacs (new)
-;;; Merge cosmetic changes from XEmacs
-
-;;; After 5.9:
-;;; `cperl-1+': Moved to before the first use
-;;; `cperl-1-': Likewise
-
-;;; After 5.10:
-
-;;; This code may lock Emacs hard!!! Use on your own risk!
-
-;;; `cperl-font-locking': New internal variable
-;;; `cperl-beginning-of-property': New function
-;;; `cperl-calculate-indent': Use `cperl-beginning-of-property'
-;;; instead of `previous-single-property-change'
-;;; `cperl-unwind-to-safe': Likewise
-;;; `cperl-after-expr-p': Likewise
-;;; `cperl-get-here-doc-region': Likewise
-;;; `cperl-font-lock-fontify-region-function': Likewise
-;;; `cperl-to-comment-or-eol': Do not call `cperl-update-syntaxification'
-;;; recursively
-;;; Bound `next-single-property-change'
-;;; via `point-max'
-;;; `cperl-unwind-to-safe': Bound likewise
-;;; `cperl-font-lock-fontify-region-function': Likewise
-;;; `cperl-find-pods-heres': Mark as recursive for `cperl-to-comment-or-eol'
-;;; Initialization of
-;;; `cperl-font-lock-multiline-start' could be missed if the "main"
-;;; fontification did not run due to the keyword being already fontified.
-;;; `cperl-pod-spell': Return t from do-one-chunk function
-;;; `cperl-map-pods-heres': Stop when the worker returns nil
-;;; Call `cperl-update-syntaxification'
-;;; `cperl-get-here-doc-region': Call `cperl-update-syntaxification'
-;;; `cperl-get-here-doc-delim': Remove unused function
-
-;;; After 5.11:
-
-;;; The possible lockup of Emacs (introduced in 5.10) fixed
-
-;;; `cperl-unwind-to-safe': `cperl-beginning-of-property' won't return nil
-;;; `cperl-syntaxify-for-menu': New customization variable
-;;; `cperl-select-this-pod-or-here-doc': New function
-;;; `cperl-get-here-doc-region': Extra argument
-;;; Do not adjust pos by 1
-
-;;; New menu entries (Perl/Tools): selection of current POD or HERE-DOC section
-;;; (Debugging CPerl:) backtrace on fontification
-
-;;; After 5.12:
-;;; `cperl-cached-syntax-table': use `car-safe'
-;;; `cperl-forward-re': Remove spurious argument SET-ST
-;;; Add documentation
-;;; `cperl-forward-group-in-re': New function
-;;; `cperl-find-pods-heres': Find and highlight (?{}) blocks in RExen
-;;; (XXXX Temporary (?) hack is to syntax-mark them as comment)
-
-;;; After 5.13:
-;;; `cperl-string-syntax-table': Make { and } not-grouping
-;;; (Sometimes they ARE grouping in RExen, but matching them would only
-;;; confuse in many situations when they are not)
-;;; `beginning-of-buffer': Replaced two occurences with goto-char...
-;;; `cperl-calculate-indent': `char-after' could be nil...
-;;; `cperl-find-pods-heres': REx can start after "[" too
-;;; Hightlight (??{}) in RExen too
-;;; `cperl-maybe-white-and-comment-rex': New constant
-;;; `cperl-white-and-comment-rex': Likewise
-;;; XXXX Not very efficient, but hard to make
-;;; better while keeping 1 group
-
-;;; After 5.13:
-;;; `cperl-find-pods-heres': $foo << identifier() is not a HERE-DOC
-;;; Likewise for 1 << identifier
-
-;;; After 5.14:
-;;; `cperl-find-pods-heres': Different logic for $foo .= <<EOF etc
-;;; Error-less condition-case could fail
-;;; `cperl-font-lock-fontify-region-function': Likewise
-;;; `cperl-init-faces': Likewise
-
-;;; After 5.15:
-;;; `cperl-find-pods-heres': Support property REx-part2
-;;; `cperl-calculate-indent': Likewise
-;;; Don't special-case REx with non-empty 1st line
-;;; `cperl-find-pods-heres': In RExen, highlight non-literal backslashes
-;;; Invert highlighting of charclasses:
-;;; now the envelop is highlighted
-;;; Highlight many others 0-length builtins
-;;; `cperl-praise': Mention indenting and highlight in RExen
-
-;;; After 5.15:
-;;; `cperl-find-pods-heres': Highlight capturing parens in REx
-
-;;; After 5.16:
-;;; `cperl-find-pods-heres': Highlight '|' for alternation
-;;; Initialize `font-lock-warning-face' if not present
-;;; `cperl-find-pods-heres': Use `font-lock-warning-face' instead of
-;;; `font-lock-function-name-face'
-;;; `cperl-look-at-leading-count': Likewise
-;;; `cperl-find-pods-heres': localize `font-lock-variable-name-face'
-;;; `font-lock-keyword-face' (needed for
-;;; batch processing) etc
-;;; Use `font-lock-builtin-face' for builtin in REx
-;;; Now `font-lock-variable-name-face'
-;;; is used for interpolated variables
-;;; Use "talking aliases" for faces inside REx
-;;; Highlight parts of REx (except in charclasses)
-;;; according to the syntax and/or semantic
-;;; Syntax-mark a {}-part of (?{}) as "comment"
-;;; (it was the ()-part)
-;;; Better logic to distinguish what is what in REx
-;;; `cperl-tips-faces': Document REx highlighting
-;;; `cperl-praise': Mention REx syntax highlight etc.
-
-;;; After 5.17:
-;;; `cperl-find-sub-attrs': Would not always manage to print error message
-;;; `cperl-find-pods-heres': localize `font-lock-constant-face'
-
-;;; After 5.18:
-;;; `cperl-find-pods-heres': Misprint in REx for parsing REx
-;;; Very minor optimization
-;;; `my-cperl-REx-modifiers-face' got quoted
-;;; Recognize "print $foo <<END" as HERE-doc
-;;; Put `REx-interpolated' text attribute if needed
-;;; `cperl-invert-if-unless-modifiers': New function
-;;; `cperl-backward-to-start-of-expr': Likewise
-;;; `cperl-forward-to-end-of-expr': Likewise
-;;; `cperl-invert-if-unless': Works in "the opposite way" too
-;;; Cursor position on return is on the switch-word
-;;; Indents comments better
-;;; `REx-interpolated': New text attribute
-;;; `cperl-next-interpolated-REx': New function
-;;; `cperl-next-interpolated-REx-0': Likewise
-;;; `cperl-next-interpolated-REx-1': Likewise
-;;; "\C-c\C-x", "\C-c\C-y", "\C-c\C-v": New keybinding for these functions
-;;; Perl/Regexp menu: 3 new entries for `cperl-next-interpolated-REx'
-;;; `cperl-praise': Mention finded interpolated RExen
-
-;;; After 5.19:
-;;; `cperl-init-faces': Highlight %$foo, @$foo too
-;;; `cperl-short-docs': Better docs for system, exec
-;;; `cperl-find-pods-heres': Better detect << after print {FH} <<EOF etc.
-;;; Would not find HERE-doc ended by EOF without NL
-;;; `cperl-short-docs': Correct not-doubled \-escapes
-;;; start block: Put some `defvar' for stuff gone from XEmacs
-
-;;; After 5.20:
-;;; initial comment: Extend copyright, fix email address
-;;; `cperl-indent-comment-at-column-0': New customization variable
-;;; `cperl-comment-indent': Indentation after $#a would increasy by 1
-;;; `cperl-mode': Make `defun-prompt-regexp' grok BEGIN/END etc
-;;; `cperl-find-pods-heres': Mark CODE of s///e as `syntax-type' `multiline'
-;;; `cperl-at-end-of-expr': Would fail if @BAR=12 follows after ";"
-;;; `cperl-init-faces': If `cperl-highlight-variables-indiscriminately'
-;;; highlight $ in $foo too (UNTESTED)
-;;; `cperl-set-style': Docstring missed some available styles
-;;; toplevel: Menubar/Perl/Indent-Styles had FSF, now K&R
-;;; Change "Current" to "Memorize Current"
-;;; `cperl-indent-wrt-brace': New customization variable; the default is
-;;; as for pre-5.2 version
-;;; `cperl-styles-entries': Keep `cperl-extra-newline-before-brace-multiline'
-;;; `cperl-style-alist': Likewise
-;;; `cperl-fix-line-spacing': Support `cperl-merge-trailing-else' being nil,
-;;; and `cperl-extra-newline-before-brace' etc
-;;; being t
-;;; `cperl-indent-exp': Plans B and C to find continuation blocks even
-;;; if `cperl-extra-newline-before-brace' is t
-
-;;; After 5.21:
-;;; Improve some docstrings concerning indentation.
-;;; `cperl-indent-rules-alist': New variable
-;;; `cperl-sniff-for-indent': New function name
-;; (separated from `cperl-calculate-indent')
-;;; `cperl-calculate-indent': Separated the sniffer and the indenter;
-;;; uses `cperl-sniff-for-indent' now
-;;; `cperl-comment-indent': Test for `cperl-indent-comment-at-column-0'
-;;; was inverted;
-;;; Support `comment-column' = 0
-
-;;; After 5.22:
-;;; `cperl-where-am-i': Remove function
-;;; `cperl-backward-to-noncomment': Would go too far when skipping POD/HEREs
-;;; `cperl-sniff-for-indent': [string] and [comment] were inverted
-;;; When looking for label, skip s:m:y:tr
-;;; `cperl-indent-line': Likewise.
-;;; `cperl-mode': `font-lock-multiline' was assumed auto-local
-;;; `cperl-windowed-init': Wrong `ps-print' handling
-;;; (both thanks to Chong Yidong)
-;;; `cperl-look-at-leading-count': Could fail with unfinished RExen
-;;; `cperl-find-pods-heres': If the second part of s()[] is missing,
-;;; could try to highlight delimiters...
-