Mention in README.md the need for the iftex package and how to get it.
[ibg.git] / appendices / f.rst
index e1fd4b0e5edf89cbfe9bf3a49ba7e90ab203143e..c33083e7baeb81fe791ee8d7d7ba5132efaf0ba4 100644 (file)
@@ -2,7 +2,7 @@
  Appendix F -- Inform library
 ==============================
 
  Appendix F -- Inform library
 ==============================
 
-.. |ADD| replace:: **+**
+.. |ADD| replace:: **(+)**
 
 .. The ⊕ symbol doesn't work in LaTeX.
 
 
 .. The ⊕ symbol doesn't work in LaTeX.
 
    .. image:: /images/picL.png
       :align: left
 
    .. image:: /images/picL.png
       :align: left
 
-.. raw:: latex
-
-   \dropcap{l}
-
-ibrary files define Inform's model world, turning a conventional
+|L|\ibrary files define Inform's model world, turning a conventional
 programming language into a text adventure development system.  Here are
 the library constants, variables and routines, the standard object
 properties and attributes, the verb grammars and actions.
 programming language into a text adventure development system.  Here are
 the library constants, variables and routines, the standard object
 properties and attributes, the verb grammars and actions.
@@ -25,48 +21,55 @@ properties and attributes, the verb grammars and actions.
 Library objects
 ===============
 
 Library objects
 ===============
 
-`compass`
-  A `container` object holding the twelve direction objects `d_obj e_obj
-  in_obj n_obj ne_obj nw_obj out_obj s_obj se_obj sw_obj u_obj w_obj`.
-
-`LibraryMessages`
-  If defined (between Includes of `Parser` and `VerbLib`), changes standard
-  library messages:
-
-  .. only:: html
-
-    | `Object LibraryMessages`
-    |   `with before [;`
-    |        `{action}: "{string}";`
-    |        `{action}: "{string}";`
-    |        `{action}: switch (lm_n) {`
-    |                `{value}: "{string}";`
-    |                `{value}: "{string}",`
-    |                    `(a) lm_o,".";`
-    |                `...`
-    |                `}`
-    |            `...`
-    |        `];`
+.. index::
+   pair: compass; library object
 
 
-  .. todo::
+:obj:`compass`
+  A :attr:`container` object holding the twelve direction objects
+  :obj:`d_obj`, :obj:`e_obj`, :obj:`in_obj`, :obj:`n_obj`, :obj:`ne_obj`,
+  :obj:`nw_obj`, :obj:`out_obj`, :obj:`s_obj`, :obj:`se_obj`,
+  :obj:`sw_obj`, :obj:`u_obj`, :obj:`w_obj`.
 
 
-     Get this to work properly in LaTeX.  Currently get a 'too deeply
-     nested' error.
+.. index::
+   pair: LibraryMessages; library object
 
 
-`selfobj`
-  The default player object.  Avoid: use instead the `player` variable,
-  which usually refers to `selfobj`.
+:obj:`LibraryMessages`
+  If defined (between Includes of `Parser` and `VerbLib`), changes standard
+  library messages:
 
 
-`thedark`
-  A pseudo-room which becomes the `location` when there is no light
+  | `Object LibraryMessages`
+  |   `with before [;`
+  |        `{action}: "{string}";`
+  |        `{action}: "{string}";`
+  |        `{action}: switch (lm_n) {`
+  |                `{value}: "{string}";`
+  |                `{value}: "{string}",`
+  |                    `(a) lm_o,".";`
+  |                `...`
+  |                `}`
+  |            `...`
+  |        `];`
+
+.. index::
+   pair: selfobj; library object
+
+:obj:`selfobj`
+  The default player object.  Avoid: use instead the :var:`player`
+  variable, which usually refers to :obj:`selfobj`.
+
+.. index::
+   pair: thedark; library object
+
+:obj:`thedark`
+  A pseudo-room which becomes the :var:`location` when there is no light
   (although the player object is not moved there).
 
 Library constants
 =================
 
   (although the player object is not moved there).
 
 Library constants
 =================
 
-In addition to the standard constants `true` (1), `false` (0) and `nothing`
-(0), the Library defines `NULL` (-1) for an `{action}`, `{property}` or
-`{pronoun}` whose current value is undefined.
+In addition to the standard constants :const:`true` (1), :const:`false` (0)
+and :const:`nothing` (0), the Library defines :const:`NULL` (-1) for an
+`{action}`, `{property}` or `{pronoun}` whose current value is undefined.
 
 `LIBRARY_PARSER`, `LIBRARY_ENGLISH`, `LIBRARY_VERBLIB` and
 `LIBRARY_GRAMMAR` are defined to mark the end of inclusion of `Parser.h`,
 
 `LIBRARY_PARSER`, `LIBRARY_ENGLISH`, `LIBRARY_VERBLIB` and
 `LIBRARY_GRAMMAR` are defined to mark the end of inclusion of `Parser.h`,
@@ -136,176 +139,320 @@ Some constants control features rather than represent values.
 
 `WITHOUT_DIRECTIONS`
   De-activates standard compass directions (bar "`IN`" and "`OUT`").  Place
 
 `WITHOUT_DIRECTIONS`
   De-activates standard compass directions (bar "`IN`" and "`OUT`").  Place
-  alternative directions in the `compass`.
+  alternative directions in the :obj:`compass`.
 
 Library variables
 =================
 
 
 Library variables
 =================
 
-`action`
+.. index::
+   pair: action; library variable
+
+:var:`action`
   The current `{action}`.
 
   The current `{action}`.
 
-`actor`
+.. index::
+   pair: actor; library variable
+
+:var:`actor`
   The target of an instruction: the player, or an NPC.
 
   The target of an instruction: the player, or an NPC.
 
-`deadflag`
+.. index::
+   pair: deadflag; library variable
+
+:var:`deadflag`
   Normally 0: 1 indicates a regular death, 2 indicates that the player has
   won, 3 or more denotes a user-defined end.
 
   Normally 0: 1 indicates a regular death, 2 indicates that the player has
   won, 3 or more denotes a user-defined end.
 
-`inventory_stage`
-  Used by `invent` and `list_together` properties.
+.. index::
+   pair: inventory_stage; library variable
+
+:var:`inventory_stage`
+  Used by :prop:`invent` and :prop:`list_together` properties.
+
+.. index::
+   pair: keep_silent; library variable
+
+:var:`keep_silent`
+  Normally :const:`false`; :const:`true` makes most :ref:`group 2 actions
+  <group-2-actions>` silent.
 
 
-`keep_silent`
-  Normally `false`; `true` makes most group 2 actions silent.
+.. index::
+   pair: location; library variable
 
 
-`location`
+:var:`location`
   The player's current room; unless that's dark, when it contains
   The player's current room; unless that's dark, when it contains
-  `thedark`, `real_location` contains the room.
+  :obj:`thedark`, :var:`real_location` contains the room.
 
 
-`notify_mode`
-  Normally `true`: `false` remains silent when score changes.
+.. index::
+   pair: notify_mode; library variable
 
 
-`noun`
+:var:`notify_mode`
+  Normally :const:`true`: :const:`false` remains silent when score changes.
+
+.. index::
+   pair: noun; library variable
+
+:var:`noun`
   The primary focus object for the current action.
 
   The primary focus object for the current action.
 
-`player`
+.. index::
+   pair: player; library variable
+
+:var:`player`
   The object acting on behalf of the human player.
 
   The object acting on behalf of the human player.
 
-`real_location`
+.. index::
+   pair: real_location; library variable
+
+:var:`real_location`
   The player's current room when in the dark.
 
   The player's current room when in the dark.
 
-`score`
+.. index::
+   pair: score; library variable
+
+:var:`score`
   The current score.
 
   The current score.
 
-`second`
+.. index::
+   pair: second; library variable
+
+:var:`second`
   The secondary focus object for the current action.
 
   The secondary focus object for the current action.
 
-`self`
+.. index::
+   pair: self; library variable
+
+:var:`self`
   The object which received a message.  (Note: a run-time variable, not a
   compile-time constant.)
 
   The object which received a message.  (Note: a run-time variable, not a
   compile-time constant.)
 
-`sender`
+.. index::
+   pair: sender; library variable
+
+:var:`sender`
   The object which sent a message (or `nothing`).
 
   The object which sent a message (or `nothing`).
 
-`task_scores`
+.. index::
+   pair: task_scores; library variable
+
+:var:`task_scores`
   A byte array holding scores for the task scoring system.
 
   A byte array holding scores for the task scoring system.
 
-`the_time`
+.. index::
+   pair: the_time; library variable
+
+:var:`the_time`
   The game's clock, in minutes 0..1439 since midnight.
 
   The game's clock, in minutes 0..1439 since midnight.
 
-`turns`
+.. index::
+   pair: turns; library variable
+
+:var:`turns`
   The game's turn counter.
 
   The game's turn counter.
 
-`wn`
+.. index::
+   pair: wn; library variable
+
+:var:`wn`
   The input stream word number, counting from 1.
 
   The input stream word number, counting from 1.
 
+.. _library-routines:
+
 Library routines
 ================
 
 Library routines
 ================
 
+.. index::
+   pair: Achieved; library routine
+
 `Achieved({expr})`
   A scored task has been achieved.
 
 `Achieved({expr})`
   A scored task has been achieved.
 
+.. index::
+   pair: AfterRoutines; library routine
+
 `AfterRoutines()`
 `AfterRoutines()`
-  In a group 2 action, controls output of "after" messages.
+  In a :ref:`group 2 action <group-2-actions>`, controls output of "after"
+  messages.
+
+.. index::
+   pair: AllowPushDir; library routine
 
 `AllowPushDir()`
   An object can be pushed from one location to another.
 
 
 `AllowPushDir()`
   An object can be pushed from one location to another.
 
+.. index::
+   pair: Banner; library routine
+
 `Banner()`
   Prints the game banner.
 
 `Banner()`
   Prints the game banner.
 
+.. index::
+   pair: ChangePlayer; library routine
+
 `ChangePlayer({obj_id,flag})`
   Player assumes the persona of the `{obj_id}`.  If the optional `{flag}`
 `ChangePlayer({obj_id,flag})`
   Player assumes the persona of the `{obj_id}`.  If the optional `{flag}`
