it duplicates the bibtex support in progmodes/hideshow.el.
* progmodes/hideshow.el (hs-special-modes-alist): Allow bibtex
entry that do not start at the beginning of a line.
make-variable-buffer-local code after the corresponding defvar.
(hs-minor-mode-map): Define and initialize in one step.
(hs-minor-mode): Change from defun to define-minor-mode.
(hs-minor-mode, hs-c-start-regexp, hs-block-start-regexp)
(hs-block-start-mdata-select, hs-block-end-regexp)
(hs-forward-sexp-func, hs-adjust-block-beginning): Do not make
these variables permanent-local.
(hs-allow-nesting): New user var.
(hs-discard-overlays): Skip "internal" overlays if nesting allowed.
(hs-hide-block-at-point): When nesting allowed,
if there is already an overlay in place, delete it.
(hs-safety-is-job-n): Delete func; remove call sites.
(hs-hide-level-recursive): Don't pre-clean if nesting allowed.
(hs-overlay-at): New func.
(hs-already-hidden-p, hs-show-block): Use it.
(hs-hide-all): Don't pre-clean if nesting allowed.
(hs-show-all): Temporarily disallow
nesting around call to `hs-discard-overlays'.
(hs-make-overlay): New function.
(hs-isearch-show-temporary): Handle `display' overlay prop specially.
(hs-flag-region): Delete function.
(hs-hide-comment-region): No longer use `hs-flag-region'.
Instead, use `hs-discard-overlays' and `hs-make-overlay'.
(hs-hide-block-at-point): Likewise.
(hs-hide-level-recursive): Use `hs-discard-overlays'.
(hs-hide-all, hs-show-all): Likewise.
(hs-show-block): Likewise.
Also, use overlay prop `hs-b-offset', not `hs-ofs'.
Remove XEmacs and Emacs 19 compatibility.
Use `dolist' and `add-to-list' for load-time actions.
(hs-discard-overlays): Use `dolist'.
(hs-show-block): Likewise.
Sync comments w/ maintainer version 5.31.
(hs-isearch-open): Default value now `code'.
Fix docstring to use "code blocks" vs "comment blocks",
as opposed to "block" vs "comment".
(hs-flag-region): Accept `hs-isearch-open' value
of `block' as synonymous w/ `code'.
(hs-hide-block-at-point): For code blocks, pass `code'
to `hs-flag-region' instead of `block'.
Generally, sync w/ maintainer version 5.22.
(hs-hide-all-non-comment-function): New var.
(hs-hide-hook, hs-show-hook, hs-minor-mode): Update docstrings.
(hs-hide-all): Use `hs-hide-all-non-comment-function'.
(hs-show-region): Delete this command.
(hs-minor-mode-map): Change bindings to leave "C-c LETTER" alone.