In addition to the classes, entries for characters in a syntax table can specify flags. There are eight possible flags, represented by the characters ‘1’, ‘2’, ‘3’, ‘4’, ‘b’, ‘c’, ‘n’, and ‘p’.
All the flags except ‘p’ are used to describe comment delimiters. The digit flags are used for comment delimiters made up of 2 characters. They indicate that a character can also be part of a comment sequence, in addition to the syntactic properties associated with its character class. The flags are independent of the class and each other for the sake of characters such as ‘*’ in C mode, which is a punctuation character, and the second character of a start-of-comment sequence (‘/*’), and the first character of an end-of-comment sequence (‘*/’). The flags ‘b’, ‘c’, and ‘n’ are used to qualify the corresponding comment delimiter.
Here is a table of the possible flags for a character c, and what they mean:
Emacs supports several comment styles simultaneously in any one syntax table. A comment style is a set of flags ‘b’, ‘c’, and ‘n’, so there can be up to 8 different comment styles, each one named by the set of its flags. Each comment delimiter has a style and only matches comment delimiters of the same style. Thus if a comment starts with the comment-start sequence of style “bn”, it will extend until the next matching comment-end sequence of style “bn”. When the set of flags has neither flag ‘b’ nor flag ‘c’ set, the resulting style is called the “a” style.
The appropriate comment syntax settings for C++ can be as follows:
‘124’
‘23b’
‘>’
This defines four comment-delimiting sequences:
This is a comment-start sequence for “b” style because the second character, ‘*’, has the ‘b’ flag.
This is a comment-start sequence for “a” style because the second character, ‘/’, does not have the ‘b’ flag.
This is a comment-end sequence for “b” style because the first character, ‘*’, has the ‘b’ flag.
This is a comment-end sequence for “a” style, because the newline character does not have the ‘b’ flag.
The function backward-prefix-chars
moves back over these
characters, as well as over characters whose primary syntax class is
prefix (‘'’). See Motion and Syntax.