-  is `true`, room descriptions include "(as `{object}`)".
+  is :const:`true`, room descriptions include "(as `{object}`)".
+
+.. index::
+   pair: CommonAncestor; library routine
 
 `CommonAncestor({obj_id1,obj_id2})`
   Returns the nearest object which has a parental relationship to both
   `{obj_ids}`, or `nothing`.
 
 
 `CommonAncestor({obj_id1,obj_id2})`
   Returns the nearest object which has a parental relationship to both
   `{obj_ids}`, or `nothing`.
 
+.. index::
+   pair: DictionaryLookup; library routine
+
 `DictionaryLookup({byte_array,length})`
   Returns address of word in dictionary, or 0 if not found.
 
 `DictionaryLookup({byte_array,length})`
   Returns address of word in dictionary, or 0 if not found.
 
+.. index::
+   pair: DrawStatusLine; library routine
+
 `DrawStatusLine()`
   Refreshes the status line; happens anyway at end of each turn.
 
 `DrawStatusLine()`
   Refreshes the status line; happens anyway at end of each turn.
 
-`GetGNAOfObject(obj_id)`
+.. index::
+   pair: GetGNAOfObject; library routine
+
+`GetGNAOfObject({obj_id})`
   Returns gender-number-animation 0..11 of the `{obj_id}`.
 
   Returns gender-number-animation 0..11 of the `{obj_id}`.
 
-`HasLightSource(obj_id)`
-  Returns `true` if the `{obj_id}` has light.
+.. index::
+   pair: HasLightSource; library routine
+
+`HasLightSource({obj_id})`
+  Returns :const:`true` if the `{obj_id}` has light.
+
+.. index::
+   pair: IndirectlyContains; library routine
 
 `IndirectlyContains({parnt_obj_id,obj_id})`
 
 `IndirectlyContains({parnt_obj_id,obj_id})`
-  Returns `true` if `{obj_id}` is currently a child or grand-child or
-  great-grand-child... of the `{parent_object}`.
+  Returns :const:`true` if `{obj_id}` is currently a child or grand-child
+  or great-grand-child... of the `{parent_object}`.
 
 
-`IsSeeThrough(obj_id)`
-  Returns `true` if light can pass through the `{obj_id}`.
+.. index::
+   pair: IsSeeThrough; library routine
+
+`IsSeeThrough({obj_id})`
+  Returns :const:`true` if light can pass through the `{obj_id}`.
+
+.. index::
+   pair: Locale; library routine
 
 `Locale({obj_id,"string1","string2"})`
   Describes the contents of `{obj_id}`, and returns their number.  After
   objects with own paragraphs, the rest are listed preceded by `{string1}`
   or `{string2}`.
 
 
 `Locale({obj_id,"string1","string2"})`
   Describes the contents of `{obj_id}`, and returns their number.  After
   objects with own paragraphs, the rest are listed preceded by `{string1}`
   or `{string2}`.
 
+.. index::
+   pair: LoopOverScope; library routine
+
 `LoopOverScope({routine_id,actor})`
   Calls `{routine_id}({obj_id})` for each `{obj_id}` in scope.  If the
   optional `{actor}` is supplied, that defines the scope.
 
 `LoopOverScope({routine_id,actor})`
   Calls `{routine_id}({obj_id})` for each `{obj_id}` in scope.  If the
   optional `{actor}` is supplied, that defines the scope.
 
+.. index::
+   pair: MoveFloatingObjects; library routine
+
 `MoveFloatingObjects()`
 `MoveFloatingObjects()`
-  Adjusts positions of game's `found_in` objects.
+  Adjusts positions of game's :prop:`found_in` objects.
+
+.. index::
+   pair: NextWord; library routine
 
 `NextWord()`
 
 `NextWord()`
-  Returns the next dictionary word in the input stream, incrementing `wn`
-  by one.  Returns `false` if the word is not in the dictionary, or if the
-  input stream is exhausted.
+  Returns the next dictionary word in the input stream, incrementing
+  :var:`wn` by one.  Returns :const:`false` if the word is not in the
+  dictionary, or if the input stream is exhausted.
+
+.. index::
+   pair: NextWordStopped; library routine
 
 `NextWordStopped()`
 
 `NextWordStopped()`
-  Returns the next dictionary word in the input stream, incrementing `wn`
-  by one.  Returns `false` if the word is not in the dictionary, -1 if the
-  input stream is exhausted.
+  Returns the next dictionary word in the input stream, incrementing
+  :var:`wn` by one.  Returns :const:`false` if the word is not in the
+  dictionary, -1 if the input stream is exhausted.
+
+.. index::
+   pair: NounDomain; library routine
 
 `NounDomain({obj_id1,obj_id2,type})`
   Performs object parsing; see also `ParseToken()`.
 
 
 `NounDomain({obj_id1,obj_id2,type})`
   Performs object parsing; see also `ParseToken()`.
 
+.. index::
+   pair: ObjectIsUntouchable; library routine
+
 `ObjectIsUntouchable({obj_id,flag})`
   Tests whether there is a barrier - a container object which is not open -
 `ObjectIsUntouchable({obj_id,flag})`
   Tests whether there is a barrier - a container object which is not open -
-  between player and `{obj_id}`.  Unless the optional `{flag}` is `true`,
-  outputs "You can't because ... is in the way".  Returns `true` is a
-  barrier is found, otherwise `false`.
+  between player and `{obj_id}`.  Unless the optional `{flag}` is
+  :const:`true`, outputs "You can't because ... is in the way".  Returns
+  :const:`true` is a barrier is found, otherwise :const:`false`.
+
+.. index::
+   pair: OffersLight; library routine
 
 `OffersLight({obj_id})`
 
 `OffersLight({obj_id})`
-  Returns `true` if the `{obj_id}` offers light.
+  Returns :const:`true` if the `{obj_id}` offers light.
+
+.. index::
+   pair: ParseToken; library routine
 
 `ParseToken({type,value})`
   Performs general parsing; see also `NounDomain()`.
 
 
 `ParseToken({type,value})`
   Performs general parsing; see also `NounDomain()`.
 
+.. index::
+   pair: PlaceInScope; library routine
+
 `PlaceInScope({obj_id})`
 `PlaceInScope({obj_id})`
-  Used in an `add_to_scope` property or `scope=` token to put the
+  Used in an :prop:`add_to_scope` property or `scope=` token to put the
   `{obj_id}` into scope for the parser.
 
   `{obj_id}` into scope for the parser.
 
+.. index::
+   pair: PlayerTo; library routine
+
 `PlayerTo({obj_id,flag})`
   Moves the player to `{obj_id}`.  Prints its description unless optional
   `{flag}` is 1 (no description) or 2 (as if walked in).
 
 `PlayerTo({obj_id,flag})`
   Moves the player to `{obj_id}`.  Prints its description unless optional
   `{flag}` is 1 (no description) or 2 (as if walked in).
 
+.. index::
+   pair: PrintOrRun; library routine
+
 `PrintOrRun({obj_id,property,flag})`
   If `{obj_id.property}` is a string, output it (followed by a newline
 `PrintOrRun({obj_id,property,flag})`
   If `{obj_id.property}` is a string, output it (followed by a newline
-  unless optional `{flag}` is `true`), and return `true`.  If it's a
-  routine, run it and return what the routine returns.
+  unless optional `{flag}` is :const:`true`), and return :const:`true`.  If
+  it's a routine, run it and return what the routine returns.
+
+.. index::
+   pair: PronounNotice; library routine
 
 `PronounNotice({obj_id})`
   Associates an appropriate pronoun with the `{obj_id}`.
 
 
 `PronounNotice({obj_id})`
   Associates an appropriate pronoun with the `{obj_id}`.
 
+.. index::
+   pair: PronounValue; library routine
+
 `PronounValue('{pronoun}')`
   Returns the object to which '`it`' (or '`him`', '`her`', '`them`')
 `PronounValue('{pronoun}')`
   Returns the object to which '`it`' (or '`him`', '`her`', '`them`')
-  currently refers, or `nothing`.
+  currently refers, or :const:`nothing`.
+
+.. index::
+   pair: ScopeWithin; library routine
 
 `ScopeWithin({obj_id})`
 
 `ScopeWithin({obj_id})`
-  Used in an `add_to_scope` property or `scope=` token to put the contents
-  of the `{obj_id}` in scope for the parser.
+  Used in an :prop:`add_to_scope` property or `scope=` token to put the
+  contents of the `{obj_id}` in scope for the parser.
+
+.. index::
+   pair: SetPronoun; library routine
 
 `SetPronoun('{pronoun}',{obj_id})`
   Defines the `{obj_id}` to which a given pronoun refers.
 
 
 `SetPronoun('{pronoun}',{obj_id})`
   Defines the `{obj_id}` to which a given pronoun refers.
 
-`SetTime({expr1,expr2})`
+.. index::
+   pair: SetTime; library routine
 
 
+`SetTime({expr1,expr2})`
   Sets `the_time` to `{expr1}` (in mins 0..1439 since midnight), running at
   `{expr2}` -
 
   Sets `the_time` to `{expr1}` (in mins 0..1439 since midnight), running at
   `{expr2}` -
 
@@ -313,64 +460,107 @@ Library routines
   | -ve: `{-expr2}` turns take one minute;
   | zero: time stands still.
 
   | -ve: `{-expr2}` turns take one minute;
   | zero: time stands still.
 
+.. index::
+   pair: StartDaemon; library routine
+
 `StartDaemon({obj_id})`
   Starts the `{obj_id}`\'s daemon.
 
 `StartDaemon({obj_id})`
   Starts the `{obj_id}`\'s daemon.
 
+.. index::
+   pair: StartTimer; library routine
+
 `StartTimer({obj_id,expr})`
 `StartTimer({obj_id,expr})`
-  Starts the `{obj_id}`\'s timer, initialising its `time_left` to `{expr}`.
-  The object's `time_out` property will be called after that number of
-  turns have elapsed.
+  Starts the `{obj_id}`\'s timer, initialising its :prop:`time_left` to
+  `{expr}`.  The object's :prop:`time_out` property will be called after
+  that number of turns have elapsed.
+
+.. index::
+   pair: StopDaemon; library routine
 
 `StopDaemon({obj_id})`
   Stops the `{obj_id}`\'s daemon.
 
 
 `StopDaemon({obj_id})`
   Stops the `{obj_id}`\'s daemon.
 
+.. index::
+   pair: StopTimer; library routine
+
 `StopTimer({obj_id})`
   Stops the `{obj_id}`\'s timer.
 
 `StopTimer({obj_id})`
   Stops the `{obj_id}`\'s timer.
 
+.. index::
+   pair: TestScope; library routine
+
 `TestScope({obj_id,actor})`
 `TestScope({obj_id,actor})`
-  Returns `true` if the `{obj_id}` is in scope, otherwise `false`.  If the
-  optional `{actor}` is supplied, that defines the scope.
+  Returns :const:`true` if the `{obj_id}` is in scope, otherwise
+  :const:`false`.  If the optional `{actor}` is supplied, that defines the
+  scope.
+
+.. index::
+   pair: TryNumber; library routine
 
 `TryNumber({expr})`
   Parses word `{expr}` in the input stream as a number, recognising
   decimals, also English words one..twenty.  Returns the number 1..10000,
   or -1000 if the parse fails.
 
 
 `TryNumber({expr})`
   Parses word `{expr}` in the input stream as a number, recognising
   decimals, also English words one..twenty.  Returns the number 1..10000,
   or -1000 if the parse fails.
 
+.. index::
+   pair: UnsignedCompare; library routine
+
 `UnsignedCompare({expr1,expr2})`
   Returns -1 if `{expr1}` is less than `{expr2}`, 0 if `{expr1}` equals
   `{expr2}`, and 1 if `{expr1}` is greater than `{expr2}`.  Both
   expressions are unsigned, in the range 0..65535.
 
 `UnsignedCompare({expr1,expr2})`
   Returns -1 if `{expr1}` is less than `{expr2}`, 0 if `{expr1}` equals
   `{expr2}`, and 1 if `{expr1}` is greater than `{expr2}`.  Both
   expressions are unsigned, in the range 0..65535.
 
+.. index::
+   pair: WordAddress; library routine
+
 `WordAddress({expr})`
   Returns a byte array containing the raw text of word `{expr}` in the
   input stream.
 
 `WordAddress({expr})`
   Returns a byte array containing the raw text of word `{expr}` in the
   input stream.
 
+.. index::
+   pair: WordInProperty; library routine
+
 `WordInProperty({word,obj_id,property})`
 `WordInProperty({word,obj_id,property})`
-  Returns `true` if the dictionary `{word}` is listed in the `{property}`
-  values for the `{obj_id}`.
+  Returns :const:`true` if the dictionary `{word}` is listed in the
+  `{property}` values for the `{obj_id}`.
+
+.. index::
+   pair: WordLength; library routine
 
 `WordLength({expr})`
   Returns the length of word `{expr}` in the input stream.
 
 
 `WordLength({expr})`
   Returns the length of word `{expr}` in the input stream.
 
+.. index::
+   pair: WriteListFrom; library routine
+
 `WriteListFrom({obj_id,expr})`
   Outputs a list of `{obj_id}` and its siblings, in the given style, an
   `{expr}` formed by adding any of: `ALWAYS_BIT`, `CONCEAL_BIT`,
   `DEFART_BIT`, `ENGLISH_BIT`, `FULLINV_BIT`, `INDENT_BIT`, `ISARE_BIT`,
   `NEWLINE_BIT`, `PARTINV_BIT`, `RECURSE_BIT`, `TERSE_BIT`, `WORKFLAG_BIT`.
 
 `WriteListFrom({obj_id,expr})`
   Outputs a list of `{obj_id}` and its siblings, in the given style, an
   `{expr}` formed by adding any of: `ALWAYS_BIT`, `CONCEAL_BIT`,
   `DEFART_BIT`, `ENGLISH_BIT`, `FULLINV_BIT`, `INDENT_BIT`, `ISARE_BIT`,
   `NEWLINE_BIT`, `PARTINV_BIT`, `RECURSE_BIT`, `TERSE_BIT`, `WORKFLAG_BIT`.
 
+.. index::
+   pair: YesOrNo; library routine
+
 `YesOrNo()`
 `YesOrNo()`
-  Returns `true` if the player types "`YES`", `false` for "`NO`".
+  Returns :const:`true` if the player types "`YES`", :const:`false` for
+  "`NO`".
+
+.. index::
+   pair: ZRegion; library routine
 
 `ZRegion({arg})`
   Returns the type of its `{arg}` : 3 for a string address, 2 for a routine
   address, 1 for an object number, or 0 otherwise.
 
 
 `ZRegion({arg})`
   Returns the type of its `{arg}` : 3 for a string address, 2 for a routine
   address, 1 for an object number, or 0 otherwise.
 
+.. _object-props:
+
 Object properties
 =================
 
 Where the `value` of a property can be a routine, several formats are
 Object properties
 =================
 
 Where the `value` of a property can be a routine, several formats are
-possible (but remember: embedded "`]`" returns `false`, standalone "`]`"
-returns `true`):
+possible (but remember: embedded "`]`" returns :const:`false`, standalone
+"`]`" returns :const:`true`):
 
   | `{property} [; {stmt}; {stmt}; ... ]`
   | `{property} [; return {routine_id}(); ]`
 
   | `{property} [; {stmt}; {stmt}; ... ]`
   | `{property} [; return {routine_id}(); ]`
@@ -383,12 +573,18 @@ for the `Object` normally overrides the value inherited from the `Class`.
 However, if the property is additive then both values apply, with the
 Object's value being considered first.
 
 However, if the property is additive then both values apply, with the
 Object's value being considered first.
 
-`add_to_scope`
+.. index::
+   pair: add_to_scope; library property
+
+:prop:`add_to_scope`
   For an object: additional objects which follow it in and out of scope.
   The `{value}` can be a space-separated list of `{obj_ids}`, or a routine
   which invokes `PlaceInScope()` or `ScopeWithin()` to specify objects.
 
   For an object: additional objects which follow it in and out of scope.
   The `{value}` can be a space-separated list of `{obj_ids}`, or a routine
   which invokes `PlaceInScope()` or `ScopeWithin()` to specify objects.
 
-`after` |ADD|
+.. index::
+   pair: after; library property
+
+:prop:`after` |ADD|
   For an object: receives every `{action}` and `{fake_action}` for which
   this is the `{noun}`.  For a room: receives every `{action}` which occurs
   here.
   For an object: receives every `{action}` and `{fake_action}` for which
   this is the `{noun}`.  For a room: receives every `{action}` which occurs
   here.
@@ -396,150 +592,216 @@ Object's value being considered first.
   The `{value}` is a routine of structure similar to a `switch` statement,
   having cases for the appropriate `{actions}` (and an optional `default`
   as well); it is invoked after the action has happened, but before the
   The `{value}` is a routine of structure similar to a `switch` statement,
   having cases for the appropriate `{actions}` (and an optional `default`
   as well); it is invoked after the action has happened, but before the
-  player has been informed.  The routine should return `false` to continue,
-  telling the player what has happened, or `true` to stop processing the
-  action and produce no further output.
+  player has been informed.  The routine should return :const:`false` to
+  continue, telling the player what has happened, or :const:`true` to stop
+  processing the action and produce no further output.
 
 
-`article`
+.. index::
+   pair: article; library property
+
+:prop:`article`
   For an object: the object's indefinite article - the default is
   automatically "a", "an" or "some".  The `{value}` can be a string, or a
   routine which outputs a string.
 
   For an object: the object's indefinite article - the default is
   automatically "a", "an" or "some".  The `{value}` can be a string, or a
   routine which outputs a string.
 
-`articles`
+.. index::
+   pair: articles; library property
+
+:prop:`articles`
   For a non-English object: its definite and indefinite articles.  The
   `{value}` is an array of strings.
 
   For a non-English object: its definite and indefinite articles.  The
   `{value}` is an array of strings.
 
-`before` |ADD|
+.. index::
+   pair: before; library property
+
+:prop:`before` |ADD|
   For an object: receives every `{action}` and `{fake_action}` for which
   this is the `{noun}`.  For a room: receives every action which occurs
   here.
 
   The `{value}` is a routine invoked before the action has happened.  See
   For an object: receives every `{action}` and `{fake_action}` for which
   this is the `{noun}`.  For a room: receives every action which occurs
   here.
 
   The `{value}` is a routine invoked before the action has happened.  See
-  `after`.
+  :prop:`after`.
+
+.. index::
+   pair: cant_go; library property
 
 
-`cant_go`
+:prop:`cant_go`
   For a room: the message when the player attempts an impossible exit.  The
   `{value}` can be a string, or a routine which outputs a string.
 
   For a room: the message when the player attempts an impossible exit.  The
   `{value}` can be a string, or a routine which outputs a string.
 
-`capacity`
-  For a `container` or `supporter` object: the number of objects which can
-  be placed in or on it - the default is 100.
+.. index::
+   pair: capacity; library property
+
+:prop:`capacity`
+  For a :attr:`container` or :attr:`supporter` object: the number of
+  objects which can be placed in or on it - the default is 100.
 
 
-  For the player: the number which can be carried - `selfobj` has an
+  For the player: the number which can be carried - :obj:`selfobj` has an
   initial capacity of `MAX_CARRIED`.
 
   The `{value}` can be a number, or a routine which returns a number.
 
   initial capacity of `MAX_CARRIED`.
 
   The `{value}` can be a number, or a routine which returns a number.
 
-`d_to`
+.. index::
+   pair: d_to; library property
+
+:prop:`d_to`
   For a room: a possible exit.  The `{value}` can be
 
   For a room: a possible exit.  The `{value}` can be
 
-  * `false` (the default): not an exit;
+  * :const:`false` (the default): not an exit;
   * a string: output to explain why this is not an exit;
   * a `{room}`: the exit leads to this room;
   * a string: output to explain why this is not an exit;
   * a `{room}`: the exit leads to this room;
-  * a `door` object: the exit leads through this door;
-  * a routine which should return `false`, a string, a `{room}`, a `door`
-    object, or `true` to signify "not an exit" and produce no further
-    output.
+  * a :obj:`door` object: the exit leads through this door;
+  * a routine which should return :const:`false`, a string, a `{room}`, a
+    :obj:`door` object, or :const:`true` to signify "not an exit" and
+    produce no further output.
+
+.. index::
+   pair: daemon; library property
 
 
-`daemon`
+:prop:`daemon`
   The `{value}` is a routine which can be activated by
   `StartDaemon({obj_id})` and which then runs once each turn until
   deactivated by `StopDaemon({obj_id})`.
 
   The `{value}` is a routine which can be activated by
   `StartDaemon({obj_id})` and which then runs once each turn until
   deactivated by `StopDaemon({obj_id})`.
 
-`describe` |ADD|
+.. index::
+   pair: describe; library property
+
+:prop:`describe` |ADD|
   For an object: called before the object's description is output.  For a
   room: called before the room's (long) description is output.
 
   For an object: called before the object's description is output.  For a
   room: called before the room's (long) description is output.
 
-  The `{value}` is a routine which should return `false` to continue,
-  outputting the usual description, or `true` to stop processing and
+  The `{value}` is a routine which should return :const:`false` to continue,
+  outputting the usual description, or :const:`true` to stop processing and
   produce no further output.
 
   produce no further output.
 
-`description`
-  For an object: its description (output by `Examine`).
+.. index::
+   pair: description; library property
+
+:prop:`description`
+  For an object: its description (output by :act:`Examine`).
 
 
-  For a room: its long description (output by `Look`).
+  For a room: its long description (output by :act:`Look`).
 
   The `{value}` can be a string, or a routine which outputs a string.
 
 
   The `{value}` can be a string, or a routine which outputs a string.
 
-`door_dir`
-  For a `compass` object (`d_obj`, `e_obj`, ...): the direction in which an
-  attempt to move to this object actually leads.
+.. index::
+   pair: door_dir; library property
+
+:prop:`door_dir`
+  For a :obj:`compass` object (:obj:`d_obj`, :obj:`e_obj`, ...): the
+  direction in which an attempt to move to this object actually leads.
 
 
-  For a `door` object: the direction in which this door leads.
+  For a :obj:`door` object: the direction in which this door leads.
 
 
-  The `{value}` can be a directional property (`d_to`, `e_to`, ...), or a
-  routine which returns such a property.
+  The `{value}` can be a directional property (:prop:`d_to`, :prop:`e_to`,
+  \...), or a routine which returns such a property.
 
 
-`door_to`
+.. index::
+   pair: door_to; library property
+
+:prop:`door_to`
   For a `door` object: where it leads.  The value can be
 
   For a `door` object: where it leads.  The value can be
 
-  * `false` (the default): leads nowhere;
+  * :const:`false` (the default): leads nowhere;
   * a string: output to explain why door leads nowhere;
   * a `{room}`: the door leads to this room;
   * a string: output to explain why door leads nowhere;
   * a `{room}`: the door leads to this room;
-  * a routine which should return `false`, a string, a `{room}`, or `true`
-    to signify "leads nowhere" without producing any output.
+  * a routine which should return :const:`false`, a string, a `{room}`, or
+    :const:`true` to signify "leads nowhere" without producing any output.
+
+.. index::
+   pair: e_to; library property
 
 
-`e_to`
-  See `d_to`.
+:prop:`e_to`
+  See :prop:`d_to`.
 
 
-`each_turn` |ADD|
+.. index::
+   pair: each_turn; library property
+
+:prop:`each_turn` |ADD|
   Invoked at the end of each turn (after all appropriate daemons and
   timers) whenever the object is in scope.  The `{value}` can be a string,
   or a routine.
 
   Invoked at the end of each turn (after all appropriate daemons and
   timers) whenever the object is in scope.  The `{value}` can be a string,
   or a routine.
 
-`found_in`
+.. index::
+   pair: found_in; library property
+
+:prop:`found_in`
   For an object: the rooms where this object can be found, unless it has
   For an object: the rooms where this object can be found, unless it has
-  the `absent` attribute.  The `{value}` can be
+  the :attr:`absent` attribute.  The `{value}` can be
 
   * a space-separated list of `{rooms}` (where this object can be found) or
 
   * a space-separated list of `{rooms}` (where this object can be found) or
-     `{obj_ids}` (whose locations are tracked by this object);
-  * a routine which should return `true` if this object can be found in the
-     current location, otherwise `false`.
+    `{obj_ids}` (whose locations are tracked by this object);
+  * a routine which should return :const:`true` if this object can be found
+    in the current location, otherwise :const:`false`.
+
+.. index::
+   pair: grammar; library property
+
+:prop:`grammar`
+  For an :attr:`animate` or :attr:`talkable` object: the `{value}` is a
+  routine called when the parser knows that this object is being addressed,
+  but has yet to test the grammar.  The routine should return
+  :const:`false` to continue, :const::const:`true` to indicate that the
+  routine has parsed the entire command, or a dictionary word ('`word`' or
+  -'`word`').
+
+.. index::
+   pair: in_to; library property
 
 
-`grammar`
-  For an `animate` or `talkable` object: the `{value}` is a routine called
-  when the parser knows that this object is being addressed, but has yet to
-  test the grammar.  The routine should return `false` to continue, `true`
-  to indicate that the routine has parsed the entire command, or a
-  dictionary word ('`word`' or -'`word`').
+:prop:`in_to`
+  See :prop:`d_to`.
 
 
-`in_to`
-  See `d_to`.
+.. index::
+   pair: initial; library property
 
 
-`initial`
+:prop:`initial`
   For an object: its description before being picked up.
 
   For a room: its description when the player enters the room.
 
   The `{value}` can be a string, or a routine which outputs a string.
 
   For an object: its description before being picked up.
 
   For a room: its description when the player enters the room.
 
   The `{value}` can be a string, or a routine which outputs a string.
 
-`inside_description`
-  For an `enterable` object: its description, output as part of the room
-  description when the player is inside the object.
+.. index::
+   pair: inside_description; library property
+
+:prop:`inside_description`
+  For an :prop:`enterable` object: its description, output as part of the
+  room description when the player is inside the object.
 
   The `{value}` can be a string, or a routine which outputs a string.
 
 
   The `{value}` can be a string, or a routine which outputs a string.
 
-`invent`
+.. index::
+   pair: invent; library property
+
+:prop:`invent`
   For an object: the `{value}` is a routine for outputting the object's
   inventory listing, which is called twice.  On the first call nothing has
   For an object: the `{value}` is a routine for outputting the object's
   inventory listing, which is called twice.  On the first call nothing has
-  been output; `inventory_stage` has the value 1, and the routine should
-  return `false` to continue, or `true` to stop processing and produce no
-  further output.  On the second call the object's indefinite article and
-  short name have been output, but not any subsidiary information;
-  `inventory_stage` has the value 2, and the routine should return `false`
-  to continue, or `true` to stop processing and produce no further output.
-
-`life` |ADD|
-  For an `animate` object: receives person-to-person actions (`Answer`,
-  `Ask`, `Attack`, `Give`, `Kiss`, `Order`, `Show`, `Tell`, `ThrowAt` and
-  `WakeOther`) for which this is the `{noun}`.  The `{value}` is a routine
-  of structure similar to a `switch` statement, having cases for the
-  appropriate `{actions}` (and an optional default as well).  The routine
-  should return `false` to continue, telling the player what has happened,
-  or `true` to stop processing the action and produce no further output.
-
-`list_together`
-
+  been output; :var:`inventory_stage` has the value 1, and the routine
+  should return :const:`false` to continue, or :const:`true` to stop
+  processing and produce no further output.  On the second call the
+  object's indefinite article and short name have been output, but not any
+  subsidiary information; :var:`inventory_stage` has the value 2, and the
+  routine should return :const:`false` to continue, or :const:`true` to
+  stop processing and produce no further output.
+
+.. index::
+   pair: life; library property
+
+:prop:`life` |ADD|
+  For an :prop:`animate` object: receives person-to-person actions
+  (:act:`Answer`, :act:`Ask`, :act:`Attack`, :act:`Give`, :act:`Kiss`,
+  :act:`Order`, :act:`Show`, :act:`Tell`, :act:`ThrowAt` and
+  :act:`WakeOther`) for which this is the `{noun}`.  The `{value}` is a
+  routine of structure similar to a `switch` statement, having cases for
+  the appropriate `{actions}` (and an optional default as well).  The
+  routine should return :const:`false` to continue, telling the player what
+  has happened, or :const:`true` to stop processing the action and produce
+  no further output.
+
+.. index::
+   pair: list_together; library property
+
+:prop:`list_together`
   For an object: groups related objects when outputting an inventory or
   room contents list.  The `{value}` can be
 
   For an object: groups related objects when outputting an inventory or
   room contents list.  The `{value}` can be
 
@@ -547,16 +809,22 @@ Object's value being considered first.
   * a `{string}`: all objects having this value are grouped as a count of
     the string;
   * a routine which is called twice.  On the first call nothing has been
   * a `{string}`: all objects having this value are grouped as a count of
     the string;
   * a routine which is called twice.  On the first call nothing has been
-    output; `inventory_stage` has the value 1, and the routine should
-    return `false` to continue, or `true` to stop processing and produce no
-    further output.  On the second call the list has been output;
-    `inventory_stage` has the value 2, and there is no test on the return
-    value.
+    output; :var:`inventory_stage` has the value 1, and the routine should
+    return :const:`false` to continue, or :const:`true` to stop processing
+    and produce no further output.  On the second call the list has been
+    output; :var:`inventory_stage` has the value 2, and there is no test on
+    the return value.
+
+.. index::
+   pair: n_to; library property
+
+:prop:`n_to`
+  See :prop:`d_to`.
 
 
-`n_to`
-  See `d_to`.
+.. index::
+   pair: name; library property
 
 
-`name` |ADD|
+:prop:`name` |ADD|
   Defines a space-separated list of words which are added to the Inform
   dictionary.  Each word can be supplied in apostrophes '...'  or quotes
   "..."; in all other cases only words in apostrophes update the
   Defines a space-separated list of words which are added to the Inform
   dictionary.  Each word can be supplied in apostrophes '...'  or quotes
   "..."; in all other cases only words in apostrophes update the
@@ -566,199 +834,362 @@ Object's value being considered first.
 
   For a room: outputs "does not need to be referred to".
 
 
   For a room: outputs "does not need to be referred to".
 
-`ne_to`
-  See `d_to`.
+.. index::
+   pair: ne_to; library property
 
 
-`number`
+:prop:`ne_to`
+  See :prop:`d_to`.
+
+.. index::
+   pair: number; library property
+
+:prop:`number`
   For an object or room: the `{value}` is a general-purpose variable freely
   For an object or room: the `{value}` is a general-purpose variable freely
-  available for use by the program.  A `player` object must provide (but
-  not use) this variable.
+  available for use by the program.  A :var:`player` object must provide
+  (but not use) this variable.
+
+.. index::
+   pair: nw_to; library property
+
+:prop:`nw_to`
+  See :prop:`d_to`.
+
+.. index::
+   pair: orders; library property
 
 
-`nw_to`
-  See `d_to`.
+:prop:`orders` |ADD|
+  For an :attr:`animate` or :attr:`talkable` object: the `{value}` is a
+  routine called to carry out the player's orders.  The routine should
+  return :const:`false` to continue, or :const:`true` to stop processing
+  the action and produce no further output.
+
+.. index::
+   pair: out_to; library property
 
 
-`orders` |ADD|
-  For an `animate` or `talkable` object: the `{value}` is a routine called
-  to carry out the player's orders.  The routine should return `false` to
-  continue, or `true` to stop processing the action and produce no further
-  output.
+:prop:`out_to`
+  See :prop:`d_to`.
 
 
-`out_to`
-  See `d_to`.
+.. index::
+   pair: parse_name; library property
 
 
-`parse_name`
+:prop:`parse_name`
   For an object: the `{value}` is a routine called to parse an object's
   name.  The routine should return zero if the text makes no sense, -1 to
   cause the parser to resume, or the positive number of words matched.
 
   For an object: the `{value}` is a routine called to parse an object's
   name.  The routine should return zero if the text makes no sense, -1 to
   cause the parser to resume, or the positive number of words matched.
 
-`plural`
+.. index::
+   pair: plural; library property
+
+:prop:`plural`
   For an object: its plural form, when in the presence of others like it.
   The `{value}` can be a string, or a routine which outputs a string.
 
   For an object: its plural form, when in the presence of others like it.
   The `{value}` can be a string, or a routine which outputs a string.
 
-`react_after`
+.. index::
+   pair: react_after; library property
+
+:prop:`react_after`
   For an object: detects nearby actions - those which take place when this
   object is in scope.  The `{value}` is a routine invoked after the action
   For an object: detects nearby actions - those which take place when this
   object is in scope.  The `{value}` is a routine invoked after the action
-  has happened, but before the player has been informed.  See `after`.
+  has happened, but before the player has been informed.  See :prop:`after`.
+
+.. index::
+   pair: react_before; library property
 
 
-`react_before`
+:prop:`react_before`
   For an object: detects nearby actions - those which take place when this
   object is in scope.  The `{value}` is a routine invoked before the action
   For an object: detects nearby actions - those which take place when this
   object is in scope.  The `{value}` is a routine invoked before the action
-  has happened.  See `after`.
+  has happened.  See :prop:`after`.
 
 
-`s_to`
+.. index::
+   pair: s_to; library property
 
 
-`se_to`
-  See `d_to`.
+:prop:`s_to`
+  See :prop:`d_to`.
 
 
-`short_name`
+.. index::
+   pair: se_to; library property
+
+:prop:`se_to`
+  See :prop:`d_to`.
+
+.. index::
+   pair: short_name; library property
+
+:prop:`short_name`
   For an object: an alternative or extended short name.  The `{value}` can
   be a string, or a routine which outputs a string.  The routine should
   For an object: an alternative or extended short name.  The `{value}` can
   be a string, or a routine which outputs a string.  The routine should
-  return `false` to continue by outputting the object's *actual* short name
-  (from the head of the object definition), or `true` to stop processing
-  the action and produce no further output.
+  return :const:`false` to continue by outputting the object's *actual*
+  short name (from the head of the object definition), or :const:`true` to
+  stop processing the action and produce no further output.
+
+.. index::
+   pair: short_name_indef; library property
 
 
-`short_name_indef`
+:prop:`short_name_indef`
   For a non-English object: the short name when preceded by an indefinite
   object.  The `{value}` can be a string, or a routine which outputs a
   string.
 
   For a non-English object: the short name when preceded by an indefinite
   object.  The `{value}` can be a string, or a routine which outputs a
   string.
 
-`sw_to`
-  See `d_to`.
+.. index::
+   pair: sw_to; library property
 
 
-`time_left`
+:prop:`sw_to`
+  See :prop:`d_to`.
+
+.. index::
+   pair: time_left; library property
+
+:prop:`time_left`
   For a timer object: the `{value}` is a variable to hold the number of
   turns left until this object's timer - activated and initialised by
   `StartTimer({obj_id})` - counts down to zero and invokes the object's
   `time_out` property.
 
   For a timer object: the `{value}` is a variable to hold the number of
   turns left until this object's timer - activated and initialised by
   `StartTimer({obj_id})` - counts down to zero and invokes the object's
   `time_out` property.
 
-`time_out`
+.. index::
+   pair: time_out; library property
+
+:prop:`time_out`
   For a timer object: the `{value}` is a routine which is run when the
   For a timer object: the `{value}` is a routine which is run when the
-  object's `time_left` value - initialised by `StartTimer({obj_id})`, and
-  not in the meantime cancelled by `StopTimer({obj_id})` - counts down to
-  zero.
+  object's :prop:`time_left` value - initialised by `StartTimer({obj_id})`,
+  and not in the meantime cancelled by `StopTimer({obj_id})` - counts down
+  to zero.
+
+.. index::
+   pair: u_to; library property
+   pair: w_to; library property
 
 
-`u_to`
+:prop:`u_to`
+  See :prop:`d_to`.
 
 
-`w_to`
-  See `d_to`.
+:prop:`w_to`
+  See :prop:`d_to`.
 
 
-`when_closed`
+.. index::
+   pair: when_closed; library property
+   pair: when_open; library property
 
 
-`when_open`
-  For a `container` or `door` object: used when including this object in a
+:prop:`when_closed`
+
+:prop:`when_open`
+  For a :attr:`container` or :attr:`door` object: used when including this
+  object in a room's long description.  The `{value}` can be a string, or a
+  routine which outputs a string.
+
+.. index::
+   pair: when_off; library property
+   pair: when_on; library property
+
+:prop:`when_off`
+
+:prop:`when_on`
+  For a :attr:`switchable` object: used when including this object in a
   room's long description.  The `{value}` can be a string, or a routine
   which outputs a string.
 
   room's long description.  The `{value}` can be a string, or a routine
   which outputs a string.
 
-`when_off`
+.. index::
+   pair: with_key; library property
 
 
-`when_on`
-  For a `switchable` object: used when including this object in a room's
-  long description.  The `{value}` can be a string, or a routine which
-  outputs a string.
+:prop:`with_key`
+  For a :attr:`lockable` object: the `{obj_id}` (generally some kind of
+  key) needed to lock and unlock the object, or :const:`nothing` if no key
+  fits.
 
 
-`with_key`
-  For a `lockable` object: the `{obj_id}` (generally some kind of key)
-  needed to lock and unlock the object, or `nothing` if no key fits.
+.. _object-attrs:
 
 Object attributes
 =================
 
 
 Object attributes
 =================
 
