static TypedMarkupParser() {
			defaultImplementers = new Dictionary<string, ITypedMarkupParserImpl>();
			defaultImplementers["str"]  = new StringMarkupParser();
			defaultImplementers["int"]  = new IntMarkupParser();
			defaultImplementers["pos"]  = new PositionMarkupParser();
			defaultImplementers["bool"] = new BoolMarkupParser();
			defaultImplementers["code"] = new CodeMarkupParser();
		}
		public void TestParse_ValidArrayValuesWork() {
			var actual = new PositionMarkupParser().Parse("pos", true, "", null);
			Assert.AreEqual("new Position[] { }", actual.InitializerString);
			AssertPositionsEqual(new Position[0], (Position[])actual.ValueRetriever());

			actual = new PositionMarkupParser().Parse("pos", true, "lt(23, 45)", null);
			Assert.AreEqual("new Position[] { PositionHelper.LeftTop(23, 45) }", actual.InitializerString);
			AssertPositionsEqual(new Position[] { PositionHelper.LeftTop(23, 45) }, (Position[])actual.ValueRetriever());

			actual = new PositionMarkupParser().Parse("pos", true, "np | lt(23, 45) | fixed", null);
			Assert.AreEqual("new Position[] { PositionHelper.NotPositioned, PositionHelper.LeftTop(23, 45), PositionHelper.Fixed }", actual.InitializerString);
			AssertPositionsEqual(new Position[] { PositionHelper.NotPositioned, PositionHelper.LeftTop(23, 45), PositionHelper.Fixed }, (Position[])actual.ValueRetriever());
		}
		public void TestParse_LeftTopWorks() {
			var actual = new PositionMarkupParser().Parse("pos", false, "lt(42, 53)", null);
			Assert.AreEqual("PositionHelper.LeftTop(42, 53)", actual.InitializerString);
			AssertPositionsEqual(PositionHelper.LeftTop(42, 53), (Position)actual.ValueRetriever());
		}
		public void TestParse_FixedWorks() {
			var actual = new PositionMarkupParser().Parse("pos", false, "fixed", null);
			Assert.AreEqual("PositionHelper.Fixed", actual.InitializerString);
			AssertPositionsEqual(PositionHelper.Fixed, (Position)actual.ValueRetriever());
		}