mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-29 15:41:59 +00:00
Make the property-list documentation useful for users.
This commit is contained in:
parent
14c23879b1
commit
a759a5a376
3 changed files with 101 additions and 40 deletions
|
@ -4,8 +4,8 @@ SUBDIRS= man
|
||||||
|
|
||||||
DOX=\
|
DOX=\
|
||||||
bind.dox connect.dox cshifts.dox dirconf.dox faq.dox \
|
bind.dox connect.dox cshifts.dox dirconf.dox faq.dox \
|
||||||
filesystem.dox mapformat.dox qtv.dox quakeforge.dox qw-cap-spec.dox \
|
filesystem.dox mapformat.dox property-lists.dox qtv.dox quakeforge.dox \
|
||||||
qw-download-spec.dox surround-sound.dox timestamps.dox
|
qw-cap-spec.dox qw-download-spec.dox surround-sound.dox timestamps.dox
|
||||||
|
|
||||||
EXTRA_DIST= qf.ico \
|
EXTRA_DIST= qf.ico \
|
||||||
\
|
\
|
||||||
|
|
90
doc/property-lists.dox
Normal file
90
doc/property-lists.dox
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
//unfortunatly, have to wrap the docs in a C comment for doxygen
|
||||||
|
/**
|
||||||
|
\page property-lists Property Lists
|
||||||
|
|
||||||
|
\QF's property lists are based on those used in OpenStep.
|
||||||
|
|
||||||
|
\QF uses property lists for a wide variety of purposes. This includes saved
|
||||||
|
game data, directory configuration and play-lists.
|
||||||
|
|
||||||
|
Property lists are text files that describe a single value. However, that
|
||||||
|
value can be one of the following types:
|
||||||
|
<dl>
|
||||||
|
<dt>Dictionaries</dt> <dd>Lists of values that are each accociated
|
||||||
|
with a key</dd>
|
||||||
|
<dt>Arrays</dt> <dd>Lists of indexed values</dd>
|
||||||
|
<dt>Strings</dt> <dd>Simple text strings.</dd>
|
||||||
|
<dt>Binary data</dt> <dd>Random binary data</dd>
|
||||||
|
</dl>
|
||||||
|
Dictionary and Array values allow for arbitrarily complex data to be
|
||||||
|
represented by a property list.
|
||||||
|
|
||||||
|
In addition, property lists also support comments, both single-line and
|
||||||
|
multi-line. Single-line comments start with \c // and continue to the end
|
||||||
|
of the line. Multi-line comments begine with
|
||||||
|
<!-- crazy formatting to get C comments--><code>/</code><code>*</code> and
|
||||||
|
end with <code>*</code><code>/</code>, and may span multiple lines, or be
|
||||||
|
contained entirely within a single line, possibly with non-comment text
|
||||||
|
following the comment.
|
||||||
|
|
||||||
|
\section pl-dictionaries Dictionaries.
|
||||||
|
A dictionary is a list of values, each associated with a key. The order of
|
||||||
|
key/value pairs in a dictionary is not preserved.
|
||||||
|
|
||||||
|
\code
|
||||||
|
{
|
||||||
|
key1 = value1;
|
||||||
|
key2 = value2;
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
A dictionary may be empty or have any number of
|
||||||
|
<code>key = value</code> pairs separated by \c ;. The final \c ;
|
||||||
|
before the closing \c } is optional.
|
||||||
|
|
||||||
|
The key must be a string, but the value may be of any type, including
|
||||||
|
dictionary or array.
|
||||||
|
|
||||||
|
\section Arrays
|
||||||
|
An array is an ordered list of values. The order of the values in an array
|
||||||
|
is preserved.
|
||||||
|
|
||||||
|
\code
|
||||||
|
(
|
||||||
|
value1,
|
||||||
|
value2,
|
||||||
|
// ...
|
||||||
|
)
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
An array may be empty or have any number of values. Each value may be of
|
||||||
|
any type, including dictionary or array.
|
||||||
|
|
||||||
|
\section pl-strings Strings
|
||||||
|
\QF's property lists support three types of strings: unquoted, quoted and
|
||||||
|
"long".
|
||||||
|
|
||||||
|
An unquoted string may contain most printable characters. This includes the
|
||||||
|
digits \c 0 to \c 9, the letters \c a to \c z and \c A to \c Z, and the
|
||||||
|
symbols \c !, \c #, \c $, \c %, \c &, \c *, \c +, \c -, \c ., \c /, \c :,
|
||||||
|
\c ?, \c @, \c |, \c ~, \c _ and \c ^.
|
||||||
|
\verbatim
|
||||||
|
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
||||||
|
abcdefghijklmnopqrstuvwxyz!#$%&*+-./:?@|~_^
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
Quoted strings may contain whitespace, C escape sequences, and any
|
||||||
|
printable character. The quote character is \c \".
|
||||||
|
|
||||||
|
Long strings use tripple quotes (\c \"\"\") instead of \c \" as the quote
|
||||||
|
character. This allows the use of unquoted \c \" characters in the string.
|
||||||
|
And yes, these long strings were inspired by Python's long strings.
|
||||||
|
|
||||||
|
\section pl-binary Binary Data
|
||||||
|
<!-- in the following paragraph, the \< and \> are just < and >. the \ is
|
||||||
|
for doxygen -->
|
||||||
|
Binary data is hex-encoded and contained within angle brackets (\c \< \c
|
||||||
|
\>). There must be an even number of hex-digits. That is, while \c \<FF00\>
|
||||||
|
is value, \c \<F00\> is not.
|
||||||
|
*/
|
|
@ -36,46 +36,17 @@
|
||||||
|
|
||||||
#include "QF/qtypes.h"
|
#include "QF/qtypes.h"
|
||||||
|
|
||||||
/**
|
/** The type of the property list item.
|
||||||
There are four types of data that can be stored in a property list:
|
|
||||||
|
|
||||||
<dl>
|
For further details, see \ref property-lists.
|
||||||
<dt>QFDictionary</dt> <dd>A list of values, each associated with a
|
|
||||||
key (a C string).</dd>
|
|
||||||
<dt>QFArray</dt> <dd>A list of indexed values</dd>
|
|
||||||
<dt>QFString</dt> <dd>A string.</dd>
|
|
||||||
<dt>QFBinary</dt> <dd>Random binary data.</dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
In textual form, a dictionary looks like:
|
|
||||||
\code
|
|
||||||
{
|
|
||||||
key = value;
|
|
||||||
}
|
|
||||||
\endcode
|
|
||||||
An array looks like:
|
|
||||||
\code
|
|
||||||
(
|
|
||||||
value1,
|
|
||||||
value2
|
|
||||||
)
|
|
||||||
\endcode
|
|
||||||
An unquoted string may contain only alphanumeric characters and/or the
|
|
||||||
underscore character, <code>_</code>. Quoted strings may contain
|
|
||||||
whitespace, C escape sequences, and so on. The quote character is
|
|
||||||
<code>\"</code>. Optionally, Python style long strings
|
|
||||||
(<code>\"\"\"...\"\"\"</code>) may be used, allowing for unquoted
|
|
||||||
<code>"</code> quotes in the string.
|
|
||||||
|
|
||||||
<!-- in the following paragraph, the \< and \> are just < and >. the \ is
|
|
||||||
for doxygen -->
|
|
||||||
QFBinary data is hex-encoded and contained within angle brackets, \c \<
|
|
||||||
\c \>. The length of the encoded data must be an even number, so while
|
|
||||||
\c \<FF00\> is valid, \c \<F00\> isn't.
|
|
||||||
|
|
||||||
Property lists may contain C-style or BCPL-style comments.
|
|
||||||
*/
|
*/
|
||||||
typedef enum {QFDictionary, QFArray, QFBinary, QFString} pltype_t;
|
typedef enum {
|
||||||
|
QFDictionary, ///< The property list item represents a dictionary.
|
||||||
|
QFArray, ///< The property list item represents an array.
|
||||||
|
QFBinary, ///< The property list item represents arbitrary binary
|
||||||
|
///< data.
|
||||||
|
QFString ///< The property list item represents a C string.
|
||||||
|
} pltype_t;
|
||||||
|
|
||||||
/** Generic property list item.
|
/** Generic property list item.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue