Blazonry – A 12th Century Graphics Description Language

History and Purpose

Blazonry developed in the early years of the 12th century as a means of
describing the patterns shown on the shields of knights, possibly arising from
their use in tournaments. We can imagine the use of written descriptions in
orders sent to armourers, tournament organisers and levied troops; "Your Leige
bears Or, a saltire Gules – gather beneath his banner". What this language of
blazonry needed was a clear, compact and unambiguous means of describing the shield so
that any competent herald or armourer could recreate it purely from this written
description, without the need for any pictures or diagrams. Over the years a
very successful language evolved, which has many features with clear parallels
with modern graphical description languages:

  • Unambiguous meaning – at each point in the description there is a single,
    clear meaning for each word.
  • Hierarchical structure – first comes a description of how multiple shields
    are combined (marshalled), followed by a description of each shield,
    consisting of the field, followed by any number of ordinaries
    or charges.
  • No unnecessary repetition – use of the same, of the first etc.
    to refer to previous tinctures, as many to refer to previous numbers
  • Default values – charges can be described as proper
    instead of being given a tincture; a herald would know that a chough
    has a black body with red legs and beak

In many ways the needs of the medieval heralds where very similar to those of
modern graphical and programming language designers, and they developed some
very similar  techniques, centuries before sophisticated linguistic
analysis and compiling techniques became available.

As a Context Free Grammar

Shield of Leslie

Clearly, most languages are capable of describing shields – consider the
shield of Leslie, here. We could say it has "three gold buckles on a wide
blue diagonal stripe on a white background
"; or alternatively "White,
with a thick blue line from top left to bottom right with three gold buckles on
", or many other equivalent constructions. The problems with this
approach are inconsistency and potential ambiguity – does "white with a blue
diagonal band and three gold buckles
" describe the same shield or not?

Ideally, what we would really like is a single, unambiguous description.
was achieved by making a highly formalised language, with clear rules for the
hierarchy of what is to be described and agreed meanings for every term. Thus,
our "wide diagonal stripe" becomes a "bend", colours always follow the item, "a
bend azure
" , the placement of the buckles becomes "on a bend azure,
three buckles or
", and so on.

The end result of this formalisation process is a graphical description
language that today we would call a
context free grammar (CFG). I am not able to provide a complete proof
that blazonry is a context free grammar, however one of the definitions of a CFG
is that it can be parsed by a recursive
transition network (RTN). As we will see below, the drawshield program
parses blazons, and is implemented as an RTN, it is therefore my contention that
blazonry is a CFG.

Without offering an entire proof, we can look in detail at small part of the
language and demonstrate how that subset can be represented by a CFG. Consider parsing just the field (background) of a shield blazon. A field can
be a tincture, a treatment or a division. A tincture can be colour, a metal or a
fur; each of these is a collection of terminal symbols, for example a metal can
be or or argent. A treatment is a pattern (terminal symbols)
followed by two tinctures. A division is a shape (terminal symbol) followed by
two or three tinctures. More formally:

  • field -> tincture | treatment | division
  • tincture -> colour | metal | fur
  • colour -> azure | gules | etc.
  • metal -> or | argent
  • fur ->  ermine | pean | ermines | etc.
  • treatment -> pattern tincture and tincture
  • pattern -> fretty | annuletty | grillage | etc.
  • division -> shape tincture and tincture {
    and tincture }
  • shape -> per bend | per pale | tierced in fess |

From the above, we can see that every rule has a single non-terminal on the
left, while on the right there is a string of terminal symbols and
non-terminals. This fragment meets the formal definition of a context free
grammar and hence can be parsed by an RTN.

Some Necessary Augmentations

Although a recursive transition network is sufficient to parse a blazon, to
correctly draw a shield there a few occasions when we need to know a small
amount of
context in order to position a graphical item correctly. So strictly speaking,
our RTN should really be called an Augmented Transition Network, and our grammar
is probably best described as an attribute grammar. In the implementation of
these necessary augmentations are actually so few that I have
simply used a small number of global variables, rather than passing information
through many levels of recursive function calls. For completeness, the
augmentations that I have had to make so far are as follows:

  • Some charge placement depends on the way that the field has been divided
    (e.g. per bend with 2 charges)
  • Some treatments (e.g. checky) and all furs are rotated 45 degrees
    if used on a bend
  • A series of charges or ordinaries can all be the same tincture (e.g. a
    bend and chief argent
    ). This requires the program to "look ahead" for a
    tincture if it does not immediately follow the ordinary or charge
  • Some elements of the shield are abased (moved lower) if a chief
    is also present on the shield
  • (Strictly speaking, there are also stylistic guidelines about placing
    metals next to metals and colours next to colours – the program does
    implement these guidelines, however if it did they would require
    further augmentations)

Ambiguities and Punctuation

In general I have found blazonry to be a very precise language. I have
discovered one ambiguity and also some points where the punctuation is
significant: They are as follows:

  1. It is possible to place one ordinary on top of another such that the
    second ordinary is only visible where it coincides with the first, e.g. on
    a chevron argent three bars sable
    . It is also possible to place one or
    more charges on an ordinary, e.g. On a fess or a roundel gules.
    Unfortunately, a cross may be both an ordinary and a charge so that
    e.g. on a base gules a cross or is potentially ambiguous. In reality,
    there are not many situations where the ordinary cross would actually be seen
    as such, so the program (and I hope, a professional herald)  would assume that a
    charge is always meant in this situation
  2. One or more shields may be combined, for example, shieldA dimidiated
    with shieldB
    . Also, a charge may be placed overall, in which
    case it is placed on top of all other elements, regardless of any other
    placement rules. What does the blazon shieldA dimidiated with shieldB
    overall a label gules
    mean? Is the label to placed on top of shieldB,
    which is then combined with shieldA; or should shieldA be combined with ShieldB
    and the label placed on top of the combined shields? In this case I have
    chosen to let punctuation decide – if a semi-colon is present before the word
    overall I assume that terminates the description of shieldB and thus
    the label would go on top of the combined shield. If no semi-colon is present,
    the overall is part of shieldB. Again, a professional herald may (or
    may not) agree with this!
  3. A treatment is a way of patterning the field in two colours. It can be
    used either as an infix or a prefix operator, thus "azure scaly or"
    and "scaly azure and or"  are equivalent. This can lead to an
    ambiguity in a list of tinctures, such as after a three colour shield
    division. For example, "per pall azure scaly gules and or and pean"
    can be parsed into three tinctures in two ways – "azure" – "scaly
    gules and or
    " – "pean"; or "azure scaly gules" – "or" – "pean".
    To ensure the first meaning, I have made drawshield require a comma or the
    word "and" after each distinct tincture.