-`absent`
-     For a floating object (one with a `found_in` property, which can
-     appear in many rooms): is no longer there.
+.. index::
+   pair: absent; library attribute
+
+:attr:`absent`
+   For a floating object (one with a :prop:`found_in` property, which can
+   appear in many rooms): is no longer there.
+
+.. index::
+   pair: animate; library attribute
+
+:attr:`animate`
+   For an object: is a living creature.
+
+.. index::
+   pair: clothing; library attribute
+
+:attr:`clothing`
+   For an object: can be worn.
+
+.. index::
+   pair: concealed; library attribute
+
+:attr:`concealed`
+   For an object: is present but hidden from view.
+
+.. index::
+   pair: container; library attribute
+
+:attr:`container`
+   For an object: other objects can be put in (but not on) it.
+
+.. index::
+   pair: door; library attribute
+
+:attr:`door`
+   For an object: is a door or bridge between rooms.
+
+.. index::
+   pair: edible; library attribute
+
+:attr:`edible`
+   For an object: can be eaten.
+
+.. index::
+   pair: enterable; library attribute
 
 
-`animate`
-     For an object: is a living creature.
+:attr:`enterable`
+   For an object: can be entered.
 
 
-`clothing`
-     For an object: can be worn.
+.. index::
+   pair: female; library attribute
 
 
-`concealed`
-     For an object: is present but hidden from view.
+:attr:`female`
+   For an :attr:`animate` object: is female.
 
 
-`container`
-     For an object: other objects can be put in (but not on) it.
+.. index::
+   pair: general; library attribute
 
 
-`door`
-     For an object: is a door or bridge between rooms.
+:attr:`general`
+   For an object or room: a general-purpose flag.
 
 
-`edible`
-     For an object: can be eaten.
+.. index::
+   pair: light; library attribute
 
 
-`enterable`
-     For an object: can be entered.
+:attr:`light`
+   For an object or room: is giving off light.
 
 
-`female`
-     For an `animate` object: is female.
+.. index::
+   pair: lockable; library attribute
 
 
-`general`
-     For an object or room: a general-purpose flag.
+:attr:`lockable`
+   For an object: can be locked; see the :prop:`with_key` property.
 
 
-`light`
-     For an object or room: is giving off light.
+.. index::
+   pair: locked; library attribute
 
 
-`lockable`
-     For an object: can be locked; see the `with_key` property.
+:attr:`locked`
+   For an object: can't be opened.
 
 
-`locked`
-     For an object: can't be opened.
+.. index::
+   pair: male; library attribute
 
 
-`male`
-     For an `animate` object: is male.
+:attr:`male`
+   For an :attr:`animate` object: is male.
 
 
-`moved`
-     For an object: is being, or has been, taken by the player.
+.. index::
+   pair: moved; library attribute
 
 
-`neuter`
-     For an `animate` object: is neither male nor female.
+:attr:`moved`
+   For an object: is being, or has been, taken by the player.
 
 
-`on`
-     For a `switchable` object: is switched on.
+.. index::
+   pair: neuter; library attribute
 
 
-`open`
-     For a `container` or door object: is open.
+:attr:`neuter`
+   For an :attr:`animate` object: is neither male nor female.
 
 
-`openable`
-     For a `container` or `door` object: can be opened.
+.. index::
+   pair: on; library attribute
 
 
-`pluralname`
-     For an object: is plural.
+:attr:`on`
+   For a :attr:`switchable` object: is switched on.
 
 
-`proper`
-     For an object: the short name is a proper noun, therefore not to be
-     preceded by "The" or "the".
+.. index::
+   pair: open; library attribute
 
 
-`scenery`
-     For an object: can't be taken; is not listed in a room description.
+:attr:`open`
+   For a :attr:`container` or door object: is open.
 
 
-`scored`
-     For an object: awards `OBJECT_SCORE` points when taken for the first
-     time.  For a room: awards `ROOM_SCORE` points when visited for the
-     first time.
+.. index::
+   pair: openable; library attribute
 
 
-`static`
-     For an object: can't be taken.
+:attr:`openable`
+   For a :attr:`container` or :attr:`door` object: can be opened.
 
 
-`supporter`
-     For an object: other objects can be put on (but not in) it.
+.. index::
+   pair: pluralname; library attribute
 
 
-`switchable`
-     For an object: can be switched off or on.
+:attr:`pluralname`
+   For an object: is plural.
 
 
-`talkable`
-     For an object: can be addressed in "object, do this" style.
+.. index::
+   pair: proper; library attribute
 
 
-`transparent`
-     For a `container` object: objects inside it are visible.
+:attr:`proper`
+   For an object: the short name is a proper noun, therefore not to be
+   preceded by "The" or "the".
 
 
-`visited`
-     For a room: is being, or has been, visited by the player.
+.. index::
+   pair: scenery; library attribute
 
 
-`workflag`
-     Temporary internal flag, also available to the program.
+:attr:`scenery`
+   For an object: can't be taken; is not listed in a room description.
 
 
-`worn`
-     For a `clothing` object: is being worn.
+.. index::
+   pair: scored; library attribute
+
+:attr:`scored`
+   For an object: awards `OBJECT_SCORE` points when taken for the first
+   time.  For a room: awards `ROOM_SCORE` points when visited for the
+   first time.
+
+.. index::
+   pair: static; library attribute
+
+:attr:`static`
+   For an object: can't be taken.
+
+.. index::
+   pair: supporter; library attribute
+
+:attr:`supporter`
+   For an object: other objects can be put on (but not in) it.
+
+.. index::
+   pair: switchable; library attribute
+
+:attr:`switchable`
+   For an object: can be switched off or on.
+
+.. index::
+   pair: talkable; library attribute
+
+:attr:`talkable`
+   For an object: can be addressed in "object, do this" style.
+
+.. index::
+   pair: transparent; library attribute
+
+:attr:`transparent`
+   For a :attr:`container` object: objects inside it are visible.
+
+.. index::
+   pair: visited; library attribute
+
+:attr:`visited`
+   For a room: is being, or has been, visited by the player.
+
+.. index::
+   pair: workflag; library attribute
+
+:attr:`workflag`
+   Temporary internal flag, also available to the program.
+
+.. index::
+   pair: worn; library attribute
+
+:attr:`worn`
+   For a :attr:`clothing` object: is being worn.
+
+.. _entry-points:
 
 Optional entry points
 =====================
 
 Optional entry points
 =====================
@@ -776,7 +1207,7 @@ These routines, if you supply them, are called when shown.
 
 `BeforeParsing()`
   The parser has input some text, set up the buffer and parse tables, and
 
 `BeforeParsing()`
   The parser has input some text, set up the buffer and parse tables, and
-  initialised `wn` to 1.
+  initialised :var:`wn` to 1.
 
 `ChooseObjects({object,flag})`
   Parser has found "`ALL`" or an ambiguous noun phrase and decided that
 
 `ChooseObjects({object,flag})`
   Parser has found "`ALL`" or an ambiguous noun phrase and decided that
@@ -789,7 +1220,7 @@ These routines, if you supply them, are called when shown.
   The player has gone from one dark room to another.
 
 `DeathMessage()`
   The player has gone from one dark room to another.
 
 `DeathMessage()`
-  The player has died; `deadflag` is 3 or more.
+  The player has died; :var:`deadflag` is 3 or more.
 
 `GamePostRoutine()`
   Called after all actions.
 
 `GamePostRoutine()`
   Called after all actions.
@@ -805,7 +1236,7 @@ These routines, if you supply them, are called when shown.
   Called during parsing.
 
 `LookRoutine()`
   Called during parsing.
 
 `LookRoutine()`
-  Called at the end of every `Look` description.
+  Called at the end of every :act:`Look` description.
 
 `NewRoom()`
   Called when room changes, before description is output.
 
 `NewRoom()`
   Called when room changes, before description is output.
@@ -834,122 +1265,129 @@ These routines, if you supply them, are called when shown.
 `UnknownVerb()`
   Called when an unusual verb is encountered.
 
 `UnknownVerb()`
   Called when an unusual verb is encountered.
 
+.. _group-1-actions:
+
 Group 1 actions
 ===============
 
 Group 1 actions support the 'meta' verbs.  These are the standard actions
 and their triggering verbs.
 
 Group 1 actions
 ===============
 
 Group 1 actions support the 'meta' verbs.  These are the standard actions
 and their triggering verbs.
 
-==============  =====================================================
-`CommandsOff`   "`RECORDING OFF`"
-`CommandsOn`    "`RECORDING [ON]`"
-`CommandsRead`  "`REPLAY`"
-`FullScore`     "`FULLSCORE`", "`FULL [SCORE]`"
-`LMode1`        "`BRIEF`", "`NORMAL`"
-`LMode2`        "`LONG`", "`VERBOSE`"
-`LMode3`        "`SHORT`", "`SUPERBRIEF`"
-`NotifyOff`     "`NOTIFY OFF`"
-`NotifyOn`      "`NOTIFY [ON]`"
-`Objects`       "`OBJECTS`"
-`Places`        "`PLACES`"
-`Pronouns`      "`[PRO]NOUNS`"
-`Quit`          "`DIE`", "`Q[UIT]`"
-`Restart`       "`RESTART`"
-`Restore`       "`RESTORE`"
-`Save`          "`CLOSE`"
-`Score`         "`SCORE`"
-`ScriptOff`     "`[TRAN]SCRIPT OFF`", "`NOSCRIPT`", "`UNSCRIPT`"
-`ScriptOn`      "`[TRAN]SCRIPT [ON]`"
-`Verify`        "`VERIFY`"
-`Version`       "`VERSION`"
-==============  =====================================================
+===================    ==================================================
+:act:`CommandsOff`     "`RECORDING OFF`"
+:act:`CommandsOn`      "`RECORDING [ON]`"
+:act:`CommandsRead`    "`REPLAY`"
+:act:`FullScore`       "`FULLSCORE`", "`FULL [SCORE]`"
+:act:`LMode1`          "`BRIEF`", "`NORMAL`"
+:act:`LMode2`          "`LONG`", "`VERBOSE`"
+:act:`LMode3`          "`SHORT`", "`SUPERBRIEF`"
+:act:`NotifyOff`       "`NOTIFY OFF`"
+:act:`NotifyOn`        "`NOTIFY [ON]`"
+:act:`Objects`         "`OBJECTS`"
+:act:`Places`          "`PLACES`"
+:act:`Pronouns`        "`[PRO]NOUNS`"
+:act:`Quit`            "`DIE`", "`Q[UIT]`"
+:act:`Restart`         "`RESTART`"
+:act:`Restore`         "`RESTORE`"
+:act:`Save`            "`CLOSE`"
+:act:`Score`           "`SCORE`"
+:act:`ScriptOff`       "`[TRAN]SCRIPT OFF`", "`NOSCRIPT`", "`UNSCRIPT`"
+:act:`ScriptOn`        "`[TRAN]SCRIPT [ON]`"
+:act:`Verify`          "`VERIFY`"
+:act:`Version`         "`VERSION`"
+===================    ==================================================
 
 and the debug tools.
 
 
 and the debug tools.
 
