Basha Systems Document Assembly Blog Ready for Syndication and HotDocs 2006

We have been busy restructuring all our website in the Basha Systems family:, our client new client portal,, our main consulting site, our Fogbugz project tracking site,, our store.  There are two other sites almost ready to go live to support our Nebraska Probate System V and a new system for Building Inspectors. With these items out of the way, I am ready to return to commenting on developments in Document Assembly.  In particular, HotDocs 2006 is about to go into Full Beta. I have gathered posted by chief architect of HotDocs Marshall Morrise to the public HotDocs list.  When the product comes out of beta and is released, come back for a discussion of these innovative new features.

There has been discussion on the HotDocs List of several potential features in the HotDocs 2005 Beta.  I will confine my comments to posts from Marshall Morrise, the chief architect of HotDocs to the HotDocs ListServer.  These posts reveal some major new features under the hood that will catapault HotDocs to the lead as a full fledged document assembly development platform.

February 9, 2006: Feature Set

All new features we have discussed on the list over the past several months (including the one referred to below) are being implemented in HotDocs 2006. The one exception is support for WordPerfect X3, which has been added to HotDocs 2005 SP3 (available soon). The reason we put this into a 2005 version is that WordPerfect X3 is already out and we don’t feel we can expect customers who upgrade to it to wait until HotDocs 2006 comes out in June.

Feb. 9, 2006: Access macros from an non-loaded template

The discussion regarding macros stored in a secondary template had to do with HotDocs 2006. We have implemented the feature we discussed. A new component file property allows you to specify a Word .dot file that contains PLAY macros. The .dot file must be in the same folder as the template that includes the PLAY instruction. Thus, if you distribute a template set where one or more of the templates includes a PLAY instruction, instead of requiring users to copy the PLAY macros into, or putting them in a template that must be copied to the Word Startup folder, you can simply include the .dot with the template set.

January 20, 2006: Pretty Templates

In this example, variable titles have been substituted for variable names and square brackets have been substituted for IF/END IF pairs. Color would be used to identify variables and the brackets for IF instructions (which I can’t show here because the list server just strips color out). Footnotes would be used to show the actual IF logic. Other things would be done as well.

December 13, 2005: Required Fields

Because the HotDocs 2005 Server interface mimics the desktop interface, it does not include asterisks for required fields. Instead, the fact that a required field is not answered is indicated by a red asterisk in the interview outline. That said, requests for the asterisks have been frequent enough that both the desktop and server interfaces for HotDocs 2006 will include a user option to show red asterisks at the left side of prompts for required fields.

November 23, 2005: Update Table of Contents and Indexes in Word

In HotDocs 2006 we’ve added a component file option titled “Update table of contents and index after assembly”. If you turn this on, HotDocs will automatically update the TOC and indexes so you don’t have to PLAY a macro to do it.

November 17, 2005: Inserting an OR in a document based on rules

At the moment, the only way to accomplish what you are asking about is to write some computations that figure out which lines get included in the document. Someone on the list can probably help you out with an approach. For everyone’s information, a feature that will make this very easy (no computations involved) will be included in HotDocs 2006.

November 2, 2005: Master Component File – But Independent Document Interviews

Just so you know, HotDocs 2006 will allow you to specify a different interview component for each template that points to a shared component file. While this doesn’t address all of the issues raised regarding using shared component files, it does address the issue Bart mentions immediately below.

October 19, 2005: Unique Values in a Multiple Choice Variable

I have received a request to produce a function that will filter out unique responses from a repeated multiple choice variable.  To get this list of unique selections across the repeated set of answers, I have to do quite a bit of scripting, including setting a counter, copying over options from the Favorite Desserts variable to a temporary collection variable, using a WHILE to look through the collection variable to make sure I don’t duplicate a choice, etc.

October 6, 2005: Text Manipulation Functions

We have discussed the addition of some built-in text manipulation functions to HotDocs to make it easier to manipulate text answers, particularly multi-line answers. There have been a number of suggestions, including “normalizing” multiline text to make it single-line, stripping off white space, etc.

After reviewing the emails and suggestions offered, we proposed to create the following built-in text manipulation functions:

STRIP(, , , )

text variable = any text variable
characters = characters to be stripped off
frombeginning = TRUE if characters to be stripped from the beginning of the text
fromend = TRUE if characters to be stripped from the end of the text

