BOX design_name
entries_and_blocks
END design_name
Every box design definition must have at least a SHAPE block, an
ELASTIC list, and a SAMPLE block.
SAMPLE
sample_image_of_box
ENDS
This is the box image used for the list of available designs. The reason
why an image is not simply generated is that this way, the box can be
shown in an environment in which it might actually be used, e.g. with some
C code around
(example
config file).
SHAPE {
shape_name (string_list)
shape_name (string_list)
...
}
shape_name may be one of nw, nnw,
n, nne, ne, ene, e,
ese, se, sse, s, ssw,
sw, wsw, w, or wnw, corresponding
to the figure shown earlier. :s/\\/\\\\/g
:s/"/\\"/g
Here are a few examples of valid entries in a SHAPE block:
ne ("+++", "+ +", "+++")
SSE ("///", "\\\\\\")
ene ()
s ("\"")
The delimiter statement can be used to
redefine the string delimiting character and the escape character, thus
eliminating the above backslash problem.
ELASTIC (shape_name, shape_name, ...)Simply lists the shapes which are elastic. Elastic shapes are repeated so that the box can grow and shrink to meet its requested size. Corner shapes may not be elastic. Naturally, there must always be at least one elastic shape per box side. No two neighboring shapes may be elastic. A typical ELASTIC entry would look like this:
elastic (n, e, s, w)The elastic list is a required entry in every box design definition.
PADDING {
side_or_group_of_sides value
side_or_group_of_sides value
...
}
Defines the default padding area.
Possible values for side_or_group_of_sides are all,
horizontal, vertical, top, left,
right, or bottom. A padding block may contain an
arbitrary number of entries. Entries are read from top to bottom, so that
later entries overwrite earlier entries. In the following example:
padding {
vertical 3
horiz 2
left 4
}
the padding is set to 3 blank lines above the text, 2 spaces to the right
of the text, 3 blank lines below the text, and 4 spaces to the left of the
text. These values can be overridden by a different specification on the
command line using the -p option.
REPLACE "search_pattern" WITH "replacement_string" ... REVERSE "search_pattern" TO "replacement_string" ...These statements are used to perform substitutions on the text surrounded by a box. The REPLACE statements are executed on the input text when a box is being created. REVERSE statements have the same effect as REPLACE statements, but they are executed after a box has been removed.
replace "\\*/" with "*-/"
reverse "\\*-/" to "*/"
The REPLACE statement in the above example may be used to quote
closing comment tags in the C programming language by inserting a dash
between the asterisk and the slash. The REVERSE statement undoes
this effect when the box is removed.
The search pattern may be a regular expression, and the replacement string may include backreferences. This gives you quite a powerful means for text modification. The following example is used to insert a space between all characters of the input text:
replace "(.)" with "\\1 "
reverse "(.) " to "\\1"
There may be many REPLACE/REVERSE statements in one
design definition. They will be executed one after the other, starting
from the top.
Note that as in all strings, backslashes must be doubled, i.e. boxes "consumes one layer of backslashes". This is why in the first example, there are two backslashes at the beginning of the search pattern, when only one would have been needed to escape the star operator. Alternately, you may use the delimiter statement to change the string delimiting and escape character.
For more information on how to use regular expressions, please see man 5 regexp, under "Basic Regular Expressions" or any other source. Regular expressions are very common.
INDENT "indentmode"This sets the default indentation mode for a design. Possible values for indentmode are "box", "text", and "none". The indent mode specifies how existing text indentation is treated.
"box", which is the default setting, will cause the
box to be indented by the same number of spaces as the text was. The text
itself will not be indented within the box, though.
"text" will not indent the box, but instead retain the
text indentation inside the box.
"none" will simply throw away all indentation.
For examples on all three indentation modes please refer to the example page.
DELIM[ITER] charschars must consist of exactly two characters, the first of which being the escape character, and the second the string delimiter. No quotes must be placed around those two characters.
"foo\":\"\\\"\\\\bar"Using a DELIMITER statement, this looks much simpler:
delimiter ?:
:foo"?:"\"\\bar:
The escape character may be any character you choose. The string delimiter,
however, may only be one out of the following:
AUTHOR "name_of_author"Simply states who the ingenious guy/girl was who created the design. This entry is used when displaying the list of designs (boxes -l). The name should include the email address. Ideally, the entry should be usable "as is" in a TO: mail header, like this:
author "Thomas Jensen <tj@foobar.com>"
keyword "string_value"In addition to the author entry, there may be any number of other entries of the above form, giving any kind of information. The example config file includes the entries CREATED, REVISION, and REVDATE, whose meanings are obvious. Those other entries are not yet used by boxes, though, and will simply be ignored.