I am having a problem in cperl-mode described in this question. Basically inserting a newline at the start of a line in here doc in cperl-mode is breaking the syntax highlighting. One of the answers suggested using font-lock-extend-region-functions to extend the font lock region to include all of the here doc. I have done that with the code below and verified it with highlight-refontification. However even though the region is extended, when I insert a newline, the region splits and the syntax highlighting still breaks. My function is shown below

(defun my/cperl-font-lock-extend-region-here ()
    (goto-char font-lock-beg)
    (if (re-search-backward "=<<\s*['\"]?[0-9a-zA-Z_]+['\"]?\s*;" nil t)
        (if (string-match "=<<\s*['\"]?\\([0-9a-zA-Z_]+\\)['\"]?\s*;" (thing-at-point 'line t))
            (let ((here-tag (concat "^" (match-string 1 (thing-at-point 'line t)) "$")))
              (let ((here-start (point)))
                (goto-char font-lock-end)
                (if (re-search-forward here-tag nil t)
                      (if (< font-lock-end (point))
                          (setq font-lock-end (point)))))
                (if (> font-lock-beg here-start)
                    (setq font-lock-beg here-start))))))))

My question is, does any smart person know an approach to prevent syntax highlighting from breaking in cperl-mode here docs?


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.