The PROPS Tag
Prev | Chapter 10. Mode Definition Syntax | Next

## The PROPS Tag

The `PROPS` tag and the `PROPERTY` tags inside it are used to define mode-specific properties. Each `PROPERTY` tag must have a `NAME` attribute set to the property's name, and a `VALUE` attribute with the property's value.

All buffer-local properties listed in the section called “Buffer-Local Properties” may be given values in edit modes.

`contextInsensitive` - If true the property indicate that a line can always be highlighted without taking care of the previous line. If activated the syntax will be much faster.

The following mode properties specify commenting strings:

- `commentEnd` - the comment end string, used by the Range Comment command.

- `commentStart` - the comment start string, used by the Range Comment command.

- `lineComment` - the line comment string, used by the Line Comment command.

When performing auto indent, a number of mode properties determine the resulting indent level:

- The line and the one before it are scanned for brackets listed in the `indentCloseBrackets` and `indentOpenBrackets` properties. Opening brackets in the previous line increase indent.

  If `lineUpClosingBracket` is set to `true`, then closing brackets on the current line will line up with the line containing the matching opening bracket. For example, in Java mode `lineUpClosingBracket` is set to `true`, resulting in brackets being indented like so:

      {
          // Code
          {
              // More code
          }
      }

  If `lineUpClosingBracket` is set to `false`, the line after a closing bracket will be lined up with the line containing the matching opening bracket. For example, in Lisp mode `lineUpClosingBracket` is set to `false`, resulting in brackets being indented like so:

      (foo 'a-parameter
          (crazy-p)
          (bar baz ()))
      (print "hello world")

- If the previous line contains no opening brackets, or if the `doubleBracketIndent` property is set to `true`, the previous line is checked against the regular expressions in the `indentNextLine` and `indentNextLines` properties. If the previous line matches the former, the indent of the current line is increased and the subsequent line is shifted back again. If the previous line matches the latter, the indent of the current and subsequent lines is increased.

  There are corresponding `unindentThisLine` and `unindentNextLines` properties which are checked also, for doing the reverse-indent operation on lines that match certain regular expressions.

  In Java mode, for example, the `indentNextLine` property is set to match control structures such as “if”, “else”, “while”, and so on.

  The `doubleBracketIndent` property, if set to the default of `false`, results in code indented like so:

      while(objects.hasNext())
      {
          Object next = objects.hasNext();
          if(next instanceof Paintable)
              next.paint(g);
      }

  On the other hand, settings this property to “true” will give the following result:

      while(objects.hasNext())
          {
              Object next = objects.hasNext();
              if(next instanceof Paintable)
                  next.paint(g);
          }

- `electricKeys`: characters listed here, when typed on a line, cause the current line to be re-indented. Notice that by default, pressing "Enter" does not re-indent the current line, only the new line. To get this behavior, add the newline character to `electricKeys` in the xml-escaped form &#xA;

Here is the complete `<PROPS>` tag for Java mode:

    <PROPS>
        <PROPERTY NAME="commentStart" VALUE="/*" />
        <PROPERTY NAME="commentEnd" VALUE="*/" />
        <PROPERTY NAME="lineComment" VALUE="//" />
        <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />

        <!-- Auto indent -->
        <PROPERTY NAME="indentOpenBrackets" VALUE="{" />
        <PROPERTY NAME="indentCloseBrackets" VALUE="}" />
        <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
        <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
        <PROPERTY NAME="indentNextLine"
        	VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />
        <PROPERTY NAME="unindentThisLine"
        	VALUE="^.*(default:\s*|case.*:.*)$" />
        <PROPERTY NAME="electricKeys" VALUE=":" />
        <!-- set this to 'true' if you want to use GNU coding style -->
        <PROPERTY NAME="doubleBracketIndent" VALUE="false" />
        <PROPERTY NAME="lineUpClosingBracket" VALUE="true" />
    </PROPS>

Prev | Up | Next
The Preamble and MODE tag | Home | The RULES Tag