# Resource File Format

A resource file contains text representing the default resource values for an application or set of applications.

The format of resource files is defined by Xlib — C Language X Interface. and is reproduced here for convenience only.

The format of a resource specification is

ResourceLine | = Comment | IncludeFile | ResourceSpec | <empty line>
Comment | ="!" {<any character except null or newline>}
IncludeFile | = "#" WhiteSpace "include" WhiteSpace FileName WhiteSpace
FileName | = <valid filename for operating system>
ResourceSpec | = WhiteSpace ResourceName WhiteSpace ":" WhiteSpace Value
ResourceName | = [Binding] {Component Binding} ComponentName
Binding | ="." | "*"
WhiteSpace | = {<space> | <horizontal tab>}
Component | = "?" | ComponentName
ComponentName | = NameChar {NameChar}
NameChar | = "a"-"z" | "A"-"Z" | "0"-"9" | "_" | "-"
Value | ={<any character except null or unescaped newline>}

Elements separated by vertical bar (|) are alternatives. Curly braces ({...}) indicate zero or more repetitions of the enclosed elements. Square brackets ([...]) indicate that the enclosed element is optional. Quotes ("...") are used around literal characters.

If the last character on a line is a backslash (\), that line is assumed to continue on the next line.

To allow a Value to begin with whitespace, the two-character sequence "\space" (backslash followed by space) is recognized and replaced by a space character, and the two-character sequence "\tab" (backslash followed by horizontal tab) is recognized and replaced by a horizontal tab character.

To allow a Value to contain embedded newline characters, the two-character sequence "\n" is recognized and replaced by a newline character. To allow a Value to be broken across multiple lines in a text file, the two-character sequence "\newline" (backslash followed by newline) is recognized and removed from the value.

To allow a Value to contain arbitrary character codes, the four-character sequence "\nnn", where each n is a digit character in the range of "0"-"7", is recognized and replaced with a single byte that contains the octal value specified by the sequence. Finally, the two-character sequence "\\" is recognized and replaced with a single backslash.