@Section @Title { "@Case" } @Tag { case } @Begin @PP case.sym @Index { @@Case symbol } yield.sym @Index { @@Yield symbol } The @@Case symbol selects its result from a list of alternatives, depending on a tag: @ID @Code { "@Day @Case {" " { 1 21 31 } @Yield st" " { 2 22 } @Yield nd" " { 3 23 } @Yield rd" " else @Yield th" "}" } In this example the result will be st if @Code "@Day" is 1, 21, or 31, and nd if @Code "@Day" is 2 or 22, etc. The effect is similar to accessing a database, though in a more compact form. The right parameter is a sequence of @@Yield symbols, each with a left parameter whose value is a sequence of one or more juxtapositions of simple words, and a right parameter which may be any object. @PP We first describe the behaviour when the value of the left parameter of @@Case is a juxtaposition of one or more simple words. Then the result of the @@Case is the right parameter of the first @@Yield whose left parameter contains either the value of the left parameter of the @@Case, or the special value {@Code else}. If there is no such @@Yield it is an error. @PP When the left parameter of @@Case is not a juxtaposition of simple words, the result is the right parameter of the first @@Yield whose left parameter is {@Code else}, or an error otherwise. This permits examples like @ID @Code { "@RunningTitle @Case {" " dft @Yield @Title" " else @Yield @RunningTitle" "}" } where a running title is returned unless it has the value {@Code dft} (which presumably means that no running title was supplied), in which case an ordinary title is returned instead. @PP When a receptive symbol is placed within a @@Case, it should be included in each alternative, since otherwise Basser Lout may become confused when trying to predict whether the symbol will be a part of the result or not. Alternatively, if it can be guaranteed that the receptive symbol will never be searched for when the cases that it does not lie within are selected, that is all right too. @End @Section