Version 5.7.11

# `Until`

Create a loop. All child elements are executed repeatedly until the given condition is true.

## Child elements

`A`, `AddSearchpath`, `AttachFile`, `Attribute`, `B`, `Barcode`, `Bookmark`, `Box`, `Br`, `ClearPage`, `Clip`, `Color`, `Column`, `Columns`, `Copy-of`, `DefineColor`, `DefineFontalias`, `DefineFontfamily`, `DefineMatter`, `DefineTextformat`, `Element`, `Fontface`, `ForAll`, `Frame`, `Group`, `HSpace`, `HTML`, `Hyphenation`, `I`, `Image`, `Include`, `Initial`, `InsertPages`, `Layout`, `Li`, `LoadDataset`, `LoadFontfile`, `Loop`, `Mark`, `Message`, `NextFrame`, `NextRow`, `NoBreak`, `Options`, `Output`, `Overlay`, `Pageformat`, `Pagetype`, `Paragraph`, `PlaceObject`, `PositioningArea`, `PositioningFrame`, `ProcessNode`, `SaveDataset`, `SavePages`, `Section`, `SetGrid`, `SetVariable`, `SortSequence`, `Span`, `StructureElement`, `Sub`, `Sup`, `Switch`, `Table`, `TableNewPage`, `Tablehead`, `Tablerule`, `Td`, `Tr`, `Trace`, `Transformation`, `U`, `Until`, `VSpace`, `Value`, `While`

## Parent elements

`AtPageCreation`, `AtPageShipout`, `Case`, `Contents`, `ForAll`, `Loop`, `Otherwise`, `Record`, `SavePages`, `Until`, `While`

## Attributes

`test` (XPath expression)
  Every time after the the loop is executed, the condition is evaluated. If it is true, the loop exits.

## Example

    <Record element="data">
      <SetVariable variable="i" select="0"/>
      <Until test="$i = 4">
        <Message select="concat('$i is: ', $i)"/>
        <SetVariable variable="i" select="$i + 1"/>
      </Until>
    </Record>

Gives the following output (in the protocol file)

    Message: "$i is: 0"
    Message: "$i is: 1"
    Message: "$i is: 2"
    Message: "$i is: 3"

#### On this page