This version is out of date, covering development from v9.5.0 to v9.7.3. It is maintained here only for inbound reference links from elsewhere. It is no longer actively updated.

Jump to the current version of aTbRef

Tinderbox v9 Icon

Coding conventions

How many discrete code syntaxes does Tinderbox use? Two: action and export. The former is used internally and is Tinderbox's scripting 'language'. Export code is used only for 'HTML' export purposes, enabling the insertion of mark-up and links int the exported text. In both types of code arguments are supplied as a comma-delimited list within parentheses (i.e. normal brackets), being comma-delimited if there is more than one.

Whitespace in codes. For codes using parentheses to hold inputs, there must be no whitespace between the last character of the code and the opening parenthesis. Within the parentheses, additional whitespace—e.g. between inputs or in expressions—is ignored.

Action code syntax. Used within Tinderbox documents for use with rules, agents, $OnAdd and the like. Action code operators are case sensitive. More on Action code syntax.

Export code syntax. The original Tinderbox automation syntax was 'export code', used for exporting code to web(log) pages; such code is always started and ended with a caret symbol (^, typed via shift+6). Expert users may optionally omit the closing carets though this leaves Tinderbox to infer where a code ends. Originally, Export code could also be used internally in actions and queries but this is now deprecated. As most export task-specific codes can be replicated using an action code enclosed in the ^value()^ export tag and so many of the export codes are now deprecated in current use.

Query codes. All now deprecated as there are direct action code replacements. You might still see query codes in agent queries in old files. Such codes start with a hash (#) and all have direct action code replacements.

Case-sensitivity

Attributes and action codes are always case-sensitive, both for system and user attributes. The convention is to use 'CamelCase', i.e. initial capital and capitals for concatenated words; thus the convention would suggest MyString as a user attribute name but alternates such as mystring, Mystring would also work but—importantly—as different attributes from MyString.

Unlike attribute names, export codes are case insensitive but convention when using them is to capitalise internal word joins but not the initial letter; thus 'correct' usage takes forms like ^endIf^, urlEncode but you will find URLEncode, UrlEncode, UrLeNcOdE, etc., will all work just as well.

Documentation will tend to follow the conventions, but feel free to use different casing if it works for you. More on case sensitivity.

Attribute name limitations

This is discussed under Attribute Naming.

Use of parentheses in export code

In export code where no arguments are required, parentheses can usually safely be omitted. With codes whose only argument is 'item', the parentheses can usually be omitted is the desired scope is 'this'. Thus ^title^ is equivalent to ^title(this)^.

Delimiting arguments

A comma is used as the delimiter between arguments. Some arguments may be optional. Any syntax examples in the manual or Release Notes where argument(s) are listed in square brackets (e.g. [data]) are optional.

A notable exception to the comma as a delimiter is the links() operator where a dot (period character) notation is used.

Where arguments allow non-quoted text strings, if the string includes a comma the whole string should be quoted.

Legacy constraints:

A new subs-set of dot-operators were introduced, in the form (data-typed-object or literal value).operator, e.g. $MyString.contains("ant"), "Advice for Defendants".contains("ant"). In this type of operator, the first part is a code expression, an attribute reference or a literal (number, quoted string, etc.). After the dot, the operator name follows post v4.6 conventions; some operators require no inputs and trailing empty parentheses are not required. More advanced users can thus chain operators as long as they know the data type of the object to which they are dot-attaching additional operators.

More on coding conventions: