The dance XML

This documents an XML for describing dances. The XML performs two functions it specifies the metadata useful in building up a database of dances, and it describes the motions of the dancers as they progress through the dance.

(I have never gotten around to writing a DTD)

Table of Contents

<dances>

The <dances> element.

<?xml version="1.0" encoding="UTF-8"?>
<dances>

The root element of these files is always <dances>.

A <dances> element may contain an arbitary number of <dance> and <comp> nodes. (the <comp> allows for two dances to be compared).

The <dance> element.

The dance element describes a dance. It specifies what form of progression to use, how the dancers should move in the minor set, what the calls are, etc.

Attributes
alt-nameDoes the dance have an alternate name? Many Playford dances acquired different names during the 70 odd years of the Dancing Master. Some are just misspellings, others are true alternates. If there is more than one alternate then separate with the slash character "/".
animatorThe person who created this animation. So far all the dances are animated by "GWW" (me)
animation_dateThe date of the animation. This should be expressed as yyyy-mm-dd.
author or devisorThe dance's devisor. (Older dance files say "author" instead (it accepts either and they mean the same)). I'm not pendantic about this, I put Playford in as a devisor even though he was only the publisher.
backgroundEither a color (expressed as #XXXXXX) or a filename containing an image with the right aspect ratio.
band-posWhere to display the band in the video. Options are "unspecified", "left", "bottom", "right", "top".
call-groupAt one point I expected to use this, but I now doubt I will. It is still parsed and retained.
common-nameThis allows me to group a set of dances together. Often dances change through time and it is interesting to look at all the variants (and have them grouped together on the website). Usually this can be taken care of by adding a "~" to the dance name, but sometimes the name itself changes (Careless Sally becomes Calais Sally, or becomes She's Ower Young to Marry Yet or She's Over Young to Marry or I'm Over Young to Marry, etc.).
counts-per-bar2 (default), 3, 4 or 5. Occasionally the music is a medly and will switch in the middle, usually I say that's "2" and fudge (using actual-bars as well as bar in the call-name).
couple-countIn a minor set dance, specifies the default number of couples to display.
difficulty-levelSome indication of how difficult the dance is. (Unspecified, Very Easy, Easy, Easy/Intermediate, Intermediate, Intermediate/Hard, Hard, Very Hard). This is a subjective measure and different people may come to different conclusions
honourShould the dancers honour partner before the dance starts. "Yes" or "No". On by default in Scottish, else off.
honour-at-endShould the dancers honour partner after the dance ends. "Yes" or "No". "No" by default.
idThe name of the dance. This should be unique. If there are multiple versions of a dance then add a "~" after then dance name and append what makes it different from the others. For instance " ~ Sharp" would mean this is the version interpreted by Sharp. Or " ~ 3 Couple" would mean it's a 3 Couple version rather than a Triple minor.
ignore-sexTells the progression algorithms to ignore sex when figuring out what role the dancer should take (For dances like "Impropriety" were dancers change from the men's to the women's lines and back again).
improperA list of all the dance roles which are improper, as "1s,3s".
interpreterThe name of the person who interpreted, researched, adapted the dance in question. Most old dances have an interpreter, most recent dances do not.
interpreter-publicationThe book in which the interpreter published his/her version of the dance.
keyThe key in which the music plays (I don't often have this information).
licenseIf the dance is released under a specific license this describes it.
minorset-spacingUsually unneeded, the program can figure it out. But sometimes more space is needed between minor sets and this is a way to specify it.
original-formationSee "formation" for the options. Sometimes when a dance is interpreted it will change from a triple minor to a duple, or a 3 couple. This contains what the dance was in the original (if that's different from the interpretation).
original-improperEither "0" or a list of roles, showing what dancers were improper in the original if different from the interpretation.
original-partsThe number of parts in the original if different from the interpretation.
original-progressionThe number of couples the 1s moved down in the original if different from the interpretation.
partsMany Playford dances are in three parts.
publicationThe book in which this dance was first published.
progressionIn a minor set dance, the number of couples the 1s move down, omitted if it is "1".
progression-rotation-centerThis is for circle dances where the progression does not take dancers to the spot where another dancer started the dance, but to somewhere partway around the circle. Without this hint my progression algorithms get all confused. This specifies the x,y coordinates for the center of the set and an indication of how much things should be rotated to get back to places. It's a nasty hack.
repetitionsIn a minor set dance, specifies the default number of times to run the dance.
show-minor-setShould the first run of the dance be slowed down to make it easier to learn? "Yes" or "No". "Yes" by default.
sicilian-urlThe url of a youtube animation produced from this file in a sicilian circle.
sort-nameI don't think this is needed anymore. It has been superceded by "common-name". It still gets parsed though.
This is a version of the dance name which gets stored in the database for sorting purposes. In most cases it can be generated automagically and this attribute is not needed, but if I want "The Dorset Triumph" to appear next to "The Triumph" then I might give it the sort-name of "Triumph".
source-urlA link to an online site where a description of the dance may be found.
starting-positionOne of: "Squared Set", "6 Couple Rectangle", "Facing Couples, "Facing Couples Becket", "Duple Minor", "Becket", "Becket CCW", "Short Waves", "Duple Minor Progressed", "Three Face Three", "Four Face Four", "Tempest", "Quadruple Minor Becket", "Triple Minor", "2 Couple Longways", "3 Couple Longways", "4 Couple Longways", "5 Couple Longways", "6 Couple Longways", "7 Couple Longways", "8 Couple Longways", "3 Couple Circle", "5 Couple Circle", "6 Couple Circle", "7 Couple Circle", "Square of Trios", "Scottish 2 in 4", "Scottish 3 in 4", "Circular Monople", "Rotated Triple Minor", "Custom", and "Custom3".
stroke-text"Yes" or "No", defaults to no. Only needed if you specify a background where the title text doesn't show up.
styleOne of: "English Country Dance", "Contradanse", "American Country Dance, "Cotillion", "Quadrille", "Scottish Country Dance", "Contra Dance", "Square Dance", "Appalachian Circle Dance", and "Longsword Dance".
substyleFor square dances, one of: "basic1", "basic2", "mainstream, "plus", "advanced1", "advanced2", "challenge1", "challenge2", "challenge3a", and "challenge3b".
tagsA place for storing random info. The following things are recognized:
jig
The dance is to a jig tune
reel
The dance is to a reel tune
strathspey
The dance is to a strathspey tune
waltz
The dance is to a waltz tune
sicilian
The dance is designed to be danced in a sicilian circle
mixer
Dancers change partners
USA
This is an Up-a-double/Siding/Arming dance
as many as will
No limit on the number of couples. In minor set dances this is obvious, but there are some circle dances which also have this attribute where it is not obvious.
visiting couple
In square dances (or big circle dances), indicates that one couple travels round the set dancing with all the others.
visiting man
In square dances (or big circle dances), indicates that one man travels round the set dancing with all the others.
visiting woman
In square dances (or big circle dances), indicates that one woman travels round the set dancing with all the others.
visiting separate
In square dances (or big circle dances), indicates that one couple travels round the set dancing with all the others, but the sexes are split, one might travel clockwise and the other counter, or one might follow the other, etc.
active couple
In square dances (or big circle dances), indicates that only one couple is active at a time (though it doesn't exactly visit).
heads/sides
In square dances (or big circle dances), indicates that the heads and sides do different things.
symmetrical
In square dances (or big circle dances), indicates that all couples do the same thing. This is usually true in the introduction/break/finalle but sometimes in the main figure too (Texas Star).
DP/DP
This is Gary Roodman's research topic. He wondered why there were no square dances where everyone danced with a different partner and in a different place each time through the dance (Normally either no one progresses at all, or the women progress and the men stay at home). He proved it was possible to do this, showed what permutations were needed and then devised a few dances which did it. (Although possible in a square this is not possible in a hex dance (one with six couples).
patter
In square dances this is a patter dance, not a singing call.
published by
The person who published the dance is not the devisor and we usually don't know who the devisor was. True of most dances before about 1800 and many thereafter
do-si
Contains one of the old square dance variants of "do-si-do" (which is nothing like the simple back to back movement.
Playford Ball
The dance is found in the Playford Ball
Playford Assembly
The dance is found in the Playford Assembly
Cracking Chestnuts
The dance is found in Cracking Chestnuts
text-colorAs #XXXXXX. Specifies the color of text to make it stand out against the background. See also stroke-text.
title-audioA filename containing a sound file describing the dance. Usually I speak the title, the devisor and the year. If the dance was interpreted I will add the interpreter and year of interpretation. And maybe other things if I feel like it (original publication perhaps). I do not put in information about the music here, that goes in another place.
title-backgroundEither a color or a filename, but it will only be shown when the dance's title is displayed.
unitsShould always be 1024. I originally thought his would be important but it isn't something I need to customize.
urlThe url of a youtube animation produced from this file. For triple progression triple minors this will have 9 couples.
url10Only for triple progression triple minors. The url of a youtube animation produced from this file with 10 couples.
url11Only for triple progression triple minors. The url of a youtube animation produced from this file with 11 couples.
year-interpretedPretty self-explanitary. If unknown put 0. If uncertain precede by "~".
year-writtenPretty self-explanitary. If unknown put 0. If uncertain precede by "~".

The <dance> element takes the following children: <call-name>, <if/elseif/else>, <bbs>, <role>, <component>, <choreography>, <face>, <music>, <music-include>, <html-notes>, <minorset1>, or <whirl>.

The <call-name> element.

The <call-name> element describes a call for a figure in the dance. It provides both text, to be displayed at the bottom of the animation, and a sound file containing the spoken call. It also contains information on how many bars the call will take, and whether this is the start of a music section ("A1", "B2", etc.). The <call-name> element has no children.

In some dances calls are made conditional on what part of the dance we are in. The first part of a Playford dance might begin with "Up a double" while the second part begins with "Side right", but the rest of the part is the same. In this case the call can be put in a conditional <if/elseif/else>. Other than that calls are direct descendents of <dance>s or <component>s.

      <call-name name="Right shoulder siding" music="A1" audio="AudioCalls/Right shoulder siding.wav" bar="4" />
Attributes
audioA filename containing the spoken call
audio-barThe number of bars the spoken call takes (sometimes a spoken call will apply to this call-name and the next.
actual-barIn the case of a medley where some of the music is in 2 counts per bar and some is in 3 (or 5 or what-have-you) this specifies the number of bars the musicians will expect. Internally "bar" (see below) will assume everything is at whatever counts-per-bar was specified for the entire dance (often 2). So if you have a reel/strathspey medley the set counts-per-bar to 2, but in the strathspey section "bar" should be twice the actual number of bars, while "actual-bar" is the real number. This happens rarely, is mildly confusing, I've explained it badly, and best ignored if possible.
barThe number of bars the call-name takes up.
long-audioA filename containing a longer and more descriptive version of the spoken call. This will be used when there is time for it, for example when the dance is slowed down to show the first minor set.
nameA description of the figure, text, placed at the bottom of the video.
musicThe name of the music section that starts here.

If the<call-name> is inside a <component> which is controled by a <choreography> with an active attribute then there are certain macros which may be placed inside the name and audio attributes to be expanded when used. These are described in the macros sub-section of <choreography> section.

The <if> element.

<if>s are used in two contexts, in the call list, and in the list of moves for a dancer (inside a <role>. The syntax is almost the same for both, both provide alternitives depending on a condition.

An <if> may be followed by an <elseif>, and must be followed (after the last elseif) by an <else>. All three of these are described together.

<if>s and <elseif>s take a single, required attribute condition which describes when the stuff inside it should be applied.

    <if condition="topset and part(1)" >
	stuff
    </if>
    <elseif condition="bottomset(3,1) || part(3) || last" >
	other stuff
    </elseif>
    <else >
	still other stuff
    </else>

The condition is a logical expression defined in BNF:

    <condition> ::= <and-expr> | <condition> "||" <and-expr>
    <and-expr> ::= <term> | <and-expr> "and" <term>
    <term> ::= "(" <condition> ")" |
		    "part(" <number> ")" |
		    "first" |
		    "last" |
		    "topset" | "topset(" <number> ")" | "topset(" <number> "," <number> ")" |
		    "bottomset" | "bottomset(" <number> ")" | "bottomset(" <number> "," <number> ")" |
		    "majorpos(" <number> ")"

Only part, first, and last can be used in a call list, all the terms can be used inside a role's moves.

Part(<number>) is true if the current part in the dance's execution matches the number.

First is true if this is the first iteration of the dance.

Last is true if this is the last iteration of the dance.

Topset is true if the dancer is in the top minor set in the hall. There must be no couple out above them. Topset(<number>) is true if the dancer is in the nth minorset from the top (topset(1) is equivalent to topset). While the second argument to topset is the number of couples out above the top.

Bottomset is like topset, except at the bottom of the set.

Majorpos gives the position in the majorset. 0 means the top of the major set, 1 means the second couple, etc. -1 means the bottom of the major set, -2 the second couple from the bottom, etc.

The <component> element.

A component is like a small dance which is part of the main dance. I created this for dances which have non-progressive sections intermixed with progressive ones. An example is a standard square dance singing call which begins with a non-progressive introduction, is followed by a progressive section with the heads active (usually twice), then a middle non-progressive piece, the same progressive section for the sides, followed by a finishing non-progressive piece. Each of these sub-dances would live in a component and a <choreography> list will explain when to use each segment.

This will parse all the same attributes and children as a <dance> though many of them (publication for example) will be ignored.

The <choreography> element.

A list of <choreographies> describes how the various <component>s of the dance should be performed.

    <choreography figure="header" />
    <choreography figure="figure" active="1" />	<!-- twice for heads -->
    <choreography figure="figure" active="1" />
    <choreography figure="closer" />
    <choreography figure="figure" active="2" />	<!-- twice for sides -->
    <choreography figure="figure" active="2" />
    <choreography figure="closer" />

A <choreography> contains no children and has the following attributes:

Attributes
figureThe name of a <component>. This is required.
activeAn indication of which couple is active, designed for square dances. If "active" is "1" then we assume that in this version of the <component> the 1st couple (or the 1st+3rd) is active. If 2 is specified here then the <component> is rotated 90 degrees to make the 2nd couple active. If 3 is specified then it is rotated 180, etc. This attribute is only meaningful in square dances. It may get extended to work for big circle dances, but I haven't done that yet.
first-setIf specified then it means that this will be treated as the first set in an old style progression sequence.

no-one-out-at-topIf specified then it means that no one is out at the top of the set in a minor set dance.

partFor a multi-part <component> this allows you to specify which part should be danced.
time-scaleTakes a floating point number and all lengths within the component will be multiplied by this value (be careful, bad things happen if there are a non-integral number of bars in the minorset. This can be useful because "show-minorset" does not work on dances with components, this way you can slow things down yourself.

<call-name> macros within a <component>

One of the points of <component>s and <choreographies> is that you can change which couple is active without having to copy all the movements into another role. But you also need to change the call-names to reflect which couple is active. So there are a bunch of macros you can put in the <name> and <audio> attributes which will expand to the appropriate thing when <audio> is set in a <choreography>.

%1-%4Expand to 1s,2s,3s, or 4s adjusted by active. So if active is 1 then %1 is 1s, %2 is 2s, ... if active is 2 then %1 is 2s, %2 is 3s, ...
$1-$4Expand to 1st,2nd,3rd, or 4th again adjusted by active.
#1,#2Expand to "heads" or "sides". If active is 1 then #1 will be "heads" and #2 "sides" while if active is 2 then #1 will be "sides" and #2 "heads".
#3,#4Expand to (capitalized) "Heads" and "Sides".
#5,#6Expand to (singular) "head" and "side".
#7,#8Expand to "Head" and "Side".

The <html-notes> element.

This contains whatever information I think interesting or useful that does not fit in any of the standard metadata attributes. It may be punctuated with HTML markup. Often this will contain a transcription of what Playford actually wrote down (as opposed to what the interpreter thinks he meant).

Due to a bug I haven't bothered to look into this all must be in a single html element (so if you want to have three paragraphs, wrap them up in a single <div>.

This may be a child of the main <dance> element, or the <music> element.

The <music> element.

The music section provides the information I need to fit recorded music to an animation. The following two constraints apply to music because of choices I made early on before I thought of adding music to my animations.

The first constraint is that only certain values for counts per minute will work with my system. The second is the the counts per minute cannot change during the animation.

Real music played by humans doesn't work like that. So first the program figures out what the value for counts per minute is for the first minorset of the music, then it finds the permitted value that is closest to that, and then it forces all the music to that speed.

To do this I need to have information on how long any introductory music lasts, where each minorset ends, and how long the ending music lasts.

It's also nice to have certain meta-data about the music.

    <music file="Music/BareNecessities/The Geud Man of Ballangigh.m4a" amplify="0.5" 
      composer="Playford"
      performers="Bare Necessities"
      title-audio="AudioCalls/musictitle -- the geud man of ballangigh.wav"
      cd-image="Music/CDCovers/APlayfordBall.jpeg"
      cd-notes="https://www.cdss.org/"
      permission="Country Dance Society, Boston Centre, Inc.">
    <html-notes><p>The tune, called <em>Hunt the Squirrel,</em> was published in a later edition of Playford.
  It was performed by Bare Necessities
  (Earl Gaddis, Mary Lea, Peter Barnes, and Jacqueline Schwab)
  on the album <em>A Playford Ball</em>.
  The music is used with permission from the Country Dance Society, Boston Centre, Inc.</p></html-notes>
      <intro>
	<fit2set start="320" end="1500" />
      </intro>
      <minorset>
	<fit start="1500" end="34930" duration-bar="32" />
      </minorset>
      <middlesets count="8">
	<fit start="34930" end="298000" duration-bar="256" />	<!-- Automatically generated -->
      </middlesets>
      <ending>
	<fit2set start="298000" end="299450" />
      </ending>
    <set-bounds set-bars="32" intro-start="320" intro-end="1500" final-end="299450"
	  set-ends="34960, 69430, 102640, 135420, 169080, 200680, 231450, 265410, 297770">
    </music>

A <music> element has the following attributes:

Attributes
composerThe composer (I'm not picky, I count Playford as a composer).
file(required) The filename of a sound file containing the music
minor-set-countSpecifies the number of repetitions of the minor set (sometimes we only have music for a certain number).
performersThe performers.
publicationThe book in which the music was published.
show-minor-setSame meaning as the field in the dance, just another place to say it. Specifies whether to have a slowed down walk through of the first minor set (no music will play, of course)
title-audioA sound file containing spoken information about the music. Usually the composer, date and performers and a snippet of the music.
year-performedThe year the music was performed. If unknown it will be 0, if uncertain the year will be preceded by "~".
year-writtenThe year the music was written. Or at least published. If unknown it will be 0, if uncertain the year will be preceded by "~".
cd-imageIn exchange for letting me use their music some bands have requested that I display their CD cover when I give credit to them. This is the filename for that image.
cd-notesIn exchange for letting me use their music some bands have requested that I display a message. This is that message
permissionWho gave me permission to use the music

A <music> element may have the following children: <html-notes>, <intro>, <ending>, <minorset>, <middlesets>, <lastminorset>, <body>, <set-count>,

The <intro> element.

This describes any introductory music in the file. It specifies when (in milliseconds) the introduction starts and when it stops

It may have the following children: <fit2set>, <copy>.

The <ending> element.

This describes any ending music in the file. It specifies when (in milliseconds) the ending starts and when it stops

It may have the following children: <fit2set>, <copy>.

The <minorset> element.

This describes the first minorset worth of music in the file. It specifies when (in milliseconds) the it starts and stops. (or if you prefer when the introduction ends and when the scond minorset starts).

It may have the following children: <fit>. (The parser accepts more than one child here but I do not recommend using that feature)

The <lastminorset> element.

This describes the last minorset worth of music in the file. It specifies when (in milliseconds) the it starts and stops.

It may have the following children: <fit>.

The <middlesets> element.

This describes any minorsets between the first and last ones. It specifies when (in milliseconds) the it starts and stops. (or if you prefer, when the first minorset ends and the last one starts, generally this will be more than one minorset.

This tag is obsolete but still parsed, it has been replaced by <set-bounds>

It may have the following children: <fit>.

The <body> element.

This describes the music for the entire dance. If present then minorset, lastminorset and middlesets will not be. It specifies when (in milliseconds) the it starts and stops. Generally used for something like a three couple dance where the dance has a fixed length.

It may have the following children: <fit>.

The <copy> element.

This specifies that an exact copy of the music be made without trying to fit it to any standard counts per minute. This can only happen in the intro and ending sections.

It requires both the following attributes:

Attributes
startThe time, in milliseconds from the start of the sound file to the beginning of this section.
endThe time, in milliseconds from the start of the sound file to the end of this section.

The <fit2set> element.

This specifies that music in this section be scaled at the same rate as the first minorset.

It requires both the following attributes:

Attributes
startThe time, in milliseconds from the start of the sound file to the beginning of this section.
endThe time, in milliseconds from the start of the sound file to the end of this section.

The <fit2last> element.

This specifies that music in this section be scaled at the same rate as the last minorset.

It requires both the following attributes:

Attributes
startThe time, in milliseconds from the start of the sound file to the beginning of this section.
endThe time, in milliseconds from the start of the sound file to the end of this section.

The <fit> element.

This specifies that music in this section be scaled so that the number of bars / (the end time - the start time) counts per bar = the desired value of counts per minute.

It requires all of the following attributes:

Attributes
duration-barThe number of bars of music in this section of the file.
startThe time, in milliseconds from the start of the sound file to the beginning of this section.
endThe time, in milliseconds from the start of the sound file to the end of this section.

The <set-bounds> element.

This specifies where each minor set ends in the music.

It requires all the following attributes:

Attributes
set-barsThe number of bars in each minorset.
intro-startThe time, in milliseconds, to the beginning of the introductory music.
intro-endThe time, in milliseconds, to the end of the introductory music.
final-endThe time, in milliseconds, to the end of the music.
set-endsA comma separated list of the time, in milliseconds, to the end of each minorset in the music.

The <music-include> element.

This points to an xml file which contains a <music> element as described above. Sometimes the same music can be shared among several related dances and it makes sense to store the music information in one common place.

It requires the following:

Attributes
filenameThe filename of a file containing a music element.

The <minorset1> element.

This controls the behavior when displaying a slowed down first minorset. In early English Country Dances there was no interaction outside the minorset, so the default behavior is to show only one minorset. But modern dances and modern interpretations are not always like that, sometimes dancers interact with others outside of their minorset. In this case you want to see the other dancers as they interact.

So this command says that beginning at the specified bar of the dance all couples up to and below the specified one should become visible. If end-bar is not specified they remain visible until the end of the minorset, otherwise they disappear again after end-bar bars.

    <minorset1 bar="16" end-bar="20" dont-show-couples-above-me="6" />
Attributes
barRequired. The bar at which to display other dancers.
end-barRequired. The bar at which to stop displaying other dancers.
dont-show-couples-above-meRequired. The biggest couple that will be displayed.

The <whirl> element.

This is a joke and displays a background of whirling butterflies during the contra move "Butterfly whirl".

    <whirl bar="28" end-bar="32" />
Attributes
barRequired. The bar at which the whirl starts.
end-barRequired. The bar at which the whirl ends.

The <bbs> element.

Normally the program figures out a bounding box that will display all of the dancers. But sometimes you want more control. Perhaps you want the dancers to march in from off-stage, so you don't want the bounding box to contain the initial position. Or you want the bounding box to change as the dance progresses.

      <bbs initial="-550,-550,550,550" >
	  <fixed bars="16" />
	  <rectto bb="-320,-320,320,320" bars="4" />
	  <fixed bars="12" />
      </bbs>

Specifies an initial bounding box, which stays the same for 16 bars then zooms in over 4 bars and stays the same for another 12.

Attributes
initialRequired. Either the keyword 'auto' which means figure it out automatically, or a comma separated list of four values, minimum x, minimum y, maximum x, maximum y.

It takes the following children: <fixed>, <auto>, <rectto>.

The <fixed> element.

The <fixed> element takes a bar attribute and maintains the last bounding box (whatever it was) for that many bars.

The <auto> element.

The <auto> element takes a bar attribute and changes the bounding box to whatever seems currently appropriate over that many bars.

The <rectto> element.

The <rectto> element takes a bar attribute and changes the bounding box to the one specified in the bb attribute over that many bars.

The <face> element.

The <face> element allows you to assign a bitmap to the specified dancer(s) so they have a more interesting image than the default rectangle or elipse.

It takes no children and has the following attributes:

Attributes
personEither this or sex is required. It specifies an image for this person, a number starting at 0 for the top man.
sexEither this or person is required. It specifies an image for every dancer of this sex.
filenameRequired. It specifies an image file. The image must be a square image, it will be scaled to be the same width as the default rectangle or elipse.
scaleA scaling factor, defaults to 1. This is applied after the scaling which makes the image the same size as the default (so it's a way to make it bigger or smaller).
hide-normalA number. 0=> the normal rectangle or elipse is drawn underneath the image, any other value and it is not drawn.

The <role> element.

This displays a dance role, and the movements of the dancer(s) who take on that role. Movements are specified as lines or bicubic (Bezier) splines, rather like PostScript.

In a minorset dance many dancers will be dancing the same role, the program automagically places them in two lines down the hall with appropriate spacing. The coordinate system specified here is relative and defines positions within the current minorset.

    <role sex="m" role="1s">
      <moveto facing="180" pos="320,320" />

      <lineto pos="320,240" bar="2" orientation="fixed" join-right="left:up:3|0" join-left="right:3|0" />
      <lineto pos="320,320" bar="2" orientation="fixed" drop-right-bars="end" />

      <transform bar-scale="2">
      <lineto pos="422,360" orientation="rotateto" degrees="-90" bar=".5" join-after-left-right="Ballroom:3" />
      <curveto cp1="444,373" cp2="472,367" pos="486,345" orientation="rotateto" degrees="180" bar=".5" />
      <curveto cp1="500,323" cp2="494,295" pos="472,281" orientation="rotateto" degrees="90" bar=".625" />
      <curveto cp1="450,267" cp2="422,273" pos="408,295" orientation="rotateto" degrees="0" bar=".625" />
      <curveto cp1="394,317" cp2="400,345" pos="422,359" orientation="rotateto" degrees="-90" bar=".625" />
      <curveto cp1="444,373" cp2="472,367" pos="486,345" orientation="rotateto" degrees="180" bar=".625" />
      <lineto pos="448,384" orientation="rotateto" degrees="270" bar=".5" drop-before-left="1" join-after-right-left="3" />
      </transform>

      <resetDance/>
      <end/>
    </role>

It requires the following attributes:

Attributes
sexRequired. Usually this is either 'm' or 'f' (male/female), but for trios it is 'l', 'c', or 'r' (left, center, or right).
roleRequired. Usually something like "1s", "2s", or "3s"... but in four face four dances it "1s left", "1s right", "2s left", "2s right", and in minor set dances it can also be "out at top", "out at bottom", while triple minors also have "out at top 1 of 2", "out at top 2 of 2" and "out at bottom 1 of 2" and "out at bottom 2 of 2", and in four face four dances: "out top left", "out top right", "out bottom left", "out bottom right". In old style progression there is also a state "waiting" (you should not need to specify this, it will be generated automagically. In Scottish 3 couple dances in a 4 couple set there is a built in mechanism so that the old ones will move to the bottom, and the couple at the bottom will move up -- but sometimes that mechanism doesn't work (if the 3s are active in the first few bars of the dance. In that case the progression must happen at the end of the previous minorset (instead of the start of the new) and you must provide roles: "1s.progression" and "3s.progression".

The order of roles is important in the file. The program is sexist and expects the 'm' sex to appear before the 'f' sex. Or for trios 'l' comes before 'c' which precedes 'r'. Similarly the 1s should be before the 2s which should be before the 3s (if any) with the "out at top" and "out at bottom" roles coming last of all.

The children of a <role> element describe the movement of the dance. Order is important here. The first child must be a <moveto> element, then a sequence of <lineto>s and <curveto>s, an optional <resetDance> and finally an <end>.

A collection of <lineto>s and <curveto>s may be placed within a <transform> element which can apply various transformations to the linetos and curvetos.

A collection of movements may also be made conditional by placing them within an <if/elseif/else>.

You may also use the <copy>. element to copy any role or part of that role which occurs before this one in the file (you can also copy bits of the current role provided they have already been written

The <role> element takes the following children: <moveto>, <lineto>, <curveto>, <pause>, <if/elseif/else>, <transform>, <copy>, <resetDance>, <end>.

The <moveto> element.

This must be the first child of a role, and must only occur there. Exception1: a <copy> element may be first if it copies a <moveto>. Exception2: a <transform> element may be first if its first child is a <moveto>.

The <moveto> specifies where the dancer should be when the dance starts. It provides an intial position and orientation. It may optionally provide initial hand clasps.

Attributes
posRequired. Specifies x,y coordinates for the initial position. The x position gives the distance down the hall, the y direction the distance away from the men's line toward the women's. I generally separate dancers by 256 units at the start
facingRequired. Specifies the angle in which the dancer is facing. 0 means the dancer is facing from the men's line toward the woman's, -90 means down the hall, 180 means from the women's line to the men's, and 90 means up the hall. Other values are possible in cirles.
join-after-right-leftOptional. Takes a person number as argument: M1 will be person 0, W1 person 1, M2 person 2, W2 person 3... (this is why <role> order is important). It means that the current dancer's right hand is joined with the other dancer's left hand.
join-after-left-rightOptional. Takes a person number as argument: M1 will be person 0, W1 person 1, M2 person 2, W2 person 3... (this is why <role> order is important). It means that the current dancer's left hand is joined with the other dancer's right hand.

The <lineto> and The <curveto> elements.

These two elements take almost the same attributes, neither takes any children, and both specify movement.

The <lineto> element moves in a straight line to the end point specified by pos, and it takes bar bars to get there.

The <curveto> element moves in a curved line to the end point specified by pos, the curve is modified by control points 1 & 2, and it again takes bar bars to get there.

There are other attributes to say how the dancer will orient him or herself as he or she moves, whom s/he'll take hands with, or drop hands with and some more obscure things which are hardly ever used.

Attributes
cp1First control point (required for curveto, ignored for lineto). Contains an x,y value.
cp2Second control point (required for curveto, ignored for lineto). Contains an x,y value.
posFinal position (required for both). Contains an x,y value.
barHow long it takes (in bars of music) to perform this move. The value may be a fraction.
orientation
fixed
The dancer does not change orientation.
In a sicillian circle this will often produce undesired results.
forward
The dancer faces in the direction of motion.
backward
The dancer faces opposite to the direction of motion.
forward-90
The dancer faces 90 degrees clockwise to the direction of motion.
forward90
The dancer faces 90 degrees counter-clockwise to the direction of motion.
rotateto
During the movement the dancer will rotate from his/her starting orientation to the specified one. The final orientation may be specified either by a "degree" attribute, or by following the "rotateto" with a colon and a number of degrees, as "rotateto:90". A value of 0 means facing from the men's line to the women's, a value of -90 means facing down the set. The program will turn either clockwise or counter-clockwise depending on which is the easiest turn, generally you should not use this when turning 180 use any of the next three.
cw rotateto
During the movement the dancer will rotate clockwise from his/her starting orientation to the specified one. The final orientation may be specified either by a degree" attribute, or by following the "rotateto" with a colon and a number of degrees, as "cw rotateto:90". A value of 0 means facing from the men's line to the women's, a value of -90 means facing down the set.
ccw rotateto
During the movement the dancer will rotate counter-clockwise from his/her starting orientation to the specified one. The final orientation may be specified either by a degree" attribute, or by following the "rotateto" with a colon and a number of degrees, as "ccw rotateto:90". A value of 0 means facing from the men's line to the women's, a value of -90 means facing down the set.
rotating
During the movement the dancer will rotate the specified number of degrees from his/her starting orientation. A negative value is clockwise. The number of degrees may be specified either by a degree" attribute, or by following the "rotating" with a colon and a number of degrees, as "rotating:90".
faceDancer
During the movement, current dancer will face the specified dancer, turning as they both move about the set. The dancer may be specified either by a "dancer" attribute, or by following the "rotating" with a colon and a number, as "faceDancer:0". Dancer 0 is M1, 1 is W1, 2 is M2, etc.
degreesNumber of degrees for one of the rotateto/rotating values of the orientation attributes.
dancerDancer number for one of the faceDancer value of the orientation attributes.
drop-right-barsIf the dancer is holding another dancer's hand in his right then he drops that hand the specified number of bars into the move (the other dancer is expected to drop hands at the same time). The number of bars need not be an integer. It may also be the special keyword "end" meaning drop at the end of the movement.
drop-left-barsIf the dancer is holding another dancer's hand in his left then he drops that hand the specified number of bars into the move (the other dancer is expected to drop hands at the same time). The number of bars need not be an integer. It may also be the special keyword "end" meaning drop at the end of the movement.
join-right

The dancer should join his right hand with the hand of another dancer. The value is a set of flags, separated by ":" followed by a dancer number and a "|" and a number of bars (or "end"). Or it may be a set of flags, followed by "star:"x,y, a "|" and a number of bars. The second form is useful when making a right hand star with an odd number of people. There's no-one directly across to join hands with, so you just put your hand in the center instead.

The flags are:

right
join your right hand to the other dancer's right hand.
left
join your right hand to the other dancer's left hand.
above
Make an arch and hold your joined hands above other dancers.
front
When promenading, hold your joined hands in front of you.
back
When courtesy turning, hold your joined hands in back of you.
ballroom
When swinging turning, hold your joined hands in ballroom position.
up
Join hands with someone in the next minorset up the hall (up may be followed by a number to join hands with someone even further away).
down
Join hands with someone in the next minorset down the hall (down may be followed by a number to join hands with someone even further away).

Examples

join-right="left:1|0"         -- join your right hand with W1's left at the start of movement
join-right="left:above:1|end" -- make an arch at the end
join-right="star:448,192|.5"  -- put your hand in the middle to make a star
join-right="left:up2:1|0"     -- join your right hand with W1 two minorsets up the hall
join-left

The dancer should join his left hand with the hand of another dancer. The options are the same as for join-right.

join-after-right-left

The dancer should join his right hand with the left hand of the specified dancer. Again a set of flags may be specified, see above.

join-after-right-right

The dancer should join his right hand with the right hand of the specified dancer. Again a set of flags may be specified, see above, but no bar ("end" will always be used).

join-after-left-right

The dancer should join his left hand with the right hand of the specified dancer. Again a set of flags may be specified, see above.

join-after-left-left

The dancer should join his left hand with the left hand of the specified dancer. Again a set of flags may be specified, see above.

Some thoughts on writing a list of moves

It is handy to have a spline editor around. Inkscape is a standard one. I happen to use fontforge myself.

Over time I have learned how to make many paths myself, without help.

Making a nearly circular quarter arc turns out to be fairly easy. Suppose a dancer is at (0,0), facing toward the women's line then

    <curveto cp1="0,32" cp2="32,64" pos="64,64" bar="1" />

Will describe a quarter arc with radius 64 units which leaves the dancer facing down the hall. cp1 should keep the x value unchanged and increase y by radius/2. cp2 should increase x by radius/2 and y radius units above the starting y value. pos should have both x and y radius units above the starting values.

Usually you want the dancer to appear to move at the same rate throughout a figure. The easiest way to do this is to enclose the figure in a bar-scale transform and set the bars of each movement to something proportional the length (don't use the length itself, I use shorts internally to hold bars, and the basic unit is 1/1000 of a bar (meaning everything is internally multiplied by 1000). The result is that something which is 128 units long has overflowed, instead I divide lengths by 100. So here's a simple lead down, assuming the dancer starts at 64,64 and ends at 320,64:

    <transform bar-scale="2" >
      <curveto cp1="64,96" cp2="96,128" pos="128,128" bar="1" join-after-left-right="1"/>
      <lineto pos="256,128" bar="1.28" drop-left-bars="end" />
      <curveto cp1="288,128" cp2="320,96" pos="320,64" bar="1" orientation="rotateto:0" />
    <transform>

It turns out that a quarter turn with radius 64 has a length of 100 units.

The <pause> element.

The dancer stands still for a specified amount of time. But s/he may still turn, take hands, drop hands etc.

The attributes are the same as those for <lineto> (except that pos should not be specified) and I'm not going to write them all out again.

The <transform> element.

<transform> has a series of arguents specifying transformations to be applied to its children. Allowed children are the same as those allowed for <role>.

I do not specify an order on these transformations so, if, for instance, you wish to rotate something and then translate it do that as two nested <transform> elements rather than a single one.

<transform translate="256,250" >
  <transform rotate="180@448,192">
    <lineto pos="320,320" bar="2" orientation="fixed" />
  </transform>
</transform>
Attributes
translateValue is x,y (if y is 0 it may be omitted).
vflipValue is y, flip about y. This will also change right hand clasps to left and vice versa.
hflipValue is x, flip about x. This will also change right hand clasps to left and vice versa, and ups to downs and vice versa.
rotateValue is degrees@x,y, rotate the specified number of degrees about a center at x,y.
scaleValue is xscale,yscale@old_center_x,old_center_y@new_center_x,new_center_y, scale by the specified amount. If omitted new_center defaults to old. If omitted old_center defaults to origin. If omitted yscale defaults to xscale.
time-scaleValue is scale, multiply all nested bar values by this amount. This has trouble with rounding errors but works on nested <if>s
bar-scaleValue is a number of bars, insure that the time taken by all nested children is this many bars. (This doesn't work if there are nested <if>s)
slideValue is x,y. Add a movement of x,y in addition to the amount specified by the children. (This doesn't work if there are nested <if>s)
unmap-handsValue is a list of dancer numbers. Ignore any hand clasps to those dancers
hand-offsetValue is n%m. Add n to each nested clasp and take the remainder on division by m to figure out the new clasp.
remap-handsValue is a comma separated list of n:m, where a clasp to dancer n is mapped to dancer m. Clasps to dancers not mentioned in the map are unmapped.
repeatValue is a number. Repeat the nested elements this many times, exactly the same each time.

The <copy> element.

The <copy> element allows you to copy moves from another role and apply a transformation to it. For instance in a modern contra dance the 1s and 2s do the same things - except rotated by 180 degrees. This can be expressed as:

    <role couple="2" sex="m" role="2s">
      <copy role="1s" rotate="180@448,192" hand-offset="2%4" />
    </role>
    <role couple="2" sex="f" role="2s">
      <copy role="1s" rotate="180@448,192" hand-offset="2%4" />
    </role>

The <copy> element takes no children and has all the attributes used by the <translate> element as well as:

Attributes
roleRequired. The name of another role in the dance, such as "1s", or the keyword "mine" which means the same role I have (but perhaps a different sex).
sexIf omitted it is assumed to be the sex of the current dancer. In a couples dance it may take the keyword 'x' which means "the sex that isn't mine". Standard values for sex are 'm', and 'f' (male/female) for couple dances and 'l', 'c', and 'r' (left, center, right) for trios.
start-barThe number of bars into the other dancer's move list at which to begin copying. If omited it will be the same number of bars as all moves in the current dancer before this point.
end-barThe number of bars into the other dancer's move list at which the copying is to stop. If omitted then the copy command must be the only child of the role, and it will copy all of the other role.

The <comp> element.

This is used for making a comparison of two dances, usually two different interpretations of a Playford dance. It splits the screen of the video in half (either horizontally or vertically) and displays one version in one half and the other version in the other. It also takes the stereo audio and plays the sound for one dance in the right channel and the other dance in the left channel.

The only child it takes is html-notes, and parses all the same attributes as <dance> with the following additional ones:

Attributes
dance1Required. The filename of a dance file.
dance2Required. The filename of a different dance file.
args1Optional. A list of arguments to pass to the d2v program when processing dance1.
args2Optional. A list of arguments to pass to the d2v program when processing dance2.
sicilian1Optional. Should dance1 be done in a sicilian circle. (yes/no)
sicilian2Optional. Should dance2 be done in a sicilian circle. (yes/no)
sourceImageA filename containing an image of Playford's original text.
image-copyrightA notice explaining how the image was licensed.
stackedvertically|horizontally. Defaults to vertically for longways dances, horizontally for circles and squares.
<?xml version="1.0" encoding="UTF-8"?>
<dances style="English Country Dance">
  <comp id="Row Well, Ye Mariners ~ Sharp/Bolton" style="Engliſh Country Dance"
      author="Playford's Engliſh Dancing Maſter" year-written="1651"
      publication="The Engliſh Dancing Maſter"
      animator="GWW" animation-date="2021-10-23"
      dance1="ECD/RowWellYeMariners-Sharp.dance"
      args1="-music Music/Fake/RowWellYeMariners-Truncated.md -minorsets 4"
      dance2="ECD/RowWellYeMariners.dance"
      args2="-minorsets 4 -sicilian"
      source-image="PlayfordImages/RowWellYeMariners.png"
      image-copyright="Image copyright © 2019 Scott Pfitzinger, released under a Creative Commons Attribution-NonCommercial license 
http://playforddances.com/dances/aye-me/"
      title-audio="AudioCalls/title -- row well ye mariners - sharp bolton.wav"
      url="https://youtu.be/ZI1FcinyUI0" >

    <html-notes><div>
	<p>Playford writes:</p>
	<blockquote>
	<table>
	<tr><td>Lead up a D. forwards and back <u>·</u> That again  <u>:</u></td>
	<td>First man two slips cross the Room one way, the woman the other <u>·</u> Back again to your places <u>:</u></td>
	<td>Fall back both <u>·</u> Meet again <u>:</u></td>
	<td>Clap both your own hands, then clap each other's right-hands against one another's; clap both your own hands again, then clap left-hands, then clap both hands again, then clap your breasts, then meet both your hands against one-another <u>·</u> The same again, only clap left-hands first <u>:</u></td></tr>
	</table>
	<hr/>
	<div>First man sides with the next wo. and his wo. with the next man, doing the like till you come to your own places, the rest following and doing the same.</div>
	</blockquote>
    </div></html-notes>

  </comp>
</dances>

An Example: Drive the Cold Winter Away

<?xml version="1.0" encoding="UTF-8"?>
<dances style="English Country Dance">
  <dance id="Drive the Cold Winter Away ~ Sharp" style="Engliſh Country Dance"
      year-written="1651" author="Playford's Engliſh Dancing Maſter"
      publication="The Engliſh Dancing Maſter"
      year-adapted="1922" adapted-by="Cecil Sharp"
      adaptor-publication="The Country Dance Book (Part 6)"
      animator="GWW" animation-date="2021-8-27"
      url="https://youtu.be/mSdzgowIUXk"
      title-audio="AudioCalls/title -- drive the cold winter away - sharp.wav"
      tags="as many as will,tags"
      original-parts="3"
      units="1024" starting-position="4 Couple Longways">

    <html-notes><div><div>Playford writes:</div>
    <blockquote>
    <table>
    <tr><td>Lead up all forward and back <u>·</u> That again <u>:</u></td>
    <td>First man back a D. then go down between the rest, and turn the last
    wo. but one, then men the last, and stay there while the other men go between
    the 2 and 3. we. and go towards the left-hand and fall down to the 1. man <u>·</u>
    First man back, then go up between the rest, turn the 2. wo. then the 1. wo.
    while the men go between the two last we.
    turn towards the right-hand, and go up to your places.</td></tr>
    <tr><td colspan="2"><hr/></td></tr>
    <tr><td>Sides all <u>·</u> That again <u>:</u> </td><td>This as before, the we. doing it <u>:</u></td></tr>
    <tr><td colspan="2"><hr/></td></tr>
    <tr><td>Arms all <u>·</u> That again <u>:</u> </td><td>As at first <u>:</u></td></tr>
    </table>
    </blockquote>
    </div></html-notes>

      <call-name name="Up a double, and back" music="I.A" audio="AudioCalls/Up a double and back.wav" bar="4" />
      <call-name name="Up a double, and back (again)" audio="AudioCalls/Up a double and back again.wav" bar="4" />
    <call-name name="M1 fall back then turn next to last woman left, then the last right, and fall back to last place on his side, while the other men cross the set between the women, cast left, and move down to invert the men's line" bar="8" music="I.B1" audio="AudioCalls/M1 fall back turn next to last woman left last right other men cross cast left move down to invert the mens line.wav" />
    <call-name name="M1 fall back then turn W2 right, W1 left, as other men cross between women, cast right and move down to their places" bar="8" music="I.B2" audio="AudioCalls/M1 fall back turn W2 right W1 left other men cross cast right muve up to places.wav" />

<!-- Part 2 -->
      <call-name name="Side right" music="II.A" audio="AudioCalls/side right.wav" bar="4" />
      <call-name name="Side left" audio="AudioCalls/side left.wav" bar="4" />
    <call-name name="W1 fall back then turn next to last man right, then the last left, and fall back to last place on her side, while the other women cross the set between the women, cast right, and move down to invert the women's line" bar="8" music="II.B1" audio="AudioCalls/W1 fall back turn next to last man right last left other women cross cast right move down to invert the womens line.wav" />
    <call-name name="W1 fall back then turn M2 left, M1 right, as other women cross between women, cast right and move down to their places" bar="8" music="II.B2" audio="AudioCalls/W1 fall back turn M2 left M1 right other women cross cast left move up to places.wav" />

<!-- Part 3 -->
      <call-name name="Arm right" music="III.A" audio="AudioCalls/Arm right.wav" bar="4" />
      <call-name name="Arm left" audio="AudioCalls/Arm left.wav" bar="4" />
    <call-name name="M1 fall back then turn next to last woman left, then the last right, and fall back to last place on his side, while the other men cross the set between the women, cast left, and move down to invert the men's line" bar="8" music="III.B1" audio="AudioCalls/M1 fall back turn next to last woman left last right other men cross cast left move down to invert the mens line.wav" />
    <call-name name="M1 fall back then turn W2 right, W1 left, as other men cross between women, cast right and move down to their places" bar="8" music="III.B2" audio="AudioCalls/M1 fall back turn W2 right W1 left other men cross cast right muve up to places.wav" />

    <role couple="1" sex="m" role="1s">
      <moveto facing="0" pos="64,64" />

        <pause bar="0.25" orientation="rotateto" degrees="90" join-right="left:1|end"/>
        <lineto bar="1.625" orientation="fixed" pos="-192,64"/>
	<pause bar=".25" />
        <lineto bar="1.625" orientation="fixed" pos="64,64"/>
        <pause bar="0.25" orientation="rotateto" degrees="0" />

        <pause bar="0.25" orientation="rotateto" degrees="90" />
        <lineto bar="1.625" orientation="fixed" pos="-192,64"/>
	<pause bar=".25" />
        <lineto bar="1.625" orientation="fixed" pos="64,64"/>
        <pause bar="0.25" orientation="rotateto" degrees="0" drop-right-bars="0"/>

      <transform bar-scale="8" >
      <lineto pos="64,-64" bar="1" orientation="fixed" />
      <lineto pos="483,138" orientation="rotateto:end" bar="2" join-after-left-left="5" />
      <curveto cp1="503,153" cp2="512,174" pos="512,192" orientation="rotateto:end" bar=".625" />
      <curveto cp1="513,227" cp2="484,256" pos="448,256" orientation="rotateto:end" bar=".75" />
      <curveto cp1="413,256" cp2="384,227" pos="384,192" orientation="forward" bar=".75" drop-left-bars=".625" />
      <curveto cp1="384,157" cp2="413,128" pos="448,128" orientation="forward" bar=".75" />

      <transform translate="256" >
      <curveto cp1="320,128" cp2="514,160" pos="514,192" join-after-right-right="7" bar="1.295" />

      <curveto cp1="514,227" cp2="543,256" pos="576,256" orientation="rotateto:end" bar=".83" />
      <curveto cp1="613,256" cp2="642,227" pos="642,192" orientation="rotateto:end" bar=".83" />
      <curveto cp1="642,177" cp2="640,170" pos="634,162" orientation="rotateto:end" bar=".27" />
      <lineto pos="576,64" orientation="cw rotateto" degrees="0" bar=".9"  drop-before-right="1"/>
      </transform>
      </transform>

      <copy role="1s" start-bar="8" end-bar="16" hflip="448" remap-hands="5:3,7:1" />

<!-- Part 2 -->
        <lineto bar="1.875" orientation="fixed" pos="0,192"/>
	<pause bar=".25" />
        <lineto bar="1.875" orientation="fixed" pos="64,64"/>

        <lineto bar="1.875" orientation="fixed" pos="128,192"/>
	<pause bar=".25" />
        <lineto bar="1.875" orientation="fixed" pos="64,64"/>

      <pause bar="8" />

      <transform bar-scale="8" >
      <pause bar="1" />
      <pause bar="2" />
      <pause bar=".625" />
      <pause bar=".75" />
      <pause bar=".75" />
      <pause bar=".75" />

      <transform translate="-256" >
      <lineto pos="256,192" orientation="fixed" join-after-right-right="1" bar="1.295" />

      <curveto bar="0.83" orientation="rotateto:end" cp1="256,227" cp2="285,256" pos="320,256"/>
      <curveto bar="0.83" orientation="rotateto:end" cp1="355,256" cp2="384,227" pos="384,192"/>
      <curveto bar="0.27" orientation="rotateto:end" cp1="384,177" cp2="382,170" pos="376,162"/>
      <lineto bar=".9" orientation="cw rotateto" degrees="0" pos="320,64" drop-right-bars="0"/>
      </transform>
      </transform>


<!-- Part 3 -->
	<lineto bar="0.75" orientation="rotateto" degrees="90" pos="64,138" join-right="right:1|end"/>
	<curveto bar="0.75" orientation="forward" cp1="34,138" cp2="10,162" pos="10,192"/>
	<curveto bar="0.75" orientation="forward" cp1="10,222" cp2="34,246" pos="64,246"/>
	<curveto bar="0.75" orientation="forward" cp1="94,246" cp2="118,222" pos="118,192"/>
	<curveto bar="0.75" orientation="forward" cp1="118,162" cp2="94,138" pos="64,138"/>
<!--	<lineto bar="0.666" orientation="rotateto" degrees="0" pos="64,64" drop-right-bars="0"/> -->

	<pause bar="0.5" orientation="cw rotateto" degrees="270" drop-right-bars="0" join-left="left:1|end"/>
	<curveto bar="0.75" orientation="forward" cp1="94,138" cp2="118,162" pos="118,192"/>
	<curveto bar="0.75" orientation="forward" cp1="118,222" cp2="94,246" pos="64,246"/>
	<curveto bar="0.75" orientation="forward" cp1="34,246" cp2="10,222" pos="10,192"/>
	<curveto bar="0.75" orientation="forward" cp1="10,162" cp2="34,138" pos="64,138"/>
	<lineto bar="0.75" orientation="rotateto" degrees="0" pos="64,64" drop-left-bars="0"/>

      <copy role="mine" start-bar="8" end-bar="24" />


      <end />
    </role>
    <role couple="1" sex="f" role="1s">
      <moveto facing="180" pos="64,320" />

        <pause bar="0.25" orientation="rotateto" degrees="90" join-left="right:0|end"/>
        <lineto bar="1.625" orientation="fixed" pos="-192,320"/>
	<pause bar=".25" />
        <lineto bar="1.625" orientation="fixed" pos="64,320"/>
        <pause bar="0.25" orientation="rotateto" degrees="180" />

        <pause bar="0.25" orientation="rotateto" degrees="90" />
        <lineto bar="1.625" orientation="fixed" pos="-192,320"/>
	<pause bar=".25" />
        <lineto bar="1.625" orientation="fixed" pos="64,320"/>
        <pause bar="0.25" orientation="rotateto" degrees="180" drop-left-bars="0" />

      <copy role="mine" sex="x" vflip="192" start-bar="32" end-bar="48" remap-hands="1:0,3:2,5:4,7:6" />

<!-- Part 2 -->
        <lineto bar="1.875" orientation="fixed" pos="128,192"/>
	<pause bar=".25" />
        <lineto bar="1.875" orientation="fixed" pos="64,320"/>

        <lineto bar="1.875" orientation="fixed" pos="0,192"/>
	<pause bar=".25" />
        <lineto bar="1.875" orientation="fixed" pos="64,320"/>

      <copy role="mine" sex="x" vflip="192" start-bar="8" end-bar="24" remap-hands="1:0,3:2,5:4,7:6" />

<!-- Part 3 -->
	<lineto bar="0.75" orientation="rotateto" degrees="-90" pos="64,246" join-right="right:0|end"/>
	<curveto bar="0.75" orientation="forward" cp1="94,246" cp2="118,222" pos="118,192"/>
	<curveto bar="0.75" orientation="forward" cp1="118,162" cp2="94,138" pos="64,138"/>
	<curveto bar="0.75" orientation="forward" cp1="34,138" cp2="10,162" pos="10,192"/>
	<curveto bar="0.75" orientation="forward" cp1="10,222" cp2="34,246" pos="64,246"/>
<!--	<lineto bar="0.666" orientation="rotateto" degrees="180" pos="64,320" drop-right-bars="0"/> -->

	<pause bar="0.5" orientation="cw rotateto" degrees="90" drop-right-bars="0" join-left="left:0|end"/>
	<curveto bar="0.75" orientation="forward" cp1="34,246" cp2="10,222" pos="10,192"/>
	<curveto bar="0.75" orientation="forward" cp1="10,162" cp2="34,138" pos="64,138"/>
	<curveto bar="0.75" orientation="forward" cp1="94,138" cp2="118,162" pos="118,192"/>
	<curveto bar="0.75" orientation="forward" cp1="118,222" cp2="94,246" pos="64,246"/>
	<lineto bar="0.75" orientation="rotateto" degrees="180" pos="64,320" drop-left-bars="0"/>

      <copy role="mine" start-bar="8" end-bar="24" />

      <end />
    </role>
    <role couple="2" sex="m" role="2s">
      <moveto facing="0" pos="320,64" />

      <copy role="1s" end-bar="8" translate="256" hand-offset="2%8" />

      <transform bar-scale="8" >
      <lineto pos="192,320" bar="3" orientation="fixed" />
      <curveto cp1="192,384" cp2="128,448" pos="64,448" bar="2" />
      <curveto cp1="0,448" cp2="-64,384" pos="-64,320" bar="2" />
      <lineto pos="-64,192" bar="1.28" />
      <curveto cp1="-64,128" cp2="0,64" pos="64,64" bar="2" />
      <lineto pos="512,64" bar="4.48" />
      <lineto pos="576,64" bar=".64" orientation="rotateto:0" />
      </transform>

      <copy role="2s" start-bar="8" end-bar="16" hflip="448" />

<!-- Part 2 -->
      <copy role="1s" end-bar="+8" translate="256" hand-offset="2%8" />

      <pause bar="8" />

      <transform bar-scale="8" >
      <pause bar="1" />
      <pause bar="1" />
      <lineto pos="483,138" orientation="rotateto:end" bar="1" join-after-left-left="1" />
      <curveto cp1="503,153" cp2="513,174" pos="513,192" orientation="rotateto:end" bar=".625" />
      <curveto cp1="513,227" cp2="484,256" pos="449,256" orientation="rotateto:end" bar=".75" />
      <curveto cp1="425,256" cp2="404,243" pos="393,223" orientation="rotateto:end" bar=".625" />
      <lineto pos="320,64" orientation="ccw rotateto:0" bar="1" drop-before-left="1" />

      <pause bar="4" />
      </transform>


<!-- Part 3 -->
      <copy role="1s" end-bar="+8" translate="256" hand-offset="2%8" />

      <copy role="mine" start-bar="8" end-bar="24" />


      <end />
    </role>
    <role couple="2" sex="f" role="2s">
      <moveto facing="180" pos="320,320" />

      <copy role="1s" end-bar="+8" translate="256" hand-offset="2%8" />

      <copy role="mine" sex="x" vflip="192" start-bar="32" end-bar="48" remap-hands="1:0,3:2,5:4,7:6" />

<!-- Part 2 -->
      <copy role="1s" end-bar="+8" translate="256" hand-offset="2%8" />

      <copy role="mine" sex="x" vflip="192" start-bar="8" end-bar="24" remap-hands="1:0,3:2,5:4,7:6" />

<!-- Part 3 -->
      <copy role="1s" end-bar="+8" translate="256" hand-offset="2%8" />

      <copy role="mine" start-bar="8" end-bar="24" />


      <end />
    </role>
    <role couple="3" sex="m" role="3s">
      <moveto facing="0" pos="576,64" />

      <copy role="2s" end-bar="+8" translate="256" hand-offset="2%8" />

      <transform bar-scale="8" >
      <transform translate="256" >
      <lineto pos="192,320" bar="3" orientation="fixed" />
      <curveto cp1="192,384" cp2="128,448" pos="64,448" bar="2" />
      </transform>
      <lineto pos="64,448" bar="2.56" />
      <curveto cp1="0,448" cp2="-64,384" pos="-64,320" bar="2" />
      <lineto pos="-64,192" bar="1.28" />
      <curveto cp1="-64,128" cp2="0,64" pos="64,64" bar="2" />
      <lineto pos="256,64" bar="1.92" />
      <lineto pos="320,64" bar=".64" orientation="rotateto:0" />
      </transform>

      <copy role="mine" start-bar="8" end-bar="16" hflip="448" />


<!-- Part 2 -->
      <copy role="2s" end-bar="+8" translate="256" hand-offset="2%8" />

      <transform bar-scale="8" >
      <pause bar="1" />
      <pause bar="1" />
      <lineto pos="410,138" orientation="rotateto" degrees="55" bar="1.2" join-after-right-right="1" />
      <curveto cp1="391,152" cp2="384,168" pos="384,192" orientation="rotateto:end" bar=".45" />
      <curveto cp1="384,227" cp2="413,256" pos="448,256" orientation="rotateto:end" bar=".7" />
      <curveto cp1="478,256" cp2="497,236" pos="506,221" orientation="rotateto:end" bar=".45" />
      <lineto pos="576,64" orientation="cw rotateto" degrees="0" bar="1.2" drop-before-right="1" />

      <pause bar="4" />
      </transform>

      <pause bar="8" />

<!-- Part 3 -->
      <copy role="2s" end-bar="+8" translate="256" hand-offset="2%8" />

      <copy role="mine" start-bar="8" end-bar="24" />


      <end />
    </role>
    <role couple="3" sex="f" role="3s">
      <moveto facing="180" pos="576,320" />

      <copy role="2s" end-bar="+8" translate="256" hand-offset="2%8" />

      <copy role="mine" sex="x" vflip="192" start-bar="32" end-bar="48" remap-hands="1:0,3:2,5:4,7:6" />

<!-- Part 2 -->
      <copy role="2s" end-bar="+8" translate="256" hand-offset="2%8" />

      <copy role="mine" sex="x" vflip="192" start-bar="8" end-bar="24" remap-hands="1:0,3:2,5:4,7:6" />

<!-- Part 3 -->
      <copy role="2s" end-bar="+8" translate="256" hand-offset="2%8" />

      <copy role="mine" start-bar="8" end-bar="24" />


      <end />
    </role>
    <role couple="4" sex="m" role="4s">
      <moveto facing="0" pos="832,64" />

      <copy role="3s" end-bar="+8" translate="256" hand-offset="2%8" />

      <transform bar-scale="8" >
      <transform translate="512" >
      <lineto pos="192,320" bar="3" orientation="fixed" />
      <curveto cp1="192,384" cp2="128,448" pos="64,448" bar="2" />
      </transform>
      <lineto pos="64,448" bar="5.12" />
      <curveto cp1="0,448" cp2="-64,384" pos="-64,320" bar="2" />
      <lineto pos="-64,192" bar="1.28" />
      <curveto cp1="-64,128" cp2="0,64" pos="64,64" bar="2" orientation="ccw rotateto:0" />
      </transform>

      <copy role="mine" start-bar="8" end-bar="16" hflip="448" />

<!-- Part 2 -->
      <copy role="3s" end-bar="+8" translate="256" hand-offset="2%8" />

      <transform bar-scale="8" >
      <pause bar="1" />
      <pause bar="2" />
      <pause bar=".625" />
      <pause bar=".75" />
      <pause bar=".75" />
      <pause bar=".75" />

      <transform translate="256" >
      <lineto pos="640,192" orientation="fixed" join-after-left-left="1" bar="1.295" />

      <curveto bar="0.83" orientation="rotateto" degrees="end" cp1="640,227" cp2="611,256" pos="576,256"/>
      <curveto bar="0.83" orientation="rotateto" degrees="end" cp1="541,256" cp2="512,227" pos="512,192"/>
      <curveto bar="0.27" orientation="rotateto" degrees="end" cp1="512,177" cp2="514,170" pos="520,162"/>
      <lineto bar="0.9" orientation="ccw rotateto" degrees="0" pos="576,64" drop-left-bars="0"/>
      </transform>
      </transform>

      <pause bar="8" />

<!-- Part 3 -->
      <copy role="3s" end-bar="+8" translate="256" hand-offset="2%8" />

      <copy role="mine" start-bar="8" end-bar="24" />


      <end />
    </role>
    <role couple="4" sex="f" role="4s">
      <moveto facing="180" pos="832,320" />

      <copy role="3s" end-bar="+8" translate="256" hand-offset="2%8" />

      <copy role="mine" sex="x" vflip="192" start-bar="32" end-bar="48" remap-hands="1:0,3:2,5:4,7:6" />

<!-- Part 2 -->
      <copy role="3s" end-bar="+8" translate="256" hand-offset="2%8" />

      <copy role="mine" sex="x" vflip="192" start-bar="8" end-bar="24" remap-hands="1:0,3:2,5:4,7:6" />

<!-- Part 3 -->
      <copy role="3s" end-bar="+8" translate="256" hand-offset="2%8" />

      <copy role="mine" start-bar="8" end-bar="24" />


      <end />
    </role>
  </dance>
</dances>