SGML: Announce: HyTime Package for ADEPT*Editor - Hy-Lib.cmd 1.0

Announce: HyTime Package for ADEPT*Editor - Hy-Lib.cmd 1.0

From owner-adepters@arbortext.com Mon Apr 28 15:57:06 1997
Date: Mon, 28 Apr 1997 13:28:53 -0900
To: adepters@arbortext.com
From: "W. Eliot Kimber" <eliot@isogen.com>
Subject: Announce: HyTime Package for ADEPT*Editor - Hy-Lib.cmd 1.0

 ---------------------------------------------------------------------

I have hacked together the beginnings of an ADEPT Command Language
package for ADEPT*Editor 5.4.1/W or 6.0+ that provides robust and
generalized support for the HyTime standard (ISO/IEC 10744:1992) as
corrected by Technical Corrigendum 1.  The package is available from the
ISOGEN Web site at http://www.isogen.com/demos/hy-libcmd.html
[Version 1.10,  updated 21 May 97 or later].

This version of the Hy-Lib package provides the following functions:

- Support for nameloc/nmlist and name-space loc (new with TC) ID-based
  indirection within a single document (I haven't gotten to cross-document
  addressing yet).  Supports multiple locations and any number of
  "location steps".
- Support for the hyperlinking forms clink, ilink, hylink, and agglink.
  Varlink I'll get to when I have a chance.

It uses the "I have all the documents available" model of HyTime
processing, meaning that it resolves all hyperlinks when it starts up so
that it knows about all the anchor objects in all documents open under
ADEPT at any one time.  This approach makes sense for most typical use
scenarios of ADEPT (i.e., not too many documents in the hyperdocument and
not too much total data).  ADEPT is pretty fast and manages multiple
documents, even pretty big ones, pretty well.  However, the code as
provided can be easily modified to delay resolution of hyperlink anchors
until requested.  It could also be integrated with a data repository like
Astoria or HyMinder/MarkMinder to provide more persistence and off-load
object addressing from ADEPT.

This package may be used for any purpose, personal or commercial, as long
the source of derivation is clearly indicated.  I've tried to implement it
so that it can be quickly and easily integrated with existing packages or
just used by itself.  I've tried to comment the code as clearly and
completely as I had time for so that the code serves as an demonstration of
data structures and algorithms one can use to implement HyTime in other
tools.  I also tried to demonstrate how to report HyTime errors (and how to
report application warnings).  My intent is for the package to be a
conforming HyTime application and I claim that it is one.

The user interface for link traversal provided by the package is similar to
HyBrowse's: select any member of any hyperlink anchor and you can go to any
other member of any of the links that object is a member of.  I report the
link types and anchor roles, as well as the element type of the member
objects (I didn't put a lot of time into the interface--it could definitely
be improved).  Out of the box I provide both "double-click and link" and
menu items on the editor context menu for doing traversal.  I also provide
a "back" function.  I don't provide any direct visual queues of anchorness,
although you could with some clever FOSI work.  The context menu will
indicate whether or not something is a link anchor by activitating the
"traverse hyperlink" menu item when the cursor is within the context of a
member of an anchor.

Some of the things I plan to add over time are:

- Support for cross-document addressing as soon as I can (probably
  after SGML Europe)
- More location address forms
- Varlink
- Facilities for debugging location paths and ladders.
- HyTime BOS management facilities (the tree of entities in the
  hyperdocument)
- Support for HyTime link and list traversal rules
- Support for the creation and modification of links and locations
  (right now hy-lib is essentially read-only).
- Support for some query notations, such as URLs and TEI locators,
  for use in query location addresses (queryloc).

Please report any bugs or requests for enhancement to me.  This is a
spare-time project, but it's something I need for my own work, so it has a
pretty high priority as spare time projects go. 

Cheers,

Eliot