-===============   ===================================================
-`ActionsOff`      "`ACTIONS OFF`"
-`ActionsOn`       "`ACTIONS [ON]`"
-`ChangesOff`      "`CHANGES OFF`"
-`ChangesOn`       "`CHANGES [ON]`"
-`Gonear`          "`GONEAR`"
-`Goto`            "`GOTO`"
-`Predictable`     "`RANDOM`"
-`RoutinesOff`     "`MESSAGES OFF`", "`ROUTINES OFF`"
-`RoutinesOn`      "`MESSAGES [ON]`", "`ROUTINES [ON]`"
-`Scope`           "`SCOPE`"
-`Showobj`         "`SHOWOBJ`"
-`Showverb`        "`SHOWVERB`"
-`TimersOff`       "`DAEMONS OFF`", "`TIMERS OFF`"
-`TimersOn`        "`DAEMONS [ON]`", "`TIMERS [ON]`"
-`TraceLevel`      "`TRACE number`"
-`TraceOff`        "`TRACE OFF`"
-`TraceOn`         "`TRACE [ON]`"
-`XAbstract`       "`ABSTRACT`"
-`XPurloin`        "`PURLOIN`"
-`XTree`           "`TREE`"
-===============   ===================================================
+==================    ===================================================
+:act:`ActionsOff`     "`ACTIONS OFF`"
+:act:`ActionsOn`      "`ACTIONS [ON]`"
+:act:`ChangesOff`     "`CHANGES OFF`"
+:act:`ChangesOn`      "`CHANGES [ON]`"
+:act:`Gonear`         "`GONEAR`"
+:act:`Goto`           "`GOTO`"
+:act:`Predictable`    "`RANDOM`"
+:act:`RoutinesOff`    "`MESSAGES OFF`", "`ROUTINES OFF`"
+:act:`RoutinesOn`     "`MESSAGES [ON]`", "`ROUTINES [ON]`"
+:act:`Scope`          "`SCOPE`"
+:act:`Showobj`        "`SHOWOBJ`"
+:act:`Showverb`       "`SHOWVERB`"
+:act:`TimersOff`      "`DAEMONS OFF`", "`TIMERS OFF`"
+:act:`TimersOn`       "`DAEMONS [ON]`", "`TIMERS [ON]`"
+:act:`TraceLevel`     "`TRACE number`"
+:act:`TraceOff`       "`TRACE OFF`"
+:act:`TraceOn`        "`TRACE [ON]`"
+:act:`XAbstract`      "`ABSTRACT`"
+:act:`XPurloin`       "`PURLOIN`"
+:act:`XTree`          "`TREE`"
+==================    ===================================================
+
+.. _group-2-actions:
 
 Group 2 actions
 ===============
 
 Group 2 actions usually work, given the right circumstances.
 
 
 Group 2 actions
 ===============
 
 Group 2 actions usually work, given the right circumstances.
 
-=============   =============================================================
-`Close`         "`CLOSE [UP]`", "`COVER [UP]`", "`SHUT [UP]`"
-`Disrobe`       "`DISROBE`", "`DOFF`", "`REMOVE`", "`SHED`", "`TAKE OFF`"
-`Drop`          "`DISCARD`", "`DROP`", "`PUT DOWN`", "`THROW`"
-`Eat`           "`EAT`"
-`Empty`         "`EMPTY [OUT]`"
-`EmptyT`        "`EMPTY IN|INTO|ON|ONTO|TO`"
-`Enter`         "`CROSS`", "`ENTER`", "`GET IN|INTO|ON|ONTO`",
-                "`GO IN|INSIDE|INTO|THROUGH`",
-                "`LEAVE IN|INSIDE|INTO|THROUGH`", "`LIE IN|INSIDE|ON`",
-                "`LIE ON TOP OF`",
-                "`RUN IN|INSIDE|INTO|THROUGH`", "`SIT IN|INSIDE|ON`",
-                "`SIT ON TOP OF`", "`STAND ON`",
-                "`WALK IN|INSIDE|INTO|THROUGH`"
-`Examine`       "`CHECK,`" "`DESCRIBE`", "`EXAMINE`",
-                "`L[OOK] AT`", "`READ`", "`WATCH`", "`X`"
-`Exit`          "`EXIT`", "`GET OFF|OUT|UP`",
-                "`LEAVE`", "`OUT[SIDE]`", "`STAND [UP]`"
-`GetOff`        "`GET OFF`"
-`Give`          "`FEED [TO]`", "`GIVE [TO]`", "`OFFER [TO]`", "`PAY [TO]`"
-`Go`            "`GO`", "`LEAVE`", "`RUN`", "`WALK`"
-`GoIn`          "`CROSS`", "`ENTER`", "`IN[SIDE]`"
-`Insert`        "`DISCARD IN|INTO`",
-                "`DROP DOWN|IN|INTO`",
-                "`INSERT IN|INTO`",
-                "`PUT IN|INSIDE|INTO`",
-                "`THROW DOWN|IN|INTO`"
-`Inv`           "`I[NV]`", "`INVENTORY`", "`TAKE INVENTORY`"
-`InvTall`       "`I[NV] TALL`", "`INVENTORY TALL`"
-`InvWide`       "`I[NV] WIDE`", "`INVENTORY WIDE`"
-`Lock`          "`LOCK WITH`"
-`Look`          "`L[OOK]`"
-`Open`          "`OPEN`", "`UNCOVER`", "`UNDO`", "`UNWRAP`"
-`PutOn`         "`DISCARD ON|ONTO`",
-                "`DROP ON|ONTO`",
-                "`PUT ON|ONTO`",
-                "`THROW ON|ONTO`"
-`Remove`        "`GET FROM`", "`REMOVE FROM`", "`TAKE FROM|OFF`"
-`Search`        "`L[OOK] IN|INSIDE|INTO|THROUGH`", "`SEARCH`"
-`Show`          "`DISPLAY [TO]`", "`PRESENT [TO]`", "`SHOW [TO]`"
-`SwitchOff`     "`CLOSE OFF`", "`SCREW OFF`",
-                "`SWITCH OFF`", "`TURN OFF`",
-                "`TWIST OFF`"
-`SwitchOn`      "`SCREW ON`", "`SWITCH ON`",
-                "`TURN ON`", "`TWIST ON`"
-`Take`          "`CARRY`", "`GET`", "`HOLD`",
-                "`PEEL [OFF]`", "`PICK UP`",
-                "`REMOVE`", "`TAKE`"
-`Transfer`      "`CLEAR TO`", "`MOVE TO`",
-                "`PRESS TO`", "`PUSH TO`",
-                "`SHIFT TO`", "`TRANSFER TO`"
-`Unlock`        "`OPEN WITH`", "`UNDO WITH`",
-                "`UNLOCK WITH`"
-`VagueGo`       "`GO`", "`LEAVE`", "`RUN`", "`WALK`"
-`Wear`          "`DON`", "`PUT ON`", "`WEAR`"
-=============   =============================================================
+.. tabularcolumns:: |l|p{5in}|
+
+================   ===========================================================
+:act:`Close`       "`CLOSE [UP]`", "`COVER [UP]`", "`SHUT [UP]`"
+:act:`Disrobe`     "`DISROBE`", "`DOFF`", "`REMOVE`", "`SHED`", "`TAKE OFF`"
+:act:`Drop`        "`DISCARD`", "`DROP`", "`PUT DOWN`", "`THROW`"
+:act:`Eat`         "`EAT`"
+:act:`Empty`       "`EMPTY [OUT]`"
+:act:`EmptyT`      "`EMPTY IN|INTO|ON|ONTO|TO`"
+:act:`Enter`       "`CROSS`", "`ENTER`", "`GET IN|INTO|ON|ONTO`",
+                   "`GO IN|INSIDE|INTO|THROUGH`",
+                   "`LEAVE IN|INSIDE|INTO|THROUGH`", "`LIE IN|INSIDE|ON`",
+                   "`LIE ON TOP OF`",
+                   "`RUN IN|INSIDE|INTO|THROUGH`", "`SIT IN|INSIDE|ON`",
+                   "`SIT ON TOP OF`", "`STAND ON`",
+                   "`WALK IN|INSIDE|INTO|THROUGH`"
+:act:`Examine`     "`CHECK`", "`DESCRIBE`", "`EXAMINE`",
+                   "`L[OOK] AT`", "`READ`", "`WATCH`", "`X`"
+:act:`Exit`        "`EXIT`", "`GET OFF|OUT|UP`",
+                   "`LEAVE`", "`OUT[SIDE]`", "`STAND [UP]`"
+:act:`GetOff`      "`GET OFF`"
+:act:`Give`        "`FEED [TO]`", "`GIVE [TO]`", "`OFFER [TO]`", "`PAY [TO]`"
+:act:`Go`          "`GO`", "`LEAVE`", "`RUN`", "`WALK`"
+:act:`GoIn`        "`CROSS`", "`ENTER`", "`IN[SIDE]`"
+:act:`Insert`      "`DISCARD IN|INTO`",
+                   "`DROP DOWN|IN|INTO`",
+                   "`INSERT IN|INTO`",
+                   "`PUT IN|INSIDE|INTO`",
+                   "`THROW DOWN|IN|INTO`"
+:act:`Inv`         "`I[NV]`", "`INVENTORY`", "`TAKE INVENTORY`"
+:act:`InvTall`     "`I[NV] TALL`", "`INVENTORY TALL`"
+:act:`InvWide`     "`I[NV] WIDE`", "`INVENTORY WIDE`"
+:act:`Lock`        "`LOCK WITH`"
+:act:`Look`        "`L[OOK]`"
+:act:`Open`        "`OPEN`", "`UNCOVER`", "`UNDO`", "`UNWRAP`"
+:act:`PutOn`       "`DISCARD ON|ONTO`",
+                   "`DROP ON|ONTO`",
+                   "`PUT ON|ONTO`",
+                   "`THROW ON|ONTO`"
+:act:`Remove`      "`GET FROM`", "`REMOVE FROM`", "`TAKE FROM|OFF`"
+:act:`Search`      "`L[OOK] IN|INSIDE|INTO|THROUGH`", "`SEARCH`"
+:act:`Show`        "`DISPLAY [TO]`", "`PRESENT [TO]`", "`SHOW [TO]`"
+:act:`SwitchOff`   "`CLOSE OFF`", "`SCREW OFF`", "`SWITCH OFF`",
+                   "`TURN OFF`", "`TWIST OFF`"
+:act:`SwitchOn`    "`SCREW ON`", "`SWITCH ON`",
+                   "`TURN ON`", "`TWIST ON`"
+:act:`Take`        "`CARRY`", "`GET`", "`HOLD`",
+                   "`PEEL [OFF]`", "`PICK UP`",
+                   "`REMOVE`", "`TAKE`"
+:act:`Transfer`    "`CLEAR TO`", "`MOVE TO`",
+                   "`PRESS TO`", "`PUSH TO`",
+                   "`SHIFT TO`", "`TRANSFER TO`"
+:act:`Unlock`      "`OPEN WITH`", "`UNDO WITH`",
+                   "`UNLOCK WITH`"
+:act:`VagueGo`     "`GO`", "`LEAVE`", "`RUN`", "`WALK`"
+:act:`Wear`        "`DON`", "`PUT ON`", "`WEAR`"
+================   ===========================================================
+
+.. _group-3-actions:
 
 Group 3 actions
 ===============
 
 Group 3 actions
 ===============
