Normally, elements of font-lock-keywords should not match across multiple lines; that doesn’t work reliably, because Font Lock usually scans just part of the buffer, and it can miss a multi-line construct that crosses the line boundary where the scan starts. (The scan normally starts at the beginning of a line.)
Making elements that match multiline constructs work properly has two aspects: correct identification and correct rehighlighting. The first means that Font Lock finds all multiline constructs. The second means that Font Lock will correctly rehighlight all the relevant text when a multiline construct is changed—for example, if some of the text that was previously part of a multiline construct ceases to be part of it. The two aspects are closely related, and often getting one of them to work will appear to make the other also work. However, for reliable results you must attend explicitly to both aspects.
There are three ways to ensure correct identification of multiline constructs:
There are three ways to do rehighlighting of multiline constructs:
jit-lock-defer-multilineproperty on the construct. This works only if jit-lock-contextually is used, and with the same delay before rehighlighting, but like font-lock-multiline, it also handles the case where highlighting depends on subsequent lines.
|• Font Lock Multiline:||Marking multiline chunks with a text property.|
|• Region to Refontify:||Controlling which region gets refontified after a buffer change.|