Subject: bug#66555: 29.1; ChangeLog font-lock wrong when it comes to sub-part / conditional components

From: "Alfred M. Szmidt" <[email-masked]>
Date: Sun, 15 Oct 2023 06:19:58 -0400

ChangeLog mode does the wrong thing when it comes to font-lock when
you have sub-part components or conditionals:

	* file.text (zork) <bar>
	(bork) <bar>: Some change.

	* file.text (zork) [foo]
	(bork) [bar]: Some change.

<foo> nor [foo] is not font-locked properly, the ChangeLog format
specifies the following:

|    Break long lists of function names by closing continued lines with
| ')', rather than ',', and opening the continuation with '('.  This makes
| highlighting in Emacs work better.  Here is an example:
| 
|      * src/keyboard.c (menu_bar_items, tool_bar_items)
|      (Fexecute_extended_command): Deal with 'keymap' property.

Moving the sub-part / conditional to before the function name also
does the wrong thing,

	* file.text <bar> (zork)
	(bork) <bar>: Some change.

	* file.text [foo] (zork)
	(bork) [bar]: Some change.

Now the function name is not font-locked.

In GNU Emacs 29.1 (build 1, aarch64-apple-darwin21.6.0, NS
 appkit-2113.60 Version 12.6.6 (Build 21G646)) of 2023-08-17 built on
 armbob.lan
Windowing system distributor 'Apple', version 10.3.2487
System Description:  macOS 14.0

Configured using:
 'configure --with-ns '--enable-locallisppath=/Library/Application
 Support/Emacs/${version}/site-lisp:/Library/Application
 Support/Emacs/site-lisp' --with-modules 'CFLAGS=-DFD_SETSIZE=10000
 -DDARWIN_UNLIMITED_SELECT' --with-x-toolkit=no'

Configured features:
ACL GLIB GMP GNUTLS JPEG JSON LIBXML2 MODULES NOTIFY KQUEUE NS PDUMPER
PNG RSVG SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER ZLIB

Important settings:
  locale-coding-system: utf-8-unix

Major mode: Change Log

Minor modes in effect:
  shell-dirtrack-mode: t
  rcirc-track-minor-mode: t
  global-company-mode: t
  company-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
~/loaddefs hides /Applications/Emacs.app/Contents/Resources/lisp/loaddefs
/Users/ams/.emacs.d/elpa/transient-0.4.1/transient hides /Applications/Emacs.app/Contents/Resources/lisp/transient

Features:
(shadow emacsbug bug-reference cal-china lunar solar cal-dst cal-bahai
cal-islam cal-hebrew holidays holiday-loaddefs ibuf-ext ibuffer
ibuffer-loaddefs tar-mode locate pcmpl-gnu image-mode exif macros rect
warnings python compat tabify imenu man nroff-mode shortdoc novice
jka-compr ispell cus-start cus-load quail gnus-topic texinfo
texinfo-loaddefs mailalias tramp-cache time-stamp tramp-sh tramp
tramp-loaddefs trampver tramp-integration tramp-compat format-spec
display-line-numbers reveal log-edit add-log todo-mode diary-lib
diary-loaddefs face-remap dabbrev markdown-mode pcmpl-unix sh-script
rx treesit executable smerge-mode vc-hg vc-git diff-mode vc-bzr vc-src
vc-sccs vc-cvs vc-rcs vc-dir ewoc conf-mode cc-mode cc-fonts cc-guess
cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs octave
smie vc-svn rng-xsd xsd-regexp rng-cmpct rng-nxml rng-valid rng-loc
rng-uri rng-parse nxml-parse rng-match rng-dt rng-util rng-pttrn
nxml-ns nxml-mode nxml-outln nxml-rap sgml-mode facemenu nxml-util
nxml-enc xmltok rmailsum rmailout shr-color color rmailmm rmail
em-unix em-term term shell ehelp em-script em-prompt em-ls em-hist
em-pred em-glob em-extpipe em-cmpl em-dirs esh-var pcomplete em-basic
em-banner em-alias esh-mode eshell esh-cmd esh-ext esh-opt esh-proc
esh-io esh-arg esh-module esh-groups esh-util files-x flow-fill qp
mm-archive sort smiley gnus-cite mail-extr textsec uni-scripts
idna-mapping uni-confusable textsec-check gnus-async gnus-bcklg
gnus-ml cursor-sensor nndraft nnmh nnfolder vc-backup log-view
pcvs-util diff gnus-agent gnus-srvr gnus-score score-mode nnvirtual
gnus-msg gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig
nntp gnus-cache gnus-sum shr pixel-fill kinsoku url-file svg dom
gnus-group gnus-undo gnus-start gnus-dbus dbus xml gnus-cloud nnimap
nnmail mail-source utf7 nnoo gnus-spec gnus-int gnus-range message
yank-media rfc822 mml mml-sec epa epg rfc6068 epg-config mm-decode
mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader
gnus-win gnus nnheader gnus-util range wid-edit disp-table
network-stream puny nsm rcirc parse-time iso8601 time-date mail-queue
sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils
wdired misearch multi-isearch dired-aux dired dired-loaddefs help-fns
cl-print debug backtrace find-func vc-fossil vc vc-dispatcher
slime-asdf grep slime-quicklisp slime-fancy slime-indentation
slime-cl-indent cl-indent slime-trace-dialog slime-fontifying-fu
slime-package-fu slime-references slime-compiler-notes-tree
slime-scratch slime-presentations advice bridge slime-macrostep
macrostep slime-mdot-fu slime-enclosing-context slime-fuzzy
slime-fancy-trace slime-fancy-inspector slime-c-p-c
slime-editing-commands slime-autodoc slime-repl elp slime-parse slime
derived cl-extra help-mode gud easy-mmode apropos compile
text-property-search arc-mode archive-mode noutline outline icons pp
comint ansi-osc ansi-color hyperspec thingatpt slime-autoloads
company-oddmuse company-keywords company-etags etags fileloop
generator xref project ring company-gtags company-dabbrev-code
company-dabbrev company-files company-capf company-cmake company-xcode
company-clang company-semantic company-eclim company-template
company-bbdb company edmacro kmacro pcase cal-menu calendar
cal-loaddefs autoload loaddefs-gen radix-tree lisp-mnt finder-inf
company-autoloads git-commit-autoloads magit-section-autoloads
dash-autoloads markdown-mode-autoloads transient-autoloads
with-editor-autoloads info compat-autoloads package browse-url url
url-proxy url-privacy url-expand url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse
auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x
map byte-opt gv bytecomp byte-compile url-vars cl-loaddefs cl-lib rmc
iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook
vc-hooks lisp-float-type elisp-mode mwheel term/ns-win ns-win
ucs-normalize mule-util term/common-win tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode
lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch
easymenu timer select scroll-bar mouse jit-lock font-lock syntax
font-core term/tty-colors frame minibuffer nadvice seq simple
cl-generic indonesian philippine cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932
hebrew greek romanian slovak czech european ethiopic indian cyrillic
chinese composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button
loaddefs theme-loaddefs faces cus-face macroexp files window
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget keymap hashtable-print-readable backquote threads kqueue
cocoa ns multi-tty make-network-process emacs)

Memory information:
((conses 16 1689816 1290001)
 (symbols 48 75704 20)
 (strings 32 212457 56530)
 (string-bytes 1 7143931)
 (vectors 16 77270)
 (vector-slots 8 1863751 427751)
 (floats 8 1119 789)
 (intervals 56 112004 220835)
 (buffers 984 129))