# Page Layout

The section describes the layout of the pages created by MHonArc. Each page's layout is controled by resources. Layout resources can be changed as you see fit to achieve the appearance you desire.

- Notation
- Main Index Page
  - Main index page resource layout
- Thread Index Page
  - Thread index page resource layout
- Message Page
  - Message page resource layout
  - Converted message header
  - Converted message body
  - Thread slices

## Notation

To simplify the description of the various pages created by MHonArc, the following notation is used:

( )
  Parentheses denote a group of resources.
|
  The vertical bar is use within a group to denote a boolean OR. For example, "`(X | Y | Z)`" states that either X, Y, or Z may apply.
?
  Denotes that preceding resource, or group, is optional.
*
  Denotes that preceding resource, or group, can occur zero or more times.
+
  Denotes that preceding resource, or group, can occur one or more times.

## Main Index Page

The main index is normally the default index of an archive. The main index list messages by date, subject, author, or message number. Since date listing is the default, the main index is commonly referred to as the date index.

### Main index page resource layout

    IDXPGSSMARKUP
    IDXPGBEGIN
        LISTBEGIN
    	(AUTHORBEGIN |
    	 DAYBEGIN |
    	 SUBJECTBEGIN)?
    	LITEMPLATE+
    	(AUTHOREND |
    	 DAYEND |
    	 SUBJECTEND)?
         LISTEND
        DOC?
    IDXPGEND

## Thread Index Page

The thread index list messages by thread. Threads are based upon `In-Reply-To` and `References` fields of messages and by same `Subject`s.

The layout of a thread index page is more complicated than the main index layout since threading is more complex. Also, MHonArc tries to provide the greatest flexibility for customizing thread listing layout.

### Thread index page resource layout

    TIDXPGSSMARKUP
    TIDXPGBEGIN
        THEAD
    	((TTOPBEGIN
    	    TSUBLISTBEG
    		((TLITXT
    		    [possible subthread listing]
    		  TLIEND)|
    		(TLINONE
    		    [possible subthread listing]
    		 TLINONEEND))+
    	    (TSUBJECTBEG
    		((TLITXT
    		    [possible subthread listing]
    		  TLIEND)|
    		(TLINONE
    		    [possible subthread listing]
    		 TLINONEEND))+
    	     TSUBJECTEND)?
    	    TSUBLISTEND
    	  TTOPEND)
    	 |
    	 TSINGLETXT)* [message w/o references or follow-ups]
        TFOOT
        DOC?
    TIDXPGEND

If the previous is not confusing enough, there are four other resources for controlling the thread index page layout: TCONTBEGIN, TCONTEND, TINDENTBEGIN, TINDENTEND. If the multiple page resource is set, it is possible that a thread can span more than one page. These resources are used to restart a thread that has been clipped due to a page boundary.

## Message Page

The message page contains a single message converted to HTML and archive navigational links.

### Message page resource layout

    MSGPGSSMARKUP
    MSGPGBEGIN
        MSGHEAD
        TOPLINKS
        SUBJECTHEADER
        Converted message header
        HEADBODYSEP
        Converted message body
        MSGBODYEND
        (FOLUPBEGIN
    	FOLUPLITXT+
         FOLUPEND)?
        (REFSBEGIN
    	REFSLITXT+
         REFSEND)?
        BOTLINKS
        MSGFOOT
    MSGPGEND

NOTE: | If the SINGLE resource is set, TOPLINKS and BOTLINKS are are not applicable. If the FOLREFS is off, FOLUPBEGIN, FOLUPLITXT, FOLUPEND, REFSBEGIN, REFSLITXT, and REFSEND resources are not applicable.

Message pages also contain comment declarations. Some of the comment declarations are vital markers to allow MHonArc to properly edit the message during updates.

### Converted message header

The format of converted message headers is determined by the following resource layout:

    FIELDSBEG
        (LABELBEG
         label text
         LABELEND
         FLDBEG
         field text
         FLDEND)*
    FIELDSEND

NOTE: | The line breaks above are used to show the sequence order of the resources and do not indicate any actual line breaks in the final markup generated.

NOTE: | After a message is initially converted, the message header data is static. Changes to resources that affect message header layout will only affect new messages and not existing archived messages.

### Converted message body

The formatting of message body data is controled by filter routines. See the MIMEFILTERS resource page for more information.

NOTE: | After a message is initially converted, the message body data is static. Changes to resources that affect message body appearance will only affect news messages and not existing archived messages.

### Thread slices

MHonArc supports the ability to include thread listings on messages pages via the `$TSLICE$` resource variable. The formatting of the `$TSLICE$` resource variable is controled by the following resources: TSLICEBEG, TSLICECONTBEG, TSLICECONTEND, TSLICEEND, TSLICEINDENTBEG, TSLICEINDENTEND, TSLICELIEND, TSLICELIENDCUR, TSLICELINONE, TSLICELINONEEND, TSLICELITXT, TSLICELITXTCUR, TSLICESINGLETXT, TSLICESINGLETXTCUR, TSLICESUBJECTBEG, TSLICESUBJECTEND, TSLICESUBLISTBEG, TSLICESUBLISTEND, TSLICETOPBEG, TSLICETOPBEGCUR, TSLICETOPEND, and TSLICETOPENDCUR

The structure of the resources parallels the thread resource layout structure described for the thread index page, and the above thread slice resources will default to the corresponding non-tslice resources, allowing you to provide a consistent look to all thread listings without having to define two sets of resources.

One key difference to the `TSLICE`* resources is the ability to customize the look for current message item in the the slice listing. I.e. You can actually highlight, grey-out, etc, the current message to give the reader a visual cue of where they are in the thread. See TSLICETOPBEGCUR for an example.