htp on-line reference: Metatags


Metatags allow for HTML-like tags to be defined and later inserted anywhere in documents. They are similar to macros, but much more powerful. Unlike macros, which simply expand into text and/or tags, metatags expand intelligently. In essence, htp's functionality can be extended without modifying the program.

Metatags are defined and undefined with the DEF and UNDEF tags. Please read these sections for a more technical explanation of the definition syntax.

As an example, to create a tag to combine the <B> (bold) and <I> (italic) tags:

    <DEF NAME="BOLDITALIC">
    <B><I>
    </DEF>

    <DEF NAME="/BOLDITALIC">
    </I></B>
    </DEF>

    <BOLDITALIC>this text is bold and italic</BOLDITALIC>

This is a simple example. More sophisticated tags accept parameters. The OPTION parameter lets multiple metatag parameters be named and expanded inside the DEF block:

    <DEF NAME="SHAREDIMG" OPTION="NAME ALT">
    <IMG SRC="/home/sharedimages/${NAME}" ALT="${ALT}">;
    </DEF>

    <SHAREDIMG NAME="bubble.gif" ALT="Bubble image">

The SHAREDIMG tag is now shorthand for the HTML IMG tag, except that it will prepend a specific subdirectory to the pathname. Note that ALT text is also passed in.

The options are expanded inline as if they were SET macros. The '$' and brackets around the name indicate it is a macro and not normal text.

Passing block macros rather than set macros requires some extra work. The following demonstrates how to pass in a block macro into a metatag:

    <DEF NAME="DROPTEXT" OPTION="TEXT">
    <HR>
    <H2 ALIGN=CENTER>
    <USE ${TEXT}>
    </H2>
    <HR>
    </DEF>

    <BLOCK bigText>
    This text is larger, centered, and surrounded by separators.
    </BLOCK>

    <DROPTEXT TEXT=bigText>

The key is the "<USE ${TEXT}>" line. Rather than simply reference the macro name normally (as USE would normally require), it is treated as a macro name in of itself. In essence, the parameter is a pointer to a pointer, and must be dereferenced twice.

However, this means that the DROPTEXT parameter must always be a block macro, or at least a SET macro defined prior to invoking the metatag. A simple way around this problem is to have two different options, one for set macros and the other for block:

    <DEF NAME="DROPTEXT" OPTION="TEXT BLOCK">
    <HR>
    <H2 ALIGN=CENTER>
    <IF TEXT>
        <USE TEXT>
    <ELSE>
        <USE ${BLOCK}>
    </H2>
    <HR>
    </DEF>

    <DROPTEXT TEXT="Drop text">

    <BLOCK bigText>
    This text is larger, centered, and surrounded by separators.
    </BLOCK>

    <DROPTEXT BLOCK=bigText>

To make defined metatags available to all htp documents, place them in a common include file, or more convieniently, in the htp default file.


Table of Contents

htp on-line reference / http://maths.newcastle.edu.au/~rking/htp/ref/
Author: Jim Nelson / No email available
Maintainer: Robert King / robert.king@newcastle.edu.au

Copyright © 1995-96 Jim Nelson.
Permission to reproduce and distribute this hypertext document granted according to terms described in the Introduction

Last updated Mon Sep 23, 1996