do, done

control structure

do action* done


You can use do and done to create a block of code that will be treated as a unit. There are two reasons to do this: to limit the scope of variables, and to associate more than one action with a using statement:

  open my-file as file "mine.txt"
  using output as my-file
     local stream bio
     set bio to  "more about me"
     output "my name"
     output bio

The variable "bio" exists only within the do...done block. All output within the block is sent to the destination specified by the preceding using statement.

A do...done block may contain only actions. It cannot contain rules or group statements.

It is possible to apply a condition to a whole do...done block by adding a condition after the done. Conditions appearing after the done apply to the whole block, and are evaluated prior to any conditions that appear within the block. For example, the actions within the following do...done block will be executed only when the attribute "margin" of the parent element is specified:

     decrement page-width by attribute margin
     using attribute margin of parent output "\newmarg{%v(margin)}%n"
  done when attribute margin of parent is specified