<blocksapp="Snap! 4.0, http://snap.berkeley.edu"version="1"><block-definitions="label %'text' of size %'size'"type="command"category="pen"><commentx="0"y="0"w="90"collapsed="false">LABEL will stamp text on the stage at the given font size. The direction of the text is the direction the sprite is facing, and color will match the pen color.</comment><header></header><code></code><inputs><inputtype="%txt">Hello!</input><inputtype="%n">12</input></inputs><script><blocks="doRun"><blocks="reportJSFunction"><list><l>text</l><l>size</l></list><l>var stage = this.parentThatIsA(StageMorph),
 context = stage.penTrails().getContext('2d'),
 rotation = radians(this.direction() - 90),
 trans = new Point(
 this.center().x - stage.left(),
 this.center().y - stage.top()
 ),
 isWarped = this.Warped,
 len,
 pos;

if (isWarped) {endWarp(); }
context.save();
context.font = size + 'px monospace';
context.textAlign = 'left';
context.textBaseline = 'alphabetic';
context.fillStyle = this.color.toString();
len = context.measureText(text).width;
trans = trans.multiplyBy(1 / stage.scale);
context.translate(trans.x, trans.y);
context.rotate(rotation);
context.fillText(text, 0, 0);
context.translate(-trans.x, -trans.y);
context.restore();
pos = new Point(
 len * Math.sin(radians(this.direction())),
 len * Math.cos(radians(this.direction())));
pos = pos.add(new Point(this.xPosition(), this.yPosition()));
this.gotoXY(pos.x, pos.y, false);
this.changed();
if (isWarped) {this.startWarp(); }
stage.changed();</l></block><list><blockvar="text"/><blockvar="size"/></list></block></script></block-definition><block-definitions="map %'function' over %'lists'"type="reporter"category="lists"><header></header><code></code><inputs><inputtype="%repRing"></input><inputtype="%mult%l"></input></inputs><script><blocks="doWarp"><script><blocks="doDeclareVariables"><list><l>mapone</l><l>mapmany</l></list></block><blocks="doSetVar"><l>mapone</l><blocks="reifyScript"><script><blocks="doIf"><custom-blocks="empty? %l"><blockvar="data"/></custom-block><script><blocks="doReport"><blocks="reportNewList"><list></list></block></block></script></block><blocks="doReport"><blocks="reportCONS"><blocks="evaluate"><blockvar="function"/><list><blocks="reportListItem"><l>1</l><blockvar="data"/></block></list></block><blocks="evaluate"><blockvar="mapone"/><list><blocks="reportCDR"><blockvar="data"/></block></list></block></block></block></script><list><l>data</l></list></block></block><blocks="doSetVar"><l>mapmany</l><blocks="reifyScript"><script><blocks="doIf"><custom-blocks="empty? %l"><blocks="reportListItem"><l>1</l><blockvar="data lists"/></block></custom-block><script><blocks="doReport"><blocks="reportNewList"><list></list></block></block></script></block><blocks="doReport"><blocks="reportCONS"><blocks="evaluate"><blockvar="function"/><custom-blocks="map %repRing over %mult%l"><blocks="reifyReporter"><autolambda><blocks="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><list><blockvar="data lists"/></list></custom-block></block><blocks="evaluate"><blockvar="mapmany"/><list><custom-blocks="map %repRing over %mult%l"><blocks="reifyReporter"><autolambda><blocks="reportCDR"><l/></block></autolambda><list></list></block><list><blockvar="data lists"/></list></custom-block></list></block></block></block></script><list><l>data lists</l></list></block></block><blocks="doIfElse"><custom-blocks="empty? %l"><blocks="reportCDR"><blockvar="lists"/></block></custom-block><script><blocks="doReport"><blocks="evaluate"><blockvar="mapone"/><list><blocks="reportListItem"><l>1</l><blockvar="lists"/></block></list></block></block></script><script><blocks="doReport"><blocks="evaluate"><blockvar="mapmany"/><list><blockvar="lists"/></list></block></block></script></block></script></b