static void Main(string[] args)
{
if (args.Length != 1)
{
Console.WriteLine("Usage AlphaTab.ScoreDump.exe Path");
return;
}
// we need to use english culture to have correct string variants of floating points (dot as decimal separator)
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-us");
// load score
Score score = ScoreLoader.LoadScore(args[0]);
// render score with svg engine
Settings settings = Settings.Defaults;
settings.Engine = "svg";
ScoreRenderer renderer = new ScoreRenderer(settings);
// get iterate tracks
for (int i = 0; i < 1; i++)
{
Track track = score.Tracks[i];
// render track
Console.WriteLine("Rendering track {0} - {1}", i + 1, track.Name);
var totalWidth = 0;
var totalHeight = 0;
XDocument merged = null;
var currentY = 0f;
renderer.PreRender += r =>
{
// append the svg close tag which would be part of the RenderFinished event
var svgString = r.RenderResult.ToString() + "</svg>";
merged = XDocument.Parse(svgString);
};
renderer.PartialRenderFinished += r =>
{
var subSvg = XDocument.Parse(r.RenderResult.ToString());
var subRoot = subSvg.Root;
subRoot.SetAttributeValue("x", "0px");
subRoot.SetAttributeValue("y", ((int)currentY) + "px");
merged.Root.Add(subRoot);
currentY += r.Height;
};
renderer.RenderFinished += r =>
{
totalWidth = (int)r.TotalWidth;
totalHeight = (int)r.TotalHeight;
};
renderer.Render(track);
merged.Root.SetAttributeValue("width", totalWidth + "px");
merged.Root.SetAttributeValue("height", totalHeight + "px");
var svg = new StringWriter();
var xmlWriter = new EntitizingXmlWriter(svg);
merged.Save(xmlWriter);
FileInfo info = new FileInfo(args[0]);
string path = Path.Combine(info.DirectoryName, Path.GetFileNameWithoutExtension(info.Name) + "-" + i + ".svg");
File.WriteAllText(path, svg.ToString());
}
}