@@ -957,69 +1395,71 @@ Group 3 actions
 Group 3 actions are by default stubs which output a message and stop at the
 "before" stage (so there is no "after" stage).
 
 Group 3 actions are by default stubs which output a message and stop at the
 "before" stage (so there is no "after" stage).
 
-=============   =============================================================
-`Answer`        "`ANSWER TO`", "`SAY TO`",
-                "`SHOUT TO`", "`SPEAK TO`"
-`Ask`           "`ASK ABOUT`"
-`AskFor`        "`ASK FOR`"
-`Attack`        "`ATTACK`", "`BREAK`", "`CRACK`",
-                "`DESTROY`", "`FIGHT`", "`HIT`",
-                "`KILL`", "`MURDER`", "`PUNCH`",
-                "`SMASH`", "`THUMP`", "`TORTURE`",
-                "`WRECK`"
-`Blow`          "`BLOW`"
-`Burn`          "`BURN [WITH]`", "`LIGHT [WITH]`"
-`Buy`           "`BUY`" "`PURCHASE`"
-`Climb`         "`CLIMB [OVER|UP]`", "`SCALE`"
-`Consult`       "`CONSULT ABOUT|ON`",
-                "`LOOK UP IN`",
-                "`READ ABOUT IN`", "`READ IN`"
-`Cut`           "`CHOP,`" "`CUT`", "`PRUNE`", "`SLICE`"
-`Dig`           "`DIG [WITH]`"
-`Drink`         "`DRINK`", "`SIP`", "`SWALLOW`"
-`Fill`          "`FILL`"
-`Jump`          "`HOP`", "`JUMP`", "`SKIP`"
-`JumpOver`      "`HOP OVER`", "`JUMP OVER`", "`SKIP OVER`"
-`Kiss`          "`EMBRACE`", "`HUG`", "`KISS`"
-`Listen`        "`HEAR`", "`LISTEN [TO]`"
-`LookUnder`     "`LOOK UNDER`"
-`Mild`          Various mild swearwords.
-`No`            "`NO`"
-`Pray`          "`PRAY`"
-`Pull`          "`DRAG`" "`PULL`"
-`Push`          "`CLEAR`", "`MOVE`", "`PRESS`",
-                "`PUSH`", "`SHIFT`"
-`PushDir`       "`CLEAR`", "`MOVE`", "`PRESS`",
-                "`PUSH`", "`SHIFT`"
-`Rub`           "`CLEAN`", "`DUST`", "`POLISH`",
-                "`RUB`", "`SCRUB`", "`SHINE`",
-                "`SWEEP`", "`WIPE`"
-`Set`           "`ADJUST`", "`SET`"
-`SetTo`         "`ADJUST TO`", "`SET TO`"
-`Sing`          "`SING`"
-`Sleep`         "`NAP`", "`SLEEP`"
-`Smell`         "`SMELL`", "`SNIFF`"
-`Sorry`         "`SORRY`"
-`Squeeze`       "`SQUASH`", "`SQUEEZE`"
-`Strong`        Various strong swearwords.
-`Swim`          "`DIVE`", "`SWIM`"
-`Swing`         "`SWING [ON]`"
-`Taste`         "`TASTE`"
-`Tell`          "`TELL ABOUT`"
-`Think`         "`THINK`"
-`ThrowAt`       "`THROW AGAINST|AT|ON|ONTO`"
-`Tie`           "`ATTACH [TO]`", "`FASTEN [TO]`",
-                "`FIX [TO]`", "`TIE [TO]`"
-`Touch`         "`FEEL,`" "`FONDLE`", "`GROPE`", "`TOUCH`"
-`Turn`          "`ROTATE`", "`SCREW`", "`TURN`",
-                "`TWIST`", "`UNSCREW`"
-`Wait`          "`WAIT`" "`Z`"
-`Wake`          "`AWAKE[N]`", "`WAKE [UP]`"
-`WakeOther`     "`AWAKE[N]`", "`WAKE [UP]`"
-`Wave`          "`WAVE`"
-`WaveHands`     "`WAVE`"
-`Yes`           "`Y[ES]`"
-=============   =============================================================
+.. tabularcolumns:: |l|p{5in}|
+
+================   ==========================================================
+:act:`Answer`      "`ANSWER TO`", "`SAY TO`",
+                   "`SHOUT TO`", "`SPEAK TO`"
+:act:`Ask`         "`ASK ABOUT`"
+:act:`AskFor`      "`ASK FOR`"
+:act:`Attack`      "`ATTACK`", "`BREAK`", "`CRACK`",
+                   "`DESTROY`", "`FIGHT`", "`HIT`",
+                   "`KILL`", "`MURDER`", "`PUNCH`",
+                   "`SMASH`", "`THUMP`", "`TORTURE`",
+                   "`WRECK`"
+:act:`Blow`        "`BLOW`"
+:act:`Burn`        "`BURN [WITH]`", "`LIGHT [WITH]`"
+:act:`Buy`         "`BUY`" "`PURCHASE`"
+:act:`Climb`       "`CLIMB [OVER|UP]`", "`SCALE`"
+:act:`Consult`     "`CONSULT ABOUT|ON`",
+                   "`LOOK UP IN`",
+                   "`READ ABOUT IN`", "`READ IN`"
+:act:`Cut`         "`CHOP`", "`CUT`", "`PRUNE`", "`SLICE`"
+:act:`Dig`         "`DIG [WITH]`"
+:act:`Drink`       "`DRINK`", "`SIP`", "`SWALLOW`"
+:act:`Fill`        "`FILL`"
+:act:`Jump`        "`HOP`", "`JUMP`", "`SKIP`"
+:act:`JumpOver`    "`HOP OVER`", "`JUMP OVER`", "`SKIP OVER`"
+:act:`Kiss`        "`EMBRACE`", "`HUG`", "`KISS`"
+:act:`Listen`      "`HEAR`", "`LISTEN [TO]`"
+:act:`LookUnder`   "`LOOK UNDER`"
+:act:`Mild`        Various mild swearwords.
+:act:`No`          "`NO`"
+:act:`Pray`        "`PRAY`"
+:act:`Pull`        "`DRAG`" "`PULL`"
+:act:`Push`        "`CLEAR`", "`MOVE`", "`PRESS`",
+                   "`PUSH`", "`SHIFT`"
+:act:`PushDir`     "`CLEAR`", "`MOVE`", "`PRESS`",
+                   "`PUSH`", "`SHIFT`"
+:act:`Rub`         "`CLEAN`", "`DUST`", "`POLISH`",
+                   "`RUB`", "`SCRUB`", "`SHINE`",
+                   "`SWEEP`", "`WIPE`"
+:act:`Set`         "`ADJUST`", "`SET`"
+:act:`SetTo`       "`ADJUST TO`", "`SET TO`"
+:act:`Sing`        "`SING`"
+:act:`Sleep`       "`NAP`", "`SLEEP`"
+:act:`Smell`       "`SMELL`", "`SNIFF`"
+:act:`Sorry`       "`SORRY`"
+:act:`Squeeze`     "`SQUASH`", "`SQUEEZE`"
+:act:`Strong`      Various strong swearwords.
+:act:`Swim`        "`DIVE`", "`SWIM`"
+:act:`Swing`       "`SWING [ON]`"
+:act:`Taste`       "`TASTE`"
+:act:`Tell`        "`TELL ABOUT`"
+:act:`Think`       "`THINK`"
+:act:`ThrowAt`     "`THROW AGAINST|AT|ON|ONTO`"
+:act:`Tie`         "`ATTACH [TO]`", "`FASTEN [TO]`",
+                   "`FIX [TO]`", "`TIE [TO]`"
+:act:`Touch`       "`FEEL`", "`FONDLE`", "`GROPE`", "`TOUCH`"
+:act:`Turn`        "`ROTATE`", "`SCREW`", "`TURN`",
+                   "`TWIST`", "`UNSCREW`"
+:act:`Wait`        "`WAIT`" "`Z`"
+:act:`Wake`        "`AWAKE[N]`", "`WAKE [UP]`"
+:act:`WakeOther`   "`AWAKE[N]`", "`WAKE [UP]`"
+:act:`Wave`        "`WAVE`"
+:act:`WaveHands`   "`WAVE`"
+:act:`Yes`         "`Y[ES]`"
+================   ==========================================================
 
 Fake actions
 ============
 
 Fake actions
 ============
@@ -1027,17 +1467,20 @@ Fake actions
 Fake actions handle some special cases, or represent "real" actions from
 the viewpoint of the second object.
 
 Fake actions handle some special cases, or represent "real" actions from
 the viewpoint of the second object.
 
-================   ========================================================
-`LetGo`            Generated by `Remove`.
-`ListMiscellany`   Outputs a range of inventory messages.
-`Miscellany`       Outputs a range of utility messages.
-`NotUnderstood`    Generated when parser fails to interpret some `orders`.
-`Order`            Receives things not handled by `orders`.
-`PluralFound`      Tells the parser that `parse_name()` has identified a
-                   plural object.
-`Prompt`           Outputs the prompt, normally ">".
-`Receive`          Generated by `Insert` and `PutOn`.
-`TheSame`          Generated when parser can't distinguish between two
-                  objects.
-`ThrownAt`         Generated by `ThrowAt`.
-================   ========================================================
+.. tabularcolumns:: |l|p{5in}|
+
+=====================  ======================================================
+:act:`LetGo`           Generated by :act:`Remove`.
+:act:`ListMiscellany`  Outputs a range of inventory messages.
+:act:`Miscellany`      Outputs a range of utility messages.
+:act:`NotUnderstood`   Generated when parser fails to interpret some
+                       :prop:`orders`.
+:act:`Order`           Receives things not handled by :prop:`orders`.
+:act:`PluralFound`     Tells the parser that `parse_name()` has identified a
+                       plural object.
+:act:`Prompt`          Outputs the prompt, normally ">".
+:act:`Receive`         Generated by :act:`Insert` and :act:`PutOn`.
+:act:`TheSame`         Generated when parser can't distinguish between two
+                       objects.
+:act:`ThrownAt`        Generated by :act:`ThrowAt`.
+=====================  ======================================================