Characters to be stripped off can include the following “pseudo-codes”:

^t for a tab
^s for a hard space
^p for a paragraph mark/hard return
^w for any white space

etc. (rather like what you can do with Find and Replace in Word)

REPLACE(, , , )

text variable = any text variable
searchfor = character string
replacewith = character string
all = TRUE to replace all occurrences of with instead of just the first one

Searchfor and replacewith can include the same pseudo-codes shown for STRIP above.


Yields the answer plus a space if the text variable is answered or an “answered nothing” otherwise.

Examples of use:

SET MultiLineAddress TO STRIP(MultiLineAddress, “^w”, TRUE, TRUE)

Strips white space from the beginning and end of a multi-line address.

SET OneLineAddress TO REPLACE(MultiLineAddress, “^p”, “, “)

Replaces returns in the multi-line address with a comma and a space to form a single line address.

With SPACE, instead of a computation containing:

ClientFirstName + “ “
IF ANSWERED(ClientMiddleName)
RESULT + ClientMiddleName + “ “
RESULT + ClientLastName

you could use:

ClientFirstName + “ “ + SPACE(ClientMiddleName) + ClientLastName

October 6, 2005: Bold, Italics and Underline in Computations and List Punctuation


1. Quite a number of developers have requested a way to identify bold, underscore, and italics in text produced by computations for insertion into a document.

2. A similar number of developers have requested a way to get bold, underscore, and italics into additional text or prompt text in a dialog.

3. A smaller, but still meaningful number of developers have requested a way to get “a, b, and c” style punctuation into a document without using a repeat. For example, if I want to list a client, the client’s spouse, and their children as “My family consists of myself, my spouse Sam Jones, my son Tim Jones, and my daughter Sue Jones”, where the children come from a repeated dialog but the parents do not, I have to do some tricky scripting.

Proposed Solution

We propose to implement a new kind of field that can be inserted into text. The field will contain something I’ll call a “dot command”. Here are some
examples (using single angle brackets in place of chevrons):

In a computation script:

SET Variable TO “Please be <.b>very<.eb> careful when moving the cannister.”

The “.b” and “.eb” commands represent bold and end bold respectively. When this text is merged into a document, or when it is displayed in a dialog, the visible dot commands will be replaced by actual bolding of the word “very”.

Similar commands would be implemented for italics (.i) and underscore (.u).

It might be good if we used longer words for the dot commands, like “.begin bold” and “.end bold”. These would be easier to recognize in the text. The downside is, they’re long.

It might be good if we were to use some other character to “introduce” the new commands. We need to use something that has never been allowed as a valid character to being a HotDocs component name. One suggested character has been the backslash. We (I) like periods because they’re fairly unobtrusive.

QUESTION 1: How do you feel about this scheme of allowing visible fields in text that will be translated into the “real thing” in documents or dialogs? If you don’t care for it, do you have other suggestions?

QUESTION 2: Do periods (dots) work for you, or do you think some other character would be better?

QUESTION 3: Are you OK with short, mnemonics (like “.b” and “.be”) or do you prefer longer commands (like “.begin bold” and “.end bold”)?

In addition to dot commands for specifying bold, underscore, and italics, we’ve considered commands like:

<.an> inserts “a” or “an” depending on the word that follows
<.> inserts a period, but only if no punctuation precedes the dot command (useful when inserting a sentence typed by the user as an answer)
<.lq> inserts a curly left quote
<.rq> inserts a curly right quote

There are more things we’ve thought of (curly apostrophes, other conditional punctuation, etc.)

QUESTION 4: Are there other commands of this sort you’d like to see implemented? If so, please describe them.

As the solution to non-repeated list punctuation, we propose to implement:

<.p “format”> identifies the beginning of a punctuated list and gives the format
<.p> identifies the spot where punctuation characters should be inserted
<.pe> identifies the end of the punctuated list

Using the family example described above, you could have something like:

<.p “a, b, and c”>My family consists of myself<.p>my spouse <.p>my Name><.p><.pe>.

which would be assembled as

My family consists of myself, my spouse Sam Jones, my son Tim Jones, and my daughter Sue Jones.

QUESTION: Will this be useful to you?

I should mention that we expect to do two things:

1. Create an interface for inserting dot commands (so you don’t have to remember them).
2. Make it possible to hide dot commands so users who preview your templates won’t see them.